diff --git a/assets/index.es-ce8b146a.js b/assets/index.es-10d444b7.js similarity index 99% rename from assets/index.es-ce8b146a.js rename to assets/index.es-10d444b7.js index e5a3d2a..7cb2fe4 100644 --- a/assets/index.es-ce8b146a.js +++ b/assets/index.es-10d444b7.js @@ -1,4 +1,4 @@ -import{c as Je,g as Do}from"./main-800d5aa8.js";import{_ as Ha}from"./jspdf.es.min-429c6509.js";var ct=function(a){return a&&a.Math===Math&&a},U=ct(typeof globalThis=="object"&&globalThis)||ct(typeof window=="object"&&window)||ct(typeof self=="object"&&self)||ct(typeof Je=="object"&&Je)||ct(typeof Je=="object"&&Je)||function(){return this}()||Function("return this")(),ut={},L=function(a){try{return!!a()}catch{return!0}},Rl=L,ce=!Rl(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Il=L,br=!Il(function(){var a=(function(){}).bind();return typeof a!="function"||a.hasOwnProperty("prototype")}),Nl=br,Ht=Function.prototype.call,Y=Nl?Ht.bind(Ht):function(){return Ht.apply(Ht,arguments)},Vo={},Lo={}.propertyIsEnumerable,ko=Object.getOwnPropertyDescriptor,Ml=ko&&!Lo.call({1:2},1);Vo.f=Ml?function(e){var t=ko(this,e);return!!t&&t.enumerable}:Lo;var xr=function(a,e){return{enumerable:!(a&1),configurable:!(a&2),writable:!(a&4),value:e}},Bo=br,Fo=Function.prototype,Ya=Fo.call,_l=Bo&&Fo.bind.bind(Ya,Ya),k=Bo?_l:function(a){return function(){return Ya.apply(a,arguments)}},jo=k,Dl=jo({}.toString),Vl=jo("".slice),Fe=function(a){return Vl(Dl(a),8,-1)},Ll=k,kl=L,Bl=Fe,Jr=Object,Fl=Ll("".split),Uo=kl(function(){return!Jr("z").propertyIsEnumerable(0)})?function(a){return Bl(a)==="String"?Fl(a,""):Jr(a)}:Jr,je=function(a){return a==null},jl=je,Ul=TypeError,ge=function(a){if(jl(a))throw new Ul("Can't call method on "+a);return a},zl=Uo,Gl=ge,At=function(a){return zl(Gl(a))},Xa=typeof document=="object"&&document.all,Hl=typeof Xa>"u"&&Xa!==void 0,zo={all:Xa,IS_HTMLDDA:Hl},Go=zo,Yl=Go.all,D=Go.IS_HTMLDDA?function(a){return typeof a=="function"||a===Yl}:function(a){return typeof a=="function"},yn=D,Ho=zo,Xl=Ho.all,Te=Ho.IS_HTMLDDA?function(a){return typeof a=="object"?a!==null:yn(a)||a===Xl}:function(a){return typeof a=="object"?a!==null:yn(a)},ea=U,Wl=D,ql=function(a){return Wl(a)?a:void 0},Ue=function(a,e){return arguments.length<2?ql(ea[a]):ea[a]&&ea[a][e]},Ql=k,Tr=Ql({}.isPrototypeOf),Sr=typeof navigator<"u"&&String(navigator.userAgent)||"",Yo=U,ta=Sr,mn=Yo.process,bn=Yo.Deno,xn=mn&&mn.versions||bn&&bn.version,Tn=xn&&xn.v8,ue,cr;Tn&&(ue=Tn.split("."),cr=ue[0]>0&&ue[0]<4?1:+(ue[0]+ue[1]));!cr&&ta&&(ue=ta.match(/Edge\/(\d+)/),(!ue||ue[1]>=74)&&(ue=ta.match(/Chrome\/(\d+)/),ue&&(cr=+ue[1])));var Oi=cr,Sn=Oi,Kl=L,Zl=U,Jl=Zl.String,Xo=!!Object.getOwnPropertySymbols&&!Kl(function(){var a=Symbol("symbol detection");return!Jl(a)||!(Object(a)instanceof Symbol)||!Symbol.sham&&Sn&&Sn<41}),eh=Xo,Wo=eh&&!Symbol.sham&&typeof Symbol.iterator=="symbol",th=Ue,rh=D,ah=Tr,ih=Wo,nh=Object,qo=ih?function(a){return typeof a=="symbol"}:function(a){var e=th("Symbol");return rh(e)&&ah(e.prototype,nh(a))},sh=String,Or=function(a){try{return sh(a)}catch{return"Object"}},oh=D,uh=Or,lh=TypeError,Se=function(a){if(oh(a))return a;throw new lh(uh(a)+" is not a function")},hh=Se,vh=je,lt=function(a,e){var t=a[e];return vh(t)?void 0:hh(t)},ra=Y,aa=D,ia=Te,fh=TypeError,ch=function(a,e){var t,r;if(e==="string"&&aa(t=a.toString)&&!ia(r=ra(t,a))||aa(t=a.valueOf)&&!ia(r=ra(t,a))||e!=="string"&&aa(t=a.toString)&&!ia(r=ra(t,a)))return r;throw new fh("Can't convert object to primitive value")},Qo={exports:{}},On=U,gh=Object.defineProperty,Ei=function(a,e){try{gh(On,a,{value:e,configurable:!0,writable:!0})}catch{On[a]=e}return e},dh=U,ph=Ei,En="__core-js_shared__",yh=dh[En]||ph(En,{}),$i=yh,$n=$i;(Qo.exports=function(a,e){return $n[a]||($n[a]=e!==void 0?e:{})})("versions",[]).push({version:"3.34.0",mode:"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.34.0/LICENSE",source:"https://github.com/zloirock/core-js"});var wi=Qo.exports,mh=ge,bh=Object,Er=function(a){return bh(mh(a))},xh=k,Th=Er,Sh=xh({}.hasOwnProperty),le=Object.hasOwn||function(e,t){return Sh(Th(e),t)},Oh=k,Eh=0,$h=Math.random(),wh=Oh(1 .toString),Ko=function(a){return"Symbol("+(a===void 0?"":a)+")_"+wh(++Eh+$h,36)},Ch=U,Ah=wi,wn=le,Ph=Ko,Rh=Xo,Ih=Wo,et=Ch.Symbol,na=Ah("wks"),Nh=Ih?et.for||et:et&&et.withoutSetter||Ph,G=function(a){return wn(na,a)||(na[a]=Rh&&wn(et,a)?et[a]:Nh("Symbol."+a)),na[a]},Mh=Y,Cn=Te,An=qo,_h=lt,Dh=ch,Vh=G,Lh=TypeError,kh=Vh("toPrimitive"),Bh=function(a,e){if(!Cn(a)||An(a))return a;var t=_h(a,kh),r;if(t){if(e===void 0&&(e="default"),r=Mh(t,a,e),!Cn(r)||An(r))return r;throw new Lh("Can't convert object to primitive value")}return e===void 0&&(e="number"),Dh(a,e)},Fh=Bh,jh=qo,Ci=function(a){var e=Fh(a,"string");return jh(e)?e:e+""},Uh=U,Pn=Te,Wa=Uh.document,zh=Pn(Wa)&&Pn(Wa.createElement),$r=function(a){return zh?Wa.createElement(a):{}},Gh=ce,Hh=L,Yh=$r,Zo=!Gh&&!Hh(function(){return Object.defineProperty(Yh("div"),"a",{get:function(){return 7}}).a!==7}),Xh=ce,Wh=Y,qh=Vo,Qh=xr,Kh=At,Zh=Ci,Jh=le,ev=Zo,Rn=Object.getOwnPropertyDescriptor;ut.f=Xh?Rn:function(e,t){if(e=Kh(e),t=Zh(t),ev)try{return Rn(e,t)}catch{}if(Jh(e,t))return Qh(!Wh(qh.f,e,t),e[t])};var de={},tv=ce,rv=L,Jo=tv&&rv(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),av=Te,iv=String,nv=TypeError,K=function(a){if(av(a))return a;throw new nv(iv(a)+" is not an object")},sv=ce,ov=Zo,uv=Jo,Yt=K,In=Ci,lv=TypeError,sa=Object.defineProperty,hv=Object.getOwnPropertyDescriptor,oa="enumerable",ua="configurable",la="writable";de.f=sv?uv?function(e,t,r){if(Yt(e),t=In(t),Yt(r),typeof e=="function"&&t==="prototype"&&"value"in r&&la in r&&!r[la]){var i=hv(e,t);i&&i[la]&&(e[t]=r.value,r={configurable:ua in r?r[ua]:i[ua],enumerable:oa in r?r[oa]:i[oa],writable:!1})}return sa(e,t,r)}:sa:function(e,t,r){if(Yt(e),t=In(t),Yt(r),ov)try{return sa(e,t,r)}catch{}if("get"in r||"set"in r)throw new lv("Accessors not supported");return"value"in r&&(e[t]=r.value),e};var vv=ce,fv=de,cv=xr,Pt=vv?function(a,e,t){return fv.f(a,e,cv(1,t))}:function(a,e,t){return a[e]=t,a},eu={exports:{}},qa=ce,gv=le,tu=Function.prototype,dv=qa&&Object.getOwnPropertyDescriptor,Ai=gv(tu,"name"),pv=Ai&&(function(){}).name==="something",yv=Ai&&(!qa||qa&&dv(tu,"name").configurable),wr={EXISTS:Ai,PROPER:pv,CONFIGURABLE:yv},mv=k,bv=D,Qa=$i,xv=mv(Function.toString);bv(Qa.inspectSource)||(Qa.inspectSource=function(a){return xv(a)});var Pi=Qa.inspectSource,Tv=U,Sv=D,Nn=Tv.WeakMap,Ov=Sv(Nn)&&/native code/.test(String(Nn)),Ev=wi,$v=Ko,Mn=Ev("keys"),Ri=function(a){return Mn[a]||(Mn[a]=$v(a))},Ii={},wv=Ov,ru=U,Cv=Te,Av=Pt,ha=le,va=$i,Pv=Ri,Rv=Ii,_n="Object already initialized",Ka=ru.TypeError,Iv=ru.WeakMap,gr,$t,dr,Nv=function(a){return dr(a)?$t(a):gr(a,{})},Mv=function(a){return function(e){var t;if(!Cv(e)||(t=$t(e)).type!==a)throw new Ka("Incompatible receiver, "+a+" required");return t}};if(wv||va.state){var fe=va.state||(va.state=new Iv);fe.get=fe.get,fe.has=fe.has,fe.set=fe.set,gr=function(a,e){if(fe.has(a))throw new Ka(_n);return e.facade=a,fe.set(a,e),e},$t=function(a){return fe.get(a)||{}},dr=function(a){return fe.has(a)}}else{var Xe=Pv("state");Rv[Xe]=!0,gr=function(a,e){if(ha(a,Xe))throw new Ka(_n);return e.facade=a,Av(a,Xe,e),e},$t=function(a){return ha(a,Xe)?a[Xe]:{}},dr=function(a){return ha(a,Xe)}}var Cr={set:gr,get:$t,has:dr,enforce:Nv,getterFor:Mv},Ni=k,_v=L,Dv=D,Xt=le,Za=ce,Vv=wr.CONFIGURABLE,Lv=Pi,au=Cr,kv=au.enforce,Bv=au.get,Dn=String,or=Object.defineProperty,Fv=Ni("".slice),jv=Ni("".replace),Uv=Ni([].join),zv=Za&&!_v(function(){return or(function(){},"length",{value:8}).length!==8}),Gv=String(String).split("String"),Hv=eu.exports=function(a,e,t){Fv(Dn(e),0,7)==="Symbol("&&(e="["+jv(Dn(e),/^Symbol\(([^)]*)\)/,"$1")+"]"),t&&t.getter&&(e="get "+e),t&&t.setter&&(e="set "+e),(!Xt(a,"name")||Vv&&a.name!==e)&&(Za?or(a,"name",{value:e,configurable:!0}):a.name=e),zv&&t&&Xt(t,"arity")&&a.length!==t.arity&&or(a,"length",{value:t.arity});try{t&&Xt(t,"constructor")&&t.constructor?Za&&or(a,"prototype",{writable:!1}):a.prototype&&(a.prototype=void 0)}catch{}var r=kv(a);return Xt(r,"source")||(r.source=Uv(Gv,typeof e=="string"?e:"")),a};Function.prototype.toString=Hv(function(){return Dv(this)&&Bv(this).source||Lv(this)},"toString");var iu=eu.exports,Yv=D,Xv=de,Wv=iu,qv=Ei,ze=function(a,e,t,r){r||(r={});var i=r.enumerable,n=r.name!==void 0?r.name:e;if(Yv(t)&&Wv(t,n,r),r.global)i?a[e]=t:qv(e,t);else{try{r.unsafe?a[e]&&(i=!0):delete a[e]}catch{}i?a[e]=t:Xv.f(a,e,{value:t,enumerable:!1,configurable:!r.nonConfigurable,writable:!r.nonWritable})}return a},nu={},Qv=Math.ceil,Kv=Math.floor,Zv=Math.trunc||function(e){var t=+e;return(t>0?Kv:Qv)(t)},Jv=Zv,Ar=function(a){var e=+a;return e!==e||e===0?0:Jv(e)},ef=Ar,tf=Math.max,rf=Math.min,su=function(a,e){var t=ef(a);return t<0?tf(t+e,0):rf(t,e)},af=Ar,nf=Math.min,ht=function(a){return a>0?nf(af(a),9007199254740991):0},sf=ht,Pr=function(a){return sf(a.length)},of=At,uf=su,lf=Pr,Vn=function(a){return function(e,t,r){var i=of(e),n=lf(i),o=uf(r,n),s;if(a&&t!==t){for(;n>o;)if(s=i[o++],s!==s)return!0}else for(;n>o;o++)if((a||o in i)&&i[o]===t)return a||o||0;return!a&&-1}},ou={includes:Vn(!0),indexOf:Vn(!1)},hf=k,fa=le,vf=At,ff=ou.indexOf,cf=Ii,Ln=hf([].push),uu=function(a,e){var t=vf(a),r=0,i=[],n;for(n in t)!fa(cf,n)&&fa(t,n)&&Ln(i,n);for(;e.length>r;)fa(t,n=e[r++])&&(~ff(i,n)||Ln(i,n));return i},Mi=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],gf=uu,df=Mi,pf=df.concat("length","prototype");nu.f=Object.getOwnPropertyNames||function(e){return gf(e,pf)};var lu={};lu.f=Object.getOwnPropertySymbols;var yf=Ue,mf=k,bf=nu,xf=lu,Tf=K,Sf=mf([].concat),Of=yf("Reflect","ownKeys")||function(e){var t=bf.f(Tf(e)),r=xf.f;return r?Sf(t,r(e)):t},kn=le,Ef=Of,$f=ut,wf=de,Cf=function(a,e,t){for(var r=Ef(e),i=wf.f,n=$f.f,o=0;of;f++)if(v=y(a[f]),v&&gs(ps,v))return v;return new hr(!1)}l=$d(a,h)}for(d=n?a.next:l.next;!(g=xd(d,l)).done;){try{v=y(g.value)}catch(x){ds(l,"throw",x)}if(typeof v=="object"&&v&&gs(ps,v))return v}return new hr(!1)},Ad=G,ju=Ad("iterator"),Uu=!1;try{var Pd=0,ys={next:function(){return{done:!!Pd++}},return:function(){Uu=!0}};ys[ju]=function(){return this},Array.from(ys,function(){throw 2})}catch{}var Rd=function(a,e){try{if(!e&&!Uu)return!1}catch{return!1}var t=!1;try{var r={};r[ju]=function(){return{next:function(){return{done:t=!0}}}},a(r)}catch{}return t},Id=Ir,Nd=Rd,Md=Mt.CONSTRUCTOR,zu=Md||!Nd(function(a){Id.all(a).then(void 0,function(){})}),_d=ee,Dd=Y,Vd=Se,Ld=vt,kd=Bi,Bd=Fu,Fd=zu;_d({target:"Promise",stat:!0,forced:Fd},{all:function(e){var t=this,r=Ld.f(t),i=r.resolve,n=r.reject,o=kd(function(){var s=Vd(t.resolve),u=[],l=0,h=1;Bd(e,function(f){var c=l++,v=!1;h++,Dd(s,t,f).then(function(d){v||(v=!0,u[c]=d,--h||i(u))},n)}),--h||i(u)});return o.error&&n(o.value),r.promise}});var jd=ee,Ud=Mt.CONSTRUCTOR,si=Ir,zd=Ue,Gd=D,Hd=ze,ms=si&&si.prototype;jd({target:"Promise",proto:!0,forced:Ud,real:!0},{catch:function(a){return this.then(void 0,a)}});if(Gd(si)){var bs=zd("Promise").prototype.catch;ms.catch!==bs&&Hd(ms,"catch",bs,{unsafe:!0})}var Yd=ee,Xd=Y,Wd=Se,qd=vt,Qd=Bi,Kd=Fu,Zd=zu;Yd({target:"Promise",stat:!0,forced:Zd},{race:function(e){var t=this,r=qd.f(t),i=r.reject,n=Qd(function(){var o=Wd(t.resolve);Kd(e,function(s){Xd(o,t,s).then(r.resolve,i)})});return n.error&&i(n.value),r.promise}});var Jd=ee,ep=Y,tp=vt,rp=Mt.CONSTRUCTOR;Jd({target:"Promise",stat:!0,forced:rp},{reject:function(e){var t=tp.f(this);return ep(t.reject,void 0,e),t.promise}});var ap=K,ip=Te,np=vt,sp=function(a,e){if(ap(a),ip(e)&&e.constructor===a)return e;var t=np.f(a),r=t.resolve;return r(e),t.promise},op=ee,up=Ue,lp=Mt.CONSTRUCTOR,hp=sp;up("Promise");op({target:"Promise",stat:!0,forced:lp},{resolve:function(e){return hp(this,e)}});function xs(a,e,t,r,i,n,o){try{var s=a[n](o),u=s.value}catch(l){t(l);return}s.done?e(u):Promise.resolve(u).then(r,i)}function xe(a){return function(){var e=this,t=arguments;return new Promise(function(r,i){var n=a.apply(e,t);function o(u){xs(n,r,i,o,s,"next",u)}function s(u){xs(n,r,i,o,s,"throw",u)}o(void 0)})}}var vp=_i,fp=String,pe=function(a){if(vp(a)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return fp(a)},cp=K,Gu=function(){var a=cp(this),e="";return a.hasIndices&&(e+="d"),a.global&&(e+="g"),a.ignoreCase&&(e+="i"),a.multiline&&(e+="m"),a.dotAll&&(e+="s"),a.unicode&&(e+="u"),a.unicodeSets&&(e+="v"),a.sticky&&(e+="y"),e},Gi=L,gp=U,Hi=gp.RegExp,Yi=Gi(function(){var a=Hi("a","y");return a.lastIndex=2,a.exec("abcd")!==null}),dp=Yi||Gi(function(){return!Hi("a","y").sticky}),pp=Yi||Gi(function(){var a=Hi("^r","gy");return a.lastIndex=2,a.exec("str")!==null}),Hu={BROKEN_CARET:pp,MISSED_STICKY:dp,UNSUPPORTED_Y:Yi},Yu={},yp=uu,mp=Mi,bp=Object.keys||function(e){return yp(e,mp)},xp=ce,Tp=Jo,Sp=de,Op=K,Ep=At,$p=bp;Yu.f=xp&&!Tp?Object.defineProperties:function(e,t){Op(e);for(var r=Ep(t),i=$p(t),n=i.length,o=0,s;n>o;)Sp.f(e,s=i[o++],r[s]);return e};var wp=K,Cp=Yu,Ts=Mi,Ap=Ii,Pp=bu,Rp=$r,Ip=Ri,Ss=">",Os="<",oi="prototype",ui="script",Xu=Ip("IE_PROTO"),$a=function(){},Wu=function(a){return Os+ui+Ss+a+Os+"/"+ui+Ss},Es=function(a){a.write(Wu("")),a.close();var e=a.parentWindow.Object;return a=null,e},Np=function(){var a=Rp("iframe"),e="java"+ui+":",t;return a.style.display="none",Pp.appendChild(a),a.src=String(e),t=a.contentWindow.document,t.open(),t.write(Wu("document.F=Object")),t.close(),t.F},er,vr=function(){try{er=new ActiveXObject("htmlfile")}catch{}vr=typeof document<"u"?document.domain&&er?Es(er):Np():Es(er);for(var a=Ts.length;a--;)delete vr[oi][Ts[a]];return vr()};Ap[Xu]=!0;var Xi=Object.create||function(e,t){var r;return e!==null?($a[oi]=wp(e),r=new $a,$a[oi]=null,r[Xu]=e):r=vr(),t===void 0?r:Cp.f(r,t)},Mp=L,_p=U,Dp=_p.RegExp,Vp=Mp(function(){var a=Dp(".","s");return!(a.dotAll&&a.test(` +import{c as Je,g as Do}from"./main-814d2296.js";import{_ as Ha}from"./jspdf.es.min-ab46f82e.js";var ct=function(a){return a&&a.Math===Math&&a},U=ct(typeof globalThis=="object"&&globalThis)||ct(typeof window=="object"&&window)||ct(typeof self=="object"&&self)||ct(typeof Je=="object"&&Je)||ct(typeof Je=="object"&&Je)||function(){return this}()||Function("return this")(),ut={},L=function(a){try{return!!a()}catch{return!0}},Rl=L,ce=!Rl(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Il=L,br=!Il(function(){var a=(function(){}).bind();return typeof a!="function"||a.hasOwnProperty("prototype")}),Nl=br,Ht=Function.prototype.call,Y=Nl?Ht.bind(Ht):function(){return Ht.apply(Ht,arguments)},Vo={},Lo={}.propertyIsEnumerable,ko=Object.getOwnPropertyDescriptor,Ml=ko&&!Lo.call({1:2},1);Vo.f=Ml?function(e){var t=ko(this,e);return!!t&&t.enumerable}:Lo;var xr=function(a,e){return{enumerable:!(a&1),configurable:!(a&2),writable:!(a&4),value:e}},Bo=br,Fo=Function.prototype,Ya=Fo.call,_l=Bo&&Fo.bind.bind(Ya,Ya),k=Bo?_l:function(a){return function(){return Ya.apply(a,arguments)}},jo=k,Dl=jo({}.toString),Vl=jo("".slice),Fe=function(a){return Vl(Dl(a),8,-1)},Ll=k,kl=L,Bl=Fe,Jr=Object,Fl=Ll("".split),Uo=kl(function(){return!Jr("z").propertyIsEnumerable(0)})?function(a){return Bl(a)==="String"?Fl(a,""):Jr(a)}:Jr,je=function(a){return a==null},jl=je,Ul=TypeError,ge=function(a){if(jl(a))throw new Ul("Can't call method on "+a);return a},zl=Uo,Gl=ge,At=function(a){return zl(Gl(a))},Xa=typeof document=="object"&&document.all,Hl=typeof Xa>"u"&&Xa!==void 0,zo={all:Xa,IS_HTMLDDA:Hl},Go=zo,Yl=Go.all,D=Go.IS_HTMLDDA?function(a){return typeof a=="function"||a===Yl}:function(a){return typeof a=="function"},yn=D,Ho=zo,Xl=Ho.all,Te=Ho.IS_HTMLDDA?function(a){return typeof a=="object"?a!==null:yn(a)||a===Xl}:function(a){return typeof a=="object"?a!==null:yn(a)},ea=U,Wl=D,ql=function(a){return Wl(a)?a:void 0},Ue=function(a,e){return arguments.length<2?ql(ea[a]):ea[a]&&ea[a][e]},Ql=k,Tr=Ql({}.isPrototypeOf),Sr=typeof navigator<"u"&&String(navigator.userAgent)||"",Yo=U,ta=Sr,mn=Yo.process,bn=Yo.Deno,xn=mn&&mn.versions||bn&&bn.version,Tn=xn&&xn.v8,ue,cr;Tn&&(ue=Tn.split("."),cr=ue[0]>0&&ue[0]<4?1:+(ue[0]+ue[1]));!cr&&ta&&(ue=ta.match(/Edge\/(\d+)/),(!ue||ue[1]>=74)&&(ue=ta.match(/Chrome\/(\d+)/),ue&&(cr=+ue[1])));var Oi=cr,Sn=Oi,Kl=L,Zl=U,Jl=Zl.String,Xo=!!Object.getOwnPropertySymbols&&!Kl(function(){var a=Symbol("symbol detection");return!Jl(a)||!(Object(a)instanceof Symbol)||!Symbol.sham&&Sn&&Sn<41}),eh=Xo,Wo=eh&&!Symbol.sham&&typeof Symbol.iterator=="symbol",th=Ue,rh=D,ah=Tr,ih=Wo,nh=Object,qo=ih?function(a){return typeof a=="symbol"}:function(a){var e=th("Symbol");return rh(e)&&ah(e.prototype,nh(a))},sh=String,Or=function(a){try{return sh(a)}catch{return"Object"}},oh=D,uh=Or,lh=TypeError,Se=function(a){if(oh(a))return a;throw new lh(uh(a)+" is not a function")},hh=Se,vh=je,lt=function(a,e){var t=a[e];return vh(t)?void 0:hh(t)},ra=Y,aa=D,ia=Te,fh=TypeError,ch=function(a,e){var t,r;if(e==="string"&&aa(t=a.toString)&&!ia(r=ra(t,a))||aa(t=a.valueOf)&&!ia(r=ra(t,a))||e!=="string"&&aa(t=a.toString)&&!ia(r=ra(t,a)))return r;throw new fh("Can't convert object to primitive value")},Qo={exports:{}},On=U,gh=Object.defineProperty,Ei=function(a,e){try{gh(On,a,{value:e,configurable:!0,writable:!0})}catch{On[a]=e}return e},dh=U,ph=Ei,En="__core-js_shared__",yh=dh[En]||ph(En,{}),$i=yh,$n=$i;(Qo.exports=function(a,e){return $n[a]||($n[a]=e!==void 0?e:{})})("versions",[]).push({version:"3.34.0",mode:"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.34.0/LICENSE",source:"https://github.com/zloirock/core-js"});var wi=Qo.exports,mh=ge,bh=Object,Er=function(a){return bh(mh(a))},xh=k,Th=Er,Sh=xh({}.hasOwnProperty),le=Object.hasOwn||function(e,t){return Sh(Th(e),t)},Oh=k,Eh=0,$h=Math.random(),wh=Oh(1 .toString),Ko=function(a){return"Symbol("+(a===void 0?"":a)+")_"+wh(++Eh+$h,36)},Ch=U,Ah=wi,wn=le,Ph=Ko,Rh=Xo,Ih=Wo,et=Ch.Symbol,na=Ah("wks"),Nh=Ih?et.for||et:et&&et.withoutSetter||Ph,G=function(a){return wn(na,a)||(na[a]=Rh&&wn(et,a)?et[a]:Nh("Symbol."+a)),na[a]},Mh=Y,Cn=Te,An=qo,_h=lt,Dh=ch,Vh=G,Lh=TypeError,kh=Vh("toPrimitive"),Bh=function(a,e){if(!Cn(a)||An(a))return a;var t=_h(a,kh),r;if(t){if(e===void 0&&(e="default"),r=Mh(t,a,e),!Cn(r)||An(r))return r;throw new Lh("Can't convert object to primitive value")}return e===void 0&&(e="number"),Dh(a,e)},Fh=Bh,jh=qo,Ci=function(a){var e=Fh(a,"string");return jh(e)?e:e+""},Uh=U,Pn=Te,Wa=Uh.document,zh=Pn(Wa)&&Pn(Wa.createElement),$r=function(a){return zh?Wa.createElement(a):{}},Gh=ce,Hh=L,Yh=$r,Zo=!Gh&&!Hh(function(){return Object.defineProperty(Yh("div"),"a",{get:function(){return 7}}).a!==7}),Xh=ce,Wh=Y,qh=Vo,Qh=xr,Kh=At,Zh=Ci,Jh=le,ev=Zo,Rn=Object.getOwnPropertyDescriptor;ut.f=Xh?Rn:function(e,t){if(e=Kh(e),t=Zh(t),ev)try{return Rn(e,t)}catch{}if(Jh(e,t))return Qh(!Wh(qh.f,e,t),e[t])};var de={},tv=ce,rv=L,Jo=tv&&rv(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),av=Te,iv=String,nv=TypeError,K=function(a){if(av(a))return a;throw new nv(iv(a)+" is not an object")},sv=ce,ov=Zo,uv=Jo,Yt=K,In=Ci,lv=TypeError,sa=Object.defineProperty,hv=Object.getOwnPropertyDescriptor,oa="enumerable",ua="configurable",la="writable";de.f=sv?uv?function(e,t,r){if(Yt(e),t=In(t),Yt(r),typeof e=="function"&&t==="prototype"&&"value"in r&&la in r&&!r[la]){var i=hv(e,t);i&&i[la]&&(e[t]=r.value,r={configurable:ua in r?r[ua]:i[ua],enumerable:oa in r?r[oa]:i[oa],writable:!1})}return sa(e,t,r)}:sa:function(e,t,r){if(Yt(e),t=In(t),Yt(r),ov)try{return sa(e,t,r)}catch{}if("get"in r||"set"in r)throw new lv("Accessors not supported");return"value"in r&&(e[t]=r.value),e};var vv=ce,fv=de,cv=xr,Pt=vv?function(a,e,t){return fv.f(a,e,cv(1,t))}:function(a,e,t){return a[e]=t,a},eu={exports:{}},qa=ce,gv=le,tu=Function.prototype,dv=qa&&Object.getOwnPropertyDescriptor,Ai=gv(tu,"name"),pv=Ai&&(function(){}).name==="something",yv=Ai&&(!qa||qa&&dv(tu,"name").configurable),wr={EXISTS:Ai,PROPER:pv,CONFIGURABLE:yv},mv=k,bv=D,Qa=$i,xv=mv(Function.toString);bv(Qa.inspectSource)||(Qa.inspectSource=function(a){return xv(a)});var Pi=Qa.inspectSource,Tv=U,Sv=D,Nn=Tv.WeakMap,Ov=Sv(Nn)&&/native code/.test(String(Nn)),Ev=wi,$v=Ko,Mn=Ev("keys"),Ri=function(a){return Mn[a]||(Mn[a]=$v(a))},Ii={},wv=Ov,ru=U,Cv=Te,Av=Pt,ha=le,va=$i,Pv=Ri,Rv=Ii,_n="Object already initialized",Ka=ru.TypeError,Iv=ru.WeakMap,gr,$t,dr,Nv=function(a){return dr(a)?$t(a):gr(a,{})},Mv=function(a){return function(e){var t;if(!Cv(e)||(t=$t(e)).type!==a)throw new Ka("Incompatible receiver, "+a+" required");return t}};if(wv||va.state){var fe=va.state||(va.state=new Iv);fe.get=fe.get,fe.has=fe.has,fe.set=fe.set,gr=function(a,e){if(fe.has(a))throw new Ka(_n);return e.facade=a,fe.set(a,e),e},$t=function(a){return fe.get(a)||{}},dr=function(a){return fe.has(a)}}else{var Xe=Pv("state");Rv[Xe]=!0,gr=function(a,e){if(ha(a,Xe))throw new Ka(_n);return e.facade=a,Av(a,Xe,e),e},$t=function(a){return ha(a,Xe)?a[Xe]:{}},dr=function(a){return ha(a,Xe)}}var Cr={set:gr,get:$t,has:dr,enforce:Nv,getterFor:Mv},Ni=k,_v=L,Dv=D,Xt=le,Za=ce,Vv=wr.CONFIGURABLE,Lv=Pi,au=Cr,kv=au.enforce,Bv=au.get,Dn=String,or=Object.defineProperty,Fv=Ni("".slice),jv=Ni("".replace),Uv=Ni([].join),zv=Za&&!_v(function(){return or(function(){},"length",{value:8}).length!==8}),Gv=String(String).split("String"),Hv=eu.exports=function(a,e,t){Fv(Dn(e),0,7)==="Symbol("&&(e="["+jv(Dn(e),/^Symbol\(([^)]*)\)/,"$1")+"]"),t&&t.getter&&(e="get "+e),t&&t.setter&&(e="set "+e),(!Xt(a,"name")||Vv&&a.name!==e)&&(Za?or(a,"name",{value:e,configurable:!0}):a.name=e),zv&&t&&Xt(t,"arity")&&a.length!==t.arity&&or(a,"length",{value:t.arity});try{t&&Xt(t,"constructor")&&t.constructor?Za&&or(a,"prototype",{writable:!1}):a.prototype&&(a.prototype=void 0)}catch{}var r=kv(a);return Xt(r,"source")||(r.source=Uv(Gv,typeof e=="string"?e:"")),a};Function.prototype.toString=Hv(function(){return Dv(this)&&Bv(this).source||Lv(this)},"toString");var iu=eu.exports,Yv=D,Xv=de,Wv=iu,qv=Ei,ze=function(a,e,t,r){r||(r={});var i=r.enumerable,n=r.name!==void 0?r.name:e;if(Yv(t)&&Wv(t,n,r),r.global)i?a[e]=t:qv(e,t);else{try{r.unsafe?a[e]&&(i=!0):delete a[e]}catch{}i?a[e]=t:Xv.f(a,e,{value:t,enumerable:!1,configurable:!r.nonConfigurable,writable:!r.nonWritable})}return a},nu={},Qv=Math.ceil,Kv=Math.floor,Zv=Math.trunc||function(e){var t=+e;return(t>0?Kv:Qv)(t)},Jv=Zv,Ar=function(a){var e=+a;return e!==e||e===0?0:Jv(e)},ef=Ar,tf=Math.max,rf=Math.min,su=function(a,e){var t=ef(a);return t<0?tf(t+e,0):rf(t,e)},af=Ar,nf=Math.min,ht=function(a){return a>0?nf(af(a),9007199254740991):0},sf=ht,Pr=function(a){return sf(a.length)},of=At,uf=su,lf=Pr,Vn=function(a){return function(e,t,r){var i=of(e),n=lf(i),o=uf(r,n),s;if(a&&t!==t){for(;n>o;)if(s=i[o++],s!==s)return!0}else for(;n>o;o++)if((a||o in i)&&i[o]===t)return a||o||0;return!a&&-1}},ou={includes:Vn(!0),indexOf:Vn(!1)},hf=k,fa=le,vf=At,ff=ou.indexOf,cf=Ii,Ln=hf([].push),uu=function(a,e){var t=vf(a),r=0,i=[],n;for(n in t)!fa(cf,n)&&fa(t,n)&&Ln(i,n);for(;e.length>r;)fa(t,n=e[r++])&&(~ff(i,n)||Ln(i,n));return i},Mi=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],gf=uu,df=Mi,pf=df.concat("length","prototype");nu.f=Object.getOwnPropertyNames||function(e){return gf(e,pf)};var lu={};lu.f=Object.getOwnPropertySymbols;var yf=Ue,mf=k,bf=nu,xf=lu,Tf=K,Sf=mf([].concat),Of=yf("Reflect","ownKeys")||function(e){var t=bf.f(Tf(e)),r=xf.f;return r?Sf(t,r(e)):t},kn=le,Ef=Of,$f=ut,wf=de,Cf=function(a,e,t){for(var r=Ef(e),i=wf.f,n=$f.f,o=0;of;f++)if(v=y(a[f]),v&&gs(ps,v))return v;return new hr(!1)}l=$d(a,h)}for(d=n?a.next:l.next;!(g=xd(d,l)).done;){try{v=y(g.value)}catch(x){ds(l,"throw",x)}if(typeof v=="object"&&v&&gs(ps,v))return v}return new hr(!1)},Ad=G,ju=Ad("iterator"),Uu=!1;try{var Pd=0,ys={next:function(){return{done:!!Pd++}},return:function(){Uu=!0}};ys[ju]=function(){return this},Array.from(ys,function(){throw 2})}catch{}var Rd=function(a,e){try{if(!e&&!Uu)return!1}catch{return!1}var t=!1;try{var r={};r[ju]=function(){return{next:function(){return{done:t=!0}}}},a(r)}catch{}return t},Id=Ir,Nd=Rd,Md=Mt.CONSTRUCTOR,zu=Md||!Nd(function(a){Id.all(a).then(void 0,function(){})}),_d=ee,Dd=Y,Vd=Se,Ld=vt,kd=Bi,Bd=Fu,Fd=zu;_d({target:"Promise",stat:!0,forced:Fd},{all:function(e){var t=this,r=Ld.f(t),i=r.resolve,n=r.reject,o=kd(function(){var s=Vd(t.resolve),u=[],l=0,h=1;Bd(e,function(f){var c=l++,v=!1;h++,Dd(s,t,f).then(function(d){v||(v=!0,u[c]=d,--h||i(u))},n)}),--h||i(u)});return o.error&&n(o.value),r.promise}});var jd=ee,Ud=Mt.CONSTRUCTOR,si=Ir,zd=Ue,Gd=D,Hd=ze,ms=si&&si.prototype;jd({target:"Promise",proto:!0,forced:Ud,real:!0},{catch:function(a){return this.then(void 0,a)}});if(Gd(si)){var bs=zd("Promise").prototype.catch;ms.catch!==bs&&Hd(ms,"catch",bs,{unsafe:!0})}var Yd=ee,Xd=Y,Wd=Se,qd=vt,Qd=Bi,Kd=Fu,Zd=zu;Yd({target:"Promise",stat:!0,forced:Zd},{race:function(e){var t=this,r=qd.f(t),i=r.reject,n=Qd(function(){var o=Wd(t.resolve);Kd(e,function(s){Xd(o,t,s).then(r.resolve,i)})});return n.error&&i(n.value),r.promise}});var Jd=ee,ep=Y,tp=vt,rp=Mt.CONSTRUCTOR;Jd({target:"Promise",stat:!0,forced:rp},{reject:function(e){var t=tp.f(this);return ep(t.reject,void 0,e),t.promise}});var ap=K,ip=Te,np=vt,sp=function(a,e){if(ap(a),ip(e)&&e.constructor===a)return e;var t=np.f(a),r=t.resolve;return r(e),t.promise},op=ee,up=Ue,lp=Mt.CONSTRUCTOR,hp=sp;up("Promise");op({target:"Promise",stat:!0,forced:lp},{resolve:function(e){return hp(this,e)}});function xs(a,e,t,r,i,n,o){try{var s=a[n](o),u=s.value}catch(l){t(l);return}s.done?e(u):Promise.resolve(u).then(r,i)}function xe(a){return function(){var e=this,t=arguments;return new Promise(function(r,i){var n=a.apply(e,t);function o(u){xs(n,r,i,o,s,"next",u)}function s(u){xs(n,r,i,o,s,"throw",u)}o(void 0)})}}var vp=_i,fp=String,pe=function(a){if(vp(a)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return fp(a)},cp=K,Gu=function(){var a=cp(this),e="";return a.hasIndices&&(e+="d"),a.global&&(e+="g"),a.ignoreCase&&(e+="i"),a.multiline&&(e+="m"),a.dotAll&&(e+="s"),a.unicode&&(e+="u"),a.unicodeSets&&(e+="v"),a.sticky&&(e+="y"),e},Gi=L,gp=U,Hi=gp.RegExp,Yi=Gi(function(){var a=Hi("a","y");return a.lastIndex=2,a.exec("abcd")!==null}),dp=Yi||Gi(function(){return!Hi("a","y").sticky}),pp=Yi||Gi(function(){var a=Hi("^r","gy");return a.lastIndex=2,a.exec("str")!==null}),Hu={BROKEN_CARET:pp,MISSED_STICKY:dp,UNSUPPORTED_Y:Yi},Yu={},yp=uu,mp=Mi,bp=Object.keys||function(e){return yp(e,mp)},xp=ce,Tp=Jo,Sp=de,Op=K,Ep=At,$p=bp;Yu.f=xp&&!Tp?Object.defineProperties:function(e,t){Op(e);for(var r=Ep(t),i=$p(t),n=i.length,o=0,s;n>o;)Sp.f(e,s=i[o++],r[s]);return e};var wp=K,Cp=Yu,Ts=Mi,Ap=Ii,Pp=bu,Rp=$r,Ip=Ri,Ss=">",Os="<",oi="prototype",ui="script",Xu=Ip("IE_PROTO"),$a=function(){},Wu=function(a){return Os+ui+Ss+a+Os+"/"+ui+Ss},Es=function(a){a.write(Wu("")),a.close();var e=a.parentWindow.Object;return a=null,e},Np=function(){var a=Rp("iframe"),e="java"+ui+":",t;return a.style.display="none",Pp.appendChild(a),a.src=String(e),t=a.contentWindow.document,t.open(),t.write(Wu("document.F=Object")),t.close(),t.F},er,vr=function(){try{er=new ActiveXObject("htmlfile")}catch{}vr=typeof document<"u"?document.domain&&er?Es(er):Np():Es(er);for(var a=Ts.length;a--;)delete vr[oi][Ts[a]];return vr()};Ap[Xu]=!0;var Xi=Object.create||function(e,t){var r;return e!==null?($a[oi]=wp(e),r=new $a,$a[oi]=null,r[Xu]=e):r=vr(),t===void 0?r:Cp.f(r,t)},Mp=L,_p=U,Dp=_p.RegExp,Vp=Mp(function(){var a=Dp(".","s");return!(a.dotAll&&a.test(` `)&&a.flags==="s")}),Lp=L,kp=U,Bp=kp.RegExp,Fp=Lp(function(){var a=Bp("(?b)","g");return a.exec("b").groups.a!=="b"||"b".replace(a,"$c")!=="bc"}),rt=Y,Mr=k,jp=pe,Up=Gu,zp=Hu,Gp=wi,Hp=Xi,Yp=Cr.get,Xp=Vp,Wp=Fp,qp=Gp("native-string-replace",String.prototype.replace),mr=RegExp.prototype.exec,li=mr,Qp=Mr("".charAt),Kp=Mr("".indexOf),Zp=Mr("".replace),wa=Mr("".slice),hi=function(){var a=/a/,e=/b*/g;return rt(mr,a,"a"),rt(mr,e,"a"),a.lastIndex!==0||e.lastIndex!==0}(),qu=zp.BROKEN_CARET,vi=/()??/.exec("")[1]!==void 0,Jp=hi||vi||qu||Xp||Wp;Jp&&(li=function(e){var t=this,r=Yp(t),i=jp(e),n=r.raw,o,s,u,l,h,f,c;if(n)return n.lastIndex=t.lastIndex,o=rt(li,n,i),t.lastIndex=n.lastIndex,o;var v=r.groups,d=qu&&t.sticky,g=rt(Up,t),p=t.source,y=0,x=i;if(d&&(g=Zp(g,"y",""),Kp(g,"g")===-1&&(g+="g"),x=wa(i,t.lastIndex),t.lastIndex>0&&(!t.multiline||t.multiline&&Qp(i,t.lastIndex-1)!==` `)&&(p="(?: "+p+")",x=" "+x,y++),s=new RegExp("^(?:"+p+")",g)),vi&&(s=new RegExp("^"+p+"$(?!\\s)",g)),hi&&(u=t.lastIndex),l=rt(mr,d?s:t,x),d?l?(l.input=wa(l.input,y),l[0]=wa(l[0],y),l.index=t.lastIndex,t.lastIndex+=l[0].length):t.lastIndex=0:hi&&l&&(t.lastIndex=t.global?l.index+l[0].length:u),vi&&l&&l.length>1&&rt(qp,l[0],s,function(){for(h=1;h=n?a?"":void 0:(o=Ps(r,i),o<55296||o>56319||i+1===n||(s=Ps(r,i+1))<56320||s>57343?a?oy(r,i):o:a?uy(r,i,i+2):(o-55296<<10)+(s-56320)+65536)}},ly={codeAt:Rs(!1),charAt:Rs(!0)},hy=ly.charAt,Qi=function(a,e,t){return e+(t?hy(a,e).length:1)},Is=Y,vy=K,fy=D,cy=Fe,gy=_r,dy=TypeError,Ki=function(a,e){var t=a.exec;if(fy(t)){var r=Is(t,a,e);return r!==null&&vy(r),r}if(cy(a)==="RegExp")return Is(gy,a,e);throw new dy("RegExp#exec called on incompatible receiver")},py=Y,yy=Wi,my=K,by=je,xy=ht,Aa=pe,Ty=ge,Sy=lt,Oy=Qi,Ns=Ki;yy("match",function(a,e,t){return[function(i){var n=Ty(this),o=by(i)?void 0:Sy(i,a);return o?py(o,i,n):new RegExp(i)[a](Aa(n))},function(r){var i=my(this),n=Aa(r),o=t(e,i,n);if(o.done)return o.value;if(!i.global)return Ns(i,n);var s=i.unicode;i.lastIndex=0;for(var u=[],l=0,h;(h=Ns(i,n))!==null;){var f=Aa(h[0]);u[l]=f,f===""&&(i.lastIndex=Oy(n,xy(i.lastIndex),s)),l++}return l===0?null:u}]});var Zi=k,Ey=Er,$y=Math.floor,Pa=Zi("".charAt),wy=Zi("".replace),Ra=Zi("".slice),Cy=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,Ay=/\$([$&'`]|\d{1,2})/g,Py=function(a,e,t,r,i,n){var o=t+a.length,s=r.length,u=Ay;return i!==void 0&&(i=Ey(i),u=Cy),wy(n,u,function(l,h){var f;switch(Pa(h,0)){case"$":return"$";case"&":return a;case"`":return Ra(e,0,t);case"'":return Ra(e,o);case"<":f=i[Ra(h,1,-1)];break;default:var c=+h;if(c===0)return l;if(c>s){var v=$y(c/10);return v===0?l:v<=s?r[v-1]===void 0?Pa(h,1):r[v-1]+Pa(h,1):l}f=r[c-1]}return f===void 0?"":f})},Ry=Vi,Ms=Y,Dr=k,Iy=Wi,Ny=L,My=K,_y=D,Dy=je,Vy=Ar,Ly=ht,qe=pe,ky=ge,By=Qi,Fy=lt,jy=Py,Uy=Ki,zy=G,fi=zy("replace"),Gy=Math.max,Hy=Math.min,Yy=Dr([].concat),Ia=Dr([].push),_s=Dr("".indexOf),Ds=Dr("".slice),Xy=function(a){return a===void 0?a:String(a)},Wy=function(){return"a".replace(/./,"$0")==="$0"}(),Vs=function(){return/./[fi]?/./[fi]("a","$0")==="":!1}(),qy=!Ny(function(){var a=/./;return a.exec=function(){var e=[];return e.groups={a:"7"},e},"".replace(a,"$")!=="7"});Iy("replace",function(a,e,t){var r=Vs?"$":"$0";return[function(n,o){var s=ky(this),u=Dy(n)?void 0:Fy(n,fi);return u?Ms(u,n,s,o):Ms(e,qe(s),n,o)},function(i,n){var o=My(this),s=qe(i);if(typeof n=="string"&&_s(n,r)===-1&&_s(n,"$<")===-1){var u=t(e,o,s,n);if(u.done)return u.value}var l=_y(n);l||(n=qe(n));var h=o.global,f;h&&(f=o.unicode,o.lastIndex=0);for(var c=[],v;v=Uy(o,s),!(v===null||(Ia(c,v),!h));){var d=qe(v[0]);d===""&&(o.lastIndex=By(s,Ly(o.lastIndex),f))}for(var g="",p=0,y=0;y=p&&(g+=Ds(s,p,b)+$,p=b+x.length)}return g+Ds(s,p)}]},!qy||!Wy||Vs);var Qy=Te,Ky=Fe,Zy=G,Jy=Zy("match"),Ku=function(a){var e;return Qy(a)&&((e=a[Jy])!==void 0?!!e:Ky(a)==="RegExp")},em=Ku,tm=TypeError,Ji=function(a){if(em(a))throw new tm("The method doesn't accept regular expressions");return a},rm=G,am=rm("match"),en=function(a){var e=/./;try{"/./"[a](e)}catch{try{return e[am]=!1,"/./"[a](e)}catch{}}return!1},im=ee,Zu=Nt,nm=ut.f,sm=ht,Ls=pe,om=Ji,um=ge,lm=en,ks=Zu("".startsWith),hm=Zu("".slice),vm=Math.min,Ju=lm("startsWith"),fm=!Ju&&!!function(){var a=nm(String.prototype,"startsWith");return a&&!a.writable}();im({target:"String",proto:!0,forced:!fm&&!Ju},{startsWith:function(e){var t=Ls(um(this));om(e);var r=sm(vm(arguments.length>1?arguments[1]:void 0,t.length)),i=Ls(e);return ks?ks(t,i,r):hm(t,r,r+i.length)===i}});var cm=G,gm=Xi,dm=de.f,ci=cm("unscopables"),gi=Array.prototype;gi[ci]===void 0&&dm(gi,ci,{configurable:!0,value:gm(null)});var pm=function(a){gi[ci][a]=!0},ym=L,mm=!ym(function(){function a(){}return a.prototype.constructor=null,Object.getPrototypeOf(new a)!==a.prototype}),bm=le,xm=D,Tm=Er,Sm=Ri,Om=mm,Bs=Sm("IE_PROTO"),di=Object,Em=di.prototype,el=Om?di.getPrototypeOf:function(a){var e=Tm(a);if(bm(e,Bs))return e[Bs];var t=e.constructor;return xm(t)&&e instanceof t?t.prototype:e instanceof di?Em:null},$m=L,wm=D,Cm=Te,Fs=el,Am=ze,Pm=G,pi=Pm("iterator"),tl=!1,ke,Na,Ma;[].keys&&(Ma=[].keys(),"next"in Ma?(Na=Fs(Fs(Ma)),Na!==Object.prototype&&(ke=Na)):tl=!0);var Rm=!Cm(ke)||$m(function(){var a={};return ke[pi].call(a)!==a});Rm&&(ke={});wm(ke[pi])||Am(ke,pi,function(){return this});var rl={IteratorPrototype:ke,BUGGY_SAFARI_ITERATORS:tl},Im=rl.IteratorPrototype,Nm=Xi,Mm=xr,_m=Rr,Dm=_t,Vm=function(){return this},Lm=function(a,e,t,r){var i=e+" Iterator";return a.prototype=Nm(Im,{next:Mm(+!r,t)}),_m(a,i,!1),Dm[i]=Vm,a},km=ee,Bm=Y,al=wr,Fm=D,jm=Lm,js=el,Us=vu,Um=Rr,zm=Pt,_a=ze,Gm=G,Hm=_t,il=rl,Ym=al.PROPER,Xm=al.CONFIGURABLE,zs=il.IteratorPrototype,tr=il.BUGGY_SAFARI_ITERATORS,dt=Gm("iterator"),Gs="keys",pt="values",Hs="entries",Wm=function(){return this},qm=function(a,e,t,r,i,n,o){jm(t,e,r);var s=function(y){if(y===i&&c)return c;if(!tr&&y&&y in h)return h[y];switch(y){case Gs:return function(){return new t(this,y)};case pt:return function(){return new t(this,y)};case Hs:return function(){return new t(this,y)}}return function(){return new t(this)}},u=e+" Iterator",l=!1,h=a.prototype,f=h[dt]||h["@@iterator"]||i&&h[i],c=!tr&&f||s(i),v=e==="Array"&&h.entries||f,d,g,p;if(v&&(d=js(v.call(new a)),d!==Object.prototype&&d.next&&(js(d)!==zs&&(Us?Us(d,zs):Fm(d[dt])||_a(d,dt,Wm)),Um(d,u,!0))),Ym&&i===pt&&f&&f.name!==pt&&(Xm?zm(h,"name",pt):(l=!0,c=function(){return Bm(f,this)})),i)if(g={values:s(pt),keys:n?c:s(Gs),entries:s(Hs)},o)for(p in g)(tr||l||!(p in h))&&_a(h,p,g[p]);else km({target:e,proto:!0,forced:tr||l},g);return h[dt]!==c&&_a(h,dt,c,{name:i}),Hm[e]=c,g},Qm=function(a,e){return{value:a,done:e}},Km=At,tn=pm,Ys=_t,nl=Cr,Zm=de.f,Jm=qm,rr=Qm,e0=ce,sl="Array Iterator",t0=nl.set,r0=nl.getterFor(sl),a0=Jm(Array,"Array",function(a,e){t0(this,{type:sl,target:Km(a),index:0,kind:e})},function(){var a=r0(this),e=a.target,t=a.index++;if(!e||t>=e.length)return a.target=void 0,rr(void 0,!0);switch(a.kind){case"keys":return rr(t,!1);case"values":return rr(e[t],!1)}return rr([t,e[t]],!1)},"values"),Xs=Ys.Arguments=Ys.Array;tn("keys");tn("values");tn("entries");if(e0&&Xs.name!=="values")try{Zm(Xs,"name",{value:"values"})}catch{}var i0={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},n0=$r,Da=n0("span").classList,Ws=Da&&Da.constructor&&Da.constructor.prototype,s0=Ws===Object.prototype?void 0:Ws,qs=U,ol=i0,o0=s0,xt=a0,Qs=Pt,u0=Rr,l0=G,Va=l0("iterator"),La=xt.values,ul=function(a,e){if(a){if(a[Va]!==La)try{Qs(a,Va,La)}catch{a[Va]=La}if(u0(a,e,!0),ol[e]){for(var t in xt)if(a[t]!==xt[t])try{Qs(a,t,xt[t])}catch{a[t]=xt[t]}}}};for(var ka in ol)ul(qs[ka]&&qs[ka].prototype,ka);ul(o0,"DOMTokenList");function h0(a,e){if(Ha(a)!=="object"||a===null)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var r=t.call(a,e||"default");if(Ha(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}function v0(a){var e=h0(a,"string");return Ha(e)==="symbol"?e:String(e)}function rn(a,e,t){return e=v0(e),e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}var f0=Se,c0=Er,g0=Uo,d0=Pr,p0=TypeError,Ks=function(a){return function(e,t,r,i){var n=c0(e),o=g0(n),s=d0(n);f0(t);var u=a?s-1:0,l=a?-1:1;if(r<2)for(;;){if(u in o){i=o[u],u+=l;break}if(u+=l,a?u<0:s<=u)throw new p0("Reduce of empty array with no initial value")}for(;a?u>=0:s>u;u+=l)u in o&&(i=t(i,o[u],u,n));return i}},y0={left:Ks(!1),right:Ks(!0)},m0=L,ll=function(a,e){var t=[][a];return!!t&&m0(function(){t.call(null,e||function(){return 1},1)})},b0=ee,x0=y0.left,T0=ll,Zs=Oi,S0=It,O0=!S0&&Zs>79&&Zs<83,E0=O0||!T0("reduce");b0({target:"Array",proto:!0,forced:E0},{reduce:function(e){var t=arguments.length;return x0(this,e,t,t>1?arguments[1]:void 0)}});var $0=ee,hl=Nt,w0=ut.f,C0=ht,Js=pe,A0=Ji,P0=ge,R0=en,eo=hl("".endsWith),I0=hl("".slice),N0=Math.min,vl=R0("endsWith"),M0=!vl&&!!function(){var a=w0(String.prototype,"endsWith");return a&&!a.writable}();$0({target:"String",proto:!0,forced:!M0&&!vl},{endsWith:function(e){var t=Js(P0(this));A0(e);var r=arguments.length>1?arguments[1]:void 0,i=t.length,n=r===void 0?i:N0(C0(r),i),o=Js(e);return eo?eo(t,o,n):I0(t,n-o.length,n)===o}});var _0=Ci,D0=de,V0=xr,L0=function(a,e,t){var r=_0(e);r in a?D0.f(a,r,V0(0,t)):a[r]=t},to=su,k0=Pr,B0=L0,F0=Array,j0=Math.max,U0=function(a,e,t){for(var r=k0(a),i=to(e,r),n=to(t===void 0?r:t,r),o=F0(j0(n-i,0)),s=0;i1||"".split(/.?/).length?r=function(i,n){var o=Ba(ro(this)),s=n===void 0?no:n>>>0;if(s===0)return[];if(i===void 0)return[o];if(!X0(i))return yt(e,o,i,s);for(var u=[],l=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(i.sticky?"y":""),h=0,f=new RegExp(i.source,l+"g"),c,v,d;(c=yt(Z0,f,o))&&(v=f.lastIndex,!(v>h&&(Ke(u,mt(o,h,c.index)),c.length>1&&c.index=s)));)f.lastIndex===c.index&&f.lastIndex++;return h===o.length?(d||!rb(f,""))&&Ke(u,""):Ke(u,mt(o,h)),u.length>s?ao(u,0,s):u}:"0".split(void 0,0).length?r=function(i,n){return i===void 0&&n===0?[]:yt(e,this,i,n)}:r=e,[function(n,o){var s=ro(this),u=Y0(n)?void 0:K0(n,a);return u?yt(u,n,s,o):yt(r,Ba(s),n,o)},function(i,n){var o=H0(this),s=Ba(i),u=t(r,o,s,n,r!==e);if(u.done)return u.value;var l=W0(o,RegExp),h=o.unicode,f=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(Qe?"g":"y"),c=new l(Qe?"^(?:"+o.source+")":o,f),v=n===void 0?no:n>>>0;if(v===0)return[];if(s.length===0)return io(c,s)===null?[s]:[];for(var d=0,g=0,p=[];g"u"?Je:window,ar=["moz","webkit"],it="AnimationFrame",ot=be["request"+it],Ct=be["cancel"+it]||be["cancelRequest"+it];for(var bt=0;!ot&&bt3&&(this.alpha=s[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toRGBA=function(){return"rgba("+this.r+", "+this.g+", "+this.b+", "+this.alpha+")"},this.toHex=function(){var u=this.r.toString(16),l=this.g.toString(16),h=this.b.toString(16);return u.length==1&&(u="0"+u),l.length==1&&(l="0"+l),h.length==1&&(h="0"+h),"#"+u+l+h},this.getHelpXML=function(){for(var u=new Array,l=0;l "+g.toRGB()+" -> "+g.toHex());d.appendChild(p),d.appendChild(y),v.appendChild(d)}catch{}return v}};const mi=Do(xb);var Tb=ee,Sb=Nt,Ob=ou.indexOf,Eb=ll,bi=Sb([].indexOf),gl=!!bi&&1/bi([1],1,-0)<0,$b=gl||!Eb("indexOf");Tb({target:"Array",proto:!0,forced:$b},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return gl?bi(this,e,t)||0:Ob(this,e,t)}});var wb=ee,Cb=k,Ab=Ji,Pb=ge,ho=pe,Rb=en,Ib=Cb("".indexOf);wb({target:"String",proto:!0,forced:!Rb("includes")},{includes:function(e){return!!~Ib(ho(Pb(this)),ho(Ab(e)),arguments.length>1?arguments[1]:void 0)}});var Nb=Fe,Mb=Array.isArray||function(e){return Nb(e)==="Array"},_b=ee,Db=k,Vb=Mb,Lb=Db([].reverse),vo=[1,2];_b({target:"Array",proto:!0,forced:String(vo)===String(vo.reverse())},{reverse:function(){return Vb(this)&&(this.length=this.length),Lb(this)}});/*! ***************************************************************************** diff --git a/assets/jspdf.es.min-429c6509.js b/assets/jspdf.es.min-ab46f82e.js similarity index 99% rename from assets/jspdf.es.min-429c6509.js rename to assets/jspdf.es.min-ab46f82e.js index 4ff9ebb..a83ef19 100644 --- a/assets/jspdf.es.min-429c6509.js +++ b/assets/jspdf.es.min-ab46f82e.js @@ -1,4 +1,4 @@ -import{_ as ls}from"./main-800d5aa8.js";function fe(i){"@babel/helpers - typeof";return fe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fe(i)}var Qe=Uint8Array,tn=Uint16Array,ha=Uint32Array,so=new Qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),co=new Qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),hs=new Qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),xc=function(i,e){for(var n=new tn(31),a=0;a<31;++a)n[a]=e+=1<>>1|(ye&21845)<<1;Pr=(Pr&52428)>>>2|(Pr&13107)<<2,Pr=(Pr&61680)>>>4|(Pr&3855)<<4,ds[ye]=((Pr&65280)>>>8|(Pr&255)<<8)>>>1}var Kn=function(i,e,n){for(var a=i.length,c=0,o=new tn(e);c>>f]=g}else for(h=new tn(a),c=0;c>>15-i[c];return h},jr=new Qe(288);for(var ye=0;ye<144;++ye)jr[ye]=8;for(var ye=144;ye<256;++ye)jr[ye]=9;for(var ye=256;ye<280;++ye)jr[ye]=7;for(var ye=280;ye<288;++ye)jr[ye]=8;var fa=new Qe(32);for(var ye=0;ye<32;++ye)fa[ye]=5;var Su=Kn(jr,9,0),_u=Kn(jr,9,1),Pu=Kn(fa,5,0),ku=Kn(fa,5,1),es=function(i){for(var e=i[0],n=1;ne&&(e=i[n]);return e},Mn=function(i,e,n){var a=e/8>>0;return(i[a]|i[a+1]<<8)>>>(e&7)&n},ns=function(i,e){var n=e/8>>0;return(i[n]|i[n+1]<<8|i[n+2]<<16)>>>(e&7)},Ns=function(i){return(i/8>>0)+(i&7&&1)},kc=function(i,e,n){(e==null||e<0)&&(e=0),(n==null||n>i.length)&&(n=i.length);var a=new(i instanceof tn?tn:i instanceof ha?ha:Qe)(n-e);return a.set(i.subarray(e,n)),a},Fu=function(i,e,n){var a=i.length,c=!e||n,o=!n||n.i;n||(n={}),e||(e=new Qe(a*3));var l=function(Y){var Q=e.length;if(Y>Q){var et=new Qe(Math.max(Q*2,Y));et.set(e),e=et}},h=n.f||0,f=n.p||0,g=n.b||0,b=n.l,A=n.d,S=n.m,p=n.n,O=a*8;do{if(!b){n.f=h=Mn(i,f,1);var I=Mn(i,f+1,3);if(f+=3,I)if(I==1)b=_u,A=ku,S=9,p=5;else if(I==2){var X=Mn(i,f,31)+257,ot=Mn(i,f+10,15)+4,ut=X+Mn(i,f+5,31)+1;f+=14;for(var wt=new Qe(ut),tt=new Qe(19),R=0;RO)break;for(var F=Kn(tt,gt,1),R=0;R>>4;if(q<16)wt[R++]=q;else{var z=0,D=0;for(q==16?(D=3+Mn(i,f,3),f+=2,z=wt[R-1]):q==17?(D=3+Mn(i,f,7),f+=3):q==18&&(D=11+Mn(i,f,127),f+=7);D--;)wt[R++]=z}}var at=wt.subarray(0,X),nt=wt.subarray(X);S=es(at),p=es(nt),b=Kn(at,S,1),A=Kn(nt,p,1)}else throw"invalid block type";else{var q=Ns(f)+4,_=i[q-4]|i[q-3]<<8,B=q+_;if(B>a){if(o)throw"unexpected EOF";break}c&&l(g+_),e.set(i.subarray(q,B),g),n.b=g+=_,n.p=f=B*8;continue}if(f>O)throw"unexpected EOF"}c&&l(g+131072);for(var lt=(1<>>4;if(f+=z&15,f>O)throw"unexpected EOF";if(!z)throw"invalid length/literal";if(ht<256)e[g++]=ht;else if(ht==256){b=null;break}else{var kt=ht-254;if(ht>264){var R=ht-257,L=so[R];kt=Mn(i,f,(1<>>4;if(!j)throw"invalid distance";f+=j&15;var nt=xu[M];if(M>3){var L=co[M];nt+=ns(i,f)&(1<O)throw"unexpected EOF";c&&l(g+131072);for(var W=g+kt;g>0;i[a]|=n,i[a+1]|=n>>>8},ia=function(i,e,n){n<<=e&7;var a=e/8>>0;i[a]|=n,i[a+1]|=n>>>8,i[a+2]|=n>>>16},rs=function(i,e){for(var n=[],a=0;aS&&(S=o[a].s);var p=new tn(S+1),O=ps(n[b-1],p,0);if(O>e){var a=0,I=0,q=O-e,_=1<e)I+=_-(1<>>=q;I>0;){var X=o[a].s;p[X]=0&&I;--a){var ot=o[a].s;p[ot]==e&&(--p[ot],++I)}O=e}return[new Qe(p),O]},ps=function(i,e,n){return i.s==-1?Math.max(ps(i.l,e,n+1),ps(i.r,e,n+1)):e[i.s]=n},ac=function(i){for(var e=i.length;e&&!i[--e];);for(var n=new tn(++e),a=0,c=i[0],o=1,l=function(f){n[a++]=f},h=1;h<=e;++h)if(i[h]==c&&h!=e)++o;else{if(!c&&o>2){for(;o>138;o-=138)l(32754);o>2&&(l(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(l(c),--o;o>6;o-=6)l(8304);o>2&&(l(o-3<<5|8208),o=0)}for(;o--;)l(c);o=1,c=i[h]}return[n.subarray(0,a),e]},aa=function(i,e){for(var n=0,a=0;a>>8,i[c+2]=i[c]^255,i[c+3]=i[c+1]^255;for(var o=0;o4&&!dt[hs[P-1]];--P);var z=g+5<<3,D=aa(c,jr)+aa(o,fa)+l,at=aa(c,S)+aa(o,I)+l+14+3*P+aa(tt,dt)+(2*tt[16]+3*tt[17]+7*tt[18]);if(z<=D&&z<=at)return ao(e,b,i.subarray(f,f+g));var nt,lt,$,ft;if(lr(e,b,1+(at15&&(lr(e,b,j[R]>>>5&127),b+=j[R]>>>12)}}else nt=Su,lt=jr,$=Pu,ft=fa;for(var R=0;R255){var M=a[R]>>>18&31;ia(e,b,nt[M+257]),b+=lt[M+257],M>7&&(lr(e,b,a[R]>>>23&31),b+=so[M]);var W=a[R]&31;ia(e,b,$[W]),b+=ft[W],W>3&&(ia(e,b,a[R]>>>5&8191),b+=co[W])}else ia(e,b,nt[a[R]]),b+=lt[a[R]];return ia(e,b,nt[256]),b+lt[256]},Iu=new ha([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Cu=new Qe(0),ju=function(i,e,n,a,c,o){var l=i.length,h=new Qe(a+l+5*(1+Math.floor(l/7e3))+c),f=h.subarray(a,h.length-c),g=0;if(!e||l<8)for(var b=0;b<=l;b+=65535){var A=b+65535;A>>13,O=S&8191,I=(1<7e3||dt>24576)&&nt>423){g=oc(i,f,0,ut,wt,tt,gt,dt,P,b-P,g),dt=R=gt=0,P=b;for(var lt=0;lt<286;++lt)wt[lt]=0;for(var lt=0;lt<30;++lt)tt[lt]=0}var $=2,ft=0,ht=O,kt=D-at&32767;if(nt>2&&z==ot(b-kt))for(var L=Math.min(p,nt)-1,j=Math.min(32767,b),M=Math.min(258,nt);kt<=j&&--ht&&D!=at;){if(i[b+$]==i[b+$-kt]){for(var W=0;W$){if($=W,ft=kt,W>L)break;for(var Y=Math.min(kt,W-2),Q=0,lt=0;ltQ&&(Q=At,at=et)}}}D=at,at=q[D],kt+=D-at+32768&32767}if(ft){ut[dt++]=268435456|fs[$]<<18|ic[ft];var Nt=fs[$]&31,Ct=ic[ft]&31;gt+=so[Nt]+co[Ct],++wt[257+Nt],++tt[Ct],F=b+$,++R}else ut[dt++]=i[b],++wt[i[b]]}}g=oc(i,f,o,ut,wt,tt,gt,dt,P,b-P,g),o||(g=ao(f,g,Cu))}return kc(h,0,a+Ns(g)+c)},Ou=function(){var i=1,e=0;return{p:function(n){for(var a=i,c=e,o=n.length,l=0;l!=o;){for(var h=Math.min(l+5552,o);l>>8<<16|(e&255)<<8|e>>>8)+((i&255)<<23)*2}}},Bu=function(i,e,n,a,c){return ju(i,e.level==null?6:e.level,e.mem==null?Math.ceil(Math.max(8,Math.min(13,Math.log(i.length)))*1.5):12+e.mem,n,a,!c)},Mu=function(i,e,n){for(;n;++e)i[e]=n,n>>>=8},Eu=function(i,e){var n=e.level,a=n==0?0:n<6?1:n==9?3:2;i[0]=120,i[1]=a<<6|(a?32-2*a:1)},qu=function(i){if((i[0]&15)!=8||i[0]>>>4>7||(i[0]<<8|i[1])%31)throw"invalid zlib data";if(i[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function gs(i,e){e===void 0&&(e={});var n=Ou();n.p(i);var a=Bu(i,e,2,4);return Eu(a,e),Mu(a,a.length-4,n.d()),a}function Du(i,e){return Fu((qu(i),i.subarray(2,-4)),e)}var Ht=function(){return typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:this}();function is(){Ht.console&&typeof Ht.console.log=="function"&&Ht.console.log.apply(Ht.console,arguments)}var ve={log:is,warn:function(i){Ht.console&&(typeof Ht.console.warn=="function"?Ht.console.warn.apply(Ht.console,arguments):is.call(null,arguments))},error:function(i){Ht.console&&(typeof Ht.console.error=="function"?Ht.console.error.apply(Ht.console,arguments):is(i))}};function as(i,e,n){var a=new XMLHttpRequest;a.open("GET",i),a.responseType="blob",a.onload=function(){Wr(a.response,e,n)},a.onerror=function(){ve.error("could not download file")},a.send()}function sc(i){var e=new XMLHttpRequest;e.open("HEAD",i,!1);try{e.send()}catch{}return e.status>=200&&e.status<=299}function eo(i){try{i.dispatchEvent(new MouseEvent("click"))}catch{var e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),i.dispatchEvent(e)}}var oa,ms,Wr=Ht.saveAs||((typeof window>"u"?"undefined":fe(window))!=="object"||window!==Ht?function(){}:typeof HTMLAnchorElement<"u"&&"download"in HTMLAnchorElement.prototype?function(i,e,n){var a=Ht.URL||Ht.webkitURL,c=document.createElement("a");e=e||i.name||"download",c.download=e,c.rel="noopener",typeof i=="string"?(c.href=i,c.origin!==location.origin?sc(c.href)?as(i,e,n):eo(c,c.target="_blank"):eo(c)):(c.href=a.createObjectURL(i),setTimeout(function(){a.revokeObjectURL(c.href)},4e4),setTimeout(function(){eo(c)},0))}:"msSaveOrOpenBlob"in navigator?function(i,e,n){if(e=e||i.name||"download",typeof i=="string")if(sc(i))as(i,e,n);else{var a=document.createElement("a");a.href=i,a.target="_blank",setTimeout(function(){eo(a)})}else navigator.msSaveOrOpenBlob(function(c,o){return o===void 0?o={autoBom:!1}:fe(o)!=="object"&&(ve.warn("Deprecated: Expected third argument to be a object"),o={autoBom:!o}),o.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(c.type)?new Blob([String.fromCharCode(65279),c],{type:c.type}):c}(i,n),e)}:function(i,e,n,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),typeof i=="string")return as(i,e,n);var c=i.type==="application/octet-stream",o=/constructor/i.test(Ht.HTMLElement)||Ht.safari,l=/CriOS\/[\d]+/.test(navigator.userAgent);if((l||c&&o)&&(typeof FileReader>"u"?"undefined":fe(FileReader))==="object"){var h=new FileReader;h.onloadend=function(){var b=h.result;b=l?b:b.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=b:location=b,a=null},h.readAsDataURL(i)}else{var f=Ht.URL||Ht.webkitURL,g=f.createObjectURL(i);a?a.location=g:location.href=g,a=null,setTimeout(function(){f.revokeObjectURL(g)},4e4)}});/** +import{_ as ls}from"./main-814d2296.js";function fe(i){"@babel/helpers - typeof";return fe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fe(i)}var Qe=Uint8Array,tn=Uint16Array,ha=Uint32Array,so=new Qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),co=new Qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),hs=new Qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),xc=function(i,e){for(var n=new tn(31),a=0;a<31;++a)n[a]=e+=1<>>1|(ye&21845)<<1;Pr=(Pr&52428)>>>2|(Pr&13107)<<2,Pr=(Pr&61680)>>>4|(Pr&3855)<<4,ds[ye]=((Pr&65280)>>>8|(Pr&255)<<8)>>>1}var Kn=function(i,e,n){for(var a=i.length,c=0,o=new tn(e);c>>f]=g}else for(h=new tn(a),c=0;c>>15-i[c];return h},jr=new Qe(288);for(var ye=0;ye<144;++ye)jr[ye]=8;for(var ye=144;ye<256;++ye)jr[ye]=9;for(var ye=256;ye<280;++ye)jr[ye]=7;for(var ye=280;ye<288;++ye)jr[ye]=8;var fa=new Qe(32);for(var ye=0;ye<32;++ye)fa[ye]=5;var Su=Kn(jr,9,0),_u=Kn(jr,9,1),Pu=Kn(fa,5,0),ku=Kn(fa,5,1),es=function(i){for(var e=i[0],n=1;ne&&(e=i[n]);return e},Mn=function(i,e,n){var a=e/8>>0;return(i[a]|i[a+1]<<8)>>>(e&7)&n},ns=function(i,e){var n=e/8>>0;return(i[n]|i[n+1]<<8|i[n+2]<<16)>>>(e&7)},Ns=function(i){return(i/8>>0)+(i&7&&1)},kc=function(i,e,n){(e==null||e<0)&&(e=0),(n==null||n>i.length)&&(n=i.length);var a=new(i instanceof tn?tn:i instanceof ha?ha:Qe)(n-e);return a.set(i.subarray(e,n)),a},Fu=function(i,e,n){var a=i.length,c=!e||n,o=!n||n.i;n||(n={}),e||(e=new Qe(a*3));var l=function(Y){var Q=e.length;if(Y>Q){var et=new Qe(Math.max(Q*2,Y));et.set(e),e=et}},h=n.f||0,f=n.p||0,g=n.b||0,b=n.l,A=n.d,S=n.m,p=n.n,O=a*8;do{if(!b){n.f=h=Mn(i,f,1);var I=Mn(i,f+1,3);if(f+=3,I)if(I==1)b=_u,A=ku,S=9,p=5;else if(I==2){var X=Mn(i,f,31)+257,ot=Mn(i,f+10,15)+4,ut=X+Mn(i,f+5,31)+1;f+=14;for(var wt=new Qe(ut),tt=new Qe(19),R=0;RO)break;for(var F=Kn(tt,gt,1),R=0;R>>4;if(q<16)wt[R++]=q;else{var z=0,D=0;for(q==16?(D=3+Mn(i,f,3),f+=2,z=wt[R-1]):q==17?(D=3+Mn(i,f,7),f+=3):q==18&&(D=11+Mn(i,f,127),f+=7);D--;)wt[R++]=z}}var at=wt.subarray(0,X),nt=wt.subarray(X);S=es(at),p=es(nt),b=Kn(at,S,1),A=Kn(nt,p,1)}else throw"invalid block type";else{var q=Ns(f)+4,_=i[q-4]|i[q-3]<<8,B=q+_;if(B>a){if(o)throw"unexpected EOF";break}c&&l(g+_),e.set(i.subarray(q,B),g),n.b=g+=_,n.p=f=B*8;continue}if(f>O)throw"unexpected EOF"}c&&l(g+131072);for(var lt=(1<>>4;if(f+=z&15,f>O)throw"unexpected EOF";if(!z)throw"invalid length/literal";if(ht<256)e[g++]=ht;else if(ht==256){b=null;break}else{var kt=ht-254;if(ht>264){var R=ht-257,L=so[R];kt=Mn(i,f,(1<>>4;if(!j)throw"invalid distance";f+=j&15;var nt=xu[M];if(M>3){var L=co[M];nt+=ns(i,f)&(1<O)throw"unexpected EOF";c&&l(g+131072);for(var W=g+kt;g>0;i[a]|=n,i[a+1]|=n>>>8},ia=function(i,e,n){n<<=e&7;var a=e/8>>0;i[a]|=n,i[a+1]|=n>>>8,i[a+2]|=n>>>16},rs=function(i,e){for(var n=[],a=0;aS&&(S=o[a].s);var p=new tn(S+1),O=ps(n[b-1],p,0);if(O>e){var a=0,I=0,q=O-e,_=1<e)I+=_-(1<>>=q;I>0;){var X=o[a].s;p[X]=0&&I;--a){var ot=o[a].s;p[ot]==e&&(--p[ot],++I)}O=e}return[new Qe(p),O]},ps=function(i,e,n){return i.s==-1?Math.max(ps(i.l,e,n+1),ps(i.r,e,n+1)):e[i.s]=n},ac=function(i){for(var e=i.length;e&&!i[--e];);for(var n=new tn(++e),a=0,c=i[0],o=1,l=function(f){n[a++]=f},h=1;h<=e;++h)if(i[h]==c&&h!=e)++o;else{if(!c&&o>2){for(;o>138;o-=138)l(32754);o>2&&(l(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(l(c),--o;o>6;o-=6)l(8304);o>2&&(l(o-3<<5|8208),o=0)}for(;o--;)l(c);o=1,c=i[h]}return[n.subarray(0,a),e]},aa=function(i,e){for(var n=0,a=0;a>>8,i[c+2]=i[c]^255,i[c+3]=i[c+1]^255;for(var o=0;o4&&!dt[hs[P-1]];--P);var z=g+5<<3,D=aa(c,jr)+aa(o,fa)+l,at=aa(c,S)+aa(o,I)+l+14+3*P+aa(tt,dt)+(2*tt[16]+3*tt[17]+7*tt[18]);if(z<=D&&z<=at)return ao(e,b,i.subarray(f,f+g));var nt,lt,$,ft;if(lr(e,b,1+(at15&&(lr(e,b,j[R]>>>5&127),b+=j[R]>>>12)}}else nt=Su,lt=jr,$=Pu,ft=fa;for(var R=0;R255){var M=a[R]>>>18&31;ia(e,b,nt[M+257]),b+=lt[M+257],M>7&&(lr(e,b,a[R]>>>23&31),b+=so[M]);var W=a[R]&31;ia(e,b,$[W]),b+=ft[W],W>3&&(ia(e,b,a[R]>>>5&8191),b+=co[W])}else ia(e,b,nt[a[R]]),b+=lt[a[R]];return ia(e,b,nt[256]),b+lt[256]},Iu=new ha([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Cu=new Qe(0),ju=function(i,e,n,a,c,o){var l=i.length,h=new Qe(a+l+5*(1+Math.floor(l/7e3))+c),f=h.subarray(a,h.length-c),g=0;if(!e||l<8)for(var b=0;b<=l;b+=65535){var A=b+65535;A>>13,O=S&8191,I=(1<7e3||dt>24576)&&nt>423){g=oc(i,f,0,ut,wt,tt,gt,dt,P,b-P,g),dt=R=gt=0,P=b;for(var lt=0;lt<286;++lt)wt[lt]=0;for(var lt=0;lt<30;++lt)tt[lt]=0}var $=2,ft=0,ht=O,kt=D-at&32767;if(nt>2&&z==ot(b-kt))for(var L=Math.min(p,nt)-1,j=Math.min(32767,b),M=Math.min(258,nt);kt<=j&&--ht&&D!=at;){if(i[b+$]==i[b+$-kt]){for(var W=0;W$){if($=W,ft=kt,W>L)break;for(var Y=Math.min(kt,W-2),Q=0,lt=0;ltQ&&(Q=At,at=et)}}}D=at,at=q[D],kt+=D-at+32768&32767}if(ft){ut[dt++]=268435456|fs[$]<<18|ic[ft];var Nt=fs[$]&31,Ct=ic[ft]&31;gt+=so[Nt]+co[Ct],++wt[257+Nt],++tt[Ct],F=b+$,++R}else ut[dt++]=i[b],++wt[i[b]]}}g=oc(i,f,o,ut,wt,tt,gt,dt,P,b-P,g),o||(g=ao(f,g,Cu))}return kc(h,0,a+Ns(g)+c)},Ou=function(){var i=1,e=0;return{p:function(n){for(var a=i,c=e,o=n.length,l=0;l!=o;){for(var h=Math.min(l+5552,o);l>>8<<16|(e&255)<<8|e>>>8)+((i&255)<<23)*2}}},Bu=function(i,e,n,a,c){return ju(i,e.level==null?6:e.level,e.mem==null?Math.ceil(Math.max(8,Math.min(13,Math.log(i.length)))*1.5):12+e.mem,n,a,!c)},Mu=function(i,e,n){for(;n;++e)i[e]=n,n>>>=8},Eu=function(i,e){var n=e.level,a=n==0?0:n<6?1:n==9?3:2;i[0]=120,i[1]=a<<6|(a?32-2*a:1)},qu=function(i){if((i[0]&15)!=8||i[0]>>>4>7||(i[0]<<8|i[1])%31)throw"invalid zlib data";if(i[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function gs(i,e){e===void 0&&(e={});var n=Ou();n.p(i);var a=Bu(i,e,2,4);return Eu(a,e),Mu(a,a.length-4,n.d()),a}function Du(i,e){return Fu((qu(i),i.subarray(2,-4)),e)}var Ht=function(){return typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:this}();function is(){Ht.console&&typeof Ht.console.log=="function"&&Ht.console.log.apply(Ht.console,arguments)}var ve={log:is,warn:function(i){Ht.console&&(typeof Ht.console.warn=="function"?Ht.console.warn.apply(Ht.console,arguments):is.call(null,arguments))},error:function(i){Ht.console&&(typeof Ht.console.error=="function"?Ht.console.error.apply(Ht.console,arguments):is(i))}};function as(i,e,n){var a=new XMLHttpRequest;a.open("GET",i),a.responseType="blob",a.onload=function(){Wr(a.response,e,n)},a.onerror=function(){ve.error("could not download file")},a.send()}function sc(i){var e=new XMLHttpRequest;e.open("HEAD",i,!1);try{e.send()}catch{}return e.status>=200&&e.status<=299}function eo(i){try{i.dispatchEvent(new MouseEvent("click"))}catch{var e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),i.dispatchEvent(e)}}var oa,ms,Wr=Ht.saveAs||((typeof window>"u"?"undefined":fe(window))!=="object"||window!==Ht?function(){}:typeof HTMLAnchorElement<"u"&&"download"in HTMLAnchorElement.prototype?function(i,e,n){var a=Ht.URL||Ht.webkitURL,c=document.createElement("a");e=e||i.name||"download",c.download=e,c.rel="noopener",typeof i=="string"?(c.href=i,c.origin!==location.origin?sc(c.href)?as(i,e,n):eo(c,c.target="_blank"):eo(c)):(c.href=a.createObjectURL(i),setTimeout(function(){a.revokeObjectURL(c.href)},4e4),setTimeout(function(){eo(c)},0))}:"msSaveOrOpenBlob"in navigator?function(i,e,n){if(e=e||i.name||"download",typeof i=="string")if(sc(i))as(i,e,n);else{var a=document.createElement("a");a.href=i,a.target="_blank",setTimeout(function(){eo(a)})}else navigator.msSaveOrOpenBlob(function(c,o){return o===void 0?o={autoBom:!1}:fe(o)!=="object"&&(ve.warn("Deprecated: Expected third argument to be a object"),o={autoBom:!o}),o.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(c.type)?new Blob([String.fromCharCode(65279),c],{type:c.type}):c}(i,n),e)}:function(i,e,n,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),typeof i=="string")return as(i,e,n);var c=i.type==="application/octet-stream",o=/constructor/i.test(Ht.HTMLElement)||Ht.safari,l=/CriOS\/[\d]+/.test(navigator.userAgent);if((l||c&&o)&&(typeof FileReader>"u"?"undefined":fe(FileReader))==="object"){var h=new FileReader;h.onloadend=function(){var b=h.result;b=l?b:b.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=b:location=b,a=null},h.readAsDataURL(i)}else{var f=Ht.URL||Ht.webkitURL,g=f.createObjectURL(i);a?a.location=g:location.href=g,a=null,setTimeout(function(){f.revokeObjectURL(g)},4e4)}});/** * A class to parse color values * @author Stoyan Stefanov * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} @@ -163,7 +163,7 @@ endobj\r * http://opensource.org/licenses/mit-license */function En(i,e){if(this.pos=0,this.buffer=i,this.datav=new DataView(i.buffer),this.is_with_alpha=!!e,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,["BM","BA","CI","CP","IC","PT"].indexOf(this.flag)===-1)throw new Error("Invalid BMP File");this.parseHeader(),this.parseBGR()}function Nc(i){function e(R){if(!R)throw Error("assert :P")}function n(R,gt,dt){for(var F=0;4>F;F++)if(R[gt+F]!=dt.charCodeAt(F))return!0;return!1}function a(R,gt,dt,F,P){for(var z=0;zz+1?[]:new gt),!(D.length>>0;t&u;)u>>>=1;return u?(t&u-1)+u:t}function dt(t,r,u,d,m){e(!(d%u));do t[r+(d-=u)]=m;while(0=m),512>=m)var w=o(512);else if((w=o(m))==null)return 0;return function(y,N,x,k,U,K){var Z,G,vt=N,it=1<Z;++Z){if(H[Z]>1<(Rt-=H[Z]))return 0;for(;0=Z;++Z,U<<=1){if(St+=Rt<<=1,0>(Rt-=H[Z]))return 0;for(;0bt&&!(0>=(pt-=H[bt]));)++bt,pt<<=1;it+=_t=1<<(pt=bt-x),y[N+(bt=Ot&mt)].g=pt+x,y[N+bt].value=vt-N-bt}k.g=Z-x,k.value=K[G++],dt(y,vt+(Ot>>x),U,_t,k),Ot=gt(Ot,Z)}}return St!=2*V[15]-1?0:it}(t,r,u,d,m,w)}function P(){this.value=this.g=0}function z(){this.value=this.g=0}function D(){this.G=l(5,P),this.H=o(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=l(rn,z)}function at(t,r,u,d){e(t!=null),e(r!=null),e(2147483648>d),t.Ca=254,t.I=0,t.b=-8,t.Ka=0,t.oa=r,t.pa=u,t.Jd=r,t.Yc=u+d,t.Zc=4<=d?u+d-4+1:u,Q(t)}function nt(t,r){for(var u=0;0d),t.Sb=d,t.Ra=0,t.u=0,t.h=0,4>>=8,t.Ra+=t.oa[t.pa+t.bb]<>>0,++t.bb,t.u-=8;M(t)&&(t.h=1,t.u=0)}function ht(t,r){if(e(0<=r),!t.h&&r<=gi){var u=j(t)&pi[r];return t.u+=r,ft(t),u}return t.h=1,t.u=0}function kt(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function L(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function j(t){return t.Ra>>>(t.u&mi-1)>>>0}function M(t){return e(t.bb<=t.Sb),t.h||t.bb==t.Sb&&t.u>mi}function W(t,r){t.u=r,t.h=M(t)}function Y(t){t.u>=Yi&&(e(t.u>=Yi),ft(t))}function Q(t){e(t!=null&&t.oa!=null),t.pa>>0,t.b+=8):(e(t!=null&&t.oa!=null),t.pat.b&&Q(t);var d=t.b,m=u*r>>>8,w=(t.I>>>d>m)+0;for(w?(u-=m,t.I-=m+1<>>0):u=m+1,d=u,m=0;256<=d;)m+=8,d>>=8;return d=7^m+an[d],t.b-=d,t.Ca=(u<>24&255,t[r+1]=u>>16&255,t[r+2]=u>>8&255,t[r+3]=u>>0&255}function Nt(t,r){return t[r+0]<<0|t[r+1]<<8}function Ct(t,r){return Nt(t,r)|t[r+2]<<16}function Bt(t,r){return Nt(t,r)|Nt(t,r+2)<<16}function Ut(t,r){var u=1<=m||0>=w?0:(u[0]=m,d[0]=w,1)}function Et(t,r){return t+(1<>>r}function Lt(t,r){return((4278255360&t)+(4278255360&r)>>>0&4278255360)+((16711935&t)+(16711935&r)>>>0&16711935)>>>0}function xt(t,r){R[r]=function(u,d,m,w,y,N,x){var k;for(k=0;k>>1)+(t&r)>>>0}function qt(t){return 0<=t&&256>t?t:0>t?0:255>1))}function $t(t,r,u){return Math.abs(r-u)-Math.abs(t-u)}function te(t,r,u,d,m,w,y){for(d=w[y-1],u=0;u>8&255,x=16711935&(x=(x=16711935&y)+((N<<16)+N));d[m+w]=(4278255360&y)+x>>>0}}function de(t,r){r.jd=t>>0&255,r.hd=t>>8&255,r.ud=t>>16&255}function Wt(t,r,u,d,m,w){var y;for(y=0;y>>8,k=N,U=255&(U=(U=N>>>16)+((t.jd<<24>>24)*(x<<24>>24)>>>5));k=255&(k=(k=k+((t.hd<<24>>24)*(x<<24>>24)>>>5))+((t.ud<<24>>24)*(U<<24>>24)>>>5)),m[w+y]=(4278255360&N)+(U<<16)+k}}function ee(t,r,u,d,m){R[r]=function(w,y,N,x,k,U,K,Z,G){for(x=K;x>w.b,G=w.Ea,vt=w.K[0],it=w.w;if(8>Z)for(w=(1<>=Z}else R["VP8LMapColor"+u](x,k,vt,it,U,K,y,N,G)}}function It(t,r,u,d,m){for(u=r+u;r>16&255,d[m++]=w>>8&255,d[m++]=w>>0&255}}function Ve(t,r,u,d,m){for(u=r+u;r>16&255,d[m++]=w>>8&255,d[m++]=w>>0&255,d[m++]=w>>24&255}}function oe(t,r,u,d,m){for(u=r+u;r>16&240|y>>12&15,y=y>>0&240|y>>28&15;d[m++]=w,d[m++]=y}}function yn(t,r,u,d,m){for(u=r+u;r>16&248|y>>13&7,y=y>>5&224|y>>3&31;d[m++]=w,d[m++]=y}}function ge(t,r,u,d,m){for(u=r+u;r>0&255,d[m++]=w>>8&255,d[m++]=w>>16&255}}function Le(t,r,u,d,m,w){if(w==0)for(u=r+u;r>24|w[1]>>8&65280|w[2]<<8&16711680|w[3]<<24)>>>0),m+=32;else a(d,m,t,r,u)}function Rn(t,r){R[r][0]=R[t+"0"],R[r][1]=R[t+"1"],R[r][2]=R[t+"2"],R[r][3]=R[t+"3"],R[r][4]=R[t+"4"],R[r][5]=R[t+"5"],R[r][6]=R[t+"6"],R[r][7]=R[t+"7"],R[r][8]=R[t+"8"],R[r][9]=R[t+"9"],R[r][10]=R[t+"10"],R[r][11]=R[t+"11"],R[r][12]=R[t+"12"],R[r][13]=R[t+"13"],R[r][14]=R[t+"0"],R[r][15]=R[t+"0"]}function ce(t){return t==To||t==zo||t==za||t==Uo}function Br(){this.eb=[],this.size=this.A=this.fb=0}function Ae(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function Ln(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new Br,this.f.kb=new Ae,this.sd=null}function $n(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function xe(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function Yt(t){return alert("todo:WebPSamplerProcessPlane"),t.T}function ue(t,r){var u=t.T,d=r.ba.f.RGBA,m=d.eb,w=d.fb+t.ka*d.A,y=bn[r.ba.S],N=t.y,x=t.O,k=t.f,U=t.N,K=t.ea,Z=t.W,G=r.cc,vt=r.dc,it=r.Mc,H=r.Nc,V=t.ka,pt=t.ka+t.T,bt=t.U,mt=bt+1>>1;for(V==0?y(N,x,null,null,k,U,K,Z,k,U,K,Z,m,w,null,null,bt):(y(r.ec,r.fc,N,x,G,vt,it,H,k,U,K,Z,m,w-d.A,m,w,bt),++u);V+2u,m=u==Da||u==Ra||u==Ta||u==Ro||u==12||ce(u);if(r.memory=null,r.Ib=null,r.Jb=null,r.Nd=null,!Vi(r.Oa,t,m?11:12))return 0;if(m&&ce(u)&&yt(),t.da)alert("todo:use_scaling");else{if(d){if(r.Ib=Yt,t.Kb){if(u=t.U+1>>1,r.memory=o(t.U+2*u),r.memory==null)return 0;r.ec=r.memory,r.fc=0,r.cc=r.ec,r.dc=r.fc+t.U,r.Mc=r.cc,r.Nc=r.dc+u,r.Ib=ue,yt()}}else alert("todo:EmitYUV");m&&(r.Jb=Mr,d&&J())}if(d&&!Ts){for(t=0;256>t;++t)au[t]=89858*(t-128)+Ha>>Ua,cu[t]=-22014*(t-128)+Ha,su[t]=-45773*(t-128),ou[t]=113618*(t-128)+Ha>>Ua;for(t=Qi;t>Ua,uu[t-Qi]=ln(r,255),lu[t-Qi]=ln(r+8>>4,15);Ts=1}return 1}function Tn(t){var r=t.ma,u=t.U,d=t.T;return e(!(1&t.ka)),0>=u||0>=d?0:(u=r.Ib(t,r),r.Jb!=null&&r.Jb(t,r,u),r.Dc+=u,1)}function zn(t){t.ma.memory=null}function zt(t,r,u,d){return ht(t,8)!=47?0:(r[0]=ht(t,14)+1,u[0]=ht(t,14)+1,d[0]=ht(t,1),ht(t,3)!=0?0:!t.h)}function Nn(t,r){if(4>t)return t+1;var u=t-2>>1;return(2+(1&t)<>4)*t+(8-(15&u)))?u:1;var u}function en(t,r,u){var d=j(u),m=t[r+=255&d].g-8;return 0>>0,e(8>=u.g),t.g}function Oe(t,r,u){var d=t.xc;return e((r=d==0?0:t.vc[t.md*(u>>d)+(r>>d)])>_t.b)*St;itbt&&(ne=bt),(0,gr[se[le++]>>8&15])(Z,G+ +ae,V,pt+ae-bt,ne-ae,V,pt+ae),ae=ne}G+=bt,pt+=bt,++it&Ot||(_t+=St)}K!=k.nc&&a(x,N-vt,x,N+(K-U-1)*vt,vt);break;case 1:for(vt=Z,H=G,bt=(Z=k.Ea)-(pt=Z&~(V=(G=1<>k.b)*it;U=m),0w.o&&(d=w.o),u=d?u=0:(m[0]+=4*w.v,w.ka=u-w.j,w.U=w.va-w.v,w.T=d-u,u=1),u){if(N=N[0],11>(u=t.ca).S){var U=u.f.RGBA,K=(d=u.S,m=w.U,w=w.T,k=U.eb,U.A),Z=w;for(U=U.fb+t.Ma*U.A;0d){var m=t.l.width,w=u.ca,y=u.tb+m*d,N=t.V,x=t.Ba+t.c*d,k=t.gc;e(t.ab==1),e(k[0].hc==3),Eo(k[0],d,r,N,x,w,y),An(u,d,r,w,y,m)}t.C=t.Ma=r}function Sn(t,r,u,d,m,w,y){var N=t.$/d,x=t.$%d,k=t.m,U=t.s,K=u+t.$,Z=K;m=u+d*m;var G=u+d*w,vt=280+U.ua,it=t.Pb?N:16777216,H=0=it){var Ot=K-u;e((it=t).Pb),it.wd=it.m,it.xd=Ot,0Rt.g?(W(mt,mt.u+Rt.g),Ot[St]=Rt.value,mt=0):(W(mt,mt.u+Rt.g-256),e(256<=Rt.value),mt=Rt.value),mt==0&&(bt=!0)}else mt=en(pt.G[0],pt.H[0],k);if(k.h)break;if(bt||256>mt){if(!bt)if(pt.nd)r[K]=(pt.qb|mt<<8)>>>0;else{if(Y(k),bt=en(pt.G[1],pt.H[1],k),Y(k),Ot=en(pt.G[2],pt.H[2],k),St=en(pt.G[3],pt.H[3],k),k.h)break;r[K]=(St<<24|bt<<16|mt<<8|Ot)>>>0}if(bt=!1,++K,++x>=d&&(x=0,++N,y!=null&&N<=w&&!(N%16)&&y(t,N),H!=null))for(;Z>>H.Mb]=mt}else if(280>mt){if(mt=Nn(mt-256,k),Ot=en(pt.G[4],pt.H[4],k),Y(k),Ot=Un(d,Ot=Nn(Ot,k)),k.h)break;if(K-u=d;)x-=d,++N,y!=null&&N<=w&&!(N%16)&&y(t,N);if(e(K<=m),x&V&&(pt=Oe(U,x,N)),H!=null)for(;Z>>H.Mb]=mt}else{if(!(mt>>H.Mb]=mt;mt=K,e(!(bt>>>(Ot=H).Xa)),r[mt]=Ot.X[bt],bt=!0}bt||e(k.h==M(k))}if(t.Pb&&k.h&&Kw?w:N),t.a=0,t.$=K-u}return 1}return t.a=3,0}function Hn(t){e(t!=null),t.vc=null,t.yc=null,t.Ya=null;var r=t.Wa;r!=null&&(r.X=null),t.vb=null,e(t!=null)}function pn(){var t=new Bo;return t==null?null:(t.a=0,t.xb=Bs,Rn("Predictor","VP8LPredictors"),Rn("Predictor","VP8LPredictors_C"),Rn("PredictorAdd","VP8LPredictorsAdd"),Rn("PredictorAdd","VP8LPredictorsAdd_C"),Ba=ie,gn=Wt,In=It,mr=Ve,Gn=oe,rr=yn,vi=ge,R.VP8LMapColor32b=Xi,R.VP8LMapColor8b=qo,t)}function Wn(t,r,u,d,m){var w=1,y=[t],N=[r],x=d.m,k=d.s,U=null,K=0;t:for(;;){if(u)for(;w&&ht(x,1);){var Z=y,G=N,vt=d,it=1,H=vt.m,V=vt.gc[vt.ab],pt=ht(H,2);if(vt.Oc&1<=vt.ab),pt){case 0:case 1:V.b=ht(H,3)+2,it=Wn(Et(V.Ea,V.b),Et(V.nc,V.b),0,vt,V.K),V.K=V.K[0];break;case 3:var bt,mt=ht(H,8)+1,Ot=16>_t.b),le=o(se);if(le==null)bt=0;else{var ae=_t.K[0],ne=_t.w;for(le[0]=_t.K[0][0],St=1;St<1*Rt;++St)le[St]=Lt(ae[ne+St],le[St-1]);for(;St<4*se;++St)le[St]=0;_t.K[0]=null,_t.K[0]=le,bt=1}}it=bt;break;case 2:break;default:e(0)}w=it}}if(y=y[0],N=N[0],w&&ht(x,1)&&!(w=1<=(K=ht(x,4))&&11>=K)){d.a=3;break t}var me;if(me=w)e:{var pe,Zt,Me,on=d,Ee=y,sn=N,he=K,fn=u,dn=on.m,ze=on.s,We=[null],$e=1,wn=0,Yn=Gc[he];n:for(;;){if(fn&&ht(dn,1)){var Ue=ht(dn,3)+2,cr=Et(Ee,Ue),Hr=Et(sn,Ue),Li=cr*Hr;if(!Wn(cr,Hr,0,on,We))break n;for(We=We[0],ze.xc=Ue,pe=0;pe>8&65535;We[pe]=Nr,Nr>=$e&&($e=Nr+1)}}if(dn.h)break n;for(Zt=0;5>Zt;++Zt){var _e=js[Zt];!Zt&&0=Hs),Va=Ws;var ta=o(wn);if(Va==null||ta==null||Go==null){on.a=1;break n}var Ga=Go;for(pe=Me=0;pe<$e;++pe){var Bn=Va[pe],Ni=Bn.G,Ai=Bn.H,Vs=0,Ya=1,Gs=0;for(Zt=0;5>Zt;++Zt){_e=js[Zt],Ni[Zt]=Ga,Ai[Zt]=Me,!Zt&&0$a)break r}else Xo=$a;for(na=0;na<$a&&Xo--;){Y(xr);var tc=Qs[0+(127&j(xr))];W(xr,xr.u+tc.g);var xi=tc.value;if(16>xi)Zs[na++]=xi,xi!=0&&($s=xi);else{var yu=xi==16,ec=xi-16,Lu=Uc[ec],nc=ht(xr,zc[ec])+Lu;if(na+nc>$a)break r;for(var Nu=yu?$s:0;0=Zt){var ra,Zo=ta[0];for(ra=1;ra<_e;++ra)ta[ra]>Zo&&(Zo=ta[ra]);Gs+=Zo}}if(Bn.nd=Ya,Bn.Qb=0,Ya&&(Bn.qb=(Ni[3][Ai[3]+0].value<<24|Ni[1][Ai[1]+0].value<<16|Ni[2][Ai[2]+0].value)>>>0,Vs==0&&256>Ni[0][Ai[0]+0].value&&(Bn.Qb=1,Bn.qb+=Ni[0][Ai[0]+0].value<<8)),Bn.jc=!Bn.Qb&&6>Gs,Bn.jc){var Qa,ur=Bn;for(Qa=0;Qa>=qe(to,8,_r),Sr>>=qe(ur.G[1][ur.H[1]+Sr],16,_r),Sr>>=qe(ur.G[2][ur.H[2]+Sr],0,_r),qe(ur.G[3][ur.H[3]+Sr],24,_r))}}}ze.vc=We,ze.Wb=$e,ze.Ya=Va,ze.yc=Go,me=1;break e}me=0}if(!(w=me)){d.a=3;break t}if(0d+1?[]:0),!(m.lengthm)return ke(t,7,"Truncated header.");var w=u[d+0]|u[d+1]<<8|u[d+2]<<16,y=t.Od;if(y.Rb=!(1&w),y.td=w>>1&7,y.yd=w>>4&1,y.ub=w>>5,3m)return ke(t,7,"cannot parse picture header");if(!va(u,d,m))return ke(t,3,"Bad code word");N.c=16383&(u[d+4]<<8|u[d+3]),N.Td=u[d+4]>>6,N.i=16383&(u[d+6]<<8|u[d+5]),N.Ud=u[d+6]>>6,d+=7,m-=7,t.za=N.c+15>>4,t.Ub=N.i+15>>4,r.width=N.c,r.height=N.i,r.Da=0,r.j=0,r.v=0,r.va=r.width,r.o=r.height,r.da=0,r.ib=r.width,r.hb=r.height,r.U=r.width,r.T=r.height,c((w=t.Pa).jb,0,255,w.jb.length),e((w=t.Qa)!=null),w.Cb=0,w.Bb=0,w.Fb=1,c(w.Zb,0,0,w.Zb.length),c(w.Lb,0,0,w.Lb)}if(y.ub>m)return ke(t,7,"bad partition length");at(w=t.m,u,d,y.ub),d+=y.ub,m-=y.ub,y.Rb&&(N.Ld=et(w),N.Kd=et(w)),N=t.Qa;var x,k=t.Pa;if(e(w!=null),e(N!=null),N.Cb=et(w),N.Cb){if(N.Bb=et(w),et(w)){for(N.Fb=et(w),x=0;4>x;++x)N.Zb[x]=et(w)?lt(w,7):0;for(x=0;4>x;++x)N.Lb[x]=et(w)?lt(w,6):0}if(N.Bb)for(x=0;3>x;++x)k.jb[x]=et(w)?nt(w,8):255}else N.Bb=0;if(w.Ka)return ke(t,3,"cannot parse segment header");if((N=t.ed).zd=et(w),N.Tb=nt(w,6),N.wb=nt(w,3),N.Pc=et(w),N.Pc&&et(w)){for(k=0;4>k;++k)et(w)&&(N.vd[k]=lt(w,6));for(k=0;4>k;++k)et(w)&&(N.od[k]=lt(w,6))}if(t.L=N.Tb==0?0:N.zd?1:2,w.Ka)return ke(t,3,"cannot parse filter header");var U=m;if(m=x=d,d=x+U,N=U,t.Xb=(1<N&&(K=N),at(t.Jc[+U],u,x,K),x+=K,N-=K,m+=3}at(t.Jc[+k],u,x,N),u=xK;++K){if(U.Cb){var Z=U.Zb[K];U.Fb||(Z+=u)}else{if(0>16,8>G.Eb[1]&&(G.Eb[1]=8),G.Qc[0]=Ho[ln(Z+k,117)],G.Qc[1]=Wo[ln(Z+x,127)],G.lc=Z+x}if(!y.Rb)return ke(t,4,"Not a key frame.");for(et(w),y=t.Pa,u=0;4>u;++u){for(m=0;8>m;++m)for(d=0;3>d;++d)for(N=0;11>N;++N)k=rt(w,$c[u][m][d][N])?nt(w,8):Kc[u][m][d][N],y.Wc[u][m].Yb[d][N]=k;for(m=0;17>m;++m)y.Xc[u][m]=y.Wc[u][Qc[m]]}return t.kc=et(w),t.kc&&(t.Bd=nt(w,8)),t.cb=1}function wa(t,r,u,d,m,w,y){var N=r[m].Yb[u];for(u=0;16>m;++m){if(!rt(t,N[u+0]))return m;for(;!rt(t,N[u+1]);)if(N=r[++m].Yb[0],u=0,m==16)return 16;var x=r[m+1].Yb;if(rt(t,N[u+2])){var k=t,U=0;if(rt(k,(Z=N)[(K=u)+3]))if(rt(k,Z[K+6])){for(N=0,K=2*(U=rt(k,Z[K+8]))+(Z=rt(k,Z[K+9+U])),U=0,Z=Jc[K];Z[N];++N)U+=U+rt(k,Z[N]);U+=3+(8<(k=t).b&&Q(k);var K,Z=k.b,G=(K=k.Ca>>1)-(k.I>>Z)>>31;--k.b,k.Ca+=G,k.Ca|=1,k.I-=(K+1&G)<>4,t.zb=r.j-u>>4,0>t.yb&&(t.yb=0),0>t.zb&&(t.zb=0)),t.Va=r.o+15+u>>4,t.Hb=r.va+15+u>>4,t.Hb>t.za&&(t.Hb=t.za),t.Va>t.Ub&&(t.Va=t.Ub),0u;++u){var m;if(t.Qa.Cb){var w=t.Qa.Lb[u];t.Qa.Fb||(w+=d.Tb)}else w=d.Tb;for(m=0;1>=m;++m){var y=t.gd[u][m],N=w;if(d.Pc&&(N+=d.vd[0],m&&(N+=d.od[0])),0<(N=0>N?0:63>2:x>>1)>9-d.wb&&(x=9-d.wb),1>x&&(x=1),y.dd=x,y.tc=2*N+x,y.ld=40<=N?2:15<=N?1:0}else y.tc=0;y.La=m}}}u=0}else ke(t,6,"Frame setup failed"),u=t.a;if(u=u==0){if(u){t.$c=0,0t.Vb){if(t.Vb=0,t.Ec=o(y),t.Fc=0,t.Ec==null){u=ke(t,1,"no memory during frame initialization.");break t}t.Vb=y}y=t.Ec,N=t.Fc,t.Ac=y,t.Bc=N,N+=d,t.Gd=l(k,ma),t.Hd=0,t.rb=l(U+1,ga),t.sb=1,t.wa=K?l(K,ni):null,t.Y=0,t.D.Nb=0,t.D.wa=t.wa,t.D.Y=t.Y,0=u;++u)Ss[255+u]=0>u?-u:u;for(u=-1020;1020>=u;++u)_s[1020+u]=-128>u?-128:127=u;++u)Ps[112+u]=-16>u?-16:15=u;++u)ks[255+u]=0>u?0:255mt;++mt){var ae,ne=Rt[0+mt];for(ae=0;4>ae;++ae){ne=Zc[Ot[St+ae]][ne];for(var me=Os[rt(bt,ne[0])];0>3;for(me=0;256>me;me+=16)mt[se+me]=sn}Me=1,on=St[0]}var he=15&bt.la,fn=15&le.la;for(me=0;4>me;++me){var dn=1&fn;for(sn=Zt=0;4>sn;++sn)he=he>>1|(dn=(Ee=$i(Ot,on,Ee=dn+(1&he),_t.Sc,Me,mt,se))>Me)<<7,Zt=Zt<<2|(3>=4,fn=fn>>1|dn<<7,ae=(ae<<8|Zt)>>>0}for(on=he,Me=fn>>4,pe=0;4>pe;pe+=2){for(Zt=0,he=bt.la>>4+pe,fn=le.la>>4+pe,me=0;2>me;++me){for(dn=1&fn,sn=0;2>sn;++sn)Ee=dn+(1&he),he=he>>1|(dn=0<(Ee=$i(Ot,St[2],Ee,_t.Qc,0,mt,se)))<<3,Zt=Zt<<2|(3>=2,fn=fn>>1|dn<<5}ne|=Zt<<4*pe,on|=he<<4<=H.zb&&H.M<=H.Va,H.Aa==0)t:{if(it.M=H.M,it.uc=bt,Wi(H,it),pt=1,it=(Zt=H.D).Nb,bt=(ne=Wa[H.L])*H.R,Ot=ne/2*H.B,me=16*it*H.R,sn=8*it*H.B,St=H.sa,Rt=H.ta-bt+me,_t=H.qa,mt=H.ra-Ot+sn,se=H.Ha,le=H.Ia-Ot+sn,fn=(he=Zt.M)==0,ae=he>=H.Va-1,H.Aa==2&&Wi(H,Zt),Zt.uc)for(dn=(Ee=H).D.M,e(Ee.D.uc),Zt=Ee.yb;ZtV.o&&(he=V.o),V.F=null,V.J=null,H.Fa!=null&&0>1),V.W+=H.B*(ne>>1),V.F!=null&&(V.J+=V.width*ne)),Zt>1,V.W+=V.v>>1,V.F!=null&&(V.J+=V.v),V.ka=Zt-V.j,V.U=V.va-V.v,V.T=he-Zt,pt=V.put(V))}it+1!=H.Ic||ae||(a(H.sa,H.ta-bt,St,Rt+16*H.R,bt),a(H.qa,H.ra-Ot,_t,mt+8*H.B,Ot),a(H.Ha,H.Ia-Ot,se,le+8*H.B,Ot))}if(!pt)return ke(G,6,"Output aborted.")}return 1}(t,r)),r.bc!=null&&r.bc(r),u&=1}return u?(t.cb=0,u):0}function _n(t,r,u,d,m){m=t[r+u+32*d]+(m>>3),t[r+u+32*d]=-256&m?0>m?0:255:m}function ii(t,r,u,d,m,w){_n(t,r,0,u,d+m),_n(t,r,1,u,d+w),_n(t,r,2,u,d-w),_n(t,r,3,u,d-m)}function nn(t){return(20091*t>>16)+t}function Ci(t,r,u,d){var m,w=0,y=o(16);for(m=0;4>m;++m){var N=t[r+0]+t[r+8],x=t[r+0]-t[r+8],k=(35468*t[r+4]>>16)-nn(t[r+12]),U=nn(t[r+4])+(35468*t[r+12]>>16);y[w+0]=N+U,y[w+1]=x+k,y[w+2]=x-k,y[w+3]=N-U,w+=4,r++}for(m=w=0;4>m;++m)N=(t=y[w+0]+4)+y[w+8],x=t-y[w+8],k=(35468*y[w+4]>>16)-nn(y[w+12]),_n(u,d,0,0,N+(U=nn(y[w+4])+(35468*y[w+12]>>16))),_n(u,d,1,0,x+k),_n(u,d,2,0,x-k),_n(u,d,3,0,N-U),w++,d+=32}function ya(t,r,u,d){var m=t[r+0]+4,w=35468*t[r+4]>>16,y=nn(t[r+4]),N=35468*t[r+1]>>16;ii(u,d,0,m+y,t=nn(t[r+1]),N),ii(u,d,1,m+w,t,N),ii(u,d,2,m-w,t,N),ii(u,d,3,m-y,t,N)}function bo(t,r,u,d,m){Ci(t,r,u,d),m&&Ci(t,r+16,u,d+4)}function La(t,r,u,d){bi(t,r+0,u,d,1),bi(t,r+32,u,d+128,1)}function wo(t,r,u,d){var m;for(t=t[r+0]+4,m=0;4>m;++m)for(r=0;4>r;++r)_n(u,d,r,m,t)}function Na(t,r,u,d){t[r+0]&&jn(t,r+0,u,d),t[r+16]&&jn(t,r+16,u,d+4),t[r+32]&&jn(t,r+32,u,d+128),t[r+48]&&jn(t,r+48,u,d+128+4)}function yo(t,r,u,d){var m,w=o(16);for(m=0;4>m;++m){var y=t[r+0+m]+t[r+12+m],N=t[r+4+m]+t[r+8+m],x=t[r+4+m]-t[r+8+m],k=t[r+0+m]-t[r+12+m];w[0+m]=y+N,w[8+m]=y-N,w[4+m]=k+x,w[12+m]=k-x}for(m=0;4>m;++m)y=(t=w[0+4*m]+3)+w[3+4*m],N=w[1+4*m]+w[2+4*m],x=w[1+4*m]-w[2+4*m],k=t-w[3+4*m],u[d+0]=y+N>>3,u[d+16]=k+x>>3,u[d+32]=y-N>>3,u[d+48]=k-x>>3,d+=64}function ji(t,r,u){var d,m=r-32,w=hn,y=255-t[m-1];for(d=0;du;++u)a(t,r+32*u,t,r-32,16)}function ai(t,r){var u;for(u=16;0d;++d)c(r,u+32*d,t,16)}function Aa(t,r){var u,d=16;for(u=0;16>u;++u)d+=t[r-1+32*u]+t[r+u-32];oi(d>>5,t,r)}function Ge(t,r){var u,d=8;for(u=0;16>u;++u)d+=t[r-1+32*u];oi(d>>4,t,r)}function xo(t,r){var u,d=8;for(u=0;16>u;++u)d+=t[r+u-32];oi(d>>4,t,r)}function xa(t,r){oi(128,t,r)}function Vt(t,r,u){return t+2*r+u+2>>2}function So(t,r){var u,d=r-32;for(d=new Uint8Array([Vt(t[d-1],t[d+0],t[d+1]),Vt(t[d+0],t[d+1],t[d+2]),Vt(t[d+1],t[d+2],t[d+3]),Vt(t[d+2],t[d+3],t[d+4])]),u=0;4>u;++u)a(t,r+32*u,d,0,d.length)}function _o(t,r){var u=t[r-1],d=t[r-1+32],m=t[r-1+64],w=t[r-1+96];At(t,r+0,16843009*Vt(t[r-1-32],u,d)),At(t,r+32,16843009*Vt(u,d,m)),At(t,r+64,16843009*Vt(d,m,w)),At(t,r+96,16843009*Vt(m,w,w))}function Vn(t,r){var u,d=4;for(u=0;4>u;++u)d+=t[r+u-32]+t[r-1+32*u];for(d>>=3,u=0;4>u;++u)c(t,r+32*u,d,4)}function Sa(t,r){var u=t[r-1+0],d=t[r-1+32],m=t[r-1+64],w=t[r-1-32],y=t[r+0-32],N=t[r+1-32],x=t[r+2-32],k=t[r+3-32];t[r+0+96]=Vt(d,m,t[r-1+96]),t[r+1+96]=t[r+0+64]=Vt(u,d,m),t[r+2+96]=t[r+1+64]=t[r+0+32]=Vt(w,u,d),t[r+3+96]=t[r+2+64]=t[r+1+32]=t[r+0+0]=Vt(y,w,u),t[r+3+64]=t[r+2+32]=t[r+1+0]=Vt(N,y,w),t[r+3+32]=t[r+2+0]=Vt(x,N,y),t[r+3+0]=Vt(k,x,N)}function _a(t,r){var u=t[r+1-32],d=t[r+2-32],m=t[r+3-32],w=t[r+4-32],y=t[r+5-32],N=t[r+6-32],x=t[r+7-32];t[r+0+0]=Vt(t[r+0-32],u,d),t[r+1+0]=t[r+0+32]=Vt(u,d,m),t[r+2+0]=t[r+1+32]=t[r+0+64]=Vt(d,m,w),t[r+3+0]=t[r+2+32]=t[r+1+64]=t[r+0+96]=Vt(m,w,y),t[r+3+32]=t[r+2+64]=t[r+1+96]=Vt(w,y,N),t[r+3+64]=t[r+2+96]=Vt(y,N,x),t[r+3+96]=Vt(N,x,x)}function si(t,r){var u=t[r-1+0],d=t[r-1+32],m=t[r-1+64],w=t[r-1-32],y=t[r+0-32],N=t[r+1-32],x=t[r+2-32],k=t[r+3-32];t[r+0+0]=t[r+1+64]=w+y+1>>1,t[r+1+0]=t[r+2+64]=y+N+1>>1,t[r+2+0]=t[r+3+64]=N+x+1>>1,t[r+3+0]=x+k+1>>1,t[r+0+96]=Vt(m,d,u),t[r+0+64]=Vt(d,u,w),t[r+0+32]=t[r+1+96]=Vt(u,w,y),t[r+1+32]=t[r+2+96]=Vt(w,y,N),t[r+2+32]=t[r+3+96]=Vt(y,N,x),t[r+3+32]=Vt(N,x,k)}function Oi(t,r){var u=t[r+0-32],d=t[r+1-32],m=t[r+2-32],w=t[r+3-32],y=t[r+4-32],N=t[r+5-32],x=t[r+6-32],k=t[r+7-32];t[r+0+0]=u+d+1>>1,t[r+1+0]=t[r+0+64]=d+m+1>>1,t[r+2+0]=t[r+1+64]=m+w+1>>1,t[r+3+0]=t[r+2+64]=w+y+1>>1,t[r+0+32]=Vt(u,d,m),t[r+1+32]=t[r+0+96]=Vt(d,m,w),t[r+2+32]=t[r+1+96]=Vt(m,w,y),t[r+3+32]=t[r+2+96]=Vt(w,y,N),t[r+3+64]=Vt(y,N,x),t[r+3+96]=Vt(N,x,k)}function Po(t,r){var u=t[r-1+0],d=t[r-1+32],m=t[r-1+64],w=t[r-1+96];t[r+0+0]=u+d+1>>1,t[r+2+0]=t[r+0+32]=d+m+1>>1,t[r+2+32]=t[r+0+64]=m+w+1>>1,t[r+1+0]=Vt(u,d,m),t[r+3+0]=t[r+1+32]=Vt(d,m,w),t[r+3+32]=t[r+1+64]=Vt(m,w,w),t[r+3+64]=t[r+2+64]=t[r+0+96]=t[r+1+96]=t[r+2+96]=t[r+3+96]=w}function ko(t,r){var u=t[r-1+0],d=t[r-1+32],m=t[r-1+64],w=t[r-1+96],y=t[r-1-32],N=t[r+0-32],x=t[r+1-32],k=t[r+2-32];t[r+0+0]=t[r+2+32]=u+y+1>>1,t[r+0+32]=t[r+2+64]=d+u+1>>1,t[r+0+64]=t[r+2+96]=m+d+1>>1,t[r+0+96]=w+m+1>>1,t[r+3+0]=Vt(N,x,k),t[r+2+0]=Vt(y,N,x),t[r+1+0]=t[r+3+32]=Vt(u,y,N),t[r+1+32]=t[r+3+64]=Vt(d,u,y),t[r+1+64]=t[r+3+96]=Vt(m,d,u),t[r+1+96]=Vt(w,m,d)}function Fo(t,r){var u;for(u=0;8>u;++u)a(t,r+32*u,t,r-32,8)}function Bi(t,r){var u;for(u=0;8>u;++u)c(t,r,t[r-1],8),r+=32}function qr(t,r,u){var d;for(d=0;8>d;++d)c(r,u+32*d,t,8)}function hr(t,r){var u,d=8;for(u=0;8>u;++u)d+=t[r+u-32]+t[r-1+32*u];qr(d>>4,t,r)}function Io(t,r){var u,d=4;for(u=0;8>u;++u)d+=t[r+u-32];qr(d>>3,t,r)}function Dr(t,r){var u,d=4;for(u=0;8>u;++u)d+=t[r-1+32*u];qr(d>>3,t,r)}function Mi(t,r){qr(128,t,r)}function ci(t,r,u){var d=t[r-u],m=t[r+0],w=3*(m-d)+Do[1020+t[r-2*u]-t[r+u]],y=Ea[112+(w+4>>3)];t[r-u]=hn[255+d+Ea[112+(w+3>>3)]],t[r+0]=hn[255+m-y]}function Pa(t,r,u,d){var m=t[r+0],w=t[r+u];return vn[255+t[r-2*u]-t[r-u]]>d||vn[255+w-m]>d}function ka(t,r,u,d){return 4*vn[255+t[r-u]-t[r+0]]+vn[255+t[r-2*u]-t[r+u]]<=d}function Fa(t,r,u,d,m){var w=t[r-3*u],y=t[r-2*u],N=t[r-u],x=t[r+0],k=t[r+u],U=t[r+2*u],K=t[r+3*u];return 4*vn[255+N-x]+vn[255+y-k]>d?0:vn[255+t[r-4*u]-w]<=m&&vn[255+w-y]<=m&&vn[255+y-N]<=m&&vn[255+K-U]<=m&&vn[255+U-k]<=m&&vn[255+k-x]<=m}function Ia(t,r,u,d){var m=2*d+1;for(d=0;16>d;++d)ka(t,r+d,u,m)&&ci(t,r+d,u)}function er(t,r,u,d){var m=2*d+1;for(d=0;16>d;++d)ka(t,r+d*u,1,m)&&ci(t,r+d*u,1)}function fr(t,r,u,d){var m;for(m=3;0>7,V=18*pt+63>>7,pt=9*pt+63>>7;x[k-3*U]=hn[255+x[k-3*U]+pt],x[k-2*U]=hn[255+K+V],x[k-U]=hn[255+Z+H],x[k+0]=hn[255+G-H],x[k+U]=hn[255+vt-V],x[k+2*U]=hn[255+it-pt]}r+=d}}function Pn(t,r,u,d,m,w,y,N){for(w=2*w+1;0>3)],it=Ea[112+(it+3>>3)],H=vt+1>>1;x[k-2*U]=hn[255+x[k-2*U]+H],x[k-U]=hn[255+K+it],x[k+0]=hn[255+Z-vt],x[k+U]=hn[255+G-H]}r+=d}}function Ei(t,r,u,d,m,w){dr(t,r,u,1,16,d,m,w)}function Rr(t,r,u,d,m,w){dr(t,r,1,u,16,d,m,w)}function jo(t,r,u,d,m,w){var y;for(y=3;0k?0:255:k)&255,k=x,m[w+N]=U}}function Ui(t,r,u,d){var m=r.width,w=r.o;if(e(t!=null&&r!=null),0>u||0>=d||u+d>w)return null;if(!t.Cc){if(t.ga==null){var y;if(t.ga=new hi,(y=t.ga==null)||(y=r.width*r.o,e(t.Gb.length==0),t.Gb=o(y),t.Uc=0,t.Gb==null?y=0:(t.mb=t.Gb,t.nb=t.Uc,t.rc=null,y=1),y=!y),!y){y=t.ga;var N=t.Fa,x=t.P,k=t.qc,U=t.mb,K=t.nb,Z=x+1,G=k-1,vt=y.l;if(e(N!=null&&U!=null&&r!=null),Lr[0]=null,Lr[1]=Tr,Lr[2]=zi,Lr[3]=pr,y.ca=U,y.tb=K,y.c=r.width,y.i=r.height,e(0=k)r=0;else if(y.$a=N[x+0]>>0&3,y.Z=N[x+0]>>2&3,y.Lc=N[x+0]>>4&3,x=N[x+0]>>6&3,0>y.$a||1=y.c*y.i;y=!r}if(y)return null;t.ga.Lc!=1?t.Ga=0:d=w-u}e(t.ga!=null),e(u+d<=w);t:{if(r=(N=t.ga).c,w=N.l.o,N.$a==0){if(Z=t.rc,G=t.Vc,vt=t.Fa,x=t.P+1+u*r,k=t.mb,U=t.nb+u*r,e(x<=t.P+t.qc),N.Z!=0)for(e(Lr[N.Z]!=null),y=0;y=r)r=1;else if(N.ic||J(),N.ic){N=y.V,Z=y.Ba,G=y.c;var it=y.i,H=(vt=1,x=y.$/G,k=y.$%G,U=y.m,K=y.s,y.$),V=G*it,pt=G*r,bt=K.wc,mt=H(it=en(mt.G[0],mt.H[0],U)))N[Z+H]=it,++H,++k>=G&&(k=0,++x<=r&&!(x%16)&&xn(y,x));else{if(!(280>it)){vt=0;break e}it=Nn(it-256,U);var Ot,St=en(mt.G[4],mt.H[4],U);if(Y(U),!(H>=(St=Un(G,St=Nn(St,U)))&&V-H>=it)){vt=0;break e}for(Ot=0;Ot=G;)k-=G,++x<=r&&!(x%16)&&xn(y,x);Hr?r:x);break e}!vt||U.h&&H=w&&(t.Cc=1),d=1}if(!d)return null;if(t.Cc&&((d=t.ga)!=null&&(d.mc=null),t.ga=null,0>23,N[x+4*y+1]=N[x+4*y+1]*K>>23,N[x+4*y+2]=N[x+4*y+2]*K>>23)}r+=w}}function v(t,r,u,d,m){for(;0>4)*x>>16;t[r+2*w+0]=(240&y|y>>4)*x>>16&240|(15&y|y<<4)*x>>16>>4&15,t[r+2*w+1]=240&k|N}r+=m}}function C(t,r,u,d,m,w,y,N){var x,k,U=255;for(k=0;k>8}function J(){wr=s,yi=v,Ma=C,xs=T}function st(t,r,u){R[t]=function(d,m,w,y,N,x,k,U,K,Z,G,vt,it,H,V,pt,bt){var mt,Ot=bt-1>>1,St=N[x+0]|k[U+0]<<16,Rt=K[Z+0]|G[vt+0]<<16;e(d!=null);var _t=3*St+Rt+131074>>2;for(r(d[m+0],255&_t,_t>>16,it,H),w!=null&&(_t=3*Rt+St+131074>>2,r(w[y+0],255&_t,_t>>16,V,pt)),mt=1;mt<=Ot;++mt){var se=N[x+mt]|k[U+mt]<<16,le=K[Z+mt]|G[vt+mt]<<16,ae=St+se+Rt+le+524296,ne=ae+2*(se+Rt)>>3;_t=ne+St>>1,St=(ae=ae+2*(St+le)>>3)+se>>1,r(d[m+2*mt-1],255&_t,_t>>16,it,H+(2*mt-1)*u),r(d[m+2*mt-0],255&St,St>>16,it,H+(2*mt-0)*u),w!=null&&(_t=ae+Rt>>1,St=ne+le>>1,r(w[y+2*mt-1],255&_t,_t>>16,V,pt+(2*mt-1)*u),r(w[y+2*mt+0],255&St,St>>16,V,pt+(2*mt+0)*u)),St=se,Rt=le}1&bt||(_t=3*St+Rt+131074>>2,r(d[m+bt-1],255&_t,_t>>16,it,H+(bt-1)*u),w!=null&&(_t=3*Rt+St+131074>>2,r(w[y+bt-1],255&_t,_t>>16,V,pt+(bt-1)*u)))}}function yt(){bn[qa]=eu,bn[Da]=Ms,bn[Is]=nu,bn[Ra]=Es,bn[Ta]=qs,bn[Ro]=Ds,bn[Cs]=ru,bn[To]=Ms,bn[zo]=Es,bn[za]=qs,bn[Uo]=Ds}function jt(t){return t&~iu?0>t?0:255:t>>Rs}function Dt(t,r){return jt((19077*t>>8)+(26149*r>>8)-14234)}function Kt(t,r,u){return jt((19077*t>>8)-(6419*r>>8)-(13320*u>>8)+8708)}function Qt(t,r){return jt((19077*t>>8)+(33050*r>>8)-17685)}function re(t,r,u,d,m){d[m+0]=Dt(t,u),d[m+1]=Kt(t,r,u),d[m+2]=Qt(t,r)}function Ne(t,r,u,d,m){d[m+0]=Qt(t,r),d[m+1]=Kt(t,r,u),d[m+2]=Dt(t,u)}function Se(t,r,u,d,m){var w=Kt(t,r,u);r=w<<3&224|Qt(t,r)>>3,d[m+0]=248&Dt(t,u)|w>>5,d[m+1]=r}function Be(t,r,u,d,m){var w=240&Qt(t,r)|15;d[m+0]=240&Dt(t,u)|Kt(t,r,u)>>4,d[m+1]=w}function Ye(t,r,u,d,m){d[m+0]=255,re(t,r,u,d,m+1)}function Te(t,r,u,d,m){Ne(t,r,u,d,m),d[m+3]=255}function kn(t,r,u,d,m){re(t,r,u,d,m),d[m+3]=255}function ln(t,r){return 0>t?0:t>r?r:t}function nr(t,r,u){R[t]=function(d,m,w,y,N,x,k,U,K){for(var Z=U+(-2&K)*u;U!=Z;)r(d[m+0],w[y+0],N[x+0],k,U),r(d[m+1],w[y+0],N[x+0],k,U+u),m+=2,++y,++x,U+=2*u;1&K&&r(d[m+0],w[y+0],N[x+0],k,U)}}function Oa(t,r,u){return u==0?t==0?r==0?6:5:r==0?4:0:u}function Hi(t,r,u,d,m){switch(t>>>30){case 3:bi(r,u,d,m,0);break;case 2:Ki(r,u,d,m);break;case 1:jn(r,u,d,m)}}function Wi(t,r){var u,d,m=r.M,w=r.Nb,y=t.oc,N=t.pc+40,x=t.oc,k=t.pc+584,U=t.oc,K=t.pc+600;for(u=0;16>u;++u)y[N+32*u-1]=129;for(u=0;8>u;++u)x[k+32*u-1]=129,U[K+32*u-1]=129;for(0u;++u)a(y,N+32*u-4,y,N+32*u+12,4);for(u=-1;8>u;++u)a(x,k+32*u-4,x,k+32*u+4,4),a(U,K+32*u-4,U,K+32*u+4,4)}var G=t.Gd,vt=t.Hd+d,it=Z.ad,H=Z.Hc;if(0=t.za-1?c(V,pt,G[vt].y[15],4):a(V,pt,G[vt+1].y,0,4)),u=0;4>u;u++)V[pt+128+u]=V[pt+256+u]=V[pt+384+u]=V[pt+0+u];for(u=0;16>u;++u,H<<=2)V=y,pt=N+zs[u],On[Z.Ob[u]](V,pt),Hi(H,it,16*+u,V,pt)}else if(V=Oa(d,m,Z.Ob[0]),yr[V](y,N),H!=0)for(u=0;16>u;++u,H<<=2)Hi(H,it,16*+u,y,N+zs[u]);for(u=Z.Gc,V=Oa(d,m,Z.Dd),sr[V](x,k),sr[V](U,K),H=it,V=x,pt=k,255&(Z=u>>0)&&(170&Z?vr(H,256,V,pt):ir(H,256,V,pt)),Z=U,H=K,255&(u>>=8)&&(170&u?vr(it,320,Z,H):ir(it,320,Z,H)),mu;++u)a(G,vt+u*t.R,y,N+32*u,16);for(u=0;8>u;++u)a(it,Z+u*t.B,x,k+32*u,8),a(H,V+u*t.B,U,K+32*u,8)}}function fi(t,r,u,d,m,w,y,N,x){var k=[0],U=[0],K=0,Z=x!=null?x.kd:0,G=x??new Ri;if(t==null||12>u)return 7;G.data=t,G.w=r,G.ha=u,r=[r],u=[u],G.gb=[G.gb];t:{var vt=r,it=u,H=G.gb;if(e(t!=null),e(it!=null),e(H!=null),H[0]=0,12<=it[0]&&!n(t,vt[0],"RIFF")){if(n(t,vt[0]+8,"WEBP")){H=3;break t}var V=Bt(t,vt[0]+4);if(12>V||4294967286it[0]-8){H=7;break t}H[0]=V,vt[0]+=12,it[0]-=12}H=0}if(H!=0)return H;for(V=0H[0])H=7;else{if(!n(pt,it[0],"VP8X")){if(Bt(pt,it[0]+4)!=10){H=3;break t}if(18>H[0]){H=7;break t}var St=Bt(pt,it[0]+8),Rt=1+Ct(pt,it[0]+12);if(2147483648<=Rt*(pt=1+Ct(pt,it[0]+15))){H=3;break t}Ot!=null&&(Ot[0]=St),bt!=null&&(bt[0]=Rt),mt!=null&&(mt[0]=pt),it[0]+=18,H[0]-=18,_t[0]=1}H=0}}if(K=K[0],vt=vt[0],H!=0)return H;if(it=!!(2&vt),!V&&K)return 3;if(w!=null&&(w[0]=!!(16&vt)),y!=null&&(y[0]=it),N!=null&&(N[0]=0),y=k[0],vt=U[0],K&&it&&x==null){H=0;break}if(4>u){H=7;break}if(V&&K||!V&&!K&&!n(t,r[0],"ALPH")){u=[u],G.na=[G.na],G.P=[G.P],G.Sa=[G.Sa];t:{St=t,H=r,V=u;var _t=G.gb;bt=G.na,mt=G.P,Ot=G.Sa,Rt=22,e(St!=null),e(V!=null),pt=H[0];var se=V[0];for(e(bt!=null),e(Ot!=null),bt[0]=null,mt[0]=null,Ot[0]=0;;){if(H[0]=pt,V[0]=se,8>se){H=7;break t}var le=Bt(St,pt+4);if(4294967286_t){H=3;break t}if(!n(St,pt,"VP8 ")||!n(St,pt,"VP8L")){H=0;break t}if(se[0]V[0])H=7;else{if(pt||Rt){if(_t=Bt(_t,St+4),12<=bt&&_t>bt-12){H=3;break t}if(Z&&_t>V[0]-8){H=7;break t}mt[0]=_t,H[0]+=8,V[0]-=8,Ot[0]=Rt}else Ot[0]=5<=V[0]&&_t[St+0]==47&&!(_t[St+4]>>5),mt[0]=V[0];H=0}if(u=u[0],G.Ja=G.Ja[0],G.xa=G.xa[0],r=r[0],H!=0)break;if(4294967286u){H=7;break}N=y,Z=vt,it=w,t==null||5>u?t=0:5<=u&&t[r+0]==47&&!(t[r+4]>>5)?(V=[0],_t=[0],bt=[0],$(mt=new L,t,r,u),zt(mt,V,_t,bt)?(N!=null&&(N[0]=V[0]),Z!=null&&(Z[0]=_t[0]),it!=null&&(it[0]=bt[0]),t=1):t=0):t=0}else{if(10>u){H=7;break}N=vt,t==null||10>u||!va(t,r+3,u-3)?t=0:(Z=t[r+0]|t[r+1]<<8|t[r+2]<<16,it=16383&(t[r+7]<<8|t[r+6]),t=16383&(t[r+9]<<8|t[r+8]),1&Z||3<(Z>>1&7)||!(Z>>4&1)||Z>>5>=G.Ja||!it||!t?t=0:(y&&(y[0]=it),N&&(N[0]=t),t=1))}if(!t||(y=y[0],vt=vt[0],K&&(k[0]!=y||U[0]!=vt)))return 3;x!=null&&(x[0]=G,x.offset=r-x.w,e(4294967286>r-x.w),e(x.offset==x.ha-u));break}return H==0||H==7&&K&&x==null?(w!=null&&(w[0]|=G.na!=null&&0u||(w&=-2,y&=-2),0>w||0>y||0>=N||0>=x||w+N>d||y+x>m))return 0;if(r.v=w,r.j=y,r.va=w+N,r.o=y+x,r.U=N,r.T=x,r.da=t!=null&&0t.S){var r=t.f.RGBA;r.fb+=(t.height-1)*r.A,r.A=-r.A}else r=t.f.kb,t=t.height,r.O+=(t-1)*r.fa,r.fa=-r.fa,r.N+=(t-1>>1)*r.Ab,r.Ab=-r.Ab,r.W+=(t-1>>1)*r.Db,r.Db=-r.Db,r.F!=null&&(r.J+=(t-1)*r.lb,r.lb=-r.lb);return 0}function di(t,r,u,d){if(d==null||0>=t||0>=r)return 2;if(u!=null){if(u.Da){var m=u.cd,w=u.bd,y=-2&u.v,N=-2&u.j;if(0>y||0>N||0>=m||0>=w||y+m>t||N+w>r)return 2;t=m,r=w}if(u.da){if(!Xt(t,r,m=[u.ib],w=[u.hb]))return 2;t=m[0],r=w[0]}}d.width=t,d.height=r;t:{var x=d.width,k=d.height;if(t=d.S,0>=x||0>=k||!(t>=qa&&13>t))t=2;else{if(0>=d.Rd&&d.sd==null){y=w=m=r=0;var U=(N=x*Us[t])*k;if(11>t||(w=(k+1)/2*(r=(x+1)/2),t==12&&(y=(m=x)*k)),(k=o(U+2*w+y))==null){t=1;break t}d.sd=k,11>t?((x=d.f.RGBA).eb=k,x.fb=0,x.A=N,x.size=U):((x=d.f.kb).y=k,x.O=0,x.fa=N,x.Fd=U,x.f=k,x.N=0+U,x.Ab=r,x.Cd=w,x.ea=k,x.W=0+U+w,x.Db=r,x.Ed=w,t==12&&(x.F=k,x.J=0+U+2*w),x.Tc=y,x.lb=m)}if(r=1,m=d.S,w=d.width,y=d.height,m>=qa&&13>m)if(11>m)t=d.f.RGBA,r&=(N=Math.abs(t.A))*(y-1)+w<=t.size,r&=N>=w*Us[m],r&=t.eb!=null;else{t=d.f.kb,N=(w+1)/2,U=(y+1)/2,x=Math.abs(t.fa),k=Math.abs(t.Ab);var K=Math.abs(t.Db),Z=Math.abs(t.lb),G=Z*(y-1)+w;r&=x*(y-1)+w<=t.Fd,r&=k*(U-1)+N<=t.Cd,r=(r&=K*(U-1)+N<=t.Ed)&x>=w&k>=N&K>=N,r&=t.y!=null,r&=t.f!=null,r&=t.ea!=null,m==12&&(r&=Z>=w,r&=G<=t.Tc,r&=t.F!=null)}else r=0;t=r?0:2}}return t!=0||u!=null&&u.fd&&(t=Gi(d)),t}var rn=64,pi=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],gi=24,mi=32,Yi=8,an=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];xt("Predictor0","PredictorAdd0"),R.Predictor0=function(){return 4278190080},R.Predictor1=function(t){return t},R.Predictor2=function(t,r,u){return r[u+0]},R.Predictor3=function(t,r,u){return r[u+1]},R.Predictor4=function(t,r,u){return r[u-1]},R.Predictor5=function(t,r,u){return Pt(Pt(t,r[u+1]),r[u+0])},R.Predictor6=function(t,r,u){return Pt(t,r[u-1])},R.Predictor7=function(t,r,u){return Pt(t,r[u+0])},R.Predictor8=function(t,r,u){return Pt(r[u-1],r[u+0])},R.Predictor9=function(t,r,u){return Pt(r[u+0],r[u+1])},R.Predictor10=function(t,r,u){return Pt(Pt(t,r[u-1]),Pt(r[u+0],r[u+1]))},R.Predictor11=function(t,r,u){var d=r[u+0];return 0>=$t(d>>24&255,t>>24&255,(r=r[u-1])>>24&255)+$t(d>>16&255,t>>16&255,r>>16&255)+$t(d>>8&255,t>>8&255,r>>8&255)+$t(255&d,255&t,255&r)?d:t},R.Predictor12=function(t,r,u){var d=r[u+0];return(qt((t>>24&255)+(d>>24&255)-((r=r[u-1])>>24&255))<<24|qt((t>>16&255)+(d>>16&255)-(r>>16&255))<<16|qt((t>>8&255)+(d>>8&255)-(r>>8&255))<<8|qt((255&t)+(255&d)-(255&r)))>>>0},R.Predictor13=function(t,r,u){var d=r[u-1];return(Gt((t=Pt(t,r[u+0]))>>24&255,d>>24&255)<<24|Gt(t>>16&255,d>>16&255)<<16|Gt(t>>8&255,d>>8&255)<<8|Gt(t>>0&255,d>>0&255))>>>0};var Mo=R.PredictorAdd0;R.PredictorAdd1=te,xt("Predictor2","PredictorAdd2"),xt("Predictor3","PredictorAdd3"),xt("Predictor4","PredictorAdd4"),xt("Predictor5","PredictorAdd5"),xt("Predictor6","PredictorAdd6"),xt("Predictor7","PredictorAdd7"),xt("Predictor8","PredictorAdd8"),xt("Predictor9","PredictorAdd9"),xt("Predictor10","PredictorAdd10"),xt("Predictor11","PredictorAdd11"),xt("Predictor12","PredictorAdd12"),xt("Predictor13","PredictorAdd13");var Ji=R.PredictorAdd2;ee("ColorIndexInverseTransform","MapARGB","32b",function(t){return t>>8&255},function(t){return t}),ee("VP8LColorIndexInverseTransformAlpha","MapAlpha","8b",function(t){return t},function(t){return t>>8&255});var Ba,Fn=R.ColorIndexInverseTransform,Xi=R.MapARGB,Eo=R.VP8LColorIndexInverseTransformAlpha,qo=R.MapAlpha,gr=R.VP8LPredictorsAdd=[];gr.length=16,(R.VP8LPredictors=[]).length=16,(R.VP8LPredictorsAdd_C=[]).length=16,(R.VP8LPredictors_C=[]).length=16;var gn,In,mr,Gn,rr,vi,Cn,bi,Ki,vr,jn,ir,zr,wi,Ur,br,Zi,mn,ar,be,we,Fe,De,or,wr,yi,Ma,xs,Ss=o(511),_s=o(2041),Ps=o(225),ks=o(767),Fs=0,Do=_s,Ea=Ps,hn=ks,vn=Ss,qa=0,Da=1,Is=2,Ra=3,Ta=4,Ro=5,Cs=6,To=7,zo=8,za=9,Uo=10,zc=[2,3,7],Uc=[3,3,11],js=[280,256,256,256,40],Hc=[0,1,1,1,0],Wc=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],Vc=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],Gc=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],Yc=8,Ho=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],Wo=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],$i=null,Jc=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],Xc=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],Os=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],Kc=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],Zc=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],$c=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],Qc=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],yr=[],On=[],sr=[],tu=1,Bs=2,Lr=[],bn=[];st("UpsampleRgbLinePair",re,3),st("UpsampleBgrLinePair",Ne,3),st("UpsampleRgbaLinePair",kn,4),st("UpsampleBgraLinePair",Te,4),st("UpsampleArgbLinePair",Ye,4),st("UpsampleRgba4444LinePair",Be,2),st("UpsampleRgb565LinePair",Se,2);var eu=R.UpsampleRgbLinePair,nu=R.UpsampleBgrLinePair,Ms=R.UpsampleRgbaLinePair,Es=R.UpsampleBgraLinePair,qs=R.UpsampleArgbLinePair,Ds=R.UpsampleRgba4444LinePair,ru=R.UpsampleRgb565LinePair,Ua=16,Ha=1<d.ca.S||(alert("todo:WebPInitConvertARGBToYUV"),d.ca.f.kb.F!=null&&J()),d.Pb&&0(x=u.Md)?0:100k;++k)12>(K=m.pb[k]).lc&&(K.ia=x*hu[0>K.lc?0:K.lc]>>3),U|=K.ia;U&&(alert("todo:VP8InitRandom"),m.ia=1)}m.Ga=u.Id,100m.Ga&&(m.Ga=0)}vo(t,d)||(r=t.a)}}else r=t.a}r==0&&y.Oa!=null&&y.Oa.fd&&(r=Gi(y.ba))}y=r}w=y!=0?null:11>w?N.f.RGBA.eb:N.f.kb.y}else w=null;return w};var Us=[3,4,3,4,4,2,2,4,4,4,2,1,1]};function g(R,gt){for(var dt="",F=0;F<4;F++)dt+=String.fromCharCode(R[gt++]);return dt}function b(R,gt){return(R[gt+0]<<0|R[gt+1]<<8|R[gt+2]<<16)>>>0}function A(R,gt){return(R[gt+0]<<0|R[gt+1]<<8|R[gt+2]<<16|R[gt+3]<<24)>>>0}new f;var S=[0],p=[0],O=[],I=new f,q=i,_=function(R,gt){var dt={},F=0,P=!1,z=0,D=0;if(dt.frames=[],!function(j,M,W,Y){for(var Q=0;Q>1&1}lt!="ANMF"&&(gt+=ft)}return dt}}(q,0);_.response=q,_.rgbaoutput=!0,_.dataurl=!1;var B=_.header?_.header:null,X=_.frames?_.frames:null;if(B){B.loop_counter=B.loop_count,S=[B.canvas_height],p=[B.canvas_width];for(var ot=0;ot>>1)&255;return _},f=function(S,p,O){var I,q,_,B,X=[],ot=S.length;X[0]=4;for(var ut=0;ut>>lt&255,lt+=B.bits;gt[z]=P>>>lt&255}}if(B.bits===16){R=(tt=new Uint32Array(B.decodePixels().buffer)).length,dt=new Uint8Array(R*(32/B.pixelBitlength)*B.colors),gt=new Uint8Array(R*(32/B.pixelBitlength)),F=B.colors>1,z=0,D=0;for(var ft=0;z>>0&255,F&&(dt[D++]=P>>>16&255,P=tt[z++],dt[D++]=P>>>0&255),gt[ft++]=P>>>16&255;_=8}I!==i.image_compression.NONE&&e()?(S=n(dt,B.width*B.colors,B.colors,I),wt=n(gt,B.width,1,I)):(S=dt,wt=gt,at=void 0)}if(B.colorType===3&&(q=this.color_spaces.INDEXED,ut=B.palette,B.transparency.indexed)){var ht=B.transparency.indexed,kt=0;for(z=0,R=ht.length;z=0;i--){for(var a=this.bottom_up?i:this.height-1-i,c=0;c>7-h&1];this.data[l+4*h]=f.blue,this.data[l+4*h+1]=f.green,this.data[l+4*h+2]=f.red,this.data[l+4*h+3]=255}n!==0&&(this.pos+=4-n)}},En.prototype.bit4=function(){for(var i=Math.ceil(this.width/2),e=i%4,n=this.height-1;n>=0;n--){for(var a=this.bottom_up?n:this.height-1-n,c=0;c>4,f=15&o,g=this.palette[h];if(this.data[l]=g.blue,this.data[l+1]=g.green,this.data[l+2]=g.red,this.data[l+3]=255,2*c+1>=this.width)break;g=this.palette[f],this.data[l+4]=g.blue,this.data[l+4+1]=g.green,this.data[l+4+2]=g.red,this.data[l+4+3]=255}e!==0&&(this.pos+=4-e)}},En.prototype.bit8=function(){for(var i=this.width%4,e=this.height-1;e>=0;e--){for(var n=this.bottom_up?e:this.height-1-e,a=0;a=0;n--){for(var a=this.bottom_up?n:this.height-1-n,c=0;c>5&e)/e*255|0,f=(o>>10&e)/e*255|0,g=o>>15?255:0,b=a*this.width*4+4*c;this.data[b]=f,this.data[b+1]=h,this.data[b+2]=l,this.data[b+3]=g}this.pos+=i}},En.prototype.bit16=function(){for(var i=this.width%3,e=parseInt("11111",2),n=parseInt("111111",2),a=this.height-1;a>=0;a--){for(var c=this.bottom_up?a:this.height-1-a,o=0;o>5&n)/n*255|0,g=(l>>11)/e*255|0,b=c*this.width*4+4*o;this.data[b]=g,this.data[b+1]=f,this.data[b+2]=h,this.data[b+3]=255}this.pos+=i}},En.prototype.bit24=function(){for(var i=this.height-1;i>=0;i--){for(var e=this.bottom_up?i:this.height-1-i,n=0;n=0;i--)for(var e=this.bottom_up?i:this.height-1-i,n=0;na&&(c.push(i.slice(f,o)),h=0,f=o),h+=e[o],o++;return f!==o&&c.push(i.slice(f,o)),c},yc=function(i,e,n){n||(n={});var a,c,o,l,h,f,g,b=[],A=[b],S=n.textIndent||0,p=0,O=0,I=i.split(" "),q=io.apply(this,[" ",n])[0];if(f=n.lineIndent===-1?I[0].length+2:n.lineIndent||0){var _=Array(f).join(" "),B=[];I.map(function(ot){(ot=ot.split(/\s*\n/)).length>1?B=B.concat(ot.map(function(ut,wt){return(wt&&ut.length?` `:"")+ut})):B.push(ot[0])}),I=B,f=bc.apply(this,[_,n])}for(o=0,l=I.length;oe||X){if(O>e){for(h=wc.apply(this,[a,c,e-(S+p),e]),b.push(h.shift()),b=[h.pop()];h.length;)A.push([h.shift()]);O=c.slice(a.length-(b[0]?b[0].length:0)).reduce(function(ot,ut){return ot+ut},0)}else b=[a];A.push(b),S=O+f,p=q}else b.push(a),S+=p+O,p=q}return g=f?function(ot,ut){return(ut?_:"")+ot.join(" ")}:function(ot){return ot.join(" ")},A.map(g)},_i.splitTextToSize=function(i,e,n){var a,c=(n=n||{}).fontSize||this.internal.getFontSize(),o=(function(b){if(b.widths&&b.kerning)return{widths:b.widths,kerning:b.kerning};var A=this.internal.getFont(b.fontName,b.fontStyle);return A.metadata.Unicode?{widths:A.metadata.Unicode.widths||{0:1},kerning:A.metadata.Unicode.kerning||{}}:{font:A.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}).call(this,n);a=Array.isArray(i)?i:String(i).split(/\r?\n/);var l=1*this.internal.scaleFactor*e/c;o.textIndent=n.textIndent?1*n.textIndent*this.internal.scaleFactor/c:0,o.lineIndent=n.lineIndent;var h,f,g=[];for(h=0,f=a.length;himport("./index.es-ce8b146a.js"),["assets/index.es-ce8b146a.js","assets/main-800d5aa8.js"])).catch(function(n){return Promise.reject(new Error("Could not load canvg: "+n))}).then(function(n){return n.default?n.default:n})}Tt.API.addSvgAsImage=function(n,a,c,o,l,h,f,g){if(isNaN(a)||isNaN(c))throw ve.error("jsPDF.addSvgAsImage: Invalid coordinates",arguments),new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");if(isNaN(o)||isNaN(l))throw ve.error("jsPDF.addSvgAsImage: Invalid measurements",arguments),new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage");var b=document.createElement("canvas");b.width=o,b.height=l;var A=b.getContext("2d");A.fillStyle="#fff",A.fillRect(0,0,b.width,b.height);var S={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},p=this;return e().then(function(O){return O.fromString(A,n,S)},function(){return Promise.reject(new Error("Could not load canvg."))}).then(function(O){return O.render(S)}).then(function(){p.addImage(b.toDataURL("image/jpeg",1),a,c,o,l,f,g)})}}(),Tt.API.putTotalPages=function(i){var e,n=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(i,"g"),n=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(i,this.internal.getFont()),"g"),n=this.pdfEscape16(this.internal.getNumberOfPages()+"",this.internal.getFont()));for(var a=1;a<=this.internal.getNumberOfPages();a++)for(var c=0;c1){for(b=0;be||X){if(O>e){for(h=wc.apply(this,[a,c,e-(S+p),e]),b.push(h.shift()),b=[h.pop()];h.length;)A.push([h.shift()]);O=c.slice(a.length-(b[0]?b[0].length:0)).reduce(function(ot,ut){return ot+ut},0)}else b=[a];A.push(b),S=O+f,p=q}else b.push(a),S+=p+O,p=q}return g=f?function(ot,ut){return(ut?_:"")+ot.join(" ")}:function(ot){return ot.join(" ")},A.map(g)},_i.splitTextToSize=function(i,e,n){var a,c=(n=n||{}).fontSize||this.internal.getFontSize(),o=(function(b){if(b.widths&&b.kerning)return{widths:b.widths,kerning:b.kerning};var A=this.internal.getFont(b.fontName,b.fontStyle);return A.metadata.Unicode?{widths:A.metadata.Unicode.widths||{0:1},kerning:A.metadata.Unicode.kerning||{}}:{font:A.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}).call(this,n);a=Array.isArray(i)?i:String(i).split(/\r?\n/);var l=1*this.internal.scaleFactor*e/c;o.textIndent=n.textIndent?1*n.textIndent*this.internal.scaleFactor/c:0,o.lineIndent=n.lineIndent;var h,f,g=[];for(h=0,f=a.length;himport("./index.es-10d444b7.js"),["assets/index.es-10d444b7.js","assets/main-814d2296.js"])).catch(function(n){return Promise.reject(new Error("Could not load canvg: "+n))}).then(function(n){return n.default?n.default:n})}Tt.API.addSvgAsImage=function(n,a,c,o,l,h,f,g){if(isNaN(a)||isNaN(c))throw ve.error("jsPDF.addSvgAsImage: Invalid coordinates",arguments),new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");if(isNaN(o)||isNaN(l))throw ve.error("jsPDF.addSvgAsImage: Invalid measurements",arguments),new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage");var b=document.createElement("canvas");b.width=o,b.height=l;var A=b.getContext("2d");A.fillStyle="#fff",A.fillRect(0,0,b.width,b.height);var S={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},p=this;return e().then(function(O){return O.fromString(A,n,S)},function(){return Promise.reject(new Error("Could not load canvg."))}).then(function(O){return O.render(S)}).then(function(){p.addImage(b.toDataURL("image/jpeg",1),a,c,o,l,f,g)})}}(),Tt.API.putTotalPages=function(i){var e,n=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(i,"g"),n=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(i,this.internal.getFont()),"g"),n=this.pdfEscape16(this.internal.getNumberOfPages()+"",this.internal.getFont()));for(var a=1;a<=this.internal.getNumberOfPages();a++)for(var c=0;c1){for(b=0;bg in e?jke(e,g,{enumerable:!0,configurable:!0,writable:!0,value:I}):e[g]=I;var Zu=(e,g,I)=>($ke(e,typeof g!="symbol"?g+"":g,I),I);function qke(e,g){for(var I=0;Ii[n]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const g=document.createElement("link").relList;if(g&&g.supports&&g.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))i(n);new MutationObserver(n=>{for(const C of n)if(C.type==="childList")for(const r of C.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function I(n){const C={};return n.integrity&&(C.integrity=n.integrity),n.referrerPolicy&&(C.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?C.credentials="include":n.crossOrigin==="anonymous"?C.credentials="omit":C.credentials="same-origin",C}function i(n){if(n.ep)return;n.ep=!0;const C=I(n);fetch(n.href,C)}})();var yI=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Qc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function q_(e){if(e.__esModule)return e;var g=e.default;if(typeof g=="function"){var I=function i(){return this instanceof i?Reflect.construct(g,arguments,this.constructor):g.apply(this,arguments)};I.prototype=g.prototype}else I={};return Object.defineProperty(I,"__esModule",{value:!0}),Object.keys(e).forEach(function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(I,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})}),I}var nde={exports:{}},$H={},Cde={exports:{}},bg={};/** +var nYe=Object.defineProperty;var rYe=(e,g,i)=>g in e?nYe(e,g,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[g]=i;var Gu=(e,g,i)=>(rYe(e,typeof g!="symbol"?g+"":g,i),i);function CYe(e,g){for(var i=0;iI[n]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const g=document.createElement("link").relList;if(g&&g.supports&&g.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))I(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const C of r.addedNodes)C.tagName==="LINK"&&C.rel==="modulepreload"&&I(C)}).observe(document,{childList:!0,subtree:!0});function i(n){const r={};return n.integrity&&(r.integrity=n.integrity),n.referrerPolicy&&(r.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?r.credentials="include":n.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function I(n){if(n.ep)return;n.ep=!0;const r=i(n);fetch(n.href,r)}})();var Zi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function jc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function nL(e){if(e.__esModule)return e;var g=e.default;if(typeof g=="function"){var i=function I(){return this instanceof I?Reflect.construct(g,arguments,this.constructor):g.apply(this,arguments)};i.prototype=g.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach(function(I){var n=Object.getOwnPropertyDescriptor(e,I);Object.defineProperty(i,I,n.get?n:{enumerable:!0,get:function(){return e[I]}})}),i}var lde={exports:{}},IT={},cde={exports:{}},bg={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ var jke=Object.defineProperty;var $ke=(e,g,I)=>g in e?jke(e,g,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var GS=Symbol.for("react.element"),eYe=Symbol.for("react.portal"),tYe=Symbol.for("react.fragment"),gYe=Symbol.for("react.strict_mode"),IYe=Symbol.for("react.profiler"),iYe=Symbol.for("react.provider"),nYe=Symbol.for("react.context"),CYe=Symbol.for("react.forward_ref"),rYe=Symbol.for("react.suspense"),oYe=Symbol.for("react.memo"),aYe=Symbol.for("react.lazy"),f6=Symbol.iterator;function AYe(e){return e===null||typeof e!="object"?null:(e=f6&&e[f6]||e["@@iterator"],typeof e=="function"?e:null)}var rde={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ode=Object.assign,ade={};function Z0(e,g,I){this.props=e,this.context=g,this.refs=ade,this.updater=I||rde}Z0.prototype.isReactComponent={};Z0.prototype.setState=function(e,g){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,g,"setState")};Z0.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Ade(){}Ade.prototype=Z0.prototype;function eL(e,g,I){this.props=e,this.context=g,this.refs=ade,this.updater=I||rde}var tL=eL.prototype=new Ade;tL.constructor=eL;ode(tL,Z0.prototype);tL.isPureReactComponent=!0;var p6=Array.isArray,sde=Object.prototype.hasOwnProperty,gL={current:null},lde={key:!0,ref:!0,__self:!0,__source:!0};function cde(e,g,I){var i,n={},C=null,r=null;if(g!=null)for(i in g.ref!==void 0&&(r=g.ref),g.key!==void 0&&(C=""+g.key),g)sde.call(g,i)&&!lde.hasOwnProperty(i)&&(n[i]=g[i]);var o=arguments.length-2;if(o===1)n.children=I;else if(1g in e?jke(e,g,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var dYe=U,hYe=Symbol.for("react.element"),mYe=Symbol.for("react.fragment"),fYe=Object.prototype.hasOwnProperty,pYe=dYe.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,bYe={key:!0,ref:!0,__self:!0,__source:!0};function ude(e,g,I){var i,n={},C=null,r=null;I!==void 0&&(C=""+I),g.key!==void 0&&(C=""+g.key),g.ref!==void 0&&(r=g.ref);for(i in g)fYe.call(g,i)&&!bYe.hasOwnProperty(i)&&(n[i]=g[i]);if(e&&e.defaultProps)for(i in g=e.defaultProps,g)n[i]===void 0&&(n[i]=g[i]);return{$$typeof:hYe,type:e,key:C,ref:r,props:n,_owner:pYe.current}}$H.Fragment=mYe;$H.jsx=ude;$H.jsxs=ude;nde.exports=$H;var Oe=nde.exports,aE={},dde={exports:{}},br={},hde={exports:{}},mde={};/** + */var GYe=U,vYe=Symbol.for("react.element"),BYe=Symbol.for("react.fragment"),SYe=Object.prototype.hasOwnProperty,wYe=GYe.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,RYe={key:!0,ref:!0,__self:!0,__source:!0};function yde(e,g,i){var I,n={},r=null,C=null;i!==void 0&&(r=""+i),g.key!==void 0&&(r=""+g.key),g.ref!==void 0&&(C=g.ref);for(I in g)SYe.call(g,I)&&!RYe.hasOwnProperty(I)&&(n[I]=g[I]);if(e&&e.defaultProps)for(I in g=e.defaultProps,g)n[I]===void 0&&(n[I]=g[I]);return{$$typeof:vYe,type:e,key:r,ref:C,props:n,_owner:wYe.current}}IT.Fragment=BYe;IT.jsx=yde;IT.jsxs=yde;lde.exports=IT;var Oe=lde.exports,dE={},Zde={exports:{}},ZC={},Gde={exports:{}},vde={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var jke=Object.defineProperty;var $ke=(e,g,I)=>g in e?jke(e,g,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(e){function g(x,J){var P=x.length;x.push(J);e:for(;0>>1,q=x[ge];if(0>>1;ge<$;){var j=2*(ge+1)-1,te=x[j],Q=j+1,ie=x[Q];if(0>n(te,P))Qn(ie,te)?(x[ge]=ie,x[Q]=P,ge=Q):(x[ge]=te,x[j]=P,ge=j);else if(Qn(ie,P))x[ge]=ie,x[Q]=P,ge=Q;else break e}}return J}function n(x,J){var P=x.sortIndex-J.sortIndex;return P!==0?P:x.id-J.id}if(typeof performance=="object"&&typeof performance.now=="function"){var C=performance;e.unstable_now=function(){return C.now()}}else{var r=Date,o=r.now();e.unstable_now=function(){return r.now()-o}}var a=[],s=[],A=1,l=null,c=3,u=!1,d=!1,h=!1,m=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(x){for(var J=I(s);J!==null;){if(J.callback===null)i(s);else if(J.startTime<=x)i(s),J.sortIndex=J.expirationTime,g(a,J);else break;J=I(s)}}function y(x){if(h=!1,p(x),!d)if(I(a)!==null)d=!0,Y(Z);else{var J=I(s);J!==null&&K(y,J.startTime-x)}}function Z(x,J){d=!1,h&&(h=!1,f(v),v=-1),u=!0;var P=c;try{for(p(J),l=I(a);l!==null&&(!(l.expirationTime>J)||x&&!S());){var ge=l.callback;if(typeof ge=="function"){l.callback=null,c=l.priorityLevel;var q=ge(l.expirationTime<=J);J=e.unstable_now(),typeof q=="function"?l.callback=q:l===I(a)&&i(a),p(J)}else i(a);l=I(a)}if(l!==null)var $=!0;else{var j=I(s);j!==null&&K(y,j.startTime-J),$=!1}return $}finally{l=null,c=P,u=!1}}var B=!1,G=null,v=-1,w=5,R=-1;function S(){return!(e.unstable_now()-Rx||125ge?(x.sortIndex=P,g(s,x),I(a)===null&&x===I(s)&&(h?(f(v),v=-1):h=!0,K(y,P-ge))):(x.sortIndex=q,g(a,x),d||u||(d=!0,Y(Z))),x},e.unstable_shouldYield=S,e.unstable_wrapCallback=function(x){var J=c;return function(){var P=c;c=J;try{return x.apply(this,arguments)}finally{c=P}}}})(mde);hde.exports=mde;var yYe=hde.exports;/** + */(function(e){function g(D,J){var P=D.length;D.push(J);e:for(;0>>1,q=D[te];if(0>>1;te<$;){var j=2*(te+1)-1,ge=D[j],Q=j+1,Ie=D[Q];if(0>n(ge,P))Qn(Ie,ge)?(D[te]=Ie,D[Q]=P,te=Q):(D[te]=ge,D[j]=P,te=j);else if(Qn(Ie,P))D[te]=Ie,D[Q]=P,te=Q;else break e}}return J}function n(D,J){var P=D.sortIndex-J.sortIndex;return P!==0?P:D.id-J.id}if(typeof performance=="object"&&typeof performance.now=="function"){var r=performance;e.unstable_now=function(){return r.now()}}else{var C=Date,o=C.now();e.unstable_now=function(){return C.now()-o}}var a=[],s=[],A=1,l=null,c=3,u=!1,d=!1,h=!1,m=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(D){for(var J=i(s);J!==null;){if(J.callback===null)I(s);else if(J.startTime<=D)I(s),J.sortIndex=J.expirationTime,g(a,J);else break;J=i(s)}}function y(D){if(h=!1,p(D),!d)if(i(a)!==null)d=!0,k(Z);else{var J=i(s);J!==null&&K(y,J.startTime-D)}}function Z(D,J){d=!1,h&&(h=!1,f(v),v=-1),u=!0;var P=c;try{for(p(J),l=i(a);l!==null&&(!(l.expirationTime>J)||D&&!S());){var te=l.callback;if(typeof te=="function"){l.callback=null,c=l.priorityLevel;var q=te(l.expirationTime<=J);J=e.unstable_now(),typeof q=="function"?l.callback=q:l===i(a)&&I(a),p(J)}else I(a);l=i(a)}if(l!==null)var $=!0;else{var j=i(s);j!==null&&K(y,j.startTime-J),$=!1}return $}finally{l=null,c=P,u=!1}}var B=!1,G=null,v=-1,w=5,V=-1;function S(){return!(e.unstable_now()-VD||125te?(D.sortIndex=P,g(s,D),i(a)===null&&D===i(s)&&(h?(f(v),v=-1):h=!0,K(y,P-te))):(D.sortIndex=q,g(a,D),d||u||(d=!0,k(Z))),D},e.unstable_shouldYield=S,e.unstable_wrapCallback=function(D){var J=c;return function(){var P=c;c=J;try{return D.apply(this,arguments)}finally{c=P}}}})(vde);Gde.exports=vde;var VYe=Gde.exports;/** * @license React * react-dom.production.min.js * @@ -30,66 +30,66 @@ var jke=Object.defineProperty;var $ke=(e,g,I)=>g in e?jke(e,g,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var fde=U,fr=yYe;function st(e){for(var g="https://reactjs.org/docs/error-decoder.html?invariant="+e,I=1;I"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),AE=Object.prototype.hasOwnProperty,ZYe=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,y6={},Z6={};function GYe(e){return AE.call(Z6,e)?!0:AE.call(y6,e)?!1:ZYe.test(e)?Z6[e]=!0:(y6[e]=!0,!1)}function vYe(e,g,I,i){if(I!==null&&I.type===0)return!1;switch(typeof g){case"function":case"symbol":return!0;case"boolean":return i?!1:I!==null?!I.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function BYe(e,g,I,i){if(g===null||typeof g>"u"||vYe(e,g,I,i))return!0;if(i)return!1;if(I!==null)switch(I.type){case 3:return!g;case 4:return g===!1;case 5:return isNaN(g);case 6:return isNaN(g)||1>g}return!1}function dC(e,g,I,i,n,C,r){this.acceptsBooleans=g===2||g===3||g===4,this.attributeName=i,this.attributeNamespace=n,this.mustUseProperty=I,this.propertyName=e,this.type=g,this.sanitizeURL=C,this.removeEmptyString=r}var hn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){hn[e]=new dC(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var g=e[0];hn[g]=new dC(g,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){hn[e]=new dC(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){hn[e]=new dC(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){hn[e]=new dC(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){hn[e]=new dC(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){hn[e]=new dC(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){hn[e]=new dC(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){hn[e]=new dC(e,5,!1,e.toLowerCase(),null,!1,!1)});var iL=/[\-:]([a-z])/g;function nL(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var g=e.replace(iL,nL);hn[g]=new dC(g,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var g=e.replace(iL,nL);hn[g]=new dC(g,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var g=e.replace(iL,nL);hn[g]=new dC(g,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){hn[e]=new dC(e,1,!1,e.toLowerCase(),null,!1,!1)});hn.xlinkHref=new dC("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){hn[e]=new dC(e,1,!1,e.toLowerCase(),null,!0,!0)});function CL(e,g,I,i){var n=hn.hasOwnProperty(g)?hn[g]:null;(n!==null?n.type!==0:i||!(2o||n[r]!==C[o]){var a=` -`+n[r].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=r&&0<=o);break}}}finally{$Y=!1,Error.prepareStackTrace=I}return(e=e?e.displayName||e.name:"")?TZ(e):""}function SYe(e){switch(e.tag){case 5:return TZ(e.type);case 16:return TZ("Lazy");case 13:return TZ("Suspense");case 19:return TZ("SuspenseList");case 0:case 2:case 15:return e=qY(e.type,!1),e;case 11:return e=qY(e.type.render,!1),e;case 1:return e=qY(e.type,!0),e;default:return""}}function uE(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Pf:return"Fragment";case zf:return"Portal";case sE:return"Profiler";case rL:return"StrictMode";case lE:return"Suspense";case cE:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case yde:return(e.displayName||"Context")+".Consumer";case bde:return(e._context.displayName||"Context")+".Provider";case oL:var g=e.render;return e=e.displayName,e||(e=g.displayName||g.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case aL:return g=e.displayName||null,g!==null?g:uE(e.type)||"Memo";case El:g=e._payload,e=e._init;try{return uE(e(g))}catch{}}return null}function wYe(e){var g=e.type;switch(e.tag){case 24:return"Cache";case 9:return(g.displayName||"Context")+".Consumer";case 10:return(g._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=g.render,e=e.displayName||e.name||"",g.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return g;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return uE(g);case 8:return g===rL?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof g=="function")return g.displayName||g.name||null;if(typeof g=="string")return g}return null}function Ec(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Gde(e){var g=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(g==="checkbox"||g==="radio")}function RYe(e){var g=Gde(e)?"checked":"value",I=Object.getOwnPropertyDescriptor(e.constructor.prototype,g),i=""+e[g];if(!e.hasOwnProperty(g)&&typeof I<"u"&&typeof I.get=="function"&&typeof I.set=="function"){var n=I.get,C=I.set;return Object.defineProperty(e,g,{configurable:!0,get:function(){return n.call(this)},set:function(r){i=""+r,C.call(this,r)}}),Object.defineProperty(e,g,{enumerable:I.enumerable}),{getValue:function(){return i},setValue:function(r){i=""+r},stopTracking:function(){e._valueTracker=null,delete e[g]}}}}function gR(e){e._valueTracker||(e._valueTracker=RYe(e))}function vde(e){if(!e)return!1;var g=e._valueTracker;if(!g)return!0;var I=g.getValue(),i="";return e&&(i=Gde(e)?e.checked?"true":"false":e.value),e=i,e!==I?(g.setValue(e),!0):!1}function LW(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function dE(e,g){var I=g.checked;return zI({},g,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:I??e._wrapperState.initialChecked})}function v6(e,g){var I=g.defaultValue==null?"":g.defaultValue,i=g.checked!=null?g.checked:g.defaultChecked;I=Ec(g.value!=null?g.value:I),e._wrapperState={initialChecked:i,initialValue:I,controlled:g.type==="checkbox"||g.type==="radio"?g.checked!=null:g.value!=null}}function Bde(e,g){g=g.checked,g!=null&&CL(e,"checked",g,!1)}function hE(e,g){Bde(e,g);var I=Ec(g.value),i=g.type;if(I!=null)i==="number"?(I===0&&e.value===""||e.value!=I)&&(e.value=""+I):e.value!==""+I&&(e.value=""+I);else if(i==="submit"||i==="reset"){e.removeAttribute("value");return}g.hasOwnProperty("value")?mE(e,g.type,I):g.hasOwnProperty("defaultValue")&&mE(e,g.type,Ec(g.defaultValue)),g.checked==null&&g.defaultChecked!=null&&(e.defaultChecked=!!g.defaultChecked)}function B6(e,g,I){if(g.hasOwnProperty("value")||g.hasOwnProperty("defaultValue")){var i=g.type;if(!(i!=="submit"&&i!=="reset"||g.value!==void 0&&g.value!==null))return;g=""+e._wrapperState.initialValue,I||g===e.value||(e.value=g),e.defaultValue=g}I=e.name,I!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,I!==""&&(e.name=I)}function mE(e,g,I){(g!=="number"||LW(e.ownerDocument)!==e)&&(I==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+I&&(e.defaultValue=""+I))}var NZ=Array.isArray;function hp(e,g,I,i){if(e=e.options,g){g={};for(var n=0;n"+g.valueOf().toString()+"",g=IR.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;g.firstChild;)e.appendChild(g.firstChild)}});function Pv(e,g){if(g){var I=e.firstChild;if(I&&I===e.lastChild&&I.nodeType===3){I.nodeValue=g;return}}e.textContent=g}var SG={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},VYe=["Webkit","ms","Moz","O"];Object.keys(SG).forEach(function(e){VYe.forEach(function(g){g=g+e.charAt(0).toUpperCase()+e.substring(1),SG[g]=SG[e]})});function Vde(e,g,I){return g==null||typeof g=="boolean"||g===""?"":I||typeof g!="number"||g===0||SG.hasOwnProperty(e)&&SG[e]?(""+g).trim():g+"px"}function Wde(e,g){e=e.style;for(var I in g)if(g.hasOwnProperty(I)){var i=I.indexOf("--")===0,n=Vde(I,g[I],i);I==="float"&&(I="cssFloat"),i?e.setProperty(I,n):e[I]=n}}var WYe=zI({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function bE(e,g){if(g){if(WYe[e]&&(g.children!=null||g.dangerouslySetInnerHTML!=null))throw Error(st(137,e));if(g.dangerouslySetInnerHTML!=null){if(g.children!=null)throw Error(st(60));if(typeof g.dangerouslySetInnerHTML!="object"||!("__html"in g.dangerouslySetInnerHTML))throw Error(st(61))}if(g.style!=null&&typeof g.style!="object")throw Error(st(62))}}function yE(e,g){if(e.indexOf("-")===-1)return typeof g.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ZE=null;function AL(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var GE=null,mp=null,fp=null;function R6(e){if(e=SS(e)){if(typeof GE!="function")throw Error(st(280));var g=e.stateNode;g&&(g=IT(g),GE(e.stateNode,e.type,g))}}function Xde(e){mp?fp?fp.push(e):fp=[e]:mp=e}function Hde(){if(mp){var e=mp,g=fp;if(fp=mp=null,R6(e),g)for(e=0;e>>=0,e===0?32:31-(EYe(e)/MYe|0)|0}var iR=64,nR=4194304;function kZ(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function $W(e,g){var I=e.pendingLanes;if(I===0)return 0;var i=0,n=e.suspendedLanes,C=e.pingedLanes,r=I&268435455;if(r!==0){var o=r&~n;o!==0?i=kZ(o):(C&=r,C!==0&&(i=kZ(C)))}else r=I&~n,r!==0?i=kZ(r):C!==0&&(i=kZ(C));if(i===0)return 0;if(g!==0&&g!==i&&!(g&n)&&(n=i&-i,C=g&-g,n>=C||n===16&&(C&4194240)!==0))return g;if(i&4&&(i|=I&16),g=e.entangledLanes,g!==0)for(e=e.entanglements,g&=i;0I;I++)g.push(e);return g}function vS(e,g,I){e.pendingLanes|=g,g!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,g=31-ta(g),e[g]=I}function OYe(e,g){var I=e.pendingLanes&~g;e.pendingLanes=g,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=g,e.mutableReadLanes&=g,e.entangledLanes&=g,g=e.entanglements;var i=e.eventTimes;for(e=e.expirationTimes;0=RG),K6=String.fromCharCode(32),F6=!1;function $de(e,g){switch(e){case"keyup":return bKe.indexOf(g.keyCode)!==-1;case"keydown":return g.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function qde(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Jf=!1;function ZKe(e,g){switch(e){case"compositionend":return qde(g);case"keypress":return g.which!==32?null:(F6=!0,K6);case"textInput":return e=g.data,e===K6&&F6?null:e;default:return null}}function GKe(e,g){if(Jf)return e==="compositionend"||!fL&&$de(e,g)?(e=Qde(),b1=dL=oc=null,Jf=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(g.ctrlKey||g.altKey||g.metaKey)||g.ctrlKey&&g.altKey){if(g.char&&1=g)return{node:I,offset:g-e};e=i}e:{for(;I;){if(I.nextSibling){I=I.nextSibling;break e}I=I.parentNode}I=void 0}I=M6(I)}}function Ihe(e,g){return e&&g?e===g?!0:e&&e.nodeType===3?!1:g&&g.nodeType===3?Ihe(e,g.parentNode):"contains"in e?e.contains(g):e.compareDocumentPosition?!!(e.compareDocumentPosition(g)&16):!1:!1}function ihe(){for(var e=window,g=LW();g instanceof e.HTMLIFrameElement;){try{var I=typeof g.contentWindow.location.href=="string"}catch{I=!1}if(I)e=g.contentWindow;else break;g=LW(e.document)}return g}function pL(e){var g=e&&e.nodeName&&e.nodeName.toLowerCase();return g&&(g==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||g==="textarea"||e.contentEditable==="true")}function HKe(e){var g=ihe(),I=e.focusedElem,i=e.selectionRange;if(g!==I&&I&&I.ownerDocument&&Ihe(I.ownerDocument.documentElement,I)){if(i!==null&&pL(I)){if(g=i.start,e=i.end,e===void 0&&(e=g),"selectionStart"in I)I.selectionStart=g,I.selectionEnd=Math.min(e,I.value.length);else if(e=(g=I.ownerDocument||document)&&g.defaultView||window,e.getSelection){e=e.getSelection();var n=I.textContent.length,C=Math.min(i.start,n);i=i.end===void 0?C:Math.min(i.end,n),!e.extend&&C>i&&(n=i,i=C,C=n),n=z6(I,C);var r=z6(I,i);n&&r&&(e.rangeCount!==1||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==r.node||e.focusOffset!==r.offset)&&(g=g.createRange(),g.setStart(n.node,n.offset),e.removeAllRanges(),C>i?(e.addRange(g),e.extend(r.node,r.offset)):(g.setEnd(r.node,r.offset),e.addRange(g)))}}for(g=[],e=I;e=e.parentNode;)e.nodeType===1&&g.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof I.focus=="function"&&I.focus(),I=0;I=document.documentMode,Of=null,VE=null,WG=null,WE=!1;function P6(e,g,I){var i=I.window===I?I.document:I.nodeType===9?I:I.ownerDocument;WE||Of==null||Of!==LW(i)||(i=Of,"selectionStart"in i&&pL(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),WG&&Qv(WG,i)||(WG=i,i=t9(VE,"onSelect"),0Uf||(e.current=YE[Uf],YE[Uf]=null,Uf--)}function oI(e,g){Uf++,YE[Uf]=e.current,e.current=g}var Mc={},Kn=$c(Mc),KC=$c(!1),Md=Mc;function Ib(e,g){var I=e.type.contextTypes;if(!I)return Mc;var i=e.stateNode;if(i&&i.__reactInternalMemoizedUnmaskedChildContext===g)return i.__reactInternalMemoizedMaskedChildContext;var n={},C;for(C in I)n[C]=g[C];return i&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=g,e.__reactInternalMemoizedMaskedChildContext=n),n}function FC(e){return e=e.childContextTypes,e!=null}function I9(){ZI(KC),ZI(Kn)}function j6(e,g,I){if(Kn.current!==Mc)throw Error(st(168));oI(Kn,g),oI(KC,I)}function che(e,g,I){var i=e.stateNode;if(g=g.childContextTypes,typeof i.getChildContext!="function")return I;i=i.getChildContext();for(var n in i)if(!(n in g))throw Error(st(108,wYe(e)||"Unknown",n));return zI({},I,i)}function i9(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Mc,Md=Kn.current,oI(Kn,e),oI(KC,KC.current),!0}function $6(e,g,I){var i=e.stateNode;if(!i)throw Error(st(169));I?(e=che(e,g,Md),i.__reactInternalMemoizedMergedChildContext=e,ZI(KC),ZI(Kn),oI(Kn,e)):ZI(KC),oI(KC,I)}var ts=null,iT=!1,cK=!1;function uhe(e){ts===null?ts=[e]:ts.push(e)}function PKe(e){iT=!0,uhe(e)}function qc(){if(!cK&&ts!==null){cK=!0;var e=0,g=Jg;try{var I=ts;for(Jg=1;e>=r,n-=r,ls=1<<32-ta(g)+n|I<v?(w=G,G=null):w=G.sibling;var R=c(f,G,p[v],y);if(R===null){G===null&&(G=w);break}e&&G&&R.alternate===null&&g(f,G),b=C(R,b,v),B===null?Z=R:B.sibling=R,B=R,G=w}if(v===p.length)return I(f,G),WI&&Eu(f,v),Z;if(G===null){for(;vv?(w=G,G=null):w=G.sibling;var S=c(f,G,R.value,y);if(S===null){G===null&&(G=w);break}e&&G&&S.alternate===null&&g(f,G),b=C(S,b,v),B===null?Z=S:B.sibling=S,B=S,G=w}if(R.done)return I(f,G),WI&&Eu(f,v),Z;if(G===null){for(;!R.done;v++,R=p.next())R=l(f,R.value,y),R!==null&&(b=C(R,b,v),B===null?Z=R:B.sibling=R,B=R);return WI&&Eu(f,v),Z}for(G=i(f,G);!R.done;v++,R=p.next())R=u(G,f,v,R.value,y),R!==null&&(e&&R.alternate!==null&&G.delete(R.key===null?v:R.key),b=C(R,b,v),B===null?Z=R:B.sibling=R,B=R);return e&&G.forEach(function(X){return g(f,X)}),WI&&Eu(f,v),Z}function m(f,b,p,y){if(typeof p=="object"&&p!==null&&p.type===Pf&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case tR:e:{for(var Z=p.key,B=b;B!==null;){if(B.key===Z){if(Z=p.type,Z===Pf){if(B.tag===7){I(f,B.sibling),b=n(B,p.props.children),b.return=f,f=b;break e}}else if(B.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===El&&nq(Z)===B.type){I(f,B.sibling),b=n(B,p.props),b.ref=Ry(f,B,p),b.return=f,f=b;break e}I(f,B);break}else g(f,B);B=B.sibling}p.type===Pf?(b=Bd(p.props.children,f.mode,y,p.key),b.return=f,f=b):(y=R1(p.type,p.key,p.props,null,f.mode,y),y.ref=Ry(f,b,p),y.return=f,f=y)}return r(f);case zf:e:{for(B=p.key;b!==null;){if(b.key===B)if(b.tag===4&&b.stateNode.containerInfo===p.containerInfo&&b.stateNode.implementation===p.implementation){I(f,b.sibling),b=n(b,p.children||[]),b.return=f,f=b;break e}else{I(f,b);break}else g(f,b);b=b.sibling}b=yK(p,f.mode,y),b.return=f,f=b}return r(f);case El:return B=p._init,m(f,b,B(p._payload),y)}if(NZ(p))return d(f,b,p,y);if(Gy(p))return h(f,b,p,y);lR(f,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,b!==null&&b.tag===6?(I(f,b.sibling),b=n(b,p),b.return=f,f=b):(I(f,b),b=bK(p,f.mode,y),b.return=f,f=b),r(f)):I(f,b)}return m}var nb=Zhe(!0),Ghe=Zhe(!1),wS={},AA=$c(wS),eB=$c(wS),tB=$c(wS);function rd(e){if(e===wS)throw Error(st(174));return e}function RL(e,g){switch(oI(tB,g),oI(eB,e),oI(AA,wS),e=g.nodeType,e){case 9:case 11:g=(g=g.documentElement)?g.namespaceURI:pE(null,"");break;default:e=e===8?g.parentNode:g,g=e.namespaceURI||null,e=e.tagName,g=pE(g,e)}ZI(AA),oI(AA,g)}function Cb(){ZI(AA),ZI(eB),ZI(tB)}function vhe(e){rd(tB.current);var g=rd(AA.current),I=pE(g,e.type);g!==I&&(oI(eB,e),oI(AA,I))}function VL(e){eB.current===e&&(ZI(AA),ZI(eB))}var KI=$c(0);function A9(e){for(var g=e;g!==null;){if(g.tag===13){var I=g.memoizedState;if(I!==null&&(I=I.dehydrated,I===null||I.data==="$?"||I.data==="$!"))return g}else if(g.tag===19&&g.memoizedProps.revealOrder!==void 0){if(g.flags&128)return g}else if(g.child!==null){g.child.return=g,g=g.child;continue}if(g===e)break;for(;g.sibling===null;){if(g.return===null||g.return===e)return null;g=g.return}g.sibling.return=g.return,g=g.sibling}return null}var uK=[];function WL(){for(var e=0;eI?I:4,e(!0);var i=dK.transition;dK.transition={};try{e(!1),g()}finally{Jg=I,dK.transition=i}}function xhe(){return io().memoizedState}function LKe(e,g,I){var i=Rc(e);if(I={lane:i,action:I,hasEagerState:!1,eagerState:null,next:null},Ehe(e))Mhe(g,I);else if(I=fhe(e,g,I,i),I!==null){var n=rC();ga(I,e,i,n),zhe(I,g,i)}}function UKe(e,g,I){var i=Rc(e),n={lane:i,action:I,hasEagerState:!1,eagerState:null,next:null};if(Ehe(e))Mhe(g,n);else{var C=e.alternate;if(e.lanes===0&&(C===null||C.lanes===0)&&(C=g.lastRenderedReducer,C!==null))try{var r=g.lastRenderedState,o=C(r,I);if(n.hasEagerState=!0,n.eagerState=o,Aa(o,r)){var a=g.interleaved;a===null?(n.next=n,SL(g)):(n.next=a.next,a.next=n),g.interleaved=n;return}}catch{}finally{}I=fhe(e,g,n,i),I!==null&&(n=rC(),ga(I,e,i,n),zhe(I,g,i))}}function Ehe(e){var g=e.alternate;return e===EI||g!==null&&g===EI}function Mhe(e,g){XG=s9=!0;var I=e.pending;I===null?g.next=g:(g.next=I.next,I.next=g),e.pending=g}function zhe(e,g,I){if(I&4194240){var i=g.lanes;i&=e.pendingLanes,I|=i,g.lanes=I,lL(e,I)}}var l9={readContext:Io,useCallback:Zn,useContext:Zn,useEffect:Zn,useImperativeHandle:Zn,useInsertionEffect:Zn,useLayoutEffect:Zn,useMemo:Zn,useReducer:Zn,useRef:Zn,useState:Zn,useDebugValue:Zn,useDeferredValue:Zn,useTransition:Zn,useMutableSource:Zn,useSyncExternalStore:Zn,useId:Zn,unstable_isNewReconciler:!1},QKe={readContext:Io,useCallback:function(e,g){return Ya().memoizedState=[e,g===void 0?null:g],e},useContext:Io,useEffect:rq,useImperativeHandle:function(e,g,I){return I=I!=null?I.concat([e]):null,v1(4194308,4,khe.bind(null,g,e),I)},useLayoutEffect:function(e,g){return v1(4194308,4,e,g)},useInsertionEffect:function(e,g){return v1(4,2,e,g)},useMemo:function(e,g){var I=Ya();return g=g===void 0?null:g,e=e(),I.memoizedState=[e,g],e},useReducer:function(e,g,I){var i=Ya();return g=I!==void 0?I(g):g,i.memoizedState=i.baseState=g,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:g},i.queue=e,e=e.dispatch=LKe.bind(null,EI,e),[i.memoizedState,e]},useRef:function(e){var g=Ya();return e={current:e},g.memoizedState=e},useState:Cq,useDebugValue:kL,useDeferredValue:function(e){return Ya().memoizedState=e},useTransition:function(){var e=Cq(!1),g=e[0];return e=_Ke.bind(null,e[1]),Ya().memoizedState=e,[g,e]},useMutableSource:function(){},useSyncExternalStore:function(e,g,I){var i=EI,n=Ya();if(WI){if(I===void 0)throw Error(st(407));I=I()}else{if(I=g(),Qi===null)throw Error(st(349));Pd&30||whe(i,g,I)}n.memoizedState=I;var C={value:I,getSnapshot:g};return n.queue=C,rq(Vhe.bind(null,i,C,e),[e]),i.flags|=2048,iB(9,Rhe.bind(null,i,C,I,g),void 0,null),I},useId:function(){var e=Ya(),g=Qi.identifierPrefix;if(WI){var I=cs,i=ls;I=(i&~(1<<32-ta(i)-1)).toString(32)+I,g=":"+g+"R"+I,I=gB++,0<\/script>",e=e.removeChild(e.firstChild)):typeof i.is=="string"?e=r.createElement(I,{is:i.is}):(e=r.createElement(I),I==="select"&&(r=e,i.multiple?r.multiple=!0:i.size&&(r.size=i.size))):e=r.createElementNS(e,I),e[Ma]=g,e[qv]=i,$he(e,g,!1,!1),g.stateNode=e;e:{switch(r=yE(I,i),I){case"dialog":uI("cancel",e),uI("close",e),n=i;break;case"iframe":case"object":case"embed":uI("load",e),n=i;break;case"video":case"audio":for(n=0;nob&&(g.flags|=128,i=!0,Vy(C,!1),g.lanes=4194304)}else{if(!i)if(e=A9(r),e!==null){if(g.flags|=128,i=!0,I=e.updateQueue,I!==null&&(g.updateQueue=I,g.flags|=4),Vy(C,!0),C.tail===null&&C.tailMode==="hidden"&&!r.alternate&&!WI)return Gn(g),null}else 2*Ai()-C.renderingStartTime>ob&&I!==1073741824&&(g.flags|=128,i=!0,Vy(C,!1),g.lanes=4194304);C.isBackwards?(r.sibling=g.child,g.child=r):(I=C.last,I!==null?I.sibling=r:g.child=r,C.last=r)}return C.tail!==null?(g=C.tail,C.rendering=g,C.tail=g.sibling,C.renderingStartTime=Ai(),g.sibling=null,I=KI.current,oI(KI,i?I&1|2:I&1),g):(Gn(g),null);case 22:case 23:return EL(),i=g.memoizedState!==null,e!==null&&e.memoizedState!==null!==i&&(g.flags|=8192),i&&g.mode&1?$C&1073741824&&(Gn(g),g.subtreeFlags&6&&(g.flags|=8192)):Gn(g),null;case 24:return null;case 25:return null}throw Error(st(156,g.tag))}function i5e(e,g){switch(yL(g),g.tag){case 1:return FC(g.type)&&I9(),e=g.flags,e&65536?(g.flags=e&-65537|128,g):null;case 3:return Cb(),ZI(KC),ZI(Kn),WL(),e=g.flags,e&65536&&!(e&128)?(g.flags=e&-65537|128,g):null;case 5:return VL(g),null;case 13:if(ZI(KI),e=g.memoizedState,e!==null&&e.dehydrated!==null){if(g.alternate===null)throw Error(st(340));ib()}return e=g.flags,e&65536?(g.flags=e&-65537|128,g):null;case 19:return ZI(KI),null;case 4:return Cb(),null;case 10:return BL(g.type._context),null;case 22:case 23:return EL(),null;case 24:return null;default:return null}}var uR=!1,kn=!1,n5e=typeof WeakSet=="function"?WeakSet:Set,wt=null;function qf(e,g){var I=e.ref;if(I!==null)if(typeof I=="function")try{I(null)}catch(i){UI(e,g,i)}else I.current=null}function LE(e,g,I){try{I()}catch(i){UI(e,g,i)}}var hq=!1;function C5e(e,g){if(XE=qW,e=ihe(),pL(e)){if("selectionStart"in e)var I={start:e.selectionStart,end:e.selectionEnd};else e:{I=(I=e.ownerDocument)&&I.defaultView||window;var i=I.getSelection&&I.getSelection();if(i&&i.rangeCount!==0){I=i.anchorNode;var n=i.anchorOffset,C=i.focusNode;i=i.focusOffset;try{I.nodeType,C.nodeType}catch{I=null;break e}var r=0,o=-1,a=-1,s=0,A=0,l=e,c=null;t:for(;;){for(var u;l!==I||n!==0&&l.nodeType!==3||(o=r+n),l!==C||i!==0&&l.nodeType!==3||(a=r+i),l.nodeType===3&&(r+=l.nodeValue.length),(u=l.firstChild)!==null;)c=l,l=u;for(;;){if(l===e)break t;if(c===I&&++s===n&&(o=r),c===C&&++A===i&&(a=r),(u=l.nextSibling)!==null)break;l=c,c=l.parentNode}l=u}I=o===-1||a===-1?null:{start:o,end:a}}else I=null}I=I||{start:0,end:0}}else I=null;for(HE={focusedElem:e,selectionRange:I},qW=!1,wt=g;wt!==null;)if(g=wt,e=g.child,(g.subtreeFlags&1028)!==0&&e!==null)e.return=g,wt=e;else for(;wt!==null;){g=wt;try{var d=g.alternate;if(g.flags&1024)switch(g.tag){case 0:case 11:case 15:break;case 1:if(d!==null){var h=d.memoizedProps,m=d.memoizedState,f=g.stateNode,b=f.getSnapshotBeforeUpdate(g.elementType===g.type?h:xo(g.type,h),m);f.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var p=g.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(st(163))}}catch(y){UI(g,g.return,y)}if(e=g.sibling,e!==null){e.return=g.return,wt=e;break}wt=g.return}return d=hq,hq=!1,d}function HG(e,g,I){var i=g.updateQueue;if(i=i!==null?i.lastEffect:null,i!==null){var n=i=i.next;do{if((n.tag&e)===e){var C=n.destroy;n.destroy=void 0,C!==void 0&&LE(g,I,C)}n=n.next}while(n!==i)}}function rT(e,g){if(g=g.updateQueue,g=g!==null?g.lastEffect:null,g!==null){var I=g=g.next;do{if((I.tag&e)===e){var i=I.create;I.destroy=i()}I=I.next}while(I!==g)}}function UE(e){var g=e.ref;if(g!==null){var I=e.stateNode;switch(e.tag){case 5:e=I;break;default:e=I}typeof g=="function"?g(e):g.current=e}}function tme(e){var g=e.alternate;g!==null&&(e.alternate=null,tme(g)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(g=e.stateNode,g!==null&&(delete g[Ma],delete g[qv],delete g[kE],delete g[MKe],delete g[zKe])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function gme(e){return e.tag===5||e.tag===3||e.tag===4}function mq(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||gme(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function QE(e,g,I){var i=e.tag;if(i===5||i===6)e=e.stateNode,g?I.nodeType===8?I.parentNode.insertBefore(e,g):I.insertBefore(e,g):(I.nodeType===8?(g=I.parentNode,g.insertBefore(e,I)):(g=I,g.appendChild(e)),I=I._reactRootContainer,I!=null||g.onclick!==null||(g.onclick=g9));else if(i!==4&&(e=e.child,e!==null))for(QE(e,g,I),e=e.sibling;e!==null;)QE(e,g,I),e=e.sibling}function jE(e,g,I){var i=e.tag;if(i===5||i===6)e=e.stateNode,g?I.insertBefore(e,g):I.appendChild(e);else if(i!==4&&(e=e.child,e!==null))for(jE(e,g,I),e=e.sibling;e!==null;)jE(e,g,I),e=e.sibling}var on=null,Mo=!1;function dl(e,g,I){for(I=I.child;I!==null;)Ime(e,g,I),I=I.sibling}function Ime(e,g,I){if(aA&&typeof aA.onCommitFiberUnmount=="function")try{aA.onCommitFiberUnmount(qH,I)}catch{}switch(I.tag){case 5:kn||qf(I,g);case 6:var i=on,n=Mo;on=null,dl(e,g,I),on=i,Mo=n,on!==null&&(Mo?(e=on,I=I.stateNode,e.nodeType===8?e.parentNode.removeChild(I):e.removeChild(I)):on.removeChild(I.stateNode));break;case 18:on!==null&&(Mo?(e=on,I=I.stateNode,e.nodeType===8?lK(e.parentNode,I):e.nodeType===1&&lK(e,I),Lv(e)):lK(on,I.stateNode));break;case 4:i=on,n=Mo,on=I.stateNode.containerInfo,Mo=!0,dl(e,g,I),on=i,Mo=n;break;case 0:case 11:case 14:case 15:if(!kn&&(i=I.updateQueue,i!==null&&(i=i.lastEffect,i!==null))){n=i=i.next;do{var C=n,r=C.destroy;C=C.tag,r!==void 0&&(C&2||C&4)&&LE(I,g,r),n=n.next}while(n!==i)}dl(e,g,I);break;case 1:if(!kn&&(qf(I,g),i=I.stateNode,typeof i.componentWillUnmount=="function"))try{i.props=I.memoizedProps,i.state=I.memoizedState,i.componentWillUnmount()}catch(o){UI(I,g,o)}dl(e,g,I);break;case 21:dl(e,g,I);break;case 22:I.mode&1?(kn=(i=kn)||I.memoizedState!==null,dl(e,g,I),kn=i):dl(e,g,I);break;default:dl(e,g,I)}}function fq(e){var g=e.updateQueue;if(g!==null){e.updateQueue=null;var I=e.stateNode;I===null&&(I=e.stateNode=new n5e),g.forEach(function(i){var n=d5e.bind(null,e,i);I.has(i)||(I.add(i),i.then(n,n))})}}function mo(e,g){var I=g.deletions;if(I!==null)for(var i=0;in&&(n=r),i&=~C}if(i=n,i=Ai()-i,i=(120>i?120:480>i?480:1080>i?1080:1920>i?1920:3e3>i?3e3:4320>i?4320:1960*o5e(i/1960))-i,10e?16:e,ac===null)var i=!1;else{if(e=ac,ac=null,d9=0,Tg&6)throw Error(st(331));var n=Tg;for(Tg|=4,wt=e.current;wt!==null;){var C=wt,r=C.child;if(wt.flags&16){var o=C.deletions;if(o!==null){for(var a=0;aAi()-DL?vd(e,0):FL|=I),DC(e,g)}function sme(e,g){g===0&&(e.mode&1?(g=nR,nR<<=1,!(nR&130023424)&&(nR=4194304)):g=1);var I=rC();e=Ns(e,g),e!==null&&(vS(e,g,I),DC(e,I))}function u5e(e){var g=e.memoizedState,I=0;g!==null&&(I=g.retryLane),sme(e,I)}function d5e(e,g){var I=0;switch(e.tag){case 13:var i=e.stateNode,n=e.memoizedState;n!==null&&(I=n.retryLane);break;case 19:i=e.stateNode;break;default:throw Error(st(314))}i!==null&&i.delete(g),sme(e,I)}var lme;lme=function(e,g,I){if(e!==null)if(e.memoizedProps!==g.pendingProps||KC.current)NC=!0;else{if(!(e.lanes&I)&&!(g.flags&128))return NC=!1,g5e(e,g,I);NC=!!(e.flags&131072)}else NC=!1,WI&&g.flags&1048576&&dhe(g,C9,g.index);switch(g.lanes=0,g.tag){case 2:var i=g.type;B1(e,g),e=g.pendingProps;var n=Ib(g,Kn.current);bp(g,I),n=HL(null,g,i,e,n,I);var C=TL();return g.flags|=1,typeof n=="object"&&n!==null&&typeof n.render=="function"&&n.$$typeof===void 0?(g.tag=1,g.memoizedState=null,g.updateQueue=null,FC(i)?(C=!0,i9(g)):C=!1,g.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,wL(g),n.updater=nT,g.stateNode=n,n._reactInternals=g,EE(g,i,e,I),g=PE(null,g,i,!0,C,I)):(g.tag=0,WI&&C&&bL(g),Ln(null,g,n,I),g=g.child),g;case 16:i=g.elementType;e:{switch(B1(e,g),e=g.pendingProps,n=i._init,i=n(i._payload),g.type=i,n=g.tag=m5e(i),e=xo(i,e),n){case 0:g=zE(null,g,i,e,I);break e;case 1:g=cq(null,g,i,e,I);break e;case 11:g=sq(null,g,i,e,I);break e;case 14:g=lq(null,g,i,xo(i.type,e),I);break e}throw Error(st(306,i,""))}return g;case 0:return i=g.type,n=g.pendingProps,n=g.elementType===i?n:xo(i,n),zE(e,g,i,n,I);case 1:return i=g.type,n=g.pendingProps,n=g.elementType===i?n:xo(i,n),cq(e,g,i,n,I);case 3:e:{if(Uhe(g),e===null)throw Error(st(387));i=g.pendingProps,C=g.memoizedState,n=C.element,phe(e,g),a9(g,i,null,I);var r=g.memoizedState;if(i=r.element,C.isDehydrated)if(C={element:i,isDehydrated:!1,cache:r.cache,pendingSuspenseBoundaries:r.pendingSuspenseBoundaries,transitions:r.transitions},g.updateQueue.baseState=C,g.memoizedState=C,g.flags&256){n=rb(Error(st(423)),g),g=uq(e,g,i,I,n);break e}else if(i!==n){n=rb(Error(st(424)),g),g=uq(e,g,i,I,n);break e}else for(Ar=Bc(g.stateNode.containerInfo.firstChild),cr=g,WI=!0,Po=null,I=Ghe(g,null,i,I),g.child=I;I;)I.flags=I.flags&-3|4096,I=I.sibling;else{if(ib(),i===n){g=ks(e,g,I);break e}Ln(e,g,i,I)}g=g.child}return g;case 5:return vhe(g),e===null&&FE(g),i=g.type,n=g.pendingProps,C=e!==null?e.memoizedProps:null,r=n.children,TE(i,n)?r=null:C!==null&&TE(i,C)&&(g.flags|=32),Lhe(e,g),Ln(e,g,r,I),g.child;case 6:return e===null&&FE(g),null;case 13:return Qhe(e,g,I);case 4:return RL(g,g.stateNode.containerInfo),i=g.pendingProps,e===null?g.child=nb(g,null,i,I):Ln(e,g,i,I),g.child;case 11:return i=g.type,n=g.pendingProps,n=g.elementType===i?n:xo(i,n),sq(e,g,i,n,I);case 7:return Ln(e,g,g.pendingProps,I),g.child;case 8:return Ln(e,g,g.pendingProps.children,I),g.child;case 12:return Ln(e,g,g.pendingProps.children,I),g.child;case 10:e:{if(i=g.type._context,n=g.pendingProps,C=g.memoizedProps,r=n.value,oI(r9,i._currentValue),i._currentValue=r,C!==null)if(Aa(C.value,r)){if(C.children===n.children&&!KC.current){g=ks(e,g,I);break e}}else for(C=g.child,C!==null&&(C.return=g);C!==null;){var o=C.dependencies;if(o!==null){r=C.child;for(var a=o.firstContext;a!==null;){if(a.context===i){if(C.tag===1){a=Ss(-1,I&-I),a.tag=2;var s=C.updateQueue;if(s!==null){s=s.shared;var A=s.pending;A===null?a.next=a:(a.next=A.next,A.next=a),s.pending=a}}C.lanes|=I,a=C.alternate,a!==null&&(a.lanes|=I),DE(C.return,I,g),o.lanes|=I;break}a=a.next}}else if(C.tag===10)r=C.type===g.type?null:C.child;else if(C.tag===18){if(r=C.return,r===null)throw Error(st(341));r.lanes|=I,o=r.alternate,o!==null&&(o.lanes|=I),DE(r,I,g),r=C.sibling}else r=C.child;if(r!==null)r.return=C;else for(r=C;r!==null;){if(r===g){r=null;break}if(C=r.sibling,C!==null){C.return=r.return,r=C;break}r=r.return}C=r}Ln(e,g,n.children,I),g=g.child}return g;case 9:return n=g.type,i=g.pendingProps.children,bp(g,I),n=Io(n),i=i(n),g.flags|=1,Ln(e,g,i,I),g.child;case 14:return i=g.type,n=xo(i,g.pendingProps),n=xo(i.type,n),lq(e,g,i,n,I);case 15:return Ohe(e,g,g.type,g.pendingProps,I);case 17:return i=g.type,n=g.pendingProps,n=g.elementType===i?n:xo(i,n),B1(e,g),g.tag=1,FC(i)?(e=!0,i9(g)):e=!1,bp(g,I),yhe(g,i,n),EE(g,i,n,I),PE(null,g,i,!0,e,I);case 19:return jhe(e,g,I);case 22:return _he(e,g,I)}throw Error(st(156,g.tag))};function cme(e,g){return Dde(e,g)}function h5e(e,g,I,i){this.tag=e,this.key=I,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=g,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Or(e,g,I,i){return new h5e(e,g,I,i)}function zL(e){return e=e.prototype,!(!e||!e.isReactComponent)}function m5e(e){if(typeof e=="function")return zL(e)?1:0;if(e!=null){if(e=e.$$typeof,e===oL)return 11;if(e===aL)return 14}return 2}function Vc(e,g){var I=e.alternate;return I===null?(I=Or(e.tag,g,e.key,e.mode),I.elementType=e.elementType,I.type=e.type,I.stateNode=e.stateNode,I.alternate=e,e.alternate=I):(I.pendingProps=g,I.type=e.type,I.flags=0,I.subtreeFlags=0,I.deletions=null),I.flags=e.flags&14680064,I.childLanes=e.childLanes,I.lanes=e.lanes,I.child=e.child,I.memoizedProps=e.memoizedProps,I.memoizedState=e.memoizedState,I.updateQueue=e.updateQueue,g=e.dependencies,I.dependencies=g===null?null:{lanes:g.lanes,firstContext:g.firstContext},I.sibling=e.sibling,I.index=e.index,I.ref=e.ref,I}function R1(e,g,I,i,n,C){var r=2;if(i=e,typeof e=="function")zL(e)&&(r=1);else if(typeof e=="string")r=5;else e:switch(e){case Pf:return Bd(I.children,n,C,g);case rL:r=8,n|=8;break;case sE:return e=Or(12,I,g,n|2),e.elementType=sE,e.lanes=C,e;case lE:return e=Or(13,I,g,n),e.elementType=lE,e.lanes=C,e;case cE:return e=Or(19,I,g,n),e.elementType=cE,e.lanes=C,e;case Zde:return aT(I,n,C,g);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case bde:r=10;break e;case yde:r=9;break e;case oL:r=11;break e;case aL:r=14;break e;case El:r=16,i=null;break e}throw Error(st(130,e==null?e:typeof e,""))}return g=Or(r,I,g,n),g.elementType=e,g.type=i,g.lanes=C,g}function Bd(e,g,I,i){return e=Or(7,e,i,g),e.lanes=I,e}function aT(e,g,I,i){return e=Or(22,e,i,g),e.elementType=Zde,e.lanes=I,e.stateNode={isHidden:!1},e}function bK(e,g,I){return e=Or(6,e,null,g),e.lanes=I,e}function yK(e,g,I){return g=Or(4,e.children!==null?e.children:[],e.key,g),g.lanes=I,g.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},g}function f5e(e,g,I,i,n){this.tag=g,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=tK(0),this.expirationTimes=tK(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=tK(0),this.identifierPrefix=i,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function PL(e,g,I,i,n,C,r,o,a){return e=new f5e(e,g,I,o,a),g===1?(g=1,C===!0&&(g|=8)):g=0,C=Or(3,null,null,g),e.current=C,C.stateNode=e,C.memoizedState={element:i,isDehydrated:I,cache:null,transitions:null,pendingSuspenseBoundaries:null},wL(C),e}function p5e(e,g,I){var i=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(mme)}catch(e){console.error(e)}}mme(),dde.exports=br;var sa=dde.exports;const jI=Qc(sa);var Sq=sa;aE.createRoot=Sq.createRoot,aE.hydrateRoot=Sq.hydrateRoot;const v5e="modulepreload",B5e=function(e){return"/altgosling/"+e},wq={},S5e=function(g,I,i){if(!I||I.length===0)return g();const n=document.getElementsByTagName("link");return Promise.all(I.map(C=>{if(C=B5e(C),C in wq)return;wq[C]=!0;const r=C.endsWith(".css"),o=r?'[rel="stylesheet"]':"";if(!!i)for(let A=n.length-1;A>=0;A--){const l=n[A];if(l.href===C&&(!r||l.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${C}"]${o}`))return;const s=document.createElement("link");if(s.rel=r?"stylesheet":v5e,r||(s.as="script",s.crossOrigin=""),s.href=C,document.head.appendChild(s),r)return new Promise((A,l)=>{s.addEventListener("load",A),s.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${C}`)))})})).then(()=>g()).catch(C=>{const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=C,window.dispatchEvent(r),!r.defaultPrevented)throw C})};function w5e(e){var g=this.constructor;return this.then(function(I){return g.resolve(e()).then(function(){return I})},function(I){return g.resolve(e()).then(function(){return g.reject(I)})})}function R5e(e){var g=this;return new g(function(I,i){if(!(e&&typeof e.length<"u"))return i(new TypeError(typeof e+" "+e+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var n=Array.prototype.slice.call(e);if(n.length===0)return I([]);var C=n.length;function r(a,s){if(s&&(typeof s=="object"||typeof s=="function")){var A=s.then;if(typeof A=="function"){A.call(s,function(l){r(a,l)},function(l){n[a]={status:"rejected",reason:l},--C===0&&I(n)});return}}n[a]={status:"fulfilled",value:s},--C===0&&I(n)}for(var o=0;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),hE=Object.prototype.hasOwnProperty,WYe=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,B6={},S6={};function XYe(e){return hE.call(S6,e)?!0:hE.call(B6,e)?!1:WYe.test(e)?S6[e]=!0:(B6[e]=!0,!1)}function HYe(e,g,i,I){if(i!==null&&i.type===0)return!1;switch(typeof g){case"function":case"symbol":return!0;case"boolean":return I?!1:i!==null?!i.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function TYe(e,g,i,I){if(g===null||typeof g>"u"||HYe(e,g,i,I))return!0;if(I)return!1;if(i!==null)switch(i.type){case 3:return!g;case 4:return g===!1;case 5:return isNaN(g);case 6:return isNaN(g)||1>g}return!1}function hr(e,g,i,I,n,r,C){this.acceptsBooleans=g===2||g===3||g===4,this.attributeName=I,this.attributeNamespace=n,this.mustUseProperty=i,this.propertyName=e,this.type=g,this.sanitizeURL=r,this.removeEmptyString=C}var hn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){hn[e]=new hr(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var g=e[0];hn[g]=new hr(g,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){hn[e]=new hr(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){hn[e]=new hr(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){hn[e]=new hr(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){hn[e]=new hr(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){hn[e]=new hr(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){hn[e]=new hr(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){hn[e]=new hr(e,5,!1,e.toLowerCase(),null,!1,!1)});var AL=/[\-:]([a-z])/g;function sL(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var g=e.replace(AL,sL);hn[g]=new hr(g,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var g=e.replace(AL,sL);hn[g]=new hr(g,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var g=e.replace(AL,sL);hn[g]=new hr(g,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){hn[e]=new hr(e,1,!1,e.toLowerCase(),null,!1,!1)});hn.xlinkHref=new hr("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){hn[e]=new hr(e,1,!1,e.toLowerCase(),null,!0,!0)});function lL(e,g,i,I){var n=hn.hasOwnProperty(g)?hn[g]:null;(n!==null?n.type!==0:I||!(2o||n[C]!==r[o]){var a=` +`+n[C].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=C&&0<=o);break}}}finally{IK=!1,Error.prepareStackTrace=i}return(e=e?e.displayName||e.name:"")?YZ(e):""}function NYe(e){switch(e.tag){case 5:return YZ(e.type);case 16:return YZ("Lazy");case 13:return YZ("Suspense");case 19:return YZ("SuspenseList");case 0:case 2:case 15:return e=nK(e.type,!1),e;case 11:return e=nK(e.type.render,!1),e;case 1:return e=nK(e.type,!0),e;default:return""}}function bE(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Jf:return"Fragment";case Pf:return"Portal";case mE:return"Profiler";case cL:return"StrictMode";case fE:return"Suspense";case pE:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Rde:return(e.displayName||"Context")+".Consumer";case wde:return(e._context.displayName||"Context")+".Provider";case uL:var g=e.render;return e=e.displayName,e||(e=g.displayName||g.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case dL:return g=e.displayName||null,g!==null?g:bE(e.type)||"Memo";case Ml:g=e._payload,e=e._init;try{return bE(e(g))}catch{}}return null}function kYe(e){var g=e.type;switch(e.tag){case 24:return"Cache";case 9:return(g.displayName||"Context")+".Consumer";case 10:return(g._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=g.render,e=e.displayName||e.name||"",g.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return g;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return bE(g);case 8:return g===cL?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof g=="function")return g.displayName||g.name||null;if(typeof g=="string")return g}return null}function Mc(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Wde(e){var g=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(g==="checkbox"||g==="radio")}function YYe(e){var g=Wde(e)?"checked":"value",i=Object.getOwnPropertyDescriptor(e.constructor.prototype,g),I=""+e[g];if(!e.hasOwnProperty(g)&&typeof i<"u"&&typeof i.get=="function"&&typeof i.set=="function"){var n=i.get,r=i.set;return Object.defineProperty(e,g,{configurable:!0,get:function(){return n.call(this)},set:function(C){I=""+C,r.call(this,C)}}),Object.defineProperty(e,g,{enumerable:i.enumerable}),{getValue:function(){return I},setValue:function(C){I=""+C},stopTracking:function(){e._valueTracker=null,delete e[g]}}}}function IR(e){e._valueTracker||(e._valueTracker=YYe(e))}function Xde(e){if(!e)return!1;var g=e._valueTracker;if(!g)return!0;var i=g.getValue(),I="";return e&&(I=Wde(e)?e.checked?"true":"false":e.value),e=I,e!==i?(g.setValue(e),!0):!1}function jW(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function yE(e,g){var i=g.checked;return Pi({},g,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:i??e._wrapperState.initialChecked})}function R6(e,g){var i=g.defaultValue==null?"":g.defaultValue,I=g.checked!=null?g.checked:g.defaultChecked;i=Mc(g.value!=null?g.value:i),e._wrapperState={initialChecked:I,initialValue:i,controlled:g.type==="checkbox"||g.type==="radio"?g.checked!=null:g.value!=null}}function Hde(e,g){g=g.checked,g!=null&&lL(e,"checked",g,!1)}function ZE(e,g){Hde(e,g);var i=Mc(g.value),I=g.type;if(i!=null)I==="number"?(i===0&&e.value===""||e.value!=i)&&(e.value=""+i):e.value!==""+i&&(e.value=""+i);else if(I==="submit"||I==="reset"){e.removeAttribute("value");return}g.hasOwnProperty("value")?GE(e,g.type,i):g.hasOwnProperty("defaultValue")&&GE(e,g.type,Mc(g.defaultValue)),g.checked==null&&g.defaultChecked!=null&&(e.defaultChecked=!!g.defaultChecked)}function V6(e,g,i){if(g.hasOwnProperty("value")||g.hasOwnProperty("defaultValue")){var I=g.type;if(!(I!=="submit"&&I!=="reset"||g.value!==void 0&&g.value!==null))return;g=""+e._wrapperState.initialValue,i||g===e.value||(e.value=g),e.defaultValue=g}i=e.name,i!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,i!==""&&(e.name=i)}function GE(e,g,i){(g!=="number"||jW(e.ownerDocument)!==e)&&(i==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+i&&(e.defaultValue=""+i))}var KZ=Array.isArray;function mp(e,g,i,I){if(e=e.options,g){g={};for(var n=0;n"+g.valueOf().toString()+"",g=nR.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;g.firstChild;)e.appendChild(g.firstChild)}});function Ov(e,g){if(g){var i=e.firstChild;if(i&&i===e.lastChild&&i.nodeType===3){i.nodeValue=g;return}}e.textContent=g}var VG={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},KYe=["Webkit","ms","Moz","O"];Object.keys(VG).forEach(function(e){KYe.forEach(function(g){g=g+e.charAt(0).toUpperCase()+e.substring(1),VG[g]=VG[e]})});function Yde(e,g,i){return g==null||typeof g=="boolean"||g===""?"":i||typeof g!="number"||g===0||VG.hasOwnProperty(e)&&VG[e]?(""+g).trim():g+"px"}function Kde(e,g){e=e.style;for(var i in g)if(g.hasOwnProperty(i)){var I=i.indexOf("--")===0,n=Yde(i,g[i],I);i==="float"&&(i="cssFloat"),I?e.setProperty(i,n):e[i]=n}}var FYe=Pi({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function SE(e,g){if(g){if(FYe[e]&&(g.children!=null||g.dangerouslySetInnerHTML!=null))throw Error(st(137,e));if(g.dangerouslySetInnerHTML!=null){if(g.children!=null)throw Error(st(60));if(typeof g.dangerouslySetInnerHTML!="object"||!("__html"in g.dangerouslySetInnerHTML))throw Error(st(61))}if(g.style!=null&&typeof g.style!="object")throw Error(st(62))}}function wE(e,g){if(e.indexOf("-")===-1)return typeof g.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var RE=null;function hL(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var VE=null,fp=null,pp=null;function H6(e){if(e=RS(e)){if(typeof VE!="function")throw Error(st(280));var g=e.stateNode;g&&(g=aT(g),VE(e.stateNode,e.type,g))}}function Fde(e){fp?pp?pp.push(e):pp=[e]:fp=e}function Dde(){if(fp){var e=fp,g=pp;if(pp=fp=null,H6(e),g)for(e=0;e>>=0,e===0?32:31-(UYe(e)/QYe|0)|0}var rR=64,CR=4194304;function FZ(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function t9(e,g){var i=e.pendingLanes;if(i===0)return 0;var I=0,n=e.suspendedLanes,r=e.pingedLanes,C=i&268435455;if(C!==0){var o=C&~n;o!==0?I=FZ(o):(r&=C,r!==0&&(I=FZ(r)))}else C=i&~n,C!==0?I=FZ(C):r!==0&&(I=FZ(r));if(I===0)return 0;if(g!==0&&g!==I&&!(g&n)&&(n=I&-I,r=g&-g,n>=r||n===16&&(r&4194240)!==0))return g;if(I&4&&(I|=i&16),g=e.entangledLanes,g!==0)for(e=e.entanglements,g&=I;0i;i++)g.push(e);return g}function SS(e,g,i){e.pendingLanes|=g,g!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,g=31-Ia(g),e[g]=i}function eKe(e,g){var i=e.pendingLanes&~g;e.pendingLanes=g,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=g,e.mutableReadLanes&=g,e.entangledLanes&=g,g=e.entanglements;var I=e.eventTimes;for(e=e.expirationTimes;0=XG),E6=String.fromCharCode(32),M6=!1;function nhe(e,g){switch(e){case"keyup":return RKe.indexOf(g.keyCode)!==-1;case"keydown":return g.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function rhe(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Of=!1;function WKe(e,g){switch(e){case"compositionend":return rhe(g);case"keypress":return g.which!==32?null:(M6=!0,E6);case"textInput":return e=g.data,e===E6&&M6?null:e;default:return null}}function XKe(e,g){if(Of)return e==="compositionend"||!vL&&nhe(e,g)?(e=ihe(),G1=yL=ac=null,Of=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(g.ctrlKey||g.altKey||g.metaKey)||g.ctrlKey&&g.altKey){if(g.char&&1=g)return{node:i,offset:g-e};e=I}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=O6(i)}}function Ahe(e,g){return e&&g?e===g?!0:e&&e.nodeType===3?!1:g&&g.nodeType===3?Ahe(e,g.parentNode):"contains"in e?e.contains(g):e.compareDocumentPosition?!!(e.compareDocumentPosition(g)&16):!1:!1}function she(){for(var e=window,g=jW();g instanceof e.HTMLIFrameElement;){try{var i=typeof g.contentWindow.location.href=="string"}catch{i=!1}if(i)e=g.contentWindow;else break;g=jW(e.document)}return g}function BL(e){var g=e&&e.nodeName&&e.nodeName.toLowerCase();return g&&(g==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||g==="textarea"||e.contentEditable==="true")}function xKe(e){var g=she(),i=e.focusedElem,I=e.selectionRange;if(g!==i&&i&&i.ownerDocument&&Ahe(i.ownerDocument.documentElement,i)){if(I!==null&&BL(i)){if(g=I.start,e=I.end,e===void 0&&(e=g),"selectionStart"in i)i.selectionStart=g,i.selectionEnd=Math.min(e,i.value.length);else if(e=(g=i.ownerDocument||document)&&g.defaultView||window,e.getSelection){e=e.getSelection();var n=i.textContent.length,r=Math.min(I.start,n);I=I.end===void 0?r:Math.min(I.end,n),!e.extend&&r>I&&(n=I,I=r,r=n),n=_6(i,r);var C=_6(i,I);n&&C&&(e.rangeCount!==1||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==C.node||e.focusOffset!==C.offset)&&(g=g.createRange(),g.setStart(n.node,n.offset),e.removeAllRanges(),r>I?(e.addRange(g),e.extend(C.node,C.offset)):(g.setEnd(C.node,C.offset),e.addRange(g)))}}for(g=[],e=i;e=e.parentNode;)e.nodeType===1&&g.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;i=document.documentMode,_f=null,kE=null,TG=null,YE=!1;function L6(e,g,i){var I=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;YE||_f==null||_f!==jW(I)||(I=_f,"selectionStart"in I&&BL(I)?I={start:I.selectionStart,end:I.selectionEnd}:(I=(I.ownerDocument&&I.ownerDocument.defaultView||window).getSelection(),I={anchorNode:I.anchorNode,anchorOffset:I.anchorOffset,focusNode:I.focusNode,focusOffset:I.focusOffset}),TG&&$v(TG,I)||(TG=I,I=I9(kE,"onSelect"),0Qf||(e.current=ME[Qf],ME[Qf]=null,Qf--)}function ai(e,g){Qf++,ME[Qf]=e.current,e.current=g}var zc={},Kn=qc(zc),Dr=qc(!1),zd=zc;function nb(e,g){var i=e.type.contextTypes;if(!i)return zc;var I=e.stateNode;if(I&&I.__reactInternalMemoizedUnmaskedChildContext===g)return I.__reactInternalMemoizedMaskedChildContext;var n={},r;for(r in i)n[r]=g[r];return I&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=g,e.__reactInternalMemoizedMaskedChildContext=n),n}function xr(e){return e=e.childContextTypes,e!=null}function r9(){Gi(Dr),Gi(Kn)}function tq(e,g,i){if(Kn.current!==zc)throw Error(st(168));ai(Kn,g),ai(Dr,i)}function bhe(e,g,i){var I=e.stateNode;if(g=g.childContextTypes,typeof I.getChildContext!="function")return i;I=I.getChildContext();for(var n in I)if(!(n in g))throw Error(st(108,kYe(e)||"Unknown",n));return Pi({},i,I)}function C9(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||zc,zd=Kn.current,ai(Kn,e),ai(Dr,Dr.current),!0}function gq(e,g,i){var I=e.stateNode;if(!I)throw Error(st(169));i?(e=bhe(e,g,zd),I.__reactInternalMemoizedMergedChildContext=e,Gi(Dr),Gi(Kn),ai(Kn,e)):Gi(Dr),ai(Dr,i)}var gs=null,AT=!1,pK=!1;function yhe(e){gs===null?gs=[e]:gs.push(e)}function $Ke(e){AT=!0,yhe(e)}function eu(){if(!pK&&gs!==null){pK=!0;var e=0,g=Og;try{var i=gs;for(Og=1;e>=C,n-=C,cs=1<<32-Ia(g)+n|i<v?(w=G,G=null):w=G.sibling;var V=c(f,G,p[v],y);if(V===null){G===null&&(G=w);break}e&&G&&V.alternate===null&&g(f,G),b=r(V,b,v),B===null?Z=V:B.sibling=V,B=V,G=w}if(v===p.length)return i(f,G),Hi&&Mu(f,v),Z;if(G===null){for(;vv?(w=G,G=null):w=G.sibling;var S=c(f,G,V.value,y);if(S===null){G===null&&(G=w);break}e&&G&&S.alternate===null&&g(f,G),b=r(S,b,v),B===null?Z=S:B.sibling=S,B=S,G=w}if(V.done)return i(f,G),Hi&&Mu(f,v),Z;if(G===null){for(;!V.done;v++,V=p.next())V=l(f,V.value,y),V!==null&&(b=r(V,b,v),B===null?Z=V:B.sibling=V,B=V);return Hi&&Mu(f,v),Z}for(G=I(f,G);!V.done;v++,V=p.next())V=u(G,f,v,V.value,y),V!==null&&(e&&V.alternate!==null&&G.delete(V.key===null?v:V.key),b=r(V,b,v),B===null?Z=V:B.sibling=V,B=V);return e&&G.forEach(function(X){return g(f,X)}),Hi&&Mu(f,v),Z}function m(f,b,p,y){if(typeof p=="object"&&p!==null&&p.type===Jf&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case iR:e:{for(var Z=p.key,B=b;B!==null;){if(B.key===Z){if(Z=p.type,Z===Jf){if(B.tag===7){i(f,B.sibling),b=n(B,p.props.children),b.return=f,f=b;break e}}else if(B.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Ml&&aq(Z)===B.type){i(f,B.sibling),b=n(B,p.props),b.ref=Wy(f,B,p),b.return=f,f=b;break e}i(f,B);break}else g(f,B);B=B.sibling}p.type===Jf?(b=Sd(p.props.children,f.mode,y,p.key),b.return=f,f=b):(y=X1(p.type,p.key,p.props,null,f.mode,y),y.ref=Wy(f,b,p),y.return=f,f=y)}return C(f);case Pf:e:{for(B=p.key;b!==null;){if(b.key===B)if(b.tag===4&&b.stateNode.containerInfo===p.containerInfo&&b.stateNode.implementation===p.implementation){i(f,b.sibling),b=n(b,p.children||[]),b.return=f,f=b;break e}else{i(f,b);break}else g(f,b);b=b.sibling}b=wK(p,f.mode,y),b.return=f,f=b}return C(f);case Ml:return B=p._init,m(f,b,B(p._payload),y)}if(KZ(p))return d(f,b,p,y);if(By(p))return h(f,b,p,y);uR(f,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,b!==null&&b.tag===6?(i(f,b.sibling),b=n(b,p),b.return=f,f=b):(i(f,b),b=SK(p,f.mode,y),b.return=f,f=b),C(f)):i(f,b)}return m}var Cb=Vhe(!0),Whe=Vhe(!1),VS={},sA=qc(VS),gB=qc(VS),iB=qc(VS);function od(e){if(e===VS)throw Error(st(174));return e}function NL(e,g){switch(ai(iB,g),ai(gB,e),ai(sA,VS),e=g.nodeType,e){case 9:case 11:g=(g=g.documentElement)?g.namespaceURI:BE(null,"");break;default:e=e===8?g.parentNode:g,g=e.namespaceURI||null,e=e.tagName,g=BE(g,e)}Gi(sA),ai(sA,g)}function ob(){Gi(sA),Gi(gB),Gi(iB)}function Xhe(e){od(iB.current);var g=od(sA.current),i=BE(g,e.type);g!==i&&(ai(gB,e),ai(sA,i))}function kL(e){gB.current===e&&(Gi(sA),Gi(gB))}var Fi=qc(0);function c9(e){for(var g=e;g!==null;){if(g.tag===13){var i=g.memoizedState;if(i!==null&&(i=i.dehydrated,i===null||i.data==="$?"||i.data==="$!"))return g}else if(g.tag===19&&g.memoizedProps.revealOrder!==void 0){if(g.flags&128)return g}else if(g.child!==null){g.child.return=g,g=g.child;continue}if(g===e)break;for(;g.sibling===null;){if(g.return===null||g.return===e)return null;g=g.return}g.sibling.return=g.return,g=g.sibling}return null}var bK=[];function YL(){for(var e=0;ei?i:4,e(!0);var I=yK.transition;yK.transition={};try{e(!1),g()}finally{Og=i,yK.transition=I}}function _he(){return ro().memoizedState}function g5e(e,g,i){var I=Vc(e);if(i={lane:I,action:i,hasEagerState:!1,eagerState:null,next:null},Lhe(e))Uhe(g,i);else if(i=Bhe(e,g,i,I),i!==null){var n=or();na(i,e,I,n),Qhe(i,g,I)}}function i5e(e,g,i){var I=Vc(e),n={lane:I,action:i,hasEagerState:!1,eagerState:null,next:null};if(Lhe(e))Uhe(g,n);else{var r=e.alternate;if(e.lanes===0&&(r===null||r.lanes===0)&&(r=g.lastRenderedReducer,r!==null))try{var C=g.lastRenderedState,o=r(C,i);if(n.hasEagerState=!0,n.eagerState=o,ca(o,C)){var a=g.interleaved;a===null?(n.next=n,HL(g)):(n.next=a.next,a.next=n),g.interleaved=n;return}}catch{}finally{}i=Bhe(e,g,n,I),i!==null&&(n=or(),na(i,e,I,n),Qhe(i,g,I))}}function Lhe(e){var g=e.alternate;return e===Mi||g!==null&&g===Mi}function Uhe(e,g){NG=u9=!0;var i=e.pending;i===null?g.next=g:(g.next=i.next,i.next=g),e.pending=g}function Qhe(e,g,i){if(i&4194240){var I=g.lanes;I&=e.pendingLanes,i|=I,g.lanes=i,fL(e,i)}}var d9={readContext:no,useCallback:Zn,useContext:Zn,useEffect:Zn,useImperativeHandle:Zn,useInsertionEffect:Zn,useLayoutEffect:Zn,useMemo:Zn,useReducer:Zn,useRef:Zn,useState:Zn,useDebugValue:Zn,useDeferredValue:Zn,useTransition:Zn,useMutableSource:Zn,useSyncExternalStore:Zn,useId:Zn,unstable_isNewReconciler:!1},I5e={readContext:no,useCallback:function(e,g){return Fa().memoizedState=[e,g===void 0?null:g],e},useContext:no,useEffect:sq,useImperativeHandle:function(e,g,i){return i=i!=null?i.concat([e]):null,w1(4194308,4,Mhe.bind(null,g,e),i)},useLayoutEffect:function(e,g){return w1(4194308,4,e,g)},useInsertionEffect:function(e,g){return w1(4,2,e,g)},useMemo:function(e,g){var i=Fa();return g=g===void 0?null:g,e=e(),i.memoizedState=[e,g],e},useReducer:function(e,g,i){var I=Fa();return g=i!==void 0?i(g):g,I.memoizedState=I.baseState=g,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:g},I.queue=e,e=e.dispatch=g5e.bind(null,Mi,e),[I.memoizedState,e]},useRef:function(e){var g=Fa();return e={current:e},g.memoizedState=e},useState:Aq,useDebugValue:EL,useDeferredValue:function(e){return Fa().memoizedState=e},useTransition:function(){var e=Aq(!1),g=e[0];return e=t5e.bind(null,e[1]),Fa().memoizedState=e,[g,e]},useMutableSource:function(){},useSyncExternalStore:function(e,g,i){var I=Mi,n=Fa();if(Hi){if(i===void 0)throw Error(st(407));i=i()}else{if(i=g(),QI===null)throw Error(st(349));Jd&30||Nhe(I,g,i)}n.memoizedState=i;var r={value:i,getSnapshot:g};return n.queue=r,sq(Yhe.bind(null,I,r,e),[e]),I.flags|=2048,rB(9,khe.bind(null,I,r,i,g),void 0,null),i},useId:function(){var e=Fa(),g=QI.identifierPrefix;if(Hi){var i=us,I=cs;i=(I&~(1<<32-Ia(I)-1)).toString(32)+i,g=":"+g+"R"+i,i=IB++,0<\/script>",e=e.removeChild(e.firstChild)):typeof I.is=="string"?e=C.createElement(i,{is:I.is}):(e=C.createElement(i),i==="select"&&(C=e,I.multiple?C.multiple=!0:I.size&&(C.size=I.size))):e=C.createElementNS(e,i),e[Pa]=g,e[tB]=I,nme(e,g,!1,!1),g.stateNode=e;e:{switch(C=wE(i,I),i){case"dialog":di("cancel",e),di("close",e),n=I;break;case"iframe":case"object":case"embed":di("load",e),n=I;break;case"video":case"audio":for(n=0;nAb&&(g.flags|=128,I=!0,Xy(r,!1),g.lanes=4194304)}else{if(!I)if(e=c9(C),e!==null){if(g.flags|=128,I=!0,i=e.updateQueue,i!==null&&(g.updateQueue=i,g.flags|=4),Xy(r,!0),r.tail===null&&r.tailMode==="hidden"&&!C.alternate&&!Hi)return Gn(g),null}else 2*lI()-r.renderingStartTime>Ab&&i!==1073741824&&(g.flags|=128,I=!0,Xy(r,!1),g.lanes=4194304);r.isBackwards?(C.sibling=g.child,g.child=C):(i=r.last,i!==null?i.sibling=C:g.child=C,r.last=C)}return r.tail!==null?(g=r.tail,r.rendering=g,r.tail=g.sibling,r.renderingStartTime=lI(),g.sibling=null,i=Fi.current,ai(Fi,I?i&1|2:i&1),g):(Gn(g),null);case 22:case 23:return _L(),I=g.memoizedState!==null,e!==null&&e.memoizedState!==null!==I&&(g.flags|=8192),I&&g.mode&1?tC&1073741824&&(Gn(g),g.subtreeFlags&6&&(g.flags|=8192)):Gn(g),null;case 24:return null;case 25:return null}throw Error(st(156,g.tag))}function l5e(e,g){switch(wL(g),g.tag){case 1:return xr(g.type)&&r9(),e=g.flags,e&65536?(g.flags=e&-65537|128,g):null;case 3:return ob(),Gi(Dr),Gi(Kn),YL(),e=g.flags,e&65536&&!(e&128)?(g.flags=e&-65537|128,g):null;case 5:return kL(g),null;case 13:if(Gi(Fi),e=g.memoizedState,e!==null&&e.dehydrated!==null){if(g.alternate===null)throw Error(st(340));rb()}return e=g.flags,e&65536?(g.flags=e&-65537|128,g):null;case 19:return Gi(Fi),null;case 4:return ob(),null;case 10:return XL(g.type._context),null;case 22:case 23:return _L(),null;case 24:return null;default:return null}}var hR=!1,kn=!1,c5e=typeof WeakSet=="function"?WeakSet:Set,wt=null;function ep(e,g){var i=e.ref;if(i!==null)if(typeof i=="function")try{i(null)}catch(I){ji(e,g,I)}else i.current=null}function eM(e,g,i){try{i()}catch(I){ji(e,g,I)}}var bq=!1;function u5e(e,g){if(KE=g9,e=she(),BL(e)){if("selectionStart"in e)var i={start:e.selectionStart,end:e.selectionEnd};else e:{i=(i=e.ownerDocument)&&i.defaultView||window;var I=i.getSelection&&i.getSelection();if(I&&I.rangeCount!==0){i=I.anchorNode;var n=I.anchorOffset,r=I.focusNode;I=I.focusOffset;try{i.nodeType,r.nodeType}catch{i=null;break e}var C=0,o=-1,a=-1,s=0,A=0,l=e,c=null;t:for(;;){for(var u;l!==i||n!==0&&l.nodeType!==3||(o=C+n),l!==r||I!==0&&l.nodeType!==3||(a=C+I),l.nodeType===3&&(C+=l.nodeValue.length),(u=l.firstChild)!==null;)c=l,l=u;for(;;){if(l===e)break t;if(c===i&&++s===n&&(o=C),c===r&&++A===I&&(a=C),(u=l.nextSibling)!==null)break;l=c,c=l.parentNode}l=u}i=o===-1||a===-1?null:{start:o,end:a}}else i=null}i=i||{start:0,end:0}}else i=null;for(FE={focusedElem:e,selectionRange:i},g9=!1,wt=g;wt!==null;)if(g=wt,e=g.child,(g.subtreeFlags&1028)!==0&&e!==null)e.return=g,wt=e;else for(;wt!==null;){g=wt;try{var d=g.alternate;if(g.flags&1024)switch(g.tag){case 0:case 11:case 15:break;case 1:if(d!==null){var h=d.memoizedProps,m=d.memoizedState,f=g.stateNode,b=f.getSnapshotBeforeUpdate(g.elementType===g.type?h:zo(g.type,h),m);f.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var p=g.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(st(163))}}catch(y){ji(g,g.return,y)}if(e=g.sibling,e!==null){e.return=g.return,wt=e;break}wt=g.return}return d=bq,bq=!1,d}function kG(e,g,i){var I=g.updateQueue;if(I=I!==null?I.lastEffect:null,I!==null){var n=I=I.next;do{if((n.tag&e)===e){var r=n.destroy;n.destroy=void 0,r!==void 0&&eM(g,i,r)}n=n.next}while(n!==I)}}function cT(e,g){if(g=g.updateQueue,g=g!==null?g.lastEffect:null,g!==null){var i=g=g.next;do{if((i.tag&e)===e){var I=i.create;i.destroy=I()}i=i.next}while(i!==g)}}function tM(e){var g=e.ref;if(g!==null){var i=e.stateNode;switch(e.tag){case 5:e=i;break;default:e=i}typeof g=="function"?g(e):g.current=e}}function ome(e){var g=e.alternate;g!==null&&(e.alternate=null,ome(g)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(g=e.stateNode,g!==null&&(delete g[Pa],delete g[tB],delete g[EE],delete g[QKe],delete g[jKe])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function ame(e){return e.tag===5||e.tag===3||e.tag===4}function yq(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||ame(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function gM(e,g,i){var I=e.tag;if(I===5||I===6)e=e.stateNode,g?i.nodeType===8?i.parentNode.insertBefore(e,g):i.insertBefore(e,g):(i.nodeType===8?(g=i.parentNode,g.insertBefore(e,i)):(g=i,g.appendChild(e)),i=i._reactRootContainer,i!=null||g.onclick!==null||(g.onclick=n9));else if(I!==4&&(e=e.child,e!==null))for(gM(e,g,i),e=e.sibling;e!==null;)gM(e,g,i),e=e.sibling}function iM(e,g,i){var I=e.tag;if(I===5||I===6)e=e.stateNode,g?i.insertBefore(e,g):i.appendChild(e);else if(I!==4&&(e=e.child,e!==null))for(iM(e,g,i),e=e.sibling;e!==null;)iM(e,g,i),e=e.sibling}var on=null,Jo=!1;function hl(e,g,i){for(i=i.child;i!==null;)Ame(e,g,i),i=i.sibling}function Ame(e,g,i){if(AA&&typeof AA.onCommitFiberUnmount=="function")try{AA.onCommitFiberUnmount(nT,i)}catch{}switch(i.tag){case 5:kn||ep(i,g);case 6:var I=on,n=Jo;on=null,hl(e,g,i),on=I,Jo=n,on!==null&&(Jo?(e=on,i=i.stateNode,e.nodeType===8?e.parentNode.removeChild(i):e.removeChild(i)):on.removeChild(i.stateNode));break;case 18:on!==null&&(Jo?(e=on,i=i.stateNode,e.nodeType===8?fK(e.parentNode,i):e.nodeType===1&&fK(e,i),Qv(e)):fK(on,i.stateNode));break;case 4:I=on,n=Jo,on=i.stateNode.containerInfo,Jo=!0,hl(e,g,i),on=I,Jo=n;break;case 0:case 11:case 14:case 15:if(!kn&&(I=i.updateQueue,I!==null&&(I=I.lastEffect,I!==null))){n=I=I.next;do{var r=n,C=r.destroy;r=r.tag,C!==void 0&&(r&2||r&4)&&eM(i,g,C),n=n.next}while(n!==I)}hl(e,g,i);break;case 1:if(!kn&&(ep(i,g),I=i.stateNode,typeof I.componentWillUnmount=="function"))try{I.props=i.memoizedProps,I.state=i.memoizedState,I.componentWillUnmount()}catch(o){ji(i,g,o)}hl(e,g,i);break;case 21:hl(e,g,i);break;case 22:i.mode&1?(kn=(I=kn)||i.memoizedState!==null,hl(e,g,i),kn=I):hl(e,g,i);break;default:hl(e,g,i)}}function Zq(e){var g=e.updateQueue;if(g!==null){e.updateQueue=null;var i=e.stateNode;i===null&&(i=e.stateNode=new c5e),g.forEach(function(I){var n=G5e.bind(null,e,I);i.has(I)||(i.add(I),I.then(n,n))})}}function bo(e,g){var i=g.deletions;if(i!==null)for(var I=0;In&&(n=C),I&=~r}if(I=n,I=lI()-I,I=(120>I?120:480>I?480:1080>I?1080:1920>I?1920:3e3>I?3e3:4320>I?4320:1960*h5e(I/1960))-I,10e?16:e,Ac===null)var I=!1;else{if(e=Ac,Ac=null,f9=0,Tg&6)throw Error(st(331));var n=Tg;for(Tg|=4,wt=e.current;wt!==null;){var r=wt,C=r.child;if(wt.flags&16){var o=r.deletions;if(o!==null){for(var a=0;alI()-JL?Bd(e,0):PL|=i),Er(e,g)}function fme(e,g){g===0&&(e.mode&1?(g=CR,CR<<=1,!(CR&130023424)&&(CR=4194304)):g=1);var i=or();e=ks(e,g),e!==null&&(SS(e,g,i),Er(e,i))}function Z5e(e){var g=e.memoizedState,i=0;g!==null&&(i=g.retryLane),fme(e,i)}function G5e(e,g){var i=0;switch(e.tag){case 13:var I=e.stateNode,n=e.memoizedState;n!==null&&(i=n.retryLane);break;case 19:I=e.stateNode;break;default:throw Error(st(314))}I!==null&&I.delete(g),fme(e,i)}var pme;pme=function(e,g,i){if(e!==null)if(e.memoizedProps!==g.pendingProps||Dr.current)kr=!0;else{if(!(e.lanes&i)&&!(g.flags&128))return kr=!1,A5e(e,g,i);kr=!!(e.flags&131072)}else kr=!1,Hi&&g.flags&1048576&&Zhe(g,a9,g.index);switch(g.lanes=0,g.tag){case 2:var I=g.type;R1(e,g),e=g.pendingProps;var n=nb(g,Kn.current);yp(g,i),n=FL(null,g,I,e,n,i);var r=DL();return g.flags|=1,typeof n=="object"&&n!==null&&typeof n.render=="function"&&n.$$typeof===void 0?(g.tag=1,g.memoizedState=null,g.updateQueue=null,xr(I)?(r=!0,C9(g)):r=!1,g.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,TL(g),n.updater=sT,g.stateNode=n,n._reactInternals=g,_E(g,I,e,i),g=QE(null,g,I,!0,r,i)):(g.tag=0,Hi&&r&&SL(g),Ln(null,g,n,i),g=g.child),g;case 16:I=g.elementType;e:{switch(R1(e,g),e=g.pendingProps,n=I._init,I=n(I._payload),g.type=I,n=g.tag=B5e(I),e=zo(I,e),n){case 0:g=UE(null,g,I,e,i);break e;case 1:g=mq(null,g,I,e,i);break e;case 11:g=dq(null,g,I,e,i);break e;case 14:g=hq(null,g,I,zo(I.type,e),i);break e}throw Error(st(306,I,""))}return g;case 0:return I=g.type,n=g.pendingProps,n=g.elementType===I?n:zo(I,n),UE(e,g,I,n,i);case 1:return I=g.type,n=g.pendingProps,n=g.elementType===I?n:zo(I,n),mq(e,g,I,n,i);case 3:e:{if(gme(g),e===null)throw Error(st(387));I=g.pendingProps,r=g.memoizedState,n=r.element,She(e,g),l9(g,I,null,i);var C=g.memoizedState;if(I=C.element,r.isDehydrated)if(r={element:I,isDehydrated:!1,cache:C.cache,pendingSuspenseBoundaries:C.pendingSuspenseBoundaries,transitions:C.transitions},g.updateQueue.baseState=r,g.memoizedState=r,g.flags&256){n=ab(Error(st(423)),g),g=fq(e,g,I,i,n);break e}else if(I!==n){n=ab(Error(st(424)),g),g=fq(e,g,I,i,n);break e}else for(cC=Sc(g.stateNode.containerInfo.firstChild),hC=g,Hi=!0,_o=null,i=Whe(g,null,I,i),g.child=i;i;)i.flags=i.flags&-3|4096,i=i.sibling;else{if(rb(),I===n){g=Ys(e,g,i);break e}Ln(e,g,I,i)}g=g.child}return g;case 5:return Xhe(g),e===null&&PE(g),I=g.type,n=g.pendingProps,r=e!==null?e.memoizedProps:null,C=n.children,DE(I,n)?C=null:r!==null&&DE(I,r)&&(g.flags|=32),tme(e,g),Ln(e,g,C,i),g.child;case 6:return e===null&&PE(g),null;case 13:return ime(e,g,i);case 4:return NL(g,g.stateNode.containerInfo),I=g.pendingProps,e===null?g.child=Cb(g,null,I,i):Ln(e,g,I,i),g.child;case 11:return I=g.type,n=g.pendingProps,n=g.elementType===I?n:zo(I,n),dq(e,g,I,n,i);case 7:return Ln(e,g,g.pendingProps,i),g.child;case 8:return Ln(e,g,g.pendingProps.children,i),g.child;case 12:return Ln(e,g,g.pendingProps.children,i),g.child;case 10:e:{if(I=g.type._context,n=g.pendingProps,r=g.memoizedProps,C=n.value,ai(A9,I._currentValue),I._currentValue=C,r!==null)if(ca(r.value,C)){if(r.children===n.children&&!Dr.current){g=Ys(e,g,i);break e}}else for(r=g.child,r!==null&&(r.return=g);r!==null;){var o=r.dependencies;if(o!==null){C=r.child;for(var a=o.firstContext;a!==null;){if(a.context===I){if(r.tag===1){a=ws(-1,i&-i),a.tag=2;var s=r.updateQueue;if(s!==null){s=s.shared;var A=s.pending;A===null?a.next=a:(a.next=A.next,A.next=a),s.pending=a}}r.lanes|=i,a=r.alternate,a!==null&&(a.lanes|=i),JE(r.return,i,g),o.lanes|=i;break}a=a.next}}else if(r.tag===10)C=r.type===g.type?null:r.child;else if(r.tag===18){if(C=r.return,C===null)throw Error(st(341));C.lanes|=i,o=C.alternate,o!==null&&(o.lanes|=i),JE(C,i,g),C=r.sibling}else C=r.child;if(C!==null)C.return=r;else for(C=r;C!==null;){if(C===g){C=null;break}if(r=C.sibling,r!==null){r.return=C.return,C=r;break}C=C.return}r=C}Ln(e,g,n.children,i),g=g.child}return g;case 9:return n=g.type,I=g.pendingProps.children,yp(g,i),n=no(n),I=I(n),g.flags|=1,Ln(e,g,I,i),g.child;case 14:return I=g.type,n=zo(I,g.pendingProps),n=zo(I.type,n),hq(e,g,I,n,i);case 15:return qhe(e,g,g.type,g.pendingProps,i);case 17:return I=g.type,n=g.pendingProps,n=g.elementType===I?n:zo(I,n),R1(e,g),g.tag=1,xr(I)?(e=!0,C9(g)):e=!1,yp(g,i),Rhe(g,I,n),_E(g,I,n,i),QE(null,g,I,!0,e,i);case 19:return Ime(e,g,i);case 22:return eme(e,g,i)}throw Error(st(156,g.tag))};function bme(e,g){return Ode(e,g)}function v5e(e,g,i,I){this.tag=e,this.key=i,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=g,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=I,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function LC(e,g,i,I){return new v5e(e,g,i,I)}function UL(e){return e=e.prototype,!(!e||!e.isReactComponent)}function B5e(e){if(typeof e=="function")return UL(e)?1:0;if(e!=null){if(e=e.$$typeof,e===uL)return 11;if(e===dL)return 14}return 2}function Wc(e,g){var i=e.alternate;return i===null?(i=LC(e.tag,g,e.key,e.mode),i.elementType=e.elementType,i.type=e.type,i.stateNode=e.stateNode,i.alternate=e,e.alternate=i):(i.pendingProps=g,i.type=e.type,i.flags=0,i.subtreeFlags=0,i.deletions=null),i.flags=e.flags&14680064,i.childLanes=e.childLanes,i.lanes=e.lanes,i.child=e.child,i.memoizedProps=e.memoizedProps,i.memoizedState=e.memoizedState,i.updateQueue=e.updateQueue,g=e.dependencies,i.dependencies=g===null?null:{lanes:g.lanes,firstContext:g.firstContext},i.sibling=e.sibling,i.index=e.index,i.ref=e.ref,i}function X1(e,g,i,I,n,r){var C=2;if(I=e,typeof e=="function")UL(e)&&(C=1);else if(typeof e=="string")C=5;else e:switch(e){case Jf:return Sd(i.children,n,r,g);case cL:C=8,n|=8;break;case mE:return e=LC(12,i,g,n|2),e.elementType=mE,e.lanes=r,e;case fE:return e=LC(13,i,g,n),e.elementType=fE,e.lanes=r,e;case pE:return e=LC(19,i,g,n),e.elementType=pE,e.lanes=r,e;case Vde:return dT(i,n,r,g);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case wde:C=10;break e;case Rde:C=9;break e;case uL:C=11;break e;case dL:C=14;break e;case Ml:C=16,I=null;break e}throw Error(st(130,e==null?e:typeof e,""))}return g=LC(C,i,g,n),g.elementType=e,g.type=I,g.lanes=r,g}function Sd(e,g,i,I){return e=LC(7,e,I,g),e.lanes=i,e}function dT(e,g,i,I){return e=LC(22,e,I,g),e.elementType=Vde,e.lanes=i,e.stateNode={isHidden:!1},e}function SK(e,g,i){return e=LC(6,e,null,g),e.lanes=i,e}function wK(e,g,i){return g=LC(4,e.children!==null?e.children:[],e.key,g),g.lanes=i,g.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},g}function S5e(e,g,i,I,n){this.tag=g,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=CK(0),this.expirationTimes=CK(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=CK(0),this.identifierPrefix=I,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function QL(e,g,i,I,n,r,C,o,a){return e=new S5e(e,g,i,o,a),g===1?(g=1,r===!0&&(g|=8)):g=0,r=LC(3,null,null,g),e.current=r,r.stateNode=e,r.memoizedState={element:I,isDehydrated:i,cache:null,transitions:null,pendingSuspenseBoundaries:null},TL(r),e}function w5e(e,g,i){var I=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(vme)}catch(e){console.error(e)}}vme(),Zde.exports=ZC;var ua=Zde.exports;const qi=jc(ua);var Wq=ua;dE.createRoot=Wq.createRoot,dE.hydrateRoot=Wq.hydrateRoot;const H5e="modulepreload",T5e=function(e){return"/altgosling/"+e},Xq={},N5e=function(g,i,I){if(!i||i.length===0)return g();const n=document.getElementsByTagName("link");return Promise.all(i.map(r=>{if(r=T5e(r),r in Xq)return;Xq[r]=!0;const C=r.endsWith(".css"),o=C?'[rel="stylesheet"]':"";if(!!I)for(let A=n.length-1;A>=0;A--){const l=n[A];if(l.href===r&&(!C||l.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${o}`))return;const s=document.createElement("link");if(s.rel=C?"stylesheet":H5e,C||(s.as="script",s.crossOrigin=""),s.href=r,document.head.appendChild(s),C)return new Promise((A,l)=>{s.addEventListener("load",A),s.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>g()).catch(r=>{const C=new Event("vite:preloadError",{cancelable:!0});if(C.payload=r,window.dispatchEvent(C),!C.defaultPrevented)throw r})};function k5e(e){var g=this.constructor;return this.then(function(i){return g.resolve(e()).then(function(){return i})},function(i){return g.resolve(e()).then(function(){return g.reject(i)})})}function Y5e(e){var g=this;return new g(function(i,I){if(!(e&&typeof e.length<"u"))return I(new TypeError(typeof e+" "+e+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var n=Array.prototype.slice.call(e);if(n.length===0)return i([]);var r=n.length;function C(a,s){if(s&&(typeof s=="object"||typeof s=="function")){var A=s.then;if(typeof A=="function"){A.call(s,function(l){C(a,l)},function(l){n[a]={status:"rejected",reason:l},--r===0&&i(n)});return}}n[a]={status:"fulfilled",value:s},--r===0&&i(n)}for(var o=0;o"u"&&(typeof self<"u"?self.globalThis=self:typeof global<"u"&&(global.globalThis=global));globalThis.Promise||(globalThis.Promise=MI);Object.assign||(Object.assign=D5e);var x5e=16;Date.now&&Date.prototype.getTime||(Date.now=function(){return new Date().getTime()});if(!(globalThis.performance&&globalThis.performance.now)){var E5e=Date.now();globalThis.performance||(globalThis.performance={}),globalThis.performance.now=function(){return Date.now()-E5e}}var ZK=Date.now(),Vq=["ms","moz","webkit","o"];for(var GK=0;GK0?1:-1});Number.isInteger||(Number.isInteger=function(g){return typeof g=="number"&&isFinite(g)&&Math.floor(g)===g});globalThis.ArrayBuffer||(globalThis.ArrayBuffer=Array);globalThis.Float32Array||(globalThis.Float32Array=Array);globalThis.Uint32Array||(globalThis.Uint32Array=Array);globalThis.Uint16Array||(globalThis.Uint16Array=Array);globalThis.Uint8Array||(globalThis.Uint8Array=Array);globalThis.Int32Array||(globalThis.Int32Array=Array);/*! + */typeof globalThis>"u"&&(typeof self<"u"?self.globalThis=self:typeof global<"u"&&(global.globalThis=global));globalThis.Promise||(globalThis.Promise=zi);Object.assign||(Object.assign=_5e);var L5e=16;Date.now&&Date.prototype.getTime||(Date.now=function(){return new Date().getTime()});if(!(globalThis.performance&&globalThis.performance.now)){var U5e=Date.now();globalThis.performance||(globalThis.performance={}),globalThis.performance.now=function(){return Date.now()-U5e}}var RK=Date.now(),Tq=["ms","moz","webkit","o"];for(var VK=0;VK0?1:-1});Number.isInteger||(Number.isInteger=function(g){return typeof g=="number"&&isFinite(g)&&Math.floor(g)===g});globalThis.ArrayBuffer||(globalThis.ArrayBuffer=Array);globalThis.Float32Array||(globalThis.Float32Array=Array);globalThis.Uint32Array||(globalThis.Uint32Array=Array);globalThis.Uint16Array||(globalThis.Uint16Array=Array);globalThis.Uint8Array||(globalThis.Uint8Array=Array);globalThis.Int32Array||(globalThis.Int32Array=Array);/*! * @pixi/constants - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/constants is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var fA;(function(e){e[e.WEBGL_LEGACY=0]="WEBGL_LEGACY",e[e.WEBGL=1]="WEBGL",e[e.WEBGL2=2]="WEBGL2"})(fA||(fA={}));var ab;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.WEBGL=1]="WEBGL",e[e.CANVAS=2]="CANVAS"})(ab||(ab={}));var rB;(function(e){e[e.COLOR=16384]="COLOR",e[e.DEPTH=256]="DEPTH",e[e.STENCIL=1024]="STENCIL"})(rB||(rB={}));var Jt;(function(e){e[e.NORMAL=0]="NORMAL",e[e.ADD=1]="ADD",e[e.MULTIPLY=2]="MULTIPLY",e[e.SCREEN=3]="SCREEN",e[e.OVERLAY=4]="OVERLAY",e[e.DARKEN=5]="DARKEN",e[e.LIGHTEN=6]="LIGHTEN",e[e.COLOR_DODGE=7]="COLOR_DODGE",e[e.COLOR_BURN=8]="COLOR_BURN",e[e.HARD_LIGHT=9]="HARD_LIGHT",e[e.SOFT_LIGHT=10]="SOFT_LIGHT",e[e.DIFFERENCE=11]="DIFFERENCE",e[e.EXCLUSION=12]="EXCLUSION",e[e.HUE=13]="HUE",e[e.SATURATION=14]="SATURATION",e[e.COLOR=15]="COLOR",e[e.LUMINOSITY=16]="LUMINOSITY",e[e.NORMAL_NPM=17]="NORMAL_NPM",e[e.ADD_NPM=18]="ADD_NPM",e[e.SCREEN_NPM=19]="SCREEN_NPM",e[e.NONE=20]="NONE",e[e.SRC_OVER=0]="SRC_OVER",e[e.SRC_IN=21]="SRC_IN",e[e.SRC_OUT=22]="SRC_OUT",e[e.SRC_ATOP=23]="SRC_ATOP",e[e.DST_OVER=24]="DST_OVER",e[e.DST_IN=25]="DST_IN",e[e.DST_OUT=26]="DST_OUT",e[e.DST_ATOP=27]="DST_ATOP",e[e.ERASE=26]="ERASE",e[e.SUBTRACT=28]="SUBTRACT",e[e.XOR=29]="XOR"})(Jt||(Jt={}));var _r;(function(e){e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(_r||(_r={}));var ft;(function(e){e[e.RGBA=6408]="RGBA",e[e.RGB=6407]="RGB",e[e.RG=33319]="RG",e[e.RED=6403]="RED",e[e.RGBA_INTEGER=36249]="RGBA_INTEGER",e[e.RGB_INTEGER=36248]="RGB_INTEGER",e[e.RG_INTEGER=33320]="RG_INTEGER",e[e.RED_INTEGER=36244]="RED_INTEGER",e[e.ALPHA=6406]="ALPHA",e[e.LUMINANCE=6409]="LUMINANCE",e[e.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",e[e.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",e[e.DEPTH_STENCIL=34041]="DEPTH_STENCIL"})(ft||(ft={}));var Wc;(function(e){e[e.TEXTURE_2D=3553]="TEXTURE_2D",e[e.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",e[e.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",e[e.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",e[e.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",e[e.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",e[e.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",e[e.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",e[e.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z"})(Wc||(Wc={}));var Et;(function(e){e[e.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",e[e.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",e[e.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",e[e.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",e[e.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",e[e.UNSIGNED_INT=5125]="UNSIGNED_INT",e[e.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",e[e.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",e[e.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",e[e.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",e[e.BYTE=5120]="BYTE",e[e.SHORT=5122]="SHORT",e[e.INT=5124]="INT",e[e.FLOAT=5126]="FLOAT",e[e.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",e[e.HALF_FLOAT=36193]="HALF_FLOAT"})(Et||(Et={}));var oB;(function(e){e[e.FLOAT=0]="FLOAT",e[e.INT=1]="INT",e[e.UINT=2]="UINT"})(oB||(oB={}));var jo;(function(e){e[e.NEAREST=0]="NEAREST",e[e.LINEAR=1]="LINEAR"})(jo||(jo={}));var Ia;(function(e){e[e.CLAMP=33071]="CLAMP",e[e.REPEAT=10497]="REPEAT",e[e.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT"})(Ia||(Ia={}));var no;(function(e){e[e.OFF=0]="OFF",e[e.POW2=1]="POW2",e[e.ON=2]="ON",e[e.ON_MANUAL=3]="ON_MANUAL"})(no||(no={}));var Co;(function(e){e[e.NPM=0]="NPM",e[e.UNPACK=1]="UNPACK",e[e.PMA=2]="PMA",e[e.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",e[e.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",e[e.PREMULTIPLY_ALPHA=2]="PREMULTIPLY_ALPHA",e[e.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA"})(Co||(Co={}));var xr;(function(e){e[e.NO=0]="NO",e[e.YES=1]="YES",e[e.AUTO=2]="AUTO",e[e.BLEND=0]="BLEND",e[e.CLEAR=1]="CLEAR",e[e.BLIT=2]="BLIT"})(xr||(xr={}));var aB;(function(e){e[e.AUTO=0]="AUTO",e[e.MANUAL=1]="MANUAL"})(aB||(aB={}));var kC;(function(e){e.LOW="lowp",e.MEDIUM="mediump",e.HIGH="highp"})(kC||(kC={}));var Ci;(function(e){e[e.NONE=0]="NONE",e[e.SCISSOR=1]="SCISSOR",e[e.STENCIL=2]="STENCIL",e[e.SPRITE=3]="SPRITE",e[e.COLOR=4]="COLOR"})(Ci||(Ci={}));var iM;(function(e){e[e.RED=1]="RED",e[e.GREEN=2]="GREEN",e[e.BLUE=4]="BLUE",e[e.ALPHA=8]="ALPHA"})(iM||(iM={}));var fI;(function(e){e[e.NONE=0]="NONE",e[e.LOW=2]="LOW",e[e.MEDIUM=4]="MEDIUM",e[e.HIGH=8]="HIGH"})(fI||(fI={}));var ia;(function(e){e[e.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",e[e.ARRAY_BUFFER=34962]="ARRAY_BUFFER",e[e.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER"})(ia||(ia={}));/*! + */var pA;(function(e){e[e.WEBGL_LEGACY=0]="WEBGL_LEGACY",e[e.WEBGL=1]="WEBGL",e[e.WEBGL2=2]="WEBGL2"})(pA||(pA={}));var sb;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.WEBGL=1]="WEBGL",e[e.CANVAS=2]="CANVAS"})(sb||(sb={}));var aB;(function(e){e[e.COLOR=16384]="COLOR",e[e.DEPTH=256]="DEPTH",e[e.STENCIL=1024]="STENCIL"})(aB||(aB={}));var Jt;(function(e){e[e.NORMAL=0]="NORMAL",e[e.ADD=1]="ADD",e[e.MULTIPLY=2]="MULTIPLY",e[e.SCREEN=3]="SCREEN",e[e.OVERLAY=4]="OVERLAY",e[e.DARKEN=5]="DARKEN",e[e.LIGHTEN=6]="LIGHTEN",e[e.COLOR_DODGE=7]="COLOR_DODGE",e[e.COLOR_BURN=8]="COLOR_BURN",e[e.HARD_LIGHT=9]="HARD_LIGHT",e[e.SOFT_LIGHT=10]="SOFT_LIGHT",e[e.DIFFERENCE=11]="DIFFERENCE",e[e.EXCLUSION=12]="EXCLUSION",e[e.HUE=13]="HUE",e[e.SATURATION=14]="SATURATION",e[e.COLOR=15]="COLOR",e[e.LUMINOSITY=16]="LUMINOSITY",e[e.NORMAL_NPM=17]="NORMAL_NPM",e[e.ADD_NPM=18]="ADD_NPM",e[e.SCREEN_NPM=19]="SCREEN_NPM",e[e.NONE=20]="NONE",e[e.SRC_OVER=0]="SRC_OVER",e[e.SRC_IN=21]="SRC_IN",e[e.SRC_OUT=22]="SRC_OUT",e[e.SRC_ATOP=23]="SRC_ATOP",e[e.DST_OVER=24]="DST_OVER",e[e.DST_IN=25]="DST_IN",e[e.DST_OUT=26]="DST_OUT",e[e.DST_ATOP=27]="DST_ATOP",e[e.ERASE=26]="ERASE",e[e.SUBTRACT=28]="SUBTRACT",e[e.XOR=29]="XOR"})(Jt||(Jt={}));var UC;(function(e){e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(UC||(UC={}));var ft;(function(e){e[e.RGBA=6408]="RGBA",e[e.RGB=6407]="RGB",e[e.RG=33319]="RG",e[e.RED=6403]="RED",e[e.RGBA_INTEGER=36249]="RGBA_INTEGER",e[e.RGB_INTEGER=36248]="RGB_INTEGER",e[e.RG_INTEGER=33320]="RG_INTEGER",e[e.RED_INTEGER=36244]="RED_INTEGER",e[e.ALPHA=6406]="ALPHA",e[e.LUMINANCE=6409]="LUMINANCE",e[e.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",e[e.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",e[e.DEPTH_STENCIL=34041]="DEPTH_STENCIL"})(ft||(ft={}));var Xc;(function(e){e[e.TEXTURE_2D=3553]="TEXTURE_2D",e[e.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",e[e.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",e[e.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",e[e.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",e[e.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",e[e.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",e[e.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",e[e.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z"})(Xc||(Xc={}));var Et;(function(e){e[e.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",e[e.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",e[e.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",e[e.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",e[e.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",e[e.UNSIGNED_INT=5125]="UNSIGNED_INT",e[e.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",e[e.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",e[e.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",e[e.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",e[e.BYTE=5120]="BYTE",e[e.SHORT=5122]="SHORT",e[e.INT=5124]="INT",e[e.FLOAT=5126]="FLOAT",e[e.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",e[e.HALF_FLOAT=36193]="HALF_FLOAT"})(Et||(Et={}));var AB;(function(e){e[e.FLOAT=0]="FLOAT",e[e.INT=1]="INT",e[e.UINT=2]="UINT"})(AB||(AB={}));var ea;(function(e){e[e.NEAREST=0]="NEAREST",e[e.LINEAR=1]="LINEAR"})(ea||(ea={}));var ra;(function(e){e[e.CLAMP=33071]="CLAMP",e[e.REPEAT=10497]="REPEAT",e[e.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT"})(ra||(ra={}));var Co;(function(e){e[e.OFF=0]="OFF",e[e.POW2=1]="POW2",e[e.ON=2]="ON",e[e.ON_MANUAL=3]="ON_MANUAL"})(Co||(Co={}));var oo;(function(e){e[e.NPM=0]="NPM",e[e.UNPACK=1]="UNPACK",e[e.PMA=2]="PMA",e[e.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",e[e.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",e[e.PREMULTIPLY_ALPHA=2]="PREMULTIPLY_ALPHA",e[e.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA"})(oo||(oo={}));var MC;(function(e){e[e.NO=0]="NO",e[e.YES=1]="YES",e[e.AUTO=2]="AUTO",e[e.BLEND=0]="BLEND",e[e.CLEAR=1]="CLEAR",e[e.BLIT=2]="BLIT"})(MC||(MC={}));var sB;(function(e){e[e.AUTO=0]="AUTO",e[e.MANUAL=1]="MANUAL"})(sB||(sB={}));var Yr;(function(e){e.LOW="lowp",e.MEDIUM="mediump",e.HIGH="highp"})(Yr||(Yr={}));var oI;(function(e){e[e.NONE=0]="NONE",e[e.SCISSOR=1]="SCISSOR",e[e.STENCIL=2]="STENCIL",e[e.SPRITE=3]="SPRITE",e[e.COLOR=4]="COLOR"})(oI||(oI={}));var AM;(function(e){e[e.RED=1]="RED",e[e.GREEN=2]="GREEN",e[e.BLUE=4]="BLUE",e[e.ALPHA=8]="ALPHA"})(AM||(AM={}));var pi;(function(e){e[e.NONE=0]="NONE",e[e.LOW=2]="LOW",e[e.MEDIUM=4]="MEDIUM",e[e.HIGH=8]="HIGH"})(pi||(pi={}));var Ca;(function(e){e[e.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",e[e.ARRAY_BUFFER=34962]="ARRAY_BUFFER",e[e.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER"})(Ca||(Ca={}));/*! * @pixi/settings - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/settings is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var Zme={createCanvas:function(e,g){var I=document.createElement("canvas");return I.width=e,I.height=g,I},getWebGLRenderingContext:function(){return WebGLRenderingContext},getNavigator:function(){return navigator},getBaseUrl:function(){var e;return(e=document.baseURI)!==null&&e!==void 0?e:window.location.href},fetch:function(e,g){return fetch(e,g)}},BK=/iPhone/i,Wq=/iPod/i,Xq=/iPad/i,Hq=/\biOS-universal(?:.+)Mac\b/i,SK=/\bAndroid(?:.+)Mobile\b/i,Tq=/Android/i,Rm=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,mR=/Silk/i,DA=/Windows Phone/i,Nq=/\bWindows(?:.+)ARM\b/i,kq=/BlackBerry/i,Yq=/BB10/i,Kq=/Opera Mini/i,Fq=/\b(CriOS|Chrome)(?:.+)Mobile/i,Dq=/Mobile(?:.+)Firefox\b/i,xq=function(e){return typeof e<"u"&&e.platform==="MacIntel"&&typeof e.maxTouchPoints=="number"&&e.maxTouchPoints>1&&typeof MSStream>"u"};function M5e(e){return function(g){return g.test(e)}}function z5e(e){var g={userAgent:"",platform:"",maxTouchPoints:0};!e&&typeof navigator<"u"?g={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof e=="string"?g.userAgent=e:e&&e.userAgent&&(g={userAgent:e.userAgent,platform:e.platform,maxTouchPoints:e.maxTouchPoints||0});var I=g.userAgent,i=I.split("[FBAN");typeof i[1]<"u"&&(I=i[0]),i=I.split("Twitter"),typeof i[1]<"u"&&(I=i[0]);var n=M5e(I),C={apple:{phone:n(BK)&&!n(DA),ipod:n(Wq),tablet:!n(BK)&&(n(Xq)||xq(g))&&!n(DA),universal:n(Hq),device:(n(BK)||n(Wq)||n(Xq)||n(Hq)||xq(g))&&!n(DA)},amazon:{phone:n(Rm),tablet:!n(Rm)&&n(mR),device:n(Rm)||n(mR)},android:{phone:!n(DA)&&n(Rm)||!n(DA)&&n(SK),tablet:!n(DA)&&!n(Rm)&&!n(SK)&&(n(mR)||n(Tq)),device:!n(DA)&&(n(Rm)||n(mR)||n(SK)||n(Tq))||n(/\bokhttp\b/i)},windows:{phone:n(DA),tablet:n(Nq),device:n(DA)||n(Nq)},other:{blackberry:n(kq),blackberry10:n(Yq),opera:n(Kq),firefox:n(Dq),chrome:n(Fq),device:n(kq)||n(Yq)||n(Kq)||n(Dq)||n(Fq)},any:!1,phone:!1,tablet:!1};return C.any=C.apple.device||C.android.device||C.windows.device||C.other.device,C.phone=C.apple.phone||C.android.phone||C.windows.phone,C.tablet=C.apple.tablet||C.android.tablet||C.windows.tablet,C}var Lr=z5e(globalThis.navigator);function P5e(){return!Lr.apple.device}function J5e(e){var g=!0;if(Lr.tablet||Lr.phone){if(Lr.apple.device){var I=navigator.userAgent.match(/OS (\d+)_(\d+)?/);if(I){var i=parseInt(I[1],10);i<11&&(g=!1)}}if(Lr.android.device){var I=navigator.userAgent.match(/Android\s([0-9.]*)/);if(I){var i=parseInt(I[1],10);i<7&&(g=!1)}}}return g?e:4}var Gt={ADAPTER:Zme,MIPMAP_TEXTURES:no.POW2,ANISOTROPIC_LEVEL:0,RESOLUTION:1,FILTER_RESOLUTION:1,FILTER_MULTISAMPLE:fI.NONE,SPRITE_MAX_TEXTURES:J5e(32),SPRITE_BATCH_SIZE:4096,RENDER_OPTIONS:{view:null,width:800,height:600,autoDensity:!1,backgroundColor:0,backgroundAlpha:1,useContextAlpha:!0,clearBeforeRender:!0,antialias:!1,preserveDrawingBuffer:!1},GC_MODE:aB.AUTO,GC_MAX_IDLE:60*60,GC_MAX_CHECK_COUNT:60*10,WRAP_MODE:Ia.CLAMP,SCALE_MODE:jo.LINEAR,PRECISION_VERTEX:kC.HIGH,PRECISION_FRAGMENT:Lr.apple.device?kC.HIGH:kC.MEDIUM,CAN_UPLOAD_SAME_BUFFER:P5e(),CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1},Gme={exports:{}};(function(e){var g=Object.prototype.hasOwnProperty,I="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(I=!1));function n(a,s,A){this.fn=a,this.context=s,this.once=A||!1}function C(a,s,A,l,c){if(typeof A!="function")throw new TypeError("The listener must be a function");var u=new n(A,l||a,c),d=I?I+s:s;return a._events[d]?a._events[d].fn?a._events[d]=[a._events[d],u]:a._events[d].push(u):(a._events[d]=u,a._eventsCount++),a}function r(a,s){--a._eventsCount===0?a._events=new i:delete a._events[s]}function o(){this._events=new i,this._eventsCount=0}o.prototype.eventNames=function(){var s=[],A,l;if(this._eventsCount===0)return s;for(l in A=this._events)g.call(A,l)&&s.push(I?l.slice(1):l);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(A)):s},o.prototype.listeners=function(s){var A=I?I+s:s,l=this._events[A];if(!l)return[];if(l.fn)return[l.fn];for(var c=0,u=l.length,d=new Array(u);c80*I){o=s=e[0],a=A=e[1];for(var d=I;ds&&(s=l),c>A&&(A=c);u=Math.max(s-o,A-a),u=u!==0?32767/u:0}return AB(C,r,I,o,a,u,0),r}function vme(e,g,I,i,n){var C,r;if(n===rM(e,g,I,i)>0)for(C=g;C=g;C-=i)r=Eq(C,e[C],e[C+1],r);return r&&dT(r,r.next)&&(lB(r),r=r.next),r}function _d(e,g){if(!e)return e;g||(g=e);var I=e,i;do if(i=!1,!I.steiner&&(dT(I,I.next)||FI(I.prev,I,I.next)===0)){if(lB(I),I=g=I.prev,I===I.next)break;i=!0}else I=I.next;while(i||I!==g);return g}function AB(e,g,I,i,n,C,r){if(e){!r&&C&&gFe(e,i,n,C);for(var o=e,a,s;e.prev!==e.next;){if(a=e.prev,s=e.next,C?L5e(e,i,n,C):_5e(e)){g.push(a.i/I|0),g.push(e.i/I|0),g.push(s.i/I|0),lB(e),e=s.next,o=s.next;continue}if(e=s,e===o){r?r===1?(e=U5e(_d(e),g,I),AB(e,g,I,i,n,C,2)):r===2&&Q5e(e,g,I,i,n,C):AB(_d(e),g,I,i,n,C,1);break}}}}function _5e(e){var g=e.prev,I=e,i=e.next;if(FI(g,I,i)>=0)return!1;for(var n=g.x,C=I.x,r=i.x,o=g.y,a=I.y,s=i.y,A=nC?n>r?n:r:C>r?C:r,u=o>a?o>s?o:s:a>s?a:s,d=i.next;d!==g;){if(d.x>=A&&d.x<=c&&d.y>=l&&d.y<=u&&tp(n,o,C,a,r,s,d.x,d.y)&&FI(d.prev,d,d.next)>=0)return!1;d=d.next}return!0}function L5e(e,g,I,i){var n=e.prev,C=e,r=e.next;if(FI(n,C,r)>=0)return!1;for(var o=n.x,a=C.x,s=r.x,A=n.y,l=C.y,c=r.y,u=oa?o>s?o:s:a>s?a:s,m=A>l?A>c?A:c:l>c?l:c,f=nM(u,d,g,I,i),b=nM(h,m,g,I,i),p=e.prevZ,y=e.nextZ;p&&p.z>=f&&y&&y.z<=b;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=m&&p!==n&&p!==r&&tp(o,A,a,l,s,c,p.x,p.y)&&FI(p.prev,p,p.next)>=0||(p=p.prevZ,y.x>=u&&y.x<=h&&y.y>=d&&y.y<=m&&y!==n&&y!==r&&tp(o,A,a,l,s,c,y.x,y.y)&&FI(y.prev,y,y.next)>=0))return!1;y=y.nextZ}for(;p&&p.z>=f;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=m&&p!==n&&p!==r&&tp(o,A,a,l,s,c,p.x,p.y)&&FI(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;y&&y.z<=b;){if(y.x>=u&&y.x<=h&&y.y>=d&&y.y<=m&&y!==n&&y!==r&&tp(o,A,a,l,s,c,y.x,y.y)&&FI(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function U5e(e,g,I){var i=e;do{var n=i.prev,C=i.next.next;!dT(n,C)&&Bme(n,i,i.next,C)&&sB(n,C)&&sB(C,n)&&(g.push(n.i/I|0),g.push(i.i/I|0),g.push(C.i/I|0),lB(i),lB(i.next),i=e=C),i=i.next}while(i!==e);return _d(i)}function Q5e(e,g,I,i,n,C){var r=e;do{for(var o=r.next.next;o!==r.prev;){if(r.i!==o.i&&nFe(r,o)){var a=Sme(r,o);r=_d(r,r.next),a=_d(a,a.next),AB(r,g,I,i,n,C,0),AB(a,g,I,i,n,C,0);return}o=o.next}r=r.next}while(r!==e)}function j5e(e,g,I,i){var n=[],C,r,o,a,s;for(C=0,r=g.length;C=I.next.y&&I.next.y!==I.y){var o=I.x+(n-I.y)*(I.next.x-I.x)/(I.next.y-I.y);if(o<=i&&o>C&&(C=o,r=I.x=I.x&&I.x>=s&&i!==I.x&&tp(nr.x||I.x===r.x&&tFe(r,I)))&&(r=I,l=c)),I=I.next;while(I!==a);return r}function tFe(e,g){return FI(e.prev,e,g.prev)<0&&FI(g.next,e,e.next)<0}function gFe(e,g,I,i){var n=e;do n.z===0&&(n.z=nM(n.x,n.y,g,I,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==e);n.prevZ.nextZ=null,n.prevZ=null,IFe(n)}function IFe(e){var g,I,i,n,C,r,o,a,s=1;do{for(I=e,e=null,C=null,r=0;I;){for(r++,i=I,o=0,g=0;g0||a>0&&i;)o!==0&&(a===0||!i||I.z<=i.z)?(n=I,I=I.nextZ,o--):(n=i,i=i.nextZ,a--),C?C.nextZ=n:e=n,n.prevZ=C,C=n;I=i}C.nextZ=null,s*=2}while(r>1);return e}function nM(e,g,I,i,n){return e=(e-I)*n|0,g=(g-i)*n|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,g=(g|g<<8)&16711935,g=(g|g<<4)&252645135,g=(g|g<<2)&858993459,g=(g|g<<1)&1431655765,e|g<<1}function iFe(e){var g=e,I=e;do(g.x=(e-r)*(C-o)&&(e-r)*(i-o)>=(I-r)*(g-o)&&(I-r)*(C-o)>=(n-r)*(i-o)}function nFe(e,g){return e.next.i!==g.i&&e.prev.i!==g.i&&!CFe(e,g)&&(sB(e,g)&&sB(g,e)&&rFe(e,g)&&(FI(e.prev,e,g.prev)||FI(e,g.prev,g))||dT(e,g)&&FI(e.prev,e,e.next)>0&&FI(g.prev,g,g.next)>0)}function FI(e,g,I){return(g.y-e.y)*(I.x-g.x)-(g.x-e.x)*(I.y-g.y)}function dT(e,g){return e.x===g.x&&e.y===g.y}function Bme(e,g,I,i){var n=pR(FI(e,g,I)),C=pR(FI(e,g,i)),r=pR(FI(I,i,e)),o=pR(FI(I,i,g));return!!(n!==C&&r!==o||n===0&&fR(e,I,g)||C===0&&fR(e,i,g)||r===0&&fR(I,e,i)||o===0&&fR(I,g,i))}function fR(e,g,I){return g.x<=Math.max(e.x,I.x)&&g.x>=Math.min(e.x,I.x)&&g.y<=Math.max(e.y,I.y)&&g.y>=Math.min(e.y,I.y)}function pR(e){return e>0?1:e<0?-1:0}function CFe(e,g){var I=e;do{if(I.i!==e.i&&I.next.i!==e.i&&I.i!==g.i&&I.next.i!==g.i&&Bme(I,I.next,e,g))return!0;I=I.next}while(I!==e);return!1}function sB(e,g){return FI(e.prev,e,e.next)<0?FI(e,g,e.next)>=0&&FI(e,e.prev,g)>=0:FI(e,g,e.prev)<0||FI(e,e.next,g)<0}function rFe(e,g){var I=e,i=!1,n=(e.x+g.x)/2,C=(e.y+g.y)/2;do I.y>C!=I.next.y>C&&I.next.y!==I.y&&n<(I.next.x-I.x)*(C-I.y)/(I.next.y-I.y)+I.x&&(i=!i),I=I.next;while(I!==e);return i}function Sme(e,g){var I=new CM(e.i,e.x,e.y),i=new CM(g.i,g.x,g.y),n=e.next,C=g.prev;return e.next=g,g.prev=e,I.next=n,n.prev=I,i.next=I,I.prev=i,C.next=i,i.prev=C,i}function Eq(e,g,I,i){var n=new CM(e,g,I);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function lB(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function CM(e,g,I){this.i=e,this.x=g,this.y=I,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}uT.deviation=function(e,g,I,i){var n=g&&g.length,C=n?g[0]*I:e.length,r=Math.abs(rM(e,0,C,I));if(n)for(var o=0,a=g.length;o0&&(i+=e[n-1].length,I.holes.push(i))}return I};var oFe=LL.exports;const UL=Qc(oFe);var f9={exports:{}};/*! https://mths.be/punycode v1.4.1 by @mathias */f9.exports;(function(e,g){(function(I){var i=g&&!g.nodeType&&g,n=e&&!e.nodeType&&e,C=typeof yI=="object"&&yI;(C.global===C||C.window===C||C.self===C)&&(I=C);var r,o=2147483647,a=36,s=1,A=26,l=38,c=700,u=72,d=128,h="-",m=/^xn--/,f=/[^\x20-\x7E]/,b=/[\x2E\u3002\uFF0E\uFF61]/g,p={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},y=a-s,Z=Math.floor,B=String.fromCharCode,G;function v(P){throw new RangeError(p[P])}function w(P,ge){for(var q=P.length,$=[];q--;)$[q]=ge(P[q]);return $}function R(P,ge){var q=P.split("@"),$="";q.length>1&&($=q[0]+"@",P=q[1]),P=P.replace(b,".");var j=P.split("."),te=w(j,ge).join(".");return $+te}function S(P){for(var ge=[],q=0,$=P.length,j,te;q<$;)j=P.charCodeAt(q++),j>=55296&&j<=56319&&q<$?(te=P.charCodeAt(q++),(te&64512)==56320?ge.push(((j&1023)<<10)+(te&1023)+65536):(ge.push(j),q--)):ge.push(j);return ge}function X(P){return w(P,function(ge){var q="";return ge>65535&&(ge-=65536,q+=B(ge>>>10&1023|55296),ge=56320|ge&1023),q+=B(ge),q}).join("")}function W(P){return P-48<10?P-22:P-65<26?P-65:P-97<26?P-97:a}function V(P,ge){return P+22+75*(P<26)-((ge!=0)<<5)}function H(P,ge,q){var $=0;for(P=q?Z(P/c):P>>1,P+=Z(P/ge);P>y*A>>1;$+=a)P=Z(P/y);return Z($+(y+1)*P/(P+l))}function Y(P){var ge=[],q=P.length,$,j=0,te=d,Q=u,ie,he,ne,be,pe,ve,We,Be,Je;for(ie=P.lastIndexOf(h),ie<0&&(ie=0),he=0;he=128&&v("not-basic"),ge.push(P.charCodeAt(he));for(ne=ie>0?ie+1:0;ne=q&&v("invalid-input"),We=W(P.charCodeAt(ne++)),(We>=a||We>Z((o-j)/pe))&&v("overflow"),j+=We*pe,Be=ve<=Q?s:ve>=Q+A?A:ve-Q,!(WeZ(o/Je)&&v("overflow"),pe*=Je;$=ge.length+1,Q=H(j-be,$,be==0),Z(j/$)>o-te&&v("overflow"),te+=Z(j/$),j%=$,ge.splice(j++,0,te)}return X(ge)}function K(P){var ge,q,$,j,te,Q,ie,he,ne,be,pe,ve=[],We,Be,Je,Pe;for(P=S(P),We=P.length,ge=d,q=0,te=u,Q=0;Q=ge&&peZ((o-q)/Be)&&v("overflow"),q+=(ie-ge)*Be,ge=ie,Q=0;Qo&&v("overflow"),pe==ge){for(he=q,ne=a;be=ne<=te?s:ne>=te+A?A:ne-te,!(he"u"||!zi?fg:zi(Uint8Array),wd={"%AggregateError%":typeof AggregateError>"u"?fg:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?fg:ArrayBuffer,"%ArrayIteratorPrototype%":Vm&&zi?zi([][Symbol.iterator]()):fg,"%AsyncFromSyncIteratorPrototype%":fg,"%AsyncFunction%":hf,"%AsyncGenerator%":hf,"%AsyncGeneratorFunction%":hf,"%AsyncIteratorPrototype%":hf,"%Atomics%":typeof Atomics>"u"?fg:Atomics,"%BigInt%":typeof BigInt>"u"?fg:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?fg:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?fg:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?fg:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?fg:Float32Array,"%Float64Array%":typeof Float64Array>"u"?fg:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?fg:FinalizationRegistry,"%Function%":wme,"%GeneratorFunction%":hf,"%Int8Array%":typeof Int8Array>"u"?fg:Int8Array,"%Int16Array%":typeof Int16Array>"u"?fg:Int16Array,"%Int32Array%":typeof Int32Array>"u"?fg:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Vm&&zi?zi(zi([][Symbol.iterator]())):fg,"%JSON%":typeof JSON=="object"?JSON:fg,"%Map%":typeof Map>"u"?fg:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Vm||!zi?fg:zi(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?fg:Promise,"%Proxy%":typeof Proxy>"u"?fg:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?fg:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?fg:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Vm||!zi?fg:zi(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?fg:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Vm&&zi?zi(""[Symbol.iterator]()):fg,"%Symbol%":Vm?Symbol:fg,"%SyntaxError%":Ab,"%ThrowTypeError%":wFe,"%TypedArray%":VFe,"%TypeError%":Zp,"%Uint8Array%":typeof Uint8Array>"u"?fg:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?fg:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?fg:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?fg:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?fg:WeakMap,"%WeakRef%":typeof WeakRef>"u"?fg:WeakRef,"%WeakSet%":typeof WeakSet>"u"?fg:WeakSet};if(zi)try{null.error}catch(e){var WFe=zi(zi(e));wd["%Error.prototype%"]=WFe}var XFe=function e(g){var I;if(g==="%AsyncFunction%")I=wK("async function () {}");else if(g==="%GeneratorFunction%")I=wK("function* () {}");else if(g==="%AsyncGeneratorFunction%")I=wK("async function* () {}");else if(g==="%AsyncGenerator%"){var i=e("%AsyncGeneratorFunction%");i&&(I=i.prototype)}else if(g==="%AsyncIteratorPrototype%"){var n=e("%AsyncGenerator%");n&&zi&&(I=zi(n.prototype))}return wd[g]=I,I},Jq={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},RS=QL,p9=SFe,HFe=RS.call(Function.call,Array.prototype.concat),TFe=RS.call(Function.apply,Array.prototype.splice),Oq=RS.call(Function.call,String.prototype.replace),b9=RS.call(Function.call,String.prototype.slice),NFe=RS.call(Function.call,RegExp.prototype.exec),kFe=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,YFe=/\\(\\)?/g,KFe=function(g){var I=b9(g,0,1),i=b9(g,-1);if(I==="%"&&i!=="%")throw new Ab("invalid intrinsic syntax, expected closing `%`");if(i==="%"&&I!=="%")throw new Ab("invalid intrinsic syntax, expected opening `%`");var n=[];return Oq(g,kFe,function(C,r,o,a){n[n.length]=o?Oq(a,YFe,"$1"):r||C}),n},FFe=function(g,I){var i=g,n;if(p9(Jq,i)&&(n=Jq[i],i="%"+n[0]+"%"),p9(wd,i)){var C=wd[i];if(C===hf&&(C=XFe(i)),typeof C>"u"&&!I)throw new Zp("intrinsic "+g+" exists, but is not available. Please file an issue!");return{alias:n,name:i,value:C}}throw new Ab("intrinsic "+g+" does not exist!")},Oh=function(g,I){if(typeof g!="string"||g.length===0)throw new Zp("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof I!="boolean")throw new Zp('"allowMissing" argument must be a boolean');if(NFe(/^%?[^%]*%?$/,g)===null)throw new Ab("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var i=KFe(g),n=i.length>0?i[0]:"",C=FFe("%"+n+"%",I),r=C.name,o=C.value,a=!1,s=C.alias;s&&(n=s[0],TFe(i,HFe([0,1],s)));for(var A=1,l=!0;A=i.length){var h=Sd(o,c);l=!!h,l&&"get"in h&&!("originalValue"in h.get)?o=h.get:o=o[c]}else l=p9(o,c),o=o[c];l&&!a&&(wd[r]=o)}}return o},Rme={exports:{}},DFe=Oh,oM=DFe("%Object.defineProperty%",!0),aM=function(){if(oM)try{return oM({},"a",{value:1}),!0}catch{return!1}return!1};aM.hasArrayLengthDefineBug=function(){if(!aM())return null;try{return oM([],"length",{value:1}).length!==1}catch{return!0}};var Vme=aM,xFe=Oh,V1=xFe("%Object.getOwnPropertyDescriptor%",!0);if(V1)try{V1([],"length")}catch{V1=null}var Wme=V1,EFe=Vme(),jL=Oh,kG=EFe&&jL("%Object.defineProperty%",!0);if(kG)try{kG({},"a",{value:1})}catch{kG=!1}var MFe=jL("%SyntaxError%"),Wm=jL("%TypeError%"),_q=Wme,zFe=function(g,I,i){if(!g||typeof g!="object"&&typeof g!="function")throw new Wm("`obj` must be an object or a function`");if(typeof I!="string"&&typeof I!="symbol")throw new Wm("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new Wm("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new Wm("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new Wm("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new Wm("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,C=arguments.length>4?arguments[4]:null,r=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,a=!!_q&&_q(g,I);if(kG)kG(g,I,{configurable:r===null&&a?a.configurable:!r,enumerable:n===null&&a?a.enumerable:!n,value:i,writable:C===null&&a?a.writable:!C});else if(o||!n&&!C&&!r)g[I]=i;else throw new MFe("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},Xme=Oh,Lq=zFe,PFe=Vme(),Uq=Wme,Qq=Xme("%TypeError%"),JFe=Xme("%Math.floor%"),OFe=function(g,I){if(typeof g!="function")throw new Qq("`fn` is not a function");if(typeof I!="number"||I<0||I>4294967295||JFe(I)!==I)throw new Qq("`length` must be a positive 32-bit integer");var i=arguments.length>2&&!!arguments[2],n=!0,C=!0;if("length"in g&&Uq){var r=Uq(g,"length");r&&!r.configurable&&(n=!1),r&&!r.writable&&(C=!1)}return(n||C||!i)&&(PFe?Lq(g,"length",I,!0,!0):Lq(g,"length",I)),g};(function(e){var g=QL,I=Oh,i=OFe,n=I("%TypeError%"),C=I("%Function.prototype.apply%"),r=I("%Function.prototype.call%"),o=I("%Reflect.apply%",!0)||g.call(r,C),a=I("%Object.defineProperty%",!0),s=I("%Math.max%");if(a)try{a({},"a",{value:1})}catch{a=null}e.exports=function(c){if(typeof c!="function")throw new n("a function is required");var u=o(g,r,arguments);return i(u,1+s(0,c.length-(arguments.length-1)),!0)};var A=function(){return o(g,C,arguments)};a?a(e.exports,"apply",{value:A}):e.exports.apply=A})(Rme);var _Fe=Rme.exports,Hme=Oh,Tme=_Fe,LFe=Tme(Hme("String.prototype.indexOf")),UFe=function(g,I){var i=Hme(g,!!I);return typeof i=="function"&&LFe(g,".prototype.")>-1?Tme(i):i};const Nme={},QFe=Object.freeze(Object.defineProperty({__proto__:null,default:Nme},Symbol.toStringTag,{value:"Module"})),jFe=q_(QFe);var $L=typeof Map=="function"&&Map.prototype,VK=Object.getOwnPropertyDescriptor&&$L?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,y9=$L&&VK&&typeof VK.get=="function"?VK.get:null,jq=$L&&Map.prototype.forEach,qL=typeof Set=="function"&&Set.prototype,WK=Object.getOwnPropertyDescriptor&&qL?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,Z9=qL&&WK&&typeof WK.get=="function"?WK.get:null,$q=qL&&Set.prototype.forEach,$Fe=typeof WeakMap=="function"&&WeakMap.prototype,YG=$Fe?WeakMap.prototype.has:null,qFe=typeof WeakSet=="function"&&WeakSet.prototype,KG=qFe?WeakSet.prototype.has:null,eDe=typeof WeakRef=="function"&&WeakRef.prototype,qq=eDe?WeakRef.prototype.deref:null,tDe=Boolean.prototype.valueOf,gDe=Object.prototype.toString,IDe=Function.prototype.toString,iDe=String.prototype.match,eU=String.prototype.slice,Ac=String.prototype.replace,nDe=String.prototype.toUpperCase,eee=String.prototype.toLowerCase,kme=RegExp.prototype.test,tee=Array.prototype.concat,Fa=Array.prototype.join,CDe=Array.prototype.slice,gee=Math.floor,AM=typeof BigInt=="function"?BigInt.prototype.valueOf:null,XK=Object.getOwnPropertySymbols,sM=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,sb=typeof Symbol=="function"&&typeof Symbol.iterator=="object",Fn=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===sb||"symbol")?Symbol.toStringTag:null,Yme=Object.prototype.propertyIsEnumerable,Iee=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function iee(e,g){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||kme.call(/e/,g))return g;var I=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var i=e<0?-gee(-e):gee(e);if(i!==e){var n=String(i),C=eU.call(g,n.length+1);return Ac.call(n,I,"$&_")+"."+Ac.call(Ac.call(C,/([0-9]{3})/g,"$&_"),/_$/,"")}}return Ac.call(g,I,"$&_")}var lM=jFe,nee=lM.custom,Cee=Fme(nee)?nee:null,rDe=function e(g,I,i,n){var C=I||{};if(zl(C,"quoteStyle")&&C.quoteStyle!=="single"&&C.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(zl(C,"maxStringLength")&&(typeof C.maxStringLength=="number"?C.maxStringLength<0&&C.maxStringLength!==1/0:C.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var r=zl(C,"customInspect")?C.customInspect:!0;if(typeof r!="boolean"&&r!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(zl(C,"indent")&&C.indent!==null&&C.indent!==" "&&!(parseInt(C.indent,10)===C.indent&&C.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(zl(C,"numericSeparator")&&typeof C.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var o=C.numericSeparator;if(typeof g>"u")return"undefined";if(g===null)return"null";if(typeof g=="boolean")return g?"true":"false";if(typeof g=="string")return xme(g,C);if(typeof g=="number"){if(g===0)return 1/0/g>0?"0":"-0";var a=String(g);return o?iee(g,a):a}if(typeof g=="bigint"){var s=String(g)+"n";return o?iee(g,s):s}var A=typeof C.depth>"u"?5:C.depth;if(typeof i>"u"&&(i=0),i>=A&&A>0&&typeof g=="object")return cM(g)?"[Array]":"[Object]";var l=BDe(C,i);if(typeof n>"u")n=[];else if(Dme(n,g)>=0)return"[Circular]";function c(W,V,H){if(V&&(n=CDe.call(n),n.push(V)),H){var Y={depth:C.depth};return zl(C,"quoteStyle")&&(Y.quoteStyle=C.quoteStyle),e(W,Y,i+1,n)}return e(W,C,i+1,n)}if(typeof g=="function"&&!ree(g)){var u=hDe(g),d=bR(g,c);return"[Function"+(u?": "+u:" (anonymous)")+"]"+(d.length>0?" { "+Fa.call(d,", ")+" }":"")}if(Fme(g)){var h=sb?Ac.call(String(g),/^(Symbol\(.*\))_[^)]*$/,"$1"):sM.call(g);return typeof g=="object"&&!sb?Xy(h):h}if(ZDe(g)){for(var m="<"+eee.call(String(g.nodeName)),f=g.attributes||[],b=0;b",m}if(cM(g)){if(g.length===0)return"[]";var p=bR(g,c);return l&&!vDe(p)?"["+uM(p,l)+"]":"[ "+Fa.call(p,", ")+" ]"}if(ADe(g)){var y=bR(g,c);return!("cause"in Error.prototype)&&"cause"in g&&!Yme.call(g,"cause")?"{ ["+String(g)+"] "+Fa.call(tee.call("[cause]: "+c(g.cause),y),", ")+" }":y.length===0?"["+String(g)+"]":"{ ["+String(g)+"] "+Fa.call(y,", ")+" }"}if(typeof g=="object"&&r){if(Cee&&typeof g[Cee]=="function"&&lM)return lM(g,{depth:A-i});if(r!=="symbol"&&typeof g.inspect=="function")return g.inspect()}if(mDe(g)){var Z=[];return jq&&jq.call(g,function(W,V){Z.push(c(V,g,!0)+" => "+c(W,g))}),oee("Map",y9.call(g),Z,l)}if(bDe(g)){var B=[];return $q&&$q.call(g,function(W){B.push(c(W,g))}),oee("Set",Z9.call(g),B,l)}if(fDe(g))return HK("WeakMap");if(yDe(g))return HK("WeakSet");if(pDe(g))return HK("WeakRef");if(lDe(g))return Xy(c(Number(g)));if(uDe(g))return Xy(c(AM.call(g)));if(cDe(g))return Xy(tDe.call(g));if(sDe(g))return Xy(c(String(g)));if(typeof window<"u"&&g===window)return"{ [object Window] }";if(g===yI)return"{ [object globalThis] }";if(!aDe(g)&&!ree(g)){var G=bR(g,c),v=Iee?Iee(g)===Object.prototype:g instanceof Object||g.constructor===Object,w=g instanceof Object?"":"null prototype",R=!v&&Fn&&Object(g)===g&&Fn in g?eU.call(eu(g),8,-1):w?"Object":"",S=v||typeof g.constructor!="function"?"":g.constructor.name?g.constructor.name+" ":"",X=S+(R||w?"["+Fa.call(tee.call([],R||[],w||[]),": ")+"] ":"");return G.length===0?X+"{}":l?X+"{"+uM(G,l)+"}":X+"{ "+Fa.call(G,", ")+" }"}return String(g)};function Kme(e,g,I){var i=(I.quoteStyle||g)==="double"?'"':"'";return i+e+i}function oDe(e){return Ac.call(String(e),/"/g,""")}function cM(e){return eu(e)==="[object Array]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function aDe(e){return eu(e)==="[object Date]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function ree(e){return eu(e)==="[object RegExp]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function ADe(e){return eu(e)==="[object Error]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function sDe(e){return eu(e)==="[object String]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function lDe(e){return eu(e)==="[object Number]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function cDe(e){return eu(e)==="[object Boolean]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function Fme(e){if(sb)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!sM)return!1;try{return sM.call(e),!0}catch{}return!1}function uDe(e){if(!e||typeof e!="object"||!AM)return!1;try{return AM.call(e),!0}catch{}return!1}var dDe=Object.prototype.hasOwnProperty||function(e){return e in this};function zl(e,g){return dDe.call(e,g)}function eu(e){return gDe.call(e)}function hDe(e){if(e.name)return e.name;var g=iDe.call(IDe.call(e),/^function\s*([\w$]+)/);return g?g[1]:null}function Dme(e,g){if(e.indexOf)return e.indexOf(g);for(var I=0,i=e.length;Ig.maxStringLength){var I=e.length-g.maxStringLength,i="... "+I+" more character"+(I>1?"s":"");return xme(eU.call(e,0,g.maxStringLength),g)+i}var n=Ac.call(Ac.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,GDe);return Kme(n,"single",g)}function GDe(e){var g=e.charCodeAt(0),I={8:"b",9:"t",10:"n",12:"f",13:"r"}[g];return I?"\\"+I:"\\x"+(g<16?"0":"")+nDe.call(g.toString(16))}function Xy(e){return"Object("+e+")"}function HK(e){return e+" { ? }"}function oee(e,g,I,i){var n=i?uM(I,i):Fa.call(I,", ");return e+" ("+g+") {"+n+"}"}function vDe(e){for(var g=0;g=0)return!1;return!0}function BDe(e,g){var I;if(e.indent===" ")I=" ";else if(typeof e.indent=="number"&&e.indent>0)I=Fa.call(Array(e.indent+1)," ");else return null;return{base:I,prev:Fa.call(Array(g+1),I)}}function uM(e,g){if(e.length===0)return"";var I=` -`+g.prev+g.base;return I+Fa.call(e,","+I)+` -`+g.prev}function bR(e,g){var I=cM(e),i=[];if(I){i.length=e.length;for(var n=0;n1;){var I=g.pop(),i=I.obj[I.prop];if(gd(i)){for(var n=[],C=0;C=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||C===xDe.RFC1738&&(s===40||s===41)){o+=r.charAt(a);continue}if(s<128){o=o+wa[s];continue}if(s<2048){o=o+(wa[192|s>>6]+wa[128|s&63]);continue}if(s<55296||s>=57344){o=o+(wa[224|s>>12]+wa[128|s>>6&63]+wa[128|s&63]);continue}a+=1,s=65536+((s&1023)<<10|r.charCodeAt(a)&1023),o+=wa[240|s>>18]+wa[128|s>>12&63]+wa[128|s>>6&63]+wa[128|s&63]}return o},ODe=function(g){for(var I=[{obj:{o:g},prop:"o"}],i=[],n=0;n"u"&&(p=0)}if(typeof a=="function"?f=a(I,f):f instanceof Date?f=l(f):i==="comma"&&gs(f)&&(f=W1.maybeMap(f,function(Y){return Y instanceof Date?l(Y):Y})),f===null){if(C)return o&&!d?o(I,Nn.encoder,h,"key",c):I;f=""}if(exe(f)||W1.isBuffer(f)){if(o){var B=d?I:o(I,Nn.encoder,h,"key",c);return[u(B)+"="+u(o(f,Nn.encoder,h,"value",c))]}return[u(I)+"="+u(String(f))]}var G=[];if(typeof f>"u")return G;var v;if(i==="comma"&&gs(f))d&&o&&(f=W1.maybeMap(f,o)),v=[{value:f.length>0?f.join(",")||null:void 0}];else if(gs(a))v=a;else{var w=Object.keys(f);v=s?w.sort(s):w}for(var R=n&&gs(f)&&f.length===1?I+"[]":I,S=0;S"u"?Nn.allowDots:!!g.allowDots,charset:I,charsetSentinel:typeof g.charsetSentinel=="boolean"?g.charsetSentinel:Nn.charsetSentinel,delimiter:typeof g.delimiter>"u"?Nn.delimiter:g.delimiter,encode:typeof g.encode=="boolean"?g.encode:Nn.encode,encoder:typeof g.encoder=="function"?g.encoder:Nn.encoder,encodeValuesOnly:typeof g.encodeValuesOnly=="boolean"?g.encodeValuesOnly:Nn.encodeValuesOnly,filter:C,format:i,formatter:n,serializeDate:typeof g.serializeDate=="function"?g.serializeDate:Nn.serializeDate,skipNulls:typeof g.skipNulls=="boolean"?g.skipNulls:Nn.skipNulls,sort:typeof g.sort=="function"?g.sort:null,strictNullHandling:typeof g.strictNullHandling=="boolean"?g.strictNullHandling:Nn.strictNullHandling}},Ixe=function(e,g){var I=e,i=gxe(g),n,C;typeof i.filter=="function"?(C=i.filter,I=C("",I)):gs(i.filter)&&(C=i.filter,n=C);var r=[];if(typeof I!="object"||I===null)return"";var o;g&&g.arrayFormat in aee?o=g.arrayFormat:g&&"indices"in g?o=g.indices?"indices":"repeat":o="indices";var a=aee[o];if(g&&"commaRoundTrip"in g&&typeof g.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var s=a==="comma"&&g&&g.commaRoundTrip;n||(n=Object.keys(I)),i.sort&&n.sort(i.sort);for(var A=zme(),l=0;l0?d+u:""},lb=Mme,dM=Object.prototype.hasOwnProperty,ixe=Array.isArray,Mi={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:lb.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},nxe=function(e){return e.replace(/&#(\d+);/g,function(g,I){return String.fromCharCode(parseInt(I,10))})},Jme=function(e,g){return e&&typeof e=="string"&&g.comma&&e.indexOf(",")>-1?e.split(","):e},Cxe="utf8=%26%2310003%3B",rxe="utf8=%E2%9C%93",oxe=function(g,I){var i={__proto__:null},n=I.ignoreQueryPrefix?g.replace(/^\?/,""):g,C=I.parameterLimit===1/0?void 0:I.parameterLimit,r=n.split(I.delimiter,C),o=-1,a,s=I.charset;if(I.charsetSentinel)for(a=0;a-1&&(d=ixe(d)?[d]:d),dM.call(i,u)?i[u]=lb.combine(i[u],d):i[u]=d}return i},axe=function(e,g,I,i){for(var n=i?g:Jme(g,I),C=e.length-1;C>=0;--C){var r,o=e[C];if(o==="[]"&&I.parseArrays)r=[].concat(n);else{r=I.plainObjects?Object.create(null):{};var a=o.charAt(0)==="["&&o.charAt(o.length-1)==="]"?o.slice(1,-1):o,s=parseInt(a,10);!I.parseArrays&&a===""?r={0:n}:!isNaN(s)&&o!==a&&String(s)===a&&s>=0&&I.parseArrays&&s<=I.arrayLimit?(r=[],r[s]=n):a!=="__proto__"&&(r[a]=n)}n=r}return n},Axe=function(g,I,i,n){if(g){var C=i.allowDots?g.replace(/\.([^.[]+)/g,"[$1]"):g,r=/(\[[^[\]]*])/,o=/(\[[^[\]]*])/g,a=i.depth>0&&r.exec(C),s=a?C.slice(0,a.index):C,A=[];if(s){if(!i.plainObjects&&dM.call(Object.prototype,s)&&!i.allowPrototypes)return;A.push(s)}for(var l=0;i.depth>0&&(a=o.exec(C))!==null&&l"u"?Mi.charset:g.charset;return{allowDots:typeof g.allowDots>"u"?Mi.allowDots:!!g.allowDots,allowPrototypes:typeof g.allowPrototypes=="boolean"?g.allowPrototypes:Mi.allowPrototypes,allowSparse:typeof g.allowSparse=="boolean"?g.allowSparse:Mi.allowSparse,arrayLimit:typeof g.arrayLimit=="number"?g.arrayLimit:Mi.arrayLimit,charset:I,charsetSentinel:typeof g.charsetSentinel=="boolean"?g.charsetSentinel:Mi.charsetSentinel,comma:typeof g.comma=="boolean"?g.comma:Mi.comma,decoder:typeof g.decoder=="function"?g.decoder:Mi.decoder,delimiter:typeof g.delimiter=="string"||lb.isRegExp(g.delimiter)?g.delimiter:Mi.delimiter,depth:typeof g.depth=="number"||g.depth===!1?+g.depth:Mi.depth,ignoreQueryPrefix:g.ignoreQueryPrefix===!0,interpretNumericEntities:typeof g.interpretNumericEntities=="boolean"?g.interpretNumericEntities:Mi.interpretNumericEntities,parameterLimit:typeof g.parameterLimit=="number"?g.parameterLimit:Mi.parameterLimit,parseArrays:g.parseArrays!==!1,plainObjects:typeof g.plainObjects=="boolean"?g.plainObjects:Mi.plainObjects,strictNullHandling:typeof g.strictNullHandling=="boolean"?g.strictNullHandling:Mi.strictNullHandling}},lxe=function(e,g){var I=sxe(g);if(e===""||e===null||typeof e>"u")return I.plainObjects?Object.create(null):{};for(var i=typeof e=="string"?oxe(e,I):e,n=I.plainObjects?Object.create(null):{},C=Object.keys(i),r=0;r",'"',"`"," ","\r",` -`," "],Zxe=["{","}","|","\\","^","`"].concat(yxe),hM=["'"].concat(Zxe),see=["%","/","?",";","#"].concat(hM),lee=["/","?","#"],Gxe=255,cee=/^[+a-z0-9A-Z_-]{0,63}$/,vxe=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Bxe={javascript:!0,"javascript:":!0},mM={javascript:!0,"javascript:":!0},Gp={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},fM=hxe;function hT(e,g,I){if(e&&typeof e=="object"&&e instanceof na)return e;var i=new na;return i.parse(e,g,I),i}na.prototype.parse=function(e,g,I){if(typeof e!="string")throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),n=i!==-1&&i127?Z+="x":Z+=y[B];if(!Z.match(cee)){var v=b.slice(0,u),w=b.slice(u+1),R=y.match(vxe);R&&(v.push(R[1]),w.unshift(R[2])),w.length&&(o="/"+w.join(".")+o),this.hostname=v.join(".");break}}}this.hostname.length>Gxe?this.hostname="":this.hostname=this.hostname.toLowerCase(),f||(this.hostname=mxe.toASCII(this.hostname));var S=this.port?":"+this.port:"",X=this.hostname||"";this.host=X+S,this.href+=this.host,f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),o[0]!=="/"&&(o="/"+o))}if(!Bxe[A])for(var u=0,p=hM.length;u0?I.host.split("@"):!1;Z&&(I.auth=Z.shift(),I.hostname=Z.shift(),I.host=I.hostname)}return I.search=e.search,I.query=e.query,(I.pathname!==null||I.search!==null)&&(I.path=(I.pathname?I.pathname:"")+(I.search?I.search:"")),I.href=I.format(),I}if(!b.length)return I.pathname=null,I.search?I.path="/"+I.search:I.path=null,I.href=I.format(),I;for(var B=b.slice(-1)[0],G=(I.host||e.host||b.length>1)&&(B==="."||B==="..")||B==="",v=0,w=b.length;w>=0;w--)B=b[w],B==="."?b.splice(w,1):B===".."?(b.splice(w,1),v++):v&&(b.splice(w,1),v--);if(!m&&!f)for(;v--;v)b.unshift("..");m&&b[0]!==""&&(!b[0]||b[0].charAt(0)!=="/")&&b.unshift(""),G&&b.join("/").substr(-1)!=="/"&&b.push("");var R=b[0]===""||b[0]&&b[0].charAt(0)==="/";if(y){I.hostname=R?"":b.length?b.shift():"",I.host=I.hostname;var Z=I.host&&I.host.indexOf("@")>0?I.host.split("@"):!1;Z&&(I.auth=Z.shift(),I.hostname=Z.shift(),I.host=I.hostname)}return m=m||I.host&&b.length,m&&!R&&b.unshift(""),b.length>0?I.pathname=b.join("/"):(I.pathname=null,I.path=null),(I.pathname!==null||I.search!==null)&&(I.path=(I.pathname?I.pathname:"")+(I.search?I.search:"")),I.auth=e.auth||I.auth,I.slashes=I.slashes||e.slashes,I.href=I.format(),I};na.prototype.parseHost=function(){var e=this.host,g=pxe.exec(e);g&&(g=g[0],g!==":"&&(this.port=g.substr(1)),e=e.substr(0,e.length-g.length)),e&&(this.hostname=e)};var Rxe=hT,Vxe=wxe,Wxe=Sxe;/*! + */var Vme={createCanvas:function(e,g){var i=document.createElement("canvas");return i.width=e,i.height=g,i},getWebGLRenderingContext:function(){return WebGLRenderingContext},getNavigator:function(){return navigator},getBaseUrl:function(){var e;return(e=document.baseURI)!==null&&e!==void 0?e:window.location.href},fetch:function(e,g){return fetch(e,g)}},XK=/iPhone/i,Nq=/iPod/i,kq=/iPad/i,Yq=/\biOS-universal(?:.+)Mac\b/i,HK=/\bAndroid(?:.+)Mobile\b/i,Kq=/Android/i,Vm=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,pR=/Silk/i,xA=/Windows Phone/i,Fq=/\bWindows(?:.+)ARM\b/i,Dq=/BlackBerry/i,xq=/BB10/i,Eq=/Opera Mini/i,Mq=/\b(CriOS|Chrome)(?:.+)Mobile/i,zq=/Mobile(?:.+)Firefox\b/i,Pq=function(e){return typeof e<"u"&&e.platform==="MacIntel"&&typeof e.maxTouchPoints=="number"&&e.maxTouchPoints>1&&typeof MSStream>"u"};function Q5e(e){return function(g){return g.test(e)}}function j5e(e){var g={userAgent:"",platform:"",maxTouchPoints:0};!e&&typeof navigator<"u"?g={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof e=="string"?g.userAgent=e:e&&e.userAgent&&(g={userAgent:e.userAgent,platform:e.platform,maxTouchPoints:e.maxTouchPoints||0});var i=g.userAgent,I=i.split("[FBAN");typeof I[1]<"u"&&(i=I[0]),I=i.split("Twitter"),typeof I[1]<"u"&&(i=I[0]);var n=Q5e(i),r={apple:{phone:n(XK)&&!n(xA),ipod:n(Nq),tablet:!n(XK)&&(n(kq)||Pq(g))&&!n(xA),universal:n(Yq),device:(n(XK)||n(Nq)||n(kq)||n(Yq)||Pq(g))&&!n(xA)},amazon:{phone:n(Vm),tablet:!n(Vm)&&n(pR),device:n(Vm)||n(pR)},android:{phone:!n(xA)&&n(Vm)||!n(xA)&&n(HK),tablet:!n(xA)&&!n(Vm)&&!n(HK)&&(n(pR)||n(Kq)),device:!n(xA)&&(n(Vm)||n(pR)||n(HK)||n(Kq))||n(/\bokhttp\b/i)},windows:{phone:n(xA),tablet:n(Fq),device:n(xA)||n(Fq)},other:{blackberry:n(Dq),blackberry10:n(xq),opera:n(Eq),firefox:n(zq),chrome:n(Mq),device:n(Dq)||n(xq)||n(Eq)||n(zq)||n(Mq)},any:!1,phone:!1,tablet:!1};return r.any=r.apple.device||r.android.device||r.windows.device||r.other.device,r.phone=r.apple.phone||r.android.phone||r.windows.phone,r.tablet=r.apple.tablet||r.android.tablet||r.windows.tablet,r}var QC=j5e(globalThis.navigator);function $5e(){return!QC.apple.device}function q5e(e){var g=!0;if(QC.tablet||QC.phone){if(QC.apple.device){var i=navigator.userAgent.match(/OS (\d+)_(\d+)?/);if(i){var I=parseInt(i[1],10);I<11&&(g=!1)}}if(QC.android.device){var i=navigator.userAgent.match(/Android\s([0-9.]*)/);if(i){var I=parseInt(i[1],10);I<7&&(g=!1)}}}return g?e:4}var Gt={ADAPTER:Vme,MIPMAP_TEXTURES:Co.POW2,ANISOTROPIC_LEVEL:0,RESOLUTION:1,FILTER_RESOLUTION:1,FILTER_MULTISAMPLE:pi.NONE,SPRITE_MAX_TEXTURES:q5e(32),SPRITE_BATCH_SIZE:4096,RENDER_OPTIONS:{view:null,width:800,height:600,autoDensity:!1,backgroundColor:0,backgroundAlpha:1,useContextAlpha:!0,clearBeforeRender:!0,antialias:!1,preserveDrawingBuffer:!1},GC_MODE:sB.AUTO,GC_MAX_IDLE:60*60,GC_MAX_CHECK_COUNT:60*10,WRAP_MODE:ra.CLAMP,SCALE_MODE:ea.LINEAR,PRECISION_VERTEX:Yr.HIGH,PRECISION_FRAGMENT:QC.apple.device?Yr.HIGH:Yr.MEDIUM,CAN_UPLOAD_SAME_BUFFER:$5e(),CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1},Wme={exports:{}};(function(e){var g=Object.prototype.hasOwnProperty,i="~";function I(){}Object.create&&(I.prototype=Object.create(null),new I().__proto__||(i=!1));function n(a,s,A){this.fn=a,this.context=s,this.once=A||!1}function r(a,s,A,l,c){if(typeof A!="function")throw new TypeError("The listener must be a function");var u=new n(A,l||a,c),d=i?i+s:s;return a._events[d]?a._events[d].fn?a._events[d]=[a._events[d],u]:a._events[d].push(u):(a._events[d]=u,a._eventsCount++),a}function C(a,s){--a._eventsCount===0?a._events=new I:delete a._events[s]}function o(){this._events=new I,this._eventsCount=0}o.prototype.eventNames=function(){var s=[],A,l;if(this._eventsCount===0)return s;for(l in A=this._events)g.call(A,l)&&s.push(i?l.slice(1):l);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(A)):s},o.prototype.listeners=function(s){var A=i?i+s:s,l=this._events[A];if(!l)return[];if(l.fn)return[l.fn];for(var c=0,u=l.length,d=new Array(u);c80*i){o=s=e[0],a=A=e[1];for(var d=i;ds&&(s=l),c>A&&(A=c);u=Math.max(s-o,A-a),u=u!==0?32767/u:0}return lB(r,C,i,o,a,u,0),C}function Xme(e,g,i,I,n){var r,C;if(n===cM(e,g,i,I)>0)for(r=g;r=g;r-=I)C=Jq(r,e[r],e[r+1],C);return C&&yT(C,C.next)&&(uB(C),C=C.next),C}function Ld(e,g){if(!e)return e;g||(g=e);var i=e,I;do if(I=!1,!i.steiner&&(yT(i,i.next)||Di(i.prev,i,i.next)===0)){if(uB(i),i=g=i.prev,i===i.next)break;I=!0}else i=i.next;while(I||i!==g);return g}function lB(e,g,i,I,n,r,C){if(e){!C&&r&&AFe(e,I,n,r);for(var o=e,a,s;e.prev!==e.next;){if(a=e.prev,s=e.next,r?gFe(e,I,n,r):tFe(e)){g.push(a.i/i|0),g.push(e.i/i|0),g.push(s.i/i|0),uB(e),e=s.next,o=s.next;continue}if(e=s,e===o){C?C===1?(e=iFe(Ld(e),g,i),lB(e,g,i,I,n,r,2)):C===2&&IFe(e,g,i,I,n,r):lB(Ld(e),g,i,I,n,r,1);break}}}}function tFe(e){var g=e.prev,i=e,I=e.next;if(Di(g,i,I)>=0)return!1;for(var n=g.x,r=i.x,C=I.x,o=g.y,a=i.y,s=I.y,A=nr?n>C?n:C:r>C?r:C,u=o>a?o>s?o:s:a>s?a:s,d=I.next;d!==g;){if(d.x>=A&&d.x<=c&&d.y>=l&&d.y<=u&&gp(n,o,r,a,C,s,d.x,d.y)&&Di(d.prev,d,d.next)>=0)return!1;d=d.next}return!0}function gFe(e,g,i,I){var n=e.prev,r=e,C=e.next;if(Di(n,r,C)>=0)return!1;for(var o=n.x,a=r.x,s=C.x,A=n.y,l=r.y,c=C.y,u=oa?o>s?o:s:a>s?a:s,m=A>l?A>c?A:c:l>c?l:c,f=sM(u,d,g,i,I),b=sM(h,m,g,i,I),p=e.prevZ,y=e.nextZ;p&&p.z>=f&&y&&y.z<=b;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=m&&p!==n&&p!==C&&gp(o,A,a,l,s,c,p.x,p.y)&&Di(p.prev,p,p.next)>=0||(p=p.prevZ,y.x>=u&&y.x<=h&&y.y>=d&&y.y<=m&&y!==n&&y!==C&&gp(o,A,a,l,s,c,y.x,y.y)&&Di(y.prev,y,y.next)>=0))return!1;y=y.nextZ}for(;p&&p.z>=f;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=m&&p!==n&&p!==C&&gp(o,A,a,l,s,c,p.x,p.y)&&Di(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;y&&y.z<=b;){if(y.x>=u&&y.x<=h&&y.y>=d&&y.y<=m&&y!==n&&y!==C&&gp(o,A,a,l,s,c,y.x,y.y)&&Di(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function iFe(e,g,i){var I=e;do{var n=I.prev,r=I.next.next;!yT(n,r)&&Hme(n,I,I.next,r)&&cB(n,r)&&cB(r,n)&&(g.push(n.i/i|0),g.push(I.i/i|0),g.push(r.i/i|0),uB(I),uB(I.next),I=e=r),I=I.next}while(I!==e);return Ld(I)}function IFe(e,g,i,I,n,r){var C=e;do{for(var o=C.next.next;o!==C.prev;){if(C.i!==o.i&&cFe(C,o)){var a=Tme(C,o);C=Ld(C,C.next),a=Ld(a,a.next),lB(C,g,i,I,n,r,0),lB(a,g,i,I,n,r,0);return}o=o.next}C=C.next}while(C!==e)}function nFe(e,g,i,I){var n=[],r,C,o,a,s;for(r=0,C=g.length;r=i.next.y&&i.next.y!==i.y){var o=i.x+(n-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(o<=I&&o>r&&(r=o,C=i.x=i.x&&i.x>=s&&I!==i.x&&gp(nC.x||i.x===C.x&&aFe(C,i)))&&(C=i,l=c)),i=i.next;while(i!==a);return C}function aFe(e,g){return Di(e.prev,e,g.prev)<0&&Di(g.next,e,e.next)<0}function AFe(e,g,i,I){var n=e;do n.z===0&&(n.z=sM(n.x,n.y,g,i,I)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==e);n.prevZ.nextZ=null,n.prevZ=null,sFe(n)}function sFe(e){var g,i,I,n,r,C,o,a,s=1;do{for(i=e,e=null,r=null,C=0;i;){for(C++,I=i,o=0,g=0;g0||a>0&&I;)o!==0&&(a===0||!I||i.z<=I.z)?(n=i,i=i.nextZ,o--):(n=I,I=I.nextZ,a--),r?r.nextZ=n:e=n,n.prevZ=r,r=n;i=I}r.nextZ=null,s*=2}while(C>1);return e}function sM(e,g,i,I,n){return e=(e-i)*n|0,g=(g-I)*n|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,g=(g|g<<8)&16711935,g=(g|g<<4)&252645135,g=(g|g<<2)&858993459,g=(g|g<<1)&1431655765,e|g<<1}function lFe(e){var g=e,i=e;do(g.x=(e-C)*(r-o)&&(e-C)*(I-o)>=(i-C)*(g-o)&&(i-C)*(r-o)>=(n-C)*(I-o)}function cFe(e,g){return e.next.i!==g.i&&e.prev.i!==g.i&&!uFe(e,g)&&(cB(e,g)&&cB(g,e)&&dFe(e,g)&&(Di(e.prev,e,g.prev)||Di(e,g.prev,g))||yT(e,g)&&Di(e.prev,e,e.next)>0&&Di(g.prev,g,g.next)>0)}function Di(e,g,i){return(g.y-e.y)*(i.x-g.x)-(g.x-e.x)*(i.y-g.y)}function yT(e,g){return e.x===g.x&&e.y===g.y}function Hme(e,g,i,I){var n=yR(Di(e,g,i)),r=yR(Di(e,g,I)),C=yR(Di(i,I,e)),o=yR(Di(i,I,g));return!!(n!==r&&C!==o||n===0&&bR(e,i,g)||r===0&&bR(e,I,g)||C===0&&bR(i,e,I)||o===0&&bR(i,g,I))}function bR(e,g,i){return g.x<=Math.max(e.x,i.x)&&g.x>=Math.min(e.x,i.x)&&g.y<=Math.max(e.y,i.y)&&g.y>=Math.min(e.y,i.y)}function yR(e){return e>0?1:e<0?-1:0}function uFe(e,g){var i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==g.i&&i.next.i!==g.i&&Hme(i,i.next,e,g))return!0;i=i.next}while(i!==e);return!1}function cB(e,g){return Di(e.prev,e,e.next)<0?Di(e,g,e.next)>=0&&Di(e,e.prev,g)>=0:Di(e,g,e.prev)<0||Di(e,e.next,g)<0}function dFe(e,g){var i=e,I=!1,n=(e.x+g.x)/2,r=(e.y+g.y)/2;do i.y>r!=i.next.y>r&&i.next.y!==i.y&&n<(i.next.x-i.x)*(r-i.y)/(i.next.y-i.y)+i.x&&(I=!I),i=i.next;while(i!==e);return I}function Tme(e,g){var i=new lM(e.i,e.x,e.y),I=new lM(g.i,g.x,g.y),n=e.next,r=g.prev;return e.next=g,g.prev=e,i.next=n,n.prev=i,I.next=i,i.prev=I,r.next=I,I.prev=r,I}function Jq(e,g,i,I){var n=new lM(e,g,i);return I?(n.next=I.next,n.prev=I,I.next.prev=n,I.next=n):(n.prev=n,n.next=n),n}function uB(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function lM(e,g,i){this.i=e,this.x=g,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}bT.deviation=function(e,g,i,I){var n=g&&g.length,r=n?g[0]*i:e.length,C=Math.abs(cM(e,0,r,i));if(n)for(var o=0,a=g.length;o0&&(I+=e[n-1].length,i.holes.push(I))}return i};var hFe=eU.exports;const tU=jc(hFe);var y9={exports:{}};/*! https://mths.be/punycode v1.4.1 by @mathias */y9.exports;(function(e,g){(function(i){var I=g&&!g.nodeType&&g,n=e&&!e.nodeType&&e,r=typeof Zi=="object"&&Zi;(r.global===r||r.window===r||r.self===r)&&(i=r);var C,o=2147483647,a=36,s=1,A=26,l=38,c=700,u=72,d=128,h="-",m=/^xn--/,f=/[^\x20-\x7E]/,b=/[\x2E\u3002\uFF0E\uFF61]/g,p={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},y=a-s,Z=Math.floor,B=String.fromCharCode,G;function v(P){throw new RangeError(p[P])}function w(P,te){for(var q=P.length,$=[];q--;)$[q]=te(P[q]);return $}function V(P,te){var q=P.split("@"),$="";q.length>1&&($=q[0]+"@",P=q[1]),P=P.replace(b,".");var j=P.split("."),ge=w(j,te).join(".");return $+ge}function S(P){for(var te=[],q=0,$=P.length,j,ge;q<$;)j=P.charCodeAt(q++),j>=55296&&j<=56319&&q<$?(ge=P.charCodeAt(q++),(ge&64512)==56320?te.push(((j&1023)<<10)+(ge&1023)+65536):(te.push(j),q--)):te.push(j);return te}function X(P){return w(P,function(te){var q="";return te>65535&&(te-=65536,q+=B(te>>>10&1023|55296),te=56320|te&1023),q+=B(te),q}).join("")}function W(P){return P-48<10?P-22:P-65<26?P-65:P-97<26?P-97:a}function R(P,te){return P+22+75*(P<26)-((te!=0)<<5)}function H(P,te,q){var $=0;for(P=q?Z(P/c):P>>1,P+=Z(P/te);P>y*A>>1;$+=a)P=Z(P/y);return Z($+(y+1)*P/(P+l))}function k(P){var te=[],q=P.length,$,j=0,ge=d,Q=u,Ie,he,ne,be,pe,ve,We,Be,Je;for(Ie=P.lastIndexOf(h),Ie<0&&(Ie=0),he=0;he=128&&v("not-basic"),te.push(P.charCodeAt(he));for(ne=Ie>0?Ie+1:0;ne=q&&v("invalid-input"),We=W(P.charCodeAt(ne++)),(We>=a||We>Z((o-j)/pe))&&v("overflow"),j+=We*pe,Be=ve<=Q?s:ve>=Q+A?A:ve-Q,!(WeZ(o/Je)&&v("overflow"),pe*=Je;$=te.length+1,Q=H(j-be,$,be==0),Z(j/$)>o-ge&&v("overflow"),ge+=Z(j/$),j%=$,te.splice(j++,0,ge)}return X(te)}function K(P){var te,q,$,j,ge,Q,Ie,he,ne,be,pe,ve=[],We,Be,Je,Pe;for(P=S(P),We=P.length,te=d,q=0,ge=u,Q=0;Q=te&&peZ((o-q)/Be)&&v("overflow"),q+=(Ie-te)*Be,te=Ie,Q=0;Qo&&v("overflow"),pe==te){for(he=q,ne=a;be=ne<=ge?s:ne>=ge+A?A:ne-ge,!(he"u"||!zI?fg:zI(Uint8Array),Rd={"%AggregateError%":typeof AggregateError>"u"?fg:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?fg:ArrayBuffer,"%ArrayIteratorPrototype%":Wm&&zI?zI([][Symbol.iterator]()):fg,"%AsyncFromSyncIteratorPrototype%":fg,"%AsyncFunction%":mf,"%AsyncGenerator%":mf,"%AsyncGeneratorFunction%":mf,"%AsyncIteratorPrototype%":mf,"%Atomics%":typeof Atomics>"u"?fg:Atomics,"%BigInt%":typeof BigInt>"u"?fg:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?fg:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?fg:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?fg:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?fg:Float32Array,"%Float64Array%":typeof Float64Array>"u"?fg:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?fg:FinalizationRegistry,"%Function%":Nme,"%GeneratorFunction%":mf,"%Int8Array%":typeof Int8Array>"u"?fg:Int8Array,"%Int16Array%":typeof Int16Array>"u"?fg:Int16Array,"%Int32Array%":typeof Int32Array>"u"?fg:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Wm&&zI?zI(zI([][Symbol.iterator]())):fg,"%JSON%":typeof JSON=="object"?JSON:fg,"%Map%":typeof Map>"u"?fg:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Wm||!zI?fg:zI(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?fg:Promise,"%Proxy%":typeof Proxy>"u"?fg:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?fg:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?fg:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Wm||!zI?fg:zI(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?fg:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Wm&&zI?zI(""[Symbol.iterator]()):fg,"%Symbol%":Wm?Symbol:fg,"%SyntaxError%":lb,"%ThrowTypeError%":kFe,"%TypedArray%":KFe,"%TypeError%":Gp,"%Uint8Array%":typeof Uint8Array>"u"?fg:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?fg:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?fg:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?fg:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?fg:WeakMap,"%WeakRef%":typeof WeakRef>"u"?fg:WeakRef,"%WeakSet%":typeof WeakSet>"u"?fg:WeakSet};if(zI)try{null.error}catch(e){var FFe=zI(zI(e));Rd["%Error.prototype%"]=FFe}var DFe=function e(g){var i;if(g==="%AsyncFunction%")i=TK("async function () {}");else if(g==="%GeneratorFunction%")i=TK("function* () {}");else if(g==="%AsyncGeneratorFunction%")i=TK("async function* () {}");else if(g==="%AsyncGenerator%"){var I=e("%AsyncGeneratorFunction%");I&&(i=I.prototype)}else if(g==="%AsyncIteratorPrototype%"){var n=e("%AsyncGenerator%");n&&zI&&(i=zI(n.prototype))}return Rd[g]=i,i},Uq={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},WS=gU,Z9=NFe,xFe=WS.call(Function.call,Array.prototype.concat),EFe=WS.call(Function.apply,Array.prototype.splice),Qq=WS.call(Function.call,String.prototype.replace),G9=WS.call(Function.call,String.prototype.slice),MFe=WS.call(Function.call,RegExp.prototype.exec),zFe=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,PFe=/\\(\\)?/g,JFe=function(g){var i=G9(g,0,1),I=G9(g,-1);if(i==="%"&&I!=="%")throw new lb("invalid intrinsic syntax, expected closing `%`");if(I==="%"&&i!=="%")throw new lb("invalid intrinsic syntax, expected opening `%`");var n=[];return Qq(g,zFe,function(r,C,o,a){n[n.length]=o?Qq(a,PFe,"$1"):C||r}),n},OFe=function(g,i){var I=g,n;if(Z9(Uq,I)&&(n=Uq[I],I="%"+n[0]+"%"),Z9(Rd,I)){var r=Rd[I];if(r===mf&&(r=DFe(I)),typeof r>"u"&&!i)throw new Gp("intrinsic "+g+" exists, but is not available. Please file an issue!");return{alias:n,name:I,value:r}}throw new lb("intrinsic "+g+" does not exist!")},_h=function(g,i){if(typeof g!="string"||g.length===0)throw new Gp("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof i!="boolean")throw new Gp('"allowMissing" argument must be a boolean');if(MFe(/^%?[^%]*%?$/,g)===null)throw new lb("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var I=JFe(g),n=I.length>0?I[0]:"",r=OFe("%"+n+"%",i),C=r.name,o=r.value,a=!1,s=r.alias;s&&(n=s[0],EFe(I,xFe([0,1],s)));for(var A=1,l=!0;A=I.length){var h=wd(o,c);l=!!h,l&&"get"in h&&!("originalValue"in h.get)?o=h.get:o=o[c]}else l=Z9(o,c),o=o[c];l&&!a&&(Rd[C]=o)}}return o},kme={exports:{}},_Fe=_h,uM=_Fe("%Object.defineProperty%",!0),dM=function(){if(uM)try{return uM({},"a",{value:1}),!0}catch{return!1}return!1};dM.hasArrayLengthDefineBug=function(){if(!dM())return null;try{return uM([],"length",{value:1}).length!==1}catch{return!0}};var Yme=dM,LFe=_h,H1=LFe("%Object.getOwnPropertyDescriptor%",!0);if(H1)try{H1([],"length")}catch{H1=null}var Kme=H1,UFe=Yme(),iU=_h,FG=UFe&&iU("%Object.defineProperty%",!0);if(FG)try{FG({},"a",{value:1})}catch{FG=!1}var QFe=iU("%SyntaxError%"),Xm=iU("%TypeError%"),jq=Kme,jFe=function(g,i,I){if(!g||typeof g!="object"&&typeof g!="function")throw new Xm("`obj` must be an object or a function`");if(typeof i!="string"&&typeof i!="symbol")throw new Xm("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new Xm("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new Xm("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new Xm("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new Xm("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,r=arguments.length>4?arguments[4]:null,C=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,a=!!jq&&jq(g,i);if(FG)FG(g,i,{configurable:C===null&&a?a.configurable:!C,enumerable:n===null&&a?a.enumerable:!n,value:I,writable:r===null&&a?a.writable:!r});else if(o||!n&&!r&&!C)g[i]=I;else throw new QFe("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},Fme=_h,$q=jFe,$Fe=Yme(),qq=Kme,eee=Fme("%TypeError%"),qFe=Fme("%Math.floor%"),eDe=function(g,i){if(typeof g!="function")throw new eee("`fn` is not a function");if(typeof i!="number"||i<0||i>4294967295||qFe(i)!==i)throw new eee("`length` must be a positive 32-bit integer");var I=arguments.length>2&&!!arguments[2],n=!0,r=!0;if("length"in g&&qq){var C=qq(g,"length");C&&!C.configurable&&(n=!1),C&&!C.writable&&(r=!1)}return(n||r||!I)&&($Fe?$q(g,"length",i,!0,!0):$q(g,"length",i)),g};(function(e){var g=gU,i=_h,I=eDe,n=i("%TypeError%"),r=i("%Function.prototype.apply%"),C=i("%Function.prototype.call%"),o=i("%Reflect.apply%",!0)||g.call(C,r),a=i("%Object.defineProperty%",!0),s=i("%Math.max%");if(a)try{a({},"a",{value:1})}catch{a=null}e.exports=function(c){if(typeof c!="function")throw new n("a function is required");var u=o(g,C,arguments);return I(u,1+s(0,c.length-(arguments.length-1)),!0)};var A=function(){return o(g,r,arguments)};a?a(e.exports,"apply",{value:A}):e.exports.apply=A})(kme);var tDe=kme.exports,Dme=_h,xme=tDe,gDe=xme(Dme("String.prototype.indexOf")),iDe=function(g,i){var I=Dme(g,!!i);return typeof I=="function"&&gDe(g,".prototype.")>-1?xme(I):I};const Eme={},IDe=Object.freeze(Object.defineProperty({__proto__:null,default:Eme},Symbol.toStringTag,{value:"Module"})),nDe=nL(IDe);var IU=typeof Map=="function"&&Map.prototype,kK=Object.getOwnPropertyDescriptor&&IU?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,v9=IU&&kK&&typeof kK.get=="function"?kK.get:null,tee=IU&&Map.prototype.forEach,nU=typeof Set=="function"&&Set.prototype,YK=Object.getOwnPropertyDescriptor&&nU?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,B9=nU&&YK&&typeof YK.get=="function"?YK.get:null,gee=nU&&Set.prototype.forEach,rDe=typeof WeakMap=="function"&&WeakMap.prototype,DG=rDe?WeakMap.prototype.has:null,CDe=typeof WeakSet=="function"&&WeakSet.prototype,xG=CDe?WeakSet.prototype.has:null,oDe=typeof WeakRef=="function"&&WeakRef.prototype,iee=oDe?WeakRef.prototype.deref:null,aDe=Boolean.prototype.valueOf,ADe=Object.prototype.toString,sDe=Function.prototype.toString,lDe=String.prototype.match,rU=String.prototype.slice,sc=String.prototype.replace,cDe=String.prototype.toUpperCase,Iee=String.prototype.toLowerCase,Mme=RegExp.prototype.test,nee=Array.prototype.concat,xa=Array.prototype.join,uDe=Array.prototype.slice,ree=Math.floor,hM=typeof BigInt=="function"?BigInt.prototype.valueOf:null,KK=Object.getOwnPropertySymbols,mM=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,cb=typeof Symbol=="function"&&typeof Symbol.iterator=="object",Fn=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===cb||"symbol")?Symbol.toStringTag:null,zme=Object.prototype.propertyIsEnumerable,Cee=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function oee(e,g){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||Mme.call(/e/,g))return g;var i=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var I=e<0?-ree(-e):ree(e);if(I!==e){var n=String(I),r=rU.call(g,n.length+1);return sc.call(n,i,"$&_")+"."+sc.call(sc.call(r,/([0-9]{3})/g,"$&_"),/_$/,"")}}return sc.call(g,i,"$&_")}var fM=nDe,aee=fM.custom,Aee=Jme(aee)?aee:null,dDe=function e(g,i,I,n){var r=i||{};if(Pl(r,"quoteStyle")&&r.quoteStyle!=="single"&&r.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Pl(r,"maxStringLength")&&(typeof r.maxStringLength=="number"?r.maxStringLength<0&&r.maxStringLength!==1/0:r.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var C=Pl(r,"customInspect")?r.customInspect:!0;if(typeof C!="boolean"&&C!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Pl(r,"indent")&&r.indent!==null&&r.indent!==" "&&!(parseInt(r.indent,10)===r.indent&&r.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Pl(r,"numericSeparator")&&typeof r.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var o=r.numericSeparator;if(typeof g>"u")return"undefined";if(g===null)return"null";if(typeof g=="boolean")return g?"true":"false";if(typeof g=="string")return _me(g,r);if(typeof g=="number"){if(g===0)return 1/0/g>0?"0":"-0";var a=String(g);return o?oee(g,a):a}if(typeof g=="bigint"){var s=String(g)+"n";return o?oee(g,s):s}var A=typeof r.depth>"u"?5:r.depth;if(typeof I>"u"&&(I=0),I>=A&&A>0&&typeof g=="object")return pM(g)?"[Array]":"[Object]";var l=TDe(r,I);if(typeof n>"u")n=[];else if(Ome(n,g)>=0)return"[Circular]";function c(W,R,H){if(R&&(n=uDe.call(n),n.push(R)),H){var k={depth:r.depth};return Pl(r,"quoteStyle")&&(k.quoteStyle=r.quoteStyle),e(W,k,I+1,n)}return e(W,r,I+1,n)}if(typeof g=="function"&&!see(g)){var u=vDe(g),d=ZR(g,c);return"[Function"+(u?": "+u:" (anonymous)")+"]"+(d.length>0?" { "+xa.call(d,", ")+" }":"")}if(Jme(g)){var h=cb?sc.call(String(g),/^(Symbol\(.*\))_[^)]*$/,"$1"):mM.call(g);return typeof g=="object"&&!cb?Ty(h):h}if(WDe(g)){for(var m="<"+Iee.call(String(g.nodeName)),f=g.attributes||[],b=0;b",m}if(pM(g)){if(g.length===0)return"[]";var p=ZR(g,c);return l&&!HDe(p)?"["+bM(p,l)+"]":"[ "+xa.call(p,", ")+" ]"}if(fDe(g)){var y=ZR(g,c);return!("cause"in Error.prototype)&&"cause"in g&&!zme.call(g,"cause")?"{ ["+String(g)+"] "+xa.call(nee.call("[cause]: "+c(g.cause),y),", ")+" }":y.length===0?"["+String(g)+"]":"{ ["+String(g)+"] "+xa.call(y,", ")+" }"}if(typeof g=="object"&&C){if(Aee&&typeof g[Aee]=="function"&&fM)return fM(g,{depth:A-I});if(C!=="symbol"&&typeof g.inspect=="function")return g.inspect()}if(BDe(g)){var Z=[];return tee&&tee.call(g,function(W,R){Z.push(c(R,g,!0)+" => "+c(W,g))}),lee("Map",v9.call(g),Z,l)}if(RDe(g)){var B=[];return gee&&gee.call(g,function(W){B.push(c(W,g))}),lee("Set",B9.call(g),B,l)}if(SDe(g))return FK("WeakMap");if(VDe(g))return FK("WeakSet");if(wDe(g))return FK("WeakRef");if(bDe(g))return Ty(c(Number(g)));if(ZDe(g))return Ty(c(hM.call(g)));if(yDe(g))return Ty(aDe.call(g));if(pDe(g))return Ty(c(String(g)));if(typeof window<"u"&&g===window)return"{ [object Window] }";if(g===Zi)return"{ [object globalThis] }";if(!mDe(g)&&!see(g)){var G=ZR(g,c),v=Cee?Cee(g)===Object.prototype:g instanceof Object||g.constructor===Object,w=g instanceof Object?"":"null prototype",V=!v&&Fn&&Object(g)===g&&Fn in g?rU.call(tu(g),8,-1):w?"Object":"",S=v||typeof g.constructor!="function"?"":g.constructor.name?g.constructor.name+" ":"",X=S+(V||w?"["+xa.call(nee.call([],V||[],w||[]),": ")+"] ":"");return G.length===0?X+"{}":l?X+"{"+bM(G,l)+"}":X+"{ "+xa.call(G,", ")+" }"}return String(g)};function Pme(e,g,i){var I=(i.quoteStyle||g)==="double"?'"':"'";return I+e+I}function hDe(e){return sc.call(String(e),/"/g,""")}function pM(e){return tu(e)==="[object Array]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function mDe(e){return tu(e)==="[object Date]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function see(e){return tu(e)==="[object RegExp]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function fDe(e){return tu(e)==="[object Error]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function pDe(e){return tu(e)==="[object String]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function bDe(e){return tu(e)==="[object Number]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function yDe(e){return tu(e)==="[object Boolean]"&&(!Fn||!(typeof e=="object"&&Fn in e))}function Jme(e){if(cb)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!mM)return!1;try{return mM.call(e),!0}catch{}return!1}function ZDe(e){if(!e||typeof e!="object"||!hM)return!1;try{return hM.call(e),!0}catch{}return!1}var GDe=Object.prototype.hasOwnProperty||function(e){return e in this};function Pl(e,g){return GDe.call(e,g)}function tu(e){return ADe.call(e)}function vDe(e){if(e.name)return e.name;var g=lDe.call(sDe.call(e),/^function\s*([\w$]+)/);return g?g[1]:null}function Ome(e,g){if(e.indexOf)return e.indexOf(g);for(var i=0,I=e.length;ig.maxStringLength){var i=e.length-g.maxStringLength,I="... "+i+" more character"+(i>1?"s":"");return _me(rU.call(e,0,g.maxStringLength),g)+I}var n=sc.call(sc.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,XDe);return Pme(n,"single",g)}function XDe(e){var g=e.charCodeAt(0),i={8:"b",9:"t",10:"n",12:"f",13:"r"}[g];return i?"\\"+i:"\\x"+(g<16?"0":"")+cDe.call(g.toString(16))}function Ty(e){return"Object("+e+")"}function FK(e){return e+" { ? }"}function lee(e,g,i,I){var n=I?bM(i,I):xa.call(i,", ");return e+" ("+g+") {"+n+"}"}function HDe(e){for(var g=0;g=0)return!1;return!0}function TDe(e,g){var i;if(e.indent===" ")i=" ";else if(typeof e.indent=="number"&&e.indent>0)i=xa.call(Array(e.indent+1)," ");else return null;return{base:i,prev:xa.call(Array(g+1),i)}}function bM(e,g){if(e.length===0)return"";var i=` +`+g.prev+g.base;return i+xa.call(e,","+i)+` +`+g.prev}function ZR(e,g){var i=pM(e),I=[];if(i){I.length=e.length;for(var n=0;n1;){var i=g.pop(),I=i.obj[i.prop];if(id(I)){for(var n=[],r=0;r=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||r===LDe.RFC1738&&(s===40||s===41)){o+=C.charAt(a);continue}if(s<128){o=o+Va[s];continue}if(s<2048){o=o+(Va[192|s>>6]+Va[128|s&63]);continue}if(s<55296||s>=57344){o=o+(Va[224|s>>12]+Va[128|s>>6&63]+Va[128|s&63]);continue}a+=1,s=65536+((s&1023)<<10|C.charCodeAt(a)&1023),o+=Va[240|s>>18]+Va[128|s>>12&63]+Va[128|s>>6&63]+Va[128|s&63]}return o},exe=function(g){for(var i=[{obj:{o:g},prop:"o"}],I=[],n=0;n"u"&&(p=0)}if(typeof a=="function"?f=a(i,f):f instanceof Date?f=l(f):I==="comma"&&is(f)&&(f=T1.maybeMap(f,function(k){return k instanceof Date?l(k):k})),f===null){if(r)return o&&!d?o(i,Nn.encoder,h,"key",c):i;f=""}if(oxe(f)||T1.isBuffer(f)){if(o){var B=d?i:o(i,Nn.encoder,h,"key",c);return[u(B)+"="+u(o(f,Nn.encoder,h,"value",c))]}return[u(i)+"="+u(String(f))]}var G=[];if(typeof f>"u")return G;var v;if(I==="comma"&&is(f))d&&o&&(f=T1.maybeMap(f,o)),v=[{value:f.length>0?f.join(",")||null:void 0}];else if(is(a))v=a;else{var w=Object.keys(f);v=s?w.sort(s):w}for(var V=n&&is(f)&&f.length===1?i+"[]":i,S=0;S"u"?Nn.allowDots:!!g.allowDots,charset:i,charsetSentinel:typeof g.charsetSentinel=="boolean"?g.charsetSentinel:Nn.charsetSentinel,delimiter:typeof g.delimiter>"u"?Nn.delimiter:g.delimiter,encode:typeof g.encode=="boolean"?g.encode:Nn.encode,encoder:typeof g.encoder=="function"?g.encoder:Nn.encoder,encodeValuesOnly:typeof g.encodeValuesOnly=="boolean"?g.encodeValuesOnly:Nn.encodeValuesOnly,filter:r,format:I,formatter:n,serializeDate:typeof g.serializeDate=="function"?g.serializeDate:Nn.serializeDate,skipNulls:typeof g.skipNulls=="boolean"?g.skipNulls:Nn.skipNulls,sort:typeof g.sort=="function"?g.sort:null,strictNullHandling:typeof g.strictNullHandling=="boolean"?g.strictNullHandling:Nn.strictNullHandling}},sxe=function(e,g){var i=e,I=Axe(g),n,r;typeof I.filter=="function"?(r=I.filter,i=r("",i)):is(I.filter)&&(r=I.filter,n=r);var C=[];if(typeof i!="object"||i===null)return"";var o;g&&g.arrayFormat in cee?o=g.arrayFormat:g&&"indices"in g?o=g.indices?"indices":"repeat":o="indices";var a=cee[o];if(g&&"commaRoundTrip"in g&&typeof g.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var s=a==="comma"&&g&&g.commaRoundTrip;n||(n=Object.keys(i)),I.sort&&n.sort(I.sort);for(var A=Qme(),l=0;l0?d+u:""},ub=Ume,yM=Object.prototype.hasOwnProperty,lxe=Array.isArray,MI={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:ub.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},cxe=function(e){return e.replace(/&#(\d+);/g,function(g,i){return String.fromCharCode(parseInt(i,10))})},$me=function(e,g){return e&&typeof e=="string"&&g.comma&&e.indexOf(",")>-1?e.split(","):e},uxe="utf8=%26%2310003%3B",dxe="utf8=%E2%9C%93",hxe=function(g,i){var I={__proto__:null},n=i.ignoreQueryPrefix?g.replace(/^\?/,""):g,r=i.parameterLimit===1/0?void 0:i.parameterLimit,C=n.split(i.delimiter,r),o=-1,a,s=i.charset;if(i.charsetSentinel)for(a=0;a-1&&(d=lxe(d)?[d]:d),yM.call(I,u)?I[u]=ub.combine(I[u],d):I[u]=d}return I},mxe=function(e,g,i,I){for(var n=I?g:$me(g,i),r=e.length-1;r>=0;--r){var C,o=e[r];if(o==="[]"&&i.parseArrays)C=[].concat(n);else{C=i.plainObjects?Object.create(null):{};var a=o.charAt(0)==="["&&o.charAt(o.length-1)==="]"?o.slice(1,-1):o,s=parseInt(a,10);!i.parseArrays&&a===""?C={0:n}:!isNaN(s)&&o!==a&&String(s)===a&&s>=0&&i.parseArrays&&s<=i.arrayLimit?(C=[],C[s]=n):a!=="__proto__"&&(C[a]=n)}n=C}return n},fxe=function(g,i,I,n){if(g){var r=I.allowDots?g.replace(/\.([^.[]+)/g,"[$1]"):g,C=/(\[[^[\]]*])/,o=/(\[[^[\]]*])/g,a=I.depth>0&&C.exec(r),s=a?r.slice(0,a.index):r,A=[];if(s){if(!I.plainObjects&&yM.call(Object.prototype,s)&&!I.allowPrototypes)return;A.push(s)}for(var l=0;I.depth>0&&(a=o.exec(r))!==null&&l"u"?MI.charset:g.charset;return{allowDots:typeof g.allowDots>"u"?MI.allowDots:!!g.allowDots,allowPrototypes:typeof g.allowPrototypes=="boolean"?g.allowPrototypes:MI.allowPrototypes,allowSparse:typeof g.allowSparse=="boolean"?g.allowSparse:MI.allowSparse,arrayLimit:typeof g.arrayLimit=="number"?g.arrayLimit:MI.arrayLimit,charset:i,charsetSentinel:typeof g.charsetSentinel=="boolean"?g.charsetSentinel:MI.charsetSentinel,comma:typeof g.comma=="boolean"?g.comma:MI.comma,decoder:typeof g.decoder=="function"?g.decoder:MI.decoder,delimiter:typeof g.delimiter=="string"||ub.isRegExp(g.delimiter)?g.delimiter:MI.delimiter,depth:typeof g.depth=="number"||g.depth===!1?+g.depth:MI.depth,ignoreQueryPrefix:g.ignoreQueryPrefix===!0,interpretNumericEntities:typeof g.interpretNumericEntities=="boolean"?g.interpretNumericEntities:MI.interpretNumericEntities,parameterLimit:typeof g.parameterLimit=="number"?g.parameterLimit:MI.parameterLimit,parseArrays:g.parseArrays!==!1,plainObjects:typeof g.plainObjects=="boolean"?g.plainObjects:MI.plainObjects,strictNullHandling:typeof g.strictNullHandling=="boolean"?g.strictNullHandling:MI.strictNullHandling}},bxe=function(e,g){var i=pxe(g);if(e===""||e===null||typeof e>"u")return i.plainObjects?Object.create(null):{};for(var I=typeof e=="string"?hxe(e,i):e,n=i.plainObjects?Object.create(null):{},r=Object.keys(I),C=0;C",'"',"`"," ","\r",` +`," "],Wxe=["{","}","|","\\","^","`"].concat(Vxe),ZM=["'"].concat(Wxe),dee=["%","/","?",";","#"].concat(ZM),hee=["/","?","#"],Xxe=255,mee=/^[+a-z0-9A-Z_-]{0,63}$/,Hxe=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Txe={javascript:!0,"javascript:":!0},GM={javascript:!0,"javascript:":!0},vp={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},vM=vxe;function ZT(e,g,i){if(e&&typeof e=="object"&&e instanceof oa)return e;var I=new oa;return I.parse(e,g,i),I}oa.prototype.parse=function(e,g,i){if(typeof e!="string")throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var I=e.indexOf("?"),n=I!==-1&&I127?Z+="x":Z+=y[B];if(!Z.match(mee)){var v=b.slice(0,u),w=b.slice(u+1),V=y.match(Hxe);V&&(v.push(V[1]),w.unshift(V[2])),w.length&&(o="/"+w.join(".")+o),this.hostname=v.join(".");break}}}this.hostname.length>Xxe?this.hostname="":this.hostname=this.hostname.toLowerCase(),f||(this.hostname=Bxe.toASCII(this.hostname));var S=this.port?":"+this.port:"",X=this.hostname||"";this.host=X+S,this.href+=this.host,f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),o[0]!=="/"&&(o="/"+o))}if(!Txe[A])for(var u=0,p=ZM.length;u0?i.host.split("@"):!1;Z&&(i.auth=Z.shift(),i.hostname=Z.shift(),i.host=i.hostname)}return i.search=e.search,i.query=e.query,(i.pathname!==null||i.search!==null)&&(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.href=i.format(),i}if(!b.length)return i.pathname=null,i.search?i.path="/"+i.search:i.path=null,i.href=i.format(),i;for(var B=b.slice(-1)[0],G=(i.host||e.host||b.length>1)&&(B==="."||B==="..")||B==="",v=0,w=b.length;w>=0;w--)B=b[w],B==="."?b.splice(w,1):B===".."?(b.splice(w,1),v++):v&&(b.splice(w,1),v--);if(!m&&!f)for(;v--;v)b.unshift("..");m&&b[0]!==""&&(!b[0]||b[0].charAt(0)!=="/")&&b.unshift(""),G&&b.join("/").substr(-1)!=="/"&&b.push("");var V=b[0]===""||b[0]&&b[0].charAt(0)==="/";if(y){i.hostname=V?"":b.length?b.shift():"",i.host=i.hostname;var Z=i.host&&i.host.indexOf("@")>0?i.host.split("@"):!1;Z&&(i.auth=Z.shift(),i.hostname=Z.shift(),i.host=i.hostname)}return m=m||i.host&&b.length,m&&!V&&b.unshift(""),b.length>0?i.pathname=b.join("/"):(i.pathname=null,i.path=null),(i.pathname!==null||i.search!==null)&&(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.auth=e.auth||i.auth,i.slashes=i.slashes||e.slashes,i.href=i.format(),i};oa.prototype.parseHost=function(){var e=this.host,g=wxe.exec(e);g&&(g=g[0],g!==":"&&(this.port=g.substr(1)),e=e.substr(0,e.length-g.length)),e&&(this.hostname=e)};var Yxe=ZT,Kxe=kxe,Fxe=Nxe;/*! * @pixi/utils - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/utils is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var od={parse:Rxe,format:Wxe,resolve:Vxe};function fo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function uee(e){var g=e.split("?")[0];return g.split("#")[0]}function Xxe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Hxe(e,g,I){return e.replace(new RegExp(Xxe(g),"g"),I)}function Txe(e,g){for(var I="",i=0,n=-1,C=0,r,o=0;o<=e.length;++o){if(o2){var a=I.lastIndexOf("/");if(a!==I.length-1){a===-1?(I="",i=0):(I=I.slice(0,a),i=I.length-1-I.lastIndexOf("/")),n=o,C=0;continue}}else if(I.length===2||I.length===1){I="",i=0,n=o,C=0;continue}}g&&(I.length>0?I+="/..":I="..",i=2)}else I.length>0?I+="/"+e.slice(n+1,o):I=e.slice(n+1,o),i=o-n-1;n=o,C=0}else r===46&&C!==-1?++C:C=-1}return I}var Ome={toPosix:function(e){return Hxe(e,"\\","/")},isUrl:function(e){return/^https?:/.test(this.toPosix(e))},isDataUrl:function(e){return/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(e)},hasProtocol:function(e){return/^[^/:]+:\//.test(this.toPosix(e))},getProtocol:function(e){fo(e),e=this.toPosix(e);var g="",I=/^file:\/\/\//.exec(e),i=/^[^/:]+:\/\//.exec(e),n=/^[^/:]+:\//.exec(e);if(I||i||n){var C=(I==null?void 0:I[0])||(i==null?void 0:i[0])||(n==null?void 0:n[0]);g=C,e=e.slice(C.length)}return g},toAbsolute:function(e,g,I){if(this.isDataUrl(e))return e;var i=uee(this.toPosix(g??Gt.ADAPTER.getBaseUrl())),n=uee(this.toPosix(I??this.rootname(i)));if(fo(e),e=this.toPosix(e),e.startsWith("/"))return Ome.join(n,e.slice(1));var C=this.isAbsolute(e)?e:this.join(i,e);return C},normalize:function(e){if(e=this.toPosix(e),fo(e),e.length===0)return".";var g="",I=e.startsWith("/");this.hasProtocol(e)&&(g=this.rootname(e),e=e.slice(g.length));var i=e.endsWith("/");return e=Txe(e,!1),e.length>0&&i&&(e+="/"),I?"/"+e:g+e},isAbsolute:function(e){return fo(e),e=this.toPosix(e),this.hasProtocol(e)?!0:e.startsWith("/")},join:function(){for(var e=arguments,g,I=[],i=0;i0)if(n===void 0)n=r;else{var o=(g=I[C-1])!==null&&g!==void 0?g:"";this.extname(o)?n+="/../"+r:n+="/"+r}}return n===void 0?".":this.normalize(n)},dirname:function(e){if(fo(e),e.length===0)return".";e=this.toPosix(e);var g=e.charCodeAt(0),I=g===47,i=-1,n=!0,C=this.getProtocol(e),r=e;e=e.slice(C.length);for(var o=e.length-1;o>=1;--o)if(g=e.charCodeAt(o),g===47){if(!n){i=o;break}}else n=!1;return i===-1?I?"/":this.isUrl(r)?C+e:C:I&&i===1?"//":C+e.slice(0,i)},rootname:function(e){fo(e),e=this.toPosix(e);var g="";if(e.startsWith("/")?g="/":g=this.getProtocol(e),this.isUrl(e)){var I=e.indexOf("/",g.length);I!==-1?g=e.slice(0,I):g=e,g.endsWith("/")||(g+="/")}return g},basename:function(e,g){fo(e),g&&fo(g),e=this.toPosix(e);var I=0,i=-1,n=!0,C;if(g!==void 0&&g.length>0&&g.length<=e.length){if(g.length===e.length&&g===e)return"";var r=g.length-1,o=-1;for(C=e.length-1;C>=0;--C){var a=e.charCodeAt(C);if(a===47){if(!n){I=C+1;break}}else o===-1&&(n=!1,o=C+1),r>=0&&(a===g.charCodeAt(r)?--r===-1&&(i=C):(r=-1,i=o))}return I===i?i=o:i===-1&&(i=e.length),e.slice(I,i)}for(C=e.length-1;C>=0;--C)if(e.charCodeAt(C)===47){if(!n){I=C+1;break}}else i===-1&&(n=!1,i=C+1);return i===-1?"":e.slice(I,i)},extname:function(e){fo(e),e=this.toPosix(e);for(var g=-1,I=0,i=-1,n=!0,C=0,r=e.length-1;r>=0;--r){var o=e.charCodeAt(r);if(o===47){if(!n){I=r+1;break}continue}i===-1&&(n=!1,i=r+1),o===46?g===-1?g=r:C!==1&&(C=1):g!==-1&&(C=-1)}return g===-1||i===-1||C===0||C===1&&g===i-1&&g===I+1?"":e.slice(g,i)},parse:function(e){fo(e);var g={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return g;e=this.toPosix(e);var I=e.charCodeAt(0),i=this.isAbsolute(e),n;g.root=this.rootname(e),i||this.hasProtocol(e)?n=1:n=0;for(var C=-1,r=0,o=-1,a=!0,s=e.length-1,A=0;s>=n;--s){if(I=e.charCodeAt(s),I===47){if(!a){r=s+1;break}continue}o===-1&&(a=!1,o=s+1),I===46?C===-1?C=s:A!==1&&(A=1):C!==-1&&(A=-1)}return C===-1||o===-1||A===0||A===1&&C===o-1&&C===r+1?o!==-1&&(r===0&&i?g.base=g.name=e.slice(1,o):g.base=g.name=e.slice(r,o)):(r===0&&i?(g.name=e.slice(1,C),g.base=e.slice(1,o)):(g.name=e.slice(r,C),g.base=e.slice(r,o)),g.ext=e.slice(C,o)),g.dir=this.dirname(e),g},sep:"/",delimiter:":"};Gt.RETINA_PREFIX=/@([0-9\.]+)x/;Gt.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var pM=!1,dee="6.5.10";function Nxe(){pM=!0}function _me(e){var g;if(!pM){if(Gt.ADAPTER.getNavigator().userAgent.toLowerCase().indexOf("chrome")>-1){var I=[` - %c %c %c PixiJS `+dee+" - ✰ "+e+` ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ + */var ad={parse:Yxe,format:Fxe,resolve:Kxe};function yo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function fee(e){var g=e.split("?")[0];return g.split("#")[0]}function Dxe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function xxe(e,g,i){return e.replace(new RegExp(Dxe(g),"g"),i)}function Exe(e,g){for(var i="",I=0,n=-1,r=0,C,o=0;o<=e.length;++o){if(o2){var a=i.lastIndexOf("/");if(a!==i.length-1){a===-1?(i="",I=0):(i=i.slice(0,a),I=i.length-1-i.lastIndexOf("/")),n=o,r=0;continue}}else if(i.length===2||i.length===1){i="",I=0,n=o,r=0;continue}}g&&(i.length>0?i+="/..":i="..",I=2)}else i.length>0?i+="/"+e.slice(n+1,o):i=e.slice(n+1,o),I=o-n-1;n=o,r=0}else C===46&&r!==-1?++r:r=-1}return i}var qme={toPosix:function(e){return xxe(e,"\\","/")},isUrl:function(e){return/^https?:/.test(this.toPosix(e))},isDataUrl:function(e){return/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(e)},hasProtocol:function(e){return/^[^/:]+:\//.test(this.toPosix(e))},getProtocol:function(e){yo(e),e=this.toPosix(e);var g="",i=/^file:\/\/\//.exec(e),I=/^[^/:]+:\/\//.exec(e),n=/^[^/:]+:\//.exec(e);if(i||I||n){var r=(i==null?void 0:i[0])||(I==null?void 0:I[0])||(n==null?void 0:n[0]);g=r,e=e.slice(r.length)}return g},toAbsolute:function(e,g,i){if(this.isDataUrl(e))return e;var I=fee(this.toPosix(g??Gt.ADAPTER.getBaseUrl())),n=fee(this.toPosix(i??this.rootname(I)));if(yo(e),e=this.toPosix(e),e.startsWith("/"))return qme.join(n,e.slice(1));var r=this.isAbsolute(e)?e:this.join(I,e);return r},normalize:function(e){if(e=this.toPosix(e),yo(e),e.length===0)return".";var g="",i=e.startsWith("/");this.hasProtocol(e)&&(g=this.rootname(e),e=e.slice(g.length));var I=e.endsWith("/");return e=Exe(e,!1),e.length>0&&I&&(e+="/"),i?"/"+e:g+e},isAbsolute:function(e){return yo(e),e=this.toPosix(e),this.hasProtocol(e)?!0:e.startsWith("/")},join:function(){for(var e=arguments,g,i=[],I=0;I0)if(n===void 0)n=C;else{var o=(g=i[r-1])!==null&&g!==void 0?g:"";this.extname(o)?n+="/../"+C:n+="/"+C}}return n===void 0?".":this.normalize(n)},dirname:function(e){if(yo(e),e.length===0)return".";e=this.toPosix(e);var g=e.charCodeAt(0),i=g===47,I=-1,n=!0,r=this.getProtocol(e),C=e;e=e.slice(r.length);for(var o=e.length-1;o>=1;--o)if(g=e.charCodeAt(o),g===47){if(!n){I=o;break}}else n=!1;return I===-1?i?"/":this.isUrl(C)?r+e:r:i&&I===1?"//":r+e.slice(0,I)},rootname:function(e){yo(e),e=this.toPosix(e);var g="";if(e.startsWith("/")?g="/":g=this.getProtocol(e),this.isUrl(e)){var i=e.indexOf("/",g.length);i!==-1?g=e.slice(0,i):g=e,g.endsWith("/")||(g+="/")}return g},basename:function(e,g){yo(e),g&&yo(g),e=this.toPosix(e);var i=0,I=-1,n=!0,r;if(g!==void 0&&g.length>0&&g.length<=e.length){if(g.length===e.length&&g===e)return"";var C=g.length-1,o=-1;for(r=e.length-1;r>=0;--r){var a=e.charCodeAt(r);if(a===47){if(!n){i=r+1;break}}else o===-1&&(n=!1,o=r+1),C>=0&&(a===g.charCodeAt(C)?--C===-1&&(I=r):(C=-1,I=o))}return i===I?I=o:I===-1&&(I=e.length),e.slice(i,I)}for(r=e.length-1;r>=0;--r)if(e.charCodeAt(r)===47){if(!n){i=r+1;break}}else I===-1&&(n=!1,I=r+1);return I===-1?"":e.slice(i,I)},extname:function(e){yo(e),e=this.toPosix(e);for(var g=-1,i=0,I=-1,n=!0,r=0,C=e.length-1;C>=0;--C){var o=e.charCodeAt(C);if(o===47){if(!n){i=C+1;break}continue}I===-1&&(n=!1,I=C+1),o===46?g===-1?g=C:r!==1&&(r=1):g!==-1&&(r=-1)}return g===-1||I===-1||r===0||r===1&&g===I-1&&g===i+1?"":e.slice(g,I)},parse:function(e){yo(e);var g={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return g;e=this.toPosix(e);var i=e.charCodeAt(0),I=this.isAbsolute(e),n;g.root=this.rootname(e),I||this.hasProtocol(e)?n=1:n=0;for(var r=-1,C=0,o=-1,a=!0,s=e.length-1,A=0;s>=n;--s){if(i=e.charCodeAt(s),i===47){if(!a){C=s+1;break}continue}o===-1&&(a=!1,o=s+1),i===46?r===-1?r=s:A!==1&&(A=1):r!==-1&&(A=-1)}return r===-1||o===-1||A===0||A===1&&r===o-1&&r===C+1?o!==-1&&(C===0&&I?g.base=g.name=e.slice(1,o):g.base=g.name=e.slice(C,o)):(C===0&&I?(g.name=e.slice(1,r),g.base=e.slice(1,o)):(g.name=e.slice(C,r),g.base=e.slice(C,o)),g.ext=e.slice(r,o)),g.dir=this.dirname(e),g},sep:"/",delimiter:":"};Gt.RETINA_PREFIX=/@([0-9\.]+)x/;Gt.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var BM=!1,pee="6.5.10";function Mxe(){BM=!0}function efe(e){var g;if(!BM){if(Gt.ADAPTER.getNavigator().userAgent.toLowerCase().indexOf("chrome")>-1){var i=[` + %c %c %c PixiJS `+pee+" - ✰ "+e+` ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ -`,"background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];(g=globalThis.console).log.apply(g,I)}else globalThis.console&&globalThis.console.log("PixiJS "+dee+" - "+e+" - http://www.pixijs.com/");pM=!0}}var YK;function Lme(){return typeof YK>"u"&&(YK=function(){var g={stencil:!0,failIfMajorPerformanceCaveat:Gt.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!Gt.ADAPTER.getWebGLRenderingContext())return!1;var I=Gt.ADAPTER.createCanvas(),i=I.getContext("webgl",g)||I.getContext("experimental-webgl",g),n=!!(i&&i.getContextAttributes().stencil);if(i){var C=i.getExtension("WEBGL_lose_context");C&&C.loseContext()}return i=null,n}catch{return!1}}()),YK}var kxe="#f0f8ff",Yxe="#faebd7",Kxe="#00ffff",Fxe="#7fffd4",Dxe="#f0ffff",xxe="#f5f5dc",Exe="#ffe4c4",Mxe="#000000",zxe="#ffebcd",Pxe="#0000ff",Jxe="#8a2be2",Oxe="#a52a2a",_xe="#deb887",Lxe="#5f9ea0",Uxe="#7fff00",Qxe="#d2691e",jxe="#ff7f50",$xe="#6495ed",qxe="#fff8dc",eEe="#dc143c",tEe="#00ffff",gEe="#00008b",IEe="#008b8b",iEe="#b8860b",nEe="#a9a9a9",CEe="#006400",rEe="#a9a9a9",oEe="#bdb76b",aEe="#8b008b",AEe="#556b2f",sEe="#ff8c00",lEe="#9932cc",cEe="#8b0000",uEe="#e9967a",dEe="#8fbc8f",hEe="#483d8b",mEe="#2f4f4f",fEe="#2f4f4f",pEe="#00ced1",bEe="#9400d3",yEe="#ff1493",ZEe="#00bfff",GEe="#696969",vEe="#696969",BEe="#1e90ff",SEe="#b22222",wEe="#fffaf0",REe="#228b22",VEe="#ff00ff",WEe="#dcdcdc",XEe="#f8f8ff",HEe="#daa520",TEe="#ffd700",NEe="#808080",kEe="#008000",YEe="#adff2f",KEe="#808080",FEe="#f0fff0",DEe="#ff69b4",xEe="#cd5c5c",EEe="#4b0082",MEe="#fffff0",zEe="#f0e68c",PEe="#fff0f5",JEe="#e6e6fa",OEe="#7cfc00",_Ee="#fffacd",LEe="#add8e6",UEe="#f08080",QEe="#e0ffff",jEe="#fafad2",$Ee="#d3d3d3",qEe="#90ee90",eMe="#d3d3d3",tMe="#ffb6c1",gMe="#ffa07a",IMe="#20b2aa",iMe="#87cefa",nMe="#778899",CMe="#778899",rMe="#b0c4de",oMe="#ffffe0",aMe="#00ff00",AMe="#32cd32",sMe="#faf0e6",lMe="#ff00ff",cMe="#800000",uMe="#66cdaa",dMe="#0000cd",hMe="#ba55d3",mMe="#9370db",fMe="#3cb371",pMe="#7b68ee",bMe="#00fa9a",yMe="#48d1cc",ZMe="#c71585",GMe="#191970",vMe="#f5fffa",BMe="#ffe4e1",SMe="#ffe4b5",wMe="#ffdead",RMe="#000080",VMe="#fdf5e6",WMe="#808000",XMe="#6b8e23",HMe="#ffa500",TMe="#ff4500",NMe="#da70d6",kMe="#eee8aa",YMe="#98fb98",KMe="#afeeee",FMe="#db7093",DMe="#ffefd5",xMe="#ffdab9",EMe="#cd853f",MMe="#ffc0cb",zMe="#dda0dd",PMe="#b0e0e6",JMe="#800080",OMe="#663399",_Me="#ff0000",LMe="#bc8f8f",UMe="#4169e1",QMe="#8b4513",jMe="#fa8072",$Me="#f4a460",qMe="#2e8b57",e3e="#fff5ee",t3e="#a0522d",g3e="#c0c0c0",I3e="#87ceeb",i3e="#6a5acd",n3e="#708090",C3e="#708090",r3e="#fffafa",o3e="#00ff7f",a3e="#4682b4",A3e="#d2b48c",s3e="#008080",l3e="#d8bfd8",c3e="#ff6347",u3e="#40e0d0",d3e="#ee82ee",h3e="#f5deb3",m3e="#ffffff",f3e="#f5f5f5",p3e="#ffff00",b3e="#9acd32",y3e={aliceblue:kxe,antiquewhite:Yxe,aqua:Kxe,aquamarine:Fxe,azure:Dxe,beige:xxe,bisque:Exe,black:Mxe,blanchedalmond:zxe,blue:Pxe,blueviolet:Jxe,brown:Oxe,burlywood:_xe,cadetblue:Lxe,chartreuse:Uxe,chocolate:Qxe,coral:jxe,cornflowerblue:$xe,cornsilk:qxe,crimson:eEe,cyan:tEe,darkblue:gEe,darkcyan:IEe,darkgoldenrod:iEe,darkgray:nEe,darkgreen:CEe,darkgrey:rEe,darkkhaki:oEe,darkmagenta:aEe,darkolivegreen:AEe,darkorange:sEe,darkorchid:lEe,darkred:cEe,darksalmon:uEe,darkseagreen:dEe,darkslateblue:hEe,darkslategray:mEe,darkslategrey:fEe,darkturquoise:pEe,darkviolet:bEe,deeppink:yEe,deepskyblue:ZEe,dimgray:GEe,dimgrey:vEe,dodgerblue:BEe,firebrick:SEe,floralwhite:wEe,forestgreen:REe,fuchsia:VEe,gainsboro:WEe,ghostwhite:XEe,goldenrod:HEe,gold:TEe,gray:NEe,green:kEe,greenyellow:YEe,grey:KEe,honeydew:FEe,hotpink:DEe,indianred:xEe,indigo:EEe,ivory:MEe,khaki:zEe,lavenderblush:PEe,lavender:JEe,lawngreen:OEe,lemonchiffon:_Ee,lightblue:LEe,lightcoral:UEe,lightcyan:QEe,lightgoldenrodyellow:jEe,lightgray:$Ee,lightgreen:qEe,lightgrey:eMe,lightpink:tMe,lightsalmon:gMe,lightseagreen:IMe,lightskyblue:iMe,lightslategray:nMe,lightslategrey:CMe,lightsteelblue:rMe,lightyellow:oMe,lime:aMe,limegreen:AMe,linen:sMe,magenta:lMe,maroon:cMe,mediumaquamarine:uMe,mediumblue:dMe,mediumorchid:hMe,mediumpurple:mMe,mediumseagreen:fMe,mediumslateblue:pMe,mediumspringgreen:bMe,mediumturquoise:yMe,mediumvioletred:ZMe,midnightblue:GMe,mintcream:vMe,mistyrose:BMe,moccasin:SMe,navajowhite:wMe,navy:RMe,oldlace:VMe,olive:WMe,olivedrab:XMe,orange:HMe,orangered:TMe,orchid:NMe,palegoldenrod:kMe,palegreen:YMe,paleturquoise:KMe,palevioletred:FMe,papayawhip:DMe,peachpuff:xMe,peru:EMe,pink:MMe,plum:zMe,powderblue:PMe,purple:JMe,rebeccapurple:OMe,red:_Me,rosybrown:LMe,royalblue:UMe,saddlebrown:QMe,salmon:jMe,sandybrown:$Me,seagreen:qMe,seashell:e3e,sienna:t3e,silver:g3e,skyblue:I3e,slateblue:i3e,slategray:n3e,slategrey:C3e,snow:r3e,springgreen:o3e,steelblue:a3e,tan:A3e,teal:s3e,thistle:l3e,tomato:c3e,turquoise:u3e,violet:d3e,wheat:h3e,white:m3e,whitesmoke:f3e,yellow:p3e,yellowgreen:b3e};function Ld(e,g){return g===void 0&&(g=[]),g[0]=(e>>16&255)/255,g[1]=(e>>8&255)/255,g[2]=(e&255)/255,g}function iU(e){var g=e.toString(16);return g="000000".substring(0,6-g.length)+g,"#"+g}function nU(e){return typeof e=="string"&&(e=y3e[e.toLowerCase()]||e,e[0]==="#"&&(e=e.slice(1))),parseInt(e,16)}function Ume(e){return(e[0]*255<<16)+(e[1]*255<<8)+(e[2]*255|0)}function Z3e(){for(var e=[],g=[],I=0;I<32;I++)e[I]=I,g[I]=I;e[Jt.NORMAL_NPM]=Jt.NORMAL,e[Jt.ADD_NPM]=Jt.ADD,e[Jt.SCREEN_NPM]=Jt.SCREEN,g[Jt.NORMAL]=Jt.NORMAL_NPM,g[Jt.ADD]=Jt.ADD_NPM,g[Jt.SCREEN]=Jt.SCREEN_NPM;var i=[];return i.push(g),i.push(e),i}var CU=Z3e();function rU(e,g){return CU[g?1:0][e]}function Qme(e,g,I,i){return I=I||new Float32Array(4),i||i===void 0?(I[0]=e[0]*g,I[1]=e[1]*g,I[2]=e[2]*g):(I[0]=e[0],I[1]=e[1],I[2]=e[2]),I[3]=g,I}function mT(e,g){if(g===1)return(g*255<<24)+e;if(g===0)return 0;var I=e>>16&255,i=e>>8&255,n=e&255;return I=I*g+.5|0,i=i*g+.5|0,n=n*g+.5|0,(g*255<<24)+(I<<16)+(i<<8)+n}function oU(e,g,I,i){return I=I||new Float32Array(4),I[0]=(e>>16&255)/255,I[1]=(e>>8&255)/255,I[2]=(e&255)/255,(i||i===void 0)&&(I[0]*=g,I[1]*=g,I[2]*=g),I[3]=g,I}function jme(e,g){g===void 0&&(g=null);var I=e*6;if(g=g||new Uint16Array(I),g.length!==I)throw new Error("Out buffer length is incorrect, got "+g.length+" and expected "+I);for(var i=0,n=0;i>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1}function bM(e){return!(e&e-1)&&!!e}function yM(e){var g=(e>65535?1:0)<<4;e>>>=g;var I=(e>255?1:0)<<3;return e>>>=I,g|=I,I=(e>15?1:0)<<2,e>>>=I,g|=I,I=(e>3?1:0)<<1,e>>>=I,g|=I,g|e>>1}function Rd(e,g,I){var i=e.length,n;if(!(g>=i||I===0)){I=g+I>i?i-g:I;var C=i-I;for(n=g;n"u"?console.warn("PixiJS Deprecation Warning: ",g+` -Deprecated since v`+e):(i=i.split(` -`).splice(I).join(` +`,"background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];(g=globalThis.console).log.apply(g,i)}else globalThis.console&&globalThis.console.log("PixiJS "+pee+" - "+e+" - http://www.pixijs.com/");BM=!0}}var MK;function tfe(){return typeof MK>"u"&&(MK=function(){var g={stencil:!0,failIfMajorPerformanceCaveat:Gt.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!Gt.ADAPTER.getWebGLRenderingContext())return!1;var i=Gt.ADAPTER.createCanvas(),I=i.getContext("webgl",g)||i.getContext("experimental-webgl",g),n=!!(I&&I.getContextAttributes().stencil);if(I){var r=I.getExtension("WEBGL_lose_context");r&&r.loseContext()}return I=null,n}catch{return!1}}()),MK}var zxe="#f0f8ff",Pxe="#faebd7",Jxe="#00ffff",Oxe="#7fffd4",_xe="#f0ffff",Lxe="#f5f5dc",Uxe="#ffe4c4",Qxe="#000000",jxe="#ffebcd",$xe="#0000ff",qxe="#8a2be2",eEe="#a52a2a",tEe="#deb887",gEe="#5f9ea0",iEe="#7fff00",IEe="#d2691e",nEe="#ff7f50",rEe="#6495ed",CEe="#fff8dc",oEe="#dc143c",aEe="#00ffff",AEe="#00008b",sEe="#008b8b",lEe="#b8860b",cEe="#a9a9a9",uEe="#006400",dEe="#a9a9a9",hEe="#bdb76b",mEe="#8b008b",fEe="#556b2f",pEe="#ff8c00",bEe="#9932cc",yEe="#8b0000",ZEe="#e9967a",GEe="#8fbc8f",vEe="#483d8b",BEe="#2f4f4f",SEe="#2f4f4f",wEe="#00ced1",REe="#9400d3",VEe="#ff1493",WEe="#00bfff",XEe="#696969",HEe="#696969",TEe="#1e90ff",NEe="#b22222",kEe="#fffaf0",YEe="#228b22",KEe="#ff00ff",FEe="#dcdcdc",DEe="#f8f8ff",xEe="#daa520",EEe="#ffd700",MEe="#808080",zEe="#008000",PEe="#adff2f",JEe="#808080",OEe="#f0fff0",_Ee="#ff69b4",LEe="#cd5c5c",UEe="#4b0082",QEe="#fffff0",jEe="#f0e68c",$Ee="#fff0f5",qEe="#e6e6fa",eMe="#7cfc00",tMe="#fffacd",gMe="#add8e6",iMe="#f08080",IMe="#e0ffff",nMe="#fafad2",rMe="#d3d3d3",CMe="#90ee90",oMe="#d3d3d3",aMe="#ffb6c1",AMe="#ffa07a",sMe="#20b2aa",lMe="#87cefa",cMe="#778899",uMe="#778899",dMe="#b0c4de",hMe="#ffffe0",mMe="#00ff00",fMe="#32cd32",pMe="#faf0e6",bMe="#ff00ff",yMe="#800000",ZMe="#66cdaa",GMe="#0000cd",vMe="#ba55d3",BMe="#9370db",SMe="#3cb371",wMe="#7b68ee",RMe="#00fa9a",VMe="#48d1cc",WMe="#c71585",XMe="#191970",HMe="#f5fffa",TMe="#ffe4e1",NMe="#ffe4b5",kMe="#ffdead",YMe="#000080",KMe="#fdf5e6",FMe="#808000",DMe="#6b8e23",xMe="#ffa500",EMe="#ff4500",MMe="#da70d6",zMe="#eee8aa",PMe="#98fb98",JMe="#afeeee",OMe="#db7093",_Me="#ffefd5",LMe="#ffdab9",UMe="#cd853f",QMe="#ffc0cb",jMe="#dda0dd",$Me="#b0e0e6",qMe="#800080",e3e="#663399",t3e="#ff0000",g3e="#bc8f8f",i3e="#4169e1",I3e="#8b4513",n3e="#fa8072",r3e="#f4a460",C3e="#2e8b57",o3e="#fff5ee",a3e="#a0522d",A3e="#c0c0c0",s3e="#87ceeb",l3e="#6a5acd",c3e="#708090",u3e="#708090",d3e="#fffafa",h3e="#00ff7f",m3e="#4682b4",f3e="#d2b48c",p3e="#008080",b3e="#d8bfd8",y3e="#ff6347",Z3e="#40e0d0",G3e="#ee82ee",v3e="#f5deb3",B3e="#ffffff",S3e="#f5f5f5",w3e="#ffff00",R3e="#9acd32",V3e={aliceblue:zxe,antiquewhite:Pxe,aqua:Jxe,aquamarine:Oxe,azure:_xe,beige:Lxe,bisque:Uxe,black:Qxe,blanchedalmond:jxe,blue:$xe,blueviolet:qxe,brown:eEe,burlywood:tEe,cadetblue:gEe,chartreuse:iEe,chocolate:IEe,coral:nEe,cornflowerblue:rEe,cornsilk:CEe,crimson:oEe,cyan:aEe,darkblue:AEe,darkcyan:sEe,darkgoldenrod:lEe,darkgray:cEe,darkgreen:uEe,darkgrey:dEe,darkkhaki:hEe,darkmagenta:mEe,darkolivegreen:fEe,darkorange:pEe,darkorchid:bEe,darkred:yEe,darksalmon:ZEe,darkseagreen:GEe,darkslateblue:vEe,darkslategray:BEe,darkslategrey:SEe,darkturquoise:wEe,darkviolet:REe,deeppink:VEe,deepskyblue:WEe,dimgray:XEe,dimgrey:HEe,dodgerblue:TEe,firebrick:NEe,floralwhite:kEe,forestgreen:YEe,fuchsia:KEe,gainsboro:FEe,ghostwhite:DEe,goldenrod:xEe,gold:EEe,gray:MEe,green:zEe,greenyellow:PEe,grey:JEe,honeydew:OEe,hotpink:_Ee,indianred:LEe,indigo:UEe,ivory:QEe,khaki:jEe,lavenderblush:$Ee,lavender:qEe,lawngreen:eMe,lemonchiffon:tMe,lightblue:gMe,lightcoral:iMe,lightcyan:IMe,lightgoldenrodyellow:nMe,lightgray:rMe,lightgreen:CMe,lightgrey:oMe,lightpink:aMe,lightsalmon:AMe,lightseagreen:sMe,lightskyblue:lMe,lightslategray:cMe,lightslategrey:uMe,lightsteelblue:dMe,lightyellow:hMe,lime:mMe,limegreen:fMe,linen:pMe,magenta:bMe,maroon:yMe,mediumaquamarine:ZMe,mediumblue:GMe,mediumorchid:vMe,mediumpurple:BMe,mediumseagreen:SMe,mediumslateblue:wMe,mediumspringgreen:RMe,mediumturquoise:VMe,mediumvioletred:WMe,midnightblue:XMe,mintcream:HMe,mistyrose:TMe,moccasin:NMe,navajowhite:kMe,navy:YMe,oldlace:KMe,olive:FMe,olivedrab:DMe,orange:xMe,orangered:EMe,orchid:MMe,palegoldenrod:zMe,palegreen:PMe,paleturquoise:JMe,palevioletred:OMe,papayawhip:_Me,peachpuff:LMe,peru:UMe,pink:QMe,plum:jMe,powderblue:$Me,purple:qMe,rebeccapurple:e3e,red:t3e,rosybrown:g3e,royalblue:i3e,saddlebrown:I3e,salmon:n3e,sandybrown:r3e,seagreen:C3e,seashell:o3e,sienna:a3e,silver:A3e,skyblue:s3e,slateblue:l3e,slategray:c3e,slategrey:u3e,snow:d3e,springgreen:h3e,steelblue:m3e,tan:f3e,teal:p3e,thistle:b3e,tomato:y3e,turquoise:Z3e,violet:G3e,wheat:v3e,white:B3e,whitesmoke:S3e,yellow:w3e,yellowgreen:R3e};function Ud(e,g){return g===void 0&&(g=[]),g[0]=(e>>16&255)/255,g[1]=(e>>8&255)/255,g[2]=(e&255)/255,g}function AU(e){var g=e.toString(16);return g="000000".substring(0,6-g.length)+g,"#"+g}function sU(e){return typeof e=="string"&&(e=V3e[e.toLowerCase()]||e,e[0]==="#"&&(e=e.slice(1))),parseInt(e,16)}function gfe(e){return(e[0]*255<<16)+(e[1]*255<<8)+(e[2]*255|0)}function W3e(){for(var e=[],g=[],i=0;i<32;i++)e[i]=i,g[i]=i;e[Jt.NORMAL_NPM]=Jt.NORMAL,e[Jt.ADD_NPM]=Jt.ADD,e[Jt.SCREEN_NPM]=Jt.SCREEN,g[Jt.NORMAL]=Jt.NORMAL_NPM,g[Jt.ADD]=Jt.ADD_NPM,g[Jt.SCREEN]=Jt.SCREEN_NPM;var I=[];return I.push(g),I.push(e),I}var lU=W3e();function cU(e,g){return lU[g?1:0][e]}function ife(e,g,i,I){return i=i||new Float32Array(4),I||I===void 0?(i[0]=e[0]*g,i[1]=e[1]*g,i[2]=e[2]*g):(i[0]=e[0],i[1]=e[1],i[2]=e[2]),i[3]=g,i}function GT(e,g){if(g===1)return(g*255<<24)+e;if(g===0)return 0;var i=e>>16&255,I=e>>8&255,n=e&255;return i=i*g+.5|0,I=I*g+.5|0,n=n*g+.5|0,(g*255<<24)+(i<<16)+(I<<8)+n}function uU(e,g,i,I){return i=i||new Float32Array(4),i[0]=(e>>16&255)/255,i[1]=(e>>8&255)/255,i[2]=(e&255)/255,(I||I===void 0)&&(i[0]*=g,i[1]*=g,i[2]*=g),i[3]=g,i}function Ife(e,g){g===void 0&&(g=null);var i=e*6;if(g=g||new Uint16Array(i),g.length!==i)throw new Error("Out buffer length is incorrect, got "+g.length+" and expected "+i);for(var I=0,n=0;I>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1}function SM(e){return!(e&e-1)&&!!e}function wM(e){var g=(e>65535?1:0)<<4;e>>>=g;var i=(e>255?1:0)<<3;return e>>>=i,g|=i,i=(e>15?1:0)<<2,e>>>=i,g|=i,i=(e>3?1:0)<<1,e>>>=i,g|=i,g|e>>1}function Vd(e,g,i){var I=e.length,n;if(!(g>=I||i===0)){i=g+i>I?I-g:i;var r=I-i;for(n=g;n"u"?console.warn("PixiJS Deprecation Warning: ",g+` +Deprecated since v`+e):(I=I.split(` +`).splice(i).join(` `),console.groupCollapsed?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",g+` -Deprecated since v`+e),console.warn(i),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",g+` -Deprecated since v`+e),console.warn(i))),hee[g]=!0}}var ZM={},wC=Object.create(null),kr=Object.create(null);function S3e(){var e;for(e in wC)wC[e].destroy();for(e in kr)kr[e].destroy()}function w3e(){var e;for(e in wC)delete wC[e];for(e in kr)delete kr[e]}var GM=function(){function e(g,I,i){this.canvas=Gt.ADAPTER.createCanvas(),this.context=this.canvas.getContext("2d"),this.resolution=i||Gt.RESOLUTION,this.resize(g,I)}return e.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},e.prototype.resize=function(g,I){this.canvas.width=Math.round(g*this.resolution),this.canvas.height=Math.round(I*this.resolution)},e.prototype.destroy=function(){this.context=null,this.canvas=null},Object.defineProperty(e.prototype,"width",{get:function(){return this.canvas.width},set:function(g){this.canvas.width=Math.round(g)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.canvas.height},set:function(g){this.canvas.height=Math.round(g)},enumerable:!1,configurable:!0}),e}();function $me(e){var g=e.width,I=e.height,i=e.getContext("2d",{willReadFrequently:!0}),n=i.getImageData(0,0,g,I),C=n.data,r=C.length,o={top:null,left:null,right:null,bottom:null},a=null,s,A,l;for(s=0;s=this.x&&g=this.y&&Ig.right?g.right:this.right;if(n<=i)return!1;var C=this.yg.bottom?g.bottom:this.bottom;return r>C}var o=this.left,a=this.right,s=this.top,A=this.bottom;if(a<=o||A<=s)return!1;var l=vR[0].set(g.left,g.top),c=vR[1].set(g.left,g.bottom),u=vR[2].set(g.right,g.top),d=vR[3].set(g.right,g.bottom);if(u.x<=l.x||c.y<=l.y)return!1;var h=Math.sign(I.a*I.d-I.b*I.c);if(h===0||(I.apply(l,l),I.apply(c,c),I.apply(u,u),I.apply(d,d),Math.max(l.x,c.x,u.x,d.x)<=o||Math.min(l.x,c.x,u.x,d.x)>=a||Math.max(l.y,c.y,u.y,d.y)<=s||Math.min(l.y,c.y,u.y,d.y)>=A))return!1;var m=h*(c.y-l.y),f=h*(l.x-c.x),b=m*o+f*s,p=m*a+f*s,y=m*o+f*A,Z=m*a+f*A;if(Math.max(b,p,y,Z)<=m*l.x+f*l.y||Math.min(b,p,y,Z)>=m*d.x+f*d.y)return!1;var B=h*(l.y-u.y),G=h*(u.x-l.x),v=B*o+G*s,w=B*a+G*s,R=B*o+G*A,S=B*a+G*A;return!(Math.max(v,w,R,S)<=B*l.x+G*l.y||Math.min(v,w,R,S)>=B*d.x+G*d.y)},e.prototype.pad=function(g,I){return g===void 0&&(g=0),I===void 0&&(I=g),this.x-=g,this.y-=I,this.width+=g*2,this.height+=I*2,this},e.prototype.fit=function(g){var I=Math.max(this.x,g.x),i=Math.min(this.x+this.width,g.x+g.width),n=Math.max(this.y,g.y),C=Math.min(this.y+this.height,g.y+g.height);return this.x=I,this.width=Math.max(i-I,0),this.y=n,this.height=Math.max(C-n,0),this},e.prototype.ceil=function(g,I){g===void 0&&(g=1),I===void 0&&(I=.001);var i=Math.ceil((this.x+this.width-I)*g)/g,n=Math.ceil((this.y+this.height-I)*g)/g;return this.x=Math.floor((this.x+I)*g)/g,this.y=Math.floor((this.y+I)*g)/g,this.width=i-this.x,this.height=n-this.y,this},e.prototype.enlarge=function(g){var I=Math.min(this.x,g.x),i=Math.max(this.x+this.width,g.x+g.width),n=Math.min(this.y,g.y),C=Math.max(this.y+this.height,g.y+g.height);return this.x=I,this.width=i-I,this.y=n,this.height=C-n,this},e.prototype.toString=function(){return"[@pixi/math:Rectangle x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},e}(),Ife=function(){function e(g,I,i){g===void 0&&(g=0),I===void 0&&(I=0),i===void 0&&(i=0),this.x=g,this.y=I,this.radius=i,this.type=Xi.CIRC}return e.prototype.clone=function(){return new e(this.x,this.y,this.radius)},e.prototype.contains=function(g,I){if(this.radius<=0)return!1;var i=this.radius*this.radius,n=this.x-g,C=this.y-I;return n*=n,C*=C,n+C<=i},e.prototype.getBounds=function(){return new wg(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)},e.prototype.toString=function(){return"[@pixi/math:Circle x="+this.x+" y="+this.y+" radius="+this.radius+"]"},e}(),ife=function(){function e(g,I,i,n){g===void 0&&(g=0),I===void 0&&(I=0),i===void 0&&(i=0),n===void 0&&(n=0),this.x=g,this.y=I,this.width=i,this.height=n,this.type=Xi.ELIP}return e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.contains=function(g,I){if(this.width<=0||this.height<=0)return!1;var i=(g-this.x)/this.width,n=(I-this.y)/this.height;return i*=i,n*=n,i+n<=1},e.prototype.getBounds=function(){return new wg(this.x-this.width,this.y-this.height,this.width,this.height)},e.prototype.toString=function(){return"[@pixi/math:Ellipse x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},e}(),DG=function(){function e(){for(var g=arguments,I=[],i=0;iI!=A>I&&g<(s-o)*((I-a)/(A-a))+o;l&&(i=!i)}return i},e.prototype.toString=function(){return"[@pixi/math:Polygon"+("closeStroke="+this.closeStroke)+("points="+this.points.reduce(function(g,I){return g+", "+I},"")+"]")},e}(),nfe=function(){function e(g,I,i,n,C){g===void 0&&(g=0),I===void 0&&(I=0),i===void 0&&(i=0),n===void 0&&(n=0),C===void 0&&(C=20),this.x=g,this.y=I,this.width=i,this.height=n,this.radius=C,this.type=Xi.RREC}return e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height,this.radius)},e.prototype.contains=function(g,I){if(this.width<=0||this.height<=0)return!1;if(g>=this.x&&g<=this.x+this.width&&I>=this.y&&I<=this.y+this.height){var i=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(I>=this.y+i&&I<=this.y+this.height-i||g>=this.x+i&&g<=this.x+this.width-i)return!0;var n=g-(this.x+i),C=I-(this.y+i),r=i*i;if(n*n+C*C<=r||(n=g-(this.x+this.width-i),n*n+C*C<=r)||(C=I-(this.y+this.height-i),n*n+C*C<=r)||(n=g-(this.x+i),n*n+C*C<=r))return!0}return!1},e.prototype.toString=function(){return"[@pixi/math:RoundedRectangle x="+this.x+" y="+this.y+("width="+this.width+" height="+this.height+" radius="+this.radius+"]")},e}(),Ad=function(){function e(g,I,i,n){i===void 0&&(i=0),n===void 0&&(n=0),this._x=i,this._y=n,this.cb=g,this.scope=I}return e.prototype.clone=function(g,I){return g===void 0&&(g=this.cb),I===void 0&&(I=this.scope),new e(g,I,this._x,this._y)},e.prototype.set=function(g,I){return g===void 0&&(g=0),I===void 0&&(I=g),(this._x!==g||this._y!==I)&&(this._x=g,this._y=I,this.cb.call(this.scope)),this},e.prototype.copyFrom=function(g){return(this._x!==g.x||this._y!==g.y)&&(this._x=g.x,this._y=g.y,this.cb.call(this.scope)),this},e.prototype.copyTo=function(g){return g.set(this._x,this._y),g},e.prototype.equals=function(g){return g.x===this._x&&g.y===this._y},e.prototype.toString=function(){return"[@pixi/math:ObservablePoint x=0 y=0 scope="+this.scope+"]"},Object.defineProperty(e.prototype,"x",{get:function(){return this._x},set:function(g){this._x!==g&&(this._x=g,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"y",{get:function(){return this._y},set:function(g){this._y!==g&&(this._y=g,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),e}(),Zi=function(){function e(g,I,i,n,C,r){g===void 0&&(g=1),I===void 0&&(I=0),i===void 0&&(i=0),n===void 0&&(n=1),C===void 0&&(C=0),r===void 0&&(r=0),this.array=null,this.a=g,this.b=I,this.c=i,this.d=n,this.tx=C,this.ty=r}return e.prototype.fromArray=function(g){this.a=g[0],this.b=g[1],this.c=g[3],this.d=g[4],this.tx=g[2],this.ty=g[5]},e.prototype.set=function(g,I,i,n,C,r){return this.a=g,this.b=I,this.c=i,this.d=n,this.tx=C,this.ty=r,this},e.prototype.toArray=function(g,I){this.array||(this.array=new Float32Array(9));var i=I||this.array;return g?(i[0]=this.a,i[1]=this.b,i[2]=0,i[3]=this.c,i[4]=this.d,i[5]=0,i[6]=this.tx,i[7]=this.ty,i[8]=1):(i[0]=this.a,i[1]=this.c,i[2]=this.tx,i[3]=this.b,i[4]=this.d,i[5]=this.ty,i[6]=0,i[7]=0,i[8]=1),i},e.prototype.apply=function(g,I){I=I||new aI;var i=g.x,n=g.y;return I.x=this.a*i+this.c*n+this.tx,I.y=this.b*i+this.d*n+this.ty,I},e.prototype.applyInverse=function(g,I){I=I||new aI;var i=1/(this.a*this.d+this.c*-this.b),n=g.x,C=g.y;return I.x=this.d*i*n+-this.c*i*C+(this.ty*this.c-this.tx*this.d)*i,I.y=this.a*i*C+-this.b*i*n+(-this.ty*this.a+this.tx*this.b)*i,I},e.prototype.translate=function(g,I){return this.tx+=g,this.ty+=I,this},e.prototype.scale=function(g,I){return this.a*=g,this.d*=I,this.c*=g,this.b*=I,this.tx*=g,this.ty*=I,this},e.prototype.rotate=function(g){var I=Math.cos(g),i=Math.sin(g),n=this.a,C=this.c,r=this.tx;return this.a=n*I-this.b*i,this.b=n*i+this.b*I,this.c=C*I-this.d*i,this.d=C*i+this.d*I,this.tx=r*I-this.ty*i,this.ty=r*i+this.ty*I,this},e.prototype.append=function(g){var I=this.a,i=this.b,n=this.c,C=this.d;return this.a=g.a*I+g.b*n,this.b=g.a*i+g.b*C,this.c=g.c*I+g.d*n,this.d=g.c*i+g.d*C,this.tx=g.tx*I+g.ty*n+this.tx,this.ty=g.tx*i+g.ty*C+this.ty,this},e.prototype.setTransform=function(g,I,i,n,C,r,o,a,s){return this.a=Math.cos(o+s)*C,this.b=Math.sin(o+s)*C,this.c=-Math.sin(o-a)*r,this.d=Math.cos(o-a)*r,this.tx=g-(i*this.a+n*this.c),this.ty=I-(i*this.b+n*this.d),this},e.prototype.prepend=function(g){var I=this.tx;if(g.a!==1||g.b!==0||g.c!==0||g.d!==1){var i=this.a,n=this.c;this.a=i*g.a+this.b*g.c,this.b=i*g.b+this.b*g.d,this.c=n*g.a+this.d*g.c,this.d=n*g.b+this.d*g.d}return this.tx=I*g.a+this.ty*g.c+g.tx,this.ty=I*g.b+this.ty*g.d+g.ty,this},e.prototype.decompose=function(g){var I=this.a,i=this.b,n=this.c,C=this.d,r=g.pivot,o=-Math.atan2(-n,C),a=Math.atan2(i,I),s=Math.abs(o+a);return s<1e-5||Math.abs(dB-s)<1e-5?(g.rotation=a,g.skew.x=g.skew.y=0):(g.rotation=0,g.skew.x=o,g.skew.y=a),g.scale.x=Math.sqrt(I*I+i*i),g.scale.y=Math.sqrt(n*n+C*C),g.position.x=this.tx+(r.x*I+r.y*n),g.position.y=this.ty+(r.x*i+r.y*C),g},e.prototype.invert=function(){var g=this.a,I=this.b,i=this.c,n=this.d,C=this.tx,r=g*n-I*i;return this.a=n/r,this.b=-I/r,this.c=-i/r,this.d=g/r,this.tx=(i*this.ty-n*C)/r,this.ty=-(g*this.ty-I*C)/r,this},e.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},e.prototype.clone=function(){var g=new e;return g.a=this.a,g.b=this.b,g.c=this.c,g.d=this.d,g.tx=this.tx,g.ty=this.ty,g},e.prototype.copyTo=function(g){return g.a=this.a,g.b=this.b,g.c=this.c,g.d=this.d,g.tx=this.tx,g.ty=this.ty,g},e.prototype.copyFrom=function(g){return this.a=g.a,this.b=g.b,this.c=g.c,this.d=g.d,this.tx=g.tx,this.ty=g.ty,this},e.prototype.toString=function(){return"[@pixi/math:Matrix a="+this.a+" b="+this.b+" c="+this.c+" d="+this.d+" tx="+this.tx+" ty="+this.ty+"]"},Object.defineProperty(e,"IDENTITY",{get:function(){return new e},enumerable:!1,configurable:!0}),Object.defineProperty(e,"TEMP_MATRIX",{get:function(){return new e},enumerable:!1,configurable:!0}),e}(),zu=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],Pu=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],Ju=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],Ou=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],vM=[],Cfe=[],BR=Math.sign;function W3e(){for(var e=0;e<16;e++){var g=[];vM.push(g);for(var I=0;I<16;I++)for(var i=BR(zu[e]*zu[I]+Ju[e]*Pu[I]),n=BR(Pu[e]*zu[I]+Ou[e]*Pu[I]),C=BR(zu[e]*Ju[I]+Ju[e]*Ou[I]),r=BR(Pu[e]*Ju[I]+Ou[e]*Ou[I]),o=0;o<16;o++)if(zu[o]===i&&Pu[o]===n&&Ju[o]===C&&Ou[o]===r){g.push(o);break}}for(var e=0;e<16;e++){var a=new Zi;a.set(zu[e],Pu[e],Ju[e],Ou[e],0,0),Cfe.push(a)}}W3e();var wI={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:function(e){return zu[e]},uY:function(e){return Pu[e]},vX:function(e){return Ju[e]},vY:function(e){return Ou[e]},inv:function(e){return e&8?e&15:-e&7},add:function(e,g){return vM[e][g]},sub:function(e,g){return vM[e][wI.inv(g)]},rotate180:function(e){return e^4},isVertical:function(e){return(e&3)===2},byDirection:function(e,g){return Math.abs(e)*2<=Math.abs(g)?g>=0?wI.S:wI.N:Math.abs(g)*2<=Math.abs(e)?e>0?wI.E:wI.W:g>0?e>0?wI.SE:wI.SW:e>0?wI.NE:wI.NW},matrixAppendRotationInv:function(e,g,I,i){I===void 0&&(I=0),i===void 0&&(i=0);var n=Cfe[wI.inv(g)];n.tx=I,n.ty=i,e.append(n)}},aU=function(){function e(){this.worldTransform=new Zi,this.localTransform=new Zi,this.position=new Ad(this.onChange,this,0,0),this.scale=new Ad(this.onChange,this,1,1),this.pivot=new Ad(this.onChange,this,0,0),this.skew=new Ad(this.updateSkew,this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._localID=0,this._currentLocalID=0,this._worldID=0,this._parentID=0}return e.prototype.onChange=function(){this._localID++},e.prototype.updateSkew=function(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this._localID++},e.prototype.toString=function(){return"[@pixi/math:Transform "+("position=("+this.position.x+", "+this.position.y+") ")+("rotation="+this.rotation+" ")+("scale=("+this.scale.x+", "+this.scale.y+") ")+("skew=("+this.skew.x+", "+this.skew.y+") ")+"]"},e.prototype.updateLocalTransform=function(){var g=this.localTransform;this._localID!==this._currentLocalID&&(g.a=this._cx*this.scale.x,g.b=this._sx*this.scale.x,g.c=this._cy*this.scale.y,g.d=this._sy*this.scale.y,g.tx=this.position.x-(this.pivot.x*g.a+this.pivot.y*g.c),g.ty=this.position.y-(this.pivot.x*g.b+this.pivot.y*g.d),this._currentLocalID=this._localID,this._parentID=-1)},e.prototype.updateTransform=function(g){var I=this.localTransform;if(this._localID!==this._currentLocalID&&(I.a=this._cx*this.scale.x,I.b=this._sx*this.scale.x,I.c=this._cy*this.scale.y,I.d=this._sy*this.scale.y,I.tx=this.position.x-(this.pivot.x*I.a+this.pivot.y*I.c),I.ty=this.position.y-(this.pivot.x*I.b+this.pivot.y*I.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==g._worldID){var i=g.worldTransform,n=this.worldTransform;n.a=I.a*i.a+I.b*i.c,n.b=I.a*i.b+I.b*i.d,n.c=I.c*i.a+I.d*i.c,n.d=I.c*i.b+I.d*i.d,n.tx=I.tx*i.a+I.ty*i.c+i.tx,n.ty=I.tx*i.b+I.ty*i.d+i.ty,this._parentID=g._worldID,this._worldID++}},e.prototype.setFromMatrix=function(g){g.decompose(this),this._localID++},Object.defineProperty(e.prototype,"rotation",{get:function(){return this._rotation},set:function(g){this._rotation!==g&&(this._rotation=g,this.updateSkew())},enumerable:!1,configurable:!0}),e.IDENTITY=new e,e}();/*! + */var mB=Math.PI*2,ofe=180/Math.PI,afe=Math.PI/180,XI;(function(e){e[e.POLY=0]="POLY",e[e.RECT=1]="RECT",e[e.CIRC=2]="CIRC",e[e.ELIP=3]="ELIP",e[e.RREC=4]="RREC"})(XI||(XI={}));var Ai=function(){function e(g,i){g===void 0&&(g=0),i===void 0&&(i=0),this.x=0,this.y=0,this.x=g,this.y=i}return e.prototype.clone=function(){return new e(this.x,this.y)},e.prototype.copyFrom=function(g){return this.set(g.x,g.y),this},e.prototype.copyTo=function(g){return g.set(this.x,this.y),g},e.prototype.equals=function(g){return g.x===this.x&&g.y===this.y},e.prototype.set=function(g,i){return g===void 0&&(g=0),i===void 0&&(i=g),this.x=g,this.y=i,this},e.prototype.toString=function(){return"[@pixi/math:Point x="+this.x+" y="+this.y+"]"},e}(),SR=[new Ai,new Ai,new Ai,new Ai],wg=function(){function e(g,i,I,n){g===void 0&&(g=0),i===void 0&&(i=0),I===void 0&&(I=0),n===void 0&&(n=0),this.x=Number(g),this.y=Number(i),this.width=Number(I),this.height=Number(n),this.type=XI.RECT}return Object.defineProperty(e.prototype,"left",{get:function(){return this.x},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"right",{get:function(){return this.x+this.width},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"top",{get:function(){return this.y},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!1,configurable:!0}),Object.defineProperty(e,"EMPTY",{get:function(){return new e(0,0,0,0)},enumerable:!1,configurable:!0}),e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.copyFrom=function(g){return this.x=g.x,this.y=g.y,this.width=g.width,this.height=g.height,this},e.prototype.copyTo=function(g){return g.x=this.x,g.y=this.y,g.width=this.width,g.height=this.height,g},e.prototype.contains=function(g,i){return this.width<=0||this.height<=0?!1:g>=this.x&&g=this.y&&ig.right?g.right:this.right;if(n<=I)return!1;var r=this.yg.bottom?g.bottom:this.bottom;return C>r}var o=this.left,a=this.right,s=this.top,A=this.bottom;if(a<=o||A<=s)return!1;var l=SR[0].set(g.left,g.top),c=SR[1].set(g.left,g.bottom),u=SR[2].set(g.right,g.top),d=SR[3].set(g.right,g.bottom);if(u.x<=l.x||c.y<=l.y)return!1;var h=Math.sign(i.a*i.d-i.b*i.c);if(h===0||(i.apply(l,l),i.apply(c,c),i.apply(u,u),i.apply(d,d),Math.max(l.x,c.x,u.x,d.x)<=o||Math.min(l.x,c.x,u.x,d.x)>=a||Math.max(l.y,c.y,u.y,d.y)<=s||Math.min(l.y,c.y,u.y,d.y)>=A))return!1;var m=h*(c.y-l.y),f=h*(l.x-c.x),b=m*o+f*s,p=m*a+f*s,y=m*o+f*A,Z=m*a+f*A;if(Math.max(b,p,y,Z)<=m*l.x+f*l.y||Math.min(b,p,y,Z)>=m*d.x+f*d.y)return!1;var B=h*(l.y-u.y),G=h*(u.x-l.x),v=B*o+G*s,w=B*a+G*s,V=B*o+G*A,S=B*a+G*A;return!(Math.max(v,w,V,S)<=B*l.x+G*l.y||Math.min(v,w,V,S)>=B*d.x+G*d.y)},e.prototype.pad=function(g,i){return g===void 0&&(g=0),i===void 0&&(i=g),this.x-=g,this.y-=i,this.width+=g*2,this.height+=i*2,this},e.prototype.fit=function(g){var i=Math.max(this.x,g.x),I=Math.min(this.x+this.width,g.x+g.width),n=Math.max(this.y,g.y),r=Math.min(this.y+this.height,g.y+g.height);return this.x=i,this.width=Math.max(I-i,0),this.y=n,this.height=Math.max(r-n,0),this},e.prototype.ceil=function(g,i){g===void 0&&(g=1),i===void 0&&(i=.001);var I=Math.ceil((this.x+this.width-i)*g)/g,n=Math.ceil((this.y+this.height-i)*g)/g;return this.x=Math.floor((this.x+i)*g)/g,this.y=Math.floor((this.y+i)*g)/g,this.width=I-this.x,this.height=n-this.y,this},e.prototype.enlarge=function(g){var i=Math.min(this.x,g.x),I=Math.max(this.x+this.width,g.x+g.width),n=Math.min(this.y,g.y),r=Math.max(this.y+this.height,g.y+g.height);return this.x=i,this.width=I-i,this.y=n,this.height=r-n,this},e.prototype.toString=function(){return"[@pixi/math:Rectangle x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},e}(),Afe=function(){function e(g,i,I){g===void 0&&(g=0),i===void 0&&(i=0),I===void 0&&(I=0),this.x=g,this.y=i,this.radius=I,this.type=XI.CIRC}return e.prototype.clone=function(){return new e(this.x,this.y,this.radius)},e.prototype.contains=function(g,i){if(this.radius<=0)return!1;var I=this.radius*this.radius,n=this.x-g,r=this.y-i;return n*=n,r*=r,n+r<=I},e.prototype.getBounds=function(){return new wg(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)},e.prototype.toString=function(){return"[@pixi/math:Circle x="+this.x+" y="+this.y+" radius="+this.radius+"]"},e}(),sfe=function(){function e(g,i,I,n){g===void 0&&(g=0),i===void 0&&(i=0),I===void 0&&(I=0),n===void 0&&(n=0),this.x=g,this.y=i,this.width=I,this.height=n,this.type=XI.ELIP}return e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.contains=function(g,i){if(this.width<=0||this.height<=0)return!1;var I=(g-this.x)/this.width,n=(i-this.y)/this.height;return I*=I,n*=n,I+n<=1},e.prototype.getBounds=function(){return new wg(this.x-this.width,this.y-this.height,this.width,this.height)},e.prototype.toString=function(){return"[@pixi/math:Ellipse x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},e}(),MG=function(){function e(){for(var g=arguments,i=[],I=0;Ii!=A>i&&g<(s-o)*((i-a)/(A-a))+o;l&&(I=!I)}return I},e.prototype.toString=function(){return"[@pixi/math:Polygon"+("closeStroke="+this.closeStroke)+("points="+this.points.reduce(function(g,i){return g+", "+i},"")+"]")},e}(),lfe=function(){function e(g,i,I,n,r){g===void 0&&(g=0),i===void 0&&(i=0),I===void 0&&(I=0),n===void 0&&(n=0),r===void 0&&(r=20),this.x=g,this.y=i,this.width=I,this.height=n,this.radius=r,this.type=XI.RREC}return e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height,this.radius)},e.prototype.contains=function(g,i){if(this.width<=0||this.height<=0)return!1;if(g>=this.x&&g<=this.x+this.width&&i>=this.y&&i<=this.y+this.height){var I=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(i>=this.y+I&&i<=this.y+this.height-I||g>=this.x+I&&g<=this.x+this.width-I)return!0;var n=g-(this.x+I),r=i-(this.y+I),C=I*I;if(n*n+r*r<=C||(n=g-(this.x+this.width-I),n*n+r*r<=C)||(r=i-(this.y+this.height-I),n*n+r*r<=C)||(n=g-(this.x+I),n*n+r*r<=C))return!0}return!1},e.prototype.toString=function(){return"[@pixi/math:RoundedRectangle x="+this.x+" y="+this.y+("width="+this.width+" height="+this.height+" radius="+this.radius+"]")},e}(),sd=function(){function e(g,i,I,n){I===void 0&&(I=0),n===void 0&&(n=0),this._x=I,this._y=n,this.cb=g,this.scope=i}return e.prototype.clone=function(g,i){return g===void 0&&(g=this.cb),i===void 0&&(i=this.scope),new e(g,i,this._x,this._y)},e.prototype.set=function(g,i){return g===void 0&&(g=0),i===void 0&&(i=g),(this._x!==g||this._y!==i)&&(this._x=g,this._y=i,this.cb.call(this.scope)),this},e.prototype.copyFrom=function(g){return(this._x!==g.x||this._y!==g.y)&&(this._x=g.x,this._y=g.y,this.cb.call(this.scope)),this},e.prototype.copyTo=function(g){return g.set(this._x,this._y),g},e.prototype.equals=function(g){return g.x===this._x&&g.y===this._y},e.prototype.toString=function(){return"[@pixi/math:ObservablePoint x=0 y=0 scope="+this.scope+"]"},Object.defineProperty(e.prototype,"x",{get:function(){return this._x},set:function(g){this._x!==g&&(this._x=g,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"y",{get:function(){return this._y},set:function(g){this._y!==g&&(this._y=g,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),e}(),GI=function(){function e(g,i,I,n,r,C){g===void 0&&(g=1),i===void 0&&(i=0),I===void 0&&(I=0),n===void 0&&(n=1),r===void 0&&(r=0),C===void 0&&(C=0),this.array=null,this.a=g,this.b=i,this.c=I,this.d=n,this.tx=r,this.ty=C}return e.prototype.fromArray=function(g){this.a=g[0],this.b=g[1],this.c=g[3],this.d=g[4],this.tx=g[2],this.ty=g[5]},e.prototype.set=function(g,i,I,n,r,C){return this.a=g,this.b=i,this.c=I,this.d=n,this.tx=r,this.ty=C,this},e.prototype.toArray=function(g,i){this.array||(this.array=new Float32Array(9));var I=i||this.array;return g?(I[0]=this.a,I[1]=this.b,I[2]=0,I[3]=this.c,I[4]=this.d,I[5]=0,I[6]=this.tx,I[7]=this.ty,I[8]=1):(I[0]=this.a,I[1]=this.c,I[2]=this.tx,I[3]=this.b,I[4]=this.d,I[5]=this.ty,I[6]=0,I[7]=0,I[8]=1),I},e.prototype.apply=function(g,i){i=i||new Ai;var I=g.x,n=g.y;return i.x=this.a*I+this.c*n+this.tx,i.y=this.b*I+this.d*n+this.ty,i},e.prototype.applyInverse=function(g,i){i=i||new Ai;var I=1/(this.a*this.d+this.c*-this.b),n=g.x,r=g.y;return i.x=this.d*I*n+-this.c*I*r+(this.ty*this.c-this.tx*this.d)*I,i.y=this.a*I*r+-this.b*I*n+(-this.ty*this.a+this.tx*this.b)*I,i},e.prototype.translate=function(g,i){return this.tx+=g,this.ty+=i,this},e.prototype.scale=function(g,i){return this.a*=g,this.d*=i,this.c*=g,this.b*=i,this.tx*=g,this.ty*=i,this},e.prototype.rotate=function(g){var i=Math.cos(g),I=Math.sin(g),n=this.a,r=this.c,C=this.tx;return this.a=n*i-this.b*I,this.b=n*I+this.b*i,this.c=r*i-this.d*I,this.d=r*I+this.d*i,this.tx=C*i-this.ty*I,this.ty=C*I+this.ty*i,this},e.prototype.append=function(g){var i=this.a,I=this.b,n=this.c,r=this.d;return this.a=g.a*i+g.b*n,this.b=g.a*I+g.b*r,this.c=g.c*i+g.d*n,this.d=g.c*I+g.d*r,this.tx=g.tx*i+g.ty*n+this.tx,this.ty=g.tx*I+g.ty*r+this.ty,this},e.prototype.setTransform=function(g,i,I,n,r,C,o,a,s){return this.a=Math.cos(o+s)*r,this.b=Math.sin(o+s)*r,this.c=-Math.sin(o-a)*C,this.d=Math.cos(o-a)*C,this.tx=g-(I*this.a+n*this.c),this.ty=i-(I*this.b+n*this.d),this},e.prototype.prepend=function(g){var i=this.tx;if(g.a!==1||g.b!==0||g.c!==0||g.d!==1){var I=this.a,n=this.c;this.a=I*g.a+this.b*g.c,this.b=I*g.b+this.b*g.d,this.c=n*g.a+this.d*g.c,this.d=n*g.b+this.d*g.d}return this.tx=i*g.a+this.ty*g.c+g.tx,this.ty=i*g.b+this.ty*g.d+g.ty,this},e.prototype.decompose=function(g){var i=this.a,I=this.b,n=this.c,r=this.d,C=g.pivot,o=-Math.atan2(-n,r),a=Math.atan2(I,i),s=Math.abs(o+a);return s<1e-5||Math.abs(mB-s)<1e-5?(g.rotation=a,g.skew.x=g.skew.y=0):(g.rotation=0,g.skew.x=o,g.skew.y=a),g.scale.x=Math.sqrt(i*i+I*I),g.scale.y=Math.sqrt(n*n+r*r),g.position.x=this.tx+(C.x*i+C.y*n),g.position.y=this.ty+(C.x*I+C.y*r),g},e.prototype.invert=function(){var g=this.a,i=this.b,I=this.c,n=this.d,r=this.tx,C=g*n-i*I;return this.a=n/C,this.b=-i/C,this.c=-I/C,this.d=g/C,this.tx=(I*this.ty-n*r)/C,this.ty=-(g*this.ty-i*r)/C,this},e.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},e.prototype.clone=function(){var g=new e;return g.a=this.a,g.b=this.b,g.c=this.c,g.d=this.d,g.tx=this.tx,g.ty=this.ty,g},e.prototype.copyTo=function(g){return g.a=this.a,g.b=this.b,g.c=this.c,g.d=this.d,g.tx=this.tx,g.ty=this.ty,g},e.prototype.copyFrom=function(g){return this.a=g.a,this.b=g.b,this.c=g.c,this.d=g.d,this.tx=g.tx,this.ty=g.ty,this},e.prototype.toString=function(){return"[@pixi/math:Matrix a="+this.a+" b="+this.b+" c="+this.c+" d="+this.d+" tx="+this.tx+" ty="+this.ty+"]"},Object.defineProperty(e,"IDENTITY",{get:function(){return new e},enumerable:!1,configurable:!0}),Object.defineProperty(e,"TEMP_MATRIX",{get:function(){return new e},enumerable:!1,configurable:!0}),e}(),Pu=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],Ju=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],Ou=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],_u=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],WM=[],cfe=[],wR=Math.sign;function F3e(){for(var e=0;e<16;e++){var g=[];WM.push(g);for(var i=0;i<16;i++)for(var I=wR(Pu[e]*Pu[i]+Ou[e]*Ju[i]),n=wR(Ju[e]*Pu[i]+_u[e]*Ju[i]),r=wR(Pu[e]*Ou[i]+Ou[e]*_u[i]),C=wR(Ju[e]*Ou[i]+_u[e]*_u[i]),o=0;o<16;o++)if(Pu[o]===I&&Ju[o]===n&&Ou[o]===r&&_u[o]===C){g.push(o);break}}for(var e=0;e<16;e++){var a=new GI;a.set(Pu[e],Ju[e],Ou[e],_u[e],0,0),cfe.push(a)}}F3e();var Vi={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:function(e){return Pu[e]},uY:function(e){return Ju[e]},vX:function(e){return Ou[e]},vY:function(e){return _u[e]},inv:function(e){return e&8?e&15:-e&7},add:function(e,g){return WM[e][g]},sub:function(e,g){return WM[e][Vi.inv(g)]},rotate180:function(e){return e^4},isVertical:function(e){return(e&3)===2},byDirection:function(e,g){return Math.abs(e)*2<=Math.abs(g)?g>=0?Vi.S:Vi.N:Math.abs(g)*2<=Math.abs(e)?e>0?Vi.E:Vi.W:g>0?e>0?Vi.SE:Vi.SW:e>0?Vi.NE:Vi.NW},matrixAppendRotationInv:function(e,g,i,I){i===void 0&&(i=0),I===void 0&&(I=0);var n=cfe[Vi.inv(g)];n.tx=i,n.ty=I,e.append(n)}},dU=function(){function e(){this.worldTransform=new GI,this.localTransform=new GI,this.position=new sd(this.onChange,this,0,0),this.scale=new sd(this.onChange,this,1,1),this.pivot=new sd(this.onChange,this,0,0),this.skew=new sd(this.updateSkew,this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._localID=0,this._currentLocalID=0,this._worldID=0,this._parentID=0}return e.prototype.onChange=function(){this._localID++},e.prototype.updateSkew=function(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this._localID++},e.prototype.toString=function(){return"[@pixi/math:Transform "+("position=("+this.position.x+", "+this.position.y+") ")+("rotation="+this.rotation+" ")+("scale=("+this.scale.x+", "+this.scale.y+") ")+("skew=("+this.skew.x+", "+this.skew.y+") ")+"]"},e.prototype.updateLocalTransform=function(){var g=this.localTransform;this._localID!==this._currentLocalID&&(g.a=this._cx*this.scale.x,g.b=this._sx*this.scale.x,g.c=this._cy*this.scale.y,g.d=this._sy*this.scale.y,g.tx=this.position.x-(this.pivot.x*g.a+this.pivot.y*g.c),g.ty=this.position.y-(this.pivot.x*g.b+this.pivot.y*g.d),this._currentLocalID=this._localID,this._parentID=-1)},e.prototype.updateTransform=function(g){var i=this.localTransform;if(this._localID!==this._currentLocalID&&(i.a=this._cx*this.scale.x,i.b=this._sx*this.scale.x,i.c=this._cy*this.scale.y,i.d=this._sy*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==g._worldID){var I=g.worldTransform,n=this.worldTransform;n.a=i.a*I.a+i.b*I.c,n.b=i.a*I.b+i.b*I.d,n.c=i.c*I.a+i.d*I.c,n.d=i.c*I.b+i.d*I.d,n.tx=i.tx*I.a+i.ty*I.c+I.tx,n.ty=i.tx*I.b+i.ty*I.d+I.ty,this._parentID=g._worldID,this._worldID++}},e.prototype.setFromMatrix=function(g){g.decompose(this),this._localID++},Object.defineProperty(e.prototype,"rotation",{get:function(){return this._rotation},set:function(g){this._rotation!==g&&(this._rotation=g,this.updateSkew())},enumerable:!1,configurable:!0}),e.IDENTITY=new e,e}();/*! * @pixi/display - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/display is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */Gt.SORTABLE_CHILDREN=!1;var hB=function(){function e(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}return e.prototype.isEmpty=function(){return this.minX>this.maxX||this.minY>this.maxY},e.prototype.clear=function(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0},e.prototype.getRectangle=function(g){return this.minX>this.maxX||this.minY>this.maxY?wg.EMPTY:(g=g||new wg(0,0,1,1),g.x=this.minX,g.y=this.minY,g.width=this.maxX-this.minX,g.height=this.maxY-this.minY,g)},e.prototype.addPoint=function(g){this.minX=Math.min(this.minX,g.x),this.maxX=Math.max(this.maxX,g.x),this.minY=Math.min(this.minY,g.y),this.maxY=Math.max(this.maxY,g.y)},e.prototype.addPointMatrix=function(g,I){var i=g.a,n=g.b,C=g.c,r=g.d,o=g.tx,a=g.ty,s=i*I.x+C*I.y+o,A=n*I.x+r*I.y+a;this.minX=Math.min(this.minX,s),this.maxX=Math.max(this.maxX,s),this.minY=Math.min(this.minY,A),this.maxY=Math.max(this.maxY,A)},e.prototype.addQuad=function(g){var I=this.minX,i=this.minY,n=this.maxX,C=this.maxY,r=g[0],o=g[1];I=rn?r:n,C=o>C?o:C,r=g[2],o=g[3],I=rn?r:n,C=o>C?o:C,r=g[4],o=g[5],I=rn?r:n,C=o>C?o:C,r=g[6],o=g[7],I=rn?r:n,C=o>C?o:C,this.minX=I,this.minY=i,this.maxX=n,this.maxY=C},e.prototype.addFrame=function(g,I,i,n,C){this.addFrameMatrix(g.worldTransform,I,i,n,C)},e.prototype.addFrameMatrix=function(g,I,i,n,C){var r=g.a,o=g.b,a=g.c,s=g.d,A=g.tx,l=g.ty,c=this.minX,u=this.minY,d=this.maxX,h=this.maxY,m=r*I+a*i+A,f=o*I+s*i+l;c=md?m:d,h=f>h?f:h,m=r*n+a*i+A,f=o*n+s*i+l,c=md?m:d,h=f>h?f:h,m=r*I+a*C+A,f=o*I+s*C+l,c=md?m:d,h=f>h?f:h,m=r*n+a*C+A,f=o*n+s*C+l,c=md?m:d,h=f>h?f:h,this.minX=c,this.minY=u,this.maxX=d,this.maxY=h},e.prototype.addVertexData=function(g,I,i){for(var n=this.minX,C=this.minY,r=this.maxX,o=this.maxY,a=I;ar?s:r,o=A>o?A:o}this.minX=n,this.minY=C,this.maxX=r,this.maxY=o},e.prototype.addVertices=function(g,I,i,n){this.addVerticesMatrix(g.worldTransform,I,i,n)},e.prototype.addVerticesMatrix=function(g,I,i,n,C,r){C===void 0&&(C=0),r===void 0&&(r=C);for(var o=g.a,a=g.b,s=g.c,A=g.d,l=g.tx,c=g.ty,u=this.minX,d=this.minY,h=this.maxX,m=this.maxY,f=i;fn?g.maxX:n,this.maxY=g.maxY>C?g.maxY:C},e.prototype.addBoundsMask=function(g,I){var i=g.minX>I.minX?g.minX:I.minX,n=g.minY>I.minY?g.minY:I.minY,C=g.maxXs?C:s,this.maxY=r>A?r:A}},e.prototype.addBoundsMatrix=function(g,I){this.addFrameMatrix(I,g.minX,g.minY,g.maxX,g.maxY)},e.prototype.addBoundsArea=function(g,I){var i=g.minX>I.x?g.minX:I.x,n=g.minY>I.y?g.minY:I.y,C=g.maxXs?C:s,this.maxY=r>A?r:A}},e.prototype.pad=function(g,I){g===void 0&&(g=0),I===void 0&&(I=g),this.isEmpty()||(this.minX-=g,this.maxX+=g,this.minY-=I,this.maxY+=I)},e.prototype.addFramePad=function(g,I,i,n,C,r){g-=C,I-=r,i+=C,n+=r,this.minX=this.minXi?this.maxX:i,this.minY=this.minYn?this.maxY:n},e}();/*! ***************************************************************************** + */Gt.SORTABLE_CHILDREN=!1;var fB=function(){function e(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}return e.prototype.isEmpty=function(){return this.minX>this.maxX||this.minY>this.maxY},e.prototype.clear=function(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0},e.prototype.getRectangle=function(g){return this.minX>this.maxX||this.minY>this.maxY?wg.EMPTY:(g=g||new wg(0,0,1,1),g.x=this.minX,g.y=this.minY,g.width=this.maxX-this.minX,g.height=this.maxY-this.minY,g)},e.prototype.addPoint=function(g){this.minX=Math.min(this.minX,g.x),this.maxX=Math.max(this.maxX,g.x),this.minY=Math.min(this.minY,g.y),this.maxY=Math.max(this.maxY,g.y)},e.prototype.addPointMatrix=function(g,i){var I=g.a,n=g.b,r=g.c,C=g.d,o=g.tx,a=g.ty,s=I*i.x+r*i.y+o,A=n*i.x+C*i.y+a;this.minX=Math.min(this.minX,s),this.maxX=Math.max(this.maxX,s),this.minY=Math.min(this.minY,A),this.maxY=Math.max(this.maxY,A)},e.prototype.addQuad=function(g){var i=this.minX,I=this.minY,n=this.maxX,r=this.maxY,C=g[0],o=g[1];i=Cn?C:n,r=o>r?o:r,C=g[2],o=g[3],i=Cn?C:n,r=o>r?o:r,C=g[4],o=g[5],i=Cn?C:n,r=o>r?o:r,C=g[6],o=g[7],i=Cn?C:n,r=o>r?o:r,this.minX=i,this.minY=I,this.maxX=n,this.maxY=r},e.prototype.addFrame=function(g,i,I,n,r){this.addFrameMatrix(g.worldTransform,i,I,n,r)},e.prototype.addFrameMatrix=function(g,i,I,n,r){var C=g.a,o=g.b,a=g.c,s=g.d,A=g.tx,l=g.ty,c=this.minX,u=this.minY,d=this.maxX,h=this.maxY,m=C*i+a*I+A,f=o*i+s*I+l;c=md?m:d,h=f>h?f:h,m=C*n+a*I+A,f=o*n+s*I+l,c=md?m:d,h=f>h?f:h,m=C*i+a*r+A,f=o*i+s*r+l,c=md?m:d,h=f>h?f:h,m=C*n+a*r+A,f=o*n+s*r+l,c=md?m:d,h=f>h?f:h,this.minX=c,this.minY=u,this.maxX=d,this.maxY=h},e.prototype.addVertexData=function(g,i,I){for(var n=this.minX,r=this.minY,C=this.maxX,o=this.maxY,a=i;aC?s:C,o=A>o?A:o}this.minX=n,this.minY=r,this.maxX=C,this.maxY=o},e.prototype.addVertices=function(g,i,I,n){this.addVerticesMatrix(g.worldTransform,i,I,n)},e.prototype.addVerticesMatrix=function(g,i,I,n,r,C){r===void 0&&(r=0),C===void 0&&(C=r);for(var o=g.a,a=g.b,s=g.c,A=g.d,l=g.tx,c=g.ty,u=this.minX,d=this.minY,h=this.maxX,m=this.maxY,f=I;fn?g.maxX:n,this.maxY=g.maxY>r?g.maxY:r},e.prototype.addBoundsMask=function(g,i){var I=g.minX>i.minX?g.minX:i.minX,n=g.minY>i.minY?g.minY:i.minY,r=g.maxXs?r:s,this.maxY=C>A?C:A}},e.prototype.addBoundsMatrix=function(g,i){this.addFrameMatrix(i,g.minX,g.minY,g.maxX,g.maxY)},e.prototype.addBoundsArea=function(g,i){var I=g.minX>i.x?g.minX:i.x,n=g.minY>i.y?g.minY:i.y,r=g.maxXs?r:s,this.maxY=C>A?C:A}},e.prototype.pad=function(g,i){g===void 0&&(g=0),i===void 0&&(i=g),this.isEmpty()||(this.minX-=g,this.maxX+=g,this.minY-=i,this.maxY+=i)},e.prototype.addFramePad=function(g,i,I,n,r,C){g-=r,i-=C,I+=r,n+=C,this.minX=this.minXI?this.maxX:I,this.minY=this.minYn?this.maxY:n},e}();/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -102,7 +102,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var BM=function(e,g){return BM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},BM(e,g)};function AU(e,g){BM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var $I=function(e){AU(g,e);function g(){var I=e.call(this)||this;return I.tempDisplayObjectParent=null,I.transform=new aU,I.alpha=1,I.visible=!0,I.renderable=!0,I.cullable=!1,I.cullArea=null,I.parent=null,I.worldAlpha=1,I._lastSortedIndex=0,I._zIndex=0,I.filterArea=null,I.filters=null,I._enabledFilters=null,I._bounds=new hB,I._localBounds=null,I._boundsID=0,I._boundsRect=null,I._localBoundsRect=null,I._mask=null,I._maskRefCount=0,I._destroyed=!1,I.isSprite=!1,I.isMask=!1,I}return g.mixin=function(I){for(var i=Object.keys(I),n=0;n1)for(var C=0;Cthis.children.length)throw new Error(I+"addChildAt: The index "+i+" supplied is out of bounds "+this.children.length);return I.parent&&I.parent.removeChild(I),I.parent=this,this.sortDirty=!0,I.transform._parentID=-1,this.children.splice(i,0,I),this._boundsID++,this.onChildrenChange(i),I.emit("added",this),this.emit("childAdded",I,this,i),I},g.prototype.swapChildren=function(I,i){if(I!==i){var n=this.getChildIndex(I),C=this.getChildIndex(i);this.children[n]=i,this.children[C]=I,this.onChildrenChange(n=this.children.length)throw new Error("The index "+i+" supplied is out of bounds "+this.children.length);var n=this.getChildIndex(I);Rd(this.children,n,1),this.children.splice(i,0,I),this.onChildrenChange(i)},g.prototype.getChildAt=function(I){if(I<0||I>=this.children.length)throw new Error("getChildAt: Index ("+I+") does not exist.");return this.children[I]},g.prototype.removeChild=function(){for(var I=arguments,i=[],n=0;n1)for(var C=0;C0&&r<=C){o=this.children.splice(n,r);for(var a=0;a1&&this.children.sort(X3e),this.sortDirty=!1},g.prototype.updateTransform=function(){this.sortableChildren&&this.sortDirty&&this.sortChildren(),this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha;for(var I=0,i=this.children.length;I0&&i.height>0){var n,C;if(this.cullArea?(n=this.cullArea,C=this.worldTransform):this._render!==g.prototype._render&&(n=this.getBounds(!0)),n&&i.intersects(n,C))this._render(I);else if(this.cullArea)return;for(var r=0,o=this.children.length;r1)for(var r=0;rthis.children.length)throw new Error(i+"addChildAt: The index "+I+" supplied is out of bounds "+this.children.length);return i.parent&&i.parent.removeChild(i),i.parent=this,this.sortDirty=!0,i.transform._parentID=-1,this.children.splice(I,0,i),this._boundsID++,this.onChildrenChange(I),i.emit("added",this),this.emit("childAdded",i,this,I),i},g.prototype.swapChildren=function(i,I){if(i!==I){var n=this.getChildIndex(i),r=this.getChildIndex(I);this.children[n]=I,this.children[r]=i,this.onChildrenChange(n=this.children.length)throw new Error("The index "+I+" supplied is out of bounds "+this.children.length);var n=this.getChildIndex(i);Vd(this.children,n,1),this.children.splice(I,0,i),this.onChildrenChange(I)},g.prototype.getChildAt=function(i){if(i<0||i>=this.children.length)throw new Error("getChildAt: Index ("+i+") does not exist.");return this.children[i]},g.prototype.removeChild=function(){for(var i=arguments,I=[],n=0;n1)for(var r=0;r0&&C<=r){o=this.children.splice(n,C);for(var a=0;a1&&this.children.sort(D3e),this.sortDirty=!1},g.prototype.updateTransform=function(){this.sortableChildren&&this.sortDirty&&this.sortChildren(),this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha;for(var i=0,I=this.children.length;i0&&I.height>0){var n,r;if(this.cullArea?(n=this.cullArea,r=this.worldTransform):this._render!==g.prototype._render&&(n=this.getBounds(!0)),n&&I.intersects(n,r))this._render(i);else if(this.cullArea)return;for(var C=0,o=this.children.length;C8)throw new Error("max arguments reached");var s=this,A=s.name,l=s.items;this._aliasCount++;for(var c=0,u=l.length;c0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))},e.prototype.add=function(g){return g[this._name]&&(this.ensureNonAliasedItems(),this.remove(g),this.items.push(g)),this},e.prototype.remove=function(g){var I=this.items.indexOf(g);return I!==-1&&(this.ensureNonAliasedItems(),this.items.splice(I,1)),this},e.prototype.contains=function(g){return this.items.indexOf(g)!==-1},e.prototype.removeAll=function(){return this.ensureNonAliasedItems(),this.items.length=0,this},e.prototype.destroy=function(){this.removeAll(),this.items=null,this._name=null},Object.defineProperty(e.prototype,"empty",{get:function(){return this.items.length===0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),e}();Object.defineProperties(Li.prototype,{dispatch:{value:Li.prototype.emit},run:{value:Li.prototype.emit}});/*! + */var LI=function(){function e(g){this.items=[],this._name=g,this._aliasCount=0}return e.prototype.emit=function(g,i,I,n,r,C,o,a){if(arguments.length>8)throw new Error("max arguments reached");var s=this,A=s.name,l=s.items;this._aliasCount++;for(var c=0,u=l.length;c0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))},e.prototype.add=function(g){return g[this._name]&&(this.ensureNonAliasedItems(),this.remove(g),this.items.push(g)),this},e.prototype.remove=function(g){var i=this.items.indexOf(g);return i!==-1&&(this.ensureNonAliasedItems(),this.items.splice(i,1)),this},e.prototype.contains=function(g){return this.items.indexOf(g)!==-1},e.prototype.removeAll=function(){return this.ensureNonAliasedItems(),this.items.length=0,this},e.prototype.destroy=function(){this.removeAll(),this.items=null,this._name=null},Object.defineProperty(e.prototype,"empty",{get:function(){return this.items.length===0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),e}();Object.defineProperties(LI.prototype,{dispatch:{value:LI.prototype.emit},run:{value:LI.prototype.emit}});/*! * @pixi/ticker - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/ticker is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */Gt.TARGET_FPMS=.06;var pA;(function(e){e[e.INTERACTION=50]="INTERACTION",e[e.HIGH=25]="HIGH",e[e.NORMAL=0]="NORMAL",e[e.LOW=-25]="LOW",e[e.UTILITY=-50]="UTILITY"})(pA||(pA={}));var KK=function(){function e(g,I,i,n){I===void 0&&(I=null),i===void 0&&(i=0),n===void 0&&(n=!1),this.next=null,this.previous=null,this._destroyed=!1,this.fn=g,this.context=I,this.priority=i,this.once=n}return e.prototype.match=function(g,I){return I===void 0&&(I=null),this.fn===g&&this.context===I},e.prototype.emit=function(g){this.fn&&(this.context?this.fn.call(this.context,g):this.fn(g));var I=this.next;return this.once&&this.destroy(!0),this._destroyed&&(this.next=null),I},e.prototype.connect=function(g){this.previous=g,g.next&&(g.next.previous=this),this.next=g.next,g.next=this},e.prototype.destroy=function(g){g===void 0&&(g=!1),this._destroyed=!0,this.fn=null,this.context=null,this.previous&&(this.previous.next=this.next),this.next&&(this.next.previous=this.previous);var I=this.next;return this.next=g?null:I,this.previous=null,I},e}(),Ui=function(){function e(){var g=this;this.autoStart=!1,this.deltaTime=1,this.lastTime=-1,this.speed=1,this.started=!1,this._requestId=null,this._maxElapsedMS=100,this._minElapsedMS=0,this._protected=!1,this._lastFrame=-1,this._head=new KK(null,null,1/0),this.deltaMS=1/Gt.TARGET_FPMS,this.elapsedMS=1/Gt.TARGET_FPMS,this._tick=function(I){g._requestId=null,g.started&&(g.update(I),g.started&&g._requestId===null&&g._head.next&&(g._requestId=requestAnimationFrame(g._tick)))}}return e.prototype._requestIfNeeded=function(){this._requestId===null&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))},e.prototype._cancelIfNeeded=function(){this._requestId!==null&&(cancelAnimationFrame(this._requestId),this._requestId=null)},e.prototype._startIfPossible=function(){this.started?this._requestIfNeeded():this.autoStart&&this.start()},e.prototype.add=function(g,I,i){return i===void 0&&(i=pA.NORMAL),this._addListener(new KK(g,I,i))},e.prototype.addOnce=function(g,I,i){return i===void 0&&(i=pA.NORMAL),this._addListener(new KK(g,I,i,!0))},e.prototype._addListener=function(g){var I=this._head.next,i=this._head;if(!I)g.connect(i);else{for(;I;){if(g.priority>I.priority){g.connect(i);break}i=I,I=I.next}g.previous||g.connect(i)}return this._startIfPossible(),this},e.prototype.remove=function(g,I){for(var i=this._head.next;i;)i.match(g,I)?i=i.destroy():i=i.next;return this._head.next||this._cancelIfNeeded(),this},Object.defineProperty(e.prototype,"count",{get:function(){if(!this._head)return 0;for(var g=0,I=this._head;I=I.next;)g++;return g},enumerable:!1,configurable:!0}),e.prototype.start=function(){this.started||(this.started=!0,this._requestIfNeeded())},e.prototype.stop=function(){this.started&&(this.started=!1,this._cancelIfNeeded())},e.prototype.destroy=function(){if(!this._protected){this.stop();for(var g=this._head.next;g;)g=g.destroy(!0);this._head.destroy(),this._head=null}},e.prototype.update=function(g){g===void 0&&(g=performance.now());var I;if(g>this.lastTime){if(I=this.elapsedMS=g-this.lastTime,I>this._maxElapsedMS&&(I=this._maxElapsedMS),I*=this.speed,this._minElapsedMS){var i=g-this._lastFrame|0;if(ii.priority){g.connect(I);break}I=i,i=i.next}g.previous||g.connect(I)}return this._startIfPossible(),this},e.prototype.remove=function(g,i){for(var I=this._head.next;I;)I.match(g,i)?I=I.destroy():I=I.next;return this._head.next||this._cancelIfNeeded(),this},Object.defineProperty(e.prototype,"count",{get:function(){if(!this._head)return 0;for(var g=0,i=this._head;i=i.next;)g++;return g},enumerable:!1,configurable:!0}),e.prototype.start=function(){this.started||(this.started=!0,this._requestIfNeeded())},e.prototype.stop=function(){this.started&&(this.started=!1,this._cancelIfNeeded())},e.prototype.destroy=function(){if(!this._protected){this.stop();for(var g=this._head.next;g;)g=g.destroy(!0);this._head.destroy(),this._head=null}},e.prototype.update=function(g){g===void 0&&(g=performance.now());var i;if(g>this.lastTime){if(i=this.elapsedMS=g-this.lastTime,i>this._maxElapsedMS&&(i=this._maxElapsedMS),i*=this.speed,this._minElapsedMS){var I=g-this._lastFrame|0;if(I=0;--n){var C=mB[n];if(C.test&&C.test(e,I))return new C(e,g)}throw new Error("Unrecognized source type to auto-detect Resource")}/*! ***************************************************************************** + */Gt.PREFER_ENV=QC.any?pA.WEBGL:pA.WEBGL2;Gt.STRICT_TEXTURE_CACHE=!1;var pB=[];function BT(e,g){if(!e)return null;var i="";if(typeof e=="string"){var I=/\.(\w{3,4})(?:$|\?|#)/i.exec(e);I&&(i=I[1].toLowerCase())}for(var n=pB.length-1;n>=0;--n){var r=pB[n];if(r.test&&r.test(e,i))return new r(e,g)}throw new Error("Unrecognized source type to auto-detect Resource")}/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -152,11 +152,11 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var SM=function(e,g){return SM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},SM(e,g)};function AI(e,g){SM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var wM=function(){return wM=Object.assign||function(g){for(var I=arguments,i,n=1,C=arguments.length;n0&&A>0,n.textureCacheIds=[],n.destroyed=!1,n.resource=null,n._batchEnabled=0,n._batchLocation=0,n.parentTextureArray=null,n.setResource(I),n}return Object.defineProperty(g.prototype,"realWidth",{get:function(){return Math.round(this.width*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"realHeight",{get:function(){return Math.round(this.height*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"mipmap",{get:function(){return this._mipmap},set:function(I){this._mipmap!==I&&(this._mipmap=I,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"scaleMode",{get:function(){return this._scaleMode},set:function(I){this._scaleMode!==I&&(this._scaleMode=I,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"wrapMode",{get:function(){return this._wrapMode},set:function(I){this._wrapMode!==I&&(this._wrapMode=I,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),g.prototype.setStyle=function(I,i){var n;return I!==void 0&&I!==this.scaleMode&&(this.scaleMode=I,n=!0),i!==void 0&&i!==this.mipmap&&(this.mipmap=i,n=!0),n&&this.dirtyStyleId++,this},g.prototype.setSize=function(I,i,n){return n=n||this.resolution,this.setRealSize(I*n,i*n,n)},g.prototype.setRealSize=function(I,i,n){return this.resolution=n||this.resolution,this.width=Math.round(I)/this.resolution,this.height=Math.round(i)/this.resolution,this._refreshPOT(),this.update(),this},g.prototype._refreshPOT=function(){this.isPowerOfTwo=bM(this.realWidth)&&bM(this.realHeight)},g.prototype.setResolution=function(I){var i=this.resolution;return i===I?this:(this.resolution=I,this.valid&&(this.width=Math.round(this.width*i)/I,this.height=Math.round(this.height*i)/I,this.emit("update",this)),this._refreshPOT(),this)},g.prototype.setResource=function(I){if(this.resource===I)return this;if(this.resource)throw new Error("Resource can be set only once");return I.bind(this),this.resource=I,this},g.prototype.update=function(){this.valid?(this.dirtyId++,this.dirtyStyleId++,this.emit("update",this)):this.width>0&&this.height>0&&(this.valid=!0,this.emit("loaded",this),this.emit("update",this))},g.prototype.onError=function(I){this.emit("error",this,I)},g.prototype.destroy=function(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete kr[this.cacheId],delete wC[this.cacheId],this.cacheId=null),this.dispose(),g.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0},g.prototype.dispose=function(){this.emit("dispose",this)},g.prototype.castToBaseTexture=function(){return this},g.from=function(I,i,n){n===void 0&&(n=Gt.STRICT_TEXTURE_CACHE);var C=typeof I=="string",r=null;if(C)r=I;else{if(!I._pixiId){var o=i&&i.pixiIdPrefix||"pixiid";I._pixiId=o+"_"+zc()}r=I._pixiId}var a=kr[r];if(C&&n&&!a)throw new Error('The cacheId "'+r+'" does not exist in BaseTextureCache.');return a||(a=new g(I,i),a.cacheId=r,g.addToCache(a,r)),a},g.fromBuffer=function(I,i,n,C){I=I||new Float32Array(i*n*4);var r=new _h(I,{width:i,height:n}),o=I instanceof Float32Array?Et.FLOAT:Et.UNSIGNED_BYTE;return new g(r,Object.assign({},T3e,C||{width:i,height:n,type:o}))},g.addToCache=function(I,i){i&&(I.textureCacheIds.indexOf(i)===-1&&I.textureCacheIds.push(i),kr[i]&&console.warn("BaseTexture added to the cache with an id ["+i+"] that already had an entry"),kr[i]=I)},g.removeFromCache=function(I){if(typeof I=="string"){var i=kr[I];if(i){var n=i.textureCacheIds.indexOf(I);return n>-1&&i.textureCacheIds.splice(n,1),delete kr[I],i}}else if(I&&I.textureCacheIds){for(var C=0;C0)if(I.resource)this.addResourceAt(I.resource,i);else throw new Error("CubeResource does not support copying of renderTexture.");else I.target=Wc.TEXTURE_CUBE_MAP_POSITIVE_X+i,I.parentTextureArray=this.baseTexture,this.items[i]=I;return I.valid&&!this.valid&&this.resize(I.realWidth,I.realHeight),this.items[i]=I,this},g.prototype.upload=function(I,i,n){for(var C=this.itemDirtyIds,r=0;r)?\s*()]*-->)?\s*\]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i,g}(bA),hU=function(e){AI(g,e);function g(I,i){var n=this;if(i=i||{},!(I instanceof HTMLVideoElement)){var C=document.createElement("video");C.setAttribute("preload","auto"),C.setAttribute("webkit-playsinline",""),C.setAttribute("playsinline",""),typeof I=="string"&&(I=[I]);var r=I[0].src||I[0];bA.crossOrigin(C,r,i.crossorigin);for(var o=0;o2},g.prototype._onPlayStart=function(){this.valid||this._onCanPlay(),this.autoUpdate&&!this._isConnectedToTicker&&(Ui.shared.add(this.update,this),this._isConnectedToTicker=!0)},g.prototype._onPlayStop=function(){this._isConnectedToTicker&&(Ui.shared.remove(this.update,this),this._isConnectedToTicker=!1)},g.prototype._onCanPlay=function(){var I=this.source;I.removeEventListener("canplay",this._onCanPlay),I.removeEventListener("canplaythrough",this._onCanPlay);var i=this.valid;this.resize(I.videoWidth,I.videoHeight),!i&&this._resolve&&(this._resolve(this),this._resolve=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&I.play()},g.prototype.dispose=function(){this._isConnectedToTicker&&(Ui.shared.remove(this.update,this),this._isConnectedToTicker=!1);var I=this.source;I&&(I.removeEventListener("error",this._onError,!0),I.pause(),I.src="",I.load()),e.prototype.dispose.call(this)},Object.defineProperty(g.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(I){I!==this._autoUpdate&&(this._autoUpdate=I,!this._autoUpdate&&this._isConnectedToTicker?(Ui.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._isSourcePlaying()&&(Ui.shared.add(this.update,this),this._isConnectedToTicker=!0))},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"updateFPS",{get:function(){return this._updateFPS},set:function(I){I!==this._updateFPS&&(this._updateFPS=I)},enumerable:!1,configurable:!0}),g.test=function(I,i){return globalThis.HTMLVideoElement&&I instanceof HTMLVideoElement||g.TYPES.indexOf(i)>-1},g.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],g.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"},g}(bA),mU=function(e){AI(g,e);function g(I){return e.call(this,I)||this}return g.test=function(I){return!!globalThis.createImageBitmap&&typeof ImageBitmap<"u"&&I instanceof ImageBitmap},g}(bA);mB.push(yT,mU,cU,hU,dU,_h,uU,lU);var ofe={__proto__:null,Resource:Ud,BaseImageResource:bA,INSTALLED:mB,autoDetectResource:pT,AbstractMultiResource:bT,ArrayResource:lU,BufferResource:_h,CanvasResource:cU,CubeResource:uU,ImageResource:yT,SVGResource:dU,VideoResource:hU,ImageBitmapResource:mU},N3e=function(e){AI(g,e);function g(){return e!==null&&e.apply(this,arguments)||this}return g.prototype.upload=function(I,i,n){var C=I.gl;C.pixelStorei(C.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===Co.UNPACK);var r=i.realWidth,o=i.realHeight;return n.width===r&&n.height===o?C.texSubImage2D(i.target,0,0,0,r,o,i.format,n.type,this.data):(n.width=r,n.height=o,C.texImage2D(i.target,0,n.internalFormat,r,o,0,i.format,n.type,this.data)),!0},g}(_h),G9=function(){function e(g,I){this.width=Math.round(g||100),this.height=Math.round(I||100),this.stencil=!1,this.depth=!1,this.dirtyId=0,this.dirtyFormat=0,this.dirtySize=0,this.depthTexture=null,this.colorTextures=[],this.glFramebuffers={},this.disposeRunner=new Li("disposeFramebuffer"),this.multisample=fI.NONE}return Object.defineProperty(e.prototype,"colorTexture",{get:function(){return this.colorTextures[0]},enumerable:!1,configurable:!0}),e.prototype.addColorTexture=function(g,I){return g===void 0&&(g=0),this.colorTextures[g]=I||new vg(null,{scaleMode:jo.NEAREST,resolution:1,mipmap:no.OFF,width:this.width,height:this.height}),this.dirtyId++,this.dirtyFormat++,this},e.prototype.addDepthTexture=function(g){return this.depthTexture=g||new vg(new N3e(null,{width:this.width,height:this.height}),{scaleMode:jo.NEAREST,resolution:1,width:this.width,height:this.height,mipmap:no.OFF,format:ft.DEPTH_COMPONENT,type:Et.UNSIGNED_SHORT}),this.dirtyId++,this.dirtyFormat++,this},e.prototype.enableDepth=function(){return this.depth=!0,this.dirtyId++,this.dirtyFormat++,this},e.prototype.enableStencil=function(){return this.stencil=!0,this.dirtyId++,this.dirtyFormat++,this},e.prototype.resize=function(g,I){if(g=Math.round(g),I=Math.round(I),!(g===this.width&&I===this.height)){this.width=g,this.height=I,this.dirtyId++,this.dirtySize++;for(var i=0;i-1&&i.textureCacheIds.splice(n,1),delete wC[I],i}}else if(I&&I.textureCacheIds){for(var C=0;Cthis.baseTexture.width,a=n+r>this.baseTexture.height;if(o||a){var s=o&&a?"and":"or",A="X: "+i+" + "+C+" = "+(i+C)+" > "+this.baseTexture.width,l="Y: "+n+" + "+r+" = "+(n+r)+" > "+this.baseTexture.height;throw new Error("Texture Error: frame does not fit inside the base Texture dimensions: "+(A+" "+s+" "+l))}this.valid=C&&r&&this.baseTexture.valid,!this.trim&&!this.rotate&&(this.orig=I),this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"rotate",{get:function(){return this._rotate},set:function(I){this._rotate=I,this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"width",{get:function(){return this.orig.width},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"height",{get:function(){return this.orig.height},enumerable:!1,configurable:!0}),g.prototype.castToBaseTexture=function(){return this.baseTexture},Object.defineProperty(g,"EMPTY",{get:function(){return g._EMPTY||(g._EMPTY=new g(new vg),SR(g._EMPTY),SR(g._EMPTY.baseTexture)),g._EMPTY},enumerable:!1,configurable:!0}),Object.defineProperty(g,"WHITE",{get:function(){if(!g._WHITE){var I=Gt.ADAPTER.createCanvas(16,16),i=I.getContext("2d");I.width=16,I.height=16,i.fillStyle="white",i.fillRect(0,0,16,16),g._WHITE=new g(vg.from(I)),SR(g._WHITE),SR(g._WHITE.baseTexture)}return g._WHITE},enumerable:!1,configurable:!0}),g}(B0),Ys=function(e){AI(g,e);function g(I,i){var n=e.call(this,I,i)||this;return n.valid=!0,n.filterFrame=null,n.filterPoolKey=null,n.updateUvs(),n}return Object.defineProperty(g.prototype,"framebuffer",{get:function(){return this.baseTexture.framebuffer},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"multisample",{get:function(){return this.framebuffer.multisample},set:function(I){this.framebuffer.multisample=I},enumerable:!1,configurable:!0}),g.prototype.resize=function(I,i,n){n===void 0&&(n=!0);var C=this.baseTexture.resolution,r=Math.round(I*C)/C,o=Math.round(i*C)/C;this.valid=r>0&&o>0,this._frame.width=this.orig.width=r,this._frame.height=this.orig.height=o,n&&this.baseTexture.resize(r,o),this.updateUvs()},g.prototype.setResolution=function(I){var i=this.baseTexture;i.resolution!==I&&(i.setResolution(I),this.resize(i.width,i.height,!1))},g.create=function(I){for(var i=arguments,n=[],C=1;C>>0,n>1&&(C+=n*4294967296)):C=n>1?-n:-1,this.texturePool[C]||(this.texturePool[C]=[]);var r=this.texturePool[C].pop();return r||(r=this.createTexture(g,I,n)),r.filterPoolKey=C,r.setResolution(i),r},e.prototype.getFilterTexture=function(g,I,i){var n=this.getOptimalTexture(g.width,g.height,I||g.resolution,i||fI.NONE);return n.filterFrame=g.filterFrame,n},e.prototype.returnTexture=function(g){var I=g.filterPoolKey;g.filterFrame=null,this.texturePool[I].push(g)},e.prototype.returnFilterTexture=function(g){this.returnTexture(g)},e.prototype.clear=function(g){if(g=g!==!1,g)for(var I in this.texturePool){var i=this.texturePool[I];if(i)for(var n=0;n0&&g.height>0;for(var I in this.texturePool)if(Number(I)<0){var i=this.texturePool[I];if(i)for(var n=0;n1){for(var A=0;A1&&(l=this.getOptimalFilterTexture(A.width,A.height,I.resolution),l.filterFrame=A.filterFrame),i[c].apply(this,A,l,xr.CLEAR,I);var u=A;A=l,l=u}i[c].apply(this,A,s.renderTexture,xr.BLEND,I),c>1&&I.multisample>1&&this.returnFilterTexture(I.renderTexture),this.returnFilterTexture(A),this.returnFilterTexture(l)}I.clear(),this.statePool.push(I)},e.prototype.bindAndClear=function(g,I){I===void 0&&(I=xr.CLEAR);var i=this.renderer,n=i.renderTexture,C=i.state;if(g===this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?this.renderer.projection.transform=this.activeState.transform:this.renderer.projection.transform=null,g&&g.filterFrame){var r=this.tempRect;r.x=0,r.y=0,r.width=g.filterFrame.width,r.height=g.filterFrame.height,n.bind(g,g.filterFrame,r)}else g!==this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?n.bind(g):this.renderer.renderTexture.bind(g,this.activeState.bindingSourceFrame,this.activeState.bindingDestinationFrame);var o=C.stateId&1||this.forceClear;(I===xr.CLEAR||I===xr.BLIT&&o)&&this.renderer.framebuffer.clear(0,0,0,0)},e.prototype.applyFilter=function(g,I,i,n){var C=this.renderer;C.state.set(g.state),this.bindAndClear(i,n),g.uniforms.uSampler=I,g.uniforms.filterGlobals=this.globalUniforms,C.shader.bind(g),g.legacy=!!g.program.attributeData.aTextureCoord,g.legacy?(this.quadUv.map(I._frame,I.filterFrame),C.geometry.bind(this.quadUv),C.geometry.draw(_r.TRIANGLES)):(C.geometry.bind(this.quad),C.geometry.draw(_r.TRIANGLE_STRIP))},e.prototype.calculateSpriteMatrix=function(g,I){var i=this.activeState,n=i.sourceFrame,C=i.destinationFrame,r=I._texture.orig,o=g.set(C.width,0,0,C.height,n.x,n.y),a=I.worldTransform.copyTo(Zi.TEMP_MATRIX);return a.invert(),o.prepend(a),o.scale(1/r.width,1/r.height),o.translate(I.anchor.x,I.anchor.y),o},e.prototype.destroy=function(){this.renderer=null,this.texturePool.clear(!1)},e.prototype.getOptimalFilterTexture=function(g,I,i,n){return i===void 0&&(i=1),n===void 0&&(n=fI.NONE),this.texturePool.getOptimalTexture(g,I,i,n)},e.prototype.getFilterTexture=function(g,I,i){if(typeof g=="number"){var n=g;g=I,I=n}g=g||this.activeState.renderTexture;var C=this.texturePool.getOptimalTexture(g.width,g.height,I||g.resolution,i||fI.NONE);return C.filterFrame=g.filterFrame,C},e.prototype.returnFilterTexture=function(g){this.texturePool.returnTexture(g)},e.prototype.emptyPool=function(){this.texturePool.clear(!0)},e.prototype.resize=function(){this.texturePool.setScreenSize(this.renderer.view)},e.prototype.transformAABB=function(g,I){var i=wR[0],n=wR[1],C=wR[2],r=wR[3];i.set(I.left,I.top),n.set(I.left,I.bottom),C.set(I.right,I.top),r.set(I.right,I.bottom),g.apply(i,i),g.apply(n,n),g.apply(C,C),g.apply(r,r);var o=Math.min(i.x,n.x,C.x,r.x),a=Math.min(i.y,n.y,C.y,r.y),s=Math.max(i.x,n.x,C.x,r.x),A=Math.max(i.y,n.y,C.y,r.y);I.x=o,I.y=a,I.width=s-o,I.height=A-a},e.prototype.roundFrame=function(g,I,i,n,C){if(!(g.width<=0||g.height<=0||i.width<=0||i.height<=0)){if(C){var r=C.a,o=C.b,a=C.c,s=C.d;if((Math.abs(o)>1e-4||Math.abs(a)>1e-4)&&(Math.abs(r)>1e-4||Math.abs(s)>1e-4))return}C=C?FK.copyFrom(C):FK.identity(),C.translate(-i.x,-i.y).scale(n.width/i.width,n.height/i.height).translate(n.x,n.y),this.transformAABB(C,g),g.ceil(I),this.transformAABB(C.invert(),g)}},e}(),VS=function(){function e(g){this.renderer=g}return e.prototype.flush=function(){},e.prototype.destroy=function(){this.renderer=null},e.prototype.start=function(){},e.prototype.stop=function(){this.flush()},e.prototype.render=function(g){},e}(),ZU=function(){function e(g){this.renderer=g,this.emptyRenderer=new VS(g),this.currentRenderer=this.emptyRenderer}return e.prototype.setObjectRenderer=function(g){this.currentRenderer!==g&&(this.currentRenderer.stop(),this.currentRenderer=g,this.currentRenderer.start())},e.prototype.flush=function(){this.setObjectRenderer(this.emptyRenderer)},e.prototype.reset=function(){this.setObjectRenderer(this.emptyRenderer)},e.prototype.copyBoundTextures=function(g,I){for(var i=this.renderer.texture.boundTextures,n=I-1;n>=0;--n)g[n]=i[n]||null,g[n]&&(g[n]._batchLocation=n)},e.prototype.boundArray=function(g,I,i,n){for(var C=g.elements,r=g.ids,o=g.count,a=0,s=0;s=0&&l=fA.WEBGL2&&(i=g.getContext("webgl2",I)),i)this.webGLVersion=2;else if(this.webGLVersion=1,i=g.getContext("webgl",I)||g.getContext("experimental-webgl",I),!i)throw new Error("This browser does not support WebGL. Try using the canvas renderer");return this.gl=i,this.getExtensions(),this.gl},e.prototype.getExtensions=function(){var g=this.gl,I={loseContext:g.getExtension("WEBGL_lose_context"),anisotropicFiltering:g.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:g.getExtension("OES_texture_float_linear"),s3tc:g.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:g.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:g.getExtension("WEBGL_compressed_texture_etc"),etc1:g.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:g.getExtension("WEBGL_compressed_texture_pvrtc")||g.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:g.getExtension("WEBGL_compressed_texture_atc"),astc:g.getExtension("WEBGL_compressed_texture_astc")};this.webGLVersion===1?Object.assign(this.extensions,I,{drawBuffers:g.getExtension("WEBGL_draw_buffers"),depthTexture:g.getExtension("WEBGL_depth_texture"),vertexArrayObject:g.getExtension("OES_vertex_array_object")||g.getExtension("MOZ_OES_vertex_array_object")||g.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:g.getExtension("OES_element_index_uint"),floatTexture:g.getExtension("OES_texture_float"),floatTextureLinear:g.getExtension("OES_texture_float_linear"),textureHalfFloat:g.getExtension("OES_texture_half_float"),textureHalfFloatLinear:g.getExtension("OES_texture_half_float_linear")}):this.webGLVersion===2&&Object.assign(this.extensions,I,{colorBufferFloat:g.getExtension("EXT_color_buffer_float")})},e.prototype.handleContextLost=function(g){var I=this;g.preventDefault(),setTimeout(function(){I.gl.isContextLost()&&I.extensions.loseContext&&I.extensions.loseContext.restoreContext()},0)},e.prototype.handleContextRestored=function(){this.renderer.runners.contextChange.emit(this.gl)},e.prototype.destroy=function(){var g=this.renderer.view;this.renderer=null,g.removeEventListener("webglcontextlost",this.handleContextLost),g.removeEventListener("webglcontextrestored",this.handleContextRestored),this.gl.useProgram(null),this.extensions.loseContext&&this.extensions.loseContext.loseContext()},e.prototype.postrender=function(){this.renderer.renderingToScreen&&this.gl.flush()},e.prototype.validateContext=function(g){var I=g.getContextAttributes(),i="WebGL2RenderingContext"in globalThis&&g instanceof globalThis.WebGL2RenderingContext;i&&(this.webGLVersion=2),I&&!I.stencil&&console.warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");var n=i||!!g.getExtension("OES_element_index_uint");this.supports.uint32Indices=n,n||console.warn("Provided WebGL context does not support 32 index buffer, complex graphics may not render correctly")},e}(),lfe=function(){function e(g){this.framebuffer=g,this.stencil=null,this.dirtyId=-1,this.dirtyFormat=-1,this.dirtySize=-1,this.multisample=fI.NONE,this.msaaBuffer=null,this.blitFramebuffer=null,this.mipLevel=0}return e}(),E3e=new wg,vU=function(){function e(g){this.renderer=g,this.managedFramebuffers=[],this.unknownFramebuffer=new G9(10,10),this.msaaSamples=null}return e.prototype.contextChange=function(){this.disposeAll(!0);var g=this.gl=this.renderer.gl;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.current=this.unknownFramebuffer,this.viewport=new wg,this.hasMRT=!0,this.writeDepthTexture=!0,this.renderer.context.webGLVersion===1){var I=this.renderer.context.extensions.drawBuffers,i=this.renderer.context.extensions.depthTexture;Gt.PREFER_ENV===fA.WEBGL_LEGACY&&(I=null,i=null),I?g.drawBuffers=function(n){return I.drawBuffersWEBGL(n)}:(this.hasMRT=!1,g.drawBuffers=function(){}),i||(this.writeDepthTexture=!1)}else this.msaaSamples=g.getInternalformatParameter(g.RENDERBUFFER,g.RGBA8,g.SAMPLES)},e.prototype.bind=function(g,I,i){i===void 0&&(i=0);var n=this.gl;if(g){var C=g.glFramebuffers[this.CONTEXT_UID]||this.initFramebuffer(g);this.current!==g&&(this.current=g,n.bindFramebuffer(n.FRAMEBUFFER,C.framebuffer)),C.mipLevel!==i&&(g.dirtyId++,g.dirtyFormat++,C.mipLevel=i),C.dirtyId!==g.dirtyId&&(C.dirtyId=g.dirtyId,C.dirtyFormat!==g.dirtyFormat?(C.dirtyFormat=g.dirtyFormat,C.dirtySize=g.dirtySize,this.updateFramebuffer(g,i)):C.dirtySize!==g.dirtySize&&(C.dirtySize=g.dirtySize,this.resizeFramebuffer(g)));for(var r=0;r>i,s=I.height>>i,A=a/I.width;this.setViewport(I.x*A,I.y*A,a,s)}else{var a=g.width>>i,s=g.height>>i;this.setViewport(0,0,a,s)}}else this.current&&(this.current=null,n.bindFramebuffer(n.FRAMEBUFFER,null)),I?this.setViewport(I.x,I.y,I.width,I.height):this.setViewport(0,0,this.renderer.width,this.renderer.height)},e.prototype.setViewport=function(g,I,i,n){var C=this.viewport;g=Math.round(g),I=Math.round(I),i=Math.round(i),n=Math.round(n),(C.width!==i||C.height!==n||C.x!==g||C.y!==I)&&(C.x=g,C.y=I,C.width=i,C.height=n,this.gl.viewport(g,I,i,n))},Object.defineProperty(e.prototype,"size",{get:function(){return this.current?{x:0,y:0,width:this.current.width,height:this.current.height}:{x:0,y:0,width:this.renderer.width,height:this.renderer.height}},enumerable:!1,configurable:!0}),e.prototype.clear=function(g,I,i,n,C){C===void 0&&(C=rB.COLOR|rB.DEPTH);var r=this.gl;r.clearColor(g,I,i,n),r.clear(C)},e.prototype.initFramebuffer=function(g){var I=this.gl,i=new lfe(I.createFramebuffer());return i.multisample=this.detectSamples(g.multisample),g.glFramebuffers[this.CONTEXT_UID]=i,this.managedFramebuffers.push(g),g.disposeRunner.add(this),i},e.prototype.resizeFramebuffer=function(g){var I=this.gl,i=g.glFramebuffers[this.CONTEXT_UID];i.msaaBuffer&&(I.bindRenderbuffer(I.RENDERBUFFER,i.msaaBuffer),I.renderbufferStorageMultisample(I.RENDERBUFFER,i.multisample,I.RGBA8,g.width,g.height)),i.stencil&&(I.bindRenderbuffer(I.RENDERBUFFER,i.stencil),i.msaaBuffer?I.renderbufferStorageMultisample(I.RENDERBUFFER,i.multisample,I.DEPTH24_STENCIL8,g.width,g.height):I.renderbufferStorage(I.RENDERBUFFER,I.DEPTH_STENCIL,g.width,g.height));var n=g.colorTextures,C=n.length;I.drawBuffers||(C=Math.min(C,1));for(var r=0;r1&&this.canMultisampleFramebuffer(g)?(n.msaaBuffer=n.msaaBuffer||i.createRenderbuffer(),i.bindRenderbuffer(i.RENDERBUFFER,n.msaaBuffer),i.renderbufferStorageMultisample(i.RENDERBUFFER,n.multisample,i.RGBA8,g.width,g.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.RENDERBUFFER,n.msaaBuffer)):n.msaaBuffer&&(i.deleteRenderbuffer(n.msaaBuffer),n.msaaBuffer=null,n.blitFramebuffer&&(n.blitFramebuffer.dispose(),n.blitFramebuffer=null));for(var o=[],a=0;a1&&i.drawBuffers(o),g.depthTexture){var l=this.writeDepthTexture;if(l){var c=g.depthTexture;this.renderer.texture.bind(c,0),i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,c._glTextures[this.CONTEXT_UID].texture,I)}}(g.stencil||g.depth)&&!(g.depthTexture&&this.writeDepthTexture)?(n.stencil=n.stencil||i.createRenderbuffer(),i.bindRenderbuffer(i.RENDERBUFFER,n.stencil),n.msaaBuffer?i.renderbufferStorageMultisample(i.RENDERBUFFER,n.multisample,i.DEPTH24_STENCIL8,g.width,g.height):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,g.width,g.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,n.stencil)):n.stencil&&(i.deleteRenderbuffer(n.stencil),n.stencil=null)},e.prototype.canMultisampleFramebuffer=function(g){return this.renderer.context.webGLVersion!==1&&g.colorTextures.length<=1&&!g.depthTexture},e.prototype.detectSamples=function(g){var I=this.msaaSamples,i=fI.NONE;if(g<=1||I===null)return i;for(var n=0;n=0&&this.managedFramebuffers.splice(C,1),g.disposeRunner.remove(this),I||(n.deleteFramebuffer(i.framebuffer),i.msaaBuffer&&n.deleteRenderbuffer(i.msaaBuffer),i.stencil&&n.deleteRenderbuffer(i.stencil)),i.blitFramebuffer&&i.blitFramebuffer.dispose()}},e.prototype.disposeAll=function(g){var I=this.managedFramebuffers;this.managedFramebuffers=[];for(var i=0;i=fA.WEBGL2&&(g=e.getContext("webgl2",{})),g||(g=e.getContext("webgl",{})||e.getContext("experimental-webgl",{}),g?g.getExtension("WEBGL_draw_buffers"):g=null),Hy=g}return Hy}var RR;function z3e(){if(!RR){RR=kC.MEDIUM;var e=hfe();if(e&&e.getShaderPrecisionFormat){var g=e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT);RR=g.precision?kC.HIGH:kC.MEDIUM}}return RR}function Gee(e,g,I){if(e.substring(0,9)!=="precision"){var i=g;return g===kC.HIGH&&I!==kC.HIGH&&(i=kC.MEDIUM),"precision "+i+` float; -`+e}else if(I!==kC.HIGH&&e.substring(0,15)==="precision highp")return e.replace("precision highp","precision mediump");return e}var P3e={float:1,vec2:2,vec3:3,vec4:4,int:1,ivec2:2,ivec3:3,ivec4:4,uint:1,uvec2:2,uvec3:3,uvec4:4,bool:1,bvec2:2,bvec3:3,bvec4:4,mat2:4,mat3:9,mat4:16,sampler2D:1};function mfe(e){return P3e[e]}var VR=null,vee={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",UNSIGNED_INT:"uint",UNSIGNED_INT_VEC2:"uvec2",UNSIGNED_INT_VEC3:"uvec3",UNSIGNED_INT_VEC4:"uvec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",INT_SAMPLER_2D:"sampler2D",UNSIGNED_INT_SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube",INT_SAMPLER_CUBE:"samplerCube",UNSIGNED_INT_SAMPLER_CUBE:"samplerCube",SAMPLER_2D_ARRAY:"sampler2DArray",INT_SAMPLER_2D_ARRAY:"sampler2DArray",UNSIGNED_INT_SAMPLER_2D_ARRAY:"sampler2DArray"};function ffe(e,g){if(!VR){var I=Object.keys(vee);VR={};for(var i=0;i0&&A>0,n.textureCacheIds=[],n.destroyed=!1,n.resource=null,n._batchEnabled=0,n._batchLocation=0,n.parentTextureArray=null,n.setResource(i),n}return Object.defineProperty(g.prototype,"realWidth",{get:function(){return Math.round(this.width*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"realHeight",{get:function(){return Math.round(this.height*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"mipmap",{get:function(){return this._mipmap},set:function(i){this._mipmap!==i&&(this._mipmap=i,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"scaleMode",{get:function(){return this._scaleMode},set:function(i){this._scaleMode!==i&&(this._scaleMode=i,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"wrapMode",{get:function(){return this._wrapMode},set:function(i){this._wrapMode!==i&&(this._wrapMode=i,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),g.prototype.setStyle=function(i,I){var n;return i!==void 0&&i!==this.scaleMode&&(this.scaleMode=i,n=!0),I!==void 0&&I!==this.mipmap&&(this.mipmap=I,n=!0),n&&this.dirtyStyleId++,this},g.prototype.setSize=function(i,I,n){return n=n||this.resolution,this.setRealSize(i*n,I*n,n)},g.prototype.setRealSize=function(i,I,n){return this.resolution=n||this.resolution,this.width=Math.round(i)/this.resolution,this.height=Math.round(I)/this.resolution,this._refreshPOT(),this.update(),this},g.prototype._refreshPOT=function(){this.isPowerOfTwo=SM(this.realWidth)&&SM(this.realHeight)},g.prototype.setResolution=function(i){var I=this.resolution;return I===i?this:(this.resolution=i,this.valid&&(this.width=Math.round(this.width*I)/i,this.height=Math.round(this.height*I)/i,this.emit("update",this)),this._refreshPOT(),this)},g.prototype.setResource=function(i){if(this.resource===i)return this;if(this.resource)throw new Error("Resource can be set only once");return i.bind(this),this.resource=i,this},g.prototype.update=function(){this.valid?(this.dirtyId++,this.dirtyStyleId++,this.emit("update",this)):this.width>0&&this.height>0&&(this.valid=!0,this.emit("loaded",this),this.emit("update",this))},g.prototype.onError=function(i){this.emit("error",this,i)},g.prototype.destroy=function(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete KC[this.cacheId],delete Rr[this.cacheId],this.cacheId=null),this.dispose(),g.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0},g.prototype.dispose=function(){this.emit("dispose",this)},g.prototype.castToBaseTexture=function(){return this},g.from=function(i,I,n){n===void 0&&(n=Gt.STRICT_TEXTURE_CACHE);var r=typeof i=="string",C=null;if(r)C=i;else{if(!i._pixiId){var o=I&&I.pixiIdPrefix||"pixiid";i._pixiId=o+"_"+Pc()}C=i._pixiId}var a=KC[C];if(r&&n&&!a)throw new Error('The cacheId "'+C+'" does not exist in BaseTextureCache.');return a||(a=new g(i,I),a.cacheId=C,g.addToCache(a,C)),a},g.fromBuffer=function(i,I,n,r){i=i||new Float32Array(I*n*4);var C=new Lh(i,{width:I,height:n}),o=i instanceof Float32Array?Et.FLOAT:Et.UNSIGNED_BYTE;return new g(C,Object.assign({},E3e,r||{width:I,height:n,type:o}))},g.addToCache=function(i,I){I&&(i.textureCacheIds.indexOf(I)===-1&&i.textureCacheIds.push(I),KC[I]&&console.warn("BaseTexture added to the cache with an id ["+I+"] that already had an entry"),KC[I]=i)},g.removeFromCache=function(i){if(typeof i=="string"){var I=KC[i];if(I){var n=I.textureCacheIds.indexOf(i);return n>-1&&I.textureCacheIds.splice(n,1),delete KC[i],I}}else if(i&&i.textureCacheIds){for(var r=0;r0)if(i.resource)this.addResourceAt(i.resource,I);else throw new Error("CubeResource does not support copying of renderTexture.");else i.target=Xc.TEXTURE_CUBE_MAP_POSITIVE_X+I,i.parentTextureArray=this.baseTexture,this.items[I]=i;return i.valid&&!this.valid&&this.resize(i.realWidth,i.realHeight),this.items[I]=i,this},g.prototype.upload=function(i,I,n){for(var r=this.itemDirtyIds,C=0;C)?\s*()]*-->)?\s*\]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i,g}(yA),ZU=function(e){si(g,e);function g(i,I){var n=this;if(I=I||{},!(i instanceof HTMLVideoElement)){var r=document.createElement("video");r.setAttribute("preload","auto"),r.setAttribute("webkit-playsinline",""),r.setAttribute("playsinline",""),typeof i=="string"&&(i=[i]);var C=i[0].src||i[0];yA.crossOrigin(r,C,I.crossorigin);for(var o=0;o2},g.prototype._onPlayStart=function(){this.valid||this._onCanPlay(),this.autoUpdate&&!this._isConnectedToTicker&&(UI.shared.add(this.update,this),this._isConnectedToTicker=!0)},g.prototype._onPlayStop=function(){this._isConnectedToTicker&&(UI.shared.remove(this.update,this),this._isConnectedToTicker=!1)},g.prototype._onCanPlay=function(){var i=this.source;i.removeEventListener("canplay",this._onCanPlay),i.removeEventListener("canplaythrough",this._onCanPlay);var I=this.valid;this.resize(i.videoWidth,i.videoHeight),!I&&this._resolve&&(this._resolve(this),this._resolve=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&i.play()},g.prototype.dispose=function(){this._isConnectedToTicker&&(UI.shared.remove(this.update,this),this._isConnectedToTicker=!1);var i=this.source;i&&(i.removeEventListener("error",this._onError,!0),i.pause(),i.src="",i.load()),e.prototype.dispose.call(this)},Object.defineProperty(g.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(i){i!==this._autoUpdate&&(this._autoUpdate=i,!this._autoUpdate&&this._isConnectedToTicker?(UI.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._isSourcePlaying()&&(UI.shared.add(this.update,this),this._isConnectedToTicker=!0))},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"updateFPS",{get:function(){return this._updateFPS},set:function(i){i!==this._updateFPS&&(this._updateFPS=i)},enumerable:!1,configurable:!0}),g.test=function(i,I){return globalThis.HTMLVideoElement&&i instanceof HTMLVideoElement||g.TYPES.indexOf(I)>-1},g.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],g.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"},g}(yA),GU=function(e){si(g,e);function g(i){return e.call(this,i)||this}return g.test=function(i){return!!globalThis.createImageBitmap&&typeof ImageBitmap<"u"&&i instanceof ImageBitmap},g}(yA);pB.push(wT,GU,pU,ZU,yU,Lh,bU,fU);var dfe={__proto__:null,Resource:Qd,BaseImageResource:yA,INSTALLED:pB,autoDetectResource:BT,AbstractMultiResource:ST,ArrayResource:fU,BufferResource:Lh,CanvasResource:pU,CubeResource:bU,ImageResource:wT,SVGResource:yU,VideoResource:ZU,ImageBitmapResource:GU},M3e=function(e){si(g,e);function g(){return e!==null&&e.apply(this,arguments)||this}return g.prototype.upload=function(i,I,n){var r=i.gl;r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,I.alphaMode===oo.UNPACK);var C=I.realWidth,o=I.realHeight;return n.width===C&&n.height===o?r.texSubImage2D(I.target,0,0,0,C,o,I.format,n.type,this.data):(n.width=C,n.height=o,r.texImage2D(I.target,0,n.internalFormat,C,o,0,I.format,n.type,this.data)),!0},g}(Lh),S9=function(){function e(g,i){this.width=Math.round(g||100),this.height=Math.round(i||100),this.stencil=!1,this.depth=!1,this.dirtyId=0,this.dirtyFormat=0,this.dirtySize=0,this.depthTexture=null,this.colorTextures=[],this.glFramebuffers={},this.disposeRunner=new LI("disposeFramebuffer"),this.multisample=pi.NONE}return Object.defineProperty(e.prototype,"colorTexture",{get:function(){return this.colorTextures[0]},enumerable:!1,configurable:!0}),e.prototype.addColorTexture=function(g,i){return g===void 0&&(g=0),this.colorTextures[g]=i||new vg(null,{scaleMode:ea.NEAREST,resolution:1,mipmap:Co.OFF,width:this.width,height:this.height}),this.dirtyId++,this.dirtyFormat++,this},e.prototype.addDepthTexture=function(g){return this.depthTexture=g||new vg(new M3e(null,{width:this.width,height:this.height}),{scaleMode:ea.NEAREST,resolution:1,width:this.width,height:this.height,mipmap:Co.OFF,format:ft.DEPTH_COMPONENT,type:Et.UNSIGNED_SHORT}),this.dirtyId++,this.dirtyFormat++,this},e.prototype.enableDepth=function(){return this.depth=!0,this.dirtyId++,this.dirtyFormat++,this},e.prototype.enableStencil=function(){return this.stencil=!0,this.dirtyId++,this.dirtyFormat++,this},e.prototype.resize=function(g,i){if(g=Math.round(g),i=Math.round(i),!(g===this.width&&i===this.height)){this.width=g,this.height=i,this.dirtyId++,this.dirtySize++;for(var I=0;I-1&&I.textureCacheIds.splice(n,1),delete Rr[i],I}}else if(i&&i.textureCacheIds){for(var r=0;rthis.baseTexture.width,a=n+C>this.baseTexture.height;if(o||a){var s=o&&a?"and":"or",A="X: "+I+" + "+r+" = "+(I+r)+" > "+this.baseTexture.width,l="Y: "+n+" + "+C+" = "+(n+C)+" > "+this.baseTexture.height;throw new Error("Texture Error: frame does not fit inside the base Texture dimensions: "+(A+" "+s+" "+l))}this.valid=r&&C&&this.baseTexture.valid,!this.trim&&!this.rotate&&(this.orig=i),this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"rotate",{get:function(){return this._rotate},set:function(i){this._rotate=i,this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"width",{get:function(){return this.orig.width},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"height",{get:function(){return this.orig.height},enumerable:!1,configurable:!0}),g.prototype.castToBaseTexture=function(){return this.baseTexture},Object.defineProperty(g,"EMPTY",{get:function(){return g._EMPTY||(g._EMPTY=new g(new vg),RR(g._EMPTY),RR(g._EMPTY.baseTexture)),g._EMPTY},enumerable:!1,configurable:!0}),Object.defineProperty(g,"WHITE",{get:function(){if(!g._WHITE){var i=Gt.ADAPTER.createCanvas(16,16),I=i.getContext("2d");i.width=16,i.height=16,I.fillStyle="white",I.fillRect(0,0,16,16),g._WHITE=new g(vg.from(i)),RR(g._WHITE),RR(g._WHITE.baseTexture)}return g._WHITE},enumerable:!1,configurable:!0}),g}(w0),Ks=function(e){si(g,e);function g(i,I){var n=e.call(this,i,I)||this;return n.valid=!0,n.filterFrame=null,n.filterPoolKey=null,n.updateUvs(),n}return Object.defineProperty(g.prototype,"framebuffer",{get:function(){return this.baseTexture.framebuffer},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"multisample",{get:function(){return this.framebuffer.multisample},set:function(i){this.framebuffer.multisample=i},enumerable:!1,configurable:!0}),g.prototype.resize=function(i,I,n){n===void 0&&(n=!0);var r=this.baseTexture.resolution,C=Math.round(i*r)/r,o=Math.round(I*r)/r;this.valid=C>0&&o>0,this._frame.width=this.orig.width=C,this._frame.height=this.orig.height=o,n&&this.baseTexture.resize(C,o),this.updateUvs()},g.prototype.setResolution=function(i){var I=this.baseTexture;I.resolution!==i&&(I.setResolution(i),this.resize(I.width,I.height,!1))},g.create=function(i){for(var I=arguments,n=[],r=1;r>>0,n>1&&(r+=n*4294967296)):r=n>1?-n:-1,this.texturePool[r]||(this.texturePool[r]=[]);var C=this.texturePool[r].pop();return C||(C=this.createTexture(g,i,n)),C.filterPoolKey=r,C.setResolution(I),C},e.prototype.getFilterTexture=function(g,i,I){var n=this.getOptimalTexture(g.width,g.height,i||g.resolution,I||pi.NONE);return n.filterFrame=g.filterFrame,n},e.prototype.returnTexture=function(g){var i=g.filterPoolKey;g.filterFrame=null,this.texturePool[i].push(g)},e.prototype.returnFilterTexture=function(g){this.returnTexture(g)},e.prototype.clear=function(g){if(g=g!==!1,g)for(var i in this.texturePool){var I=this.texturePool[i];if(I)for(var n=0;n0&&g.height>0;for(var i in this.texturePool)if(Number(i)<0){var I=this.texturePool[i];if(I)for(var n=0;n1){for(var A=0;A1&&(l=this.getOptimalFilterTexture(A.width,A.height,i.resolution),l.filterFrame=A.filterFrame),I[c].apply(this,A,l,MC.CLEAR,i);var u=A;A=l,l=u}I[c].apply(this,A,s.renderTexture,MC.BLEND,i),c>1&&i.multisample>1&&this.returnFilterTexture(i.renderTexture),this.returnFilterTexture(A),this.returnFilterTexture(l)}i.clear(),this.statePool.push(i)},e.prototype.bindAndClear=function(g,i){i===void 0&&(i=MC.CLEAR);var I=this.renderer,n=I.renderTexture,r=I.state;if(g===this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?this.renderer.projection.transform=this.activeState.transform:this.renderer.projection.transform=null,g&&g.filterFrame){var C=this.tempRect;C.x=0,C.y=0,C.width=g.filterFrame.width,C.height=g.filterFrame.height,n.bind(g,g.filterFrame,C)}else g!==this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?n.bind(g):this.renderer.renderTexture.bind(g,this.activeState.bindingSourceFrame,this.activeState.bindingDestinationFrame);var o=r.stateId&1||this.forceClear;(i===MC.CLEAR||i===MC.BLIT&&o)&&this.renderer.framebuffer.clear(0,0,0,0)},e.prototype.applyFilter=function(g,i,I,n){var r=this.renderer;r.state.set(g.state),this.bindAndClear(I,n),g.uniforms.uSampler=i,g.uniforms.filterGlobals=this.globalUniforms,r.shader.bind(g),g.legacy=!!g.program.attributeData.aTextureCoord,g.legacy?(this.quadUv.map(i._frame,i.filterFrame),r.geometry.bind(this.quadUv),r.geometry.draw(UC.TRIANGLES)):(r.geometry.bind(this.quad),r.geometry.draw(UC.TRIANGLE_STRIP))},e.prototype.calculateSpriteMatrix=function(g,i){var I=this.activeState,n=I.sourceFrame,r=I.destinationFrame,C=i._texture.orig,o=g.set(r.width,0,0,r.height,n.x,n.y),a=i.worldTransform.copyTo(GI.TEMP_MATRIX);return a.invert(),o.prepend(a),o.scale(1/C.width,1/C.height),o.translate(i.anchor.x,i.anchor.y),o},e.prototype.destroy=function(){this.renderer=null,this.texturePool.clear(!1)},e.prototype.getOptimalFilterTexture=function(g,i,I,n){return I===void 0&&(I=1),n===void 0&&(n=pi.NONE),this.texturePool.getOptimalTexture(g,i,I,n)},e.prototype.getFilterTexture=function(g,i,I){if(typeof g=="number"){var n=g;g=i,i=n}g=g||this.activeState.renderTexture;var r=this.texturePool.getOptimalTexture(g.width,g.height,i||g.resolution,I||pi.NONE);return r.filterFrame=g.filterFrame,r},e.prototype.returnFilterTexture=function(g){this.texturePool.returnTexture(g)},e.prototype.emptyPool=function(){this.texturePool.clear(!0)},e.prototype.resize=function(){this.texturePool.setScreenSize(this.renderer.view)},e.prototype.transformAABB=function(g,i){var I=VR[0],n=VR[1],r=VR[2],C=VR[3];I.set(i.left,i.top),n.set(i.left,i.bottom),r.set(i.right,i.top),C.set(i.right,i.bottom),g.apply(I,I),g.apply(n,n),g.apply(r,r),g.apply(C,C);var o=Math.min(I.x,n.x,r.x,C.x),a=Math.min(I.y,n.y,r.y,C.y),s=Math.max(I.x,n.x,r.x,C.x),A=Math.max(I.y,n.y,r.y,C.y);i.x=o,i.y=a,i.width=s-o,i.height=A-a},e.prototype.roundFrame=function(g,i,I,n,r){if(!(g.width<=0||g.height<=0||I.width<=0||I.height<=0)){if(r){var C=r.a,o=r.b,a=r.c,s=r.d;if((Math.abs(o)>1e-4||Math.abs(a)>1e-4)&&(Math.abs(C)>1e-4||Math.abs(s)>1e-4))return}r=r?PK.copyFrom(r):PK.identity(),r.translate(-I.x,-I.y).scale(n.width/I.width,n.height/I.height).translate(n.x,n.y),this.transformAABB(r,g),g.ceil(i),this.transformAABB(r.invert(),g)}},e}(),XS=function(){function e(g){this.renderer=g}return e.prototype.flush=function(){},e.prototype.destroy=function(){this.renderer=null},e.prototype.start=function(){},e.prototype.stop=function(){this.flush()},e.prototype.render=function(g){},e}(),RU=function(){function e(g){this.renderer=g,this.emptyRenderer=new XS(g),this.currentRenderer=this.emptyRenderer}return e.prototype.setObjectRenderer=function(g){this.currentRenderer!==g&&(this.currentRenderer.stop(),this.currentRenderer=g,this.currentRenderer.start())},e.prototype.flush=function(){this.setObjectRenderer(this.emptyRenderer)},e.prototype.reset=function(){this.setObjectRenderer(this.emptyRenderer)},e.prototype.copyBoundTextures=function(g,i){for(var I=this.renderer.texture.boundTextures,n=i-1;n>=0;--n)g[n]=I[n]||null,g[n]&&(g[n]._batchLocation=n)},e.prototype.boundArray=function(g,i,I,n){for(var r=g.elements,C=g.ids,o=g.count,a=0,s=0;s=0&&l=pA.WEBGL2&&(I=g.getContext("webgl2",i)),I)this.webGLVersion=2;else if(this.webGLVersion=1,I=g.getContext("webgl",i)||g.getContext("experimental-webgl",i),!I)throw new Error("This browser does not support WebGL. Try using the canvas renderer");return this.gl=I,this.getExtensions(),this.gl},e.prototype.getExtensions=function(){var g=this.gl,i={loseContext:g.getExtension("WEBGL_lose_context"),anisotropicFiltering:g.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:g.getExtension("OES_texture_float_linear"),s3tc:g.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:g.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:g.getExtension("WEBGL_compressed_texture_etc"),etc1:g.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:g.getExtension("WEBGL_compressed_texture_pvrtc")||g.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:g.getExtension("WEBGL_compressed_texture_atc"),astc:g.getExtension("WEBGL_compressed_texture_astc")};this.webGLVersion===1?Object.assign(this.extensions,i,{drawBuffers:g.getExtension("WEBGL_draw_buffers"),depthTexture:g.getExtension("WEBGL_depth_texture"),vertexArrayObject:g.getExtension("OES_vertex_array_object")||g.getExtension("MOZ_OES_vertex_array_object")||g.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:g.getExtension("OES_element_index_uint"),floatTexture:g.getExtension("OES_texture_float"),floatTextureLinear:g.getExtension("OES_texture_float_linear"),textureHalfFloat:g.getExtension("OES_texture_half_float"),textureHalfFloatLinear:g.getExtension("OES_texture_half_float_linear")}):this.webGLVersion===2&&Object.assign(this.extensions,i,{colorBufferFloat:g.getExtension("EXT_color_buffer_float")})},e.prototype.handleContextLost=function(g){var i=this;g.preventDefault(),setTimeout(function(){i.gl.isContextLost()&&i.extensions.loseContext&&i.extensions.loseContext.restoreContext()},0)},e.prototype.handleContextRestored=function(){this.renderer.runners.contextChange.emit(this.gl)},e.prototype.destroy=function(){var g=this.renderer.view;this.renderer=null,g.removeEventListener("webglcontextlost",this.handleContextLost),g.removeEventListener("webglcontextrestored",this.handleContextRestored),this.gl.useProgram(null),this.extensions.loseContext&&this.extensions.loseContext.loseContext()},e.prototype.postrender=function(){this.renderer.renderingToScreen&&this.gl.flush()},e.prototype.validateContext=function(g){var i=g.getContextAttributes(),I="WebGL2RenderingContext"in globalThis&&g instanceof globalThis.WebGL2RenderingContext;I&&(this.webGLVersion=2),i&&!i.stencil&&console.warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");var n=I||!!g.getExtension("OES_element_index_uint");this.supports.uint32Indices=n,n||console.warn("Provided WebGL context does not support 32 index buffer, complex graphics may not render correctly")},e}(),pfe=function(){function e(g){this.framebuffer=g,this.stencil=null,this.dirtyId=-1,this.dirtyFormat=-1,this.dirtySize=-1,this.multisample=pi.NONE,this.msaaBuffer=null,this.blitFramebuffer=null,this.mipLevel=0}return e}(),U3e=new wg,WU=function(){function e(g){this.renderer=g,this.managedFramebuffers=[],this.unknownFramebuffer=new S9(10,10),this.msaaSamples=null}return e.prototype.contextChange=function(){this.disposeAll(!0);var g=this.gl=this.renderer.gl;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.current=this.unknownFramebuffer,this.viewport=new wg,this.hasMRT=!0,this.writeDepthTexture=!0,this.renderer.context.webGLVersion===1){var i=this.renderer.context.extensions.drawBuffers,I=this.renderer.context.extensions.depthTexture;Gt.PREFER_ENV===pA.WEBGL_LEGACY&&(i=null,I=null),i?g.drawBuffers=function(n){return i.drawBuffersWEBGL(n)}:(this.hasMRT=!1,g.drawBuffers=function(){}),I||(this.writeDepthTexture=!1)}else this.msaaSamples=g.getInternalformatParameter(g.RENDERBUFFER,g.RGBA8,g.SAMPLES)},e.prototype.bind=function(g,i,I){I===void 0&&(I=0);var n=this.gl;if(g){var r=g.glFramebuffers[this.CONTEXT_UID]||this.initFramebuffer(g);this.current!==g&&(this.current=g,n.bindFramebuffer(n.FRAMEBUFFER,r.framebuffer)),r.mipLevel!==I&&(g.dirtyId++,g.dirtyFormat++,r.mipLevel=I),r.dirtyId!==g.dirtyId&&(r.dirtyId=g.dirtyId,r.dirtyFormat!==g.dirtyFormat?(r.dirtyFormat=g.dirtyFormat,r.dirtySize=g.dirtySize,this.updateFramebuffer(g,I)):r.dirtySize!==g.dirtySize&&(r.dirtySize=g.dirtySize,this.resizeFramebuffer(g)));for(var C=0;C>I,s=i.height>>I,A=a/i.width;this.setViewport(i.x*A,i.y*A,a,s)}else{var a=g.width>>I,s=g.height>>I;this.setViewport(0,0,a,s)}}else this.current&&(this.current=null,n.bindFramebuffer(n.FRAMEBUFFER,null)),i?this.setViewport(i.x,i.y,i.width,i.height):this.setViewport(0,0,this.renderer.width,this.renderer.height)},e.prototype.setViewport=function(g,i,I,n){var r=this.viewport;g=Math.round(g),i=Math.round(i),I=Math.round(I),n=Math.round(n),(r.width!==I||r.height!==n||r.x!==g||r.y!==i)&&(r.x=g,r.y=i,r.width=I,r.height=n,this.gl.viewport(g,i,I,n))},Object.defineProperty(e.prototype,"size",{get:function(){return this.current?{x:0,y:0,width:this.current.width,height:this.current.height}:{x:0,y:0,width:this.renderer.width,height:this.renderer.height}},enumerable:!1,configurable:!0}),e.prototype.clear=function(g,i,I,n,r){r===void 0&&(r=aB.COLOR|aB.DEPTH);var C=this.gl;C.clearColor(g,i,I,n),C.clear(r)},e.prototype.initFramebuffer=function(g){var i=this.gl,I=new pfe(i.createFramebuffer());return I.multisample=this.detectSamples(g.multisample),g.glFramebuffers[this.CONTEXT_UID]=I,this.managedFramebuffers.push(g),g.disposeRunner.add(this),I},e.prototype.resizeFramebuffer=function(g){var i=this.gl,I=g.glFramebuffers[this.CONTEXT_UID];I.msaaBuffer&&(i.bindRenderbuffer(i.RENDERBUFFER,I.msaaBuffer),i.renderbufferStorageMultisample(i.RENDERBUFFER,I.multisample,i.RGBA8,g.width,g.height)),I.stencil&&(i.bindRenderbuffer(i.RENDERBUFFER,I.stencil),I.msaaBuffer?i.renderbufferStorageMultisample(i.RENDERBUFFER,I.multisample,i.DEPTH24_STENCIL8,g.width,g.height):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,g.width,g.height));var n=g.colorTextures,r=n.length;i.drawBuffers||(r=Math.min(r,1));for(var C=0;C1&&this.canMultisampleFramebuffer(g)?(n.msaaBuffer=n.msaaBuffer||I.createRenderbuffer(),I.bindRenderbuffer(I.RENDERBUFFER,n.msaaBuffer),I.renderbufferStorageMultisample(I.RENDERBUFFER,n.multisample,I.RGBA8,g.width,g.height),I.framebufferRenderbuffer(I.FRAMEBUFFER,I.COLOR_ATTACHMENT0,I.RENDERBUFFER,n.msaaBuffer)):n.msaaBuffer&&(I.deleteRenderbuffer(n.msaaBuffer),n.msaaBuffer=null,n.blitFramebuffer&&(n.blitFramebuffer.dispose(),n.blitFramebuffer=null));for(var o=[],a=0;a1&&I.drawBuffers(o),g.depthTexture){var l=this.writeDepthTexture;if(l){var c=g.depthTexture;this.renderer.texture.bind(c,0),I.framebufferTexture2D(I.FRAMEBUFFER,I.DEPTH_ATTACHMENT,I.TEXTURE_2D,c._glTextures[this.CONTEXT_UID].texture,i)}}(g.stencil||g.depth)&&!(g.depthTexture&&this.writeDepthTexture)?(n.stencil=n.stencil||I.createRenderbuffer(),I.bindRenderbuffer(I.RENDERBUFFER,n.stencil),n.msaaBuffer?I.renderbufferStorageMultisample(I.RENDERBUFFER,n.multisample,I.DEPTH24_STENCIL8,g.width,g.height):I.renderbufferStorage(I.RENDERBUFFER,I.DEPTH_STENCIL,g.width,g.height),I.framebufferRenderbuffer(I.FRAMEBUFFER,I.DEPTH_STENCIL_ATTACHMENT,I.RENDERBUFFER,n.stencil)):n.stencil&&(I.deleteRenderbuffer(n.stencil),n.stencil=null)},e.prototype.canMultisampleFramebuffer=function(g){return this.renderer.context.webGLVersion!==1&&g.colorTextures.length<=1&&!g.depthTexture},e.prototype.detectSamples=function(g){var i=this.msaaSamples,I=pi.NONE;if(g<=1||i===null)return I;for(var n=0;n=0&&this.managedFramebuffers.splice(r,1),g.disposeRunner.remove(this),i||(n.deleteFramebuffer(I.framebuffer),I.msaaBuffer&&n.deleteRenderbuffer(I.msaaBuffer),I.stencil&&n.deleteRenderbuffer(I.stencil)),I.blitFramebuffer&&I.blitFramebuffer.dispose()}},e.prototype.disposeAll=function(g){var i=this.managedFramebuffers;this.managedFramebuffers=[];for(var I=0;I=pA.WEBGL2&&(g=e.getContext("webgl2",{})),g||(g=e.getContext("webgl",{})||e.getContext("experimental-webgl",{}),g?g.getExtension("WEBGL_draw_buffers"):g=null),Ny=g}return Ny}var WR;function j3e(){if(!WR){WR=Yr.MEDIUM;var e=Gfe();if(e&&e.getShaderPrecisionFormat){var g=e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT);WR=g.precision?Yr.HIGH:Yr.MEDIUM}}return WR}function wee(e,g,i){if(e.substring(0,9)!=="precision"){var I=g;return g===Yr.HIGH&&i!==Yr.HIGH&&(I=Yr.MEDIUM),"precision "+I+` float; +`+e}else if(i!==Yr.HIGH&&e.substring(0,15)==="precision highp")return e.replace("precision highp","precision mediump");return e}var $3e={float:1,vec2:2,vec3:3,vec4:4,int:1,ivec2:2,ivec3:3,ivec4:4,uint:1,uvec2:2,uvec3:3,uvec4:4,bool:1,bvec2:2,bvec3:3,bvec4:4,mat2:4,mat3:9,mat4:16,sampler2D:1};function vfe(e){return $3e[e]}var XR=null,Ree={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",UNSIGNED_INT:"uint",UNSIGNED_INT_VEC2:"uvec2",UNSIGNED_INT_VEC3:"uvec3",UNSIGNED_INT_VEC4:"uvec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",INT_SAMPLER_2D:"sampler2D",UNSIGNED_INT_SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube",INT_SAMPLER_CUBE:"samplerCube",UNSIGNED_INT_SAMPLER_CUBE:"samplerCube",SAMPLER_2D_ARRAY:"sampler2DArray",INT_SAMPLER_2D_ARRAY:"sampler2DArray",UNSIGNED_INT_SAMPLER_2D_ARRAY:"sampler2DArray"};function Bfe(e,g){if(!XR){var i=Object.keys(Ree);XR={};for(var I=0;I0&&(g+=` -else `),I0&&(g+=` +else `),i"u"?.5:I,this.isSimple=!1}return Object.defineProperty(e.prototype,"texture",{get:function(){return this._texture},set:function(g){this._texture=g,this._textureID=-1},enumerable:!1,configurable:!0}),e.prototype.multiplyUvs=function(g,I){I===void 0&&(I=g);for(var i=this.mapCoord,n=0;n0?this.maskStack[this.maskStack.length-1]._colorMask:15;i!==I&&this.renderer.gl.colorMask((i&1)!==0,(i&2)!==0,(i&4)!==0,(i&8)!==0)},e.prototype.destroy=function(){this.renderer=null},e}(),yfe=function(){function e(g){this.renderer=g,this.maskStack=[],this.glConst=0}return e.prototype.getStackLength=function(){return this.maskStack.length},e.prototype.setMaskStack=function(g){var I=this.renderer.gl,i=this.getStackLength();this.maskStack=g;var n=this.getStackLength();n!==i&&(n===0?I.disable(this.glConst):(I.enable(this.glConst),this._useCurrent()))},e.prototype._useCurrent=function(){},e.prototype.destroy=function(){this.renderer=null,this.maskStack=null},e}(),See=new Zi,wee=[],wU=function(e){AI(g,e);function g(I){var i=e.call(this,I)||this;return i.glConst=Gt.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST,i}return g.prototype.getStackLength=function(){var I=this.maskStack[this.maskStack.length-1];return I?I._scissorCounter:0},g.prototype.calcScissorRect=function(I){var i;if(!I._scissorRectLocal){var n=I._scissorRect,C=I.maskObject,r=this.renderer,o=r.renderTexture,a=C.getBounds(!0,(i=wee.pop())!==null&&i!==void 0?i:new wg);this.roundFrameToPixels(a,o.current?o.current.resolution:r.resolution,o.sourceFrame,o.destinationFrame,r.projection.transform),n&&a.fit(n),I._scissorRectLocal=a}},g.isMatrixRotated=function(I){if(!I)return!1;var i=I.a,n=I.b,C=I.c,r=I.d;return(Math.abs(n)>1e-4||Math.abs(C)>1e-4)&&(Math.abs(i)>1e-4||Math.abs(r)>1e-4)},g.prototype.testScissor=function(I){var i=I.maskObject;if(!i.isFastRect||!i.isFastRect()||g.isMatrixRotated(i.worldTransform)||g.isMatrixRotated(this.renderer.projection.transform))return!1;this.calcScissorRect(I);var n=I._scissorRectLocal;return n.width>0&&n.height>0},g.prototype.roundFrameToPixels=function(I,i,n,C,r){g.isMatrixRotated(r)||(r=r?See.copyFrom(r):See.identity(),r.translate(-n.x,-n.y).scale(C.width/n.width,C.height/n.height).translate(C.x,C.y),this.renderer.filter.transformAABB(r,I),I.fit(C),I.x=Math.round(I.x*i),I.y=Math.round(I.y*i),I.width=Math.round(I.width*i),I.height=Math.round(I.height*i))},g.prototype.push=function(I){I._scissorRectLocal||this.calcScissorRect(I);var i=this.renderer.gl;I._scissorRect||i.enable(i.SCISSOR_TEST),I._scissorCounter++,I._scissorRect=I._scissorRectLocal,this._useCurrent()},g.prototype.pop=function(I){var i=this.renderer.gl;I&&wee.push(I._scissorRectLocal),this.getStackLength()>0?this._useCurrent():i.disable(i.SCISSOR_TEST)},g.prototype._useCurrent=function(){var I=this.maskStack[this.maskStack.length-1]._scissorRect,i;this.renderer.renderTexture.current?i=I.y:i=this.renderer.height-I.height-I.y,this.renderer.gl.scissor(I.x,i,I.width,I.height)},g}(yfe),RU=function(e){AI(g,e);function g(I){var i=e.call(this,I)||this;return i.glConst=Gt.ADAPTER.getWebGLRenderingContext().STENCIL_TEST,i}return g.prototype.getStackLength=function(){var I=this.maskStack[this.maskStack.length-1];return I?I._stencilCounter:0},g.prototype.push=function(I){var i=I.maskObject,n=this.renderer.gl,C=I._stencilCounter;C===0&&(this.renderer.framebuffer.forceStencil(),n.clearStencil(0),n.clear(n.STENCIL_BUFFER_BIT),n.enable(n.STENCIL_TEST)),I._stencilCounter++;var r=I._colorMask;r!==0&&(I._colorMask=0,n.colorMask(!1,!1,!1,!1)),n.stencilFunc(n.EQUAL,C,4294967295),n.stencilOp(n.KEEP,n.KEEP,n.INCR),i.renderable=!0,i.render(this.renderer),this.renderer.batch.flush(),i.renderable=!1,r!==0&&(I._colorMask=r,n.colorMask((r&1)!==0,(r&2)!==0,(r&4)!==0,(r&8)!==0)),this._useCurrent()},g.prototype.pop=function(I){var i=this.renderer.gl;if(this.getStackLength()===0)i.disable(i.STENCIL_TEST);else{var n=this.maskStack.length!==0?this.maskStack[this.maskStack.length-1]:null,C=n?n._colorMask:15;C!==0&&(n._colorMask=0,i.colorMask(!1,!1,!1,!1)),i.stencilOp(i.KEEP,i.KEEP,i.DECR),I.renderable=!0,I.render(this.renderer),this.renderer.batch.flush(),I.renderable=!1,C!==0&&(n._colorMask=C,i.colorMask((C&1)!==0,(C&2)!==0,(C&4)!==0,(C&8)!==0)),this._useCurrent()}},g.prototype._useCurrent=function(){var I=this.renderer.gl;I.stencilFunc(I.EQUAL,this.getStackLength(),4294967295),I.stencilOp(I.KEEP,I.KEEP,I.KEEP)},g}(yfe),VU=function(){function e(g){this.renderer=g,this.destinationFrame=null,this.sourceFrame=null,this.defaultFrame=null,this.projectionMatrix=new Zi,this.transform=null}return e.prototype.update=function(g,I,i,n){this.destinationFrame=g||this.destinationFrame||this.defaultFrame,this.sourceFrame=I||this.sourceFrame||g,this.calculateProjection(this.destinationFrame,this.sourceFrame,i,n),this.transform&&this.projectionMatrix.append(this.transform);var C=this.renderer;C.globalUniforms.uniforms.projectionMatrix=this.projectionMatrix,C.globalUniforms.update(),C.shader.shader&&C.shader.syncUniformGroup(C.shader.shader.uniforms.globals)},e.prototype.calculateProjection=function(g,I,i,n){var C=this.projectionMatrix,r=n?-1:1;C.identity(),C.a=1/I.width*2,C.d=r*(1/I.height*2),C.tx=-1-I.x*C.a,C.ty=-r-I.y*C.d},e.prototype.setTransform=function(g){},e.prototype.destroy=function(){this.renderer=null},e}(),Gu=new wg,Ny=new wg,WU=function(){function e(g){this.renderer=g,this.clearColor=g._backgroundColorRgba,this.defaultMaskStack=[],this.current=null,this.sourceFrame=new wg,this.destinationFrame=new wg,this.viewportFrame=new wg}return e.prototype.bind=function(g,I,i){g===void 0&&(g=null);var n=this.renderer;this.current=g;var C,r,o;g?(C=g.baseTexture,o=C.resolution,I||(Gu.width=g.frame.width,Gu.height=g.frame.height,I=Gu),i||(Ny.x=g.frame.x,Ny.y=g.frame.y,Ny.width=I.width,Ny.height=I.height,i=Ny),r=C.framebuffer):(o=n.resolution,I||(Gu.width=n.screen.width,Gu.height=n.screen.height,I=Gu),i||(i=Gu,i.width=I.width,i.height=I.height));var a=this.viewportFrame;a.x=i.x*o,a.y=i.y*o,a.width=i.width*o,a.height=i.height*o,g||(a.y=n.view.height-(a.y+a.height)),a.ceil(),this.renderer.framebuffer.bind(r,a),this.renderer.projection.update(i,I,o,!r),g?this.renderer.mask.setMaskStack(C.maskStack):this.renderer.mask.setMaskStack(this.defaultMaskStack),this.sourceFrame.copyFrom(I),this.destinationFrame.copyFrom(i)},e.prototype.clear=function(g,I){this.current?g=g||this.current.baseTexture.clearColor:g=g||this.clearColor;var i=this.destinationFrame,n=this.current?this.current.baseTexture:this.renderer.screen,C=i.width!==n.width||i.height!==n.height;if(C){var r=this.viewportFrame,o=r.x,a=r.y,s=r.width,A=r.height;o=Math.round(o),a=Math.round(a),s=Math.round(s),A=Math.round(A),this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST),this.renderer.gl.scissor(o,a,s,A)}this.renderer.framebuffer.clear(g[0],g[1],g[2],g[3],I),C&&this.renderer.scissor.pop()},e.prototype.resize=function(){this.bind(null)},e.prototype.reset=function(){this.bind(null)},e.prototype.destroy=function(){this.renderer=null},e}();function ize(e,g,I,i,n){I.buffer.update(n)}var nze={float:` +`,Vee=new GI,RT=function(){function e(g,i){this._texture=g,this.mapCoord=new GI,this.uClampFrame=new Float32Array(4),this.uClampOffset=new Float32Array(2),this._textureID=-1,this._updateID=0,this.clampOffset=0,this.clampMargin=typeof i>"u"?.5:i,this.isSimple=!1}return Object.defineProperty(e.prototype,"texture",{get:function(){return this._texture},set:function(g){this._texture=g,this._textureID=-1},enumerable:!1,configurable:!0}),e.prototype.multiplyUvs=function(g,i){i===void 0&&(i=g);for(var I=this.mapCoord,n=0;n0?this.maskStack[this.maskStack.length-1]._colorMask:15;I!==i&&this.renderer.gl.colorMask((I&1)!==0,(I&2)!==0,(I&4)!==0,(I&8)!==0)},e.prototype.destroy=function(){this.renderer=null},e}(),Rfe=function(){function e(g){this.renderer=g,this.maskStack=[],this.glConst=0}return e.prototype.getStackLength=function(){return this.maskStack.length},e.prototype.setMaskStack=function(g){var i=this.renderer.gl,I=this.getStackLength();this.maskStack=g;var n=this.getStackLength();n!==I&&(n===0?i.disable(this.glConst):(i.enable(this.glConst),this._useCurrent()))},e.prototype._useCurrent=function(){},e.prototype.destroy=function(){this.renderer=null,this.maskStack=null},e}(),Wee=new GI,Xee=[],TU=function(e){si(g,e);function g(i){var I=e.call(this,i)||this;return I.glConst=Gt.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST,I}return g.prototype.getStackLength=function(){var i=this.maskStack[this.maskStack.length-1];return i?i._scissorCounter:0},g.prototype.calcScissorRect=function(i){var I;if(!i._scissorRectLocal){var n=i._scissorRect,r=i.maskObject,C=this.renderer,o=C.renderTexture,a=r.getBounds(!0,(I=Xee.pop())!==null&&I!==void 0?I:new wg);this.roundFrameToPixels(a,o.current?o.current.resolution:C.resolution,o.sourceFrame,o.destinationFrame,C.projection.transform),n&&a.fit(n),i._scissorRectLocal=a}},g.isMatrixRotated=function(i){if(!i)return!1;var I=i.a,n=i.b,r=i.c,C=i.d;return(Math.abs(n)>1e-4||Math.abs(r)>1e-4)&&(Math.abs(I)>1e-4||Math.abs(C)>1e-4)},g.prototype.testScissor=function(i){var I=i.maskObject;if(!I.isFastRect||!I.isFastRect()||g.isMatrixRotated(I.worldTransform)||g.isMatrixRotated(this.renderer.projection.transform))return!1;this.calcScissorRect(i);var n=i._scissorRectLocal;return n.width>0&&n.height>0},g.prototype.roundFrameToPixels=function(i,I,n,r,C){g.isMatrixRotated(C)||(C=C?Wee.copyFrom(C):Wee.identity(),C.translate(-n.x,-n.y).scale(r.width/n.width,r.height/n.height).translate(r.x,r.y),this.renderer.filter.transformAABB(C,i),i.fit(r),i.x=Math.round(i.x*I),i.y=Math.round(i.y*I),i.width=Math.round(i.width*I),i.height=Math.round(i.height*I))},g.prototype.push=function(i){i._scissorRectLocal||this.calcScissorRect(i);var I=this.renderer.gl;i._scissorRect||I.enable(I.SCISSOR_TEST),i._scissorCounter++,i._scissorRect=i._scissorRectLocal,this._useCurrent()},g.prototype.pop=function(i){var I=this.renderer.gl;i&&Xee.push(i._scissorRectLocal),this.getStackLength()>0?this._useCurrent():I.disable(I.SCISSOR_TEST)},g.prototype._useCurrent=function(){var i=this.maskStack[this.maskStack.length-1]._scissorRect,I;this.renderer.renderTexture.current?I=i.y:I=this.renderer.height-i.height-i.y,this.renderer.gl.scissor(i.x,I,i.width,i.height)},g}(Rfe),NU=function(e){si(g,e);function g(i){var I=e.call(this,i)||this;return I.glConst=Gt.ADAPTER.getWebGLRenderingContext().STENCIL_TEST,I}return g.prototype.getStackLength=function(){var i=this.maskStack[this.maskStack.length-1];return i?i._stencilCounter:0},g.prototype.push=function(i){var I=i.maskObject,n=this.renderer.gl,r=i._stencilCounter;r===0&&(this.renderer.framebuffer.forceStencil(),n.clearStencil(0),n.clear(n.STENCIL_BUFFER_BIT),n.enable(n.STENCIL_TEST)),i._stencilCounter++;var C=i._colorMask;C!==0&&(i._colorMask=0,n.colorMask(!1,!1,!1,!1)),n.stencilFunc(n.EQUAL,r,4294967295),n.stencilOp(n.KEEP,n.KEEP,n.INCR),I.renderable=!0,I.render(this.renderer),this.renderer.batch.flush(),I.renderable=!1,C!==0&&(i._colorMask=C,n.colorMask((C&1)!==0,(C&2)!==0,(C&4)!==0,(C&8)!==0)),this._useCurrent()},g.prototype.pop=function(i){var I=this.renderer.gl;if(this.getStackLength()===0)I.disable(I.STENCIL_TEST);else{var n=this.maskStack.length!==0?this.maskStack[this.maskStack.length-1]:null,r=n?n._colorMask:15;r!==0&&(n._colorMask=0,I.colorMask(!1,!1,!1,!1)),I.stencilOp(I.KEEP,I.KEEP,I.DECR),i.renderable=!0,i.render(this.renderer),this.renderer.batch.flush(),i.renderable=!1,r!==0&&(n._colorMask=r,I.colorMask((r&1)!==0,(r&2)!==0,(r&4)!==0,(r&8)!==0)),this._useCurrent()}},g.prototype._useCurrent=function(){var i=this.renderer.gl;i.stencilFunc(i.EQUAL,this.getStackLength(),4294967295),i.stencilOp(i.KEEP,i.KEEP,i.KEEP)},g}(Rfe),kU=function(){function e(g){this.renderer=g,this.destinationFrame=null,this.sourceFrame=null,this.defaultFrame=null,this.projectionMatrix=new GI,this.transform=null}return e.prototype.update=function(g,i,I,n){this.destinationFrame=g||this.destinationFrame||this.defaultFrame,this.sourceFrame=i||this.sourceFrame||g,this.calculateProjection(this.destinationFrame,this.sourceFrame,I,n),this.transform&&this.projectionMatrix.append(this.transform);var r=this.renderer;r.globalUniforms.uniforms.projectionMatrix=this.projectionMatrix,r.globalUniforms.update(),r.shader.shader&&r.shader.syncUniformGroup(r.shader.shader.uniforms.globals)},e.prototype.calculateProjection=function(g,i,I,n){var r=this.projectionMatrix,C=n?-1:1;r.identity(),r.a=1/i.width*2,r.d=C*(1/i.height*2),r.tx=-1-i.x*r.a,r.ty=-C-i.y*r.d},e.prototype.setTransform=function(g){},e.prototype.destroy=function(){this.renderer=null},e}(),vu=new wg,Yy=new wg,YU=function(){function e(g){this.renderer=g,this.clearColor=g._backgroundColorRgba,this.defaultMaskStack=[],this.current=null,this.sourceFrame=new wg,this.destinationFrame=new wg,this.viewportFrame=new wg}return e.prototype.bind=function(g,i,I){g===void 0&&(g=null);var n=this.renderer;this.current=g;var r,C,o;g?(r=g.baseTexture,o=r.resolution,i||(vu.width=g.frame.width,vu.height=g.frame.height,i=vu),I||(Yy.x=g.frame.x,Yy.y=g.frame.y,Yy.width=i.width,Yy.height=i.height,I=Yy),C=r.framebuffer):(o=n.resolution,i||(vu.width=n.screen.width,vu.height=n.screen.height,i=vu),I||(I=vu,I.width=i.width,I.height=i.height));var a=this.viewportFrame;a.x=I.x*o,a.y=I.y*o,a.width=I.width*o,a.height=I.height*o,g||(a.y=n.view.height-(a.y+a.height)),a.ceil(),this.renderer.framebuffer.bind(C,a),this.renderer.projection.update(I,i,o,!C),g?this.renderer.mask.setMaskStack(r.maskStack):this.renderer.mask.setMaskStack(this.defaultMaskStack),this.sourceFrame.copyFrom(i),this.destinationFrame.copyFrom(I)},e.prototype.clear=function(g,i){this.current?g=g||this.current.baseTexture.clearColor:g=g||this.clearColor;var I=this.destinationFrame,n=this.current?this.current.baseTexture:this.renderer.screen,r=I.width!==n.width||I.height!==n.height;if(r){var C=this.viewportFrame,o=C.x,a=C.y,s=C.width,A=C.height;o=Math.round(o),a=Math.round(a),s=Math.round(s),A=Math.round(A),this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST),this.renderer.gl.scissor(o,a,s,A)}this.renderer.framebuffer.clear(g[0],g[1],g[2],g[3],i),r&&this.renderer.scissor.pop()},e.prototype.resize=function(){this.bind(null)},e.prototype.reset=function(){this.bind(null)},e.prototype.destroy=function(){this.renderer=null},e}();function lze(e,g,i,I,n){i.buffer.update(n)}var cze={float:` data[offset] = v; `,vec2:` data[offset] = v[0]; @@ -525,7 +525,7 @@ void main(void) { data[offset + i] = v[i]; } - `},Zfe={float:4,vec2:8,vec3:12,vec4:16,int:4,ivec2:8,ivec3:12,ivec4:16,uint:4,uvec2:8,uvec3:12,uvec4:16,bool:4,bvec2:8,bvec3:12,bvec4:16,mat2:16*2,mat3:16*3,mat4:16*4};function Gfe(e){for(var g=e.map(function(a){return{data:a,offset:0,dataLen:0,dirty:0}}),I=0,i=0,n=0,C=0;C1&&(I=Math.max(I,16)*r.data.size),r.dataLen=I,i%I!==0&&i<16){var o=i%I%16;i+=o,n+=o}i+I>16?(n=Math.ceil(n/16)*16,r.offset=n,n+=I,i=I):(r.offset=n,i+=I,n+=I)}return n=Math.ceil(n/16)*16,{uboElements:g,size:n}}function vfe(e,g){var I=[];for(var i in e)g[i]&&I.push(g[i]);return I.sort(function(n,C){return n.index-C.index}),I}function Bfe(e,g){if(!e.autoManage)return{size:0,syncFunc:ize};for(var I=vfe(e.uniforms,g),i=Gfe(I),n=i.uboElements,C=i.size,r=[` + `},Vfe={float:4,vec2:8,vec3:12,vec4:16,int:4,ivec2:8,ivec3:12,ivec4:16,uint:4,uvec2:8,uvec3:12,uvec4:16,bool:4,bvec2:8,bvec3:12,bvec4:16,mat2:16*2,mat3:16*3,mat4:16*4};function Wfe(e){for(var g=e.map(function(a){return{data:a,offset:0,dataLen:0,dirty:0}}),i=0,I=0,n=0,r=0;r1&&(i=Math.max(i,16)*C.data.size),C.dataLen=i,I%i!==0&&I<16){var o=I%i%16;I+=o,n+=o}I+i>16?(n=Math.ceil(n/16)*16,C.offset=n,n+=i,I=i):(C.offset=n,I+=i,n+=i)}return n=Math.ceil(n/16)*16,{uboElements:g,size:n}}function Xfe(e,g){var i=[];for(var I in e)g[I]&&i.push(g[I]);return i.sort(function(n,r){return n.index-r.index}),i}function Hfe(e,g){if(!e.autoManage)return{size:0,syncFunc:lze};for(var i=Xfe(e.uniforms,g),I=Wfe(i),n=I.uboElements,r=I.size,C=[` var v = null; var v2 = null; var cv = null; @@ -533,7 +533,7 @@ void main(void) var gl = renderer.gl var index = 0; var data = buffer.data; - `],o=0;o1){var d=mfe(a.data.type),h=Math.max(Zfe[a.data.type]/16,1),m=d/h,f=(4-m%4)%4;r.push(` + `],o=0;o1){var d=vfe(a.data.type),h=Math.max(Vfe[a.data.type]/16,1),m=d/h,f=(4-m%4)%4;C.push(` cv = ud.`+A+`.value; v = uv.`+A+`; offset = `+a.offset/4+`; @@ -549,15 +549,15 @@ void main(void) offset += `+f+`; } - `)}else{var b=nze[a.data.type];r.push(` + `)}else{var b=cze[a.data.type];C.push(` cv = ud.`+A+`.value; v = uv.`+A+`; offset = `+a.offset/4+`; `+b+`; - `)}}return r.push(` + `)}}return C.push(` renderer.buffer.update(buffer); - `),{size:C,syncFunc:new Function("ud","uv","renderer","syncData","buffer",r.join(` -`))}}var Cze=function(){function e(){}return e}(),Sfe=function(){function e(g,I){this.program=g,this.uniformData=I,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBufferBindings={}}return e.prototype.destroy=function(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBufferBindings=null,this.program=null},e}();function rze(e,g){for(var I={},i=g.getProgramParameter(e,g.ACTIVE_ATTRIBUTES),n=0;nl?1:-1});for(var r=0;r>1,i++;this.stateId=g.data}for(var i=0;ithis.checkCountMax&&(this.checkCount=0,this.run())))},e.prototype.run=function(){for(var g=this.renderer.texture,I=g.managedTextures,i=!1,n=0;nthis.maxIdle&&(g.destroyTexture(C,!0),I[n]=null,i=!0)}if(i){for(var r=0,n=0;n=0;n--)this.unload(g.children[n])},e.prototype.destroy=function(){this.renderer=null},e}();function mze(e){var g,I,i,n,C,r,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G;return"WebGL2RenderingContext"in globalThis&&e instanceof globalThis.WebGL2RenderingContext?G=(g={},g[Et.UNSIGNED_BYTE]=(I={},I[ft.RGBA]=e.RGBA8,I[ft.RGB]=e.RGB8,I[ft.RG]=e.RG8,I[ft.RED]=e.R8,I[ft.RGBA_INTEGER]=e.RGBA8UI,I[ft.RGB_INTEGER]=e.RGB8UI,I[ft.RG_INTEGER]=e.RG8UI,I[ft.RED_INTEGER]=e.R8UI,I[ft.ALPHA]=e.ALPHA,I[ft.LUMINANCE]=e.LUMINANCE,I[ft.LUMINANCE_ALPHA]=e.LUMINANCE_ALPHA,I),g[Et.BYTE]=(i={},i[ft.RGBA]=e.RGBA8_SNORM,i[ft.RGB]=e.RGB8_SNORM,i[ft.RG]=e.RG8_SNORM,i[ft.RED]=e.R8_SNORM,i[ft.RGBA_INTEGER]=e.RGBA8I,i[ft.RGB_INTEGER]=e.RGB8I,i[ft.RG_INTEGER]=e.RG8I,i[ft.RED_INTEGER]=e.R8I,i),g[Et.UNSIGNED_SHORT]=(n={},n[ft.RGBA_INTEGER]=e.RGBA16UI,n[ft.RGB_INTEGER]=e.RGB16UI,n[ft.RG_INTEGER]=e.RG16UI,n[ft.RED_INTEGER]=e.R16UI,n[ft.DEPTH_COMPONENT]=e.DEPTH_COMPONENT16,n),g[Et.SHORT]=(C={},C[ft.RGBA_INTEGER]=e.RGBA16I,C[ft.RGB_INTEGER]=e.RGB16I,C[ft.RG_INTEGER]=e.RG16I,C[ft.RED_INTEGER]=e.R16I,C),g[Et.UNSIGNED_INT]=(r={},r[ft.RGBA_INTEGER]=e.RGBA32UI,r[ft.RGB_INTEGER]=e.RGB32UI,r[ft.RG_INTEGER]=e.RG32UI,r[ft.RED_INTEGER]=e.R32UI,r[ft.DEPTH_COMPONENT]=e.DEPTH_COMPONENT24,r),g[Et.INT]=(o={},o[ft.RGBA_INTEGER]=e.RGBA32I,o[ft.RGB_INTEGER]=e.RGB32I,o[ft.RG_INTEGER]=e.RG32I,o[ft.RED_INTEGER]=e.R32I,o),g[Et.FLOAT]=(a={},a[ft.RGBA]=e.RGBA32F,a[ft.RGB]=e.RGB32F,a[ft.RG]=e.RG32F,a[ft.RED]=e.R32F,a[ft.DEPTH_COMPONENT]=e.DEPTH_COMPONENT32F,a),g[Et.HALF_FLOAT]=(s={},s[ft.RGBA]=e.RGBA16F,s[ft.RGB]=e.RGB16F,s[ft.RG]=e.RG16F,s[ft.RED]=e.R16F,s),g[Et.UNSIGNED_SHORT_5_6_5]=(A={},A[ft.RGB]=e.RGB565,A),g[Et.UNSIGNED_SHORT_4_4_4_4]=(l={},l[ft.RGBA]=e.RGBA4,l),g[Et.UNSIGNED_SHORT_5_5_5_1]=(c={},c[ft.RGBA]=e.RGB5_A1,c),g[Et.UNSIGNED_INT_2_10_10_10_REV]=(u={},u[ft.RGBA]=e.RGB10_A2,u[ft.RGBA_INTEGER]=e.RGB10_A2UI,u),g[Et.UNSIGNED_INT_10F_11F_11F_REV]=(d={},d[ft.RGB]=e.R11F_G11F_B10F,d),g[Et.UNSIGNED_INT_5_9_9_9_REV]=(h={},h[ft.RGB]=e.RGB9_E5,h),g[Et.UNSIGNED_INT_24_8]=(m={},m[ft.DEPTH_STENCIL]=e.DEPTH24_STENCIL8,m),g[Et.FLOAT_32_UNSIGNED_INT_24_8_REV]=(f={},f[ft.DEPTH_STENCIL]=e.DEPTH32F_STENCIL8,f),g):G=(b={},b[Et.UNSIGNED_BYTE]=(p={},p[ft.RGBA]=e.RGBA,p[ft.RGB]=e.RGB,p[ft.ALPHA]=e.ALPHA,p[ft.LUMINANCE]=e.LUMINANCE,p[ft.LUMINANCE_ALPHA]=e.LUMINANCE_ALPHA,p),b[Et.UNSIGNED_SHORT_5_6_5]=(y={},y[ft.RGB]=e.RGB,y),b[Et.UNSIGNED_SHORT_4_4_4_4]=(Z={},Z[ft.RGBA]=e.RGBA,Z),b[Et.UNSIGNED_SHORT_5_5_5_1]=(B={},B[ft.RGBA]=e.RGBA,B),b),G}var X1=function(){function e(g){this.texture=g,this.width=-1,this.height=-1,this.dirtyId=-1,this.dirtyStyleId=-1,this.mipmap=!1,this.wrapMode=33071,this.type=Et.UNSIGNED_BYTE,this.internalFormat=ft.RGBA,this.samplerType=0}return e}(),NU=function(){function e(g){this.renderer=g,this.boundTextures=[],this.currentLocation=-1,this.managedTextures=[],this._unknownBoundTextures=!1,this.unknownTexture=new vg,this.hasIntegerTextures=!1}return e.prototype.contextChange=function(){var g=this.gl=this.renderer.gl;this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.webGLVersion=this.renderer.context.webGLVersion,this.internalFormats=mze(g);var I=g.getParameter(g.MAX_TEXTURE_IMAGE_UNITS);this.boundTextures.length=I;for(var i=0;i=0;--r){var o=i[r];if(o){var a=o._glTextures[C];a.samplerType!==oB.FLOAT&&this.renderer.texture.unbind(o)}}},e.prototype.initTexture=function(g){var I=new X1(this.gl.createTexture());return I.dirtyId=-1,g._glTextures[this.CONTEXT_UID]=I,this.managedTextures.push(g),g.on("dispose",this.destroyTexture,this),I},e.prototype.initTextureType=function(g,I){var i,n;I.internalFormat=(n=(i=this.internalFormats[g.type])===null||i===void 0?void 0:i[g.format])!==null&&n!==void 0?n:g.format,this.webGLVersion===2&&g.type===Et.HALF_FLOAT?I.type=this.gl.HALF_FLOAT:I.type=g.type},e.prototype.updateTexture=function(g){var I=g._glTextures[this.CONTEXT_UID];if(I){var i=this.renderer;if(this.initTextureType(g,I),g.resource&&g.resource.upload(i,g,I))I.samplerType!==oB.FLOAT&&(this.hasIntegerTextures=!0);else{var n=g.realWidth,C=g.realHeight,r=i.gl;(I.width!==n||I.height!==C||I.dirtyId<0)&&(I.width=n,I.height=C,r.texImage2D(g.target,0,I.internalFormat,n,C,0,g.format,I.type,null))}g.dirtyStyleId!==I.dirtyStyleId&&this.updateTextureStyle(g),I.dirtyId=g.dirtyId}},e.prototype.destroyTexture=function(g,I){var i=this.gl;if(g=g.castToBaseTexture(),g._glTextures[this.CONTEXT_UID]&&(this.unbind(g),i.deleteTexture(g._glTextures[this.CONTEXT_UID].texture),g.off("dispose",this.destroyTexture,this),delete g._glTextures[this.CONTEXT_UID],!I)){var n=this.managedTextures.indexOf(g);n!==-1&&Rd(this.managedTextures,n,1)}},e.prototype.updateTextureStyle=function(g){var I=g._glTextures[this.CONTEXT_UID];I&&((g.mipmap===no.POW2||this.webGLVersion!==2)&&!g.isPowerOfTwo?I.mipmap=!1:I.mipmap=g.mipmap>=1,this.webGLVersion!==2&&!g.isPowerOfTwo?I.wrapMode=Ia.CLAMP:I.wrapMode=g.wrapMode,g.resource&&g.resource.style(this.renderer,g,I)||this.setStyle(g,I),I.dirtyStyleId=g.dirtyStyleId)},e.prototype.setStyle=function(g,I){var i=this.gl;if(I.mipmap&&g.mipmap!==no.ON_MANUAL&&i.generateMipmap(g.target),i.texParameteri(g.target,i.TEXTURE_WRAP_S,I.wrapMode),i.texParameteri(g.target,i.TEXTURE_WRAP_T,I.wrapMode),I.mipmap){i.texParameteri(g.target,i.TEXTURE_MIN_FILTER,g.scaleMode===jo.LINEAR?i.LINEAR_MIPMAP_LINEAR:i.NEAREST_MIPMAP_NEAREST);var n=this.renderer.context.extensions.anisotropicFiltering;if(n&&g.anisotropicLevel>0&&g.scaleMode===jo.LINEAR){var C=Math.min(g.anisotropicLevel,i.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT));i.texParameterf(g.target,n.TEXTURE_MAX_ANISOTROPY_EXT,C)}}else i.texParameteri(g.target,i.TEXTURE_MIN_FILTER,g.scaleMode===jo.LINEAR?i.LINEAR:i.NEAREST);i.texParameteri(g.target,i.TEXTURE_MAG_FILTER,g.scaleMode===jo.LINEAR?i.LINEAR:i.NEAREST)},e.prototype.destroy=function(){this.renderer=null},e}(),Rfe={__proto__:null,FilterSystem:yU,BatchSystem:ZU,ContextSystem:GU,FramebufferSystem:vU,GeometrySystem:BU,MaskSystem:SU,ScissorSystem:wU,StencilSystem:RU,ProjectionSystem:VU,RenderTextureSystem:WU,ShaderSystem:XU,StateSystem:HU,TextureGCSystem:TU,TextureSystem:NU},_K=new Zi,Vfe=function(e){AI(g,e);function g(I,i){I===void 0&&(I=ab.UNKNOWN);var n=e.call(this)||this;return i=Object.assign({},Gt.RENDER_OPTIONS,i),n.options=i,n.type=I,n.screen=new wg(0,0,i.width,i.height),n.view=i.view||Gt.ADAPTER.createCanvas(),n.resolution=i.resolution||Gt.RESOLUTION,n.useContextAlpha=i.useContextAlpha,n.autoDensity=!!i.autoDensity,n.preserveDrawingBuffer=i.preserveDrawingBuffer,n.clearBeforeRender=i.clearBeforeRender,n._backgroundColor=0,n._backgroundColorRgba=[0,0,0,1],n._backgroundColorString="#000000",n.backgroundColor=i.backgroundColor||n._backgroundColor,n.backgroundAlpha=i.backgroundAlpha,i.transparent!==void 0&&(oC("6.0.0","Option transparent is deprecated, please use backgroundAlpha instead."),n.useContextAlpha=i.transparent,n.backgroundAlpha=i.transparent?0:1),n._lastObjectRendered=null,n.plugins={},n}return g.prototype.initPlugins=function(I){for(var i in I)this.plugins[i]=new I[i](this)},Object.defineProperty(g.prototype,"width",{get:function(){return this.view.width},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"height",{get:function(){return this.view.height},enumerable:!1,configurable:!0}),g.prototype.resize=function(I,i){this.view.width=Math.round(I*this.resolution),this.view.height=Math.round(i*this.resolution);var n=this.view.width/this.resolution,C=this.view.height/this.resolution;this.screen.width=n,this.screen.height=C,this.autoDensity&&(this.view.style.width=n+"px",this.view.style.height=C+"px"),this.emit("resize",n,C)},g.prototype.generateTexture=function(I,i,n,C){i===void 0&&(i={}),typeof i=="number"&&(oC("6.1.0","generateTexture options (scaleMode, resolution, region) are now object options."),i={scaleMode:i,resolution:n,region:C});var r=i.region,o=H3e(i,["region"]);C=r||I.getLocalBounds(null,!0),C.width===0&&(C.width=1),C.height===0&&(C.height=1);var a=Ys.create(wM({width:C.width,height:C.height},o));return _K.tx=-C.x,_K.ty=-C.y,this.render(I,{renderTexture:a,clear:!1,transform:_K,skipUpdateTransform:!!I.parent}),a},g.prototype.destroy=function(I){for(var i in this.plugins)this.plugins[i].destroy(),this.plugins[i]=null;I&&this.view.parentNode&&this.view.parentNode.removeChild(this.view);var n=this;n.plugins=null,n.type=ab.UNKNOWN,n.view=null,n.screen=null,n._tempDisplayObjectParent=null,n.options=null,this._backgroundColorRgba=null,this._backgroundColorString=null,this._lastObjectRendered=null},Object.defineProperty(g.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(I){this._backgroundColor=I,this._backgroundColorString=iU(I),Ld(I,this._backgroundColorRgba)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"backgroundAlpha",{get:function(){return this._backgroundColorRgba[3]},set:function(I){this._backgroundColorRgba[3]=I},enumerable:!1,configurable:!0}),g}(B0),fze=function(){function e(g){this.buffer=g||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}return e}(),pze=function(){function e(g){this.renderer=g,this.managedBuffers={},this.boundBufferBases={}}return e.prototype.destroy=function(){this.renderer=null},e.prototype.contextChange=function(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID},e.prototype.bind=function(g){var I=this,i=I.gl,n=I.CONTEXT_UID,C=g._glBuffers[n]||this.createGLBuffer(g);i.bindBuffer(g.type,C.buffer)},e.prototype.bindBufferBase=function(g,I){var i=this,n=i.gl,C=i.CONTEXT_UID;if(this.boundBufferBases[I]!==g){var r=g._glBuffers[C]||this.createGLBuffer(g);this.boundBufferBases[I]=g,n.bindBufferBase(n.UNIFORM_BUFFER,I,r.buffer)}},e.prototype.bindBufferRange=function(g,I,i){var n=this,C=n.gl,r=n.CONTEXT_UID;i=i||0;var o=g._glBuffers[r]||this.createGLBuffer(g);C.bindBufferRange(C.UNIFORM_BUFFER,I||0,o.buffer,i*256,256)},e.prototype.update=function(g){var I=this,i=I.gl,n=I.CONTEXT_UID,C=g._glBuffers[n];if(g._updateID!==C.updateID)if(C.updateID=g._updateID,i.bindBuffer(g.type,C.buffer),C.byteLength>=g.data.byteLength)i.bufferSubData(g.type,0,g.data);else{var r=g.static?i.STATIC_DRAW:i.DYNAMIC_DRAW;C.byteLength=g.data.byteLength,i.bufferData(g.type,g.data,r)}},e.prototype.dispose=function(g,I){if(this.managedBuffers[g.id]){delete this.managedBuffers[g.id];var i=g._glBuffers[this.CONTEXT_UID],n=this.gl;g.disposeRunner.remove(this),i&&(I||n.deleteBuffer(i.buffer),delete g._glBuffers[this.CONTEXT_UID])}},e.prototype.disposeAll=function(g){for(var I=Object.keys(this.managedBuffers),i=0;i=fI.HIGH?this.multisample=fI.HIGH:i>=fI.MEDIUM?this.multisample=fI.MEDIUM:i>=fI.LOW?this.multisample=fI.LOW:this.multisample=fI.NONE},g.prototype.addSystem=function(I,i){var n=new I(this);if(this[i])throw new Error('Whoops! The name "'+i+'" is already in use');this[i]=n;for(var C in this.runners)this.runners[C].add(n);return this},g.prototype.render=function(I,i){var n,C,r,o;if(i&&(i instanceof Ys?(oC("6.0.0","Renderer#render arguments changed, use options instead."),n=i,C=arguments[2],r=arguments[3],o=arguments[4]):(n=i.renderTexture,C=i.clear,r=i.transform,o=i.skipUpdateTransform)),this.renderingToScreen=!n,this.runners.prerender.emit(),this.emit("prerender"),this.projection.transform=r,!this.context.isLost){if(n||(this._lastObjectRendered=I),!o){var a=I.enableTempParent();I.updateTransform(),I.disableTempParent(a)}this.renderTexture.bind(n),this.batch.currentRenderer.start(),(C!==void 0?C:this.clearBeforeRender)&&this.renderTexture.clear(),I.render(this),this.batch.currentRenderer.flush(),n&&n.baseTexture.update(),this.runners.postrender.emit(),this.projection.transform=null,this.emit("postrender")}},g.prototype.generateTexture=function(I,i,n,C){i===void 0&&(i={});var r=e.prototype.generateTexture.call(this,I,i,n,C);return this.framebuffer.blit(),r},g.prototype.resize=function(I,i){e.prototype.resize.call(this,I,i),this.runners.resize.emit(this.screen.height,this.screen.width)},g.prototype.reset=function(){return this.runners.reset.emit(),this},g.prototype.clear=function(){this.renderTexture.bind(),this.renderTexture.clear()},g.prototype.destroy=function(I){this.runners.destroy.emit();for(var i in this.runners)this.runners[i].destroy();e.prototype.destroy.call(this,I),this.gl=null},Object.defineProperty(g.prototype,"extract",{get:function(){return oC("6.0.0","Renderer#extract has been deprecated, please use Renderer#plugins.extract instead."),this.plugins.extract},enumerable:!1,configurable:!0}),g.registerPlugin=function(I,i){oC("6.5.0","Renderer.registerPlugin() has been deprecated, please use extensions.add() instead."),RA.add({name:I,type:Og.RendererPlugin,ref:i})},g.__plugins={},g}(Vfe);RA.handleByMap(Og.RendererPlugin,kU.__plugins);function Wfe(e){return kU.create(e)}var bze=`attribute vec2 aVertexPosition; + `),{size:r,syncFunc:new Function("ud","uv","renderer","syncData","buffer",C.join(` +`))}}var uze=function(){function e(){}return e}(),Tfe=function(){function e(g,i){this.program=g,this.uniformData=i,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBufferBindings={}}return e.prototype.destroy=function(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBufferBindings=null,this.program=null},e}();function dze(e,g){for(var i={},I=g.getProgramParameter(e,g.ACTIVE_ATTRIBUTES),n=0;nl?1:-1});for(var C=0;C>1,I++;this.stateId=g.data}for(var I=0;Ithis.checkCountMax&&(this.checkCount=0,this.run())))},e.prototype.run=function(){for(var g=this.renderer.texture,i=g.managedTextures,I=!1,n=0;nthis.maxIdle&&(g.destroyTexture(r,!0),i[n]=null,I=!0)}if(I){for(var C=0,n=0;n=0;n--)this.unload(g.children[n])},e.prototype.destroy=function(){this.renderer=null},e}();function Bze(e){var g,i,I,n,r,C,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G;return"WebGL2RenderingContext"in globalThis&&e instanceof globalThis.WebGL2RenderingContext?G=(g={},g[Et.UNSIGNED_BYTE]=(i={},i[ft.RGBA]=e.RGBA8,i[ft.RGB]=e.RGB8,i[ft.RG]=e.RG8,i[ft.RED]=e.R8,i[ft.RGBA_INTEGER]=e.RGBA8UI,i[ft.RGB_INTEGER]=e.RGB8UI,i[ft.RG_INTEGER]=e.RG8UI,i[ft.RED_INTEGER]=e.R8UI,i[ft.ALPHA]=e.ALPHA,i[ft.LUMINANCE]=e.LUMINANCE,i[ft.LUMINANCE_ALPHA]=e.LUMINANCE_ALPHA,i),g[Et.BYTE]=(I={},I[ft.RGBA]=e.RGBA8_SNORM,I[ft.RGB]=e.RGB8_SNORM,I[ft.RG]=e.RG8_SNORM,I[ft.RED]=e.R8_SNORM,I[ft.RGBA_INTEGER]=e.RGBA8I,I[ft.RGB_INTEGER]=e.RGB8I,I[ft.RG_INTEGER]=e.RG8I,I[ft.RED_INTEGER]=e.R8I,I),g[Et.UNSIGNED_SHORT]=(n={},n[ft.RGBA_INTEGER]=e.RGBA16UI,n[ft.RGB_INTEGER]=e.RGB16UI,n[ft.RG_INTEGER]=e.RG16UI,n[ft.RED_INTEGER]=e.R16UI,n[ft.DEPTH_COMPONENT]=e.DEPTH_COMPONENT16,n),g[Et.SHORT]=(r={},r[ft.RGBA_INTEGER]=e.RGBA16I,r[ft.RGB_INTEGER]=e.RGB16I,r[ft.RG_INTEGER]=e.RG16I,r[ft.RED_INTEGER]=e.R16I,r),g[Et.UNSIGNED_INT]=(C={},C[ft.RGBA_INTEGER]=e.RGBA32UI,C[ft.RGB_INTEGER]=e.RGB32UI,C[ft.RG_INTEGER]=e.RG32UI,C[ft.RED_INTEGER]=e.R32UI,C[ft.DEPTH_COMPONENT]=e.DEPTH_COMPONENT24,C),g[Et.INT]=(o={},o[ft.RGBA_INTEGER]=e.RGBA32I,o[ft.RGB_INTEGER]=e.RGB32I,o[ft.RG_INTEGER]=e.RG32I,o[ft.RED_INTEGER]=e.R32I,o),g[Et.FLOAT]=(a={},a[ft.RGBA]=e.RGBA32F,a[ft.RGB]=e.RGB32F,a[ft.RG]=e.RG32F,a[ft.RED]=e.R32F,a[ft.DEPTH_COMPONENT]=e.DEPTH_COMPONENT32F,a),g[Et.HALF_FLOAT]=(s={},s[ft.RGBA]=e.RGBA16F,s[ft.RGB]=e.RGB16F,s[ft.RG]=e.RG16F,s[ft.RED]=e.R16F,s),g[Et.UNSIGNED_SHORT_5_6_5]=(A={},A[ft.RGB]=e.RGB565,A),g[Et.UNSIGNED_SHORT_4_4_4_4]=(l={},l[ft.RGBA]=e.RGBA4,l),g[Et.UNSIGNED_SHORT_5_5_5_1]=(c={},c[ft.RGBA]=e.RGB5_A1,c),g[Et.UNSIGNED_INT_2_10_10_10_REV]=(u={},u[ft.RGBA]=e.RGB10_A2,u[ft.RGBA_INTEGER]=e.RGB10_A2UI,u),g[Et.UNSIGNED_INT_10F_11F_11F_REV]=(d={},d[ft.RGB]=e.R11F_G11F_B10F,d),g[Et.UNSIGNED_INT_5_9_9_9_REV]=(h={},h[ft.RGB]=e.RGB9_E5,h),g[Et.UNSIGNED_INT_24_8]=(m={},m[ft.DEPTH_STENCIL]=e.DEPTH24_STENCIL8,m),g[Et.FLOAT_32_UNSIGNED_INT_24_8_REV]=(f={},f[ft.DEPTH_STENCIL]=e.DEPTH32F_STENCIL8,f),g):G=(b={},b[Et.UNSIGNED_BYTE]=(p={},p[ft.RGBA]=e.RGBA,p[ft.RGB]=e.RGB,p[ft.ALPHA]=e.ALPHA,p[ft.LUMINANCE]=e.LUMINANCE,p[ft.LUMINANCE_ALPHA]=e.LUMINANCE_ALPHA,p),b[Et.UNSIGNED_SHORT_5_6_5]=(y={},y[ft.RGB]=e.RGB,y),b[Et.UNSIGNED_SHORT_4_4_4_4]=(Z={},Z[ft.RGBA]=e.RGBA,Z),b[Et.UNSIGNED_SHORT_5_5_5_1]=(B={},B[ft.RGBA]=e.RGBA,B),b),G}var N1=function(){function e(g){this.texture=g,this.width=-1,this.height=-1,this.dirtyId=-1,this.dirtyStyleId=-1,this.mipmap=!1,this.wrapMode=33071,this.type=Et.UNSIGNED_BYTE,this.internalFormat=ft.RGBA,this.samplerType=0}return e}(),xU=function(){function e(g){this.renderer=g,this.boundTextures=[],this.currentLocation=-1,this.managedTextures=[],this._unknownBoundTextures=!1,this.unknownTexture=new vg,this.hasIntegerTextures=!1}return e.prototype.contextChange=function(){var g=this.gl=this.renderer.gl;this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.webGLVersion=this.renderer.context.webGLVersion,this.internalFormats=Bze(g);var i=g.getParameter(g.MAX_TEXTURE_IMAGE_UNITS);this.boundTextures.length=i;for(var I=0;I=0;--C){var o=I[C];if(o){var a=o._glTextures[r];a.samplerType!==AB.FLOAT&&this.renderer.texture.unbind(o)}}},e.prototype.initTexture=function(g){var i=new N1(this.gl.createTexture());return i.dirtyId=-1,g._glTextures[this.CONTEXT_UID]=i,this.managedTextures.push(g),g.on("dispose",this.destroyTexture,this),i},e.prototype.initTextureType=function(g,i){var I,n;i.internalFormat=(n=(I=this.internalFormats[g.type])===null||I===void 0?void 0:I[g.format])!==null&&n!==void 0?n:g.format,this.webGLVersion===2&&g.type===Et.HALF_FLOAT?i.type=this.gl.HALF_FLOAT:i.type=g.type},e.prototype.updateTexture=function(g){var i=g._glTextures[this.CONTEXT_UID];if(i){var I=this.renderer;if(this.initTextureType(g,i),g.resource&&g.resource.upload(I,g,i))i.samplerType!==AB.FLOAT&&(this.hasIntegerTextures=!0);else{var n=g.realWidth,r=g.realHeight,C=I.gl;(i.width!==n||i.height!==r||i.dirtyId<0)&&(i.width=n,i.height=r,C.texImage2D(g.target,0,i.internalFormat,n,r,0,g.format,i.type,null))}g.dirtyStyleId!==i.dirtyStyleId&&this.updateTextureStyle(g),i.dirtyId=g.dirtyId}},e.prototype.destroyTexture=function(g,i){var I=this.gl;if(g=g.castToBaseTexture(),g._glTextures[this.CONTEXT_UID]&&(this.unbind(g),I.deleteTexture(g._glTextures[this.CONTEXT_UID].texture),g.off("dispose",this.destroyTexture,this),delete g._glTextures[this.CONTEXT_UID],!i)){var n=this.managedTextures.indexOf(g);n!==-1&&Vd(this.managedTextures,n,1)}},e.prototype.updateTextureStyle=function(g){var i=g._glTextures[this.CONTEXT_UID];i&&((g.mipmap===Co.POW2||this.webGLVersion!==2)&&!g.isPowerOfTwo?i.mipmap=!1:i.mipmap=g.mipmap>=1,this.webGLVersion!==2&&!g.isPowerOfTwo?i.wrapMode=ra.CLAMP:i.wrapMode=g.wrapMode,g.resource&&g.resource.style(this.renderer,g,i)||this.setStyle(g,i),i.dirtyStyleId=g.dirtyStyleId)},e.prototype.setStyle=function(g,i){var I=this.gl;if(i.mipmap&&g.mipmap!==Co.ON_MANUAL&&I.generateMipmap(g.target),I.texParameteri(g.target,I.TEXTURE_WRAP_S,i.wrapMode),I.texParameteri(g.target,I.TEXTURE_WRAP_T,i.wrapMode),i.mipmap){I.texParameteri(g.target,I.TEXTURE_MIN_FILTER,g.scaleMode===ea.LINEAR?I.LINEAR_MIPMAP_LINEAR:I.NEAREST_MIPMAP_NEAREST);var n=this.renderer.context.extensions.anisotropicFiltering;if(n&&g.anisotropicLevel>0&&g.scaleMode===ea.LINEAR){var r=Math.min(g.anisotropicLevel,I.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT));I.texParameterf(g.target,n.TEXTURE_MAX_ANISOTROPY_EXT,r)}}else I.texParameteri(g.target,I.TEXTURE_MIN_FILTER,g.scaleMode===ea.LINEAR?I.LINEAR:I.NEAREST);I.texParameteri(g.target,I.TEXTURE_MAG_FILTER,g.scaleMode===ea.LINEAR?I.LINEAR:I.NEAREST)},e.prototype.destroy=function(){this.renderer=null},e}(),kfe={__proto__:null,FilterSystem:wU,BatchSystem:RU,ContextSystem:VU,FramebufferSystem:WU,GeometrySystem:XU,MaskSystem:HU,ScissorSystem:TU,StencilSystem:NU,ProjectionSystem:kU,RenderTextureSystem:YU,ShaderSystem:KU,StateSystem:FU,TextureGCSystem:DU,TextureSystem:xU},qK=new GI,Yfe=function(e){si(g,e);function g(i,I){i===void 0&&(i=sb.UNKNOWN);var n=e.call(this)||this;return I=Object.assign({},Gt.RENDER_OPTIONS,I),n.options=I,n.type=i,n.screen=new wg(0,0,I.width,I.height),n.view=I.view||Gt.ADAPTER.createCanvas(),n.resolution=I.resolution||Gt.RESOLUTION,n.useContextAlpha=I.useContextAlpha,n.autoDensity=!!I.autoDensity,n.preserveDrawingBuffer=I.preserveDrawingBuffer,n.clearBeforeRender=I.clearBeforeRender,n._backgroundColor=0,n._backgroundColorRgba=[0,0,0,1],n._backgroundColorString="#000000",n.backgroundColor=I.backgroundColor||n._backgroundColor,n.backgroundAlpha=I.backgroundAlpha,I.transparent!==void 0&&(ar("6.0.0","Option transparent is deprecated, please use backgroundAlpha instead."),n.useContextAlpha=I.transparent,n.backgroundAlpha=I.transparent?0:1),n._lastObjectRendered=null,n.plugins={},n}return g.prototype.initPlugins=function(i){for(var I in i)this.plugins[I]=new i[I](this)},Object.defineProperty(g.prototype,"width",{get:function(){return this.view.width},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"height",{get:function(){return this.view.height},enumerable:!1,configurable:!0}),g.prototype.resize=function(i,I){this.view.width=Math.round(i*this.resolution),this.view.height=Math.round(I*this.resolution);var n=this.view.width/this.resolution,r=this.view.height/this.resolution;this.screen.width=n,this.screen.height=r,this.autoDensity&&(this.view.style.width=n+"px",this.view.style.height=r+"px"),this.emit("resize",n,r)},g.prototype.generateTexture=function(i,I,n,r){I===void 0&&(I={}),typeof I=="number"&&(ar("6.1.0","generateTexture options (scaleMode, resolution, region) are now object options."),I={scaleMode:I,resolution:n,region:r});var C=I.region,o=x3e(I,["region"]);r=C||i.getLocalBounds(null,!0),r.width===0&&(r.width=1),r.height===0&&(r.height=1);var a=Ks.create(TM({width:r.width,height:r.height},o));return qK.tx=-r.x,qK.ty=-r.y,this.render(i,{renderTexture:a,clear:!1,transform:qK,skipUpdateTransform:!!i.parent}),a},g.prototype.destroy=function(i){for(var I in this.plugins)this.plugins[I].destroy(),this.plugins[I]=null;i&&this.view.parentNode&&this.view.parentNode.removeChild(this.view);var n=this;n.plugins=null,n.type=sb.UNKNOWN,n.view=null,n.screen=null,n._tempDisplayObjectParent=null,n.options=null,this._backgroundColorRgba=null,this._backgroundColorString=null,this._lastObjectRendered=null},Object.defineProperty(g.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(i){this._backgroundColor=i,this._backgroundColorString=AU(i),Ud(i,this._backgroundColorRgba)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"backgroundAlpha",{get:function(){return this._backgroundColorRgba[3]},set:function(i){this._backgroundColorRgba[3]=i},enumerable:!1,configurable:!0}),g}(w0),Sze=function(){function e(g){this.buffer=g||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}return e}(),wze=function(){function e(g){this.renderer=g,this.managedBuffers={},this.boundBufferBases={}}return e.prototype.destroy=function(){this.renderer=null},e.prototype.contextChange=function(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID},e.prototype.bind=function(g){var i=this,I=i.gl,n=i.CONTEXT_UID,r=g._glBuffers[n]||this.createGLBuffer(g);I.bindBuffer(g.type,r.buffer)},e.prototype.bindBufferBase=function(g,i){var I=this,n=I.gl,r=I.CONTEXT_UID;if(this.boundBufferBases[i]!==g){var C=g._glBuffers[r]||this.createGLBuffer(g);this.boundBufferBases[i]=g,n.bindBufferBase(n.UNIFORM_BUFFER,i,C.buffer)}},e.prototype.bindBufferRange=function(g,i,I){var n=this,r=n.gl,C=n.CONTEXT_UID;I=I||0;var o=g._glBuffers[C]||this.createGLBuffer(g);r.bindBufferRange(r.UNIFORM_BUFFER,i||0,o.buffer,I*256,256)},e.prototype.update=function(g){var i=this,I=i.gl,n=i.CONTEXT_UID,r=g._glBuffers[n];if(g._updateID!==r.updateID)if(r.updateID=g._updateID,I.bindBuffer(g.type,r.buffer),r.byteLength>=g.data.byteLength)I.bufferSubData(g.type,0,g.data);else{var C=g.static?I.STATIC_DRAW:I.DYNAMIC_DRAW;r.byteLength=g.data.byteLength,I.bufferData(g.type,g.data,C)}},e.prototype.dispose=function(g,i){if(this.managedBuffers[g.id]){delete this.managedBuffers[g.id];var I=g._glBuffers[this.CONTEXT_UID],n=this.gl;g.disposeRunner.remove(this),I&&(i||n.deleteBuffer(I.buffer),delete g._glBuffers[this.CONTEXT_UID])}},e.prototype.disposeAll=function(g){for(var i=Object.keys(this.managedBuffers),I=0;I=pi.HIGH?this.multisample=pi.HIGH:I>=pi.MEDIUM?this.multisample=pi.MEDIUM:I>=pi.LOW?this.multisample=pi.LOW:this.multisample=pi.NONE},g.prototype.addSystem=function(i,I){var n=new i(this);if(this[I])throw new Error('Whoops! The name "'+I+'" is already in use');this[I]=n;for(var r in this.runners)this.runners[r].add(n);return this},g.prototype.render=function(i,I){var n,r,C,o;if(I&&(I instanceof Ks?(ar("6.0.0","Renderer#render arguments changed, use options instead."),n=I,r=arguments[2],C=arguments[3],o=arguments[4]):(n=I.renderTexture,r=I.clear,C=I.transform,o=I.skipUpdateTransform)),this.renderingToScreen=!n,this.runners.prerender.emit(),this.emit("prerender"),this.projection.transform=C,!this.context.isLost){if(n||(this._lastObjectRendered=i),!o){var a=i.enableTempParent();i.updateTransform(),i.disableTempParent(a)}this.renderTexture.bind(n),this.batch.currentRenderer.start(),(r!==void 0?r:this.clearBeforeRender)&&this.renderTexture.clear(),i.render(this),this.batch.currentRenderer.flush(),n&&n.baseTexture.update(),this.runners.postrender.emit(),this.projection.transform=null,this.emit("postrender")}},g.prototype.generateTexture=function(i,I,n,r){I===void 0&&(I={});var C=e.prototype.generateTexture.call(this,i,I,n,r);return this.framebuffer.blit(),C},g.prototype.resize=function(i,I){e.prototype.resize.call(this,i,I),this.runners.resize.emit(this.screen.height,this.screen.width)},g.prototype.reset=function(){return this.runners.reset.emit(),this},g.prototype.clear=function(){this.renderTexture.bind(),this.renderTexture.clear()},g.prototype.destroy=function(i){this.runners.destroy.emit();for(var I in this.runners)this.runners[I].destroy();e.prototype.destroy.call(this,i),this.gl=null},Object.defineProperty(g.prototype,"extract",{get:function(){return ar("6.0.0","Renderer#extract has been deprecated, please use Renderer#plugins.extract instead."),this.plugins.extract},enumerable:!1,configurable:!0}),g.registerPlugin=function(i,I){ar("6.5.0","Renderer.registerPlugin() has been deprecated, please use extensions.add() instead."),VA.add({name:i,type:_g.RendererPlugin,ref:I})},g.__plugins={},g}(Yfe);VA.handleByMap(_g.RendererPlugin,EU.__plugins);function Kfe(e){return EU.create(e)}var Rze=`attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; uniform mat3 projectionMatrix; @@ -568,7 +568,7 @@ void main(void) { gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -}`,yze=`attribute vec2 aVertexPosition; +}`,Vze=`attribute vec2 aVertexPosition; uniform mat3 projectionMatrix; @@ -594,15 +594,15 @@ void main(void) gl_Position = filterVertexPosition(); vTextureCoord = filterTextureCoord(); } -`,Xfe=bze,YU=yze,Zze=function(){function e(g){oC("6.1.0","System class is deprecated, implemement ISystem interface instead."),this.renderer=g}return e.prototype.destroy=function(){this.renderer=null},e}(),v9=function(){function e(){this.texArray=null,this.blend=0,this.type=_r.TRIANGLES,this.start=0,this.size=0,this.data=null}return e}(),B9=function(){function e(){this.elements=[],this.ids=[],this.count=0}return e.prototype.clear=function(){for(var g=0;gthis.size&&this.flush(),this._vertexCount+=I.vertexData.length/2,this._indexCount+=I.indices.length,this._bufferedTextures[this._bufferSize]=I._texture.baseTexture,this._bufferedElements[this._bufferSize++]=I)},g.prototype.buildTexturesAndDrawCalls=function(){var I=this,i=I._bufferedTextures,n=I.MAX_TEXTURES,C=g._textureArrayPool,r=this.renderer.batch,o=this._tempBoundTextures,a=this.renderer.textureGC.count,s=++vg._globalBatch,A=0,l=C[0],c=0;r.copyBoundTextures(o,n);for(var u=0;u=n&&(r.boundArray(l,o,s,n),this.buildDrawCalls(l,c,u),c=u,l=C[++A],++s),d._batchEnabled=s,d.touched=a,l.elements[l.count++]=d)}l.count>0&&(r.boundArray(l,o,s,n),this.buildDrawCalls(l,c,this._bufferSize),++A,++s);for(var u=0;u0&&(I+=` -else `),ithis.size&&this.flush(),this._vertexCount+=i.vertexData.length/2,this._indexCount+=i.indices.length,this._bufferedTextures[this._bufferSize]=i._texture.baseTexture,this._bufferedElements[this._bufferSize++]=i)},g.prototype.buildTexturesAndDrawCalls=function(){var i=this,I=i._bufferedTextures,n=i.MAX_TEXTURES,r=g._textureArrayPool,C=this.renderer.batch,o=this._tempBoundTextures,a=this.renderer.textureGC.count,s=++vg._globalBatch,A=0,l=r[0],c=0;C.copyBoundTextures(o,n);for(var u=0;u=n&&(C.boundArray(l,o,s,n),this.buildDrawCalls(l,c,u),c=u,l=r[++A],++s),d._batchEnabled=s,d.touched=a,l.elements[l.count++]=d)}l.count>0&&(C.boundArray(l,o,s,n),this.buildDrawCalls(l,c,this._bufferSize),++A,++s);for(var u=0;u0&&(i+=` +else `),I title : "+g.title+"
tabIndex: "+g.tabIndex},e.prototype.capHitArea=function(g){g.x<0&&(g.width+=g.x,g.x=0),g.y<0&&(g.height+=g.y,g.y=0);var I=this.renderer,i=I.width,n=I.height;g.x+g.width>i&&(g.width=i-g.x),g.y+g.height>n&&(g.height=n-g.y)},e.prototype.addChild=function(g){var I=this.pool.pop();I||(I=document.createElement("button"),I.style.width=HR+"px",I.style.height=HR+"px",I.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",I.style.position="absolute",I.style.zIndex=Wee.toString(),I.style.borderStyle="none",navigator.userAgent.toLowerCase().indexOf("chrome")>-1?I.setAttribute("aria-live","off"):I.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?I.setAttribute("aria-relevant","additions"):I.setAttribute("aria-relevant","text"),I.addEventListener("click",this._onClick.bind(this)),I.addEventListener("focus",this._onFocus.bind(this)),I.addEventListener("focusout",this._onFocusOut.bind(this))),I.style.pointerEvents=g.accessiblePointerEvents,I.type=g.accessibleType,g.accessibleTitle&&g.accessibleTitle!==null?I.title=g.accessibleTitle:(!g.accessibleHint||g.accessibleHint===null)&&(I.title="displayObject "+g.tabIndex),g.accessibleHint&&g.accessibleHint!==null&&I.setAttribute("aria-label",g.accessibleHint),this.debug&&this.updateDebugHTML(I),g._accessibleActive=!0,g._accessibleDiv=I,I.displayObject=g,this.children.push(g),this.div.appendChild(g._accessibleDiv),g._accessibleDiv.tabIndex=g.tabIndex},e.prototype._onClick=function(g){var I=this.renderer.plugins.interaction,i=g.target.displayObject,n=I.eventData;I.dispatchEvent(i,"click",n),I.dispatchEvent(i,"pointertap",n),I.dispatchEvent(i,"tap",n)},e.prototype._onFocus=function(g){g.target.getAttribute("aria-live")||g.target.setAttribute("aria-live","assertive");var I=this.renderer.plugins.interaction,i=g.target.displayObject,n=I.eventData;I.dispatchEvent(i,"mouseover",n)},e.prototype._onFocusOut=function(g){g.target.getAttribute("aria-live")||g.target.setAttribute("aria-live","polite");var I=this.renderer.plugins.interaction,i=g.target.displayObject,n=I.eventData;I.dispatchEvent(i,"mouseout",n)},e.prototype._onKeyDown=function(g){g.keyCode===Bze&&this.activate()},e.prototype._onMouseMove=function(g){g.movementX===0&&g.movementY===0||this.deactivate()},e.prototype.destroy=function(){this.destroyTouchHook(),this.div=null,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown),this.pool=null,this.children=null,this.renderer=null},e.extension={name:"accessibility",type:[Og.RendererPlugin,Og.CanvasRendererPlugin]},e}();/*! + */var Jfe={accessible:!1,accessibleTitle:null,accessibleHint:null,tabIndex:0,_accessibleActive:!1,_accessibleDiv:null,accessibleType:"button",accessiblePointerEvents:"auto",accessibleChildren:!0,renderId:-1};eI.mixin(Jfe);var Tze=9,NR=100,Nze=0,kze=0,Nee=2,kee=1,Yze=-1e3,Kze=-1e3,Fze=2,Ofe=function(){function e(g){this.debug=!1,this._isActive=!1,this._isMobileAccessibility=!1,this.pool=[],this.renderId=0,this.children=[],this.androidUpdateCount=0,this.androidUpdateFrequency=500,this._hookDiv=null,(QC.tablet||QC.phone)&&this.createTouchHook();var i=document.createElement("div");i.style.width=NR+"px",i.style.height=NR+"px",i.style.position="absolute",i.style.top=Nze+"px",i.style.left=kze+"px",i.style.zIndex=Nee.toString(),this.div=i,this.renderer=g,this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),globalThis.addEventListener("keydown",this._onKeyDown,!1)}return Object.defineProperty(e.prototype,"isActive",{get:function(){return this._isActive},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isMobileAccessibility",{get:function(){return this._isMobileAccessibility},enumerable:!1,configurable:!0}),e.prototype.createTouchHook=function(){var g=this,i=document.createElement("button");i.style.width=kee+"px",i.style.height=kee+"px",i.style.position="absolute",i.style.top=Yze+"px",i.style.left=Kze+"px",i.style.zIndex=Fze.toString(),i.style.backgroundColor="#FF0000",i.title="select to enable accessibility for this content",i.addEventListener("focus",function(){g._isMobileAccessibility=!0,g.activate(),g.destroyTouchHook()}),document.body.appendChild(i),this._hookDiv=i},e.prototype.destroyTouchHook=function(){this._hookDiv&&(document.body.removeChild(this._hookDiv),this._hookDiv=null)},e.prototype.activate=function(){var g;this._isActive||(this._isActive=!0,globalThis.document.addEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),(g=this.renderer.view.parentNode)===null||g===void 0||g.appendChild(this.div))},e.prototype.deactivate=function(){var g;!this._isActive||this._isMobileAccessibility||(this._isActive=!1,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),(g=this.div.parentNode)===null||g===void 0||g.removeChild(this.div))},e.prototype.updateAccessibleObjects=function(g){if(!(!g.visible||!g.accessibleChildren)){g.accessible&&g.interactive&&(g._accessibleActive||this.addChild(g),g.renderId=this.renderId);var i=g.children;if(i)for(var I=0;I title : "+g.title+"
tabIndex: "+g.tabIndex},e.prototype.capHitArea=function(g){g.x<0&&(g.width+=g.x,g.x=0),g.y<0&&(g.height+=g.y,g.y=0);var i=this.renderer,I=i.width,n=i.height;g.x+g.width>I&&(g.width=I-g.x),g.y+g.height>n&&(g.height=n-g.y)},e.prototype.addChild=function(g){var i=this.pool.pop();i||(i=document.createElement("button"),i.style.width=NR+"px",i.style.height=NR+"px",i.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",i.style.position="absolute",i.style.zIndex=Nee.toString(),i.style.borderStyle="none",navigator.userAgent.toLowerCase().indexOf("chrome")>-1?i.setAttribute("aria-live","off"):i.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?i.setAttribute("aria-relevant","additions"):i.setAttribute("aria-relevant","text"),i.addEventListener("click",this._onClick.bind(this)),i.addEventListener("focus",this._onFocus.bind(this)),i.addEventListener("focusout",this._onFocusOut.bind(this))),i.style.pointerEvents=g.accessiblePointerEvents,i.type=g.accessibleType,g.accessibleTitle&&g.accessibleTitle!==null?i.title=g.accessibleTitle:(!g.accessibleHint||g.accessibleHint===null)&&(i.title="displayObject "+g.tabIndex),g.accessibleHint&&g.accessibleHint!==null&&i.setAttribute("aria-label",g.accessibleHint),this.debug&&this.updateDebugHTML(i),g._accessibleActive=!0,g._accessibleDiv=i,i.displayObject=g,this.children.push(g),this.div.appendChild(g._accessibleDiv),g._accessibleDiv.tabIndex=g.tabIndex},e.prototype._onClick=function(g){var i=this.renderer.plugins.interaction,I=g.target.displayObject,n=i.eventData;i.dispatchEvent(I,"click",n),i.dispatchEvent(I,"pointertap",n),i.dispatchEvent(I,"tap",n)},e.prototype._onFocus=function(g){g.target.getAttribute("aria-live")||g.target.setAttribute("aria-live","assertive");var i=this.renderer.plugins.interaction,I=g.target.displayObject,n=i.eventData;i.dispatchEvent(I,"mouseover",n)},e.prototype._onFocusOut=function(g){g.target.getAttribute("aria-live")||g.target.setAttribute("aria-live","polite");var i=this.renderer.plugins.interaction,I=g.target.displayObject,n=i.eventData;i.dispatchEvent(I,"mouseout",n)},e.prototype._onKeyDown=function(g){g.keyCode===Tze&&this.activate()},e.prototype._onMouseMove=function(g){g.movementX===0&&g.movementY===0||this.deactivate()},e.prototype.destroy=function(){this.destroyTouchHook(),this.div=null,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),globalThis.removeEventListener("keydown",this._onKeyDown),this.pool=null,this.children=null,this.renderer=null},e.extension={name:"accessibility",type:[_g.RendererPlugin,_g.CanvasRendererPlugin]},e}();/*! * @pixi/interaction - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/interaction is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var VM=function(){function e(){this.pressure=0,this.rotationAngle=0,this.twist=0,this.tangentialPressure=0,this.global=new aI,this.target=null,this.originalEvent=null,this.identifier=null,this.isPrimary=!1,this.button=0,this.buttons=0,this.width=0,this.height=0,this.tiltX=0,this.tiltY=0,this.pointerType=null,this.pressure=0,this.rotationAngle=0,this.twist=0,this.tangentialPressure=0}return Object.defineProperty(e.prototype,"pointerId",{get:function(){return this.identifier},enumerable:!1,configurable:!0}),e.prototype.getLocalPosition=function(g,I,i){return g.worldTransform.applyInverse(i||this.global,I)},e.prototype.copyEvent=function(g){"isPrimary"in g&&g.isPrimary&&(this.isPrimary=!0),this.button="button"in g&&g.button;var I="buttons"in g&&g.buttons;this.buttons=Number.isInteger(I)?I:"which"in g&&g.which,this.width="width"in g&&g.width,this.height="height"in g&&g.height,this.tiltX="tiltX"in g&&g.tiltX,this.tiltY="tiltY"in g&&g.tiltY,this.pointerType="pointerType"in g&&g.pointerType,this.pressure="pressure"in g&&g.pressure,this.rotationAngle="rotationAngle"in g&&g.rotationAngle,this.twist="twist"in g&&g.twist||0,this.tangentialPressure="tangentialPressure"in g&&g.tangentialPressure||0},e.prototype.reset=function(){this.isPrimary=!1},e}();/*! ***************************************************************************** + */var kM=function(){function e(){this.pressure=0,this.rotationAngle=0,this.twist=0,this.tangentialPressure=0,this.global=new Ai,this.target=null,this.originalEvent=null,this.identifier=null,this.isPrimary=!1,this.button=0,this.buttons=0,this.width=0,this.height=0,this.tiltX=0,this.tiltY=0,this.pointerType=null,this.pressure=0,this.rotationAngle=0,this.twist=0,this.tangentialPressure=0}return Object.defineProperty(e.prototype,"pointerId",{get:function(){return this.identifier},enumerable:!1,configurable:!0}),e.prototype.getLocalPosition=function(g,i,I){return g.worldTransform.applyInverse(I||this.global,i)},e.prototype.copyEvent=function(g){"isPrimary"in g&&g.isPrimary&&(this.isPrimary=!0),this.button="button"in g&&g.button;var i="buttons"in g&&g.buttons;this.buttons=Number.isInteger(i)?i:"which"in g&&g.which,this.width="width"in g&&g.width,this.height="height"in g&&g.height,this.tiltX="tiltX"in g&&g.tiltX,this.tiltY="tiltY"in g&&g.tiltY,this.pointerType="pointerType"in g&&g.pointerType,this.pressure="pressure"in g&&g.pressure,this.rotationAngle="rotationAngle"in g&&g.rotationAngle,this.twist="twist"in g&&g.twist||0,this.tangentialPressure="tangentialPressure"in g&&g.tangentialPressure||0},e.prototype.reset=function(){this.isPrimary=!1},e}();/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -658,25 +658,25 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var WM=function(e,g){return WM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},WM(e,g)};function Xze(e,g){WM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var xfe=function(){function e(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.target=null,this.currentTarget=null,this.type=null,this.data=null}return e.prototype.stopPropagation=function(){this.stopped=!0,this.stopPropagationHint=!0,this.stopsPropagatingAt=this.currentTarget},e.prototype.reset=function(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.currentTarget=null,this.target=null},e}(),H1=function(){function e(g){this._pointerId=g,this._flags=e.FLAGS.NONE}return e.prototype._doSet=function(g,I){I?this._flags=this._flags|g:this._flags=this._flags&~g},Object.defineProperty(e.prototype,"pointerId",{get:function(){return this._pointerId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"flags",{get:function(){return this._flags},set:function(g){this._flags=g},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"none",{get:function(){return this._flags===e.FLAGS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"over",{get:function(){return(this._flags&e.FLAGS.OVER)!==0},set:function(g){this._doSet(e.FLAGS.OVER,g)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rightDown",{get:function(){return(this._flags&e.FLAGS.RIGHT_DOWN)!==0},set:function(g){this._doSet(e.FLAGS.RIGHT_DOWN,g)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leftDown",{get:function(){return(this._flags&e.FLAGS.LEFT_DOWN)!==0},set:function(g){this._doSet(e.FLAGS.LEFT_DOWN,g)},enumerable:!1,configurable:!0}),e.FLAGS=Object.freeze({NONE:0,OVER:1,LEFT_DOWN:2,RIGHT_DOWN:4}),e}(),Hze=function(){function e(){this._tempPoint=new aI}return e.prototype.recursiveFindHit=function(g,I,i,n,C){var r;if(!I||!I.visible)return!1;var o=g.data.global;C=I.interactive||C;var a=!1,s=C,A=!0;if(I.hitArea)n&&(I.worldTransform.applyInverse(o,this._tempPoint),I.hitArea.contains(this._tempPoint.x,this._tempPoint.y)?a=!0:(n=!1,A=!1)),s=!1;else if(I._mask&&n){var l=I._mask.isMaskData?I._mask.maskObject:I._mask;l&&!(!((r=l.containsPoint)===null||r===void 0)&&r.call(l,o))&&(n=!1)}if(A&&I.interactiveChildren&&I.children)for(var c=I.children,u=c.length-1;u>=0;u--){var d=c[u],h=this.recursiveFindHit(g,d,i,n,s);if(h){if(!d.parent)continue;s=!1,h&&(g.target&&(n=!1),a=!0)}}return C&&(n&&!g.target&&!I.hitArea&&I.containsPoint&&I.containsPoint(o)&&(a=!0),I.interactive&&(a&&!g.target&&(g.target=I),i&&i(g,I,!!a))),a},e.prototype.findHit=function(g,I,i,n){this.recursiveFindHit(g,I,i,n,!1)},e}(),Efe={interactive:!1,interactiveChildren:!0,hitArea:null,get buttonMode(){return this.cursor==="pointer"},set buttonMode(e){e?this.cursor="pointer":this.cursor==="pointer"&&(this.cursor=null)},cursor:null,get trackedPointers(){return this._trackedPointers===void 0&&(this._trackedPointers={}),this._trackedPointers},_trackedPointers:void 0};$I.mixin(Efe);var TR=1,NR={target:null,data:{global:null}},Mfe=function(e){Xze(g,e);function g(I,i){var n=e.call(this)||this;return i=i||{},n.renderer=I,n.autoPreventDefault=i.autoPreventDefault!==void 0?i.autoPreventDefault:!0,n.interactionFrequency=i.interactionFrequency||10,n.mouse=new VM,n.mouse.identifier=TR,n.mouse.global.set(-999999),n.activeInteractionData={},n.activeInteractionData[TR]=n.mouse,n.interactionDataPool=[],n.eventData=new xfe,n.interactionDOMElement=null,n.moveWhenInside=!1,n.eventsAdded=!1,n.tickerAdded=!1,n.mouseOverRenderer=!("PointerEvent"in globalThis),n.supportsTouchEvents="ontouchstart"in globalThis,n.supportsPointerEvents=!!globalThis.PointerEvent,n.onPointerUp=n.onPointerUp.bind(n),n.processPointerUp=n.processPointerUp.bind(n),n.onPointerCancel=n.onPointerCancel.bind(n),n.processPointerCancel=n.processPointerCancel.bind(n),n.onPointerDown=n.onPointerDown.bind(n),n.processPointerDown=n.processPointerDown.bind(n),n.onPointerMove=n.onPointerMove.bind(n),n.processPointerMove=n.processPointerMove.bind(n),n.onPointerOut=n.onPointerOut.bind(n),n.processPointerOverOut=n.processPointerOverOut.bind(n),n.onPointerOver=n.onPointerOver.bind(n),n.cursorStyles={default:"inherit",pointer:"pointer"},n.currentCursorMode=null,n.cursor=null,n.resolution=1,n.delayedEvents=[],n.search=new Hze,n._tempDisplayObject=new sU,n._eventListenerOptions={capture:!0,passive:!1},n._useSystemTicker=i.useSystemTicker!==void 0?i.useSystemTicker:!0,n.setTargetElement(n.renderer.view,n.renderer.resolution),n}return Object.defineProperty(g.prototype,"useSystemTicker",{get:function(){return this._useSystemTicker},set:function(I){this._useSystemTicker=I,I?this.addTickerListener():this.removeTickerListener()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"lastObjectRendered",{get:function(){return this.renderer._lastObjectRendered||this._tempDisplayObject},enumerable:!1,configurable:!0}),g.prototype.hitTest=function(I,i){return NR.target=null,NR.data.global=I,i||(i=this.lastObjectRendered),this.processInteractive(NR,i,null,!0),NR.target},g.prototype.setTargetElement=function(I,i){i===void 0&&(i=1),this.removeTickerListener(),this.removeEvents(),this.interactionDOMElement=I,this.resolution=i,this.addEvents(),this.addTickerListener()},g.prototype.addTickerListener=function(){this.tickerAdded||!this.interactionDOMElement||!this._useSystemTicker||(Ui.system.add(this.tickerUpdate,this,pA.INTERACTION),this.tickerAdded=!0)},g.prototype.removeTickerListener=function(){this.tickerAdded&&(Ui.system.remove(this.tickerUpdate,this),this.tickerAdded=!1)},g.prototype.addEvents=function(){if(!(this.eventsAdded||!this.interactionDOMElement)){var I=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(I.msContentZooming="none",I.msTouchAction="none"):this.supportsPointerEvents&&(I.touchAction="none"),this.supportsPointerEvents?(globalThis.document.addEventListener("pointermove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.addEventListener("pointerdown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.addEventListener("pointerleave",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.addEventListener("pointerover",this.onPointerOver,this._eventListenerOptions),globalThis.addEventListener("pointercancel",this.onPointerCancel,this._eventListenerOptions),globalThis.addEventListener("pointerup",this.onPointerUp,this._eventListenerOptions)):(globalThis.document.addEventListener("mousemove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.addEventListener("mousedown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.addEventListener("mouseout",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.addEventListener("mouseover",this.onPointerOver,this._eventListenerOptions),globalThis.addEventListener("mouseup",this.onPointerUp,this._eventListenerOptions)),this.supportsTouchEvents&&(this.interactionDOMElement.addEventListener("touchstart",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.addEventListener("touchcancel",this.onPointerCancel,this._eventListenerOptions),this.interactionDOMElement.addEventListener("touchend",this.onPointerUp,this._eventListenerOptions),this.interactionDOMElement.addEventListener("touchmove",this.onPointerMove,this._eventListenerOptions)),this.eventsAdded=!0}},g.prototype.removeEvents=function(){if(!(!this.eventsAdded||!this.interactionDOMElement)){var I=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(I.msContentZooming="",I.msTouchAction=""):this.supportsPointerEvents&&(I.touchAction=""),this.supportsPointerEvents?(globalThis.document.removeEventListener("pointermove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("pointerdown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("pointerleave",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("pointerover",this.onPointerOver,this._eventListenerOptions),globalThis.removeEventListener("pointercancel",this.onPointerCancel,this._eventListenerOptions),globalThis.removeEventListener("pointerup",this.onPointerUp,this._eventListenerOptions)):(globalThis.document.removeEventListener("mousemove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("mousedown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("mouseout",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("mouseover",this.onPointerOver,this._eventListenerOptions),globalThis.removeEventListener("mouseup",this.onPointerUp,this._eventListenerOptions)),this.supportsTouchEvents&&(this.interactionDOMElement.removeEventListener("touchstart",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("touchcancel",this.onPointerCancel,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("touchend",this.onPointerUp,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("touchmove",this.onPointerMove,this._eventListenerOptions)),this.interactionDOMElement=null,this.eventsAdded=!1}},g.prototype.tickerUpdate=function(I){this._deltaTime+=I,!(this._deltaTime0&&(o=I.composedPath()[0]);for(var a=o!==this.interactionDOMElement?"outside":"",s=0;s"u"&&(r.button=I.touches.length?1:0),typeof r.buttons>"u"&&(r.buttons=I.touches.length?1:0),typeof r.isPrimary>"u"&&(r.isPrimary=I.touches.length===1&&I.type==="touchstart"),typeof r.width>"u"&&(r.width=r.radiusX||1),typeof r.height>"u"&&(r.height=r.radiusY||1),typeof r.tiltX>"u"&&(r.tiltX=0),typeof r.tiltY>"u"&&(r.tiltY=0),typeof r.pointerType>"u"&&(r.pointerType="touch"),typeof r.pointerId>"u"&&(r.pointerId=r.identifier||0),typeof r.pressure>"u"&&(r.pressure=r.force||.5),typeof r.twist>"u"&&(r.twist=0),typeof r.tangentialPressure>"u"&&(r.tangentialPressure=0),typeof r.layerX>"u"&&(r.layerX=r.offsetX=r.clientX),typeof r.layerY>"u"&&(r.layerY=r.offsetY=r.clientY),r.isNormalized=!0,i.push(r)}else if(!globalThis.MouseEvent||I instanceof MouseEvent&&(!this.supportsPointerEvents||!(I instanceof globalThis.PointerEvent))){var o=I;typeof o.isPrimary>"u"&&(o.isPrimary=!0),typeof o.width>"u"&&(o.width=1),typeof o.height>"u"&&(o.height=1),typeof o.tiltX>"u"&&(o.tiltX=0),typeof o.tiltY>"u"&&(o.tiltY=0),typeof o.pointerType>"u"&&(o.pointerType="mouse"),typeof o.pointerId>"u"&&(o.pointerId=TR),typeof o.pressure>"u"&&(o.pressure=.5),typeof o.twist>"u"&&(o.twist=0),typeof o.tangentialPressure>"u"&&(o.tangentialPressure=0),o.isNormalized=!0,i.push(o)}else i.push(I);return i},g.prototype.destroy=function(){this.removeEvents(),this.removeTickerListener(),this.removeAllListeners(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactionDOMElement=null,this.onPointerDown=null,this.processPointerDown=null,this.onPointerUp=null,this.processPointerUp=null,this.onPointerCancel=null,this.processPointerCancel=null,this.onPointerMove=null,this.processPointerMove=null,this.onPointerOut=null,this.processPointerOverOut=null,this.onPointerOver=null,this.search=null},g.extension={name:"interaction",type:[Og.RendererPlugin,Og.CanvasRendererPlugin]},g}(B0);/*! +***************************************************************************** */var YM=function(e,g){return YM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)I.hasOwnProperty(n)&&(i[n]=I[n])},YM(e,g)};function Dze(e,g){YM(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}var _fe=function(){function e(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.target=null,this.currentTarget=null,this.type=null,this.data=null}return e.prototype.stopPropagation=function(){this.stopped=!0,this.stopPropagationHint=!0,this.stopsPropagatingAt=this.currentTarget},e.prototype.reset=function(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.currentTarget=null,this.target=null},e}(),k1=function(){function e(g){this._pointerId=g,this._flags=e.FLAGS.NONE}return e.prototype._doSet=function(g,i){i?this._flags=this._flags|g:this._flags=this._flags&~g},Object.defineProperty(e.prototype,"pointerId",{get:function(){return this._pointerId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"flags",{get:function(){return this._flags},set:function(g){this._flags=g},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"none",{get:function(){return this._flags===e.FLAGS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"over",{get:function(){return(this._flags&e.FLAGS.OVER)!==0},set:function(g){this._doSet(e.FLAGS.OVER,g)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rightDown",{get:function(){return(this._flags&e.FLAGS.RIGHT_DOWN)!==0},set:function(g){this._doSet(e.FLAGS.RIGHT_DOWN,g)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leftDown",{get:function(){return(this._flags&e.FLAGS.LEFT_DOWN)!==0},set:function(g){this._doSet(e.FLAGS.LEFT_DOWN,g)},enumerable:!1,configurable:!0}),e.FLAGS=Object.freeze({NONE:0,OVER:1,LEFT_DOWN:2,RIGHT_DOWN:4}),e}(),xze=function(){function e(){this._tempPoint=new Ai}return e.prototype.recursiveFindHit=function(g,i,I,n,r){var C;if(!i||!i.visible)return!1;var o=g.data.global;r=i.interactive||r;var a=!1,s=r,A=!0;if(i.hitArea)n&&(i.worldTransform.applyInverse(o,this._tempPoint),i.hitArea.contains(this._tempPoint.x,this._tempPoint.y)?a=!0:(n=!1,A=!1)),s=!1;else if(i._mask&&n){var l=i._mask.isMaskData?i._mask.maskObject:i._mask;l&&!(!((C=l.containsPoint)===null||C===void 0)&&C.call(l,o))&&(n=!1)}if(A&&i.interactiveChildren&&i.children)for(var c=i.children,u=c.length-1;u>=0;u--){var d=c[u],h=this.recursiveFindHit(g,d,I,n,s);if(h){if(!d.parent)continue;s=!1,h&&(g.target&&(n=!1),a=!0)}}return r&&(n&&!g.target&&!i.hitArea&&i.containsPoint&&i.containsPoint(o)&&(a=!0),i.interactive&&(a&&!g.target&&(g.target=i),I&&I(g,i,!!a))),a},e.prototype.findHit=function(g,i,I,n){this.recursiveFindHit(g,i,I,n,!1)},e}(),Lfe={interactive:!1,interactiveChildren:!0,hitArea:null,get buttonMode(){return this.cursor==="pointer"},set buttonMode(e){e?this.cursor="pointer":this.cursor==="pointer"&&(this.cursor=null)},cursor:null,get trackedPointers(){return this._trackedPointers===void 0&&(this._trackedPointers={}),this._trackedPointers},_trackedPointers:void 0};eI.mixin(Lfe);var kR=1,YR={target:null,data:{global:null}},Ufe=function(e){Dze(g,e);function g(i,I){var n=e.call(this)||this;return I=I||{},n.renderer=i,n.autoPreventDefault=I.autoPreventDefault!==void 0?I.autoPreventDefault:!0,n.interactionFrequency=I.interactionFrequency||10,n.mouse=new kM,n.mouse.identifier=kR,n.mouse.global.set(-999999),n.activeInteractionData={},n.activeInteractionData[kR]=n.mouse,n.interactionDataPool=[],n.eventData=new _fe,n.interactionDOMElement=null,n.moveWhenInside=!1,n.eventsAdded=!1,n.tickerAdded=!1,n.mouseOverRenderer=!("PointerEvent"in globalThis),n.supportsTouchEvents="ontouchstart"in globalThis,n.supportsPointerEvents=!!globalThis.PointerEvent,n.onPointerUp=n.onPointerUp.bind(n),n.processPointerUp=n.processPointerUp.bind(n),n.onPointerCancel=n.onPointerCancel.bind(n),n.processPointerCancel=n.processPointerCancel.bind(n),n.onPointerDown=n.onPointerDown.bind(n),n.processPointerDown=n.processPointerDown.bind(n),n.onPointerMove=n.onPointerMove.bind(n),n.processPointerMove=n.processPointerMove.bind(n),n.onPointerOut=n.onPointerOut.bind(n),n.processPointerOverOut=n.processPointerOverOut.bind(n),n.onPointerOver=n.onPointerOver.bind(n),n.cursorStyles={default:"inherit",pointer:"pointer"},n.currentCursorMode=null,n.cursor=null,n.resolution=1,n.delayedEvents=[],n.search=new xze,n._tempDisplayObject=new mU,n._eventListenerOptions={capture:!0,passive:!1},n._useSystemTicker=I.useSystemTicker!==void 0?I.useSystemTicker:!0,n.setTargetElement(n.renderer.view,n.renderer.resolution),n}return Object.defineProperty(g.prototype,"useSystemTicker",{get:function(){return this._useSystemTicker},set:function(i){this._useSystemTicker=i,i?this.addTickerListener():this.removeTickerListener()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"lastObjectRendered",{get:function(){return this.renderer._lastObjectRendered||this._tempDisplayObject},enumerable:!1,configurable:!0}),g.prototype.hitTest=function(i,I){return YR.target=null,YR.data.global=i,I||(I=this.lastObjectRendered),this.processInteractive(YR,I,null,!0),YR.target},g.prototype.setTargetElement=function(i,I){I===void 0&&(I=1),this.removeTickerListener(),this.removeEvents(),this.interactionDOMElement=i,this.resolution=I,this.addEvents(),this.addTickerListener()},g.prototype.addTickerListener=function(){this.tickerAdded||!this.interactionDOMElement||!this._useSystemTicker||(UI.system.add(this.tickerUpdate,this,bA.INTERACTION),this.tickerAdded=!0)},g.prototype.removeTickerListener=function(){this.tickerAdded&&(UI.system.remove(this.tickerUpdate,this),this.tickerAdded=!1)},g.prototype.addEvents=function(){if(!(this.eventsAdded||!this.interactionDOMElement)){var i=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(i.msContentZooming="none",i.msTouchAction="none"):this.supportsPointerEvents&&(i.touchAction="none"),this.supportsPointerEvents?(globalThis.document.addEventListener("pointermove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.addEventListener("pointerdown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.addEventListener("pointerleave",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.addEventListener("pointerover",this.onPointerOver,this._eventListenerOptions),globalThis.addEventListener("pointercancel",this.onPointerCancel,this._eventListenerOptions),globalThis.addEventListener("pointerup",this.onPointerUp,this._eventListenerOptions)):(globalThis.document.addEventListener("mousemove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.addEventListener("mousedown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.addEventListener("mouseout",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.addEventListener("mouseover",this.onPointerOver,this._eventListenerOptions),globalThis.addEventListener("mouseup",this.onPointerUp,this._eventListenerOptions)),this.supportsTouchEvents&&(this.interactionDOMElement.addEventListener("touchstart",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.addEventListener("touchcancel",this.onPointerCancel,this._eventListenerOptions),this.interactionDOMElement.addEventListener("touchend",this.onPointerUp,this._eventListenerOptions),this.interactionDOMElement.addEventListener("touchmove",this.onPointerMove,this._eventListenerOptions)),this.eventsAdded=!0}},g.prototype.removeEvents=function(){if(!(!this.eventsAdded||!this.interactionDOMElement)){var i=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(i.msContentZooming="",i.msTouchAction=""):this.supportsPointerEvents&&(i.touchAction=""),this.supportsPointerEvents?(globalThis.document.removeEventListener("pointermove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("pointerdown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("pointerleave",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("pointerover",this.onPointerOver,this._eventListenerOptions),globalThis.removeEventListener("pointercancel",this.onPointerCancel,this._eventListenerOptions),globalThis.removeEventListener("pointerup",this.onPointerUp,this._eventListenerOptions)):(globalThis.document.removeEventListener("mousemove",this.onPointerMove,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("mousedown",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("mouseout",this.onPointerOut,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("mouseover",this.onPointerOver,this._eventListenerOptions),globalThis.removeEventListener("mouseup",this.onPointerUp,this._eventListenerOptions)),this.supportsTouchEvents&&(this.interactionDOMElement.removeEventListener("touchstart",this.onPointerDown,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("touchcancel",this.onPointerCancel,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("touchend",this.onPointerUp,this._eventListenerOptions),this.interactionDOMElement.removeEventListener("touchmove",this.onPointerMove,this._eventListenerOptions)),this.interactionDOMElement=null,this.eventsAdded=!1}},g.prototype.tickerUpdate=function(i){this._deltaTime+=i,!(this._deltaTime0&&(o=i.composedPath()[0]);for(var a=o!==this.interactionDOMElement?"outside":"",s=0;s"u"&&(C.button=i.touches.length?1:0),typeof C.buttons>"u"&&(C.buttons=i.touches.length?1:0),typeof C.isPrimary>"u"&&(C.isPrimary=i.touches.length===1&&i.type==="touchstart"),typeof C.width>"u"&&(C.width=C.radiusX||1),typeof C.height>"u"&&(C.height=C.radiusY||1),typeof C.tiltX>"u"&&(C.tiltX=0),typeof C.tiltY>"u"&&(C.tiltY=0),typeof C.pointerType>"u"&&(C.pointerType="touch"),typeof C.pointerId>"u"&&(C.pointerId=C.identifier||0),typeof C.pressure>"u"&&(C.pressure=C.force||.5),typeof C.twist>"u"&&(C.twist=0),typeof C.tangentialPressure>"u"&&(C.tangentialPressure=0),typeof C.layerX>"u"&&(C.layerX=C.offsetX=C.clientX),typeof C.layerY>"u"&&(C.layerY=C.offsetY=C.clientY),C.isNormalized=!0,I.push(C)}else if(!globalThis.MouseEvent||i instanceof MouseEvent&&(!this.supportsPointerEvents||!(i instanceof globalThis.PointerEvent))){var o=i;typeof o.isPrimary>"u"&&(o.isPrimary=!0),typeof o.width>"u"&&(o.width=1),typeof o.height>"u"&&(o.height=1),typeof o.tiltX>"u"&&(o.tiltX=0),typeof o.tiltY>"u"&&(o.tiltY=0),typeof o.pointerType>"u"&&(o.pointerType="mouse"),typeof o.pointerId>"u"&&(o.pointerId=kR),typeof o.pressure>"u"&&(o.pressure=.5),typeof o.twist>"u"&&(o.twist=0),typeof o.tangentialPressure>"u"&&(o.tangentialPressure=0),o.isNormalized=!0,I.push(o)}else I.push(i);return I},g.prototype.destroy=function(){this.removeEvents(),this.removeTickerListener(),this.removeAllListeners(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactionDOMElement=null,this.onPointerDown=null,this.processPointerDown=null,this.onPointerUp=null,this.processPointerUp=null,this.onPointerCancel=null,this.processPointerCancel=null,this.onPointerMove=null,this.processPointerMove=null,this.onPointerOut=null,this.processPointerOverOut=null,this.onPointerOver=null,this.search=null},g.extension={name:"interaction",type:[_g.RendererPlugin,_g.CanvasRendererPlugin]},g}(w0);/*! * @pixi/extract - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/extract is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var Tze=new wg,Nze=4,zfe=function(){function e(g){this.renderer=g}return e.prototype.image=function(g,I,i){var n=new Image;return n.src=this.base64(g,I,i),n},e.prototype.base64=function(g,I,i){return this.canvas(g).toDataURL(I,i)},e.prototype.canvas=function(g,I){var i=this._rawPixels(g,I),n=i.pixels,C=i.width,r=i.height,o=i.flipY,a=new GM(C,r,1),s=a.context.getImageData(0,0,C,r);if(e.arrayPostDivide(n,s.data),a.context.putImageData(s,0,0),o){var A=new GM(a.width,a.height,1);A.context.scale(1,-1),A.context.drawImage(a.canvas,0,-r),a.destroy(),a=A}return a.canvas},e.prototype.pixels=function(g,I){var i=this._rawPixels(g,I).pixels;return e.arrayPostDivide(i,i),i},e.prototype._rawPixels=function(g,I){var i=this.renderer,n,C=!1,r,o=!1;if(g)if(g instanceof Ys)r=g;else{var a=i.context.webGLVersion>=2?i.multisample:fI.NONE;if(r=this.renderer.generateTexture(g,{multisample:a}),a!==fI.NONE){var s=Ys.create({width:r.width,height:r.height});i.framebuffer.bind(r.framebuffer),i.framebuffer.blit(s.framebuffer),i.framebuffer.bind(null),r.destroy(!0),r=s}o=!0}r?(n=r.baseTexture.resolution,I=I??r.frame,C=!1,i.renderTexture.bind(r)):(n=i.resolution,I||(I=Tze,I.width=i.width,I.height=i.height),C=!0,i.renderTexture.bind(null));var A=Math.round(I.width*n),l=Math.round(I.height*n),c=new Uint8Array(Nze*A*l),u=i.gl;return u.readPixels(Math.round(I.x*n),Math.round(I.y*n),A,l,u.RGBA,u.UNSIGNED_BYTE,c),o&&r.destroy(!0),{pixels:c,width:A,height:l,flipY:C}},e.prototype.destroy=function(){this.renderer=null},e.arrayPostDivide=function(g,I){for(var i=0;i=2?I.multisample:pi.NONE;if(C=this.renderer.generateTexture(g,{multisample:a}),a!==pi.NONE){var s=Ks.create({width:C.width,height:C.height});I.framebuffer.bind(C.framebuffer),I.framebuffer.blit(s.framebuffer),I.framebuffer.bind(null),C.destroy(!0),C=s}o=!0}C?(n=C.baseTexture.resolution,i=i??C.frame,r=!1,I.renderTexture.bind(C)):(n=I.resolution,i||(i=Eze,i.width=I.width,i.height=I.height),r=!0,I.renderTexture.bind(null));var A=Math.round(i.width*n),l=Math.round(i.height*n),c=new Uint8Array(Mze*A*l),u=I.gl;return u.readPixels(Math.round(i.x*n),Math.round(i.y*n),A,l,u.RGBA,u.UNSIGNED_BYTE,c),o&&C.destroy(!0),{pixels:c,width:A,height:l,flipY:r}},e.prototype.destroy=function(){this.renderer=null},e.arrayPostDivide=function(g,i){for(var I=0;I"u"&&(LK=!!(globalThis.XDomainRequest&&!("withCredentials"in new XMLHttpRequest))),LK&&this.crossOrigin?this._loadXdr():this._loadXhr();break}}},e.prototype._hasFlag=function(g){return(this._flags&g)!==0},e.prototype._setFlag=function(g,I){this._flags=I?this._flags|g:this._flags&~g},e.prototype._clearEvents=function(){clearTimeout(this._elementTimer),this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError,!1),this.data.removeEventListener("load",this._boundComplete,!1),this.data.removeEventListener("progress",this._boundOnProgress,!1),this.data.removeEventListener("canplaythrough",this._boundComplete,!1)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError,!1),this.xhr.removeEventListener("timeout",this._boundXhrOnTimeout,!1),this.xhr.removeEventListener("abort",this._boundXhrOnAbort,!1),this.xhr.removeEventListener("progress",this._boundOnProgress,!1),this.xhr.removeEventListener("load",this._boundXhrOnLoad,!1)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null))},e.prototype._finish=function(){if(this.isComplete)throw new Error("Complete called again for an already completed resource.");this._setFlag(e.STATUS_FLAGS.COMPLETE,!0),this._setFlag(e.STATUS_FLAGS.LOADING,!1),this.onComplete.dispatch(this)},e.prototype._loadElement=function(g){this.metadata.loadElement?this.data=this.metadata.loadElement:g==="image"&&typeof globalThis.Image<"u"?this.data=new Image:this.data=document.createElement(g),this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.metadata.skipSource||(this.data.src=this.url),this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1),this.timeout&&(this._elementTimer=setTimeout(this._boundOnTimeout,this.timeout))},e.prototype._loadSourceElement=function(g){if(this.metadata.loadElement?this.data=this.metadata.loadElement:g==="audio"&&typeof globalThis.Audio<"u"?this.data=new Audio:this.data=document.createElement(g),this.data===null){this.abort("Unsupported element: "+g);return}if(this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),!this.metadata.skipSource)if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var I=this.metadata.mimeType,i=0;i"u"?Tee:g.status;(g.responseType===""||g.responseType==="text"||typeof g.responseType>"u")&&(I=g.responseText),i===kze&&(I.length>0||g.responseType===e.XHR_RESPONSE_TYPE.BUFFER)?i=Tee:i===Kze&&(i=Yze);var n=i/100|0;if(n===Fze)if(this.xhrType===e.XHR_RESPONSE_TYPE.TEXT)this.data=I,this.type=e.TYPE.TEXT;else if(this.xhrType===e.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(I),this.type=e.TYPE.JSON}catch(o){this.abort("Error trying to parse loaded json: "+o);return}else if(this.xhrType===e.XHR_RESPONSE_TYPE.DOCUMENT)try{if(globalThis.DOMParser){var C=new DOMParser;this.data=C.parseFromString(I,"text/xml")}else{var r=document.createElement("div");r.innerHTML=I,this.data=r}this.type=e.TYPE.XML}catch(o){this.abort("Error trying to parse loaded xml: "+o);return}else this.data=g.response||I;else{this.abort("["+g.status+"] "+g.statusText+": "+g.responseURL);return}this.complete()},e.prototype._determineCrossOrigin=function(g,I){if(g.indexOf("data:")===0)return"";if(globalThis.origin!==globalThis.location.origin)return"anonymous";I=I||globalThis.location,YR||(YR=document.createElement("a")),YR.href=g;var i=Pfe(YR.href,{strictMode:!0}),n=!i.port&&I.port===""||i.port===I.port,C=i.protocol?i.protocol+":":"";return i.host!==I.hostname||!n||C!==I.protocol?"anonymous":""},e.prototype._determineXhrType=function(){return e._xhrTypeMap[this.extension]||e.XHR_RESPONSE_TYPE.TEXT},e.prototype._determineLoadType=function(){return e._loadTypeMap[this.extension]||e.LOAD_TYPE.XHR},e.prototype._getExtension=function(g){g===void 0&&(g=this.url);var I="";if(this.isDataUrl){var i=g.indexOf("/");I=g.substring(i+1,g.indexOf(";",i))}else{var n=g.indexOf("?"),C=g.indexOf("#"),r=Math.min(n>-1?n:g.length,C>-1?C:g.length);g=g.substring(0,r),I=g.substring(g.lastIndexOf(".")+1)}return I.toLowerCase()},e.prototype._getMimeFromXhrType=function(g){switch(g){case e.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case e.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case e.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case e.XHR_RESPONSE_TYPE.JSON:return"application/json";case e.XHR_RESPONSE_TYPE.DEFAULT:case e.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},e}();(function(e){(function(g){g[g.NONE=0]="NONE",g[g.DATA_URL=1]="DATA_URL",g[g.COMPLETE=2]="COMPLETE",g[g.LOADING=4]="LOADING"})(e.STATUS_FLAGS||(e.STATUS_FLAGS={})),function(g){g[g.UNKNOWN=0]="UNKNOWN",g[g.JSON=1]="JSON",g[g.XML=2]="XML",g[g.IMAGE=3]="IMAGE",g[g.AUDIO=4]="AUDIO",g[g.VIDEO=5]="VIDEO",g[g.TEXT=6]="TEXT"}(e.TYPE||(e.TYPE={})),function(g){g[g.XHR=1]="XHR",g[g.IMAGE=2]="IMAGE",g[g.AUDIO=3]="AUDIO",g[g.VIDEO=4]="VIDEO"}(e.LOAD_TYPE||(e.LOAD_TYPE={})),function(g){g.DEFAULT="text",g.BUFFER="arraybuffer",g.BLOB="blob",g.DOCUMENT="document",g.JSON="json",g.TEXT="text"}(e.XHR_RESPONSE_TYPE||(e.XHR_RESPONSE_TYPE={})),e._loadTypeMap={gif:e.LOAD_TYPE.IMAGE,png:e.LOAD_TYPE.IMAGE,bmp:e.LOAD_TYPE.IMAGE,jpg:e.LOAD_TYPE.IMAGE,jpeg:e.LOAD_TYPE.IMAGE,tif:e.LOAD_TYPE.IMAGE,tiff:e.LOAD_TYPE.IMAGE,webp:e.LOAD_TYPE.IMAGE,tga:e.LOAD_TYPE.IMAGE,avif:e.LOAD_TYPE.IMAGE,svg:e.LOAD_TYPE.IMAGE,"svg+xml":e.LOAD_TYPE.IMAGE,mp3:e.LOAD_TYPE.AUDIO,ogg:e.LOAD_TYPE.AUDIO,wav:e.LOAD_TYPE.AUDIO,mp4:e.LOAD_TYPE.VIDEO,webm:e.LOAD_TYPE.VIDEO},e._xhrTypeMap={xhtml:e.XHR_RESPONSE_TYPE.DOCUMENT,html:e.XHR_RESPONSE_TYPE.DOCUMENT,htm:e.XHR_RESPONSE_TYPE.DOCUMENT,xml:e.XHR_RESPONSE_TYPE.DOCUMENT,tmx:e.XHR_RESPONSE_TYPE.DOCUMENT,svg:e.XHR_RESPONSE_TYPE.DOCUMENT,tsx:e.XHR_RESPONSE_TYPE.DOCUMENT,gif:e.XHR_RESPONSE_TYPE.BLOB,png:e.XHR_RESPONSE_TYPE.BLOB,bmp:e.XHR_RESPONSE_TYPE.BLOB,jpg:e.XHR_RESPONSE_TYPE.BLOB,jpeg:e.XHR_RESPONSE_TYPE.BLOB,tif:e.XHR_RESPONSE_TYPE.BLOB,tiff:e.XHR_RESPONSE_TYPE.BLOB,webp:e.XHR_RESPONSE_TYPE.BLOB,tga:e.XHR_RESPONSE_TYPE.BLOB,avif:e.XHR_RESPONSE_TYPE.BLOB,json:e.XHR_RESPONSE_TYPE.JSON,text:e.XHR_RESPONSE_TYPE.TEXT,txt:e.XHR_RESPONSE_TYPE.TEXT,ttf:e.XHR_RESPONSE_TYPE.BUFFER,otf:e.XHR_RESPONSE_TYPE.BUFFER},e.EMPTY_GIF="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="})(DI||(DI={}));function vu(){}function Dze(e){return function(){for(var I=arguments,i=[],n=0;n>2,n[1]=(i[0]&3)<<4|i[1]>>4,n[2]=(i[1]&15)<<2|i[2]>>6,n[3]=i[2]&63;var r=I-(e.length-1);switch(r){case 2:n[3]=64,n[2]=64;break;case 1:n[3]=64;break}for(var C=0;C"u"&&(e5=!!(globalThis.XDomainRequest&&!("withCredentials"in new XMLHttpRequest))),e5&&this.crossOrigin?this._loadXdr():this._loadXhr();break}}},e.prototype._hasFlag=function(g){return(this._flags&g)!==0},e.prototype._setFlag=function(g,i){this._flags=i?this._flags|g:this._flags&~g},e.prototype._clearEvents=function(){clearTimeout(this._elementTimer),this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError,!1),this.data.removeEventListener("load",this._boundComplete,!1),this.data.removeEventListener("progress",this._boundOnProgress,!1),this.data.removeEventListener("canplaythrough",this._boundComplete,!1)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError,!1),this.xhr.removeEventListener("timeout",this._boundXhrOnTimeout,!1),this.xhr.removeEventListener("abort",this._boundXhrOnAbort,!1),this.xhr.removeEventListener("progress",this._boundOnProgress,!1),this.xhr.removeEventListener("load",this._boundXhrOnLoad,!1)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null))},e.prototype._finish=function(){if(this.isComplete)throw new Error("Complete called again for an already completed resource.");this._setFlag(e.STATUS_FLAGS.COMPLETE,!0),this._setFlag(e.STATUS_FLAGS.LOADING,!1),this.onComplete.dispatch(this)},e.prototype._loadElement=function(g){this.metadata.loadElement?this.data=this.metadata.loadElement:g==="image"&&typeof globalThis.Image<"u"?this.data=new Image:this.data=document.createElement(g),this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.metadata.skipSource||(this.data.src=this.url),this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1),this.timeout&&(this._elementTimer=setTimeout(this._boundOnTimeout,this.timeout))},e.prototype._loadSourceElement=function(g){if(this.metadata.loadElement?this.data=this.metadata.loadElement:g==="audio"&&typeof globalThis.Audio<"u"?this.data=new Audio:this.data=document.createElement(g),this.data===null){this.abort("Unsupported element: "+g);return}if(this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),!this.metadata.skipSource)if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var i=this.metadata.mimeType,I=0;I"u"?Kee:g.status;(g.responseType===""||g.responseType==="text"||typeof g.responseType>"u")&&(i=g.responseText),I===zze&&(i.length>0||g.responseType===e.XHR_RESPONSE_TYPE.BUFFER)?I=Kee:I===Jze&&(I=Pze);var n=I/100|0;if(n===Oze)if(this.xhrType===e.XHR_RESPONSE_TYPE.TEXT)this.data=i,this.type=e.TYPE.TEXT;else if(this.xhrType===e.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(i),this.type=e.TYPE.JSON}catch(o){this.abort("Error trying to parse loaded json: "+o);return}else if(this.xhrType===e.XHR_RESPONSE_TYPE.DOCUMENT)try{if(globalThis.DOMParser){var r=new DOMParser;this.data=r.parseFromString(i,"text/xml")}else{var C=document.createElement("div");C.innerHTML=i,this.data=C}this.type=e.TYPE.XML}catch(o){this.abort("Error trying to parse loaded xml: "+o);return}else this.data=g.response||i;else{this.abort("["+g.status+"] "+g.statusText+": "+g.responseURL);return}this.complete()},e.prototype._determineCrossOrigin=function(g,i){if(g.indexOf("data:")===0)return"";if(globalThis.origin!==globalThis.location.origin)return"anonymous";i=i||globalThis.location,FR||(FR=document.createElement("a")),FR.href=g;var I=jfe(FR.href,{strictMode:!0}),n=!I.port&&i.port===""||I.port===i.port,r=I.protocol?I.protocol+":":"";return I.host!==i.hostname||!n||r!==i.protocol?"anonymous":""},e.prototype._determineXhrType=function(){return e._xhrTypeMap[this.extension]||e.XHR_RESPONSE_TYPE.TEXT},e.prototype._determineLoadType=function(){return e._loadTypeMap[this.extension]||e.LOAD_TYPE.XHR},e.prototype._getExtension=function(g){g===void 0&&(g=this.url);var i="";if(this.isDataUrl){var I=g.indexOf("/");i=g.substring(I+1,g.indexOf(";",I))}else{var n=g.indexOf("?"),r=g.indexOf("#"),C=Math.min(n>-1?n:g.length,r>-1?r:g.length);g=g.substring(0,C),i=g.substring(g.lastIndexOf(".")+1)}return i.toLowerCase()},e.prototype._getMimeFromXhrType=function(g){switch(g){case e.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case e.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case e.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case e.XHR_RESPONSE_TYPE.JSON:return"application/json";case e.XHR_RESPONSE_TYPE.DEFAULT:case e.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},e}();(function(e){(function(g){g[g.NONE=0]="NONE",g[g.DATA_URL=1]="DATA_URL",g[g.COMPLETE=2]="COMPLETE",g[g.LOADING=4]="LOADING"})(e.STATUS_FLAGS||(e.STATUS_FLAGS={})),function(g){g[g.UNKNOWN=0]="UNKNOWN",g[g.JSON=1]="JSON",g[g.XML=2]="XML",g[g.IMAGE=3]="IMAGE",g[g.AUDIO=4]="AUDIO",g[g.VIDEO=5]="VIDEO",g[g.TEXT=6]="TEXT"}(e.TYPE||(e.TYPE={})),function(g){g[g.XHR=1]="XHR",g[g.IMAGE=2]="IMAGE",g[g.AUDIO=3]="AUDIO",g[g.VIDEO=4]="VIDEO"}(e.LOAD_TYPE||(e.LOAD_TYPE={})),function(g){g.DEFAULT="text",g.BUFFER="arraybuffer",g.BLOB="blob",g.DOCUMENT="document",g.JSON="json",g.TEXT="text"}(e.XHR_RESPONSE_TYPE||(e.XHR_RESPONSE_TYPE={})),e._loadTypeMap={gif:e.LOAD_TYPE.IMAGE,png:e.LOAD_TYPE.IMAGE,bmp:e.LOAD_TYPE.IMAGE,jpg:e.LOAD_TYPE.IMAGE,jpeg:e.LOAD_TYPE.IMAGE,tif:e.LOAD_TYPE.IMAGE,tiff:e.LOAD_TYPE.IMAGE,webp:e.LOAD_TYPE.IMAGE,tga:e.LOAD_TYPE.IMAGE,avif:e.LOAD_TYPE.IMAGE,svg:e.LOAD_TYPE.IMAGE,"svg+xml":e.LOAD_TYPE.IMAGE,mp3:e.LOAD_TYPE.AUDIO,ogg:e.LOAD_TYPE.AUDIO,wav:e.LOAD_TYPE.AUDIO,mp4:e.LOAD_TYPE.VIDEO,webm:e.LOAD_TYPE.VIDEO},e._xhrTypeMap={xhtml:e.XHR_RESPONSE_TYPE.DOCUMENT,html:e.XHR_RESPONSE_TYPE.DOCUMENT,htm:e.XHR_RESPONSE_TYPE.DOCUMENT,xml:e.XHR_RESPONSE_TYPE.DOCUMENT,tmx:e.XHR_RESPONSE_TYPE.DOCUMENT,svg:e.XHR_RESPONSE_TYPE.DOCUMENT,tsx:e.XHR_RESPONSE_TYPE.DOCUMENT,gif:e.XHR_RESPONSE_TYPE.BLOB,png:e.XHR_RESPONSE_TYPE.BLOB,bmp:e.XHR_RESPONSE_TYPE.BLOB,jpg:e.XHR_RESPONSE_TYPE.BLOB,jpeg:e.XHR_RESPONSE_TYPE.BLOB,tif:e.XHR_RESPONSE_TYPE.BLOB,tiff:e.XHR_RESPONSE_TYPE.BLOB,webp:e.XHR_RESPONSE_TYPE.BLOB,tga:e.XHR_RESPONSE_TYPE.BLOB,avif:e.XHR_RESPONSE_TYPE.BLOB,json:e.XHR_RESPONSE_TYPE.JSON,text:e.XHR_RESPONSE_TYPE.TEXT,txt:e.XHR_RESPONSE_TYPE.TEXT,ttf:e.XHR_RESPONSE_TYPE.BUFFER,otf:e.XHR_RESPONSE_TYPE.BUFFER},e.EMPTY_GIF="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="})(xi||(xi={}));function Bu(){}function _ze(e){return function(){for(var i=arguments,I=[],n=0;n>2,n[1]=(I[0]&3)<<4|I[1]>>4,n[2]=(I[1]&15)<<2|I[2]>>6,n[3]=I[2]&63;var C=i-(e.length-1);switch(C){case 2:n[3]=64,n[2]=64;break;case 1:n[3]=64;break}for(var r=0;r0&&C[C.length-1])&&(s[0]===6||s[0]===2)){I=0;continue}if(s[0]===3&&(!C||s[1]>C[0]&&s[1]=33776&&I<=33779)return"s3tc";if(I>=37488&&I<=37497)return"etc";if(I>=35840&&I<=35843)return"pvrtc";if(I>=36196)return"etc1";if(I>=35986&&I<=34798)return"atc";throw new Error("Invalid (compressed) texture format given!")},g._createLevelBuffers=function(I,i,n,C,r,o,a){for(var s=new Array(n),A=I.byteOffset,l=o,c=a,u=l+C-1&~(C-1),d=c+r-1&~(r-1),h=u*d*pB[i],m=0;m1?l:u,levelHeight:n>1?c:d,levelBuffer:new Uint8Array(I.buffer,A,h)},A+=h,l=l>>1||1,c=c>>1||1,u=l+C-1&~(C-1),d=c+r-1&~(r-1),h=u*d*pB[i];return s},g}(Lfe),Ufe=function(){function e(){}return e.use=function(g,I){var i=g.data,n=this;if(g.type===DI.TYPE.JSON&&i&&i.cacheID&&i.textures){for(var C=i.textures,r=void 0,o=void 0,a=0,s=C.length;a>>1,R=R>>>1}for(var H=B,S=0;S1||C!==0?w:S,levelHeight:u>1||C!==0?R:X,levelBuffer:new Uint8Array(g,Y,v)},Y+=v}W+=H+4,W=W%4!==0?W+4-W%4:W,w=w>>1||1,R=R>>1||1,S=w+h-1&~(h-1),X=R+m-1&~(m-1),v=S*X*Z}return C!==0?{uncompressed:p.map(function(J){var P=J[0].levelBuffer,ge=!1;return C===Et.FLOAT?P=new Float32Array(J[0].levelBuffer.buffer,J[0].levelBuffer.byteOffset,J[0].levelBuffer.byteLength/4):C===Et.UNSIGNED_INT?(ge=!0,P=new Uint32Array(J[0].levelBuffer.buffer,J[0].levelBuffer.byteOffset,J[0].levelBuffer.byteLength/4)):C===Et.INT&&(ge=!0,P=new Int32Array(J[0].levelBuffer.buffer,J[0].levelBuffer.byteOffset,J[0].levelBuffer.byteLength/4)),{resource:new _h(P,{width:J[0].levelWidth,height:J[0].levelHeight}),type:C,format:ge?lPe(r):r}}),kvData:B}:{compressed:p.map(function(J){return new w9(null,{format:o,width:a,height:s,levels:u,levelBuffers:J})}),kvData:B}}function sPe(e,g){for(var I=0;Ig-n){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}for(var a=0;a0&&r[r.length-1])&&(s[0]===6||s[0]===2)){i=0;continue}if(s[0]===3&&(!r||s[1]>r[0]&&s[1]=33776&&i<=33779)return"s3tc";if(i>=37488&&i<=37497)return"etc";if(i>=35840&&i<=35843)return"pvrtc";if(i>=36196)return"etc1";if(i>=35986&&i<=34798)return"atc";throw new Error("Invalid (compressed) texture format given!")},g._createLevelBuffers=function(i,I,n,r,C,o,a){for(var s=new Array(n),A=i.byteOffset,l=o,c=a,u=l+r-1&~(r-1),d=c+C-1&~(C-1),h=u*d*yB[I],m=0;m1?l:u,levelHeight:n>1?c:d,levelBuffer:new Uint8Array(i.buffer,A,h)},A+=h,l=l>>1||1,c=c>>1||1,u=l+r-1&~(r-1),d=c+C-1&~(C-1),h=u*d*yB[I];return s},g}(tpe),gpe=function(){function e(){}return e.use=function(g,i){var I=g.data,n=this;if(g.type===xi.TYPE.JSON&&I&&I.cacheID&&I.textures){for(var r=I.textures,C=void 0,o=void 0,a=0,s=r.length;a>>1,V=V>>>1}for(var H=B,S=0;S1||r!==0?w:S,levelHeight:u>1||r!==0?V:X,levelBuffer:new Uint8Array(g,k,v)},k+=v}W+=H+4,W=W%4!==0?W+4-W%4:W,w=w>>1||1,V=V>>1||1,S=w+h-1&~(h-1),X=V+m-1&~(m-1),v=S*X*Z}return r!==0?{uncompressed:p.map(function(J){var P=J[0].levelBuffer,te=!1;return r===Et.FLOAT?P=new Float32Array(J[0].levelBuffer.buffer,J[0].levelBuffer.byteOffset,J[0].levelBuffer.byteLength/4):r===Et.UNSIGNED_INT?(te=!0,P=new Uint32Array(J[0].levelBuffer.buffer,J[0].levelBuffer.byteOffset,J[0].levelBuffer.byteLength/4)):r===Et.INT&&(te=!0,P=new Int32Array(J[0].levelBuffer.buffer,J[0].levelBuffer.byteOffset,J[0].levelBuffer.byteLength/4)),{resource:new Lh(P,{width:J[0].levelWidth,height:J[0].levelHeight}),type:r,format:te?bPe(C):C}}),kvData:B}:{compressed:p.map(function(J){return new W9(null,{format:o,width:a,height:s,levels:u,levelBuffers:J})}),kvData:B}}function pPe(e,g){for(var i=0;ig-n){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}for(var a=0;ao&&(n=o),r._properties=[!1,!0,!1,!1,!1],r._maxSize=I,r._batchSize=n,r._buffers=null,r._bufferUpdateIDs=[],r._updateID=0,r.interactiveChildren=!1,r.blendMode=Jt.NORMAL,r.autoResize=C,r.roundPixels=!0,r.baseTexture=null,r.setProperties(i),r._tint=0,r.tintRgb=new Float32Array(4),r.tint=16777215,r}return g.prototype.setProperties=function(I){I&&(this._properties[0]="vertices"in I||"scale"in I?!!I.vertices||!!I.scale:this._properties[0],this._properties[1]="position"in I?!!I.position:this._properties[1],this._properties[2]="rotation"in I?!!I.rotation:this._properties[2],this._properties[3]="uvs"in I?!!I.uvs:this._properties[3],this._properties[4]="tint"in I||"alpha"in I?!!I.tint||!!I.alpha:this._properties[4])},g.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},Object.defineProperty(g.prototype,"tint",{get:function(){return this._tint},set:function(I){this._tint=I,Ld(I,this.tintRgb)},enumerable:!1,configurable:!0}),g.prototype.render=function(I){var i=this;!this.visible||this.worldAlpha<=0||!this.children.length||!this.renderable||(this.baseTexture||(this.baseTexture=this.children[0]._texture.baseTexture,this.baseTexture.valid||this.baseTexture.once("update",function(){return i.onChildrenChange(0)})),I.batch.setObjectRenderer(I.plugins.particle),I.plugins.particle.render(this))},g.prototype.onChildrenChange=function(I){for(var i=Math.floor(I/this._batchSize);this._bufferUpdateIDs.lengtho&&(n=o),C._properties=[!1,!0,!1,!1,!1],C._maxSize=i,C._batchSize=n,C._buffers=null,C._bufferUpdateIDs=[],C._updateID=0,C.interactiveChildren=!1,C.blendMode=Jt.NORMAL,C.autoResize=r,C.roundPixels=!0,C.baseTexture=null,C.setProperties(I),C._tint=0,C.tintRgb=new Float32Array(4),C.tint=16777215,C}return g.prototype.setProperties=function(i){i&&(this._properties[0]="vertices"in i||"scale"in i?!!i.vertices||!!i.scale:this._properties[0],this._properties[1]="position"in i?!!i.position:this._properties[1],this._properties[2]="rotation"in i?!!i.rotation:this._properties[2],this._properties[3]="uvs"in i?!!i.uvs:this._properties[3],this._properties[4]="tint"in i||"alpha"in i?!!i.tint||!!i.alpha:this._properties[4])},g.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},Object.defineProperty(g.prototype,"tint",{get:function(){return this._tint},set:function(i){this._tint=i,Ud(i,this.tintRgb)},enumerable:!1,configurable:!0}),g.prototype.render=function(i){var I=this;!this.visible||this.worldAlpha<=0||!this.children.length||!this.renderable||(this.baseTexture||(this.baseTexture=this.children[0]._texture.baseTexture,this.baseTexture.valid||this.baseTexture.once("update",function(){return I.onChildrenChange(0)})),i.batch.setObjectRenderer(i.plugins.particle),i.plugins.particle.render(this))},g.prototype.onChildrenChange=function(i){for(var I=Math.floor(i/this._batchSize);this._bufferUpdateIDs.lengthn&&!I.autoResize&&(o=n);var a=I._buffers;a||(a=I._buffers=this.generateBuffers(I));var s=i[0]._texture.baseTexture,A=s.alphaMode>0;this.state.blendMode=rU(I.blendMode,A),r.state.set(this.state);var l=r.gl,c=I.worldTransform.copyTo(this.tempMatrix);c.prepend(r.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=c.toArray(!0),this.shader.uniforms.uColor=Qme(I.tintRgb,I.worldAlpha,this.shader.uniforms.uColor,A),this.shader.uniforms.uSampler=s,this.renderer.shader.bind(this.shader);for(var u=!1,d=0,h=0;dC&&(m=C),h>=a.length&&a.push(this._generateOneMoreBuffer(I));var f=a[h];f.uploadDynamic(i,d,m);var b=I._bufferUpdateIDs[h]||0;u=u||f._updateID0,l=s.alpha,c=l<1&&A?mT(s._tintRGB,l):s._tintRGB+(l*255<<24);C[o]=c,C[o+r]=c,C[o+r*2]=c,C[o+r*3]=c,o+=r*4}},g.prototype.destroy=function(){e.prototype.destroy.call(this),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null},g.extension={name:"particle",type:Og.RendererPlugin},g}(VS);/*! +`,spe=function(e){Ape(g,e);function g(i){var I=e.call(this,i)||this;return I.shader=null,I.properties=null,I.tempMatrix=new GI,I.properties=[{attributeName:"aVertexPosition",size:2,uploadFunction:I.uploadVertices,offset:0},{attributeName:"aPositionCoord",size:2,uploadFunction:I.uploadPosition,offset:0},{attributeName:"aRotation",size:1,uploadFunction:I.uploadRotation,offset:0},{attributeName:"aTextureCoord",size:2,uploadFunction:I.uploadUvs,offset:0},{attributeName:"aColor",size:1,type:Et.UNSIGNED_BYTE,uploadFunction:I.uploadTint,offset:0}],I.shader=Rs.from(vPe,GPe,{}),I.state=gu.for2d(),I}return g.prototype.render=function(i){var I=i.children,n=i._maxSize,r=i._batchSize,C=this.renderer,o=I.length;if(o!==0){o>n&&!i.autoResize&&(o=n);var a=i._buffers;a||(a=i._buffers=this.generateBuffers(i));var s=I[0]._texture.baseTexture,A=s.alphaMode>0;this.state.blendMode=cU(i.blendMode,A),C.state.set(this.state);var l=C.gl,c=i.worldTransform.copyTo(this.tempMatrix);c.prepend(C.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=c.toArray(!0),this.shader.uniforms.uColor=ife(i.tintRgb,i.worldAlpha,this.shader.uniforms.uColor,A),this.shader.uniforms.uSampler=s,this.renderer.shader.bind(this.shader);for(var u=!1,d=0,h=0;dr&&(m=r),h>=a.length&&a.push(this._generateOneMoreBuffer(i));var f=a[h];f.uploadDynamic(I,d,m);var b=i._bufferUpdateIDs[h]||0;u=u||f._updateID0,l=s.alpha,c=l<1&&A?GT(s._tintRGB,l):s._tintRGB+(l*255<<24);r[o]=c,r[o+C]=c,r[o+C*2]=c,r[o+C*3]=c,o+=C*4}},g.prototype.destroy=function(){e.prototype.destroy.call(this),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null},g.extension={name:"particle",type:_g.RendererPlugin},g}(XS);/*! * @pixi/graphics - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/graphics is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var za;(function(e){e.MITER="miter",e.BEVEL="bevel",e.ROUND="round"})(za||(za={}));var us;(function(e){e.BUTT="butt",e.ROUND="round",e.SQUARE="square"})(us||(us={}));var cb={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount:function(e,g){if(g===void 0&&(g=20),!this.adaptive||!e||isNaN(e))return g;var I=Math.ceil(e/this.maxLength);return Ithis.maxSegments&&(I=this.maxSegments),I}},xU=function(){function e(){this.color=16777215,this.alpha=1,this.texture=Ig.WHITE,this.matrix=null,this.visible=!1,this.reset()}return e.prototype.clone=function(){var g=new e;return g.color=this.color,g.alpha=this.alpha,g.texture=this.texture,g.matrix=this.matrix,g.visible=this.visible,g},e.prototype.reset=function(){this.color=16777215,this.alpha=1,this.texture=Ig.WHITE,this.matrix=null,this.visible=!1},e.prototype.destroy=function(){this.texture=null,this.matrix=null},e}();/*! ***************************************************************************** + */var Ja;(function(e){e.MITER="miter",e.BEVEL="bevel",e.ROUND="round"})(Ja||(Ja={}));var ds;(function(e){e.BUTT="butt",e.ROUND="round",e.SQUARE="square"})(ds||(ds={}));var db={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount:function(e,g){if(g===void 0&&(g=20),!this.adaptive||!e||isNaN(e))return g;var i=Math.ceil(e/this.maxLength);return ithis.maxSegments&&(i=this.maxSegments),i}},OU=function(){function e(){this.color=16777215,this.alpha=1,this.texture=gg.WHITE,this.matrix=null,this.visible=!1,this.reset()}return e.prototype.clone=function(){var g=new e;return g.color=this.color,g.alpha=this.alpha,g.texture=this.texture,g.matrix=this.matrix,g.visible=this.visible,g},e.prototype.reset=function(){this.color=16777215,this.alpha=1,this.texture=gg.WHITE,this.matrix=null,this.visible=!1},e.prototype.destroy=function(){this.texture=null,this.matrix=null},e}();/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -760,7 +760,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var YM=function(e,g){return YM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},YM(e,g)};function EU(e,g){YM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}function Dee(e,g){var I,i;g===void 0&&(g=!1);var n=e.length;if(!(n<6)){for(var C=0,r=0,o=e[n-2],a=e[n-1];r0||g&&C<=0)for(var l=n/2,r=l+l%2;r=6){Dee(I,!1);for(var r=[],o=0;o=0&&o>=0&&n>=0&&C>=0)){g.length=0;return}var u=Math.ceil(2.3*Math.sqrt(r+o)),d=u*8+(n?4:0)+(C?4:0);if(g.length=d,d!==0){if(u===0){g.length=8,g[0]=g[6]=I+n,g[1]=g[3]=i+C,g[2]=g[4]=I-n,g[5]=g[7]=i-C;return}var h=0,m=u*4+(n?2:0)+2,f=m,b=d;{var p=n+r,y=C,Z=I+p,B=I-p,G=i+y;if(g[h++]=Z,g[h++]=G,g[--m]=G,g[--m]=B,C){var v=i-y;g[f++]=B,g[f++]=v,g[--b]=v,g[--b]=Z}}for(var w=1;wl&&(l+=Math.PI*2);var c=A,u=l-A,d=Math.abs(u),h=Math.sqrt(a*a+s*s),m=(15*d*Math.sqrt(h)/Math.PI>>0)+1,f=u/m;if(c+=f,o){r.push(e,g),r.push(I,i);for(var b=1,p=c;b=0&&(C.join===za.ROUND?d+=Bu(Z,B,Z-w*H,B-R*H,Z-S*H,B-X*H,c,!1)+4:d+=2,c.push(Z-S*Y,B-X*Y),c.push(Z+S*H,B+X*H));continue}var te=(-w+p)*(-R+B)-(-w+Z)*(-R+y),Q=(-S+G)*(-X+B)-(-S+Z)*(-X+v),ie=(x*Q-P*te)/$,he=(ge*te-J*Q)/$,ne=(ie-Z)*(ie-Z)+(he-B)*(he-B),be=Z+(ie-Z)*H,pe=B+(he-B)*H,ve=Z-(ie-Z)*Y,We=B-(he-B)*Y,Be=Math.min(x*x+J*J,P*P+ge*ge),Je=j?H:Y,Pe=Be+Je*Je*f,De=ne<=Pe;De?C.join===za.BEVEL||ne/f>b?(j?(c.push(be,pe),c.push(Z+w*Y,B+R*Y),c.push(be,pe),c.push(Z+S*Y,B+X*Y)):(c.push(Z-w*H,B-R*H),c.push(ve,We),c.push(Z-S*H,B-X*H),c.push(ve,We)),d+=2):C.join===za.ROUND?j?(c.push(be,pe),c.push(Z+w*Y,B+R*Y),d+=Bu(Z,B,Z+w*Y,B+R*Y,Z+S*Y,B+X*Y,c,!0)+4,c.push(be,pe),c.push(Z+S*Y,B+X*Y)):(c.push(Z-w*H,B-R*H),c.push(ve,We),d+=Bu(Z,B,Z-w*H,B-R*H,Z-S*H,B-X*H,c,!1)+4,c.push(Z-S*H,B-X*H),c.push(ve,We)):(c.push(be,pe),c.push(ve,We)):(c.push(Z-w*H,B-R*H),c.push(Z+w*Y,B+R*Y),C.join===za.ROUND?j?d+=Bu(Z,B,Z+w*Y,B+R*Y,Z+S*Y,B+X*Y,c,!0)+2:d+=Bu(Z,B,Z-w*H,B-R*H,Z-S*H,B-X*H,c,!1)+2:C.join===za.MITER&&ne/f<=b&&(j?(c.push(ve,We),c.push(ve,We)):(c.push(be,pe),c.push(be,pe)),d+=2),c.push(Z-S*H,B-X*H),c.push(Z+S*Y,B+X*Y),d+=2)}p=i[(u-2)*2],y=i[(u-2)*2+1],Z=i[(u-1)*2],B=i[(u-1)*2+1],w=-(y-B),R=p-Z,W=Math.sqrt(w*w+R*R),w/=W,R/=W,w*=m,R*=m,c.push(Z-w*H,B-R*H),c.push(Z+w*Y,B+R*Y),a||(C.cap===us.ROUND?d+=Bu(Z-w*(H-Y)*.5,B-R*(H-Y)*.5,Z-w*H,B-R*H,Z+w*Y,B+R*Y,c,!1)+2:C.cap===us.SQUARE&&(d+=xee(Z,B,w,R,H,Y,!1,c)));for(var Qe=g.indices,_e=cb.epsilon*cb.epsilon,K=h;Kc*s}},e.arc=function(g,I,i,n,C,r,o,a,s){for(var A=o-r,l=cb._segmentsCount(Math.abs(A)*C,Math.ceil(Math.abs(A)/dB)*40),c=A/(l*2),u=c*2,d=Math.cos(c),h=Math.sin(c),m=l-1,f=m%1/m,b=0;b<=m;++b){var p=b+f*b,y=c+r+u*p,Z=Math.cos(y),B=-Math.sin(y);s.push((d*Z+h*B)*C+i,(d*-B+h*Z)*C+n)}},e}(),rpe=function(){function e(){}return e.curveLength=function(g,I,i,n,C,r,o,a){for(var s=10,A=0,l=0,c=0,u=0,d=0,h=0,m=0,f=0,b=0,p=0,y=0,Z=g,B=I,G=1;G<=s;++G)l=G/s,c=l*l,u=c*l,d=1-l,h=d*d,m=h*d,f=m*g+3*h*l*i+3*d*c*C+u*o,b=m*I+3*h*l*n+3*d*c*r+u*a,p=Z-f,y=B-b,Z=f,B=b,A+=Math.sqrt(p*p+y*y);return A},e.curveTo=function(g,I,i,n,C,r,o){var a=o[o.length-2],s=o[o.length-1];o.length-=2;var A=cb._segmentsCount(e.curveLength(a,s,g,I,i,n,C,r)),l=0,c=0,u=0,d=0,h=0;o.push(a,s);for(var m=1,f=0;m<=A;++m)f=m/A,l=1-f,c=l*l,u=c*l,d=f*f,h=d*f,o.push(u*a+3*c*f*g+3*l*d*i+h*C,u*s+3*c*f*I+3*l*d*n+h*r)},e}(),ope=function(){function e(){}return e.curveLength=function(g,I,i,n,C,r){var o=g-2*i+C,a=I-2*n+r,s=2*i-2*g,A=2*n-2*I,l=4*(o*o+a*a),c=4*(o*s+a*A),u=s*s+A*A,d=2*Math.sqrt(l+c+u),h=Math.sqrt(l),m=2*l*h,f=2*Math.sqrt(u),b=c/h;return(m*d+h*c*(d-f)+(4*u*l-c*c)*Math.log((2*h+b+d)/(b+f)))/(4*m)},e.curveTo=function(g,I,i,n,C){for(var r=C[C.length-2],o=C[C.length-1],a=cb._segmentsCount(e.curveLength(r,o,g,I,i,n)),s=0,A=0,l=1;l<=a;++l){var c=l/a;s=r+(g-r)*c,A=o+(I-o)*c,C.push(s+(g+(i-g)*c-s)*c,A+(I+(n-I)*c-A)*c)}},e}(),ape=function(){function e(){this.reset()}return e.prototype.begin=function(g,I,i){this.reset(),this.style=g,this.start=I,this.attribStart=i},e.prototype.end=function(g,I){this.attribSize=I-this.attribStart,this.size=g-this.start},e.prototype.reset=function(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0},e}(),Su,T1=(Su={},Su[Xi.POLY]=MU,Su[Xi.CIRC]=bB,Su[Xi.ELIP]=bB,Su[Xi.RECT]=npe,Su[Xi.RREC]=Cpe,Su),DM=[],KZ=[],xM=function(){function e(g,I,i,n){I===void 0&&(I=null),i===void 0&&(i=null),n===void 0&&(n=null),this.points=[],this.holes=[],this.shape=g,this.lineStyle=i,this.fillStyle=I,this.matrix=n,this.type=g.type}return e.prototype.clone=function(){return new e(this.shape,this.fillStyle,this.lineStyle,this.matrix)},e.prototype.destroy=function(){this.shape=null,this.holes.length=0,this.holes=null,this.points.length=0,this.points=null,this.lineStyle=null,this.fillStyle=null},e}(),Hm=new aI,Ape=function(e){EU(g,e);function g(){var I=e.call(this)||this;return I.closePointEps=1e-4,I.boundsPadding=0,I.uvsFloat32=null,I.indicesUint16=null,I.batchable=!1,I.points=[],I.colors=[],I.uvs=[],I.indices=[],I.textureIds=[],I.graphicsData=[],I.drawCalls=[],I.batchDirty=-1,I.batches=[],I.dirty=0,I.cacheDirty=-1,I.clearDirty=0,I.shapeIndex=0,I._bounds=new hB,I.boundsDirty=-1,I}return Object.defineProperty(g.prototype,"bounds",{get:function(){return this.updateBatches(),this.boundsDirty!==this.dirty&&(this.boundsDirty=this.dirty,this.calculateBounds()),this._bounds},enumerable:!1,configurable:!0}),g.prototype.invalidate=function(){this.boundsDirty=-1,this.dirty++,this.batchDirty++,this.shapeIndex=0,this.points.length=0,this.colors.length=0,this.uvs.length=0,this.indices.length=0,this.textureIds.length=0;for(var I=0;I0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this},g.prototype.drawShape=function(I,i,n,C){i===void 0&&(i=null),n===void 0&&(n=null),C===void 0&&(C=null);var r=new xM(I,i,n,C);return this.graphicsData.push(r),this.dirty++,this},g.prototype.drawHole=function(I,i){if(i===void 0&&(i=null),!this.graphicsData.length)return null;var n=new xM(I,null,null,i),C=this.graphicsData[this.graphicsData.length-1];return n.lineStyle=C.lineStyle,C.holes.push(n),this.dirty++,this},g.prototype.destroy=function(){e.prototype.destroy.call(this);for(var I=0;I0&&(n=this.batches[this.batches.length-1],C=n.style);for(var r=this.shapeIndex;r65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&p===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=p?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}},g.prototype._compareStyles=function(I,i){return!(!I||!i||I.texture.baseTexture!==i.texture.baseTexture||I.color+I.alpha!==i.color+i.alpha||!!I.native!=!!i.native)},g.prototype.validateBatching=function(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(var I=0,i=this.graphicsData.length;I65535*2)return!1;for(var I=this.batches,i=0;i0&&(r=KZ.pop(),r||(r=new v9,r.texArray=new B9),this.drawCalls.push(r)),r.start=c,r.size=0,r.texArray.count=0,r.type=l),m.touched=1,m._batchEnabled=I,m._batchLocation=o,m.wrapMode=Ia.REPEAT,r.texArray.elements[r.texArray.count++]=m,o++)),r.size+=u.size,c+=u.size,s=m._batchLocation,this.addColors(n,h.color,h.alpha,u.attribSize,u.attribStart),this.addTextureIds(C,s,u.attribSize,u.attribStart)}vg._globalBatch=I,this.packAttributes()},g.prototype.packAttributes=function(){for(var I=this.points,i=this.uvs,n=this.colors,C=this.textureIds,r=new ArrayBuffer(I.length*3*4),o=new Float32Array(r),a=new Uint32Array(r),s=0,A=0;A>16)+(i&65280)+((i&255)<<16),a=mT(o,n);I.length=Math.max(I.length,r+C);for(var s=0;s0&&I.alpha>0;return i?(I.matrix&&(I.matrix=I.matrix.clone(),I.matrix.invert()),Object.assign(this._lineStyle,{visible:i},I)):this._lineStyle.reset(),this},g.prototype.startPoly=function(){if(this.currentPath){var I=this.currentPath.points,i=this.currentPath.points.length;i>2&&(this.drawShape(this.currentPath),this.currentPath=new DG,this.currentPath.closeStroke=!1,this.currentPath.points.push(I[i-2],I[i-1]))}else this.currentPath=new DG,this.currentPath.closeStroke=!1},g.prototype.finishPoly=function(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)},g.prototype.moveTo=function(I,i){return this.startPoly(),this.currentPath.points[0]=I,this.currentPath.points[1]=i,this},g.prototype.lineTo=function(I,i){this.currentPath||this.moveTo(0,0);var n=this.currentPath.points,C=n[n.length-2],r=n[n.length-1];return(C!==I||r!==i)&&n.push(I,i),this},g.prototype._initCurve=function(I,i){I===void 0&&(I=0),i===void 0&&(i=0),this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[I,i]):this.moveTo(I,i)},g.prototype.quadraticCurveTo=function(I,i,n,C){this._initCurve();var r=this.currentPath.points;return r.length===0&&this.moveTo(0,0),ope.curveTo(I,i,n,C,r),this},g.prototype.bezierCurveTo=function(I,i,n,C,r,o){return this._initCurve(),rpe.curveTo(I,i,n,C,r,o,this.currentPath.points),this},g.prototype.arcTo=function(I,i,n,C,r){this._initCurve(I,i);var o=this.currentPath.points,a=FM.curveTo(I,i,n,C,r,o);if(a){var s=a.cx,A=a.cy,l=a.radius,c=a.startAngle,u=a.endAngle,d=a.anticlockwise;this.arc(s,A,l,c,u,d)}return this},g.prototype.arc=function(I,i,n,C,r,o){if(o===void 0&&(o=!1),C===r)return this;!o&&r<=C?r+=dB:o&&C<=r&&(C+=dB);var a=r-C;if(a===0)return this;var s=I+Math.cos(C)*n,A=i+Math.sin(C)*n,l=this._geometry.closePointEps,c=this.currentPath?this.currentPath.points:null;if(c){var u=Math.abs(c[c.length-2]-s),d=Math.abs(c[c.length-1]-A);u0;return i?(I.matrix&&(I.matrix=I.matrix.clone(),I.matrix.invert()),Object.assign(this._fillStyle,{visible:i},I)):this._fillStyle.reset(),this},g.prototype.endFill=function(){return this.finishPoly(),this._fillStyle.reset(),this},g.prototype.drawRect=function(I,i,n,C){return this.drawShape(new wg(I,i,n,C))},g.prototype.drawRoundedRect=function(I,i,n,C,r){return this.drawShape(new nfe(I,i,n,C,r))},g.prototype.drawCircle=function(I,i,n){return this.drawShape(new Ife(I,i,n))},g.prototype.drawEllipse=function(I,i,n,C){return this.drawShape(new ife(I,i,n,C))},g.prototype.drawPolygon=function(){for(var I=arguments,i=[],n=0;n>16&255)/255*r,o.tint[1]=(C>>8&255)/255*r,o.tint[2]=(C&255)/255*r,o.tint[3]=r,I.shader.bind(i),I.geometry.bind(n,i),I.state.set(this.state);for(var s=0,A=a.length;s>16)+(s&65280)+((s&255)<<16)}}},g.prototype.calculateVertices=function(){var I=this.transform._worldID;if(this._transformID!==I){this._transformID=I;for(var i=this.transform.worldTransform,n=i.a,C=i.b,r=i.c,o=i.d,a=i.tx,s=i.ty,A=this._geometry.points,l=this.vertexData,c=0,u=0;u0||g&&r<=0)for(var l=n/2,C=l+l%2;C=6){zee(i,!1);for(var C=[],o=0;o=0&&o>=0&&n>=0&&r>=0)){g.length=0;return}var u=Math.ceil(2.3*Math.sqrt(C+o)),d=u*8+(n?4:0)+(r?4:0);if(g.length=d,d!==0){if(u===0){g.length=8,g[0]=g[6]=i+n,g[1]=g[3]=I+r,g[2]=g[4]=i-n,g[5]=g[7]=I-r;return}var h=0,m=u*4+(n?2:0)+2,f=m,b=d;{var p=n+C,y=r,Z=i+p,B=i-p,G=I+y;if(g[h++]=Z,g[h++]=G,g[--m]=G,g[--m]=B,r){var v=I-y;g[f++]=B,g[f++]=v,g[--b]=v,g[--b]=Z}}for(var w=1;wl&&(l+=Math.PI*2);var c=A,u=l-A,d=Math.abs(u),h=Math.sqrt(a*a+s*s),m=(15*d*Math.sqrt(h)/Math.PI>>0)+1,f=u/m;if(c+=f,o){C.push(e,g),C.push(i,I);for(var b=1,p=c;b=0&&(r.join===Ja.ROUND?d+=Su(Z,B,Z-w*H,B-V*H,Z-S*H,B-X*H,c,!1)+4:d+=2,c.push(Z-S*k,B-X*k),c.push(Z+S*H,B+X*H));continue}var ge=(-w+p)*(-V+B)-(-w+Z)*(-V+y),Q=(-S+G)*(-X+B)-(-S+Z)*(-X+v),Ie=(D*Q-P*ge)/$,he=(te*ge-J*Q)/$,ne=(Ie-Z)*(Ie-Z)+(he-B)*(he-B),be=Z+(Ie-Z)*H,pe=B+(he-B)*H,ve=Z-(Ie-Z)*k,We=B-(he-B)*k,Be=Math.min(D*D+J*J,P*P+te*te),Je=j?H:k,Pe=Be+Je*Je*f,De=ne<=Pe;De?r.join===Ja.BEVEL||ne/f>b?(j?(c.push(be,pe),c.push(Z+w*k,B+V*k),c.push(be,pe),c.push(Z+S*k,B+X*k)):(c.push(Z-w*H,B-V*H),c.push(ve,We),c.push(Z-S*H,B-X*H),c.push(ve,We)),d+=2):r.join===Ja.ROUND?j?(c.push(be,pe),c.push(Z+w*k,B+V*k),d+=Su(Z,B,Z+w*k,B+V*k,Z+S*k,B+X*k,c,!0)+4,c.push(be,pe),c.push(Z+S*k,B+X*k)):(c.push(Z-w*H,B-V*H),c.push(ve,We),d+=Su(Z,B,Z-w*H,B-V*H,Z-S*H,B-X*H,c,!1)+4,c.push(Z-S*H,B-X*H),c.push(ve,We)):(c.push(be,pe),c.push(ve,We)):(c.push(Z-w*H,B-V*H),c.push(Z+w*k,B+V*k),r.join===Ja.ROUND?j?d+=Su(Z,B,Z+w*k,B+V*k,Z+S*k,B+X*k,c,!0)+2:d+=Su(Z,B,Z-w*H,B-V*H,Z-S*H,B-X*H,c,!1)+2:r.join===Ja.MITER&&ne/f<=b&&(j?(c.push(ve,We),c.push(ve,We)):(c.push(be,pe),c.push(be,pe)),d+=2),c.push(Z-S*H,B-X*H),c.push(Z+S*k,B+X*k),d+=2)}p=I[(u-2)*2],y=I[(u-2)*2+1],Z=I[(u-1)*2],B=I[(u-1)*2+1],w=-(y-B),V=p-Z,W=Math.sqrt(w*w+V*V),w/=W,V/=W,w*=m,V*=m,c.push(Z-w*H,B-V*H),c.push(Z+w*k,B+V*k),a||(r.cap===ds.ROUND?d+=Su(Z-w*(H-k)*.5,B-V*(H-k)*.5,Z-w*H,B-V*H,Z+w*k,B+V*k,c,!1)+2:r.cap===ds.SQUARE&&(d+=Pee(Z,B,w,V,H,k,!1,c)));for(var Qe=g.indices,_e=db.epsilon*db.epsilon,K=h;Kc*s}},e.arc=function(g,i,I,n,r,C,o,a,s){for(var A=o-C,l=db._segmentsCount(Math.abs(A)*r,Math.ceil(Math.abs(A)/mB)*40),c=A/(l*2),u=c*2,d=Math.cos(c),h=Math.sin(c),m=l-1,f=m%1/m,b=0;b<=m;++b){var p=b+f*b,y=c+C+u*p,Z=Math.cos(y),B=-Math.sin(y);s.push((d*Z+h*B)*r+I,(d*-B+h*Z)*r+n)}},e}(),upe=function(){function e(){}return e.curveLength=function(g,i,I,n,r,C,o,a){for(var s=10,A=0,l=0,c=0,u=0,d=0,h=0,m=0,f=0,b=0,p=0,y=0,Z=g,B=i,G=1;G<=s;++G)l=G/s,c=l*l,u=c*l,d=1-l,h=d*d,m=h*d,f=m*g+3*h*l*I+3*d*c*r+u*o,b=m*i+3*h*l*n+3*d*c*C+u*a,p=Z-f,y=B-b,Z=f,B=b,A+=Math.sqrt(p*p+y*y);return A},e.curveTo=function(g,i,I,n,r,C,o){var a=o[o.length-2],s=o[o.length-1];o.length-=2;var A=db._segmentsCount(e.curveLength(a,s,g,i,I,n,r,C)),l=0,c=0,u=0,d=0,h=0;o.push(a,s);for(var m=1,f=0;m<=A;++m)f=m/A,l=1-f,c=l*l,u=c*l,d=f*f,h=d*f,o.push(u*a+3*c*f*g+3*l*d*I+h*r,u*s+3*c*f*i+3*l*d*n+h*C)},e}(),dpe=function(){function e(){}return e.curveLength=function(g,i,I,n,r,C){var o=g-2*I+r,a=i-2*n+C,s=2*I-2*g,A=2*n-2*i,l=4*(o*o+a*a),c=4*(o*s+a*A),u=s*s+A*A,d=2*Math.sqrt(l+c+u),h=Math.sqrt(l),m=2*l*h,f=2*Math.sqrt(u),b=c/h;return(m*d+h*c*(d-f)+(4*u*l-c*c)*Math.log((2*h+b+d)/(b+f)))/(4*m)},e.curveTo=function(g,i,I,n,r){for(var C=r[r.length-2],o=r[r.length-1],a=db._segmentsCount(e.curveLength(C,o,g,i,I,n)),s=0,A=0,l=1;l<=a;++l){var c=l/a;s=C+(g-C)*c,A=o+(i-o)*c,r.push(s+(g+(I-g)*c-s)*c,A+(i+(n-i)*c-A)*c)}},e}(),hpe=function(){function e(){this.reset()}return e.prototype.begin=function(g,i,I){this.reset(),this.style=g,this.start=i,this.attribStart=I},e.prototype.end=function(g,i){this.attribSize=i-this.attribStart,this.size=g-this.start},e.prototype.reset=function(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0},e}(),wu,Y1=(wu={},wu[XI.POLY]=LU,wu[XI.CIRC]=ZB,wu[XI.ELIP]=ZB,wu[XI.RECT]=lpe,wu[XI.RREC]=cpe,wu),JM=[],xZ=[],OM=function(){function e(g,i,I,n){i===void 0&&(i=null),I===void 0&&(I=null),n===void 0&&(n=null),this.points=[],this.holes=[],this.shape=g,this.lineStyle=I,this.fillStyle=i,this.matrix=n,this.type=g.type}return e.prototype.clone=function(){return new e(this.shape,this.fillStyle,this.lineStyle,this.matrix)},e.prototype.destroy=function(){this.shape=null,this.holes.length=0,this.holes=null,this.points.length=0,this.points=null,this.lineStyle=null,this.fillStyle=null},e}(),Tm=new Ai,mpe=function(e){_U(g,e);function g(){var i=e.call(this)||this;return i.closePointEps=1e-4,i.boundsPadding=0,i.uvsFloat32=null,i.indicesUint16=null,i.batchable=!1,i.points=[],i.colors=[],i.uvs=[],i.indices=[],i.textureIds=[],i.graphicsData=[],i.drawCalls=[],i.batchDirty=-1,i.batches=[],i.dirty=0,i.cacheDirty=-1,i.clearDirty=0,i.shapeIndex=0,i._bounds=new fB,i.boundsDirty=-1,i}return Object.defineProperty(g.prototype,"bounds",{get:function(){return this.updateBatches(),this.boundsDirty!==this.dirty&&(this.boundsDirty=this.dirty,this.calculateBounds()),this._bounds},enumerable:!1,configurable:!0}),g.prototype.invalidate=function(){this.boundsDirty=-1,this.dirty++,this.batchDirty++,this.shapeIndex=0,this.points.length=0,this.colors.length=0,this.uvs.length=0,this.indices.length=0,this.textureIds.length=0;for(var i=0;i0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this},g.prototype.drawShape=function(i,I,n,r){I===void 0&&(I=null),n===void 0&&(n=null),r===void 0&&(r=null);var C=new OM(i,I,n,r);return this.graphicsData.push(C),this.dirty++,this},g.prototype.drawHole=function(i,I){if(I===void 0&&(I=null),!this.graphicsData.length)return null;var n=new OM(i,null,null,I),r=this.graphicsData[this.graphicsData.length-1];return n.lineStyle=r.lineStyle,r.holes.push(n),this.dirty++,this},g.prototype.destroy=function(){e.prototype.destroy.call(this);for(var i=0;i0&&(n=this.batches[this.batches.length-1],r=n.style);for(var C=this.shapeIndex;C65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&p===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=p?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}},g.prototype._compareStyles=function(i,I){return!(!i||!I||i.texture.baseTexture!==I.texture.baseTexture||i.color+i.alpha!==I.color+I.alpha||!!i.native!=!!I.native)},g.prototype.validateBatching=function(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(var i=0,I=this.graphicsData.length;i65535*2)return!1;for(var i=this.batches,I=0;I0&&(C=xZ.pop(),C||(C=new w9,C.texArray=new R9),this.drawCalls.push(C)),C.start=c,C.size=0,C.texArray.count=0,C.type=l),m.touched=1,m._batchEnabled=i,m._batchLocation=o,m.wrapMode=ra.REPEAT,C.texArray.elements[C.texArray.count++]=m,o++)),C.size+=u.size,c+=u.size,s=m._batchLocation,this.addColors(n,h.color,h.alpha,u.attribSize,u.attribStart),this.addTextureIds(r,s,u.attribSize,u.attribStart)}vg._globalBatch=i,this.packAttributes()},g.prototype.packAttributes=function(){for(var i=this.points,I=this.uvs,n=this.colors,r=this.textureIds,C=new ArrayBuffer(i.length*3*4),o=new Float32Array(C),a=new Uint32Array(C),s=0,A=0;A>16)+(I&65280)+((I&255)<<16),a=GT(o,n);i.length=Math.max(i.length,C+r);for(var s=0;s0&&i.alpha>0;return I?(i.matrix&&(i.matrix=i.matrix.clone(),i.matrix.invert()),Object.assign(this._lineStyle,{visible:I},i)):this._lineStyle.reset(),this},g.prototype.startPoly=function(){if(this.currentPath){var i=this.currentPath.points,I=this.currentPath.points.length;I>2&&(this.drawShape(this.currentPath),this.currentPath=new MG,this.currentPath.closeStroke=!1,this.currentPath.points.push(i[I-2],i[I-1]))}else this.currentPath=new MG,this.currentPath.closeStroke=!1},g.prototype.finishPoly=function(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)},g.prototype.moveTo=function(i,I){return this.startPoly(),this.currentPath.points[0]=i,this.currentPath.points[1]=I,this},g.prototype.lineTo=function(i,I){this.currentPath||this.moveTo(0,0);var n=this.currentPath.points,r=n[n.length-2],C=n[n.length-1];return(r!==i||C!==I)&&n.push(i,I),this},g.prototype._initCurve=function(i,I){i===void 0&&(i=0),I===void 0&&(I=0),this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[i,I]):this.moveTo(i,I)},g.prototype.quadraticCurveTo=function(i,I,n,r){this._initCurve();var C=this.currentPath.points;return C.length===0&&this.moveTo(0,0),dpe.curveTo(i,I,n,r,C),this},g.prototype.bezierCurveTo=function(i,I,n,r,C,o){return this._initCurve(),upe.curveTo(i,I,n,r,C,o,this.currentPath.points),this},g.prototype.arcTo=function(i,I,n,r,C){this._initCurve(i,I);var o=this.currentPath.points,a=PM.curveTo(i,I,n,r,C,o);if(a){var s=a.cx,A=a.cy,l=a.radius,c=a.startAngle,u=a.endAngle,d=a.anticlockwise;this.arc(s,A,l,c,u,d)}return this},g.prototype.arc=function(i,I,n,r,C,o){if(o===void 0&&(o=!1),r===C)return this;!o&&C<=r?C+=mB:o&&r<=C&&(r+=mB);var a=C-r;if(a===0)return this;var s=i+Math.cos(r)*n,A=I+Math.sin(r)*n,l=this._geometry.closePointEps,c=this.currentPath?this.currentPath.points:null;if(c){var u=Math.abs(c[c.length-2]-s),d=Math.abs(c[c.length-1]-A);u0;return I?(i.matrix&&(i.matrix=i.matrix.clone(),i.matrix.invert()),Object.assign(this._fillStyle,{visible:I},i)):this._fillStyle.reset(),this},g.prototype.endFill=function(){return this.finishPoly(),this._fillStyle.reset(),this},g.prototype.drawRect=function(i,I,n,r){return this.drawShape(new wg(i,I,n,r))},g.prototype.drawRoundedRect=function(i,I,n,r,C){return this.drawShape(new lfe(i,I,n,r,C))},g.prototype.drawCircle=function(i,I,n){return this.drawShape(new Afe(i,I,n))},g.prototype.drawEllipse=function(i,I,n,r){return this.drawShape(new sfe(i,I,n,r))},g.prototype.drawPolygon=function(){for(var i=arguments,I=[],n=0;n>16&255)/255*C,o.tint[1]=(r>>8&255)/255*C,o.tint[2]=(r&255)/255*C,o.tint[3]=C,i.shader.bind(I),i.geometry.bind(n,I),i.state.set(this.state);for(var s=0,A=a.length;s>16)+(s&65280)+((s&255)<<16)}}},g.prototype.calculateVertices=function(){var i=this.transform._worldID;if(this._transformID!==i){this._transformID=i;for(var I=this.transform.worldTransform,n=I.a,r=I.b,C=I.c,o=I.d,a=I.tx,s=I.ty,A=this._geometry.points,l=this.vertexData,c=0,u=0;u=C&&Ky.x=r&&Ky.y>16)+(I&65280)+((I&255)<<16)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"texture",{get:function(){return this._texture},set:function(I){this._texture!==I&&(this._texture&&this._texture.off("update",this._onTextureUpdate,this),this._texture=I||Ig.EMPTY,this._cachedTint=16777215,this._textureID=-1,this._textureTrimmedID=-1,I&&(I.baseTexture.valid?this._onTextureUpdate():I.once("update",this._onTextureUpdate,this)))},enumerable:!1,configurable:!0}),g}(la);/*! +***************************************************************************** */var _M=function(e,g){return _M=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)I.hasOwnProperty(n)&&(i[n]=I[n])},_M(e,g)};function VPe(e,g){_M(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}var Dy=new Ai,WPe=new Uint16Array([0,1,2,0,2,3]),X0=function(e){VPe(g,e);function g(i){var I=e.call(this)||this;return I._anchor=new sd(I._onAnchorUpdate,I,i?i.defaultAnchor.x:0,i?i.defaultAnchor.y:0),I._texture=null,I._width=0,I._height=0,I._tint=null,I._tintRGB=null,I.tint=16777215,I.blendMode=Jt.NORMAL,I._cachedTint=16777215,I.uvs=null,I.texture=i||gg.EMPTY,I.vertexData=new Float32Array(8),I.vertexTrimmedData=null,I._transformID=-1,I._textureID=-1,I._transformTrimmedID=-1,I._textureTrimmedID=-1,I.indices=WPe,I.pluginName="batch",I.isSprite=!0,I._roundPixels=Gt.ROUND_PIXELS,I}return g.prototype._onTextureUpdate=function(){this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this._width&&(this.scale.x=Ad(this.scale.x)*this._width/this._texture.orig.width),this._height&&(this.scale.y=Ad(this.scale.y)*this._height/this._texture.orig.height)},g.prototype._onAnchorUpdate=function(){this._transformID=-1,this._transformTrimmedID=-1},g.prototype.calculateVertices=function(){var i=this._texture;if(!(this._transformID===this.transform._worldID&&this._textureID===i._updateID)){this._textureID!==i._updateID&&(this.uvs=this._texture._uvs.uvsFloat32),this._transformID=this.transform._worldID,this._textureID=i._updateID;var I=this.transform.worldTransform,n=I.a,r=I.b,C=I.c,o=I.d,a=I.tx,s=I.ty,A=this.vertexData,l=i.trim,c=i.orig,u=this._anchor,d=0,h=0,m=0,f=0;if(l?(h=l.x-u._x*c.width,d=h+l.width,f=l.y-u._y*c.height,m=f+l.height):(h=-u._x*c.width,d=h+c.width,f=-u._y*c.height,m=f+c.height),A[0]=n*h+C*f+a,A[1]=o*f+r*h+s,A[2]=n*d+C*f+a,A[3]=o*f+r*d+s,A[4]=n*d+C*m+a,A[5]=o*m+r*d+s,A[6]=n*h+C*m+a,A[7]=o*m+r*h+s,this._roundPixels)for(var b=Gt.RESOLUTION,p=0;p=r&&Dy.x=C&&Dy.y>16)+(i&65280)+((i&255)<<16)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"texture",{get:function(){return this._texture},set:function(i){this._texture!==i&&(this._texture&&this._texture.off("update",this._onTextureUpdate,this),this._texture=i||gg.EMPTY,this._cachedTint=16777215,this._textureID=-1,this._textureTrimmedID=-1,i&&(i.baseTexture.valid?this._onTextureUpdate():i.once("update",this._onTextureUpdate,this)))},enumerable:!1,configurable:!0}),g}(da);/*! * @pixi/text - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -798,8 +798,8 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var MM=function(e,g){return MM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},MM(e,g)};function GPe(e,g){MM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var ub;(function(e){e[e.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",e[e.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL"})(ub||(ub={}));var e5={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:ub.LINEAR_VERTICAL,fillGradientStops:[],fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",letterSpacing:0,lineHeight:0,lineJoin:"miter",miterLimit:10,padding:0,stroke:"black",strokeThickness:0,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100,leading:0},vPe=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],Qd=function(){function e(g){this.styleID=0,this.reset(),g5(this,g,g)}return e.prototype.clone=function(){var g={};return g5(g,this,e5),new e(g)},e.prototype.reset=function(){g5(this,e5,e5)},Object.defineProperty(e.prototype,"align",{get:function(){return this._align},set:function(g){this._align!==g&&(this._align=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"breakWords",{get:function(){return this._breakWords},set:function(g){this._breakWords!==g&&(this._breakWords=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dropShadow",{get:function(){return this._dropShadow},set:function(g){this._dropShadow!==g&&(this._dropShadow=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dropShadowAlpha",{get:function(){return this._dropShadowAlpha},set:function(g){this._dropShadowAlpha!==g&&(this._dropShadowAlpha=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dropShadowAngle",{get:function(){return this._dropShadowAngle},set:function(g){this._dropShadowAngle!==g&&(this._dropShadowAngle=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dropShadowBlur",{get:function(){return this._dropShadowBlur},set:function(g){this._dropShadowBlur!==g&&(this._dropShadowBlur=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dropShadowColor",{get:function(){return this._dropShadowColor},set:function(g){var I=t5(g);this._dropShadowColor!==I&&(this._dropShadowColor=I,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dropShadowDistance",{get:function(){return this._dropShadowDistance},set:function(g){this._dropShadowDistance!==g&&(this._dropShadowDistance=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fill",{get:function(){return this._fill},set:function(g){var I=t5(g);this._fill!==I&&(this._fill=I,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fillGradientType",{get:function(){return this._fillGradientType},set:function(g){this._fillGradientType!==g&&(this._fillGradientType=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fillGradientStops",{get:function(){return this._fillGradientStops},set:function(g){BPe(this._fillGradientStops,g)||(this._fillGradientStops=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontFamily",{get:function(){return this._fontFamily},set:function(g){this.fontFamily!==g&&(this._fontFamily=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontSize",{get:function(){return this._fontSize},set:function(g){this._fontSize!==g&&(this._fontSize=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontStyle",{get:function(){return this._fontStyle},set:function(g){this._fontStyle!==g&&(this._fontStyle=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontVariant",{get:function(){return this._fontVariant},set:function(g){this._fontVariant!==g&&(this._fontVariant=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontWeight",{get:function(){return this._fontWeight},set:function(g){this._fontWeight!==g&&(this._fontWeight=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"letterSpacing",{get:function(){return this._letterSpacing},set:function(g){this._letterSpacing!==g&&(this._letterSpacing=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lineHeight",{get:function(){return this._lineHeight},set:function(g){this._lineHeight!==g&&(this._lineHeight=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leading",{get:function(){return this._leading},set:function(g){this._leading!==g&&(this._leading=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lineJoin",{get:function(){return this._lineJoin},set:function(g){this._lineJoin!==g&&(this._lineJoin=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"miterLimit",{get:function(){return this._miterLimit},set:function(g){this._miterLimit!==g&&(this._miterLimit=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"padding",{get:function(){return this._padding},set:function(g){this._padding!==g&&(this._padding=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"stroke",{get:function(){return this._stroke},set:function(g){var I=t5(g);this._stroke!==I&&(this._stroke=I,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"strokeThickness",{get:function(){return this._strokeThickness},set:function(g){this._strokeThickness!==g&&(this._strokeThickness=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textBaseline",{get:function(){return this._textBaseline},set:function(g){this._textBaseline!==g&&(this._textBaseline=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"trim",{get:function(){return this._trim},set:function(g){this._trim!==g&&(this._trim=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"whiteSpace",{get:function(){return this._whiteSpace},set:function(g){this._whiteSpace!==g&&(this._whiteSpace=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wordWrap",{get:function(){return this._wordWrap},set:function(g){this._wordWrap!==g&&(this._wordWrap=g,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wordWrapWidth",{get:function(){return this._wordWrapWidth},set:function(g){this._wordWrapWidth!==g&&(this._wordWrapWidth=g,this.styleID++)},enumerable:!1,configurable:!0}),e.prototype.toFontString=function(){var g=typeof this.fontSize=="number"?this.fontSize+"px":this.fontSize,I=this.fontFamily;Array.isArray(this.fontFamily)||(I=this.fontFamily.split(","));for(var i=I.length-1;i>=0;i--){var n=I[i].trim();!/([\"\'])[^\'\"]+\1/.test(n)&&vPe.indexOf(n)<0&&(n='"'+n+'"'),I[i]=n}return this.fontStyle+" "+this.fontVariant+" "+this.fontWeight+" "+g+" "+I.join(",")},e}();function Eee(e){return typeof e=="number"?iU(e):(typeof e=="string"&&e.indexOf("0x")===0&&(e=e.replace("0x","#")),e)}function t5(e){if(Array.isArray(e)){for(var g=0;gd)if(r!==""&&(o+=e.addLine(r),r="",C=0),e.canBreakWords(f,I.breakWords))for(var Z=e.wordWrapSplit(f),B=0;Bd&&(o+=e.addLine(r),u=!1,r="",C=0),r+=G,C+=S}else{r.length>0&&(o+=e.addLine(r),r="",C=0);var X=m===h.length-1;o+=e.addLine(f,!X),u=!1,r="",C=0}else y+C>d&&(u=!1,o+=e.addLine(r),r="",C=0),(r.length>0||!e.isBreakingSpace(f)||u)&&(r+=f,C+=y)}return o+=e.addLine(r,!1),o},e.addLine=function(g,I){return I===void 0&&(I=!0),g=e.trimRight(g),g=I?g+` -`:g,g},e.getFromCache=function(g,I,i,n){var C=i[g];if(typeof C!="number"){var r=g.length*I;C=n.measureText(g).width+r,i[g]=C}return C},e.collapseSpaces=function(g){return g==="normal"||g==="pre-line"},e.collapseNewlines=function(g){return g==="normal"},e.trimRight=function(g){if(typeof g!="string")return"";for(var I=g.length-1;I>=0;I--){var i=g[I];if(!e.isBreakingSpace(i))break;g=g.slice(0,-1)}return g},e.isNewline=function(g){return typeof g!="string"?!1:e._newlines.indexOf(g.charCodeAt(0))>=0},e.isBreakingSpace=function(g,I){return typeof g!="string"?!1:e._breakingSpaces.indexOf(g.charCodeAt(0))>=0},e.tokenize=function(g){var I=[],i="";if(typeof g!="string")return I;for(var n=0;no;--c){for(var h=0;h0&&m>f&&(b=(f+m)/2);var p=f+h,y=n.lineHeight*(d+1),Z=p;d+1=0;I--){var n=i[I].trim();!/([\"\'])[^\'\"]+\1/.test(n)&&HPe.indexOf(n)<0&&(n='"'+n+'"'),i[I]=n}return this.fontStyle+" "+this.fontVariant+" "+this.fontWeight+" "+g+" "+i.join(",")},e}();function Jee(e){return typeof e=="number"?AU(e):(typeof e=="string"&&e.indexOf("0x")===0&&(e=e.replace("0x","#")),e)}function C5(e){if(Array.isArray(e)){for(var g=0;gd)if(C!==""&&(o+=e.addLine(C),C="",r=0),e.canBreakWords(f,i.breakWords))for(var Z=e.wordWrapSplit(f),B=0;Bd&&(o+=e.addLine(C),u=!1,C="",r=0),C+=G,r+=S}else{C.length>0&&(o+=e.addLine(C),C="",r=0);var X=m===h.length-1;o+=e.addLine(f,!X),u=!1,C="",r=0}else y+r>d&&(u=!1,o+=e.addLine(C),C="",r=0),(C.length>0||!e.isBreakingSpace(f)||u)&&(C+=f,r+=y)}return o+=e.addLine(C,!1),o},e.addLine=function(g,i){return i===void 0&&(i=!0),g=e.trimRight(g),g=i?g+` +`:g,g},e.getFromCache=function(g,i,I,n){var r=I[g];if(typeof r!="number"){var C=g.length*i;r=n.measureText(g).width+C,I[g]=r}return r},e.collapseSpaces=function(g){return g==="normal"||g==="pre-line"},e.collapseNewlines=function(g){return g==="normal"},e.trimRight=function(g){if(typeof g!="string")return"";for(var i=g.length-1;i>=0;i--){var I=g[i];if(!e.isBreakingSpace(I))break;g=g.slice(0,-1)}return g},e.isNewline=function(g){return typeof g!="string"?!1:e._newlines.indexOf(g.charCodeAt(0))>=0},e.isBreakingSpace=function(g,i){return typeof g!="string"?!1:e._breakingSpaces.indexOf(g.charCodeAt(0))>=0},e.tokenize=function(g){var i=[],I="";if(typeof g!="string")return i;for(var n=0;no;--c){for(var h=0;h0&&m>f&&(b=(f+m)/2);var p=f+h,y=n.lineHeight*(d+1),Z=p;d+10},e}();function RPe(e,g){var I=!1;if(e&&e._textures&&e._textures.length){for(var i=0;i=0;I--)this.add(g.children[I]);return this},e.prototype.destroy=function(){this.ticking&&Ui.system.remove(this.tick,this),this.ticking=!1,this.addHooks=null,this.uploadHooks=null,this.renderer=null,this.completes=null,this.queue=null,this.limiter=null,this.uploadHookHelper=null},e}();function upe(e,g){return g instanceof vg?(g._glTextures[e.CONTEXT_UID]||e.texture.bind(g),!0):!1}function kPe(e,g){if(!(g instanceof yB))return!1;var I=g.geometry;g.finishPoly(),I.updateBatches();for(var i=I.batches,n=0;n0},e}();function YPe(e,g){var i=!1;if(e&&e._textures&&e._textures.length){for(var I=0;I=0;i--)this.add(g.children[i]);return this},e.prototype.destroy=function(){this.ticking&&UI.system.remove(this.tick,this),this.ticking=!1,this.addHooks=null,this.uploadHooks=null,this.renderer=null,this.completes=null,this.queue=null,this.limiter=null,this.uploadHookHelper=null},e}();function ype(e,g){return g instanceof vg?(g._glTextures[e.CONTEXT_UID]||e.texture.bind(g),!0):!1}function zPe(e,g){if(!(g instanceof GB))return!1;var i=g.geometry;g.finishPoly(),i.updateBatches();for(var I=i.batches,n=0;n=C&&Fy.x=r&&Fy.y=r&&xy.x=C&&xy.y1?ws.from(EPe,MPe,i):ws.from(Mee,xPe,i)},g.prototype.render=function(I){var i=this.renderer,n=this.quad,C=n.vertices;C[0]=C[6]=I._width*-I.anchor.x,C[1]=C[3]=I._height*-I.anchor.y,C[2]=C[4]=I._width*(1-I.anchor.x),C[5]=C[7]=I._height*(1-I.anchor.y);var r=I.uvRespectAnchor?I.anchor.x:0,o=I.uvRespectAnchor?I.anchor.y:0;C=n.uvs,C[0]=C[6]=-r,C[1]=C[3]=-o,C[2]=C[4]=1-r,C[5]=C[7]=1-o,n.invalidate();var a=I._texture,s=a.baseTexture,A=s.alphaMode>0,l=I.tileTransform.localTransform,c=I.uvMatrix,u=s.isPowerOfTwo&&a.frame.width===s.width&&a.frame.height===s.height;u&&(s._glTextures[i.CONTEXT_UID]?u=s.wrapMode!==Ia.CLAMP:s.wrapMode===Ia.CLAMP&&(s.wrapMode=Ia.REPEAT));var d=u?this.simpleShader:this.shader,h=a.width,m=a.height,f=I._width,b=I._height;MR.set(l.a*h/f,l.b*h/b,l.c*m/f,l.d*m/b,l.tx/f,l.ty/b),MR.invert(),u?MR.prepend(c.mapCoord):(d.uniforms.uMapCoord=c.mapCoord.toArray(!0),d.uniforms.uClampFrame=c.uClampFrame,d.uniforms.uClampOffset=c.uClampOffset),d.uniforms.uTransform=MR.toArray(!0),d.uniforms.uColor=oU(I.tint,I.worldAlpha,d.uniforms.uColor,A),d.uniforms.translationMatrix=I.transform.worldTransform.toArray(!0),d.uniforms.uSampler=a,i.shader.bind(d),i.geometry.bind(n),this.state.blendMode=rU(I.blendMode,A),i.state.set(this.state),i.geometry.draw(this.renderer.gl.TRIANGLES,6,0)},g.extension={name:"tilingSprite",type:Og.RendererPlugin},g}(VS);/*! +`,PR=new GI,Spe=function(e){Bpe(g,e);function g(i){var I=e.call(this,i)||this;return i.runners.contextChange.add(I),I.quad=new SU,I.state=gu.for2d(),I}return g.prototype.contextChange=function(){var i=this.renderer,I={globals:i.globalUniforms};this.simpleShader=Rs.from(Oee,_Pe,I),this.shader=i.context.webGLVersion>1?Rs.from(UPe,QPe,I):Rs.from(Oee,LPe,I)},g.prototype.render=function(i){var I=this.renderer,n=this.quad,r=n.vertices;r[0]=r[6]=i._width*-i.anchor.x,r[1]=r[3]=i._height*-i.anchor.y,r[2]=r[4]=i._width*(1-i.anchor.x),r[5]=r[7]=i._height*(1-i.anchor.y);var C=i.uvRespectAnchor?i.anchor.x:0,o=i.uvRespectAnchor?i.anchor.y:0;r=n.uvs,r[0]=r[6]=-C,r[1]=r[3]=-o,r[2]=r[4]=1-C,r[5]=r[7]=1-o,n.invalidate();var a=i._texture,s=a.baseTexture,A=s.alphaMode>0,l=i.tileTransform.localTransform,c=i.uvMatrix,u=s.isPowerOfTwo&&a.frame.width===s.width&&a.frame.height===s.height;u&&(s._glTextures[I.CONTEXT_UID]?u=s.wrapMode!==ra.CLAMP:s.wrapMode===ra.CLAMP&&(s.wrapMode=ra.REPEAT));var d=u?this.simpleShader:this.shader,h=a.width,m=a.height,f=i._width,b=i._height;PR.set(l.a*h/f,l.b*h/b,l.c*m/f,l.d*m/b,l.tx/f,l.ty/b),PR.invert(),u?PR.prepend(c.mapCoord):(d.uniforms.uMapCoord=c.mapCoord.toArray(!0),d.uniforms.uClampFrame=c.uClampFrame,d.uniforms.uClampOffset=c.uClampOffset),d.uniforms.uTransform=PR.toArray(!0),d.uniforms.uColor=uU(i.tint,i.worldAlpha,d.uniforms.uColor,A),d.uniforms.translationMatrix=i.transform.worldTransform.toArray(!0),d.uniforms.uSampler=a,I.shader.bind(d),I.geometry.bind(n),this.state.blendMode=cU(i.blendMode,A),I.state.set(this.state),I.geometry.draw(this.renderer.gl.TRIANGLES,6,0)},g.extension={name:"tilingSprite",type:_g.RendererPlugin},g}(XS);/*! * @pixi/mesh - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -976,7 +976,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var JM=function(e,g){return JM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},JM(e,g)};function PU(e,g){JM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var bpe=function(){function e(g,I){this.uvBuffer=g,this.uvMatrix=I,this.data=null,this._bufferUpdateId=-1,this._textureUpdateId=-1,this._updateID=0}return e.prototype.update=function(g){if(!(!g&&this._bufferUpdateId===this.uvBuffer._updateID&&this._textureUpdateId===this.uvMatrix._updateID)){this._bufferUpdateId=this.uvBuffer._updateID,this._textureUpdateId=this.uvMatrix._updateID;var I=this.uvBuffer.data;(!this.data||this.data.length!==I.length)&&(this.data=new Float32Array(I.length)),this.uvMatrix.multiplyUvs(I,this.data),this._updateID++}},e}(),I5=new aI,zee=new DG,db=function(e){PU(g,e);function g(I,i,n,C){C===void 0&&(C=_r.TRIANGLES);var r=e.call(this)||this;return r.geometry=I,r.shader=i,r.state=n||tu.for2d(),r.drawMode=C,r.start=0,r.size=0,r.uvs=null,r.indices=null,r.vertexData=new Float32Array(1),r.vertexDirty=-1,r._transformID=-1,r._roundPixels=Gt.ROUND_PIXELS,r.batchUvs=null,r}return Object.defineProperty(g.prototype,"geometry",{get:function(){return this._geometry},set:function(I){this._geometry!==I&&(this._geometry&&(this._geometry.refCount--,this._geometry.refCount===0&&this._geometry.dispose()),this._geometry=I,this._geometry&&this._geometry.refCount++,this.vertexDirty=-1)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"uvBuffer",{get:function(){return this.geometry.buffers[1]},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"verticesBuffer",{get:function(){return this.geometry.buffers[0]},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"material",{get:function(){return this.shader},set:function(I){this.shader=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(I){this.state.blendMode=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(I){this._roundPixels!==I&&(this._transformID=-1),this._roundPixels=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"tint",{get:function(){return"tint"in this.shader?this.shader.tint:null},set:function(I){this.shader.tint=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"texture",{get:function(){return"texture"in this.shader?this.shader.texture:null},set:function(I){this.shader.texture=I},enumerable:!1,configurable:!0}),g.prototype._render=function(I){var i=this.geometry.buffers[0].data,n=this.shader;n.batchable&&this.drawMode===_r.TRIANGLES&&i.length>16)+(I&65280)+((I&255)<<16),this._colorDirty=!0)},enumerable:!1,configurable:!0}),g.prototype.update=function(){if(this._colorDirty){this._colorDirty=!1;var I=this.texture.baseTexture;oU(this._tint,this._alpha,this.uniforms.uColor,I.alphaMode)}this.uvMatrix.update()&&(this.uniforms.uTextureMatrix=this.uvMatrix.mapCoord)},g}(ws),WS=function(e){PU(g,e);function g(I,i,n){var C=e.call(this)||this,r=new mi(I),o=new mi(i,!0),a=new mi(n,!0,!0);return C.addAttribute("aVertexPosition",r,2,!1,Et.FLOAT).addAttribute("aTextureCoord",o,2,!1,Et.FLOAT).addIndex(a),C._updateId=-1,C}return Object.defineProperty(g.prototype,"vertexDirtyId",{get:function(){return this.buffers[0]._updateID},enumerable:!1,configurable:!0}),g}(w0);/*! +`,fb=function(e){QU(g,e);function g(i,I){var n=this,r={uSampler:i,alpha:1,uTextureMatrix:GI.IDENTITY,uColor:new Float32Array([1,1,1,1])};return I=Object.assign({tint:16777215,alpha:1,pluginName:"batch"},I),I.uniforms&&Object.assign(r,I.uniforms),n=e.call(this,I.program||W0.from($Pe,jPe),r)||this,n._colorDirty=!1,n.uvMatrix=new RT(i),n.batchable=I.program===void 0,n.pluginName=I.pluginName,n.tint=I.tint,n.alpha=I.alpha,n}return Object.defineProperty(g.prototype,"texture",{get:function(){return this.uniforms.uSampler},set:function(i){this.uniforms.uSampler!==i&&(!this.uniforms.uSampler.baseTexture.alphaMode!=!i.baseTexture.alphaMode&&(this._colorDirty=!0),this.uniforms.uSampler=i,this.uvMatrix.texture=i)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"alpha",{get:function(){return this._alpha},set:function(i){i!==this._alpha&&(this._alpha=i,this._colorDirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"tint",{get:function(){return this._tint},set:function(i){i!==this._tint&&(this._tint=i,this._tintRGB=(i>>16)+(i&65280)+((i&255)<<16),this._colorDirty=!0)},enumerable:!1,configurable:!0}),g.prototype.update=function(){if(this._colorDirty){this._colorDirty=!1;var i=this.texture.baseTexture;uU(this._tint,this._alpha,this.uniforms.uColor,i.alphaMode)}this.uvMatrix.update()&&(this.uniforms.uTextureMatrix=this.uvMatrix.mapCoord)},g}(Rs),HS=function(e){QU(g,e);function g(i,I,n){var r=e.call(this)||this,C=new fI(i),o=new fI(I,!0),a=new fI(n,!0,!0);return r.addAttribute("aVertexPosition",C,2,!1,Et.FLOAT).addAttribute("aTextureCoord",o,2,!1,Et.FLOAT).addIndex(a),r._updateId=-1,r}return Object.defineProperty(g.prototype,"vertexDirtyId",{get:function(){return this.buffers[0]._updateID},enumerable:!1,configurable:!0}),g}(V0);/*! * @pixi/text-bitmap - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -1019,7 +1019,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var OM=function(e,g){return OM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},OM(e,g)};function JPe(e,g){OM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var ZB=function(){function e(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}return e}(),ype=function(){function e(){}return e.test=function(g){return typeof g=="string"&&g.indexOf("info face=")===0},e.parse=function(g){var I=g.match(/^[a-z]+\s+.+$/gm),i={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(var n in I){var C=I[n].match(/^[a-z]+/gm)[0],r=I[n].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),o={};for(var a in r){var s=r[a].split("="),A=s[0],l=s[1].replace(/"/gm,""),c=parseFloat(l),u=isNaN(c)?l:c;o[A]=u}i[C].push(o)}var d=new ZB;return i.info.forEach(function(h){return d.info.push({face:h.face,size:parseInt(h.size,10)})}),i.common.forEach(function(h){return d.common.push({lineHeight:parseInt(h.lineHeight,10)})}),i.page.forEach(function(h){return d.page.push({id:parseInt(h.id,10),file:h.file})}),i.char.forEach(function(h){return d.char.push({id:parseInt(h.id,10),page:parseInt(h.page,10),x:parseInt(h.x,10),y:parseInt(h.y,10),width:parseInt(h.width,10),height:parseInt(h.height,10),xoffset:parseInt(h.xoffset,10),yoffset:parseInt(h.yoffset,10),xadvance:parseInt(h.xadvance,10)})}),i.kerning.forEach(function(h){return d.kerning.push({first:parseInt(h.first,10),second:parseInt(h.second,10),amount:parseInt(h.amount,10)})}),i.distanceField.forEach(function(h){return d.distanceField.push({distanceRange:parseInt(h.distanceRange,10),fieldType:h.fieldType})}),d},e}(),R9=function(){function e(){}return e.test=function(g){return g instanceof XMLDocument&&g.getElementsByTagName("page").length&&g.getElementsByTagName("info")[0].getAttribute("face")!==null},e.parse=function(g){for(var I=new ZB,i=g.getElementsByTagName("info"),n=g.getElementsByTagName("common"),C=g.getElementsByTagName("page"),r=g.getElementsByTagName("char"),o=g.getElementsByTagName("kerning"),a=g.getElementsByTagName("distanceField"),s=0;s")>-1){var I=new globalThis.DOMParser().parseFromString(g,"text/xml");return R9.test(I)}return!1},e.parse=function(g){var I=new globalThis.DOMParser().parseFromString(g,"text/xml");return R9.parse(I)},e}(),i5=[ype,R9,Zpe];function JU(e){for(var g=0;g=s-w*o){if(h===0)throw new Error("[BitmapFont] textureHeight "+s+"px is too small "+("(fontFamily: '"+l.fontFamily+"', fontSize: "+l.fontSize+"px, char: '"+B+"')"));--Z,m=null,f=null,b=null,h=0,d=0,p=0;continue}if(p=Math.max(w+G.fontProperties.descent,p),R*o+d>=c){if(d===0)throw new Error("[BitmapFont] textureWidth "+a+"px is too small "+("(fontFamily: '"+l.fontFamily+"', fontSize: "+l.fontSize+"px, char: '"+B+"')"));--Z,h+=p*o,h=Math.ceil(h),d=0,p=0;continue}_Pe(m,f,G,d,h,o,l);var S=N1(G.text);u.char.push({id:S,page:y.length-1,x:d/o,y:h/o,width:R,height:w,xoffset:0,yoffset:0,xadvance:Math.ceil(v-(l.dropShadow?l.dropShadowDistance:0)-(l.stroke?l.strokeThickness:0))}),d+=(R+2*r)*o,d=Math.ceil(d)}if(!(i!=null&&i.skipKerning))for(var Z=0,X=A.length;Z")>-1){var i=new globalThis.DOMParser().parseFromString(g,"text/xml");return X9.test(i)}return!1},e.parse=function(g){var i=new globalThis.DOMParser().parseFromString(g,"text/xml");return X9.parse(i)},e}(),A5=[Rpe,X9,Vpe];function jU(e){for(var g=0;g=s-w*o){if(h===0)throw new Error("[BitmapFont] textureHeight "+s+"px is too small "+("(fontFamily: '"+l.fontFamily+"', fontSize: "+l.fontSize+"px, char: '"+B+"')"));--Z,m=null,f=null,b=null,h=0,d=0,p=0;continue}if(p=Math.max(w+G.fontProperties.descent,p),V*o+d>=c){if(d===0)throw new Error("[BitmapFont] textureWidth "+a+"px is too small "+("(fontFamily: '"+l.fontFamily+"', fontSize: "+l.fontSize+"px, char: '"+B+"')"));--Z,h+=p*o,h=Math.ceil(h),d=0,p=0;continue}tJe(m,f,G,d,h,o,l);var S=K1(G.text);u.char.push({id:S,page:y.length-1,x:d/o,y:h/o,width:V,height:w,xoffset:0,yoffset:0,xadvance:Math.ceil(v-(l.dropShadow?l.dropShadowDistance:0)-(l.stroke?l.strokeThickness:0))}),d+=(V+2*C)*o,d=Math.ceil(d)}if(!(I!=null&&I.skipKerning))for(var Z=0,X=A.length;Z0&&r.x>c&&(++y,Rd(o,1+b-y,1+G-b),G=b,b=-1,a.push(p),s.push(o.length>0?o[o.length-1].prevSpaces:0),m=Math.max(m,p),f++,r.x=0,r.y+=i.lineHeight,d=null,B=0)}}var X=l[l.length-1];X!=="\r"&&X!==` -`&&(/(?:\s)/.test(X)&&(h=p),a.push(h),m=Math.max(m,h),s.push(-1));for(var W=[],G=0;G<=f;G++){var V=0;this._align==="right"?V=m-a[G]:this._align==="center"?V=(m-a[G])/2:this._align==="justify"&&(V=s[G]<0?0:(m-a[G])/s[G]),W.push(V)}var H=o.length,Y={},K=[],x=this._activePagesMeshData;u.push.apply(u,x);for(var G=0;G6*ie)||ge.vertices.length0&&C.x>c&&(++y,Vd(o,1+b-y,1+G-b),G=b,b=-1,a.push(p),s.push(o.length>0?o[o.length-1].prevSpaces:0),m=Math.max(m,p),f++,C.x=0,C.y+=I.lineHeight,d=null,B=0)}}var X=l[l.length-1];X!=="\r"&&X!==` +`&&(/(?:\s)/.test(X)&&(h=p),a.push(h),m=Math.max(m,h),s.push(-1));for(var W=[],G=0;G<=f;G++){var R=0;this._align==="right"?R=m-a[G]:this._align==="center"?R=(m-a[G])/2:this._align==="justify"&&(R=s[G]<0?0:(m-a[G])/s[G]),W.push(R)}var H=o.length,k={},K=[],D=this._activePagesMeshData;u.push.apply(u,D);for(var G=0;G6*Ie)||te.vertices.length=I&&(r=e-o-1),a=a.replace("%value%",g[r].toString()),n+=a,n+=` -`}return i=i.replace("%blur%",n),i=i.replace("%size%",e.toString()),i}var UM=function(e){Bpe(g,e);function g(I,i,n,C,r){i===void 0&&(i=8),n===void 0&&(n=4),C===void 0&&(C=Gt.FILTER_RESOLUTION),r===void 0&&(r=5);var o=this,a=gJe(r,I),s=nJe(r);return o=e.call(this,a,s)||this,o.horizontal=I,o.resolution=C,o._quality=0,o.quality=n,o.blur=i,o}return g.prototype.apply=function(I,i,n,C){if(n?this.horizontal?this.uniforms.strength=1/n.width*(n.width/i.width):this.uniforms.strength=1/n.height*(n.height/i.height):this.horizontal?this.uniforms.strength=1/I.renderer.width*(I.renderer.width/i.width):this.uniforms.strength=1/I.renderer.height*(I.renderer.height/i.height),this.uniforms.strength*=this.strength,this.uniforms.strength/=this.passes,this.passes===1)I.applyFilter(this,i,n,C);else{var r=I.getFilterTexture(),o=I.renderer,a=i,s=r;this.state.blend=!1,I.applyFilter(this,a,s,xr.CLEAR);for(var A=1;A=i&&(C=e-o-1),a=a.replace("%value%",g[C].toString()),n+=a,n+=` +`}return I=I.replace("%blur%",n),I=I.replace("%size%",e.toString()),I}var t3=function(e){Hpe(g,e);function g(i,I,n,r,C){I===void 0&&(I=8),n===void 0&&(n=4),r===void 0&&(r=Gt.FILTER_RESOLUTION),C===void 0&&(C=5);var o=this,a=AJe(C,i),s=cJe(C);return o=e.call(this,a,s)||this,o.horizontal=i,o.resolution=r,o._quality=0,o.quality=n,o.blur=I,o}return g.prototype.apply=function(i,I,n,r){if(n?this.horizontal?this.uniforms.strength=1/n.width*(n.width/I.width):this.uniforms.strength=1/n.height*(n.height/I.height):this.horizontal?this.uniforms.strength=1/i.renderer.width*(i.renderer.width/I.width):this.uniforms.strength=1/i.renderer.height*(i.renderer.height/I.height),this.uniforms.strength*=this.strength,this.uniforms.strength/=this.passes,this.passes===1)i.applyFilter(this,I,n,r);else{var C=i.getFilterTexture(),o=i.renderer,a=I,s=C;this.state.blend=!1,i.applyFilter(this,a,s,MC.CLEAR);for(var A=1;A>16&255,C=I>>8&255,r=I&255,o=[n/255,0,0,0,0,0,C/255,0,0,0,0,0,r/255,0,0,0,0,0,1,0];this._loadMatrix(o,i)},g.prototype.greyscale=function(I,i){var n=[I,I,I,0,0,I,I,I,0,0,I,I,I,0,0,0,0,0,1,0];this._loadMatrix(n,i)},g.prototype.blackAndWhite=function(I){var i=[.3,.6,.1,0,0,.3,.6,.1,0,0,.3,.6,.1,0,0,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.hue=function(I,i){I=(I||0)/180*Math.PI;var n=Math.cos(I),C=Math.sin(I),r=Math.sqrt,o=1/3,a=r(o),s=n+(1-n)*o,A=o*(1-n)-a*C,l=o*(1-n)+a*C,c=o*(1-n)+a*C,u=n+o*(1-n),d=o*(1-n)-a*C,h=o*(1-n)-a*C,m=o*(1-n)+a*C,f=n+o*(1-n),b=[s,A,l,0,0,c,u,d,0,0,h,m,f,0,0,0,0,0,1,0];this._loadMatrix(b,i)},g.prototype.contrast=function(I,i){var n=(I||0)+1,C=-.5*(n-1),r=[n,0,0,0,C,0,n,0,0,C,0,0,n,0,C,0,0,0,1,0];this._loadMatrix(r,i)},g.prototype.saturate=function(I,i){I===void 0&&(I=0);var n=I*2/3+1,C=(n-1)*-.5,r=[n,C,C,0,0,C,n,C,0,0,C,C,n,0,0,0,0,0,1,0];this._loadMatrix(r,i)},g.prototype.desaturate=function(){this.saturate(-1)},g.prototype.negative=function(I){var i=[-1,0,0,1,0,0,-1,0,1,0,0,0,-1,1,0,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.sepia=function(I){var i=[.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.technicolor=function(I){var i=[1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.polaroid=function(I){var i=[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.toBGR=function(I){var i=[0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.kodachrome=function(I){var i=[1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.browni=function(I){var i=[.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.vintage=function(I){var i=[.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.colorTone=function(I,i,n,C,r){I=I||.2,i=i||.15,n=n||16770432,C=C||3375104;var o=(n>>16&255)/255,a=(n>>8&255)/255,s=(n&255)/255,A=(C>>16&255)/255,l=(C>>8&255)/255,c=(C&255)/255,u=[.3,.59,.11,0,0,o,a,s,I,0,A,l,c,i,0,o-A,a-l,s-c,0,0];this._loadMatrix(u,r)},g.prototype.night=function(I,i){I=I||.1;var n=[I*-2,-I,0,0,0,-I,0,I,0,0,0,I,I*2,0,0,0,0,0,1,0];this._loadMatrix(n,i)},g.prototype.predator=function(I,i){var n=[11.224130630493164*I,-4.794486999511719*I,-2.8746118545532227*I,0*I,.40342438220977783*I,-3.6330697536468506*I,9.193157196044922*I,-2.951810836791992*I,0*I,-1.316135048866272*I,-3.2184197902679443*I,-4.2375030517578125*I,7.476448059082031*I,0*I,.8044459223747253*I,0,0,0,1,0];this._loadMatrix(n,i)},g.prototype.lsd=function(I){var i=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(i,I)},g.prototype.reset=function(){var I=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(I,!1)},Object.defineProperty(g.prototype,"matrix",{get:function(){return this.uniforms.m},set:function(I){this.uniforms.m=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"alpha",{get:function(){return this.uniforms.uAlpha},set:function(I){this.uniforms.uAlpha=I},enumerable:!1,configurable:!0}),g}(Qs);jM.prototype.grayscale=jM.prototype.greyscale;/*! +`,i3=function(e){dJe(g,e);function g(){var i=this,I={m:new Float32Array([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]),uAlpha:1};return i=e.call(this,MU,hJe,I)||this,i.alpha=1,i}return g.prototype._loadMatrix=function(i,I){I===void 0&&(I=!1);var n=i;I&&(this._multiply(n,this.uniforms.m,i),n=this._colorMatrix(n)),this.uniforms.m=n},g.prototype._multiply=function(i,I,n){return i[0]=I[0]*n[0]+I[1]*n[5]+I[2]*n[10]+I[3]*n[15],i[1]=I[0]*n[1]+I[1]*n[6]+I[2]*n[11]+I[3]*n[16],i[2]=I[0]*n[2]+I[1]*n[7]+I[2]*n[12]+I[3]*n[17],i[3]=I[0]*n[3]+I[1]*n[8]+I[2]*n[13]+I[3]*n[18],i[4]=I[0]*n[4]+I[1]*n[9]+I[2]*n[14]+I[3]*n[19]+I[4],i[5]=I[5]*n[0]+I[6]*n[5]+I[7]*n[10]+I[8]*n[15],i[6]=I[5]*n[1]+I[6]*n[6]+I[7]*n[11]+I[8]*n[16],i[7]=I[5]*n[2]+I[6]*n[7]+I[7]*n[12]+I[8]*n[17],i[8]=I[5]*n[3]+I[6]*n[8]+I[7]*n[13]+I[8]*n[18],i[9]=I[5]*n[4]+I[6]*n[9]+I[7]*n[14]+I[8]*n[19]+I[9],i[10]=I[10]*n[0]+I[11]*n[5]+I[12]*n[10]+I[13]*n[15],i[11]=I[10]*n[1]+I[11]*n[6]+I[12]*n[11]+I[13]*n[16],i[12]=I[10]*n[2]+I[11]*n[7]+I[12]*n[12]+I[13]*n[17],i[13]=I[10]*n[3]+I[11]*n[8]+I[12]*n[13]+I[13]*n[18],i[14]=I[10]*n[4]+I[11]*n[9]+I[12]*n[14]+I[13]*n[19]+I[14],i[15]=I[15]*n[0]+I[16]*n[5]+I[17]*n[10]+I[18]*n[15],i[16]=I[15]*n[1]+I[16]*n[6]+I[17]*n[11]+I[18]*n[16],i[17]=I[15]*n[2]+I[16]*n[7]+I[17]*n[12]+I[18]*n[17],i[18]=I[15]*n[3]+I[16]*n[8]+I[17]*n[13]+I[18]*n[18],i[19]=I[15]*n[4]+I[16]*n[9]+I[17]*n[14]+I[18]*n[19]+I[19],i},g.prototype._colorMatrix=function(i){var I=new Float32Array(i);return I[4]/=255,I[9]/=255,I[14]/=255,I[19]/=255,I},g.prototype.brightness=function(i,I){var n=[i,0,0,0,0,0,i,0,0,0,0,0,i,0,0,0,0,0,1,0];this._loadMatrix(n,I)},g.prototype.tint=function(i,I){var n=i>>16&255,r=i>>8&255,C=i&255,o=[n/255,0,0,0,0,0,r/255,0,0,0,0,0,C/255,0,0,0,0,0,1,0];this._loadMatrix(o,I)},g.prototype.greyscale=function(i,I){var n=[i,i,i,0,0,i,i,i,0,0,i,i,i,0,0,0,0,0,1,0];this._loadMatrix(n,I)},g.prototype.blackAndWhite=function(i){var I=[.3,.6,.1,0,0,.3,.6,.1,0,0,.3,.6,.1,0,0,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.hue=function(i,I){i=(i||0)/180*Math.PI;var n=Math.cos(i),r=Math.sin(i),C=Math.sqrt,o=1/3,a=C(o),s=n+(1-n)*o,A=o*(1-n)-a*r,l=o*(1-n)+a*r,c=o*(1-n)+a*r,u=n+o*(1-n),d=o*(1-n)-a*r,h=o*(1-n)-a*r,m=o*(1-n)+a*r,f=n+o*(1-n),b=[s,A,l,0,0,c,u,d,0,0,h,m,f,0,0,0,0,0,1,0];this._loadMatrix(b,I)},g.prototype.contrast=function(i,I){var n=(i||0)+1,r=-.5*(n-1),C=[n,0,0,0,r,0,n,0,0,r,0,0,n,0,r,0,0,0,1,0];this._loadMatrix(C,I)},g.prototype.saturate=function(i,I){i===void 0&&(i=0);var n=i*2/3+1,r=(n-1)*-.5,C=[n,r,r,0,0,r,n,r,0,0,r,r,n,0,0,0,0,0,1,0];this._loadMatrix(C,I)},g.prototype.desaturate=function(){this.saturate(-1)},g.prototype.negative=function(i){var I=[-1,0,0,1,0,0,-1,0,1,0,0,0,-1,1,0,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.sepia=function(i){var I=[.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.technicolor=function(i){var I=[1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.polaroid=function(i){var I=[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.toBGR=function(i){var I=[0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.kodachrome=function(i){var I=[1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.browni=function(i){var I=[.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.vintage=function(i){var I=[.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.colorTone=function(i,I,n,r,C){i=i||.2,I=I||.15,n=n||16770432,r=r||3375104;var o=(n>>16&255)/255,a=(n>>8&255)/255,s=(n&255)/255,A=(r>>16&255)/255,l=(r>>8&255)/255,c=(r&255)/255,u=[.3,.59,.11,0,0,o,a,s,i,0,A,l,c,I,0,o-A,a-l,s-c,0,0];this._loadMatrix(u,C)},g.prototype.night=function(i,I){i=i||.1;var n=[i*-2,-i,0,0,0,-i,0,i,0,0,0,i,i*2,0,0,0,0,0,1,0];this._loadMatrix(n,I)},g.prototype.predator=function(i,I){var n=[11.224130630493164*i,-4.794486999511719*i,-2.8746118545532227*i,0*i,.40342438220977783*i,-3.6330697536468506*i,9.193157196044922*i,-2.951810836791992*i,0*i,-1.316135048866272*i,-3.2184197902679443*i,-4.2375030517578125*i,7.476448059082031*i,0*i,.8044459223747253*i,0,0,0,1,0];this._loadMatrix(n,I)},g.prototype.lsd=function(i){var I=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(I,i)},g.prototype.reset=function(){var i=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(i,!1)},Object.defineProperty(g.prototype,"matrix",{get:function(){return this.uniforms.m},set:function(i){this.uniforms.m=i},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"alpha",{get:function(){return this.uniforms.uAlpha},set:function(i){this.uniforms.uAlpha=i},enumerable:!1,configurable:!0}),g}(js);i3.prototype.grayscale=i3.prototype.greyscale;/*! * @pixi/filter-displacement - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -1242,7 +1242,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var $M=function(e,g){return $M=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},$M(e,g)};function aJe(e,g){$M(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var AJe=`varying vec2 vFilterCoord; +***************************************************************************** */var I3=function(e,g){return I3=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)I.hasOwnProperty(n)&&(i[n]=I[n])},I3(e,g)};function mJe(e,g){I3(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}var fJe=`varying vec2 vFilterCoord; varying vec2 vTextureCoord; uniform vec2 scale; @@ -1262,7 +1262,7 @@ void main(void) gl_FragColor = texture2D(uSampler, clamp(vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y), inputClamp.xy, inputClamp.zw)); } -`,sJe=`attribute vec2 aVertexPosition; +`,pJe=`attribute vec2 aVertexPosition; uniform mat3 projectionMatrix; uniform mat3 filterMatrix; @@ -1291,7 +1291,7 @@ void main(void) vTextureCoord = filterTextureCoord(); vFilterCoord = ( filterMatrix * vec3( vTextureCoord, 1.0) ).xy; } -`,lJe=function(e){aJe(g,e);function g(I,i){var n=this,C=new Zi;return I.renderable=!1,n=e.call(this,sJe,AJe,{mapSampler:I._texture,filterMatrix:C,scale:{x:1,y:1},rotation:new Float32Array([1,0,0,1])})||this,n.maskSprite=I,n.maskMatrix=C,i==null&&(i=20),n.scale=new aI(i,i),n}return g.prototype.apply=function(I,i,n,C){this.uniforms.filterMatrix=I.calculateSpriteMatrix(this.maskMatrix,this.maskSprite),this.uniforms.scale.x=this.scale.x,this.uniforms.scale.y=this.scale.y;var r=this.maskSprite.worldTransform,o=Math.sqrt(r.a*r.a+r.b*r.b),a=Math.sqrt(r.c*r.c+r.d*r.d);o!==0&&a!==0&&(this.uniforms.rotation[0]=r.a/o,this.uniforms.rotation[1]=r.b/o,this.uniforms.rotation[2]=r.c/a,this.uniforms.rotation[3]=r.d/a),I.applyFilter(this,i,n,C)},Object.defineProperty(g.prototype,"map",{get:function(){return this.uniforms.mapSampler},set:function(I){this.uniforms.mapSampler=I},enumerable:!1,configurable:!0}),g}(Qs);/*! +`,bJe=function(e){mJe(g,e);function g(i,I){var n=this,r=new GI;return i.renderable=!1,n=e.call(this,pJe,fJe,{mapSampler:i._texture,filterMatrix:r,scale:{x:1,y:1},rotation:new Float32Array([1,0,0,1])})||this,n.maskSprite=i,n.maskMatrix=r,I==null&&(I=20),n.scale=new Ai(I,I),n}return g.prototype.apply=function(i,I,n,r){this.uniforms.filterMatrix=i.calculateSpriteMatrix(this.maskMatrix,this.maskSprite),this.uniforms.scale.x=this.scale.x,this.uniforms.scale.y=this.scale.y;var C=this.maskSprite.worldTransform,o=Math.sqrt(C.a*C.a+C.b*C.b),a=Math.sqrt(C.c*C.c+C.d*C.d);o!==0&&a!==0&&(this.uniforms.rotation[0]=C.a/o,this.uniforms.rotation[1]=C.b/o,this.uniforms.rotation[2]=C.c/a,this.uniforms.rotation[3]=C.d/a),i.applyFilter(this,I,n,r)},Object.defineProperty(g.prototype,"map",{get:function(){return this.uniforms.mapSampler},set:function(i){this.uniforms.mapSampler=i},enumerable:!1,configurable:!0}),g}(js);/*! * @pixi/filter-fxaa - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -1310,7 +1310,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var qM=function(e,g){return qM=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},qM(e,g)};function cJe(e,g){qM(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var uJe=` +***************************************************************************** */var n3=function(e,g){return n3=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)I.hasOwnProperty(n)&&(i[n]=I[n])},n3(e,g)};function yJe(e,g){n3(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}var ZJe=` attribute vec2 aVertexPosition; uniform mat3 projectionMatrix; @@ -1352,7 +1352,7 @@ void main(void) { texcoords(vFragCoord, inputSize.zw, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM); } -`,dJe=`varying vec2 v_rgbNW; +`,GJe=`varying vec2 v_rgbNW; varying vec2 v_rgbNE; varying vec2 v_rgbSW; varying vec2 v_rgbSE; @@ -1473,7 +1473,7 @@ void main() { gl_FragColor = color; } -`,hJe=function(e){cJe(g,e);function g(){return e.call(this,uJe,dJe)||this}return g}(Qs);/*! +`,vJe=function(e){yJe(g,e);function g(){return e.call(this,ZJe,GJe)||this}return g}(js);/*! * @pixi/filter-noise - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -1492,7 +1492,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var e3=function(e,g){return e3=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},e3(e,g)};function mJe(e,g){e3(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var fJe=`precision highp float; +***************************************************************************** */var r3=function(e,g){return r3=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)I.hasOwnProperty(n)&&(i[n]=I[n])},r3(e,g)};function BJe(e,g){r3(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}var SJe=`precision highp float; varying vec2 vTextureCoord; varying vec4 vColor; @@ -1526,31 +1526,31 @@ void main() gl_FragColor = color; } -`,pJe=function(e){mJe(g,e);function g(I,i){I===void 0&&(I=.5),i===void 0&&(i=Math.random());var n=e.call(this,YU,fJe,{uNoise:0,uSeed:0})||this;return n.noise=I,n.seed=i,n}return Object.defineProperty(g.prototype,"noise",{get:function(){return this.uniforms.uNoise},set:function(I){this.uniforms.uNoise=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"seed",{get:function(){return this.uniforms.uSeed},set:function(I){this.uniforms.uSeed=I},enumerable:!1,configurable:!0}),g}(Qs);/*! +`,wJe=function(e){BJe(g,e);function g(i,I){i===void 0&&(i=.5),I===void 0&&(I=Math.random());var n=e.call(this,MU,SJe,{uNoise:0,uSeed:0})||this;return n.noise=i,n.seed=I,n}return Object.defineProperty(g.prototype,"noise",{get:function(){return this.uniforms.uNoise},set:function(i){this.uniforms.uNoise=i},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"seed",{get:function(){return this.uniforms.uSeed},set:function(i){this.uniforms.uSeed=i},enumerable:!1,configurable:!0}),g}(js);/*! * @pixi/mixin-cache-as-bitmap - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/mixin-cache-as-bitmap is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */var Spe=new Zi;$I.prototype._cacheAsBitmap=!1;$I.prototype._cacheData=null;$I.prototype._cacheAsBitmapResolution=null;$I.prototype._cacheAsBitmapMultisample=fI.NONE;var bJe=function(){function e(){this.textureCacheId=null,this.originalRender=null,this.originalRenderCanvas=null,this.originalCalculateBounds=null,this.originalGetLocalBounds=null,this.originalUpdateTransform=null,this.originalDestroy=null,this.originalMask=null,this.originalFilterArea=null,this.originalContainsPoint=null,this.sprite=null}return e}();Object.defineProperties($I.prototype,{cacheAsBitmapResolution:{get:function(){return this._cacheAsBitmapResolution},set:function(e){e!==this._cacheAsBitmapResolution&&(this._cacheAsBitmapResolution=e,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmapMultisample:{get:function(){return this._cacheAsBitmapMultisample},set:function(e){e!==this._cacheAsBitmapMultisample&&(this._cacheAsBitmapMultisample=e,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmap:{get:function(){return this._cacheAsBitmap},set:function(e){if(this._cacheAsBitmap!==e){this._cacheAsBitmap=e;var g;e?(this._cacheData||(this._cacheData=new bJe),g=this._cacheData,g.originalRender=this.render,g.originalRenderCanvas=this.renderCanvas,g.originalUpdateTransform=this.updateTransform,g.originalCalculateBounds=this.calculateBounds,g.originalGetLocalBounds=this.getLocalBounds,g.originalDestroy=this.destroy,g.originalContainsPoint=this.containsPoint,g.originalMask=this._mask,g.originalFilterArea=this.filterArea,this.render=this._renderCached,this.renderCanvas=this._renderCachedCanvas,this.destroy=this._cacheAsBitmapDestroy):(g=this._cacheData,g.sprite&&this._destroyCachedDisplayObject(),this.render=g.originalRender,this.renderCanvas=g.originalRenderCanvas,this.calculateBounds=g.originalCalculateBounds,this.getLocalBounds=g.originalGetLocalBounds,this.destroy=g.originalDestroy,this.updateTransform=g.originalUpdateTransform,this.containsPoint=g.originalContainsPoint,this._mask=g.originalMask,this.filterArea=g.originalFilterArea)}}}});$I.prototype._renderCached=function(g){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObject(g),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._render(g))};$I.prototype._initCachedDisplayObject=function(g){var I;if(!(this._cacheData&&this._cacheData.sprite)){var i=this.alpha;this.alpha=1,g.batch.flush();var n=this.getLocalBounds(null,!0).clone();if(this.filters&&this.filters.length){var C=this.filters[0].padding;n.pad(C)}n.ceil(Gt.RESOLUTION);var r=g.renderTexture.current,o=g.renderTexture.sourceFrame.clone(),a=g.renderTexture.destinationFrame.clone(),s=g.projection.transform,A=Ys.create({width:n.width,height:n.height,resolution:this.cacheAsBitmapResolution||g.resolution,multisample:(I=this.cacheAsBitmapMultisample)!==null&&I!==void 0?I:g.multisample}),l="cacheAsBitmap_"+zc();this._cacheData.textureCacheId=l,vg.addToCache(A.baseTexture,l),Ig.addToCache(A,l);var c=this.transform.localTransform.copyTo(Spe).invert().translate(-n.x,-n.y);this.render=this._cacheData.originalRender,g.render(this,{renderTexture:A,clear:!0,transform:c,skipUpdateTransform:!1}),g.framebuffer.blit(),g.projection.transform=s,g.renderTexture.bind(r,o,a),this.render=this._renderCached,this.updateTransform=this.displayObjectUpdateTransform,this.calculateBounds=this._calculateCachedBounds,this.getLocalBounds=this._getCachedLocalBounds,this._mask=null,this.filterArea=null,this.alpha=i;var u=new V0(A);u.transform.worldTransform=this.transform.worldTransform,u.anchor.x=-(n.x/n.width),u.anchor.y=-(n.y/n.height),u.alpha=i,u._bounds=this._bounds,this._cacheData.sprite=u,this.transform._parentID=-1,this.parent?this.updateTransform():(this.enableTempParent(),this.updateTransform(),this.disableTempParent(null)),this.containsPoint=u.containsPoint.bind(u)}};$I.prototype._renderCachedCanvas=function(g){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObjectCanvas(g),this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._renderCanvas(g))};$I.prototype._initCachedDisplayObjectCanvas=function(g){if(!(this._cacheData&&this._cacheData.sprite)){var I=this.getLocalBounds(null,!0),i=this.alpha;this.alpha=1;var n=g.context,C=g._projTransform;I.ceil(Gt.RESOLUTION);var r=Ys.create({width:I.width,height:I.height}),o="cacheAsBitmap_"+zc();this._cacheData.textureCacheId=o,vg.addToCache(r.baseTexture,o),Ig.addToCache(r,o);var a=Spe;this.transform.localTransform.copyTo(a),a.invert(),a.tx-=I.x,a.ty-=I.y,this.renderCanvas=this._cacheData.originalRenderCanvas,g.render(this,{renderTexture:r,clear:!0,transform:a,skipUpdateTransform:!1}),g.context=n,g._projTransform=C,this.renderCanvas=this._renderCachedCanvas,this.updateTransform=this.displayObjectUpdateTransform,this.calculateBounds=this._calculateCachedBounds,this.getLocalBounds=this._getCachedLocalBounds,this._mask=null,this.filterArea=null,this.alpha=i;var s=new V0(r);s.transform.worldTransform=this.transform.worldTransform,s.anchor.x=-(I.x/I.width),s.anchor.y=-(I.y/I.height),s.alpha=i,s._bounds=this._bounds,this._cacheData.sprite=s,this.transform._parentID=-1,this.parent?this.updateTransform():(this.parent=g._tempDisplayObjectParent,this.updateTransform(),this.parent=null),this.containsPoint=s.containsPoint.bind(s)}};$I.prototype._calculateCachedBounds=function(){this._bounds.clear(),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite._calculateBounds(),this._bounds.updateID=this._boundsID};$I.prototype._getCachedLocalBounds=function(){return this._cacheData.sprite.getLocalBounds(null)};$I.prototype._destroyCachedDisplayObject=function(){this._cacheData.sprite._texture.destroy(!0),this._cacheData.sprite=null,vg.removeFromCache(this._cacheData.textureCacheId),Ig.removeFromCache(this._cacheData.textureCacheId),this._cacheData.textureCacheId=null};$I.prototype._cacheAsBitmapDestroy=function(g){this.cacheAsBitmap=!1,this.destroy(g)};/*! + */var Tpe=new GI;eI.prototype._cacheAsBitmap=!1;eI.prototype._cacheData=null;eI.prototype._cacheAsBitmapResolution=null;eI.prototype._cacheAsBitmapMultisample=pi.NONE;var RJe=function(){function e(){this.textureCacheId=null,this.originalRender=null,this.originalRenderCanvas=null,this.originalCalculateBounds=null,this.originalGetLocalBounds=null,this.originalUpdateTransform=null,this.originalDestroy=null,this.originalMask=null,this.originalFilterArea=null,this.originalContainsPoint=null,this.sprite=null}return e}();Object.defineProperties(eI.prototype,{cacheAsBitmapResolution:{get:function(){return this._cacheAsBitmapResolution},set:function(e){e!==this._cacheAsBitmapResolution&&(this._cacheAsBitmapResolution=e,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmapMultisample:{get:function(){return this._cacheAsBitmapMultisample},set:function(e){e!==this._cacheAsBitmapMultisample&&(this._cacheAsBitmapMultisample=e,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmap:{get:function(){return this._cacheAsBitmap},set:function(e){if(this._cacheAsBitmap!==e){this._cacheAsBitmap=e;var g;e?(this._cacheData||(this._cacheData=new RJe),g=this._cacheData,g.originalRender=this.render,g.originalRenderCanvas=this.renderCanvas,g.originalUpdateTransform=this.updateTransform,g.originalCalculateBounds=this.calculateBounds,g.originalGetLocalBounds=this.getLocalBounds,g.originalDestroy=this.destroy,g.originalContainsPoint=this.containsPoint,g.originalMask=this._mask,g.originalFilterArea=this.filterArea,this.render=this._renderCached,this.renderCanvas=this._renderCachedCanvas,this.destroy=this._cacheAsBitmapDestroy):(g=this._cacheData,g.sprite&&this._destroyCachedDisplayObject(),this.render=g.originalRender,this.renderCanvas=g.originalRenderCanvas,this.calculateBounds=g.originalCalculateBounds,this.getLocalBounds=g.originalGetLocalBounds,this.destroy=g.originalDestroy,this.updateTransform=g.originalUpdateTransform,this.containsPoint=g.originalContainsPoint,this._mask=g.originalMask,this.filterArea=g.originalFilterArea)}}}});eI.prototype._renderCached=function(g){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObject(g),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._render(g))};eI.prototype._initCachedDisplayObject=function(g){var i;if(!(this._cacheData&&this._cacheData.sprite)){var I=this.alpha;this.alpha=1,g.batch.flush();var n=this.getLocalBounds(null,!0).clone();if(this.filters&&this.filters.length){var r=this.filters[0].padding;n.pad(r)}n.ceil(Gt.RESOLUTION);var C=g.renderTexture.current,o=g.renderTexture.sourceFrame.clone(),a=g.renderTexture.destinationFrame.clone(),s=g.projection.transform,A=Ks.create({width:n.width,height:n.height,resolution:this.cacheAsBitmapResolution||g.resolution,multisample:(i=this.cacheAsBitmapMultisample)!==null&&i!==void 0?i:g.multisample}),l="cacheAsBitmap_"+Pc();this._cacheData.textureCacheId=l,vg.addToCache(A.baseTexture,l),gg.addToCache(A,l);var c=this.transform.localTransform.copyTo(Tpe).invert().translate(-n.x,-n.y);this.render=this._cacheData.originalRender,g.render(this,{renderTexture:A,clear:!0,transform:c,skipUpdateTransform:!1}),g.framebuffer.blit(),g.projection.transform=s,g.renderTexture.bind(C,o,a),this.render=this._renderCached,this.updateTransform=this.displayObjectUpdateTransform,this.calculateBounds=this._calculateCachedBounds,this.getLocalBounds=this._getCachedLocalBounds,this._mask=null,this.filterArea=null,this.alpha=I;var u=new X0(A);u.transform.worldTransform=this.transform.worldTransform,u.anchor.x=-(n.x/n.width),u.anchor.y=-(n.y/n.height),u.alpha=I,u._bounds=this._bounds,this._cacheData.sprite=u,this.transform._parentID=-1,this.parent?this.updateTransform():(this.enableTempParent(),this.updateTransform(),this.disableTempParent(null)),this.containsPoint=u.containsPoint.bind(u)}};eI.prototype._renderCachedCanvas=function(g){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObjectCanvas(g),this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._renderCanvas(g))};eI.prototype._initCachedDisplayObjectCanvas=function(g){if(!(this._cacheData&&this._cacheData.sprite)){var i=this.getLocalBounds(null,!0),I=this.alpha;this.alpha=1;var n=g.context,r=g._projTransform;i.ceil(Gt.RESOLUTION);var C=Ks.create({width:i.width,height:i.height}),o="cacheAsBitmap_"+Pc();this._cacheData.textureCacheId=o,vg.addToCache(C.baseTexture,o),gg.addToCache(C,o);var a=Tpe;this.transform.localTransform.copyTo(a),a.invert(),a.tx-=i.x,a.ty-=i.y,this.renderCanvas=this._cacheData.originalRenderCanvas,g.render(this,{renderTexture:C,clear:!0,transform:a,skipUpdateTransform:!1}),g.context=n,g._projTransform=r,this.renderCanvas=this._renderCachedCanvas,this.updateTransform=this.displayObjectUpdateTransform,this.calculateBounds=this._calculateCachedBounds,this.getLocalBounds=this._getCachedLocalBounds,this._mask=null,this.filterArea=null,this.alpha=I;var s=new X0(C);s.transform.worldTransform=this.transform.worldTransform,s.anchor.x=-(i.x/i.width),s.anchor.y=-(i.y/i.height),s.alpha=I,s._bounds=this._bounds,this._cacheData.sprite=s,this.transform._parentID=-1,this.parent?this.updateTransform():(this.parent=g._tempDisplayObjectParent,this.updateTransform(),this.parent=null),this.containsPoint=s.containsPoint.bind(s)}};eI.prototype._calculateCachedBounds=function(){this._bounds.clear(),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite._calculateBounds(),this._bounds.updateID=this._boundsID};eI.prototype._getCachedLocalBounds=function(){return this._cacheData.sprite.getLocalBounds(null)};eI.prototype._destroyCachedDisplayObject=function(){this._cacheData.sprite._texture.destroy(!0),this._cacheData.sprite=null,vg.removeFromCache(this._cacheData.textureCacheId),gg.removeFromCache(this._cacheData.textureCacheId),this._cacheData.textureCacheId=null};eI.prototype._cacheAsBitmapDestroy=function(g){this.cacheAsBitmap=!1,this.destroy(g)};/*! * @pixi/mixin-get-child-by-name - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * * @pixi/mixin-get-child-by-name is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license - */$I.prototype.name=null;la.prototype.getChildByName=function(g,I){for(var i=0,n=this.children.length;i0){var d=s.x-I[c].x,h=s.y-I[c].y,m=Math.sqrt(d*d+h*h);s=I[c],a+=m/A}else a=c/(l-1);r[u]=a,r[u+1]=0,r[u+2]=a,r[u+3]=1}for(var f=0,c=0;c0?this.textureScale*this._width/2:this._width/2;C/=c,r/=c,C*=u,r*=u,o[l]=A.x+C,o[l+1]=A.y+r,o[l+2]=A.x-C,o[l+3]=A.y-r,i=A}this.buffers[0].update()}},g.prototype.update=function(){this.textureScale>0?this.build():this.updateVertices()},g}(WS),yJe=function(e){W0(g,e);function g(I,i,n){n===void 0&&(n=0);var C=this,r=new Wpe(I.height,i,n),o=new hb(I);return n>0&&(I.baseTexture.wrapMode=Ia.REPEAT),C=e.call(this,r,o)||this,C.autoUpdate=!0,C}return g.prototype._render=function(I){var i=this.geometry;(this.autoUpdate||i._width!==this.shader.texture.height)&&(i._width=this.shader.texture.height,i.update()),e.prototype._render.call(this,I)},g}(db),Xpe=function(e){W0(g,e);function g(I,i,n){var C=this,r=new Vpe(I.width,I.height,i,n),o=new hb(Ig.WHITE);return C=e.call(this,r,o)||this,C.texture=I,C.autoResize=!0,C}return g.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID;var I=this.geometry,i=this.shader.texture,n=i.width,C=i.height;this.autoResize&&(I.width!==n||I.height!==C)&&(I.width=this.shader.texture.width,I.height=this.shader.texture.height,I.build())},Object.defineProperty(g.prototype,"texture",{get:function(){return this.shader.texture},set:function(I){this.shader.texture!==I&&(this.shader.texture=I,this._textureID=-1,I.baseTexture.valid?this.textureUpdated():I.once("update",this.textureUpdated,this))},enumerable:!1,configurable:!0}),g.prototype._render=function(I){this._textureID!==this.shader.texture._updateID&&this.textureUpdated(),e.prototype._render.call(this,I)},g.prototype.destroy=function(I){this.shader.texture.off("update",this.textureUpdated,this),e.prototype.destroy.call(this,I)},g}(db),ZJe=function(e){W0(g,e);function g(I,i,n,C,r){I===void 0&&(I=Ig.EMPTY);var o=this,a=new WS(i,n,C);a.getBuffer("aVertexPosition").static=!1;var s=new hb(I);return o=e.call(this,a,s,null,r)||this,o.autoUpdate=!0,o}return Object.defineProperty(g.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(I){this.geometry.getBuffer("aVertexPosition").data=I},enumerable:!1,configurable:!0}),g.prototype._render=function(I){this.autoUpdate&&this.geometry.getBuffer("aVertexPosition").update(),e.prototype._render.call(this,I)},g}(db),zR=10,GJe=function(e){W0(g,e);function g(I,i,n,C,r){i===void 0&&(i=zR),n===void 0&&(n=zR),C===void 0&&(C=zR),r===void 0&&(r=zR);var o=e.call(this,Ig.WHITE,4,4)||this;return o._origWidth=I.orig.width,o._origHeight=I.orig.height,o._width=o._origWidth,o._height=o._origHeight,o._leftWidth=i,o._rightWidth=C,o._topHeight=n,o._bottomHeight=r,o.texture=I,o}return g.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID,this._refresh()},Object.defineProperty(g.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(I){this.geometry.getBuffer("aVertexPosition").data=I},enumerable:!1,configurable:!0}),g.prototype.updateHorizontalVertices=function(){var I=this.vertices,i=this._getMinScale();I[9]=I[11]=I[13]=I[15]=this._topHeight*i,I[17]=I[19]=I[21]=I[23]=this._height-this._bottomHeight*i,I[25]=I[27]=I[29]=I[31]=this._height},g.prototype.updateVerticalVertices=function(){var I=this.vertices,i=this._getMinScale();I[2]=I[10]=I[18]=I[26]=this._leftWidth*i,I[4]=I[12]=I[20]=I[28]=this._width-this._rightWidth*i,I[6]=I[14]=I[22]=I[30]=this._width},g.prototype._getMinScale=function(){var I=this._leftWidth+this._rightWidth,i=this._width>I?1:this._width/I,n=this._topHeight+this._bottomHeight,C=this._height>n?1:this._height/n,r=Math.min(i,C);return r},Object.defineProperty(g.prototype,"width",{get:function(){return this._width},set:function(I){this._width=I,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"height",{get:function(){return this._height},set:function(I){this._height=I,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"leftWidth",{get:function(){return this._leftWidth},set:function(I){this._leftWidth=I,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"rightWidth",{get:function(){return this._rightWidth},set:function(I){this._rightWidth=I,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"topHeight",{get:function(){return this._topHeight},set:function(I){this._topHeight=I,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"bottomHeight",{get:function(){return this._bottomHeight},set:function(I){this._bottomHeight=I,this._refresh()},enumerable:!1,configurable:!0}),g.prototype._refresh=function(){var I=this.texture,i=this.geometry.buffers[1].data;this._origWidth=I.orig.width,this._origHeight=I.orig.height;var n=1/this._origWidth,C=1/this._origHeight;i[0]=i[8]=i[16]=i[24]=0,i[1]=i[3]=i[5]=i[7]=0,i[6]=i[14]=i[22]=i[30]=1,i[25]=i[27]=i[29]=i[31]=1,i[2]=i[10]=i[18]=i[26]=n*this._leftWidth,i[4]=i[12]=i[20]=i[28]=1-n*this._rightWidth,i[9]=i[11]=i[13]=i[15]=C*this._topHeight,i[17]=i[19]=i[21]=i[23]=1-C*this._bottomHeight,this.updateHorizontalVertices(),this.updateVerticalVertices(),this.geometry.buffers[0].update(),this.geometry.buffers[1].update()},g}(Xpe);/*! +***************************************************************************** */var C3=function(e,g){return C3=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)I.hasOwnProperty(n)&&(i[n]=I[n])},C3(e,g)};function H0(e,g){C3(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}var Ype=function(e){H0(g,e);function g(i,I,n,r){i===void 0&&(i=100),I===void 0&&(I=100),n===void 0&&(n=10),r===void 0&&(r=10);var C=e.call(this)||this;return C.segWidth=n,C.segHeight=r,C.width=i,C.height=I,C.build(),C}return g.prototype.build=function(){for(var i=this.segWidth*this.segHeight,I=[],n=[],r=[],C=this.segWidth-1,o=this.segHeight-1,a=this.width/C,s=this.height/o,A=0;A0){var d=s.x-i[c].x,h=s.y-i[c].y,m=Math.sqrt(d*d+h*h);s=i[c],a+=m/A}else a=c/(l-1);C[u]=a,C[u+1]=0,C[u+2]=a,C[u+3]=1}for(var f=0,c=0;c0?this.textureScale*this._width/2:this._width/2;r/=c,C/=c,r*=u,C*=u,o[l]=A.x+r,o[l+1]=A.y+C,o[l+2]=A.x-r,o[l+3]=A.y-C,I=A}this.buffers[0].update()}},g.prototype.update=function(){this.textureScale>0?this.build():this.updateVertices()},g}(HS),VJe=function(e){H0(g,e);function g(i,I,n){n===void 0&&(n=0);var r=this,C=new Kpe(i.height,I,n),o=new fb(i);return n>0&&(i.baseTexture.wrapMode=ra.REPEAT),r=e.call(this,C,o)||this,r.autoUpdate=!0,r}return g.prototype._render=function(i){var I=this.geometry;(this.autoUpdate||I._width!==this.shader.texture.height)&&(I._width=this.shader.texture.height,I.update()),e.prototype._render.call(this,i)},g}(mb),Fpe=function(e){H0(g,e);function g(i,I,n){var r=this,C=new Ype(i.width,i.height,I,n),o=new fb(gg.WHITE);return r=e.call(this,C,o)||this,r.texture=i,r.autoResize=!0,r}return g.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID;var i=this.geometry,I=this.shader.texture,n=I.width,r=I.height;this.autoResize&&(i.width!==n||i.height!==r)&&(i.width=this.shader.texture.width,i.height=this.shader.texture.height,i.build())},Object.defineProperty(g.prototype,"texture",{get:function(){return this.shader.texture},set:function(i){this.shader.texture!==i&&(this.shader.texture=i,this._textureID=-1,i.baseTexture.valid?this.textureUpdated():i.once("update",this.textureUpdated,this))},enumerable:!1,configurable:!0}),g.prototype._render=function(i){this._textureID!==this.shader.texture._updateID&&this.textureUpdated(),e.prototype._render.call(this,i)},g.prototype.destroy=function(i){this.shader.texture.off("update",this.textureUpdated,this),e.prototype.destroy.call(this,i)},g}(mb),WJe=function(e){H0(g,e);function g(i,I,n,r,C){i===void 0&&(i=gg.EMPTY);var o=this,a=new HS(I,n,r);a.getBuffer("aVertexPosition").static=!1;var s=new fb(i);return o=e.call(this,a,s,null,C)||this,o.autoUpdate=!0,o}return Object.defineProperty(g.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(i){this.geometry.getBuffer("aVertexPosition").data=i},enumerable:!1,configurable:!0}),g.prototype._render=function(i){this.autoUpdate&&this.geometry.getBuffer("aVertexPosition").update(),e.prototype._render.call(this,i)},g}(mb),JR=10,XJe=function(e){H0(g,e);function g(i,I,n,r,C){I===void 0&&(I=JR),n===void 0&&(n=JR),r===void 0&&(r=JR),C===void 0&&(C=JR);var o=e.call(this,gg.WHITE,4,4)||this;return o._origWidth=i.orig.width,o._origHeight=i.orig.height,o._width=o._origWidth,o._height=o._origHeight,o._leftWidth=I,o._rightWidth=r,o._topHeight=n,o._bottomHeight=C,o.texture=i,o}return g.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID,this._refresh()},Object.defineProperty(g.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(i){this.geometry.getBuffer("aVertexPosition").data=i},enumerable:!1,configurable:!0}),g.prototype.updateHorizontalVertices=function(){var i=this.vertices,I=this._getMinScale();i[9]=i[11]=i[13]=i[15]=this._topHeight*I,i[17]=i[19]=i[21]=i[23]=this._height-this._bottomHeight*I,i[25]=i[27]=i[29]=i[31]=this._height},g.prototype.updateVerticalVertices=function(){var i=this.vertices,I=this._getMinScale();i[2]=i[10]=i[18]=i[26]=this._leftWidth*I,i[4]=i[12]=i[20]=i[28]=this._width-this._rightWidth*I,i[6]=i[14]=i[22]=i[30]=this._width},g.prototype._getMinScale=function(){var i=this._leftWidth+this._rightWidth,I=this._width>i?1:this._width/i,n=this._topHeight+this._bottomHeight,r=this._height>n?1:this._height/n,C=Math.min(I,r);return C},Object.defineProperty(g.prototype,"width",{get:function(){return this._width},set:function(i){this._width=i,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"height",{get:function(){return this._height},set:function(i){this._height=i,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"leftWidth",{get:function(){return this._leftWidth},set:function(i){this._leftWidth=i,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"rightWidth",{get:function(){return this._rightWidth},set:function(i){this._rightWidth=i,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"topHeight",{get:function(){return this._topHeight},set:function(i){this._topHeight=i,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"bottomHeight",{get:function(){return this._bottomHeight},set:function(i){this._bottomHeight=i,this._refresh()},enumerable:!1,configurable:!0}),g.prototype._refresh=function(){var i=this.texture,I=this.geometry.buffers[1].data;this._origWidth=i.orig.width,this._origHeight=i.orig.height;var n=1/this._origWidth,r=1/this._origHeight;I[0]=I[8]=I[16]=I[24]=0,I[1]=I[3]=I[5]=I[7]=0,I[6]=I[14]=I[22]=I[30]=1,I[25]=I[27]=I[29]=I[31]=1,I[2]=I[10]=I[18]=I[26]=n*this._leftWidth,I[4]=I[12]=I[20]=I[28]=1-n*this._rightWidth,I[9]=I[11]=I[13]=I[15]=r*this._topHeight,I[17]=I[19]=I[21]=I[23]=1-r*this._bottomHeight,this.updateHorizontalVertices(),this.updateVerticalVertices(),this.geometry.buffers[0].update(),this.geometry.buffers[1].update()},g}(Fpe);/*! * @pixi/sprite-animated - v6.5.10 * Compiled Thu, 06 Jul 2023 15:25:11 UTC * @@ -1588,53 +1588,53 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var g3=function(e,g){return g3=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)i.hasOwnProperty(n)&&(I[n]=i[n])},g3(e,g)};function vJe(e,g){g3(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}var BJe=function(e){vJe(g,e);function g(I,i){i===void 0&&(i=!0);var n=e.call(this,I[0]instanceof Ig?I[0]:I[0].texture)||this;return n._textures=null,n._durations=null,n._autoUpdate=i,n._isConnectedToTicker=!1,n.animationSpeed=1,n.loop=!0,n.updateAnchor=!1,n.onComplete=null,n.onFrameChange=null,n.onLoop=null,n._currentTime=0,n._playing=!1,n._previousFrame=null,n.textures=I,n}return g.prototype.stop=function(){this._playing&&(this._playing=!1,this._autoUpdate&&this._isConnectedToTicker&&(Ui.shared.remove(this.update,this),this._isConnectedToTicker=!1))},g.prototype.play=function(){this._playing||(this._playing=!0,this._autoUpdate&&!this._isConnectedToTicker&&(Ui.shared.add(this.update,this,pA.HIGH),this._isConnectedToTicker=!0))},g.prototype.gotoAndStop=function(I){this.stop();var i=this.currentFrame;this._currentTime=I,i!==this.currentFrame&&this.updateTexture()},g.prototype.gotoAndPlay=function(I){var i=this.currentFrame;this._currentTime=I,i!==this.currentFrame&&this.updateTexture(),this.play()},g.prototype.update=function(I){if(this._playing){var i=this.animationSpeed*I,n=this.currentFrame;if(this._durations!==null){var C=this._currentTime%1*this._durations[this.currentFrame];for(C+=i/60*1e3;C<0;)this._currentTime--,C+=this._durations[this.currentFrame];var r=Math.sign(this.animationSpeed*I);for(this._currentTime=Math.floor(this._currentTime);C>=this._durations[this.currentFrame];)C-=this._durations[this.currentFrame]*r,this._currentTime+=r;this._currentTime+=C/this._durations[this.currentFrame]}else this._currentTime+=i;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):n!==this.currentFrame&&(this.loop&&this.onLoop&&(this.animationSpeed>0&&this.currentFramen&&this.onLoop()),this.updateTexture())}},g.prototype.updateTexture=function(){var I=this.currentFrame;this._previousFrame!==I&&(this._previousFrame=I,this._texture=this._textures[I],this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this.uvs=this._texture._uvs.uvsFloat32,this.updateAnchor&&this._anchor.copyFrom(this._texture.defaultAnchor),this.onFrameChange&&this.onFrameChange(this.currentFrame))},g.prototype.destroy=function(I){this.stop(),e.prototype.destroy.call(this,I),this.onComplete=null,this.onFrameChange=null,this.onLoop=null},g.fromFrames=function(I){for(var i=[],n=0;n=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*C,this._currentTime+=C;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=I;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):n!==this.currentFrame&&(this.loop&&this.onLoop&&(this.animationSpeed>0&&this.currentFramen&&this.onLoop()),this.updateTexture())}},g.prototype.updateTexture=function(){var i=this.currentFrame;this._previousFrame!==i&&(this._previousFrame=i,this._texture=this._textures[i],this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this.uvs=this._texture._uvs.uvsFloat32,this.updateAnchor&&this._anchor.copyFrom(this._texture.defaultAnchor),this.onFrameChange&&this.onFrameChange(this.currentFrame))},g.prototype.destroy=function(i){this.stop(),e.prototype.destroy.call(this,i),this.onComplete=null,this.onFrameChange=null,this.onLoop=null},g.fromFrames=function(i){for(var I=[],n=0;n>8&15|g>>4&240,g>>4&15|g&240,(g&15)<<4|g&15,1):I===8?PR(g>>24&255,g>>16&255,g>>8&255,(g&255)/255):I===4?PR(g>>12&15|g>>8&240,g>>8&15|g>>4&240,g>>4&15|g&240,((g&15)<<4|g&15)/255):null):(g=RJe.exec(e))?new IC(g[1],g[2],g[3],1):(g=VJe.exec(e))?new IC(g[1]*255/100,g[2]*255/100,g[3]*255/100,1):(g=WJe.exec(e))?PR(g[1],g[2],g[3],g[4]):(g=XJe.exec(e))?PR(g[1]*255/100,g[2]*255/100,g[3]*255/100,g[4]):(g=HJe.exec(e))?qee(g[1],g[2]/100,g[3]/100,1):(g=TJe.exec(e))?qee(g[1],g[2]/100,g[3]/100,g[4]):_ee.hasOwnProperty(e)?Qee(_ee[e]):e==="transparent"?new IC(NaN,NaN,NaN,0):null}function Qee(e){return new IC(e>>16&255,e>>8&255,e&255,1)}function PR(e,g,I,i){return i<=0&&(e=g=I=NaN),new IC(e,g,I,i)}function Tpe(e){return e instanceof X0||(e=$d(e)),e?(e=e.rgb(),new IC(e.r,e.g,e.b,e.opacity)):new IC}function V9(e,g,I,i){return arguments.length===1?Tpe(e):new IC(e,g,I,i??1)}function IC(e,g,I,i){this.r=+e,this.g=+g,this.b=+I,this.opacity=+i}GT(IC,V9,OU(X0,{brighter:function(e){return e=e==null?mb:Math.pow(mb,e),new IC(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=e==null?jd:Math.pow(jd,e),new IC(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:jee,formatHex:jee,formatRgb:$ee,toString:$ee}));function jee(){return"#"+n5(this.r)+n5(this.g)+n5(this.b)}function $ee(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(e===1?")":", "+e+")")}function n5(e){return e=Math.max(0,Math.min(255,Math.round(e)||0)),(e<16?"0":"")+e.toString(16)}function qee(e,g,I,i){return i<=0?e=g=I=NaN:I<=0||I>=1?e=g=NaN:g<=0&&(e=NaN),new Pa(e,g,I,i)}function Npe(e){if(e instanceof Pa)return new Pa(e.h,e.s,e.l,e.opacity);if(e instanceof X0||(e=$d(e)),!e)return new Pa;if(e instanceof Pa)return e;e=e.rgb();var g=e.r/255,I=e.g/255,i=e.b/255,n=Math.min(g,I,i),C=Math.max(g,I,i),r=NaN,o=C-n,a=(C+n)/2;return o?(g===C?r=(I-i)/o+(I0&&a<1?0:r,new Pa(r,o,a,e.opacity)}function kJe(e,g,I,i){return arguments.length===1?Npe(e):new Pa(e,g,I,i??1)}function Pa(e,g,I,i){this.h=+e,this.s=+g,this.l=+I,this.opacity=+i}GT(Pa,kJe,OU(X0,{brighter:function(e){return e=e==null?mb:Math.pow(mb,e),new Pa(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?jd:Math.pow(jd,e),new Pa(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+(this.h<0)*360,g=isNaN(e)||isNaN(this.s)?0:this.s,I=this.l,i=I+(I<.5?I:1-I)*g,n=2*I-i;return new IC(C5(e>=240?e-240:e+120,n,i),C5(e,n,i),C5(e<120?e+240:e-120,n,i),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(e===1?")":", "+e+")")}}));function C5(e,g,I){return(e<60?g+(I-g)*e/60:e<180?I:e<240?g+(I-g)*(240-e)/60:g)*255}const YJe=Math.PI/180,KJe=180/Math.PI;var kpe=-.14861,_U=1.78277,LU=-.29227,vT=-.90649,vB=1.97294,ete=vB*vT,tte=vB*_U,gte=_U*LU-vT*kpe;function FJe(e){if(e instanceof Wd)return new Wd(e.h,e.s,e.l,e.opacity);e instanceof IC||(e=Tpe(e));var g=e.r/255,I=e.g/255,i=e.b/255,n=(gte*i+ete*g-tte*I)/(gte+ete-tte),C=i-n,r=(vB*(I-n)-LU*C)/vT,o=Math.sqrt(r*r+C*C)/(vB*n*(1-n)),a=o?Math.atan2(r,C)*KJe-120:NaN;return new Wd(a<0?a+360:a,o,n,e.opacity)}function Pc(e,g,I,i){return arguments.length===1?FJe(e):new Wd(e,g,I,i??1)}function Wd(e,g,I,i){this.h=+e,this.s=+g,this.l=+I,this.opacity=+i}GT(Wd,Pc,OU(X0,{brighter:function(e){return e=e==null?mb:Math.pow(mb,e),new Wd(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?jd:Math.pow(jd,e),new Wd(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*YJe,g=+this.l,I=isNaN(this.s)?0:this.s*g*(1-g),i=Math.cos(e),n=Math.sin(e);return new IC(255*(g+I*(kpe*i+_U*n)),255*(g+I*(LU*i+vT*n)),255*(g+I*(vB*i)),this.opacity)}}));function Ype(e,g){return eg?1:e>=g?0:NaN}function UU(e){let g=e,I=e;e.length===1&&(g=(r,o)=>e(r)-o,I=DJe(e));function i(r,o,a,s){for(a==null&&(a=0),s==null&&(s=r.length);a>>1;I(r[A],o)<0?a=A+1:s=A}return a}function n(r,o,a,s){for(a==null&&(a=0),s==null&&(s=r.length);a>>1;I(r[A],o)>0?s=A:a=A+1}return a}function C(r,o,a,s){a==null&&(a=0),s==null&&(s=r.length);const A=i(r,o,a,s-1);return A>a&&g(r[A-1],o)>-g(r[A],o)?A-1:A}return{left:i,center:C,right:n}}function DJe(e){return(g,I)=>Ype(e(g),I)}function xJe(e){return e===null?NaN:+e}const EJe=UU(Ype),MJe=EJe.right;UU(xJe).center;const zJe=MJe;let PJe=class extends Map{constructor(g,I=_Je){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:I}}),g!=null)for(const[i,n]of g)this.set(i,n)}get(g){return super.get(Ite(this,g))}has(g){return super.has(Ite(this,g))}set(g,I){return super.set(JJe(this,g),I)}delete(g){return super.delete(OJe(this,g))}};function Ite({_intern:e,_key:g},I){const i=g(I);return e.has(i)?e.get(i):I}function JJe({_intern:e,_key:g},I){const i=g(I);return e.has(i)?e.get(i):(e.set(i,I),I)}function OJe({_intern:e,_key:g},I){const i=g(I);return e.has(i)&&(I=e.get(I),e.delete(i)),I}function _Je(e){return e!==null&&typeof e=="object"?e.valueOf():e}function ite(e){return e}function BT(e,...g){return LJe(e,ite,ite,g)}function LJe(e,g,I,i){return function n(C,r){if(r>=i.length)return I(C);const o=new PJe,a=i[r++];let s=-1;for(const A of C){const l=a(A,++s,C),c=o.get(l);c?c.push(A):o.set(l,[A])}for(const[A,l]of o)o.set(A,n(l,r));return g(o)}(e,0)}var I3=Math.sqrt(50),i3=Math.sqrt(10),n3=Math.sqrt(2);function UJe(e,g,I){var i,n=-1,C,r,o;if(g=+g,e=+e,I=+I,e===g&&I>0)return[e];if((i=g0){let a=Math.round(e/o),s=Math.round(g/o);for(a*og&&--s,r=new Array(C=s-a+1);++ng&&--s,r=new Array(C=s-a+1);++n=0?(C>=I3?10:C>=i3?5:C>=n3?2:1)*Math.pow(10,n):-Math.pow(10,-n)/(C>=I3?10:C>=i3?5:C>=n3?2:1)}function QJe(e,g,I){var i=Math.abs(g-e)/Math.max(0,I),n=Math.pow(10,Math.floor(Math.log(i)/Math.LN10)),C=i/n;return C>=I3?n*=10:C>=i3?n*=5:C>=n3&&(n*=2),g=i)&&(I=i);else{let i=-1;for(let n of e)(n=g(n,++i,e))!=null&&(I=n)&&(I=n)}return I}function k1(e,g){let I;if(g===void 0)for(const i of e)i!=null&&(I>i||I===void 0&&i>=i)&&(I=i);else{let i=-1;for(let n of e)(n=g(n,++i,e))!=null&&(I>n||I===void 0&&n>=n)&&(I=n)}return I}function jJe(e,g,I){e=+e,g=+g,I=(n=arguments.length)<2?(g=e,e=0,1):n<3?1:+I;for(var i=-1,n=Math.max(0,Math.ceil((g-e)/I))|0,C=new Array(n);++i1;){for(let o=0;o1;n--,C--){const r=[];for(let o=0,a;o"u")e=.5;else if(e===0||e===1)return e;const I=Rr(e,g)+Rr(1-e,g),i=I-1;return Dy(i/I)},projectionratio:function(e,g){if(g!==2&&g!==3)return!1;if(typeof e>"u")e=.5;else if(e===0||e===1)return e;const I=Rr(1-e,g),i=Rr(e,g)+I;return I/i},lli8:function(e,g,I,i,n,C,r,o){const a=(e*i-g*I)*(n-r)-(e-I)*(n*o-C*r),s=(e*i-g*I)*(C-o)-(g-i)*(n*o-C*r),A=(e-I)*(C-o)-(g-i)*(n-r);return A==0?!1:{x:a/A,y:s/A}},lli4:function(e,g,I,i){const n=e.x,C=e.y,r=g.x,o=g.y,a=I.x,s=I.y,A=i.x,l=i.y;return mt.lli8(n,C,r,o,a,s,A,l)},lli:function(e,g){return mt.lli4(e,e.c,g,g.c)},makeline:function(e,g){const I=e.x,i=e.y,n=g.x,C=g.y,r=(n-I)/3,o=(C-i)/3;return new Ii(I,i,I+r,i+o,I+2*r,i+2*o,n,C)},findbbox:function(e){let g=r5,I=r5,i=o5,n=o5;return e.forEach(function(C){const r=C.bbox();g>r.x.min&&(g=r.x.min),I>r.y.min&&(I=r.y.min),i0&&(A.c1=a,A.c2=s,A.s1=e,A.s2=I,C.push(A))})}),C},makeshape:function(e,g,I){const i=g.points.length,n=e.points.length,C=mt.makeline(g.points[i-1],e.points[0]),r=mt.makeline(e.points[n-1],g.points[0]),o={startcap:C,forward:e,back:g,endcap:r,bbox:mt.findbbox([C,e,g,r])};return o.intersections=function(a){return mt.shapeintersections(o,o.bbox,a,a.bbox,I)},o},getminmax:function(e,g,I){if(!I)return{min:0,max:0};let i=r5,n=o5,C,r;I.indexOf(0)===-1&&(I=[0].concat(I)),I.indexOf(1)===-1&&I.push(1);for(let o=0,a=I.length;on&&(n=r[g]);return{min:i,mid:(i+n)/2,max:n,size:n-i}},align:function(e,g){const I=g.p1.x,i=g.p1.y,n=-xy(g.p2.y-i,g.p2.x-I),C=function(r){return{x:(r.x-I)*EA(n)-(r.y-i)*Tm(n),y:(r.x-I)*Tm(n)+(r.y-i)*EA(n)}};return e.map(C)},roots:function(e,g){g=g||{p1:{x:0,y:0},p2:{x:1,y:0}};const I=e.length-1,i=mt.align(e,g),n=function(G){return 0<=G&&G<=1};if(I===2){const G=i[0].y,v=i[1].y,w=i[2].y,R=G-2*v+w;if(R!==0){const S=-ml(v*v-G*w),X=-G+v,W=-(S+X)/R,V=-(-S+X)/R;return[W,V].filter(n)}else if(v!==w&&R===0)return[(2*v-w)/(2*v-2*w)].filter(n);return[]}const C=i[0].y,r=i[1].y,o=i[2].y,a=i[3].y;let s=-C+3*r-3*o+a,A=3*C-6*r+3*o,l=-3*C+3*r,c=C;if(mt.approximately(s,0)){if(mt.approximately(A,0))return mt.approximately(l,0)?[]:[-c/l].filter(n);const G=ml(l*l-4*A*c),v=2*A;return[(G-l)/v,(-l-G)/v].filter(n)}A/=s,l/=s,c/=s;const u=(3*l-A*A)/3,d=u/3,h=(2*A*A*A-9*A*l+27*c)/27,m=h/2,f=m*m+d*d*d;let b,p,y,Z,B;if(f<0){const G=-u/3,v=G*G*G,w=ml(v),R=-h/(2*w),S=R<-1?-1:R>1?1:R,X=$Je(S),W=Ey(w),V=2*W;return y=V*EA(X/3)-A/3,Z=V*EA((X+JR)/3)-A/3,B=V*EA((X+2*JR)/3)-A/3,[y,Z,B].filter(n)}else{if(f===0)return b=m<0?Ey(-m):-Ey(m),y=2*b-A/3,Z=-b-A/3,[y,Z].filter(n);{const G=ml(f);return b=Ey(-m+G),p=Ey(m+G),[b-p-A/3].filter(n)}}},droots:function(e){if(e.length===3){const g=e[0],I=e[1],i=e[2],n=g-2*I+i;if(n!==0){const C=-ml(I*I-g*i),r=-g+I,o=-(C+r)/n,a=-(-C+r)/n;return[o,a]}else if(I!==i&&n===0)return[(2*I-i)/(2*(I-i))];return[]}if(e.length===2){const g=e[0],I=e[1];return g!==I?[g/(g-I)]:[]}return[]},curvature:function(e,g,I,i,n){let C,r,o,a,s=0,A=0;const l=mt.compute(e,g),c=mt.compute(e,I),u=l.x*l.x+l.y*l.y;if(i?(C=ml(Rr(l.y*c.z-c.y*l.z,2)+Rr(l.z*c.x-c.z*l.x,2)+Rr(l.x*c.y-c.x*l.y,2)),r=Rr(u+l.z*l.z,3/2)):(C=l.x*c.y-l.y*c.x,r=Rr(u,3/2)),C===0||r===0)return{k:0,r:0};if(s=C/r,A=r/C,!n){const d=mt.curvature(e-.001,g,I,i,!0).k,h=mt.curvature(e+.001,g,I,i,!0).k;a=(h-s+(s-d))/2,o=(Dy(h-s)+Dy(s-d))/2}return{k:s,r:A,dk:a,adk:o}},inflections:function(e){if(e.length<4)return[];const g=mt.align(e,{p1:e[0],p2:e.slice(-1)[0]}),I=g[2].x*g[1].y,i=g[3].x*g[1].y,n=g[1].x*g[2].y,C=g[3].x*g[2].y,r=18*(-3*I+2*i+3*n-C),o=18*(3*I-i-3*n),a=18*(n-I);if(mt.approximately(r,0)){if(!mt.approximately(o,0)){let c=-a/o;if(0<=c&&c<=1)return[c]}return[]}const s=o*o-4*r*a,A=Math.sqrt(s),l=2*r;return mt.approximately(l,0)?[]:[(A-o)/l,-(o+A)/l].filter(function(c){return 0<=c&&c<=1})},bboxoverlap:function(e,g){const I=["x","y"],i=I.length;for(let n=0,C,r,o,a;n=a)return!1;return!0},expandbox:function(e,g){g.x.mine.x.max&&(e.x.max=g.x.max),g.y.max>e.y.max&&(e.y.max=g.y.max),g.z&&g.z.max>e.z.max&&(e.z.max=g.z.max),e.x.mid=(e.x.min+e.x.max)/2,e.y.mid=(e.y.min+e.y.max)/2,e.z&&(e.z.mid=(e.z.min+e.z.max)/2),e.x.size=e.x.max-e.x.min,e.y.size=e.y.max-e.y.min,e.z&&(e.z.size=e.z.max-e.z.min)},pairiteration:function(e,g,I){const i=e.bbox(),n=g.bbox(),C=1e5,r=I||.5;if(i.x.size+i.y.sizeB||B>G)&&(Z+=JR),Z>G&&(v=G,G=Z,Z=v)):G4){if(arguments.length!==1)throw new Error("Only new Bezier(point[]) is accepted for 4th and higher order curves");n=!0}}else if(C!==6&&C!==8&&C!==9&&C!==12&&arguments.length!==1)throw new Error("Only new Bezier(point[]) is accepted for 4th and higher order curves");const r=this._3d=!n&&(C===9||C===12)||g&&g[0]&&typeof g[0].z<"u",o=this.points=[];for(let c=0,u=r?3:2;cMy(c.y)>1e-4),this._lut=[],this._t1=0,this._t2=1,this.update()}static quadraticFromPoints(g,I,i,n){if(typeof n>"u"&&(n=.5),n===0)return new Ii(I,I,i);if(n===1)return new Ii(g,I,I);const C=Ii.getABC(2,g,I,i,n);return new Ii(g,C.A,i)}static cubicFromPoints(g,I,i,n,C){typeof n>"u"&&(n=.5);const r=Ii.getABC(3,g,I,i,n);typeof C>"u"&&(C=mt.dist(I,r.C));const o=C*(1-n)/n,a=mt.dist(g,i),s=(i.x-g.x)/a,A=(i.y-g.y)/a,l=C*s,c=C*A,u=o*s,d=o*A,h={x:I.x-l,y:I.y-c},m={x:I.x+u,y:I.y+d},f=r.A,b={x:f.x+(h.x-f.x)/(1-n),y:f.y+(h.y-f.y)/(1-n)},p={x:f.x+(m.x-f.x)/n,y:f.y+(m.y-f.y)/n},y={x:g.x+(b.x-g.x)/n,y:g.y+(b.y-g.y)/n},Z={x:i.x+(p.x-i.x)/(1-n),y:i.y+(p.y-i.y)/(1-n)};return new Ii(g,y,Z,i)}static getUtils(){return mt}getUtils(){return Ii.getUtils()}static get PolyBezier(){return W9}valueOf(){return this.toString()}toString(){return mt.pointsToString(this.points)}toSVG(){if(this._3d)return!1;const g=this.points,I=g[0].x,i=g[0].y,n=["M",I,i,this.order===2?"Q":"C"];for(let C=1,r=g.length;C0}length(){return mt.length(this.derivative.bind(this))}static getABC(g=2,I,i,n,C=.5){const r=mt.projectionratio(C,g),o=1-r,a={x:r*I.x+o*n.x,y:r*I.y+o*n.y},s=mt.abcratio(C,g);return{A:{x:i.x+(i.x-a.x)/s,y:i.y+(i.y-a.y)/s},B:i,C:a,S:I,E:n}}getABC(g,I){I=I||this.get(g);let i=this.points[0],n=this.points[this.order];return Ii.getABC(this.order,i,I,n,g)}getLUT(g){if(this.verify(),g=g||100,this._lut.length===g)return this._lut;this._lut=[],g--;for(let I=0,i,n;I1?1:l,c=this.compute(l),c.t=l,c.d=s,c}get(g){return this.compute(g)}point(g){return this.points[g]}compute(g){return this.ratios?mt.computeWithRatios(g,this.points,this.ratios,this._3d):mt.compute(g,this.points,this._3d,this.ratios)}raise(){const g=this.points,I=[g[0]],i=g.length;for(let n=1,C,r;n1;){i=[];for(let r=0,o,a=I.length-1;r=0&&r<=1}),I=I.concat(g[i].sort(mt.numberSort))}).bind(this)),g.values=I.sort(mt.numberSort).filter(function(i,n){return I.indexOf(i)===n}),g}bbox(){const g=this.extrema(),I={};return this.dims.forEach((function(i){I[i]=mt.getminmax(this,i,g[i])}).bind(this)),I}overlaps(g){const I=this.bbox(),i=g.bbox();return mt.bboxoverlap(I,i)}offset(g,I){if(typeof I<"u"){const i=this.get(g),n=this.normal(g),C={c:i,n,x:i.x+n.x*I,y:i.y+n.y*I};return this._3d&&(C.z=i.z+n.z*I),C}if(this._linear){const i=this.normal(0),n=this.points.map(function(C){const r={x:C.x+g*i.x,y:C.y+g*i.y};return C.z&&i.z&&(r.z=C.z+g*i.z),r});return[new Ii(n)]}return this.reduce().map(function(i){return i._linear?i.offset(g)[0]:i.scale(g)})}simple(){if(this.order===3){const n=mt.angle(this.points[0],this.points[3],this.points[1]),C=mt.angle(this.points[0],this.points[3],this.points[2]);if(n>0&&C<0||n<0&&C>0)return!1}const g=this.normal(0),I=this.normal(1);let i=g.x*I.x+g.y*I.y;return this._3d&&(i+=g.z*I.z),My(IOe(i)){if(I===2&&l)return;const c=s[l*I],u=this.derivative(l),d={x:c.x+u.x,y:c.y+u.y};s[l+1]=mt.lli4(c,d,A,a[l+1])}),new Ii(s))}outline(g,I,i,n){I=typeof I>"u"?g:I;const C=this.reduce(),r=C.length,o=[];let a=[],s,A=0,l=this.length();const c=typeof i<"u"&&typeof n<"u";function u(Z,B,G,v,w){return function(R){const S=v/G,X=(v+w)/G,W=B-Z;return mt.map(R,0,1,Z+S*W,Z+X*W)}}C.forEach(function(Z){const B=Z.length();c?(o.push(Z.scale(u(g,i,l,A,B))),a.push(Z.scale(u(-I,-n,l,A,B)))):(o.push(Z.scale(g)),a.push(Z.scale(-I))),A+=B}),a=a.map(function(Z){return s=Z.points,s[3]?Z.points=[s[3],s[2],s[1],s[0]]:Z.points=[s[2],s[1],s[0]],Z}).reverse();const d=o[0].points[0],h=o[r-1].points[o[r-1].points.length-1],m=a[r-1].points[a[r-1].points.length-1],f=a[0].points[0],b=mt.makeline(m,d),p=mt.makeline(h,f),y=[b].concat(o).concat([p]).concat(a);return y.length,new W9(y)}outlineshapes(g,I,i){I=I||g;const n=this.outline(g,I).curves,C=[];for(let r=1,o=n.length;r1,a.endcap.virtual=r{var o=this.get(r);return mt.between(o.x,I,n)&&mt.between(o.y,i,C)})}selfintersects(g){const I=this.reduce(),i=I.length-2,n=[];for(let C=0,r,o,a;C0&&(C=C.concat(o))}),C}arcs(g){return g=g||.5,this._iterate(g,[])}_error(g,I,i,n){const C=(n-i)/4,r=this.get(i+C),o=this.get(n-C),a=mt.dist(g,I),s=mt.dist(g,r),A=mt.dist(g,o);return My(s-a)+My(A-a)}_iterate(g,I){let i=0,n=1,C;do{C=0,n=1;let r=this.get(i),o,a,s,A,l=!1,c=!1,u,d=n,h=1;do if(c=l,A=s,d=(i+n)/2,o=this.get(d),a=this.get(n),s=mt.getccenter(r,o,a),s.interval={start:i,end:n},l=this._error(s,r,i,n)<=g,u=c&&!l,u||(h=n),l){if(n>=1){if(s.interval.end=h=1,A=s,n>1){let f={x:s.x+s.r*tOe(s.e),y:s.y+s.r*gOe(s.e)};s.e+=mt.angle({x:s.x,y:s.y},f,this.get(1))}break}n=n+(n-i)/2}else n=d;while(!u&&C++<100);if(C>=100)break;A=A||s,I.push(A),i=h}while(n<1);return I}}function QU(e,g){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(g).domain(e);break}return this}function nOe(e,g){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof g=="function"?this.interpolator(g):this.range(g);break}}return this}const ote=Symbol("implicit");function X9(){var e=new Map,g=[],I=[],i=ote;function n(C){var r=C+"",o=e.get(r);if(!o){if(i!==ote)return i;e.set(r,o=g.push(C))}return I[(o-1)%I.length]}return n.domain=function(C){if(!arguments.length)return g.slice();g=[],e=new Map;for(const r of C){const o=r+"";e.has(o)||e.set(o,g.push(r))}return n},n.range=function(C){return arguments.length?(I=Array.from(C),n):I.slice()},n.unknown=function(C){return arguments.length?(i=C,n):i},n.copy=function(){return X9(g,I).unknown(i)},QU.apply(n,arguments),n}function Dpe(){var e=X9().unknown(void 0),g=e.domain,I=e.range,i=0,n=1,C,r,o=!1,a=0,s=0,A=.5;delete e.unknown;function l(){var c=g().length,u=n=1?(I=1,g-1):Math.floor(I*g),n=e[i],C=e[i+1],r=i>0?e[i-1]:2*n-C,o=i()=>e;function xpe(e,g){return function(I){return e+I*g}}function oOe(e,g,I){return e=Math.pow(e,I),g=Math.pow(g,I)-e,I=1/I,function(i){return Math.pow(e+i*g,I)}}function aOe(e,g){var I=g-e;return I?xpe(e,I>180||I<-180?I-360*Math.round(I/360):I):ST(isNaN(e)?g:e)}function AOe(e){return(e=+e)==1?Bp:function(g,I){return I-g?oOe(g,I,e):ST(isNaN(g)?I:g)}}function Bp(e,g){var I=g-e;return I?xpe(e,I):ST(isNaN(e)?g:e)}const ate=function e(g){var I=AOe(g);function i(n,C){var r=I((n=V9(n)).r,(C=V9(C)).r),o=I(n.g,C.g),a=I(n.b,C.b),s=Bp(n.opacity,C.opacity);return function(A){return n.r=r(A),n.g=o(A),n.b=a(A),n.opacity=s(A),n+""}}return i.gamma=e,i}(1);function sOe(e){return function(g){var I=g.length,i=new Array(I),n=new Array(I),C=new Array(I),r,o;for(r=0;rI&&(C=g.slice(I,C),o[r]?o[r]+=C:o[++r]=C),(i=i[0])===(n=n[0])?o[r]?o[r]+=n:o[++r]=n:(o[++r]=null,a.push({i:r,x:H9(i,n)})),I=a5.lastIndex;return Ig&&(I=e,e=g,g=I),function(i){return Math.max(e,Math.min(g,i))}}function vOe(e,g,I){var i=e[0],n=e[1],C=g[0],r=g[1];return n2?BOe:vOe,a=s=null,l}function l(c){return c==null||isNaN(c=+c)?C:(a||(a=o(e.map(i),g,I)))(i(r(c)))}return l.invert=function(c){return r(n((s||(s=o(g,e.map(i),H9)))(c)))},l.domain=function(c){return arguments.length?(e=Array.from(c,ZOe),A()):e.slice()},l.range=function(c){return arguments.length?(g=Array.from(c),A()):g.slice()},l.rangeRound=function(c){return g=Array.from(c),I=Epe,A()},l.clamp=function(c){return arguments.length?(r=c?!0:sc,A()):r!==sc},l.interpolate=function(c){return arguments.length?(I=c,A()):I},l.unknown=function(c){return arguments.length?(C=c,l):C},function(c,u){return i=c,n=u,A()}}function ROe(){return wOe()(sc,sc)}function VOe(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function T9(e,g){if((I=(e=g?e.toExponential(g-1):e.toExponential()).indexOf("e"))<0)return null;var I,i=e.slice(0,I);return[i.length>1?i[0]+i.slice(2):i,+e.slice(I+1)]}function fb(e){return e=T9(Math.abs(e)),e?e[1]:NaN}function WOe(e,g){return function(I,i){for(var n=I.length,C=[],r=0,o=e[0],a=0;n>0&&o>0&&(a+o+1>i&&(o=Math.max(1,i-a)),C.push(I.substring(n-=o,n+o)),!((a+=o+1)>i));)o=e[r=(r+1)%e.length];return C.reverse().join(g)}}function XOe(e){return function(g){return g.replace(/[0-9]/g,function(I){return e[+I]})}}var HOe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function N9(e){if(!(g=HOe.exec(e)))throw new Error("invalid format: "+e);var g;return new jU({fill:g[1],align:g[2],sign:g[3],symbol:g[4],zero:g[5],width:g[6],comma:g[7],precision:g[8]&&g[8].slice(1),trim:g[9],type:g[10]})}N9.prototype=jU.prototype;function jU(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}jU.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function TOe(e){e:for(var g=e.length,I=1,i=-1,n;I0&&(i=0);break}return i>0?e.slice(0,i)+e.slice(n+1):e}var Ppe;function NOe(e,g){var I=T9(e,g);if(!I)return e+"";var i=I[0],n=I[1],C=n-(Ppe=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,r=i.length;return C===r?i:C>r?i+new Array(C-r+1).join("0"):C>0?i.slice(0,C)+"."+i.slice(C):"0."+new Array(1-C).join("0")+T9(e,Math.max(0,g+C-1))[0]}function ste(e,g){var I=T9(e,g);if(!I)return e+"";var i=I[0],n=I[1];return n<0?"0."+new Array(-n).join("0")+i:i.length>n+1?i.slice(0,n+1)+"."+i.slice(n+1):i+new Array(n-i.length+2).join("0")}const lte={"%":(e,g)=>(e*100).toFixed(g),b:e=>Math.round(e).toString(2),c:e=>e+"",d:VOe,e:(e,g)=>e.toExponential(g),f:(e,g)=>e.toFixed(g),g:(e,g)=>e.toPrecision(g),o:e=>Math.round(e).toString(8),p:(e,g)=>ste(e*100,g),r:ste,s:NOe,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function cte(e){return e}var ute=Array.prototype.map,dte=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function kOe(e){var g=e.grouping===void 0||e.thousands===void 0?cte:WOe(ute.call(e.grouping,Number),e.thousands+""),I=e.currency===void 0?"":e.currency[0]+"",i=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",C=e.numerals===void 0?cte:XOe(ute.call(e.numerals,String)),r=e.percent===void 0?"%":e.percent+"",o=e.minus===void 0?"−":e.minus+"",a=e.nan===void 0?"NaN":e.nan+"";function s(l){l=N9(l);var c=l.fill,u=l.align,d=l.sign,h=l.symbol,m=l.zero,f=l.width,b=l.comma,p=l.precision,y=l.trim,Z=l.type;Z==="n"?(b=!0,Z="g"):lte[Z]||(p===void 0&&(p=12),y=!0,Z="g"),(m||c==="0"&&u==="=")&&(m=!0,c="0",u="=");var B=h==="$"?I:h==="#"&&/[boxX]/.test(Z)?"0"+Z.toLowerCase():"",G=h==="$"?i:/[%p]/.test(Z)?r:"",v=lte[Z],w=/[defgprs%]/.test(Z);p=p===void 0?6:/[gprs]/.test(Z)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p));function R(S){var X=B,W=G,V,H,Y;if(Z==="c")W=v(S)+W,S="";else{S=+S;var K=S<0||1/S<0;if(S=isNaN(S)?a:v(Math.abs(S),p),y&&(S=TOe(S)),K&&+S==0&&d!=="+"&&(K=!1),X=(K?d==="("?d:o:d==="-"||d==="("?"":d)+X,W=(Z==="s"?dte[8+Ppe/3]:"")+W+(K&&d==="("?")":""),w){for(V=-1,H=S.length;++VY||Y>57){W=(Y===46?n+S.slice(V+1):S.slice(V))+W,S=S.slice(0,V);break}}}b&&!m&&(S=g(S,1/0));var x=X.length+S.length+W.length,J=x>1)+X+S+W+J.slice(x);break;default:S=J+X+S+W;break}return C(S)}return R.toString=function(){return l+""},R}function A(l,c){var u=s((l=N9(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(fb(c)/3)))*3,h=Math.pow(10,-d),m=dte[8+d/3];return function(f){return u(h*f)+m}}return{format:s,formatPrefix:A}}var OR,Jpe,Ope;YOe({thousands:",",grouping:[3],currency:["$",""]});function YOe(e){return OR=kOe(e),Jpe=OR.format,Ope=OR.formatPrefix,OR}function KOe(e){return Math.max(0,-fb(Math.abs(e)))}function FOe(e,g){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(fb(g)/3)))*3-fb(Math.abs(e)))}function DOe(e,g){return e=Math.abs(e),g=Math.abs(g)-e,Math.max(0,fb(g)-fb(e))+1}function xOe(e,g,I,i){var n=QJe(e,g,I),C;switch(i=N9(i??",f"),i.type){case"s":{var r=Math.max(Math.abs(e),Math.abs(g));return i.precision==null&&!isNaN(C=FOe(n,r))&&(i.precision=C),Ope(i,r)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(C=DOe(n,Math.max(Math.abs(e),Math.abs(g))))&&(i.precision=C-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(C=KOe(n))&&(i.precision=C-(i.type==="%")*2);break}}return Jpe(i)}function _pe(e){var g=e.domain;return e.ticks=function(I){var i=g();return UJe(i[0],i[i.length-1],I??10)},e.tickFormat=function(I,i){var n=g();return xOe(n[0],n[n.length-1],I??10,i)},e.nice=function(I){I==null&&(I=10);var i=g(),n=0,C=i.length-1,r=i[n],o=i[C],a,s,A=10;for(o0;){if(s=Kpe(r,o,I),s===a)return i[n]=r,i[C]=o,g(i);if(s>0)r=Math.floor(r/s)*s,o=Math.ceil(o/s)*s;else if(s<0)r=Math.ceil(r*s)/s,o=Math.floor(o*s)/s;else break;a=s}return e},e}function qd(){var e=ROe();return e.copy=function(){return SOe(e,qd())},QU.apply(e,arguments),_pe(e)}function EOe(){var e=0,g=1,I,i,n,C,r=sc,o=!1,a;function s(l){return l==null||isNaN(l=+l)?a:r(n===0?.5:(l=(C(l)-I)*n,o?Math.max(0,Math.min(1,l)):l))}s.domain=function(l){return arguments.length?([e,g]=l,I=C(e=+e),i=C(g=+g),n=I===i?0:1/(i-I),s):[e,g]},s.clamp=function(l){return arguments.length?(o=!!l,s):o},s.interpolator=function(l){return arguments.length?(r=l,s):r};function A(l){return function(c){var u,d;return arguments.length?([u,d]=c,r=l(u,d),s):[r(0),r(1)]}}return s.range=A(wT),s.rangeRound=A(Epe),s.unknown=function(l){return arguments.length?(a=l,s):a},function(l){return C=l,I=l(e),i=l(g),n=I===i?0:1/(i-I),s}}function MOe(e,g){return g.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function Lpe(){var e=_pe(EOe()(sc));return e.copy=function(){return MOe(e,Lpe())},nOe.apply(e,arguments)}var zOe=typeof global=="object"&&global&&global.Object===Object&&global;const Upe=zOe;var POe=typeof self=="object"&&self&&self.Object===Object&&self,JOe=Upe||POe||Function("return this")();const VA=JOe;var OOe=VA.Symbol;const yA=OOe;var Qpe=Object.prototype,_Oe=Qpe.hasOwnProperty,LOe=Qpe.toString,Py=yA?yA.toStringTag:void 0;function UOe(e){var g=_Oe.call(e,Py),I=e[Py];try{e[Py]=void 0;var i=!0}catch{}var n=LOe.call(e);return i&&(g?e[Py]=I:delete e[Py]),n}var QOe=Object.prototype,jOe=QOe.toString;function $Oe(e){return jOe.call(e)}var qOe="[object Null]",e_e="[object Undefined]",hte=yA?yA.toStringTag:void 0;function H0(e){return e==null?e===void 0?e_e:qOe:hte&&hte in Object(e)?UOe(e):$Oe(e)}function Jc(e){return e!=null&&typeof e=="object"}var t_e="[object Symbol]";function RT(e){return typeof e=="symbol"||Jc(e)&&H0(e)==t_e}function jpe(e,g){for(var I=-1,i=e==null?0:e.length,n=Array(i);++I-1}var J_e=9007199254740991,O_e=/^(?:0|[1-9]\d*)$/;function $U(e,g){var I=typeof e;return g=g??J_e,!!g&&(I=="number"||I!="symbol"&&O_e.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=U_e}function e7(e){return e!=null&&qU(e.length)&&!qpe(e)}function Q_e(e,g,I){if(!Ks(I))return!1;var i=typeof g;return(i=="number"?e7(I)&&$U(g,I.length):i=="string"&&g in I)?VT(I[g],e):!1}var j_e=Object.prototype;function t7(e){var g=e&&e.constructor,I=typeof g=="function"&&g.prototype||j_e;return e===I}function $_e(e,g){for(var I=-1,i=Array(e);++I-1}function lUe(e,g){var I=this.__data__,i=XT(I,e);return i<0?(++this.size,I.push([e,g])):I[i][1]=g,this}function js(e){var g=-1,I=e==null?0:e.length;for(this.clear();++g=g?e:g)),e}function XUe(){this.__data__=new js,this.size=0}function HUe(e){var g=this.__data__,I=g.delete(e);return this.size=g.size,I}function TUe(e){return this.__data__.get(e)}function NUe(e){return this.__data__.has(e)}var kUe=200;function YUe(e,g){var I=this.__data__;if(I instanceof js){var i=I.__data__;if(!SB||i.lengtho))return!1;var s=C.get(e),A=C.get(g);if(s&&A)return s==g&&A==e;var l=-1,c=!0,u=I&GQe?new RB:void 0;for(C.set(e,g),C.set(g,e);++l=f4e){var s=g?null:m4e(e);if(s)return o7(s);r=!1,n=Zbe,a=new RB}else a=g?[]:o;e:for(;++ilOe(e[e.length-1]);var y4e=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(WA);const Z4e=T0(y4e);var G4e=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(WA);const v4e=T0(G4e);var B4e=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(WA);const S4e=T0(B4e);var w4e=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(WA);const R4e=T0(w4e);var V4e=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(WA);const W4e=T0(V4e);var X4e=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(WA);const H4e=T0(X4e);function T4e(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-e*(35.34-e*(2381.73-e*(6402.7-e*(7024.72-e*2710.57)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+e*(170.73+e*(52.82-e*(131.46-e*(176.58-e*67.37)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+e*(442.36-e*(2482.43-e*(6167.24-e*(6614.94-e*2475.67)))))))+")"}var N4e=zpe(Pc(-100,.75,.35),Pc(80,1.5,.8));zpe(Pc(260,.75,.35),Pc(80,1.5,.8));Pc();function kT(e){var g=e.length;return function(I){return e[Math.max(0,Math.min(g-1,Math.floor(I*g)))]}}const Rbe=kT(WA("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));kT(WA("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));kT(WA("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));kT(WA("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));var th={},YT={};YT.byteLength=K4e;YT.toByteArray=D4e;YT.fromByteArray=M4e;var Ja=[],Xr=[],k4e=typeof Uint8Array<"u"?Uint8Array:Array,c5="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var Nm=0,Y4e=c5.length;Nm0)throw new Error("Invalid string. Length must be a multiple of 4");var I=e.indexOf("=");I===-1&&(I=g);var i=I===g?0:4-I%4;return[I,i]}function K4e(e){var g=Vbe(e),I=g[0],i=g[1];return(I+i)*3/4-i}function F4e(e,g,I){return(g+I)*3/4-I}function D4e(e){var g,I=Vbe(e),i=I[0],n=I[1],C=new k4e(F4e(e,i,n)),r=0,o=n>0?i-4:i,a;for(a=0;a>16&255,C[r++]=g>>8&255,C[r++]=g&255;return n===2&&(g=Xr[e.charCodeAt(a)]<<2|Xr[e.charCodeAt(a+1)]>>4,C[r++]=g&255),n===1&&(g=Xr[e.charCodeAt(a)]<<10|Xr[e.charCodeAt(a+1)]<<4|Xr[e.charCodeAt(a+2)]>>2,C[r++]=g>>8&255,C[r++]=g&255),C}function x4e(e){return Ja[e>>18&63]+Ja[e>>12&63]+Ja[e>>6&63]+Ja[e&63]}function E4e(e,g,I){for(var i,n=[],C=g;Co?o:r+C));return i===1?(g=e[I-1],n.push(Ja[g>>2]+Ja[g<<4&63]+"==")):i===2&&(g=(e[I-2]<<8)+e[I-1],n.push(Ja[g>>10]+Ja[g>>4&63]+Ja[g<<2&63]+"=")),n.join("")}var A7={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */A7.read=function(e,g,I,i,n){var C,r,o=n*8-i-1,a=(1<>1,A=-7,l=I?n-1:0,c=I?-1:1,u=e[g+l];for(l+=c,C=u&(1<<-A)-1,u>>=-A,A+=o;A>0;C=C*256+e[g+l],l+=c,A-=8);for(r=C&(1<<-A)-1,C>>=-A,A+=i;A>0;r=r*256+e[g+l],l+=c,A-=8);if(C===0)C=1-s;else{if(C===a)return r?NaN:(u?-1:1)*(1/0);r=r+Math.pow(2,i),C=C-s}return(u?-1:1)*r*Math.pow(2,C-i)};A7.write=function(e,g,I,i,n,C){var r,o,a,s=C*8-n-1,A=(1<>1,c=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,u=i?0:C-1,d=i?1:-1,h=g<0||g===0&&1/g<0?1:0;for(g=Math.abs(g),isNaN(g)||g===1/0?(o=isNaN(g)?1:0,r=A):(r=Math.floor(Math.log(g)/Math.LN2),g*(a=Math.pow(2,-r))<1&&(r--,a*=2),r+l>=1?g+=c/a:g+=c*Math.pow(2,1-l),g*a>=2&&(r++,a/=2),r+l>=A?(o=0,r=A):r+l>=1?(o=(g*a-1)*Math.pow(2,n),r=r+l):(o=g*Math.pow(2,l-1)*Math.pow(2,n),r=0));n>=8;e[I+u]=o&255,u+=d,o/=256,n-=8);for(r=r<0;e[I+u]=r&255,u+=d,r/=256,s-=8);e[I+u-d]|=h*128};/*! + */VA.add(Ofe,Qfe,Ufe,spe,Zpe,PU,Spe,Xpe,gpe,ope,ape,vpe,ufe,$fe);var NJe={AlphaFilter:oJe,BlurFilter:uJe,BlurFilterPass:t3,ColorMatrixFilter:i3,DisplacementFilter:bJe,FXAAFilter:vJe,NoiseFilter:wJe};const Dpe=Object.freeze(Object.defineProperty({__proto__:null,get ALPHA_MODES(){return oo},AbstractBatchRenderer:Dfe,AbstractMultiResource:ST,AbstractRenderer:Yfe,AccessibilityManager:Ofe,AnimatedSprite:TJe,AppLoaderPlugin:$fe,Application:kpe,ArrayResource:fU,Attribute:NM,get BLEND_MODES(){return Jt},get BUFFER_BITS(){return aB},get BUFFER_TYPE(){return Ca},BaseImageResource:yA,BasePrepare:bpe,BaseRenderTexture:vU,BaseTexture:vg,BatchDrawCall:w9,BatchGeometry:zU,BatchPluginFactory:Efe,BatchRenderer:PU,BatchShaderGenerator:xfe,BatchSystem:RU,BatchTextureArray:R9,BitmapFont:es,BitmapFontData:vB,BitmapFontLoader:Xpe,BitmapText:nJe,BlobResource:tpe,Bounds:fB,BrowserAdapter:Vme,Buffer:fI,BufferResource:Lh,get CLEAR_MODES(){return MC},get COLOR_MASK_BITS(){return AM},CanvasResource:pU,Circle:Afe,CompressedTextureLoader:gpe,CompressedTextureResource:W9,Container:da,ContextSystem:VU,CountLimiter:ppe,CubeResource:bU,DDSLoader:ope,DEG_TO_RAD:afe,get DRAW_MODES(){return UC},DisplayObject:eI,get ENV(){return pA},Ellipse:sfe,get ExtensionType(){return _g},Extract:Qfe,get FORMATS(){return ft},FORMATS_TO_COMPONENTS:npe,FillStyle:OU,Filter:js,FilterState:ffe,FilterSystem:wU,Framebuffer:S9,FramebufferSystem:WU,get GC_MODES(){return sB},GLFramebuffer:pfe,GLProgram:Tfe,GLTexture:N1,GRAPHICS_CURVES:db,Geometry:V0,GeometrySystem:XU,Graphics:GB,GraphicsData:OM,GraphicsGeometry:mpe,IGLUniformData:uze,INSTALLED:pB,get INTERNAL_FORMATS(){return Ig},INTERNAL_FORMAT_TO_BYTES_PER_PIXEL:yB,ImageBitmapResource:GU,ImageResource:wT,InteractionData:kM,InteractionEvent:_fe,InteractionManager:Ufe,InteractionTrackingData:k1,KTXLoader:ape,get LINE_CAP(){return ds},get LINE_JOIN(){return Ja},LineStyle:fpe,Loader:bB,get LoaderResource(){return xi},get MASK_TYPES(){return oI},get MIPMAP_MODES(){return Co},get MSAA_QUALITY(){return pi},MaskData:bfe,MaskSystem:HU,Matrix:GI,Mesh:mb,MeshBatchUvs:wpe,MeshGeometry:HS,MeshMaterial:fb,NineSlicePlane:XJe,ObjectRenderer:XS,ObservablePoint:sd,PI_2:mB,get PRECISION(){return Yr},ParticleContainer:ZPe,ParticleRenderer:spe,PlaneGeometry:Ype,Point:Ai,Polygon:MG,Prepare:Zpe,Program:W0,ProjectionSystem:kU,Quad:mfe,QuadUv:SU,RAD_TO_DEG:ofe,get RENDERER_TYPE(){return sb},Rectangle:wg,RenderTexture:Ks,RenderTexturePool:hfe,RenderTextureSystem:YU,Renderer:EU,ResizePlugin:Npe,Resource:Qd,RopeGeometry:Kpe,RoundedRectangle:lfe,Runner:LI,get SAMPLER_TYPES(){return AB},get SCALE_MODES(){return ea},get SHAPES(){return XI},SVGResource:yU,ScissorSystem:TU,Shader:Rs,ShaderSystem:KU,SimpleMesh:WJe,SimplePlane:Fpe,SimpleRope:VJe,Sprite:X0,SpriteMaskFilter:wfe,Spritesheet:Gpe,SpritesheetLoader:vpe,State:gu,StateSystem:FU,StencilSystem:NU,System:Wze,get TARGETS(){return Xc},get TEXT_GRADIENT(){return hb},get TYPES(){return Et},TYPES_TO_BYTES_PER_COMPONENT:xM,TYPES_TO_BYTES_PER_PIXEL:rpe,TemporaryDisplayObject:mU,Text:UU,TextFormat:Rpe,TextMetrics:pa,TextStyle:jd,Texture:gg,TextureGCSystem:DU,TextureLoader:qfe,TextureMatrix:RT,TextureSystem:xU,TextureUvs:BU,Ticker:UI,TickerPlugin:ufe,TilingSprite:OPe,TilingSpriteRenderer:Spe,TimeLimiter:JPe,Transform:dU,get UPDATE_PRIORITY(){return bA},UniformGroup:Hc,VERSION:Pfe,VideoResource:ZU,ViewableBuffer:V9,get WRAP_MODES(){return ra},XMLFormat:X9,XMLStringFormat:Vpe,accessibleTarget:Jfe,autoDetectFormat:jU,autoDetectRenderer:Kfe,autoDetectResource:BT,checkMaxIfStatementsInShader:Sfe,createUBOElements:Wfe,defaultFilterVertex:MU,defaultVertex:Ffe,extensions:VA,filters:NJe,generateProgram:Nfe,generateUniformBufferSync:Hfe,getTestContext:Gfe,getUBOData:Xfe,graphicsUtils:RPe,groupD8:Vi,interactiveTarget:Lfe,isMobile:QC,parseDDS:Ipe,parseKTX:Cpe,resources:Mfe,settings:Gt,systems:zfe,uniformParsers:Wd,utils:K3e},Symbol.toStringTag,{value:"Module"}));function VT(e,g,i){e.prototype=g.prototype=i,i.constructor=e}function $U(e,g){var i=Object.create(e.prototype);for(var I in g)i[I]=g[I];return i}function T0(){}var $d=.7,pb=1/$d,Bp="\\s*([+-]?\\d+)\\s*",BB="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",lA="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",kJe=/^#([0-9a-f]{3,8})$/,YJe=new RegExp("^rgb\\("+[Bp,Bp,Bp]+"\\)$"),KJe=new RegExp("^rgb\\("+[lA,lA,lA]+"\\)$"),FJe=new RegExp("^rgba\\("+[Bp,Bp,Bp,BB]+"\\)$"),DJe=new RegExp("^rgba\\("+[lA,lA,lA,BB]+"\\)$"),xJe=new RegExp("^hsl\\("+[BB,lA,lA]+"\\)$"),EJe=new RegExp("^hsla\\("+[BB,lA,lA,BB]+"\\)$"),jee={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};VT(T0,qd,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:$ee,formatHex:$ee,formatHsl:MJe,formatRgb:qee,toString:qee});function $ee(){return this.rgb().formatHex()}function MJe(){return Epe(this).formatHsl()}function qee(){return this.rgb().formatRgb()}function qd(e){var g,i;return e=(e+"").trim().toLowerCase(),(g=kJe.exec(e))?(i=g[1].length,g=parseInt(g[1],16),i===6?ete(g):i===3?new ir(g>>8&15|g>>4&240,g>>4&15|g&240,(g&15)<<4|g&15,1):i===8?OR(g>>24&255,g>>16&255,g>>8&255,(g&255)/255):i===4?OR(g>>12&15|g>>8&240,g>>8&15|g>>4&240,g>>4&15|g&240,((g&15)<<4|g&15)/255):null):(g=YJe.exec(e))?new ir(g[1],g[2],g[3],1):(g=KJe.exec(e))?new ir(g[1]*255/100,g[2]*255/100,g[3]*255/100,1):(g=FJe.exec(e))?OR(g[1],g[2],g[3],g[4]):(g=DJe.exec(e))?OR(g[1]*255/100,g[2]*255/100,g[3]*255/100,g[4]):(g=xJe.exec(e))?ite(g[1],g[2]/100,g[3]/100,1):(g=EJe.exec(e))?ite(g[1],g[2]/100,g[3]/100,g[4]):jee.hasOwnProperty(e)?ete(jee[e]):e==="transparent"?new ir(NaN,NaN,NaN,0):null}function ete(e){return new ir(e>>16&255,e>>8&255,e&255,1)}function OR(e,g,i,I){return I<=0&&(e=g=i=NaN),new ir(e,g,i,I)}function xpe(e){return e instanceof T0||(e=qd(e)),e?(e=e.rgb(),new ir(e.r,e.g,e.b,e.opacity)):new ir}function H9(e,g,i,I){return arguments.length===1?xpe(e):new ir(e,g,i,I??1)}function ir(e,g,i,I){this.r=+e,this.g=+g,this.b=+i,this.opacity=+I}VT(ir,H9,$U(T0,{brighter:function(e){return e=e==null?pb:Math.pow(pb,e),new ir(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=e==null?$d:Math.pow($d,e),new ir(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:tte,formatHex:tte,formatRgb:gte,toString:gte}));function tte(){return"#"+s5(this.r)+s5(this.g)+s5(this.b)}function gte(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(e===1?")":", "+e+")")}function s5(e){return e=Math.max(0,Math.min(255,Math.round(e)||0)),(e<16?"0":"")+e.toString(16)}function ite(e,g,i,I){return I<=0?e=g=i=NaN:i<=0||i>=1?e=g=NaN:g<=0&&(e=NaN),new Oa(e,g,i,I)}function Epe(e){if(e instanceof Oa)return new Oa(e.h,e.s,e.l,e.opacity);if(e instanceof T0||(e=qd(e)),!e)return new Oa;if(e instanceof Oa)return e;e=e.rgb();var g=e.r/255,i=e.g/255,I=e.b/255,n=Math.min(g,i,I),r=Math.max(g,i,I),C=NaN,o=r-n,a=(r+n)/2;return o?(g===r?C=(i-I)/o+(i0&&a<1?0:C,new Oa(C,o,a,e.opacity)}function zJe(e,g,i,I){return arguments.length===1?Epe(e):new Oa(e,g,i,I??1)}function Oa(e,g,i,I){this.h=+e,this.s=+g,this.l=+i,this.opacity=+I}VT(Oa,zJe,$U(T0,{brighter:function(e){return e=e==null?pb:Math.pow(pb,e),new Oa(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?$d:Math.pow($d,e),new Oa(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+(this.h<0)*360,g=isNaN(e)||isNaN(this.s)?0:this.s,i=this.l,I=i+(i<.5?i:1-i)*g,n=2*i-I;return new ir(l5(e>=240?e-240:e+120,n,I),l5(e,n,I),l5(e<120?e+240:e-120,n,I),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(e===1?")":", "+e+")")}}));function l5(e,g,i){return(e<60?g+(i-g)*e/60:e<180?i:e<240?g+(i-g)*(240-e)/60:g)*255}const PJe=Math.PI/180,JJe=180/Math.PI;var Mpe=-.14861,qU=1.78277,e7=-.29227,WT=-.90649,SB=1.97294,Ite=SB*WT,nte=SB*qU,rte=qU*e7-WT*Mpe;function OJe(e){if(e instanceof Xd)return new Xd(e.h,e.s,e.l,e.opacity);e instanceof ir||(e=xpe(e));var g=e.r/255,i=e.g/255,I=e.b/255,n=(rte*I+Ite*g-nte*i)/(rte+Ite-nte),r=I-n,C=(SB*(i-n)-e7*r)/WT,o=Math.sqrt(C*C+r*r)/(SB*n*(1-n)),a=o?Math.atan2(C,r)*JJe-120:NaN;return new Xd(a<0?a+360:a,o,n,e.opacity)}function Jc(e,g,i,I){return arguments.length===1?OJe(e):new Xd(e,g,i,I??1)}function Xd(e,g,i,I){this.h=+e,this.s=+g,this.l=+i,this.opacity=+I}VT(Xd,Jc,$U(T0,{brighter:function(e){return e=e==null?pb:Math.pow(pb,e),new Xd(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?$d:Math.pow($d,e),new Xd(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*PJe,g=+this.l,i=isNaN(this.s)?0:this.s*g*(1-g),I=Math.cos(e),n=Math.sin(e);return new ir(255*(g+i*(Mpe*I+qU*n)),255*(g+i*(e7*I+WT*n)),255*(g+i*(SB*I)),this.opacity)}}));function zpe(e,g){return eg?1:e>=g?0:NaN}function t7(e){let g=e,i=e;e.length===1&&(g=(C,o)=>e(C)-o,i=_Je(e));function I(C,o,a,s){for(a==null&&(a=0),s==null&&(s=C.length);a>>1;i(C[A],o)<0?a=A+1:s=A}return a}function n(C,o,a,s){for(a==null&&(a=0),s==null&&(s=C.length);a>>1;i(C[A],o)>0?s=A:a=A+1}return a}function r(C,o,a,s){a==null&&(a=0),s==null&&(s=C.length);const A=I(C,o,a,s-1);return A>a&&g(C[A-1],o)>-g(C[A],o)?A-1:A}return{left:I,center:r,right:n}}function _Je(e){return(g,i)=>zpe(e(g),i)}function LJe(e){return e===null?NaN:+e}const UJe=t7(zpe),QJe=UJe.right;t7(LJe).center;const jJe=QJe;let $Je=class extends Map{constructor(g,i=tOe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:i}}),g!=null)for(const[I,n]of g)this.set(I,n)}get(g){return super.get(Cte(this,g))}has(g){return super.has(Cte(this,g))}set(g,i){return super.set(qJe(this,g),i)}delete(g){return super.delete(eOe(this,g))}};function Cte({_intern:e,_key:g},i){const I=g(i);return e.has(I)?e.get(I):i}function qJe({_intern:e,_key:g},i){const I=g(i);return e.has(I)?e.get(I):(e.set(I,i),i)}function eOe({_intern:e,_key:g},i){const I=g(i);return e.has(I)&&(i=e.get(i),e.delete(I)),i}function tOe(e){return e!==null&&typeof e=="object"?e.valueOf():e}function ote(e){return e}function XT(e,...g){return gOe(e,ote,ote,g)}function gOe(e,g,i,I){return function n(r,C){if(C>=I.length)return i(r);const o=new $Je,a=I[C++];let s=-1;for(const A of r){const l=a(A,++s,r),c=o.get(l);c?c.push(A):o.set(l,[A])}for(const[A,l]of o)o.set(A,n(l,C));return g(o)}(e,0)}var a3=Math.sqrt(50),A3=Math.sqrt(10),s3=Math.sqrt(2);function iOe(e,g,i){var I,n=-1,r,C,o;if(g=+g,e=+e,i=+i,e===g&&i>0)return[e];if((I=g0){let a=Math.round(e/o),s=Math.round(g/o);for(a*og&&--s,C=new Array(r=s-a+1);++ng&&--s,C=new Array(r=s-a+1);++n=0?(r>=a3?10:r>=A3?5:r>=s3?2:1)*Math.pow(10,n):-Math.pow(10,-n)/(r>=a3?10:r>=A3?5:r>=s3?2:1)}function IOe(e,g,i){var I=Math.abs(g-e)/Math.max(0,i),n=Math.pow(10,Math.floor(Math.log(I)/Math.LN10)),r=I/n;return r>=a3?n*=10:r>=A3?n*=5:r>=s3&&(n*=2),g=I)&&(i=I);else{let I=-1;for(let n of e)(n=g(n,++I,e))!=null&&(i=n)&&(i=n)}return i}function F1(e,g){let i;if(g===void 0)for(const I of e)I!=null&&(i>I||i===void 0&&I>=I)&&(i=I);else{let I=-1;for(let n of e)(n=g(n,++I,e))!=null&&(i>n||i===void 0&&n>=n)&&(i=n)}return i}function nOe(e,g,i){e=+e,g=+g,i=(n=arguments.length)<2?(g=e,e=0,1):n<3?1:+i;for(var I=-1,n=Math.max(0,Math.ceil((g-e)/i))|0,r=new Array(n);++I1;){for(let o=0;o1;n--,r--){const C=[];for(let o=0,a;o"u")e=.5;else if(e===0||e===1)return e;const i=WC(e,g)+WC(1-e,g),I=i-1;return Ey(I/i)},projectionratio:function(e,g){if(g!==2&&g!==3)return!1;if(typeof e>"u")e=.5;else if(e===0||e===1)return e;const i=WC(1-e,g),I=WC(e,g)+i;return i/I},lli8:function(e,g,i,I,n,r,C,o){const a=(e*I-g*i)*(n-C)-(e-i)*(n*o-r*C),s=(e*I-g*i)*(r-o)-(g-I)*(n*o-r*C),A=(e-i)*(r-o)-(g-I)*(n-C);return A==0?!1:{x:a/A,y:s/A}},lli4:function(e,g,i,I){const n=e.x,r=e.y,C=g.x,o=g.y,a=i.x,s=i.y,A=I.x,l=I.y;return mt.lli8(n,r,C,o,a,s,A,l)},lli:function(e,g){return mt.lli4(e,e.c,g,g.c)},makeline:function(e,g){const i=e.x,I=e.y,n=g.x,r=g.y,C=(n-i)/3,o=(r-I)/3;return new nI(i,I,i+C,I+o,i+2*C,I+2*o,n,r)},findbbox:function(e){let g=c5,i=c5,I=u5,n=u5;return e.forEach(function(r){const C=r.bbox();g>C.x.min&&(g=C.x.min),i>C.y.min&&(i=C.y.min),I0&&(A.c1=a,A.c2=s,A.s1=e,A.s2=i,r.push(A))})}),r},makeshape:function(e,g,i){const I=g.points.length,n=e.points.length,r=mt.makeline(g.points[I-1],e.points[0]),C=mt.makeline(e.points[n-1],g.points[0]),o={startcap:r,forward:e,back:g,endcap:C,bbox:mt.findbbox([r,e,g,C])};return o.intersections=function(a){return mt.shapeintersections(o,o.bbox,a,a.bbox,i)},o},getminmax:function(e,g,i){if(!i)return{min:0,max:0};let I=c5,n=u5,r,C;i.indexOf(0)===-1&&(i=[0].concat(i)),i.indexOf(1)===-1&&i.push(1);for(let o=0,a=i.length;on&&(n=C[g]);return{min:I,mid:(I+n)/2,max:n,size:n-I}},align:function(e,g){const i=g.p1.x,I=g.p1.y,n=-My(g.p2.y-I,g.p2.x-i),r=function(C){return{x:(C.x-i)*MA(n)-(C.y-I)*Nm(n),y:(C.x-i)*Nm(n)+(C.y-I)*MA(n)}};return e.map(r)},roots:function(e,g){g=g||{p1:{x:0,y:0},p2:{x:1,y:0}};const i=e.length-1,I=mt.align(e,g),n=function(G){return 0<=G&&G<=1};if(i===2){const G=I[0].y,v=I[1].y,w=I[2].y,V=G-2*v+w;if(V!==0){const S=-fl(v*v-G*w),X=-G+v,W=-(S+X)/V,R=-(-S+X)/V;return[W,R].filter(n)}else if(v!==w&&V===0)return[(2*v-w)/(2*v-2*w)].filter(n);return[]}const r=I[0].y,C=I[1].y,o=I[2].y,a=I[3].y;let s=-r+3*C-3*o+a,A=3*r-6*C+3*o,l=-3*r+3*C,c=r;if(mt.approximately(s,0)){if(mt.approximately(A,0))return mt.approximately(l,0)?[]:[-c/l].filter(n);const G=fl(l*l-4*A*c),v=2*A;return[(G-l)/v,(-l-G)/v].filter(n)}A/=s,l/=s,c/=s;const u=(3*l-A*A)/3,d=u/3,h=(2*A*A*A-9*A*l+27*c)/27,m=h/2,f=m*m+d*d*d;let b,p,y,Z,B;if(f<0){const G=-u/3,v=G*G*G,w=fl(v),V=-h/(2*w),S=V<-1?-1:V>1?1:V,X=rOe(S),W=zy(w),R=2*W;return y=R*MA(X/3)-A/3,Z=R*MA((X+_R)/3)-A/3,B=R*MA((X+2*_R)/3)-A/3,[y,Z,B].filter(n)}else{if(f===0)return b=m<0?zy(-m):-zy(m),y=2*b-A/3,Z=-b-A/3,[y,Z].filter(n);{const G=fl(f);return b=zy(-m+G),p=zy(m+G),[b-p-A/3].filter(n)}}},droots:function(e){if(e.length===3){const g=e[0],i=e[1],I=e[2],n=g-2*i+I;if(n!==0){const r=-fl(i*i-g*I),C=-g+i,o=-(r+C)/n,a=-(-r+C)/n;return[o,a]}else if(i!==I&&n===0)return[(2*i-I)/(2*(i-I))];return[]}if(e.length===2){const g=e[0],i=e[1];return g!==i?[g/(g-i)]:[]}return[]},curvature:function(e,g,i,I,n){let r,C,o,a,s=0,A=0;const l=mt.compute(e,g),c=mt.compute(e,i),u=l.x*l.x+l.y*l.y;if(I?(r=fl(WC(l.y*c.z-c.y*l.z,2)+WC(l.z*c.x-c.z*l.x,2)+WC(l.x*c.y-c.x*l.y,2)),C=WC(u+l.z*l.z,3/2)):(r=l.x*c.y-l.y*c.x,C=WC(u,3/2)),r===0||C===0)return{k:0,r:0};if(s=r/C,A=C/r,!n){const d=mt.curvature(e-.001,g,i,I,!0).k,h=mt.curvature(e+.001,g,i,I,!0).k;a=(h-s+(s-d))/2,o=(Ey(h-s)+Ey(s-d))/2}return{k:s,r:A,dk:a,adk:o}},inflections:function(e){if(e.length<4)return[];const g=mt.align(e,{p1:e[0],p2:e.slice(-1)[0]}),i=g[2].x*g[1].y,I=g[3].x*g[1].y,n=g[1].x*g[2].y,r=g[3].x*g[2].y,C=18*(-3*i+2*I+3*n-r),o=18*(3*i-I-3*n),a=18*(n-i);if(mt.approximately(C,0)){if(!mt.approximately(o,0)){let c=-a/o;if(0<=c&&c<=1)return[c]}return[]}const s=o*o-4*C*a,A=Math.sqrt(s),l=2*C;return mt.approximately(l,0)?[]:[(A-o)/l,-(o+A)/l].filter(function(c){return 0<=c&&c<=1})},bboxoverlap:function(e,g){const i=["x","y"],I=i.length;for(let n=0,r,C,o,a;n=a)return!1;return!0},expandbox:function(e,g){g.x.mine.x.max&&(e.x.max=g.x.max),g.y.max>e.y.max&&(e.y.max=g.y.max),g.z&&g.z.max>e.z.max&&(e.z.max=g.z.max),e.x.mid=(e.x.min+e.x.max)/2,e.y.mid=(e.y.min+e.y.max)/2,e.z&&(e.z.mid=(e.z.min+e.z.max)/2),e.x.size=e.x.max-e.x.min,e.y.size=e.y.max-e.y.min,e.z&&(e.z.size=e.z.max-e.z.min)},pairiteration:function(e,g,i){const I=e.bbox(),n=g.bbox(),r=1e5,C=i||.5;if(I.x.size+I.y.sizeB||B>G)&&(Z+=_R),Z>G&&(v=G,G=Z,Z=v)):G4){if(arguments.length!==1)throw new Error("Only new Bezier(point[]) is accepted for 4th and higher order curves");n=!0}}else if(r!==6&&r!==8&&r!==9&&r!==12&&arguments.length!==1)throw new Error("Only new Bezier(point[]) is accepted for 4th and higher order curves");const C=this._3d=!n&&(r===9||r===12)||g&&g[0]&&typeof g[0].z<"u",o=this.points=[];for(let c=0,u=C?3:2;cPy(c.y)>1e-4),this._lut=[],this._t1=0,this._t2=1,this.update()}static quadraticFromPoints(g,i,I,n){if(typeof n>"u"&&(n=.5),n===0)return new nI(i,i,I);if(n===1)return new nI(g,i,i);const r=nI.getABC(2,g,i,I,n);return new nI(g,r.A,I)}static cubicFromPoints(g,i,I,n,r){typeof n>"u"&&(n=.5);const C=nI.getABC(3,g,i,I,n);typeof r>"u"&&(r=mt.dist(i,C.C));const o=r*(1-n)/n,a=mt.dist(g,I),s=(I.x-g.x)/a,A=(I.y-g.y)/a,l=r*s,c=r*A,u=o*s,d=o*A,h={x:i.x-l,y:i.y-c},m={x:i.x+u,y:i.y+d},f=C.A,b={x:f.x+(h.x-f.x)/(1-n),y:f.y+(h.y-f.y)/(1-n)},p={x:f.x+(m.x-f.x)/n,y:f.y+(m.y-f.y)/n},y={x:g.x+(b.x-g.x)/n,y:g.y+(b.y-g.y)/n},Z={x:I.x+(p.x-I.x)/(1-n),y:I.y+(p.y-I.y)/(1-n)};return new nI(g,y,Z,I)}static getUtils(){return mt}getUtils(){return nI.getUtils()}static get PolyBezier(){return T9}valueOf(){return this.toString()}toString(){return mt.pointsToString(this.points)}toSVG(){if(this._3d)return!1;const g=this.points,i=g[0].x,I=g[0].y,n=["M",i,I,this.order===2?"Q":"C"];for(let r=1,C=g.length;r0}length(){return mt.length(this.derivative.bind(this))}static getABC(g=2,i,I,n,r=.5){const C=mt.projectionratio(r,g),o=1-C,a={x:C*i.x+o*n.x,y:C*i.y+o*n.y},s=mt.abcratio(r,g);return{A:{x:I.x+(I.x-a.x)/s,y:I.y+(I.y-a.y)/s},B:I,C:a,S:i,E:n}}getABC(g,i){i=i||this.get(g);let I=this.points[0],n=this.points[this.order];return nI.getABC(this.order,I,i,n,g)}getLUT(g){if(this.verify(),g=g||100,this._lut.length===g)return this._lut;this._lut=[],g--;for(let i=0,I,n;i1?1:l,c=this.compute(l),c.t=l,c.d=s,c}get(g){return this.compute(g)}point(g){return this.points[g]}compute(g){return this.ratios?mt.computeWithRatios(g,this.points,this.ratios,this._3d):mt.compute(g,this.points,this._3d,this.ratios)}raise(){const g=this.points,i=[g[0]],I=g.length;for(let n=1,r,C;n1;){I=[];for(let C=0,o,a=i.length-1;C=0&&C<=1}),i=i.concat(g[I].sort(mt.numberSort))}).bind(this)),g.values=i.sort(mt.numberSort).filter(function(I,n){return i.indexOf(I)===n}),g}bbox(){const g=this.extrema(),i={};return this.dims.forEach((function(I){i[I]=mt.getminmax(this,I,g[I])}).bind(this)),i}overlaps(g){const i=this.bbox(),I=g.bbox();return mt.bboxoverlap(i,I)}offset(g,i){if(typeof i<"u"){const I=this.get(g),n=this.normal(g),r={c:I,n,x:I.x+n.x*i,y:I.y+n.y*i};return this._3d&&(r.z=I.z+n.z*i),r}if(this._linear){const I=this.normal(0),n=this.points.map(function(r){const C={x:r.x+g*I.x,y:r.y+g*I.y};return r.z&&I.z&&(C.z=r.z+g*I.z),C});return[new nI(n)]}return this.reduce().map(function(I){return I._linear?I.offset(g)[0]:I.scale(g)})}simple(){if(this.order===3){const n=mt.angle(this.points[0],this.points[3],this.points[1]),r=mt.angle(this.points[0],this.points[3],this.points[2]);if(n>0&&r<0||n<0&&r>0)return!1}const g=this.normal(0),i=this.normal(1);let I=g.x*i.x+g.y*i.y;return this._3d&&(I+=g.z*i.z),Py(sOe(I)){if(i===2&&l)return;const c=s[l*i],u=this.derivative(l),d={x:c.x+u.x,y:c.y+u.y};s[l+1]=mt.lli4(c,d,A,a[l+1])}),new nI(s))}outline(g,i,I,n){i=typeof i>"u"?g:i;const r=this.reduce(),C=r.length,o=[];let a=[],s,A=0,l=this.length();const c=typeof I<"u"&&typeof n<"u";function u(Z,B,G,v,w){return function(V){const S=v/G,X=(v+w)/G,W=B-Z;return mt.map(V,0,1,Z+S*W,Z+X*W)}}r.forEach(function(Z){const B=Z.length();c?(o.push(Z.scale(u(g,I,l,A,B))),a.push(Z.scale(u(-i,-n,l,A,B)))):(o.push(Z.scale(g)),a.push(Z.scale(-i))),A+=B}),a=a.map(function(Z){return s=Z.points,s[3]?Z.points=[s[3],s[2],s[1],s[0]]:Z.points=[s[2],s[1],s[0]],Z}).reverse();const d=o[0].points[0],h=o[C-1].points[o[C-1].points.length-1],m=a[C-1].points[a[C-1].points.length-1],f=a[0].points[0],b=mt.makeline(m,d),p=mt.makeline(h,f),y=[b].concat(o).concat([p]).concat(a);return y.length,new T9(y)}outlineshapes(g,i,I){i=i||g;const n=this.outline(g,i).curves,r=[];for(let C=1,o=n.length;C1,a.endcap.virtual=C{var o=this.get(C);return mt.between(o.x,i,n)&&mt.between(o.y,I,r)})}selfintersects(g){const i=this.reduce(),I=i.length-2,n=[];for(let r=0,C,o,a;r0&&(r=r.concat(o))}),r}arcs(g){return g=g||.5,this._iterate(g,[])}_error(g,i,I,n){const r=(n-I)/4,C=this.get(I+r),o=this.get(n-r),a=mt.dist(g,i),s=mt.dist(g,C),A=mt.dist(g,o);return Py(s-a)+Py(A-a)}_iterate(g,i){let I=0,n=1,r;do{r=0,n=1;let C=this.get(I),o,a,s,A,l=!1,c=!1,u,d=n,h=1;do if(c=l,A=s,d=(I+n)/2,o=this.get(d),a=this.get(n),s=mt.getccenter(C,o,a),s.interval={start:I,end:n},l=this._error(s,C,I,n)<=g,u=c&&!l,u||(h=n),l){if(n>=1){if(s.interval.end=h=1,A=s,n>1){let f={x:s.x+s.r*aOe(s.e),y:s.y+s.r*AOe(s.e)};s.e+=mt.angle({x:s.x,y:s.y},f,this.get(1))}break}n=n+(n-I)/2}else n=d;while(!u&&r++<100);if(r>=100)break;A=A||s,i.push(A),I=h}while(n<1);return i}}function g7(e,g){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(g).domain(e);break}return this}function cOe(e,g){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof g=="function"?this.interpolator(g):this.range(g);break}}return this}const lte=Symbol("implicit");function N9(){var e=new Map,g=[],i=[],I=lte;function n(r){var C=r+"",o=e.get(C);if(!o){if(I!==lte)return I;e.set(C,o=g.push(r))}return i[(o-1)%i.length]}return n.domain=function(r){if(!arguments.length)return g.slice();g=[],e=new Map;for(const C of r){const o=C+"";e.has(o)||e.set(o,g.push(C))}return n},n.range=function(r){return arguments.length?(i=Array.from(r),n):i.slice()},n.unknown=function(r){return arguments.length?(I=r,n):I},n.copy=function(){return N9(g,i).unknown(I)},g7.apply(n,arguments),n}function Ope(){var e=N9().unknown(void 0),g=e.domain,i=e.range,I=0,n=1,r,C,o=!1,a=0,s=0,A=.5;delete e.unknown;function l(){var c=g().length,u=n=1?(i=1,g-1):Math.floor(i*g),n=e[I],r=e[I+1],C=I>0?e[I-1]:2*n-r,o=I()=>e;function _pe(e,g){return function(i){return e+i*g}}function hOe(e,g,i){return e=Math.pow(e,i),g=Math.pow(g,i)-e,i=1/i,function(I){return Math.pow(e+I*g,i)}}function mOe(e,g){var i=g-e;return i?_pe(e,i>180||i<-180?i-360*Math.round(i/360):i):HT(isNaN(e)?g:e)}function fOe(e){return(e=+e)==1?Sp:function(g,i){return i-g?hOe(g,i,e):HT(isNaN(g)?i:g)}}function Sp(e,g){var i=g-e;return i?_pe(e,i):HT(isNaN(e)?g:e)}const cte=function e(g){var i=fOe(g);function I(n,r){var C=i((n=H9(n)).r,(r=H9(r)).r),o=i(n.g,r.g),a=i(n.b,r.b),s=Sp(n.opacity,r.opacity);return function(A){return n.r=C(A),n.g=o(A),n.b=a(A),n.opacity=s(A),n+""}}return I.gamma=e,I}(1);function pOe(e){return function(g){var i=g.length,I=new Array(i),n=new Array(i),r=new Array(i),C,o;for(C=0;Ci&&(r=g.slice(i,r),o[C]?o[C]+=r:o[++C]=r),(I=I[0])===(n=n[0])?o[C]?o[C]+=n:o[++C]=n:(o[++C]=null,a.push({i:C,x:k9(I,n)})),i=d5.lastIndex;return ig&&(i=e,e=g,g=i),function(I){return Math.max(e,Math.min(g,I))}}function HOe(e,g,i){var I=e[0],n=e[1],r=g[0],C=g[1];return n2?TOe:HOe,a=s=null,l}function l(c){return c==null||isNaN(c=+c)?r:(a||(a=o(e.map(I),g,i)))(I(C(c)))}return l.invert=function(c){return C(n((s||(s=o(g,e.map(I),k9)))(c)))},l.domain=function(c){return arguments.length?(e=Array.from(c,WOe),A()):e.slice()},l.range=function(c){return arguments.length?(g=Array.from(c),A()):g.slice()},l.rangeRound=function(c){return g=Array.from(c),i=Lpe,A()},l.clamp=function(c){return arguments.length?(C=c?!0:lc,A()):C!==lc},l.interpolate=function(c){return arguments.length?(i=c,A()):i},l.unknown=function(c){return arguments.length?(r=c,l):r},function(c,u){return I=c,n=u,A()}}function YOe(){return kOe()(lc,lc)}function KOe(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Y9(e,g){if((i=(e=g?e.toExponential(g-1):e.toExponential()).indexOf("e"))<0)return null;var i,I=e.slice(0,i);return[I.length>1?I[0]+I.slice(2):I,+e.slice(i+1)]}function bb(e){return e=Y9(Math.abs(e)),e?e[1]:NaN}function FOe(e,g){return function(i,I){for(var n=i.length,r=[],C=0,o=e[0],a=0;n>0&&o>0&&(a+o+1>I&&(o=Math.max(1,I-a)),r.push(i.substring(n-=o,n+o)),!((a+=o+1)>I));)o=e[C=(C+1)%e.length];return r.reverse().join(g)}}function DOe(e){return function(g){return g.replace(/[0-9]/g,function(i){return e[+i]})}}var xOe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function K9(e){if(!(g=xOe.exec(e)))throw new Error("invalid format: "+e);var g;return new i7({fill:g[1],align:g[2],sign:g[3],symbol:g[4],zero:g[5],width:g[6],comma:g[7],precision:g[8]&&g[8].slice(1),trim:g[9],type:g[10]})}K9.prototype=i7.prototype;function i7(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}i7.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function EOe(e){e:for(var g=e.length,i=1,I=-1,n;i0&&(I=0);break}return I>0?e.slice(0,I)+e.slice(n+1):e}var jpe;function MOe(e,g){var i=Y9(e,g);if(!i)return e+"";var I=i[0],n=i[1],r=n-(jpe=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,C=I.length;return r===C?I:r>C?I+new Array(r-C+1).join("0"):r>0?I.slice(0,r)+"."+I.slice(r):"0."+new Array(1-r).join("0")+Y9(e,Math.max(0,g+r-1))[0]}function dte(e,g){var i=Y9(e,g);if(!i)return e+"";var I=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+I:I.length>n+1?I.slice(0,n+1)+"."+I.slice(n+1):I+new Array(n-I.length+2).join("0")}const hte={"%":(e,g)=>(e*100).toFixed(g),b:e=>Math.round(e).toString(2),c:e=>e+"",d:KOe,e:(e,g)=>e.toExponential(g),f:(e,g)=>e.toFixed(g),g:(e,g)=>e.toPrecision(g),o:e=>Math.round(e).toString(8),p:(e,g)=>dte(e*100,g),r:dte,s:MOe,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function mte(e){return e}var fte=Array.prototype.map,pte=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function zOe(e){var g=e.grouping===void 0||e.thousands===void 0?mte:FOe(fte.call(e.grouping,Number),e.thousands+""),i=e.currency===void 0?"":e.currency[0]+"",I=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",r=e.numerals===void 0?mte:DOe(fte.call(e.numerals,String)),C=e.percent===void 0?"%":e.percent+"",o=e.minus===void 0?"−":e.minus+"",a=e.nan===void 0?"NaN":e.nan+"";function s(l){l=K9(l);var c=l.fill,u=l.align,d=l.sign,h=l.symbol,m=l.zero,f=l.width,b=l.comma,p=l.precision,y=l.trim,Z=l.type;Z==="n"?(b=!0,Z="g"):hte[Z]||(p===void 0&&(p=12),y=!0,Z="g"),(m||c==="0"&&u==="=")&&(m=!0,c="0",u="=");var B=h==="$"?i:h==="#"&&/[boxX]/.test(Z)?"0"+Z.toLowerCase():"",G=h==="$"?I:/[%p]/.test(Z)?C:"",v=hte[Z],w=/[defgprs%]/.test(Z);p=p===void 0?6:/[gprs]/.test(Z)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p));function V(S){var X=B,W=G,R,H,k;if(Z==="c")W=v(S)+W,S="";else{S=+S;var K=S<0||1/S<0;if(S=isNaN(S)?a:v(Math.abs(S),p),y&&(S=EOe(S)),K&&+S==0&&d!=="+"&&(K=!1),X=(K?d==="("?d:o:d==="-"||d==="("?"":d)+X,W=(Z==="s"?pte[8+jpe/3]:"")+W+(K&&d==="("?")":""),w){for(R=-1,H=S.length;++Rk||k>57){W=(k===46?n+S.slice(R+1):S.slice(R))+W,S=S.slice(0,R);break}}}b&&!m&&(S=g(S,1/0));var D=X.length+S.length+W.length,J=D>1)+X+S+W+J.slice(D);break;default:S=J+X+S+W;break}return r(S)}return V.toString=function(){return l+""},V}function A(l,c){var u=s((l=K9(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(bb(c)/3)))*3,h=Math.pow(10,-d),m=pte[8+d/3];return function(f){return u(h*f)+m}}return{format:s,formatPrefix:A}}var LR,$pe,qpe;POe({thousands:",",grouping:[3],currency:["$",""]});function POe(e){return LR=zOe(e),$pe=LR.format,qpe=LR.formatPrefix,LR}function JOe(e){return Math.max(0,-bb(Math.abs(e)))}function OOe(e,g){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(bb(g)/3)))*3-bb(Math.abs(e)))}function _Oe(e,g){return e=Math.abs(e),g=Math.abs(g)-e,Math.max(0,bb(g)-bb(e))+1}function LOe(e,g,i,I){var n=IOe(e,g,i),r;switch(I=K9(I??",f"),I.type){case"s":{var C=Math.max(Math.abs(e),Math.abs(g));return I.precision==null&&!isNaN(r=OOe(n,C))&&(I.precision=r),qpe(I,C)}case"":case"e":case"g":case"p":case"r":{I.precision==null&&!isNaN(r=_Oe(n,Math.max(Math.abs(e),Math.abs(g))))&&(I.precision=r-(I.type==="e"));break}case"f":case"%":{I.precision==null&&!isNaN(r=JOe(n))&&(I.precision=r-(I.type==="%")*2);break}}return $pe(I)}function ebe(e){var g=e.domain;return e.ticks=function(i){var I=g();return iOe(I[0],I[I.length-1],i??10)},e.tickFormat=function(i,I){var n=g();return LOe(n[0],n[n.length-1],i??10,I)},e.nice=function(i){i==null&&(i=10);var I=g(),n=0,r=I.length-1,C=I[n],o=I[r],a,s,A=10;for(o0;){if(s=Ppe(C,o,i),s===a)return I[n]=C,I[r]=o,g(I);if(s>0)C=Math.floor(C/s)*s,o=Math.ceil(o/s)*s;else if(s<0)C=Math.ceil(C*s)/s,o=Math.floor(o*s)/s;else break;a=s}return e},e}function eh(){var e=YOe();return e.copy=function(){return NOe(e,eh())},g7.apply(e,arguments),ebe(e)}function UOe(){var e=0,g=1,i,I,n,r,C=lc,o=!1,a;function s(l){return l==null||isNaN(l=+l)?a:C(n===0?.5:(l=(r(l)-i)*n,o?Math.max(0,Math.min(1,l)):l))}s.domain=function(l){return arguments.length?([e,g]=l,i=r(e=+e),I=r(g=+g),n=i===I?0:1/(I-i),s):[e,g]},s.clamp=function(l){return arguments.length?(o=!!l,s):o},s.interpolator=function(l){return arguments.length?(C=l,s):C};function A(l){return function(c){var u,d;return arguments.length?([u,d]=c,C=l(u,d),s):[C(0),C(1)]}}return s.range=A(TT),s.rangeRound=A(Lpe),s.unknown=function(l){return arguments.length?(a=l,s):a},function(l){return r=l,i=l(e),I=l(g),n=i===I?0:1/(I-i),s}}function QOe(e,g){return g.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function tbe(){var e=ebe(UOe()(lc));return e.copy=function(){return QOe(e,tbe())},cOe.apply(e,arguments)}var jOe=typeof global=="object"&&global&&global.Object===Object&&global;const gbe=jOe;var $Oe=typeof self=="object"&&self&&self.Object===Object&&self,qOe=gbe||$Oe||Function("return this")();const WA=qOe;var e_e=WA.Symbol;const ZA=e_e;var ibe=Object.prototype,t_e=ibe.hasOwnProperty,g_e=ibe.toString,Oy=ZA?ZA.toStringTag:void 0;function i_e(e){var g=t_e.call(e,Oy),i=e[Oy];try{e[Oy]=void 0;var I=!0}catch{}var n=g_e.call(e);return I&&(g?e[Oy]=i:delete e[Oy]),n}var I_e=Object.prototype,n_e=I_e.toString;function r_e(e){return n_e.call(e)}var C_e="[object Null]",o_e="[object Undefined]",bte=ZA?ZA.toStringTag:void 0;function N0(e){return e==null?e===void 0?o_e:C_e:bte&&bte in Object(e)?i_e(e):r_e(e)}function Oc(e){return e!=null&&typeof e=="object"}var a_e="[object Symbol]";function NT(e){return typeof e=="symbol"||Oc(e)&&N0(e)==a_e}function Ibe(e,g){for(var i=-1,I=e==null?0:e.length,n=Array(I);++i-1}var q_e=9007199254740991,eLe=/^(?:0|[1-9]\d*)$/;function I7(e,g){var i=typeof e;return g=g??q_e,!!g&&(i=="number"||i!="symbol"&&eLe.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=iLe}function r7(e){return e!=null&&n7(e.length)&&!rbe(e)}function ILe(e,g,i){if(!Fs(i))return!1;var I=typeof g;return(I=="number"?r7(i)&&I7(g,i.length):I=="string"&&g in i)?kT(i[g],e):!1}var nLe=Object.prototype;function C7(e){var g=e&&e.constructor,i=typeof g=="function"&&g.prototype||nLe;return e===i}function rLe(e,g){for(var i=-1,I=Array(e);++i-1}function bUe(e,g){var i=this.__data__,I=KT(i,e);return I<0?(++this.size,i.push([e,g])):i[I][1]=g,this}function $s(e){var g=-1,i=e==null?0:e.length;for(this.clear();++g=g?e:g)),e}function DUe(){this.__data__=new $s,this.size=0}function xUe(e){var g=this.__data__,i=g.delete(e);return this.size=g.size,i}function EUe(e){return this.__data__.get(e)}function MUe(e){return this.__data__.has(e)}var zUe=200;function PUe(e,g){var i=this.__data__;if(i instanceof $s){var I=i.__data__;if(!RB||I.lengtho))return!1;var s=r.get(e),A=r.get(g);if(s&&A)return s==g&&A==e;var l=-1,c=!0,u=i&XQe?new WB:void 0;for(r.set(e,g),r.set(g,e);++l=S4e){var s=g?null:B4e(e);if(s)return u7(s);C=!1,n=Vbe,a=new WB}else a=g?[]:o;e:for(;++IbOe(e[e.length-1]);var V4e=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(XA);const W4e=k0(V4e);var X4e=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(XA);const H4e=k0(X4e);var T4e=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(XA);const N4e=k0(T4e);var k4e=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(XA);const Y4e=k0(k4e);var K4e=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(XA);const F4e=k0(K4e);var D4e=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(XA);const x4e=k0(D4e);function E4e(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-e*(35.34-e*(2381.73-e*(6402.7-e*(7024.72-e*2710.57)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+e*(170.73+e*(52.82-e*(131.46-e*(176.58-e*67.37)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+e*(442.36-e*(2482.43-e*(6167.24-e*(6614.94-e*2475.67)))))))+")"}var M4e=Qpe(Jc(-100,.75,.35),Jc(80,1.5,.8));Qpe(Jc(260,.75,.35),Jc(80,1.5,.8));Jc();function ET(e){var g=e.length;return function(i){return e[Math.max(0,Math.min(g-1,Math.floor(i*g)))]}}const kbe=ET(XA("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));ET(XA("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));ET(XA("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));ET(XA("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));var gh={},MT={};MT.byteLength=J4e;MT.toByteArray=_4e;MT.fromByteArray=Q4e;var _a=[],TC=[],z4e=typeof Uint8Array<"u"?Uint8Array:Array,p5="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var km=0,P4e=p5.length;km0)throw new Error("Invalid string. Length must be a multiple of 4");var i=e.indexOf("=");i===-1&&(i=g);var I=i===g?0:4-i%4;return[i,I]}function J4e(e){var g=Ybe(e),i=g[0],I=g[1];return(i+I)*3/4-I}function O4e(e,g,i){return(g+i)*3/4-i}function _4e(e){var g,i=Ybe(e),I=i[0],n=i[1],r=new z4e(O4e(e,I,n)),C=0,o=n>0?I-4:I,a;for(a=0;a>16&255,r[C++]=g>>8&255,r[C++]=g&255;return n===2&&(g=TC[e.charCodeAt(a)]<<2|TC[e.charCodeAt(a+1)]>>4,r[C++]=g&255),n===1&&(g=TC[e.charCodeAt(a)]<<10|TC[e.charCodeAt(a+1)]<<4|TC[e.charCodeAt(a+2)]>>2,r[C++]=g>>8&255,r[C++]=g&255),r}function L4e(e){return _a[e>>18&63]+_a[e>>12&63]+_a[e>>6&63]+_a[e&63]}function U4e(e,g,i){for(var I,n=[],r=g;ro?o:C+r));return I===1?(g=e[i-1],n.push(_a[g>>2]+_a[g<<4&63]+"==")):I===2&&(g=(e[i-2]<<8)+e[i-1],n.push(_a[g>>10]+_a[g>>4&63]+_a[g<<2&63]+"=")),n.join("")}var h7={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */h7.read=function(e,g,i,I,n){var r,C,o=n*8-I-1,a=(1<>1,A=-7,l=i?n-1:0,c=i?-1:1,u=e[g+l];for(l+=c,r=u&(1<<-A)-1,u>>=-A,A+=o;A>0;r=r*256+e[g+l],l+=c,A-=8);for(C=r&(1<<-A)-1,r>>=-A,A+=I;A>0;C=C*256+e[g+l],l+=c,A-=8);if(r===0)r=1-s;else{if(r===a)return C?NaN:(u?-1:1)*(1/0);C=C+Math.pow(2,I),r=r-s}return(u?-1:1)*C*Math.pow(2,r-I)};h7.write=function(e,g,i,I,n,r){var C,o,a,s=r*8-n-1,A=(1<>1,c=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,u=I?0:r-1,d=I?1:-1,h=g<0||g===0&&1/g<0?1:0;for(g=Math.abs(g),isNaN(g)||g===1/0?(o=isNaN(g)?1:0,C=A):(C=Math.floor(Math.log(g)/Math.LN2),g*(a=Math.pow(2,-C))<1&&(C--,a*=2),C+l>=1?g+=c/a:g+=c*Math.pow(2,1-l),g*a>=2&&(C++,a/=2),C+l>=A?(o=0,C=A):C+l>=1?(o=(g*a-1)*Math.pow(2,n),C=C+l):(o=g*Math.pow(2,l-1)*Math.pow(2,n),C=0));n>=8;e[i+u]=o&255,u+=d,o/=256,n-=8);for(C=C<0;e[i+u]=C&255,u+=d,C/=256,s-=8);e[i+u-d]|=h*128};/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */(function(e){const g=YT,I=A7,i=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=o,e.SlowBuffer=b,e.INSPECT_MAX_BYTES=50;const n=2147483647;e.kMaxLength=n,o.TYPED_ARRAY_SUPPORT=C(),!o.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function C(){try{const F=new Uint8Array(1),T={foo:function(){return 42}};return Object.setPrototypeOf(T,Uint8Array.prototype),Object.setPrototypeOf(F,T),F.foo()===42}catch{return!1}}Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}});function r(F){if(F>n)throw new RangeError('The value "'+F+'" is invalid for option "size"');const T=new Uint8Array(F);return Object.setPrototypeOf(T,o.prototype),T}function o(F,T,k){if(typeof F=="number"){if(typeof T=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return l(F)}return a(F,T,k)}o.poolSize=8192;function a(F,T,k){if(typeof F=="string")return c(F,T);if(ArrayBuffer.isView(F))return d(F);if(F==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof F);if(tt(F,ArrayBuffer)||F&&tt(F.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(tt(F,SharedArrayBuffer)||F&&tt(F.buffer,SharedArrayBuffer)))return h(F,T,k);if(typeof F=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const Ie=F.valueOf&&F.valueOf();if(Ie!=null&&Ie!==F)return o.from(Ie,T,k);const me=m(F);if(me)return me;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof F[Symbol.toPrimitive]=="function")return o.from(F[Symbol.toPrimitive]("string"),T,k);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof F)}o.from=function(F,T,k){return a(F,T,k)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array);function s(F){if(typeof F!="number")throw new TypeError('"size" argument must be of type number');if(F<0)throw new RangeError('The value "'+F+'" is invalid for option "size"')}function A(F,T,k){return s(F),F<=0?r(F):T!==void 0?typeof k=="string"?r(F).fill(T,k):r(F).fill(T):r(F)}o.alloc=function(F,T,k){return A(F,T,k)};function l(F){return s(F),r(F<0?0:f(F)|0)}o.allocUnsafe=function(F){return l(F)},o.allocUnsafeSlow=function(F){return l(F)};function c(F,T){if((typeof T!="string"||T==="")&&(T="utf8"),!o.isEncoding(T))throw new TypeError("Unknown encoding: "+T);const k=p(F,T)|0;let Ie=r(k);const me=Ie.write(F,T);return me!==k&&(Ie=Ie.slice(0,me)),Ie}function u(F){const T=F.length<0?0:f(F.length)|0,k=r(T);for(let Ie=0;Ie=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+" bytes");return F|0}function b(F){return+F!=F&&(F=0),o.alloc(+F)}o.isBuffer=function(T){return T!=null&&T._isBuffer===!0&&T!==o.prototype},o.compare=function(T,k){if(tt(T,Uint8Array)&&(T=o.from(T,T.offset,T.byteLength)),tt(k,Uint8Array)&&(k=o.from(k,k.offset,k.byteLength)),!o.isBuffer(T)||!o.isBuffer(k))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(T===k)return 0;let Ie=T.length,me=k.length;for(let Ve=0,we=Math.min(Ie,me);Veme.length?(o.isBuffer(we)||(we=o.from(we)),we.copy(me,Ve)):Uint8Array.prototype.set.call(me,we,Ve);else if(o.isBuffer(we))we.copy(me,Ve);else throw new TypeError('"list" argument must be an Array of Buffers');Ve+=we.length}return me};function p(F,T){if(o.isBuffer(F))return F.length;if(ArrayBuffer.isView(F)||tt(F,ArrayBuffer))return F.byteLength;if(typeof F!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof F);const k=F.length,Ie=arguments.length>2&&arguments[2]===!0;if(!Ie&&k===0)return 0;let me=!1;for(;;)switch(T){case"ascii":case"latin1":case"binary":return k;case"utf8":case"utf-8":return De(F).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k*2;case"hex":return k>>>1;case"base64":return gt(F).length;default:if(me)return Ie?-1:De(F).length;T=(""+T).toLowerCase(),me=!0}}o.byteLength=p;function y(F,T,k){let Ie=!1;if((T===void 0||T<0)&&(T=0),T>this.length||((k===void 0||k>this.length)&&(k=this.length),k<=0)||(k>>>=0,T>>>=0,k<=T))return"";for(F||(F="utf8");;)switch(F){case"hex":return J(this,T,k);case"utf8":case"utf-8":return V(this,T,k);case"ascii":return K(this,T,k);case"latin1":case"binary":return x(this,T,k);case"base64":return W(this,T,k);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,T,k);default:if(Ie)throw new TypeError("Unknown encoding: "+F);F=(F+"").toLowerCase(),Ie=!0}}o.prototype._isBuffer=!0;function Z(F,T,k){const Ie=F[T];F[T]=F[k],F[k]=Ie}o.prototype.swap16=function(){const T=this.length;if(T%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let k=0;kk&&(T+=" ... "),""},i&&(o.prototype[i]=o.prototype.inspect),o.prototype.compare=function(T,k,Ie,me,Ve){if(tt(T,Uint8Array)&&(T=o.from(T,T.offset,T.byteLength)),!o.isBuffer(T))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof T);if(k===void 0&&(k=0),Ie===void 0&&(Ie=T?T.length:0),me===void 0&&(me=0),Ve===void 0&&(Ve=this.length),k<0||Ie>T.length||me<0||Ve>this.length)throw new RangeError("out of range index");if(me>=Ve&&k>=Ie)return 0;if(me>=Ve)return-1;if(k>=Ie)return 1;if(k>>>=0,Ie>>>=0,me>>>=0,Ve>>>=0,this===T)return 0;let we=Ve-me,je=Ie-k;const at=Math.min(we,je),bt=this.slice(me,Ve),ct=T.slice(k,Ie);for(let Ht=0;Ht2147483647?k=2147483647:k<-2147483648&&(k=-2147483648),k=+k,Xe(k)&&(k=me?0:F.length-1),k<0&&(k=F.length+k),k>=F.length){if(me)return-1;k=F.length-1}else if(k<0)if(me)k=0;else return-1;if(typeof T=="string"&&(T=o.from(T,Ie)),o.isBuffer(T))return T.length===0?-1:G(F,T,k,Ie,me);if(typeof T=="number")return T=T&255,typeof Uint8Array.prototype.indexOf=="function"?me?Uint8Array.prototype.indexOf.call(F,T,k):Uint8Array.prototype.lastIndexOf.call(F,T,k):G(F,[T],k,Ie,me);throw new TypeError("val must be string, number or Buffer")}function G(F,T,k,Ie,me){let Ve=1,we=F.length,je=T.length;if(Ie!==void 0&&(Ie=String(Ie).toLowerCase(),Ie==="ucs2"||Ie==="ucs-2"||Ie==="utf16le"||Ie==="utf-16le")){if(F.length<2||T.length<2)return-1;Ve=2,we/=2,je/=2,k/=2}function at(ct,Ht){return Ve===1?ct[Ht]:ct.readUInt16BE(Ht*Ve)}let bt;if(me){let ct=-1;for(bt=k;btwe&&(k=we-je),bt=k;bt>=0;bt--){let ct=!0;for(let Ht=0;Htme&&(Ie=me)):Ie=me;const Ve=T.length;Ie>Ve/2&&(Ie=Ve/2);let we;for(we=0;we>>0,isFinite(Ie)?(Ie=Ie>>>0,me===void 0&&(me="utf8")):(me=Ie,Ie=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const Ve=this.length-k;if((Ie===void 0||Ie>Ve)&&(Ie=Ve),T.length>0&&(Ie<0||k<0)||k>this.length)throw new RangeError("Attempt to write outside buffer bounds");me||(me="utf8");let we=!1;for(;;)switch(me){case"hex":return v(this,T,k,Ie);case"utf8":case"utf-8":return w(this,T,k,Ie);case"ascii":case"latin1":case"binary":return R(this,T,k,Ie);case"base64":return S(this,T,k,Ie);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return X(this,T,k,Ie);default:if(we)throw new TypeError("Unknown encoding: "+me);me=(""+me).toLowerCase(),we=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function W(F,T,k){return T===0&&k===F.length?g.fromByteArray(F):g.fromByteArray(F.slice(T,k))}function V(F,T,k){k=Math.min(F.length,k);const Ie=[];let me=T;for(;me239?4:Ve>223?3:Ve>191?2:1;if(me+je<=k){let at,bt,ct,Ht;switch(je){case 1:Ve<128&&(we=Ve);break;case 2:at=F[me+1],(at&192)===128&&(Ht=(Ve&31)<<6|at&63,Ht>127&&(we=Ht));break;case 3:at=F[me+1],bt=F[me+2],(at&192)===128&&(bt&192)===128&&(Ht=(Ve&15)<<12|(at&63)<<6|bt&63,Ht>2047&&(Ht<55296||Ht>57343)&&(we=Ht));break;case 4:at=F[me+1],bt=F[me+2],ct=F[me+3],(at&192)===128&&(bt&192)===128&&(ct&192)===128&&(Ht=(Ve&15)<<18|(at&63)<<12|(bt&63)<<6|ct&63,Ht>65535&&Ht<1114112&&(we=Ht))}}we===null?(we=65533,je=1):we>65535&&(we-=65536,Ie.push(we>>>10&1023|55296),we=56320|we&1023),Ie.push(we),me+=je}return Y(Ie)}const H=4096;function Y(F){const T=F.length;if(T<=H)return String.fromCharCode.apply(String,F);let k="",Ie=0;for(;IeIe)&&(k=Ie);let me="";for(let Ve=T;VeIe&&(T=Ie),k<0?(k+=Ie,k<0&&(k=0)):k>Ie&&(k=Ie),kk)throw new RangeError("Trying to access beyond buffer length")}o.prototype.readUintLE=o.prototype.readUIntLE=function(T,k,Ie){T=T>>>0,k=k>>>0,Ie||ge(T,k,this.length);let me=this[T],Ve=1,we=0;for(;++we>>0,k=k>>>0,Ie||ge(T,k,this.length);let me=this[T+--k],Ve=1;for(;k>0&&(Ve*=256);)me+=this[T+--k]*Ve;return me},o.prototype.readUint8=o.prototype.readUInt8=function(T,k){return T=T>>>0,k||ge(T,1,this.length),this[T]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(T,k){return T=T>>>0,k||ge(T,2,this.length),this[T]|this[T+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(T,k){return T=T>>>0,k||ge(T,2,this.length),this[T]<<8|this[T+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(T,k){return T=T>>>0,k||ge(T,4,this.length),(this[T]|this[T+1]<<8|this[T+2]<<16)+this[T+3]*16777216},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(T,k){return T=T>>>0,k||ge(T,4,this.length),this[T]*16777216+(this[T+1]<<16|this[T+2]<<8|this[T+3])},o.prototype.readBigUInt64LE=ye(function(T){T=T>>>0,We(T,"offset");const k=this[T],Ie=this[T+7];(k===void 0||Ie===void 0)&&Be(T,this.length-8);const me=k+this[++T]*2**8+this[++T]*2**16+this[++T]*2**24,Ve=this[++T]+this[++T]*2**8+this[++T]*2**16+Ie*2**24;return BigInt(me)+(BigInt(Ve)<>>0,We(T,"offset");const k=this[T],Ie=this[T+7];(k===void 0||Ie===void 0)&&Be(T,this.length-8);const me=k*2**24+this[++T]*2**16+this[++T]*2**8+this[++T],Ve=this[++T]*2**24+this[++T]*2**16+this[++T]*2**8+Ie;return(BigInt(me)<>>0,k=k>>>0,Ie||ge(T,k,this.length);let me=this[T],Ve=1,we=0;for(;++we=Ve&&(me-=Math.pow(2,8*k)),me},o.prototype.readIntBE=function(T,k,Ie){T=T>>>0,k=k>>>0,Ie||ge(T,k,this.length);let me=k,Ve=1,we=this[T+--me];for(;me>0&&(Ve*=256);)we+=this[T+--me]*Ve;return Ve*=128,we>=Ve&&(we-=Math.pow(2,8*k)),we},o.prototype.readInt8=function(T,k){return T=T>>>0,k||ge(T,1,this.length),this[T]&128?(255-this[T]+1)*-1:this[T]},o.prototype.readInt16LE=function(T,k){T=T>>>0,k||ge(T,2,this.length);const Ie=this[T]|this[T+1]<<8;return Ie&32768?Ie|4294901760:Ie},o.prototype.readInt16BE=function(T,k){T=T>>>0,k||ge(T,2,this.length);const Ie=this[T+1]|this[T]<<8;return Ie&32768?Ie|4294901760:Ie},o.prototype.readInt32LE=function(T,k){return T=T>>>0,k||ge(T,4,this.length),this[T]|this[T+1]<<8|this[T+2]<<16|this[T+3]<<24},o.prototype.readInt32BE=function(T,k){return T=T>>>0,k||ge(T,4,this.length),this[T]<<24|this[T+1]<<16|this[T+2]<<8|this[T+3]},o.prototype.readBigInt64LE=ye(function(T){T=T>>>0,We(T,"offset");const k=this[T],Ie=this[T+7];(k===void 0||Ie===void 0)&&Be(T,this.length-8);const me=this[T+4]+this[T+5]*2**8+this[T+6]*2**16+(Ie<<24);return(BigInt(me)<>>0,We(T,"offset");const k=this[T],Ie=this[T+7];(k===void 0||Ie===void 0)&&Be(T,this.length-8);const me=(k<<24)+this[++T]*2**16+this[++T]*2**8+this[++T];return(BigInt(me)<>>0,k||ge(T,4,this.length),I.read(this,T,!0,23,4)},o.prototype.readFloatBE=function(T,k){return T=T>>>0,k||ge(T,4,this.length),I.read(this,T,!1,23,4)},o.prototype.readDoubleLE=function(T,k){return T=T>>>0,k||ge(T,8,this.length),I.read(this,T,!0,52,8)},o.prototype.readDoubleBE=function(T,k){return T=T>>>0,k||ge(T,8,this.length),I.read(this,T,!1,52,8)};function q(F,T,k,Ie,me,Ve){if(!o.isBuffer(F))throw new TypeError('"buffer" argument must be a Buffer instance');if(T>me||TF.length)throw new RangeError("Index out of range")}o.prototype.writeUintLE=o.prototype.writeUIntLE=function(T,k,Ie,me){if(T=+T,k=k>>>0,Ie=Ie>>>0,!me){const je=Math.pow(2,8*Ie)-1;q(this,T,k,Ie,je,0)}let Ve=1,we=0;for(this[k]=T&255;++we>>0,Ie=Ie>>>0,!me){const je=Math.pow(2,8*Ie)-1;q(this,T,k,Ie,je,0)}let Ve=Ie-1,we=1;for(this[k+Ve]=T&255;--Ve>=0&&(we*=256);)this[k+Ve]=T/we&255;return k+Ie},o.prototype.writeUint8=o.prototype.writeUInt8=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,1,255,0),this[k]=T&255,k+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,2,65535,0),this[k]=T&255,this[k+1]=T>>>8,k+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,2,65535,0),this[k]=T>>>8,this[k+1]=T&255,k+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,4,4294967295,0),this[k+3]=T>>>24,this[k+2]=T>>>16,this[k+1]=T>>>8,this[k]=T&255,k+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,4,4294967295,0),this[k]=T>>>24,this[k+1]=T>>>16,this[k+2]=T>>>8,this[k+3]=T&255,k+4};function $(F,T,k,Ie,me){ve(T,Ie,me,F,k,7);let Ve=Number(T&BigInt(4294967295));F[k++]=Ve,Ve=Ve>>8,F[k++]=Ve,Ve=Ve>>8,F[k++]=Ve,Ve=Ve>>8,F[k++]=Ve;let we=Number(T>>BigInt(32)&BigInt(4294967295));return F[k++]=we,we=we>>8,F[k++]=we,we=we>>8,F[k++]=we,we=we>>8,F[k++]=we,k}function j(F,T,k,Ie,me){ve(T,Ie,me,F,k,7);let Ve=Number(T&BigInt(4294967295));F[k+7]=Ve,Ve=Ve>>8,F[k+6]=Ve,Ve=Ve>>8,F[k+5]=Ve,Ve=Ve>>8,F[k+4]=Ve;let we=Number(T>>BigInt(32)&BigInt(4294967295));return F[k+3]=we,we=we>>8,F[k+2]=we,we=we>>8,F[k+1]=we,we=we>>8,F[k]=we,k+8}o.prototype.writeBigUInt64LE=ye(function(T,k=0){return $(this,T,k,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeBigUInt64BE=ye(function(T,k=0){return j(this,T,k,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeIntLE=function(T,k,Ie,me){if(T=+T,k=k>>>0,!me){const at=Math.pow(2,8*Ie-1);q(this,T,k,Ie,at-1,-at)}let Ve=0,we=1,je=0;for(this[k]=T&255;++Ve>0)-je&255;return k+Ie},o.prototype.writeIntBE=function(T,k,Ie,me){if(T=+T,k=k>>>0,!me){const at=Math.pow(2,8*Ie-1);q(this,T,k,Ie,at-1,-at)}let Ve=Ie-1,we=1,je=0;for(this[k+Ve]=T&255;--Ve>=0&&(we*=256);)T<0&&je===0&&this[k+Ve+1]!==0&&(je=1),this[k+Ve]=(T/we>>0)-je&255;return k+Ie},o.prototype.writeInt8=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,1,127,-128),T<0&&(T=255+T+1),this[k]=T&255,k+1},o.prototype.writeInt16LE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,2,32767,-32768),this[k]=T&255,this[k+1]=T>>>8,k+2},o.prototype.writeInt16BE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,2,32767,-32768),this[k]=T>>>8,this[k+1]=T&255,k+2},o.prototype.writeInt32LE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,4,2147483647,-2147483648),this[k]=T&255,this[k+1]=T>>>8,this[k+2]=T>>>16,this[k+3]=T>>>24,k+4},o.prototype.writeInt32BE=function(T,k,Ie){return T=+T,k=k>>>0,Ie||q(this,T,k,4,2147483647,-2147483648),T<0&&(T=4294967295+T+1),this[k]=T>>>24,this[k+1]=T>>>16,this[k+2]=T>>>8,this[k+3]=T&255,k+4},o.prototype.writeBigInt64LE=ye(function(T,k=0){return $(this,T,k,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),o.prototype.writeBigInt64BE=ye(function(T,k=0){return j(this,T,k,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function te(F,T,k,Ie,me,Ve){if(k+Ie>F.length)throw new RangeError("Index out of range");if(k<0)throw new RangeError("Index out of range")}function Q(F,T,k,Ie,me){return T=+T,k=k>>>0,me||te(F,T,k,4),I.write(F,T,k,Ie,23,4),k+4}o.prototype.writeFloatLE=function(T,k,Ie){return Q(this,T,k,!0,Ie)},o.prototype.writeFloatBE=function(T,k,Ie){return Q(this,T,k,!1,Ie)};function ie(F,T,k,Ie,me){return T=+T,k=k>>>0,me||te(F,T,k,8),I.write(F,T,k,Ie,52,8),k+8}o.prototype.writeDoubleLE=function(T,k,Ie){return ie(this,T,k,!0,Ie)},o.prototype.writeDoubleBE=function(T,k,Ie){return ie(this,T,k,!1,Ie)},o.prototype.copy=function(T,k,Ie,me){if(!o.isBuffer(T))throw new TypeError("argument should be a Buffer");if(Ie||(Ie=0),!me&&me!==0&&(me=this.length),k>=T.length&&(k=T.length),k||(k=0),me>0&&me=this.length)throw new RangeError("Index out of range");if(me<0)throw new RangeError("sourceEnd out of bounds");me>this.length&&(me=this.length),T.length-k>>0,Ie=Ie===void 0?this.length:Ie>>>0,T||(T=0);let Ve;if(typeof T=="number")for(Ve=k;Ve2**32?me=be(String(k)):typeof k=="bigint"&&(me=String(k),(k>BigInt(2)**BigInt(32)||k<-(BigInt(2)**BigInt(32)))&&(me=be(me)),me+="n"),Ie+=` It must be ${T}. Received ${me}`,Ie},RangeError);function be(F){let T="",k=F.length;const Ie=F[0]==="-"?1:0;for(;k>=Ie+4;k-=3)T=`_${F.slice(k-3,k)}${T}`;return`${F.slice(0,k)}${T}`}function pe(F,T,k){We(T,"offset"),(F[T]===void 0||F[T+k]===void 0)&&Be(T,F.length-(k+1))}function ve(F,T,k,Ie,me,Ve){if(F>k||F3?T===0||T===BigInt(0)?je=`>= 0${we} and < 2${we} ** ${(Ve+1)*8}${we}`:je=`>= -(2${we} ** ${(Ve+1)*8-1}${we}) and < 2 ** ${(Ve+1)*8-1}${we}`:je=`>= ${T}${we} and <= ${k}${we}`,new he.ERR_OUT_OF_RANGE("value",je,F)}pe(Ie,me,Ve)}function We(F,T){if(typeof F!="number")throw new he.ERR_INVALID_ARG_TYPE(T,"number",F)}function Be(F,T,k){throw Math.floor(F)!==F?(We(F,k),new he.ERR_OUT_OF_RANGE(k||"offset","an integer",F)):T<0?new he.ERR_BUFFER_OUT_OF_BOUNDS:new he.ERR_OUT_OF_RANGE(k||"offset",`>= ${k?1:0} and <= ${T}`,F)}const Je=/[^+/0-9A-Za-z-_]/g;function Pe(F){if(F=F.split("=")[0],F=F.trim().replace(Je,""),F.length<2)return"";for(;F.length%4!==0;)F=F+"=";return F}function De(F,T){T=T||1/0;let k;const Ie=F.length;let me=null;const Ve=[];for(let we=0;we55295&&k<57344){if(!me){if(k>56319){(T-=3)>-1&&Ve.push(239,191,189);continue}else if(we+1===Ie){(T-=3)>-1&&Ve.push(239,191,189);continue}me=k;continue}if(k<56320){(T-=3)>-1&&Ve.push(239,191,189),me=k;continue}k=(me-55296<<10|k-56320)+65536}else me&&(T-=3)>-1&&Ve.push(239,191,189);if(me=null,k<128){if((T-=1)<0)break;Ve.push(k)}else if(k<2048){if((T-=2)<0)break;Ve.push(k>>6|192,k&63|128)}else if(k<65536){if((T-=3)<0)break;Ve.push(k>>12|224,k>>6&63|128,k&63|128)}else if(k<1114112){if((T-=4)<0)break;Ve.push(k>>18|240,k>>12&63|128,k>>6&63|128,k&63|128)}else throw new Error("Invalid code point")}return Ve}function Qe(F){const T=[];for(let k=0;k>8,me=k%256,Ve.push(me),Ve.push(Ie);return Ve}function gt(F){return g.toByteArray(Pe(F))}function lt(F,T,k,Ie){let me;for(me=0;me=T.length||me>=F.length);++me)T[me+k]=F[me];return me}function tt(F,T){return F instanceof T||F!=null&&F.constructor!=null&&F.constructor.name!=null&&F.constructor.name===T.name}function Xe(F){return F!==F}const ae=function(){const F="0123456789abcdef",T=new Array(256);for(let k=0;k<16;++k){const Ie=k*16;for(let me=0;me<16;++me)T[Ie+me]=F[k]+F[me]}return T}();function ye(F){return typeof BigInt>"u"?He:F}function He(){throw new Error("BigInt not supported")}})(th);let Wbe=class{async getBufferFromResponse(g){if(typeof g.buffer=="function")return g.buffer();if(typeof g.arrayBuffer=="function"){const I=await g.arrayBuffer();return th.Buffer.from(I)}else throw new TypeError("invalid HTTP response object, has no buffer method, and no arrayBuffer method")}constructor(g,I={}){this.baseOverrides={},this.url=g;const i=I.fetch||globalThis.fetch.bind(globalThis);if(!i)throw new TypeError("no fetch function supplied, and none found in global environment");I.overrides&&(this.baseOverrides=I.overrides),this.fetchImplementation=i}async fetch(g,I){let i;try{i=await this.fetchImplementation(g,I)}catch(n){if(`${n}`.includes("Failed to fetch"))console.warn(`generic-filehandle: refetching ${g} to attempt to work around chrome CORS header caching bug`),i=await this.fetchImplementation(g,{...I,cache:"reload"});else throw n}return i}async read(g,I=0,i,n=0,C={}){const{headers:r={},signal:o,overrides:a={}}=C;i<1/0?r.range=`bytes=${n}-${n+i}`:i===1/0&&n!==0&&(r.range=`bytes=${n}-`);const s={...this.baseOverrides,...a,headers:{...r,...a.headers,...this.baseOverrides.headers},method:"GET",redirect:"follow",mode:"cors",signal:o},A=await this.fetch(this.url,s);if(!A.ok)throw new Error(`HTTP ${A.status} ${A.statusText} ${this.url}`);if(A.status===200&&n===0||A.status===206){const l=await this.getBufferFromResponse(A),c=l.copy(g,I,0,Math.min(i,l.length)),u=A.headers.get("content-range"),d=/\/(\d+)$/.exec(u||"");return d&&d[1]&&(this._stat={size:parseInt(d[1],10)}),{bytesRead:c,buffer:g}}throw A.status===200?new Error("${this.url} fetch returned status 200, expected 206"):new Error(`HTTP ${A.status} fetching ${this.url}`)}async readFile(g={}){let I,i;typeof g=="string"?(I=g,i={}):(I=g.encoding,i=g,delete i.encoding);const{headers:n={},signal:C,overrides:r={}}=i,o={headers:n,method:"GET",redirect:"follow",mode:"cors",signal:C,...this.baseOverrides,...r},a=await this.fetch(this.url,o);if(!a)throw new Error("generic-filehandle failed to fetch");if(a.status!==200)throw Object.assign(new Error(`HTTP ${a.status} fetching ${this.url}`),{status:a.status});if(I==="utf8")return a.text();if(I)throw new Error(`unsupported encoding: ${I}`);return this.getBufferFromResponse(a)}async stat(){if(!this._stat){const g=th.Buffer.allocUnsafe(10);if(await this.read(g,0,10,0),!this._stat)throw new Error(`unable to determine size of file at ${this.url}`)}return this._stat}async close(){}};var z4e=Object.defineProperty,P4e=(e,g,I)=>g in e?z4e(e,g,{enumerable:!0,configurable:!0,writable:!0,value:I}):e[g]=I,J4e=(e,g,I)=>(P4e(e,typeof g!="symbol"?g+"":g,I),I);const K9=6,O4e=130,_4e=600,Ote=600,K1=10,Xbe=.3,L4e=0,U4e="gray",pt=e=>{let g=$d(e);return g||(g=$d(U4e)),Ume([g.rgb().r/255,g.rgb().g/255,g.rgb().b/255])},gn=0;function jg(e,g,I,i,n){const C=Math.max(Math.min(g,e),0),r=n??gn,o=(i-I)/360*Math.PI*2-r*2;return-(I/360*Math.PI*2+C/g*o)-Math.PI/2-r}function Mt(e,g,I,i,n,C,r){return{x:i+I*Math.cos(jg(e,g,C,r)),y:n+I*Math.sin(jg(e,g,C,r))}}function lc(e,g,I,i){return I<=e?Math.atan((g-i)/(e-I)):Math.atan((g-i)/(e-I))-Math.PI}function Q4e(e,g,I,i){return(Math.atan2(-(g-i),e-I)/Math.PI*180+270)%360}function j4e(e,g,I){var i,n,C,r,o;const a=I.spec();if(!a.width||!a.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const s=I.data(),[A,l]=e.dimensions,c=I.getChannelScale("x").invert(A)-I.getChannelScale("x").invert(0),u=a.layout==="circular",d=(i=a.innerRadius)!=null?i:220,h=(n=a.outerRadius)!=null?n:300,m=(C=a.startAngle)!=null?C:0,f=(r=a.endAngle)!=null?r:360,b=h-d,p=A/2,y=l/2,Z=(o=I.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],B=l/Z.length;Z.forEach(G=>{const v=I.encodedValue("row",G);s.filter(w=>!pI(w,a.row)||pI(w,a.row)===G).forEach(w=>{const R=I.encodedPIXIProperty("x-center",w),S=I.encodedPIXIProperty("y-center",w),X=I.encodedPIXIProperty("color",w),W=I.encodedPIXIProperty("p-size",w),V=I.encodedPIXIProperty("strokeWidth",w),H=I.encodedPIXIProperty("stroke",w),Y=I.encodedPIXIProperty("opacity",w),K=I.markVisibility(w,{width:W,zoomLevel:c}),x=Math.min(K,Y);if(!(W<=.1||x===0||R+W<0||R-W>A))if(g.lineStyle(V,pt(H),x,1),u){const J=h-(v+B-S)/l*b,P=Mt(R,A,J,p,y,m,f);g.beginFill(pt(X),x),g.drawCircle(P.x,P.y,W),I.getMouseEventModel().addPointBasedEvent(w,[P.x,P.y,W])}else g.beginFill(pt(X),x),g.drawCircle(R,v+B-S,W),I.getMouseEventModel().addPointBasedEvent(w,[R,v+B-S,W])})})}function $4e(e,g,I){const i=e.visualPropertyByChannel("xe",I),n=e.visualPropertyByChannel("x",I),C=e.visualPropertyByChannel("size",I);switch(g){case"x-center":return i?(i+n)/2:n;case"y-center":{const r=e.visualPropertyByChannel("ye",I),o=e.visualPropertyByChannel("y",I);return r?(r+o)/2:o}case"p-size":return i&&e.spec().stretch?(i-n)/2:C;default:return}}function q4e(e,g,I,i){var n,C,r,o,a,s;const A=g.spec();if(!A.width||!A.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const l=g.data(),c=A.layout==="circular",u=(n=A.innerRadius)!=null?n:220,d=(C=A.outerRadius)!=null?C:300,h=(r=A.startAngle)!=null?r:0,m=(o=A.endAngle)!=null?o:360,f=d-u,b=I/2,p=i/2,y=(a=g.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],Z=i/y.length,B=(s=g.getChannelDomainArray("color"))!=null?s:["___SINGLE_COLOR___"];y.forEach(G=>{const v=g.encodedValue("row",G);B.forEach(w=>{l.filter(R=>(!pI(R,A.row)||pI(R,A.row)===G)&&(!pI(R,A.color)||pI(R,A.color)===w)).sort((R,S)=>pI(R,A.x)-pI(S,A.x)).forEach((R,S)=>{const X=g.encodedPIXIProperty("x",R),W=g.encodedPIXIProperty("y",R),V=g.encodedPIXIProperty("size",R),H=g.encodedPIXIProperty("color",R),Y=g.encodedPIXIProperty("opacity",R);if(e.lineStyle(V,pt(H),Y,.5),c){const K=d-(v+Z-W)/i*f,x=Mt(X,I,K,b,p,h,m);S===0?e.moveTo(x.x,x.y):e.lineTo(x.x,x.y),g.getMouseEventModel().addPointBasedEvent(R,[x.x,x.y,1])}else S===0?e.moveTo(X,v+Z-W):e.lineTo(X,v+Z-W),g.getMouseEventModel().addPointBasedEvent(R,[X,v+Z-W,1])})})})}function eje(e,g,I){var i,n,C,r,o,a,s;const A=I.spec();if(!A.width||!A.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const l=I.data(),[c,u]=e.dimensions,d=e.tilesetInfo.tile_size,h=I.getChannelScale("x").invert(c)-I.getChannelScale("x").invert(0),m=A.layout==="circular",f=(i=A.innerRadius)!=null?i:220,b=(n=A.outerRadius)!=null?n:300,p=(C=A.startAngle)!=null?C:0,y=(r=A.endAngle)!=null?r:360,Z=b-f,B=c/2,G=u/2,v=I.getChannelScale("x");let w;if(g.tileData.tilePos){const{tileX:Y,tileWidth:K}=e.getTilePosAndDimensions(g.tileData.zoomLevel,g.tileData.tilePos,d);w=v(Y+K/d)-v(Y)}const R=(o=I.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],S=u/R.length,X=!ut(A.row)||ut(A.row)&&typeof A.row.clip>"u"||A.row.clip,W=ut(A.y)?(a=A.y)==null?void 0:a.baseline:void 0,V=(s=I.encodedValue("y",W))!=null?s:0,H=g.graphics;if(KT(A)){const Y=I.getGenomicChannel();if(!Y||!Y.field){console.warn("Genomic field is not provided in the specification");return}const K=BT(l,J=>J[Y.field]);[...K.keys()].forEach(J=>{var P;let ge=0;(P=K.get(J))==null||P.forEach(q=>{const $=I.encodedPIXIProperty("color",q),j=I.encodedPIXIProperty("stroke",q),te=I.encodedPIXIProperty("strokeWidth",q),Q=I.encodedPIXIProperty("opacity",q),ie=I.encodedPIXIProperty("y",q),he=I.encodedPIXIProperty("width",q,{tileUnitWidth:w}),ne=I.encodedPIXIProperty("x-start",q,{markWidth:he}),be=ne+he,pe=I.markVisibility(q,{width:he,zoomLevel:h}),ve=Math.min(pe,Q);if(ve===0||he<=0||ie<=0)return;H.lineStyle(te,pt(j),ve,0);let We=[];if(m){const Be=b-(S-ge)/u*Z,Je=b-(S-ie-ge)/u*Z,Pe=Mt(ne,c,Je,B,G,p,y),De=jg(ne,c,p,y),Qe=jg(ne+he,c,p,y);H.beginFill(pt($),$==="none"?0:ve),H.moveTo(Pe.x,Pe.y),H.arc(B,G,Je,De,Qe,!0),H.arc(B,G,Be,Qe,De,!1),We=Array.from(H.currentPath.points),H.closePath()}else{H.beginFill(pt($),$==="none"?0:ve),H.drawRect(ne,S-ie-ge,he,ie);const Be=S-ie-ge,Je=Be+ie;We=[ne,Be,ne,Je,be,Je,be,Be]}I.getMouseEventModel().addPolygonBasedEvent(q,We),ge+=ie})})}else R.forEach(Y=>{const K=I.encodedValue("row",Y);l.filter(x=>{const J=pI(x,A.row);return!J||J===Y}).forEach(x=>{const J=I.encodedPIXIProperty("color",x),P=I.encodedPIXIProperty("stroke",x),ge=I.encodedPIXIProperty("strokeWidth",x),q=I.encodedPIXIProperty("opacity");let $=I.encodedPIXIProperty("y",x),j=I.encodedPIXIProperty("ye",x);typeof j<"u"&&$>j&&([$,j]=[j,$]);const te=I.encodedPIXIProperty("width",x,{tileUnitWidth:w}),Q=I.encodedPIXIProperty("x-start",x,{markWidth:te}),ie=Q+te;let he;typeof j>"u"?(he=K+S-V-$,j=K+S-V,(ut(A.y)&&A.y.flip||A.flipY)&&(j=he,he=K)):(he=K+S-j,j=K+S-$),X&&(he=Math.max(K,he),he=Math.min(he,K+S),j=Math.max(K,j),j=Math.min(j,K+S));const ne=I.markVisibility(x,{width:te,zoomLevel:h}),be=Math.min(ne,q);if(be===0||te===0||j-he===0)return;H.lineStyle(ge,pt(P),be,0);let pe=[];if(m){const ve=b-he/u*Z,We=b-j/u*Z,Be=Mt(Q,c,We,B,G,p,y),Je=jg(Q,c,p,y),Pe=jg(Q+te,c,p,y);H.beginFill(pt(J),J==="none"?0:be),H.moveTo(Be.x,Be.y),H.arc(B,G,We,Je,Pe,!0),H.arc(B,G,ve,Pe,Je,!1),pe=Array.from(H.currentPath.points),H.closePath()}else H.beginFill(pt(J),J==="none"?0:be),H.drawRect(Q,he,te,j-he),pe=[Q,he,Q,j,ie,j,ie,he];I.getMouseEventModel().addPolygonBasedEvent(x,pe)})})}function tje(e,g,I,i){const n=e.visualPropertyByChannel("x",I),C=e.visualPropertyByChannel("xe",I),r=e.visualPropertyByChannel("size",I);switch(g){case"width":return r??(C?C-n:i==null?void 0:i.tileUnitWidth);case"x-start":return i!=null&&i.markWidth?C?(n+C-(i==null?void 0:i.markWidth))/2:n-(i==null?void 0:i.markWidth)/2:void 0;default:return}}function gje(e,g,I,i){var n,C,r,o,a,s;const A=i.spec(),l=i.data(),[c,u]=g.dimensions,d=A.layout==="circular",h=(n=A.innerRadius)!=null?n:220,m=(C=A.outerRadius)!=null?C:300,f=(r=A.startAngle)!=null?r:0,b=(o=A.endAngle)!=null?o:360,p=m-h,y=c/2,Z=u/2,B=g._xScale,G=(a=i.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],v=u/G.length,w=(s=i.getChannelDomainArray("color"))!=null?s:["___SINGLE_COLOR___"],R=i.encodedPIXIProperty("opacity"),S=i.encodedPIXIProperty("strokeWidth"),X=i.encodedPIXIProperty("stroke"),W=I.graphics;if(KT(A)){const V=i.getGenomicChannel();if(!V||!V.field){console.warn("Genomic field is not provided in the specification");return}const H=BT(l,x=>x[V.field]),Y=[...H.keys()];W.lineStyle(S,pt(X),R,1);const K={};w.forEach(x=>{const J=[],P=[];Y.forEach((q,$,j)=>{var te,Q;(Q=(te=H.get(q))==null?void 0:te.filter(ie=>pI(ie,A.color)===x))==null||Q.forEach(ie=>{const he=+q,ne=B(he),be=EG([i.encodedPIXIProperty("y",ie),0]);typeof K[q]>"u"&&(K[q]=0);const pe=v-be-K[q],ve=v-K[q];if(d){if($===0){const De=m-v/u*p,Qe=Mt(ne,c,De,y,Z,f,b);J.push([Qe.x,Qe.y]),P.push([Qe.x,Qe.y])}const We=m-pe/u*p,Be=Mt(ne,c,We,y,Z,f,b);J.push([Be.x,Be.y]);const Je=m-ve/u*p,Pe=Mt(ne,c,Je,y,Z,f,b);if(P.push([Pe.x,Pe.y]),$===j.length-1){const De=m-v/u*p,Qe=Mt(ne,c,De,y,Z,f,b);J.push([Qe.x,Qe.y]),P.push([Qe.x,Qe.y])}i.getMouseEventModel().addPointBasedEvent(ie,[Pe.x,Pe.y,1])}else $===0&&(J.push([ne,v]),P.push([ne,v])),J.push([ne,pe]),P.push([ne,ve]),$===j.length-1&&(J.push([ne,v]),P.push([ne,v])),i.getMouseEventModel().addPointBasedEvent(ie,[ne,pe,1]);K[q]+=be})});const ge=i.encodedValue("color",x);W.beginFill(pt(ge),R),W.drawPolygon([...J.reduce((q,$)=>q.concat($)),...P.reverse().reduce((q,$)=>q.concat($))]),W.endFill()})}else G.forEach(V=>{const H=i.encodedValue("row",V);W.lineStyle(S,pt(X),R,0),w.forEach(Y=>{const K=[],x=[],J=m-(H+v)/u*p;let P=0;l.filter(q=>(typeof pI(q,A.row)>"u"||pI(q,A.row)===V)&&(typeof pI(q,A.color)>"u"||pI(q,A.color)===Y)).sort((q,$)=>i.encodedPIXIProperty("x",q)-i.encodedPIXIProperty("x",$)).forEach((q,$,j)=>{const te=k1([EG([i.encodedPIXIProperty("y",q),0]),v]),Q=i.encodedPIXIProperty("x",q);if(d){const ie=Mt(Q,c,J,y,Z,f,b);K.push([ie.x,ie.y]),$===0&&x.push(ie.x,ie.y);const he=m-(H+v-te)/u*p,ne=Mt(Q,c,he,y,Z,f,b);if(x.push(ne.x,ne.y),$===j.length-1){const be=m-(H+v)/u*p,pe=Mt(Q,c,be,y,Z,f,b);x.push(pe.x,pe.y)}i.getMouseEventModel().addPointBasedEvent(q,[ne.x,ne.y,1])}else $===0&&(x.push(Q,H+v),P=Q),x.push(Q,H+v-te),$===j.length-1&&(x.push(Q,H+v),x.push(P,H+v)),i.getMouseEventModel().addPointBasedEvent(q,[Q,H+v-te,1])}),d&&K.length!==0&&x.push(...K.reverse().reduce((q,$)=>q.concat($)));const ge=i.encodedValue("color",Y);W.beginFill(pt(ge),R),W.drawPolygon(x),W.endFill()})})}function Ije(e,g,I,i){var n,C,r,o,a,s;const A=i.spec(),l=i.data(),[c,u]=g.dimensions,d=A.layout==="circular",h=(n=A.innerRadius)!=null?n:220,m=(C=A.outerRadius)!=null?C:300,f=(r=A.startAngle)!=null?r:0,b=(o=A.endAngle)!=null?o:360,p=m-h,y=c/2,Z=u/2,B=g._xScale;let G;if(I.tileData.tilePos){const V=g.tilesetInfo.tile_size,{tileX:H,tileWidth:Y}=g.getTilePosAndDimensions(I.tileData.zoomLevel,I.tileData.tilePos,V);G=B(H+Y/V)-B(H)}const v=(a=i.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],w=u/v.length,R=ut(A.row)&&A.row.padding?A.row.padding:0,S=(s=i.getChannelDomainArray("y"))!=null?s:["___SINGLE_Y_POSITION___"],X=w/S.length-R*2,W=I.graphics;l.forEach(V=>{var H;const Y=i.encodedPIXIProperty("row",V)+R,K=i.encodedPIXIProperty("x",V),x=i.encodedPIXIProperty("color",V),J=i.encodedPIXIProperty("stroke",V),P=i.encodedPIXIProperty("strokeWidth",V),ge=i.encodedPIXIProperty("opacity",V),q=i.encodedPIXIProperty("width",V,{markWidth:G}),$=i.encodedPIXIProperty("height",V,{markHeight:X}),j=i.encodedPIXIProperty("y",V),te=i.markVisibility(V,{width:q,zoomLevel:g._xScale.invert(c)-g._xScale.invert(0)}),Q=Math.min(te,ge);if(Q===0||$===0||q<=1e-4)return;const[ie,he,ne,be]=[K,K+q,Y+w-j-$/2,Y+w-j+$/2],pe=(H=i.visualPropertyByChannel("size",V))!=null?H:void 0;W.lineStyle(P,pt(J),Q,.5);let ve=[];if(d){if(he<0||c{const S=g.encodedValue("row",R);c.filter(X=>!pI(X,l.row)||pI(X,l.row)===R).forEach(X=>{var W,V,H;const Y=g.encodedPIXIProperty("x",X),K=g.encodedPIXIProperty("xe",X),x=(W=g.encodedPIXIProperty("size",X))!=null?W:K===void 0?w:K-Y,J=g.encodedPIXIProperty("y",X),P=g.encodedPIXIProperty("strokeWidth",X),ge=g.encodedPIXIProperty("stroke",X),q=g.encodedPIXIProperty("color",X),$=g.encodedPIXIProperty("opacity",X);let j=[];if(d){let te=Y||K-x,Q=K||Y+x,ie=(te+Q)/2;const he=m-(S+G-J)/i*p,ne=he-w/2,be=he+w/2;if(((V=l.style)==null?void 0:V.align)==="right"&&!K&&(te-=x,Q-=x,ie-=x),l.mark==="triangleLeft"){const We=Mt(Q,I,ne,y,Z,f,b),Be=Mt(te,I,he,y,Z,f,b),Je=Mt(Q,I,be,y,Z,f,b),Pe=Mt(Q,I,ne,y,Z,f,b);j=[We.x,We.y,Be.x,Be.y,Je.x,Je.y,Pe.x,Pe.y]}else if(l.mark==="triangleRight"){const We=Mt(te,I,ne,y,Z,f,b),Be=Mt(Q,I,he,y,Z,f,b),Je=Mt(te,I,be,y,Z,f,b),Pe=Mt(te,I,ne,y,Z,f,b);j=[We.x,We.y,Be.x,Be.y,Je.x,Je.y,Pe.x,Pe.y]}else if(l.mark==="triangleBottom"){te=ie-x/2,Q=ie+x/2;const We=Mt(te,I,be,y,Z,f,b),Be=Mt(Q,I,be,y,Z,f,b),Je=Mt(ie,I,ne,y,Z,f,b),Pe=Mt(te,I,be,y,Z,f,b);j=[We.x,We.y,Be.x,Be.y,Je.x,Je.y,Pe.x,Pe.y]}const pe=g.markVisibility(X,{width:Q-te,zoomLevel:u}),ve=Math.min(pe,$);e.lineStyle(P,pt(ge),Q-te>2?ve:0,0),e.beginFill(pt(q),ve),e.drawPolygon(j),e.endFill()}else{let te=Y||K-x,Q=K||Y+x,ie=te+(Q-te)/2;const he=S+G-J,ne=S+G-J-w/2,be=S+G-J+w/2;((H=l.style)==null?void 0:H.align)==="right"&&!K&&(te-=x,Q-=x,ie-=x),j={triangleLeft:[Q,ne,te,he,Q,be,Q,ne],triangleRight:[te,ne,Q,he,te,be,te,ne],triangleBottom:[te,ne,Q,ne,ie,be,te,ne]}[l.mark];const pe=g.markVisibility(X,{width:Q-te,zoomLevel:u}),ve=Math.min(pe,$);e.lineStyle(P,pt(ge),Q-te>2?ve:0,.5),e.beginFill(pt(q),ve),e.drawPolygon(j),e.endFill()}g.getMouseEventModel().addPolygonBasedEvent(X,j)})})}const Ra={fontSize:"12px",fontFamily:"sans-serif",fontWeight:"normal",fill:"black",background:"white",lineJoin:"round",stroke:"#ffffff",strokeThickness:0};function Cje(e,g,I,i){var n,C,r,o,a,s,A,l,c,u;const d=i.spec(),h=i.data(),[m,f]=g.dimensions,b=d.layout==="circular",p=(n=d.innerRadius)!=null?n:220,y=(C=d.outerRadius)!=null?C:300,Z=(r=d.startAngle)!=null?r:0,B=(o=d.endAngle)!=null?o:360,G=y-p,v=m/2,w=f/2,R=(a=i.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],S=f/R.length,X=(A=(s=d.style)==null?void 0:s.dx)!=null?A:0,W=(c=(l=d.style)==null?void 0:l.dy)!=null?c:0,V=(u=d.style)!=null&&u.textAnchor?d.style.textAnchor:"middle";if(KT(d)){if(b)return;const H=I.graphics,Y=i.getGenomicChannel();if(!Y||!Y.field){console.warn("Genomic field is not provided in the specification");return}const K=BT(h,J=>J[Y.field]);[...K.keys()].forEach(J=>{var P;let ge=0;(P=K.get(J))==null||P.forEach(q=>{var $,j,te,Q,ie,he,ne,be;const pe=i.encodedPIXIProperty("text",q),ve=i.encodedPIXIProperty("color",q),We=i.encodedPIXIProperty("x",q)+X,Be=i.encodedPIXIProperty("xe",q)+X,Je=i.encodedPIXIProperty("x-center",q)+X,Pe=i.encodedPIXIProperty("y",q)+W,De=i.encodedPIXIProperty("size",q),Qe=i.encodedPIXIProperty("stroke",q),_e=i.encodedPIXIProperty("strokeWidth",q),gt=i.encodedPIXIProperty("opacity",q);if(Je<0||Je>m||g.textsBeingUsed>1e3)return;const lt={...Ra,fontSize:De??(($=d.style)!=null&&$.textFontSize?`${(j=d.style)==null?void 0:j.textFontSize}px`:Ra.fontSize),stroke:(Q=Qe??((te=d.style)==null?void 0:te.textStroke))!=null?Q:Ra.stroke,strokeThickness:(he=_e??((ie=d.style)==null?void 0:ie.textStrokeWidth))!=null?he:Ra.strokeThickness,fontWeight:(be=(ne=d.style)==null?void 0:ne.textFontWeight)!=null?be:Ra.fontWeight},tt=new e.libraries.PIXI.TextStyle(lt);let Xe;g.textGraphics.length>g.textsBeingUsed?(Xe=g.textGraphics[g.textsBeingUsed],Xe.style.fill=ve,Xe.visible=!0,Xe.text=pe,Xe.alpha=1):(Xe=new e.libraries.PIXI.Text(pe,{...lt,fill:ve}),g.textGraphics.push(Xe));const ae=e.libraries.PIXI.TextMetrics.measureText(pe,tt);g.textsBeingUsed++;const ye=i.markVisibility(q,{...ae,zoomLevel:g._xScale.invert(m)-g._xScale.invert(0)}),He=Math.min(ye,gt);if(!pe||He===0){g.textsBeingUsed--,Xe.visible=!1;return}Xe.alpha=He,Xe.resolution=8,Xe.updateText(),Xe.texture.baseTexture.scaleMode=e.libraries.PIXI.SCALE_MODES.LINEAR;const F=new e.libraries.PIXI.Sprite(Xe.texture);F.x=We,F.y=S-Pe-ge,F.width=Be-We,F.height=Pe,H.addChild(F),ge+=Pe})})}else R.forEach(H=>{const Y=I.graphics,K=i.encodedValue("row",H);h.filter(x=>!pI(x,d.row)||pI(x,d.row)===H).forEach(x=>{var J,P,ge,q,$,j,te,Q;const ie=i.encodedPIXIProperty("text",x),he=i.encodedPIXIProperty("color",x),ne=i.encodedPIXIProperty("x-center",x)+X,be=i.encodedPIXIProperty("y",x)+W,pe=i.encodedPIXIProperty("size",x),ve=i.encodedPIXIProperty("stroke",x),We=i.encodedPIXIProperty("strokeWidth",x),Be=i.encodedPIXIProperty("opacity",x);if(ne<0||ne>m||g.textsBeingUsed>1e3)return;const Je={...Ra,fontSize:pe??((J=d.style)!=null&&J.textFontSize?`${(P=d.style)==null?void 0:P.textFontSize}px`:Ra.fontSize),stroke:(q=ve??((ge=d.style)==null?void 0:ge.textStroke))!=null?q:Ra.stroke,strokeThickness:(j=We??(($=d.style)==null?void 0:$.textStrokeWidth))!=null?j:Ra.strokeThickness,fontWeight:(Q=(te=d.style)==null?void 0:te.textFontWeight)!=null?Q:Ra.fontWeight},Pe=new e.libraries.PIXI.TextStyle(Je);let De;g.textGraphics.length>g.textsBeingUsed?(De=g.textGraphics[g.textsBeingUsed],De.style.fill=he,De.visible=!0,De.text=ie,De.alpha=1):(De=new e.libraries.PIXI.Text(ie,{...Je,fill:he}),g.textGraphics.push(De));const Qe=e.libraries.PIXI.TextMetrics.measureText(ie,Pe);g.textsBeingUsed++;const _e=i.markVisibility(x,{...Qe,zoomLevel:g._xScale.invert(m)-g._xScale.invert(0)}),gt=Math.min(_e,Be);if(!ie||gt===0){g.textsBeingUsed--,De.visible=!1;return}De.alpha=gt,De.anchor.y=.5,De.anchor.x=V==="middle"?.5:V==="start"?0:1;let lt=[];if(b){const tt=y-(K+S-be)/f*G,Xe=Mt(ne,m,tt,v,w,Z,B);De.x=Xe.x,De.y=Xe.y,De.resolution=4;const ae=Qe.width/(2*tt*Math.PI)*m;let[ye,He]=[ne-ae/2,ne+ae/2];if(ye<0){const me=-ye;ye=0,He+=me}else if(He>m){const me=He-m;He=m,ye-=me}const F=[],T=[],k=[];for(let me=He;me>=ye;me-=ae/10){const Ve=Mt(me,m,tt,v,w,Z,B);F.push(new e.libraries.PIXI.Point(Ve.x,Ve.y));const we=Mt(me,m,tt+Qe.height/2,v,w,Z,B),je=Mt(me,m,tt-Qe.height/2,v,w,Z,B);T.push(we.x,we.y),me===He&&k.push(we.y,we.x),k.push(je.y,je.x)}De.updateText();const Ie=new e.libraries.PIXI.SimpleRope(De.texture,F);Ie.alpha=gt,Y.addChild(Ie),k.reverse(),lt=T.concat(k)}else{De.position.x=ne,De.position.y=K+S-be,Y.addChild(De);const{height:tt,width:Xe}=Qe,ae=De.position.y-tt/2,ye=ae+tt;let He=0,F=0;V==="start"?(He=ne,F=ne+Xe):V==="middle"?(He=ne-Xe/2,F=ne+Xe/2):(He=ne-Xe,F=ne),lt=[He,ae,He,ye,F,ye,F,ae]}i.getMouseEventModel().addPolygonBasedEvent(x,lt)})})}function rje(e,g,I,i){var n,C,r,o,a,s,A,l;const c=i.spec(),u=i.data(),[d,h]=g.dimensions,m=c.layout==="circular",f=(n=c.innerRadius)!=null?n:220,b=(C=c.outerRadius)!=null?C:300,p=(r=c.startAngle)!=null?r:0,y=(o=c.endAngle)!=null?o:360,Z=b-f,B=d/2,G=h/2,v=(a=i.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],w=h/v.length,R=(s=c.style)==null?void 0:s.dashed,S=(A=c.style)==null?void 0:A.linePattern,X=(l=c.style)==null?void 0:l.curve,W=I.graphics;v.forEach(V=>{const H=i.encodedValue("row",V);u.filter(Y=>!pI(Y,c.row)||pI(Y,c.row)===V).forEach(Y=>{const K=i.encodedPIXIProperty("x",Y),x=i.encodedPIXIProperty("xe",Y),J=i.encodedPIXIProperty("y",Y),P=i.encodedPIXIProperty("color",Y),ge=i.encodedPIXIProperty("strokeWidth",Y),q=i.encodedPIXIProperty("opacity",Y),$=i.markVisibility(Y,{width:x-K,zoomLevel:g._xScale.invert(d)-g._xScale.invert(0)}),j=Math.min($,q);if(W.lineStyle(ge,pt(P),j,.5),!x&&(!c.y||!("field"in c.y))){if(m)return;if(R){const[te,Q]=R;let ie=0;do W.moveTo(K,ie),W.lineTo(K,ie+te),ie+=te+Q;while(ie{const H=I.encodedValue("row",V);d.filter(Y=>!pI(Y,u.row)||pI(Y,u.row)===V).forEach(Y=>{var K,x,J,P,ge;let q=I.encodedPIXIProperty("x",Y),$=I.encodedPIXIProperty("xe",Y),j=I.encodedPIXIProperty("x1",Y),te=I.encodedPIXIProperty("x1e",Y);const Q=I.encodedPIXIProperty("y",Y),ie=I.encodedPIXIProperty("ye",Y),he=I.encodedPIXIProperty("stroke",Y),ne=I.encodedPIXIProperty("strokeWidth",Y),be=I.encodedPIXIProperty("color",Y),pe=I.encodedPIXIProperty("opacity",Y);typeof $<"u"&&([q,$]=[q,$].sort((Pe,De)=>Pe-De)),typeof j<"u"&&typeof te<"u"&&([j,te]=[j,te].sort((Pe,De)=>Pe-De));const ve=typeof $<"u"&&typeof j<"u"&&typeof te<"u"&&Math.abs(q-$)>.1&&Math.abs(j-te)>.1;if(!ve&&$===void 0&&!iC(u)){if(j===void 0&&te===void 0)return;$=j!==void 0?j:te}!ve&&Math.abs(q-$)<=.1&&Math.abs(j-te)<=.1&&(q=(q+$)/2,$=(j+te)/2),e.lineStyle(ne,pt(he),pe,.5);const We=ut(u.y)&&u.y.flip||u.flipY,Be=(K=u.baselineY)!=null?K:H+(We?0:R);let Je=[];if(ve){e.beginFill(pt(be==="none"?"white":be),be==="none"?0:pe);let[Pe,De,Qe,_e]=[q,$,j,te];if([Pe,De,Qe,_e]=[Pe,De,Qe,_e].sort((gt,lt)=>gt-lt),Pe>h||_e<0||Math.abs(_e-Pe)<.5)return;if(f){if(Pe<0||_e>h)return;const gt=p-H/m*B,lt=Mt(Pe,h,gt,G,v,y,Z),tt=Mt(De,h,gt,G,v,y,Z),Xe=Mt(Qe,h,gt,G,v,y,Z),ae=Mt(_e,h,gt,G,v,y,Z);e.moveTo(lt.x,lt.y),e.bezierCurveTo(G,v,G,v,ae.x,ae.y),e.arc(G,v,p,lc(ae.x,ae.y,G,v),lc(Xe.x,Xe.y,G,v),!1),e.bezierCurveTo(G,v,G,v,tt.x,tt.y),e.arc(G,v,p,lc(tt.x,tt.y,G,v),lc(lt.x,lt.y,G,v),!1),Je=Array.from(e.currentPath.points),e.endFill()}else e.moveTo(Pe,Be),!((x=u.style)!=null&&x.linkStyle)||((J=u.style)==null?void 0:J.linkStyle)==="circular"?(e.arc((Pe+_e)/2,Be,(_e-Pe)/2,-Math.PI,Math.PI,!1),e.arc((De+Qe)/2,Be,(Qe-De)/2,Math.PI,-Math.PI,!0),Je=Array.from(e.currentPath.points),e.closePath()):(e.lineTo(Qe,H+R),e.bezierCurveTo(Qe+(De-Qe)/3,H+R-(De-Qe)/2,Qe+(De-Qe)/3*2,H+R-(De-Qe)/2,De,H+R),e.lineTo(_e,H+R),e.bezierCurveTo(Pe+(_e-Pe)/3*2,H+R-(_e-Pe)/2,Pe+(_e-Pe)/3,H+R-(_e-Pe)/2,Pe,H+R),Je=Array.from(e.currentPath.points),e.endFill());I.getMouseEventModel().addPolygonBasedEvent(Y,Je)}else{const Pe=(q+$)/2;if(e.beginFill(pt("white"),0),f){if(q<0||$>h)return;if(((P=u.style)==null?void 0:P.linkStyle)==="straight"){const De=p-H/m*B,Qe=Mt(q,h,De,G,v,y,Z),_e=Mt($,h,De,G,v,y,Z),gt=Qe.x,lt=Qe.y,tt=_e.x,Xe=_e.y;e.moveTo(gt,lt),e.lineTo(tt,Xe);const ae=100;Je=Array.from({length:ae},(He,F)=>({x:(tt-gt)/(ae-1)*F+gt,y:(Xe-lt)/(ae-1)*F+lt})).flatMap(He=>[He.x,He.y])}else{const De=p-H/m*B,Qe=Mt(q,h,De,G,v,y,Z),_e=Mt($,h,De,G,v,y,Z),gt=Qe.x,lt=Qe.y,tt=Qe.x,Xe=Qe.y,ae=h/2,ye=m/2,He=_e.x,F=_e.y;e.moveTo(gt,lt);const T=new Ii(gt,lt,tt,Xe,ae,ye,He,F);T.getLUT(14).forEach(me=>e.lineTo(me.x,me.y)),Je=T.getLUT(1e3).flatMap(me=>[me.x,me.y])}}else if(((ge=u.style)==null?void 0:ge.linkStyle)==="elliptical"){if(!(0<=q&&q<=h)&&!(0<=$&&$<=h))return;const De=[],Qe=ut(u.y);for(let _e=0;_e<=X;_e++){const gt=Math.PI*(_e/X),lt=($-q)/2*Math.cos(gt)+(q+$)/2;let tt=Be-Q*Math.sin(gt)*(Qe?1:Math.min($-q+h*S,h)/h)*(We?-1:1);if(typeof Q<"u"&&typeof ie<"u"){const Xe=Math.abs(ie-Q),ae=ie>Q;tt=Q-Xe*Math.sin(gt)*(ae?-1:1)}if(_e===0)if(W){const Xe=We?Be-m:Be;e.moveTo(lt,Xe),De.push({x:lt,y:Xe}),e.lineTo(lt,tt)}else e.moveTo(lt,tt);else e.lineTo(lt,tt);if(De.push({x:lt,y:tt}),_e===X&&W){const Xe=We?Be-m:Be;e.lineTo(lt,Xe),De.push({x:lt,y:Xe})}}Je=De.flatMap(_e=>[_e.x,_e.y])}else{if($<0||q>h)return;e.arc(Pe,Be,($-q)/2,-Math.PI,Math.PI),Je=Array.from(e.currentPath.points),e.closePath()}I.getMouseEventModel().addLineBasedEvent(Y,Je)}})})}function aje(e,g,I){return[...e.slice(0,g),I,...e.slice(g)]}function Aje(e){const g=[];for(let I=0;Itypeof g=="number")}function Tbe(e){return Hbe(e,g=>typeof g=="string")}function sje(e,g,I){cje(e,g,I),lje(e,g,I)}function lje(e,g,I){var i,n,C,r;const o=g.spec();if(!ut(o.row)||o.row.grid!==!0)return;const[a,s]=e.position,[A,l]=e.dimensions,c=g.spec().layout==="circular",u=(i=o.innerRadius)!=null?i:220,d=(n=o.outerRadius)!=null?n:300,h=(C=o.startAngle)!=null?C:0,m=(r=o.endAngle)!=null?r:360,f=d-u,b=A/2,p=l/2,y=g.getChannelDomainArray("row");if(!y)return;const Z=l/y.length;if(c&&f<=20||!c&&Z<=20)return;const B=e.pBackground,G=I.axis.gridStrokeWidth;y.forEach(v=>{const w=g.encodedValue("row",v);if(c){const R=w+Z/2,S=d-R/l*f,X=S+G/2,W=S-G/2,V=Mt(0,A,W,b,p,h,m),H=jg(0,A,h,m),Y=jg(A,A,h,m);B.lineStyle(G,pt("black"),0,.5),B.beginFill(pt(I.axis.gridColor),1),B.moveTo(a+V.x,s+V.y),B.arc(a+b,s+p,W,H,Y,!0),B.arc(a+b,s+p,X,Y,H,!1),B.closePath()}else{B.lineStyle(G,pt(I.axis.gridColor),1,.5);const R=s+w+Z/2;B.moveTo(a,R),B.lineTo(a+A,R)}})}function cje(e,g,I){var i,n,C,r,o;const a=g.spec();if(!ut(a.y)||a.y.grid!==!0)return;const[s,A]=e.position,[l,c]=e.dimensions,u=s,d=s+l,h=g.spec().layout==="circular",m=(i=a.innerRadius)!=null?i:220,f=(n=a.outerRadius)!=null?n:300,b=(C=a.startAngle)!=null?C:0,p=(r=a.endAngle)!=null?r:360,y=f-m,Z=l/2,B=c/2,G=(o=g.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],v=c/G.length;if(!Tbe(G))return;const w=g.getChannelScale("y"),R=g.getChannelDomainArray("y");if(!w||!R||!s7(R)||h&&v/c*y<=20||!h&&v<=20)return;const S=e.pBackground,X=I.axis.gridStrokeWidth;G.forEach(W=>{const V=g.encodedValue("row",W),H=h?v/c*y:v,Y=Math.max(Math.ceil(H/40),1);let K=w.ticks(Y).filter(x=>R[0]<=x&&x<=R[1]);K.length===1&&(K=w.ticks(Y+1).filter(x=>R[0]<=x&&x<=R[1])),h?K.forEach(x=>{const J=w(x),P=f-(V+v-J)/c*y,ge=P+X/2,q=P-X/2,$=Mt(0,l,q,Z,B,b,p),j=jg(0,l,b,p),te=jg(l,l,b,p);S.lineStyle(X,pt("black"),0,.5),S.beginFill(pt(I.axis.gridColor),1),S.moveTo(s+$.x,A+$.y),S.arc(s+Z,A+B,q,j,te,!0),S.arc(s+Z,A+B,ge,te,j,!1),S.closePath()}):(S.lineStyle(X,pt(I.axis.gridColor),1,.5),K.forEach(x=>{var J;const P=A+V+v-w(x);if(I.axis.gridStrokeType==="solid")S.moveTo(u,P),S.lineTo(d,P);else if(I.axis.gridStrokeType==="dashed"){const[ge,q]=(J=I.axis.gridStrokeDash)!=null?J:[1,1];for(let $=u;$=R;Y-=w/10){const K=Mt(Y,A,b-v.height/2,h,m,u,d);X.push(new e.libraries.PIXI.Point(K.x,K.y))}const W=jg(R,A,u,d),V=jg(S+p,A,u,d);f.lineStyle(1,pt("red"),0,.5),f.beginFill(pt(n.track.titleBackground),.5),f.moveTo(y.x,y.y),f.arc(h,m,b-v.height,W,V,!0),f.arc(h,m,b,V,W,!1),f.closePath(),B.updateText();const H=new e.libraries.PIXI.SimpleRope(B.texture,X);f.addChild(H)}function dje(e,g,I){var i,n,C,r;const o=e.pBorder,[a,s]=e.position,[A,l]=e.dimensions;o.lineStyle((n=(i=g.spec().style)==null?void 0:i.outlineWidth)!=null?n:1,pt((r=(C=g.spec().style)==null?void 0:C.outline)!=null?r:I.track.outline),1,.5),o.beginFill(pt("white"),0),o.drawRect(a,s,A,l);const c=g.spec().x;o.lineStyle(1,pt(I.axis.baselineColor),1,.5),ut(c)&&c.axis==="top"?(o.moveTo(a,s),o.lineTo(a+A,s)):ut(c)&&c.axis==="bottom"&&(o.moveTo(a,s+l),o.lineTo(a+A,s+l))}function hje(e,g,I,i,n){if(!g.gLegend)return;g.gLegend.selectAll(".brush").remove();const C=i.spec(),r={offsetRight:0};if(ut(C.color)&&C.color.legend)switch(C.color.type){case"nominal":mje(e,g,I,i,n);break;case"quantitative":_te(e,g,I,i,n,"color",r);break}if(ut(C.stroke)&&C.stroke.legend)switch(C.stroke.type){case"quantitative":_te(e,g,I,i,n,"stroke",r);break}}function _te(e,g,I,i,n,C,r){const o=i.spec(),a=o[C];if(!ut(a)||a.type!=="quantitative"||!a.legend)return;const[s,A]=g.position,[l,c]=g.dimensions,u=80,d=c-2>110?110:Math.max(c-2,40-2),h={top:10,left:55,width:20,height:d-20},m=s+l-u-1-r.offsetRight,f=A+1,b=i.getChannelScale(C),p=i.getChannelDomainArray(C);if(!b||!p)return;const y=g.pBorder;if(y.beginFill(pt(n.legend.background),n.legend.backgroundOpacity),y.lineStyle(1,pt(n.legend.backgroundStroke),n.legend.backgroundOpacity,0),y.drawRect(m,f,u,d),a.title){const H=a.title,Y=Fs({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily}),K=new e.libraries.PIXI.Text(H,{...Y,fontWeight:"bold"});K.anchor.x=0,K.anchor.y=0,K.position.x=m+10,K.position.y=f+10;const x=new e.libraries.PIXI.TextStyle({...Y,fontWeight:"bold"}),J=e.libraries.PIXI.TextMetrics.measureText(H,x);y.addChild(K),h.top+=J.height+4,h.height-=J.height+4}const[Z,B]=p,G=B-Z,v=ut(a)&&a.scaleOffset?a.scaleOffset:[0,1];[...Array(h.height).keys()].forEach(H=>{let Y;const K=Array.from(v).sort();if(H/h.height>=K[1])Y=B;else if(H/h.height<=K[0])Y=Z;else{const x=qd().domain([h.height*K[0],h.height*K[1]]).range([0,h.height]);Y=qd().domain([0,h.height]).range([Z,B])(x(H))}y.beginFill(pt(b(Y)),1),y.lineStyle(1,pt(n.legend.backgroundStroke),0,.5),y.drawRect(m+h.left,f+h.top+h.height-H,h.width,1)});const w=4;g.colorBrushes=g.gLegend.append("g").attr("class",C).selectAll(".brush").data(v.map((H,Y)=>({y:H,id:Y}))).enter().append("rect").attr("class","brush").attr("pointer-events","all").attr("cursor","ns-resize").attr("transform",H=>`translate(${m+h.left}, ${f+h.top-w/2+h.height-h.height*H.y})`).attr("width",`${h.width}px`).attr("height",`${w}px`).attr("fill","lightgrey").attr("stroke","black").attr("stroke-width","0.5px").call(e.libraries.d3Drag.drag().on("start",H=>{g.startEvent=H.sourceEvent}).on("drag",(H,Y)=>{if(a&&a.scaleOffset){const K=H.sourceEvent,x=g.startEvent.clientY-K.clientY,J=[a.scaleOffset[0],a.scaleOffset[1]];Y.id===0?J[0]+=x/h.height:J[1]+=x/h.height,J[0]=Math.min(1,Math.max(0,J[0])),J[1]=Math.min(1,Math.max(0,J[1])),g.updateScaleOffsetFromOriginalSpec(o._renderingId,J,C),g.shareScaleOffsetAcrossTracksAndTiles(J,C),g.draw(),g.startEvent=H.sourceEvent}}));const R=Math.max(Math.ceil(h.height/30),2);let S=b.ticks(R).filter(H=>p[0]<=H&&H<=p[1]);S.length===1&&(S=b.ticks(R+1).filter(H=>p[0]<=H&&H<=p[1]));const X=1;y.lineStyle(X,pt(n.legend.tickColor),1,.5);const W=Fs({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily}),V=m+h.left;S.forEach(H=>{let Y=f+h.top+h.height-(H-Z)/G*h.height;Y===f+h.top?Y+=X/2:Y===f+h.top+h.height&&(Y-=X/2),y.moveTo(V-3,Y),y.lineTo(V,Y);const K=new e.libraries.PIXI.Text(H,W);K.anchor.x=1,K.anchor.y=.5,K.position.x=V-6,K.position.y=Y,y.addChild(K)}),r.offsetRight=l-m}function mje(e,g,I,i,n){var C,r,o,a,s;const A=i.spec();if(!ut(A.color)||A.color.type!=="nominal"||!A.color.legend)return;const l=(C=i.getChannelDomainArray("color"))!=null?C:["___SINGLE_COLOR___"];if(l.length===0)return;const c=A.color.domain,u=A.color.range,d=g.displayedLegends,h=G=>typeof G=="string"?G:G.join();if(d.find(G=>h(G.domain)===h(c)&&h(G.range)===h(u)))return;d.push({domain:c,range:u});const m=g.pBorder,f=10,b=4;let p=b,y=0;const Z=[],B=Fs({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily});if((r=A.style)!=null&&r.inlineLegend)l.map(G=>G).reverse().forEach(G=>{if(y>g.dimensions[0])return;const v=i.encodedValue("color",G),w=new e.libraries.PIXI.Text(G,B);w.anchor.x=1,w.anchor.y=0,w.position.x=g.position[0]+g.dimensions[0]-y-f,w.position.y=g.position[1]+b,m.addChild(w);const R=new e.libraries.PIXI.TextStyle(B),S=e.libraries.PIXI.TextMetrics.measureText(G,R);p{if(p>g.dimensions[1])return;const v=i.encodedValue("color",G),w=new e.libraries.PIXI.Text(G,B);w.anchor.x=1,w.anchor.y=0,w.position.x=g.position[0]+g.dimensions[0]-f,w.position.y=g.position[1]+p,m.addChild(w);const R=new e.libraries.PIXI.TextStyle(B),S=e.libraries.PIXI.TextMetrics.measureText(G,R);y{m.lineStyle(1,pt("black"),0,0),m.beginFill(pt(G.color),1),m.drawCircle(G.x,G.y,4)})}function fje(e,g,I,i,n){var C;const r=i.spec();if(!ut(r.row)||r.row.type!=="nominal"||!r.row.legend)return;const o=(C=i.getChannelDomainArray("row"))!=null?C:["___SINGLE_ROW___"];if(o.length===0)return;const a=g.pBorder,s=4,A=2,l=Fs({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily});o.forEach(c=>{const u=i.encodedValue("row",c),d=new e.libraries.PIXI.Text(c,l);d.anchor.x=0,d.anchor.y=0,d.position.x=g.position[0]+s,d.position.y=g.position[1]+u+A,a.addChild(d);const h=new e.libraries.PIXI.TextStyle(l),m=e.libraries.PIXI.TextMetrics.measureText(c,h);a.beginFill(pt(n.legend.background),n.legend.backgroundOpacity),a.lineStyle(1,pt(n.legend.backgroundStroke),0,0),a.drawRect(g.position[0]+1,g.position[1]+u+1,m.width+s*2,m.height+A*2)})}const c3=8,FZ=6;function pje(e,g,I,i,n){var C;const r=i.spec(),o=r.layout==="circular",a=i.getChannelDomainArray("y"),s=i.getChannelRangeArray("y");if(o||!i.isShowYAxis()||!a||!s||!s7(a))return;const[A,l]=g.dimensions,[c,u]=g.position,d=(C=i.getChannelDomainArray("row"))!=null?C:["___SINGLE_ROW___"];if(!Tbe(d))return;const h=l/d.length;if(h<=20)return;const m=i.spec().y,f=!(ut(m)&&"axis"in m&&m.axis==="right"),b=qd().domain(a).range(s),p=g.pBorder;d.forEach(y=>{const Z=i.encodedValue("row",y),B=f?c:c+A,G=u+Z;p.lineStyle(1,pt(n.axis.baselineColor),1,.5),p.moveTo(B,G),p.lineTo(B,G+h);const v=Math.max(Math.ceil(h/40),1);let w=b.ticks(v).filter(X=>a[0]<=X&&X<=a[1]);w.length===1&&(w=b.ticks(v+1).filter(X=>a[0]<=X&&X<=a[1])),p.lineStyle(1,pt(n.axis.tickColor),1,.5);let R=f?B+FZ:B-FZ;w.forEach(X=>{const W=b(X);p.moveTo(B,G+h-W),p.lineTo(R,G+h-W)}),R=f?B+c3:B-c3,p.moveTo(B,G),p.lineTo(R,G),p.moveTo(B,G+h),p.lineTo(R,G+h);const S=Fs({color:n.axis.labelColor,size:n.axis.labelFontSize,fontFamily:n.axis.labelFontFamily,fontWeight:n.axis.labelFontWeight});w.forEach(X=>{const W=b(X);R=f?B+FZ*2:B-FZ*2;const V=new e.libraries.PIXI.Text(X,S);V.anchor.x=f?0:1,V.anchor.y=W===0?.9:.5,V.position.x=R,V.position.y=G+h-W,r.orientation==="vertical"&&(V.anchor.x=f?1:0,V.scale.x*=-1),p.addChild(V)})})}function bje(e,g,I,i,n){var C,r,o,a,s;const A=i.spec(),l=A.layout==="circular",c=i.getChannelDomainArray("y"),u=i.getChannelRangeArray("y");if(!l||!i.isShowYAxis()||!c||!u||!s7(c))return;const[d,h]=g.dimensions,m=(C=A.innerRadius)!=null?C:220,f=(r=A.outerRadius)!=null?r:300,b=f-m,p=(o=A.startAngle)!=null?o:0,y=(a=A.endAngle)!=null?a:360,Z=d/2,B=h/2,G=(s=i.getChannelDomainArray("row"))!=null?s:["___SINGLE_ROW___"],v=h/G.length;if(v/h*b<=20)return;const w=i.spec().y,R=!(ut(w)&&"axis"in w&&w.axis==="right"),S=qd().domain(c).range(u),X=I.graphics;G.forEach(W=>{const V=i.encodedValue("row",W),H=f-(V+v)/h*b,Y=f-V/h*b,K=Mt(R?0:d,d,H,Z,B,p,y),x=Mt(R?0:d,d,Y,Z,B,p,y);X.lineStyle(1,pt(n.axis.baselineColor),1,.5),X.moveTo(K.x,K.y),X.lineTo(x.x,x.y);const J=j=>FZ*d/2/Math.PI/j,P=j=>c3*d/2/Math.PI/j,ge=v/h*b,q=Math.max(Math.ceil(ge/40),1);let $=S.ticks(q).filter(j=>c[0]<=j&&j<=c[1]);$.length===1&&($=S.ticks(q+1).filter(j=>c[0]<=j&&j<=c[1])),X.lineStyle(1,pt(n.axis.tickColor),1,.5),$.forEach(j=>{const te=S(j),Q=f-(V+v-te)/h*b,ie=R?0:d-J(Q),he=R?J(Q):d,ne=Mt(ie,d,Q,Z,B,p,y),be=jg(ie,d,p,y),pe=jg(he,d,p,y);X.moveTo(ne.x,ne.y),X.arc(Z,B,Q,be,pe,!0),X.arc(Z,B,Q,pe,be,!1),X.closePath()});{const j=R?0:d-P(m),te=R?P(m):d,Q=jg(j,d,p,y),ie=jg(te,d,p,y);X.moveTo(K.x,K.y),X.arc(Z,B,m,Q,ie,!0),X.arc(Z,B,m,ie,Q,!1),X.closePath()}{const j=R?0:d-P(f),te=R?P(f):d,Q=jg(j,d,p,y),ie=jg(te,d,p,y);X.moveTo(x.x,x.y),X.arc(Z,B,f,Q,ie,!0),X.arc(Z,B,f,ie,Q,!1),X.closePath()}$.forEach(j=>{const te=S(j),Q=f-(V+v-te)/h*b,ie=Mt(J(Q)*2,d,Q,Z,B,p,y),he=Fs({color:n.axis.labelColor,size:n.axis.labelFontSize,fontFamily:n.axis.labelFontFamily,fontWeight:n.axis.labelFontWeight}),ne=new e.libraries.PIXI.Text(j,he);ne.anchor.x=R?1:0,ne.anchor.y=.5,ne.position.x=ie.x,ne.position.y=ie.y,ne.resolution=4;const be=new e.libraries.PIXI.TextStyle(he),ve=e.libraries.PIXI.TextMetrics.measureText(ne.text,be).width/(2*Q*Math.PI)*d*360/(y-p),We=R?J(Q)*2:d-J(Q)*2-ve,Be=R?J(Q)*2+ve:d-J(Q)*2,Je=[];for(let De=Be;De>=We;De-=ve/10){const Qe=Mt(De,d,Q,Z,B,p,y);Je.push(new e.libraries.PIXI.Point(Qe.x,Qe.y))}ne.updateText();const Pe=new e.libraries.PIXI.SimpleRope(ne.texture,Je);X.addChild(Pe)})})}function yje(e,g,I){var i,n,C,r,o,a,s,A,l,c,u,d;const h=g.spec(),[m,f]=e.position,[b,p]=e.dimensions,y=(i=h.innerRadius)!=null?i:220,Z=(n=h.outerRadius)!=null?n:300,B=(C=h.startAngle)!=null?C:0,G=(r=h.endAngle)!=null?r:360,v=m+b/2,w=f+p/2,R=Mt(0,b,y,v,w,B,G),S=jg(0,b,B,G),X=jg(b,b,B,G),W=e.pBackground;h.layout==="circular"&&h.mark==="withinLink"||(W.lineStyle((o=h.style)!=null&&o.outlineWidth?((a=h.style)==null?void 0:a.outlineWidth)/2.5:0,pt((A=(s=h.style)==null?void 0:s.outline)!=null?A:"#DBDBDB"),1,1),W.beginFill(pt((c=(l=g.spec().style)==null?void 0:l.background)!=null?c:I.track.background),(d=(u=g.spec().style)==null?void 0:u.backgroundOpacity)!=null?d:!I.track.background||I.track.background==="transparent"?0:1),W.moveTo(R.x,R.y),W.arc(v,w,y,S,X,!0),W.arc(v,w,Z,X,S,!1),W.closePath()),ut(h.x)&&h.x.axis==="top"&&(W.lineStyle(.5,pt("black"),0,.5),W.beginFill(pt("white"),0),W.moveTo(R.x,R.y),W.arc(v,w,Z-.5,S,X,!0),W.arc(v,w,Z,X,S,!1),W.closePath()),W.lineStyle(.5,pt("black"),0,.5),W.beginFill(pt("white"),0),W.moveTo(v,w),W.arc(v,w,Z+3,S,X,!1),W.closePath(),W.lineStyle(1,pt("#DBDBDB"),0,0),W.beginFill(pt("white"),0),W.drawCircle(v,w,y-1)}function Zje(e,g,I){var i,n,C,r,o,a;const[s,A]=e.position,[l,c]=e.dimensions,u=e.pBackground;if((i=g.spec().style)!=null&&i.background||I.track.background&&I.track.background!=="transparent"){u.clear();const d=(C=(n=g.spec().style)==null?void 0:n.background)!=null?C:I.track.background,h=Jte((r=g.spec().style)==null?void 0:r.backgroundOpacity)?1:(o=g.spec().style)==null?void 0:o.backgroundOpacity;u.lineStyle(1,pt("white"),0,0),u.beginFill(pt(d),h),u.drawRect(s,A,l,c)}if(I.track.alternatingBackground&&I.track.alternatingBackground!=="transparent"){const d=g.spec();if(!ut(d.row)||d.row.type!=="nominal")return;const h=(a=g.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"];if(h.length===0)return;h.forEach((m,f)=>{var b,p,y,Z;if(f%2===0)return;const B=g.encodedValue("row",m),G=(p=(b=g.spec().style)==null?void 0:b.background)!=null?p:I.track.alternatingBackground,v=Jte((y=g.spec().style)==null?void 0:y.backgroundOpacity)?1:(Z=g.spec().style)==null?void 0:Z.backgroundOpacity;u.lineStyle(1,pt("white"),0,0),u.beginFill(pt(G),v),u.drawRect(e.position[0],e.position[1]+B,l,c/h.length)})}}function Gje(e,g,I){var i,n,C,r,o;const a=I.spec();if(!a.width||!a.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const s=I.data(),[A,l]=g.dimensions,c=a.layout==="circular",u=(i=a.innerRadius)!=null?i:220,d=(n=a.outerRadius)!=null?n:300,h=(C=a.startAngle)!=null?C:0,m=(r=a.endAngle)!=null?r:360,f=d-u,b=A/2,p=l/2,y=(o=I.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],Z=l/y.length;y.forEach(B=>{const G=I.encodedValue("row",B);s.filter(v=>!pI(v,a.row)||pI(v,a.row)===B).forEach(v=>{var w,R;let S=I.encodedPIXIProperty("x",v),X=I.encodedPIXIProperty("xe",v),W=I.encodedPIXIProperty("x1",v),V=I.encodedPIXIProperty("x1e",v);const H=I.encodedPIXIProperty("y",v),Y=I.encodedPIXIProperty("stroke",v),K=I.encodedPIXIProperty("strokeWidth",v),x=I.encodedPIXIProperty("color",v),J=I.encodedPIXIProperty("opacity",v);typeof X<"u"&&([S,X]=[S,X].sort((ge,q)=>ge-q)),typeof W<"u"&&typeof V<"u"&&([W,V]=[W,V].sort((ge,q)=>ge-q));const P=typeof X<"u"&&typeof W<"u"&&typeof V<"u"&&Math.abs(S-X)>.1&&Math.abs(W-V)>.1;if(!P&&X===void 0&&!iC(a)){if(W===void 0&&V===void 0)return;X=W!==void 0?W:V}if(!P&&Math.abs(S-X)<=.1&&Math.abs(W-V)<=.1&&(S=(S+X)/2,X=(W+V)/2),e.lineStyle(K,pt(Y),J,.5),P){e.beginFill(pt(x==="none"?"white":x),x==="none"?0:J);let[ge,q,$,j]=[S,X,W,V];if([ge,q]=[ge,q].sort((te,Q)=>te-Q),[$,j]=[$,j].sort((te,Q)=>te-Q),ge>A||j<0||Math.abs(j-ge)<.5)return;if(c){if(ge<0||j>A)return;const te=d-G/l*f,Q=Mt(ge,A,te,b,p,h,m),ie=Mt(q,A,te,b,p,h,m),he=Mt($,A,te,b,p,h,m),ne=Mt(j,A,te,b,p,h,m);e.moveTo(Q.x,Q.y),e.bezierCurveTo(b,p,b,p,ne.x,ne.y),e.arc(b,p,d,lc(ne.x,ne.y,b,p),lc(he.x,he.y,b,p),!1),e.bezierCurveTo(b,p,b,p,ie.x,ie.y),e.arc(b,p,d,lc(ie.x,ie.y,b,p),lc(Q.x,Q.y,b,p),!1),e.endFill()}else e.moveTo(ge,G),e.lineTo(q,G),e.lineTo(j,G+Z),e.lineTo($,G+Z),e.lineTo(ge,G),e.closePath()}else{if(iC(a)){((w=a.style)==null?void 0:w.linkConnectionType)==="curve"?(e.moveTo(S,0),e.bezierCurveTo(S/5*4,(G+Z-H)/2,S/2,(G+Z-H)/5*4,0,G+Z-H)):((R=a.style)==null?void 0:R.linkConnectionType)==="straight"?(e.moveTo(S,0),e.lineTo(0,G+Z-H)):(e.moveTo(S,0),e.lineTo(S,G+Z-H),e.lineTo(0,G+Z-H));return}if(c){let ge,q;for(let $=0;$<=1;$+=.02){const j=ne=>Math.log(ne/(1-ne)),te=ne=>d-1/(1+Math.exp(j(ne)))*f+3,Q=(ne,be,pe)=>((pe-be)*ne+be)/A,ie=b+te($)*Math.cos(-Q($,S,X)*2*Math.PI-Math.PI/2),he=p+te($)*Math.sin(-Q($,S,X)*2*Math.PI-Math.PI/2);ge&&q&&(e.lineStyle(K,pt(Y),J,.5),e.moveTo(ge,q),e.lineTo(ie,he)),ge=ie,q=he}return}e.moveTo(X,G+Z),e.lineTo(S,G)}})})}const Xd=["x","xe","x1","x1e","y","ye","y1","y1e","color","size","row","stroke","strokeWidth","opacity","text"];function vje(e,g,I,i){if(!e||!g||!I||i.spec().mark==="brush")return;if(["x","x1","x1e","xe"].forEach(r=>{i.setChannelScale(r,g._xScale)}),iC(i.spec())||Yje(i.spec())){const r=g._yScale.copy();r.range([r.range()[1],r.range()[0]]),["y","y1","y1e","ye"].forEach(o=>{i.setChannelScale(o,r)})}const[n,C]=g.dimensions;switch(i.spec().mark){case"point":j4e(g,I.graphics,i);break;case"bar":eje(g,I,i);break;case"line":q4e(I.graphics,i,n,C);break;case"area":gje(e,g,I,i);break;case"rect":Ije(e,g,I,i);break;case"triangleLeft":case"triangleRight":case"triangleBottom":nje(I.graphics,i,n,C);break;case"text":Cje(e,g,I,i);break;case"rule":rje(e,g,I,i);break;case"betweenLink":Gje(I.graphics,g,i);break;case"withinLink":oje(I.graphics,g,i);break;default:console.warn("Unsupported mark type");break}}function Bje(e,g,I,i,n){if(!e||!g||!I||i.spec().mark==="brush")return;["x","x1","x1e","xe"].forEach(r=>{i.setChannelScale(r,g._xScale)}),i.spec().layout==="circular"?yje(g,i,n):(Zje(g,i,n),dje(g,i,n)),sje(g,i,n)}function Sje(e,g,I,i,n){if(!e||!g||!I||i.spec().mark==="brush")return;["x","x1","x1e","xe"].forEach(r=>{i.setChannelScale(r,g._xScale)}),i.spec().layout==="circular"?(bje(e,g,I,i,n),uje(e,g,I,i,n)):(pje(e,g,I,i,n),fje(e,g,I,i,n)),hje(e,g,I,i,n)}function N0(e){if(Ybe(e)||HS(e))return[];if(!ui(e))return[e];if(e._overlay.length===0)return[{...e,superpose:void 0}];const g=JSON.parse(JSON.stringify(e));delete g._overlay;const I=[];e._overlay.forEach((C,r)=>{const o=Object.assign(JSON.parse(JSON.stringify(g)),C);o.title&&r!==0&&delete o.title,I.push(o)});let i;return I.forEach(C=>{ut(C.x)&&C.x.axis&&!i&&(i=C.x.axis)}),I.map(C=>({...C,x:{...C.x,axis:i}}))}function Nbe(e){return[].concat(...e.map(g=>{if(Ybe(g)||!ui(g)||g._overlay.length<=1)return[g];if(g._overlay.filter(r=>r.data).length===0)return[g];if(Lte([g.data,...g._overlay.map(r=>r.data)]))return[g];const I={...g,id:void 0,_overlay:void 0},i=[],n=JSON.parse(JSON.stringify(I));return n._overlay=[],g._overlay.forEach(r=>{if(n.data||(n.data=r.data),n.id||(n.id=r.id),!r.data||Lte([n.data,r.data])){n._overlay.push(r);return}const o=Object.assign(JSON.parse(JSON.stringify(I)),r);i.push(o)}),(n._overlay.length>0?[n,...i]:i).map((r,o,a)=>{const s=o!==0,A=Er(r)&&ut(r.y)&&!r.y.axis&&s?{...r.y,axis:o===1?"right":"none"}:Er(r)?r.y:void 0;return r.title&&o!==a.length-1&&a.length!==1&&delete r.title,{...r,overlayOnPreviousTrack:s,y:A}})}))}function Lte(e){if(e.length===0)return!1;const g=e.filter(n=>n);if(g.length!==e.length)return!1;const I=Object.keys(g[0]).sort();let i=!0;return I.forEach(n=>{if(Array.from(new Set(g.map(r=>JSON.stringify(r[n])))).length!==1){i=!1;return}}),i}const F9={viridis:Rbe,grey:H4e,warm:N4e,spectral:v4e,cividis:T4e,bupu:S4e,rdbu:Z4e,hot:W4e,pink:R4e};function l7(e){return typeof e=="object"&&e!==null}function LR(e){return l7(e)&&"getTabularData"in e}function wje(e,g){var I;return((I=e.dataTransform)!=null?I:[]).some(i=>i.type===g)}function Rje(e="viridis",g=100){var I;const i=(I=F9[e])!=null?I:F9.viridis;return[...Array(g)].map((n,C)=>i(1/g*C))}function kbe(e){return!("alignment"in e)&&!e.tracks.find(g=>g.alignment==="overlay"||"tracks"in g)}function Vje(e){return"alignment"in e&&e.alignment==="overlay"}function Wje(e){return!kbe(e)&&!Vje(e)}function Ybe(e){return!ui(e)&&"data"in e&&!("mark"in e)}function HS(e){return"type"in e&&e.type=="dummy-track"}function Xje(e){return!!("data"in e&&"overrideTemplate"in e&&e.overrideTemplate)}function Ute(e){return typeof e=="object"}function Hje(e){return"chromosome"in e&&!("interval"in e)}function Tje(e){return!("chromosome"in e)&&"interval"in e}function Nje(e){return"chromosome"in e&&"interval"in e}function Er(e){return!("_overlay"in e)}function ui(e){return"_overlay"in e}function kje(e){return"template"in e}function Yje(e){return Er(e)&&!ut(e.x)&&ut(e.y)&&e.y.type==="genomic"}function iC(e){const g=Er(e)?e:N0(e)[0];return ut(g.x)&&g.x.type==="genomic"&&ut(g.y)&&g.y.type==="genomic"}function Kje(e){return iC(e)&&e.data.type==="matrix"&&(e.mark==="bar"||e.mark==="rect")&&e.xe&&e.ye}function F1(e){return e!==null&&typeof e=="object"&&"value"in e}function c7(e){return e!==void 0&&(e.type==="vector"||e.type==="beddb"||e.type==="multivec"||e.type==="bigwig"||e.type==="matrix"||e.type==="bam"||e.type==="vcf"||e.type==="gff"||e.type==="bed")}function ut(e){return l7(e)&&!("value"in e)}function Fje(e){return"oneOf"in e}function Dje(e){return"inRange"in e}function xje(e){return"include"in e}function Qte(e){return Array.isArray(e)}function Eje(e){return Array.isArray(e)}function KT(e){return(e.mark==="bar"||e.mark==="area"||e.mark==="text")&&ut(e.color)&&e.color.type==="nominal"&&(!e.row||F1(e.row))&&ut(e.y)&&e.y.type==="quantitative"&&!ut(e.ye)}function Mje(e,g){const I=e[g];return KT(e)&&(g==="x"||g==="y")&&ut(I)&&I.type==="quantitative"}function pI(e,g){if(ut(g)&&g.field)return e[g==null?void 0:g.field]}function zje(e){const g=[];return Xd.forEach(I=>{const i=e[I];ut(i)&&"aggregate"in i&&g.push(I)}),g}function u5(e,g){const I=[];return Xd.forEach(i=>{const n=e[i];ut(n)&&n.type===g&&I.push(i)}),I}function D9(e){if((Er(e)||ui(e))&&ut(e.x)&&e.x.axis&&e.x.axis!=="none")return!0;if(ui(e)){let g=!1;return e._overlay.forEach(I=>{g||ut(I.x)&&I.x.axis&&I.x.axis!=="none"&&(g=!0)}),g}return!1}function Pje(e){if((Er(e)||ui(e))&&ut(e.y)&&e.y.axis&&e.y.axis!=="none")return!0;if(ui(e)){let g=!1;return e._overlay.forEach(I=>{g||ut(I.y)&&I.y.axis&&I.y.axis!=="none"&&(g=!0)}),g}return!1}function km(e){return typeof e=="object"}var gh=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Jje(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u3={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(e,g){(function(I,i){i(g)})(gh,function(I){function i(){for(var O=arguments.length,D=Array(O),ee=0;ee1){D[0]=D[0].slice(0,-1);for(var ce=D.length-1,de=1;de= 0x80 (not a basic code point)","invalid-input":"Invalid input"},S=h-m,X=Math.floor,W=String.fromCharCode;function V(O){throw new RangeError(R[O])}function H(O,D){for(var ee=[],ce=O.length;ce--;)ee[ce]=D(O[ce]);return ee}function Y(O,D){var ee=O.split("@"),ce="";ee.length>1&&(ce=ee[0]+"@",O=ee[1]),O=O.replace(w,".");var de=O.split("."),Le=H(de,D).join(".");return ce+Le}function K(O){for(var D=[],ee=0,ce=O.length;ee=55296&&de<=56319&&ee>1,D+=X(D/ee);D>S*f>>1;de+=h)D=X(D/S);return X(de+(S+1)*D/(D+b))},q=function(D){var ee=[],ce=D.length,de=0,Le=Z,Ue=y,dt=D.lastIndexOf(B);dt<0&&(dt=0);for(var yt=0;yt=128&&V("not-basic"),ee.push(D.charCodeAt(yt));for(var kt=dt>0?dt+1:0;kt=ce&&V("invalid-input");var At=J(D.charCodeAt(kt++));(At>=h||At>X((d-de)/Rt))&&V("overflow"),de+=At*Rt;var Xt=xt<=Ue?m:xt>=Ue+f?f:xt-Ue;if(AtX(d/Pt)&&V("overflow"),Rt*=Pt}var Ft=ee.length+1;Ue=ge(de-ht,Ft,ht==0),X(de/Ft)>d-Le&&V("overflow"),Le+=X(de/Ft),de%=Ft,ee.splice(de++,0,Le)}return String.fromCodePoint.apply(String,ee)},$=function(D){var ee=[];D=K(D);var ce=D.length,de=Z,Le=0,Ue=y,dt=!0,yt=!1,kt=void 0;try{for(var ht=D[Symbol.iterator](),Rt;!(dt=(Rt=ht.next()).done);dt=!0){var xt=Rt.value;xt<128&&ee.push(W(xt))}}catch(fC){yt=!0,kt=fC}finally{try{!dt&&ht.return&&ht.return()}finally{if(yt)throw kt}}var At=ee.length,Xt=At;for(At&&ee.push(B);Xt=de&&UtX((d-Le)/Yt)&&V("overflow"),Le+=(Pt-de)*Yt,de=Pt;var Wt=!0,tg=!1,_t=void 0;try{for(var qt=D[Symbol.iterator](),Ag;!(Wt=(Ag=qt.next()).done);Wt=!0){var Wg=Ag.value;if(Wgd&&V("overflow"),Wg==de){for(var mg=Le,PI=h;;PI+=h){var en=PI<=Ue?m:PI>=Ue+f?f:PI-Ue;if(mg>6|192).toString(16).toUpperCase()+"%"+(D&63|128).toString(16).toUpperCase():ee="%"+(D>>12|224).toString(16).toUpperCase()+"%"+(D>>6&63|128).toString(16).toUpperCase()+"%"+(D&63|128).toString(16).toUpperCase(),ee}function ne(O){for(var D="",ee=0,ce=O.length;ee=194&&de<224){if(ce-ee>=6){var Le=parseInt(O.substr(ee+4,2),16);D+=String.fromCharCode((de&31)<<6|Le&63)}else D+=O.substr(ee,6);ee+=6}else if(de>=224){if(ce-ee>=9){var Ue=parseInt(O.substr(ee+4,2),16),dt=parseInt(O.substr(ee+7,2),16);D+=String.fromCharCode((de&15)<<12|(Ue&63)<<6|dt&63)}else D+=O.substr(ee,9);ee+=9}else D+=O.substr(ee,3),ee+=3}return D}function be(O,D){function ee(ce){var de=ne(ce);return de.match(D.UNRESERVED)?de:ce}return O.scheme&&(O.scheme=String(O.scheme).replace(D.PCT_ENCODED,ee).toLowerCase().replace(D.NOT_SCHEME,"")),O.userinfo!==void 0&&(O.userinfo=String(O.userinfo).replace(D.PCT_ENCODED,ee).replace(D.NOT_USERINFO,he).replace(D.PCT_ENCODED,r)),O.host!==void 0&&(O.host=String(O.host).replace(D.PCT_ENCODED,ee).toLowerCase().replace(D.NOT_HOST,he).replace(D.PCT_ENCODED,r)),O.path!==void 0&&(O.path=String(O.path).replace(D.PCT_ENCODED,ee).replace(O.scheme?D.NOT_PATH:D.NOT_PATH_NOSCHEME,he).replace(D.PCT_ENCODED,r)),O.query!==void 0&&(O.query=String(O.query).replace(D.PCT_ENCODED,ee).replace(D.NOT_QUERY,he).replace(D.PCT_ENCODED,r)),O.fragment!==void 0&&(O.fragment=String(O.fragment).replace(D.PCT_ENCODED,ee).replace(D.NOT_FRAGMENT,he).replace(D.PCT_ENCODED,r)),O}function pe(O){return O.replace(/^0*(.*)/,"$1")||"0"}function ve(O,D){var ee=O.match(D.IPV4ADDRESS)||[],ce=c(ee,2),de=ce[1];return de?de.split(".").map(pe).join("."):O}function We(O,D){var ee=O.match(D.IPV6ADDRESS)||[],ce=c(ee,3),de=ce[1],Le=ce[2];if(de){for(var Ue=de.toLowerCase().split("::").reverse(),dt=c(Ue,2),yt=dt[0],kt=dt[1],ht=kt?kt.split(":").map(pe):[],Rt=yt.split(":").map(pe),xt=D.IPV4ADDRESS.test(Rt[Rt.length-1]),At=xt?7:8,Xt=Rt.length-At,Pt=Array(At),Ft=0;Ft1){var Zt=Pt.slice(0,qg.index),Ut=Pt.slice(qg.index+qg.length);It=Zt.join(":")+"::"+Ut.join(":")}else It=Pt.join(":");return Le&&(It+="%"+Le),It}else return O}var Be=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Je="".match(/(){0}/)[1]===void 0;function Pe(O){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee={},ce=D.iri!==!1?l:A;D.reference==="suffix"&&(O=(D.scheme?D.scheme+":":"")+"//"+O);var de=O.match(Be);if(de){Je?(ee.scheme=de[1],ee.userinfo=de[3],ee.host=de[4],ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=de[7],ee.fragment=de[8],isNaN(ee.port)&&(ee.port=de[5])):(ee.scheme=de[1]||void 0,ee.userinfo=O.indexOf("@")!==-1?de[3]:void 0,ee.host=O.indexOf("//")!==-1?de[4]:void 0,ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=O.indexOf("?")!==-1?de[7]:void 0,ee.fragment=O.indexOf("#")!==-1?de[8]:void 0,isNaN(ee.port)&&(ee.port=O.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?de[4]:void 0)),ee.host&&(ee.host=We(ve(ee.host,ce),ce)),ee.scheme===void 0&&ee.userinfo===void 0&&ee.host===void 0&&ee.port===void 0&&!ee.path&&ee.query===void 0?ee.reference="same-document":ee.scheme===void 0?ee.reference="relative":ee.fragment===void 0?ee.reference="absolute":ee.reference="uri",D.reference&&D.reference!=="suffix"&&D.reference!==ee.reference&&(ee.error=ee.error||"URI is not a "+D.reference+" reference.");var Le=ie[(D.scheme||ee.scheme||"").toLowerCase()];if(!D.unicodeSupport&&(!Le||!Le.unicodeSupport)){if(ee.host&&(D.domainHost||Le&&Le.domainHost))try{ee.host=Q.toASCII(ee.host.replace(ce.PCT_ENCODED,ne).toLowerCase())}catch(Ue){ee.error=ee.error||"Host's domain name can not be converted to ASCII via punycode: "+Ue}be(ee,A)}else be(ee,ce);Le&&Le.parse&&Le.parse(ee,D)}else ee.error=ee.error||"URI can not be parsed.";return ee}function De(O,D){var ee=D.iri!==!1?l:A,ce=[];return O.userinfo!==void 0&&(ce.push(O.userinfo),ce.push("@")),O.host!==void 0&&ce.push(We(ve(String(O.host),ee),ee).replace(ee.IPV6ADDRESS,function(de,Le,Ue){return"["+Le+(Ue?"%25"+Ue:"")+"]"})),(typeof O.port=="number"||typeof O.port=="string")&&(ce.push(":"),ce.push(String(O.port))),ce.length?ce.join(""):void 0}var Qe=/^\.\.?\//,_e=/^\/\.(\/|$)/,gt=/^\/\.\.(\/|$)/,lt=/^\/?(?:.|\n)*?(?=\/|$)/;function tt(O){for(var D=[];O.length;)if(O.match(Qe))O=O.replace(Qe,"");else if(O.match(_e))O=O.replace(_e,"/");else if(O.match(gt))O=O.replace(gt,"/"),D.pop();else if(O==="."||O==="..")O="";else{var ee=O.match(lt);if(ee){var ce=ee[0];O=O.slice(ce.length),D.push(ce)}else throw new Error("Unexpected dot segment condition")}return D.join("")}function Xe(O){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee=D.iri?l:A,ce=[],de=ie[(D.scheme||O.scheme||"").toLowerCase()];if(de&&de.serialize&&de.serialize(O,D),O.host&&!ee.IPV6ADDRESS.test(O.host)){if(D.domainHost||de&&de.domainHost)try{O.host=D.iri?Q.toUnicode(O.host):Q.toASCII(O.host.replace(ee.PCT_ENCODED,ne).toLowerCase())}catch(dt){O.error=O.error||"Host's domain name can not be converted to "+(D.iri?"Unicode":"ASCII")+" via punycode: "+dt}}be(O,ee),D.reference!=="suffix"&&O.scheme&&(ce.push(O.scheme),ce.push(":"));var Le=De(O,D);if(Le!==void 0&&(D.reference!=="suffix"&&ce.push("//"),ce.push(Le),O.path&&O.path.charAt(0)!=="/"&&ce.push("/")),O.path!==void 0){var Ue=O.path;!D.absolutePath&&(!de||!de.absolutePath)&&(Ue=tt(Ue)),Le===void 0&&(Ue=Ue.replace(/^\/\//,"/%2F")),ce.push(Ue)}return O.query!==void 0&&(ce.push("?"),ce.push(O.query)),O.fragment!==void 0&&(ce.push("#"),ce.push(O.fragment)),ce.join("")}function ae(O,D){var ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},ce=arguments[3],de={};return ce||(O=Pe(Xe(O,ee),ee),D=Pe(Xe(D,ee),ee)),ee=ee||{},!ee.tolerant&&D.scheme?(de.scheme=D.scheme,de.userinfo=D.userinfo,de.host=D.host,de.port=D.port,de.path=tt(D.path||""),de.query=D.query):(D.userinfo!==void 0||D.host!==void 0||D.port!==void 0?(de.userinfo=D.userinfo,de.host=D.host,de.port=D.port,de.path=tt(D.path||""),de.query=D.query):(D.path?(D.path.charAt(0)==="/"?de.path=tt(D.path):((O.userinfo!==void 0||O.host!==void 0||O.port!==void 0)&&!O.path?de.path="/"+D.path:O.path?de.path=O.path.slice(0,O.path.lastIndexOf("/")+1)+D.path:de.path=D.path,de.path=tt(de.path)),de.query=D.query):(de.path=O.path,D.query!==void 0?de.query=D.query:de.query=O.query),de.userinfo=O.userinfo,de.host=O.host,de.port=O.port),de.scheme=O.scheme),de.fragment=D.fragment,de}function ye(O,D,ee){var ce=a({scheme:"null"},ee);return Xe(ae(Pe(O,ce),Pe(D,ce),ce,!0),ce)}function He(O,D){return typeof O=="string"?O=Xe(Pe(O,D),D):C(O)==="object"&&(O=Pe(Xe(O,D),D)),O}function F(O,D,ee){return typeof O=="string"?O=Xe(Pe(O,ee),ee):C(O)==="object"&&(O=Xe(O,ee)),typeof D=="string"?D=Xe(Pe(D,ee),ee):C(D)==="object"&&(D=Xe(D,ee)),O===D}function T(O,D){return O&&O.toString().replace(!D||!D.iri?A.ESCAPE:l.ESCAPE,he)}function k(O,D){return O&&O.toString().replace(!D||!D.iri?A.PCT_ENCODED:l.PCT_ENCODED,ne)}var Ie={scheme:"http",domainHost:!0,parse:function(D,ee){return D.host||(D.error=D.error||"HTTP URIs must have a host."),D},serialize:function(D,ee){var ce=String(D.scheme).toLowerCase()==="https";return(D.port===(ce?443:80)||D.port==="")&&(D.port=void 0),D.path||(D.path="/"),D}},me={scheme:"https",domainHost:Ie.domainHost,parse:Ie.parse,serialize:Ie.serialize};function Ve(O){return typeof O.secure=="boolean"?O.secure:String(O.scheme).toLowerCase()==="wss"}var we={scheme:"ws",domainHost:!0,parse:function(D,ee){var ce=D;return ce.secure=Ve(ce),ce.resourceName=(ce.path||"/")+(ce.query?"?"+ce.query:""),ce.path=void 0,ce.query=void 0,ce},serialize:function(D,ee){if((D.port===(Ve(D)?443:80)||D.port==="")&&(D.port=void 0),typeof D.secure=="boolean"&&(D.scheme=D.secure?"wss":"ws",D.secure=void 0),D.resourceName){var ce=D.resourceName.split("?"),de=c(ce,2),Le=de[0],Ue=de[1];D.path=Le&&Le!=="/"?Le:void 0,D.query=Ue,D.resourceName=void 0}return D.fragment=void 0,D}},je={scheme:"wss",domainHost:we.domainHost,parse:we.parse,serialize:we.serialize},at={},bt="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",ct="[0-9A-Fa-f]",Ht=n(n("%[EFef]"+ct+"%"+ct+ct+"%"+ct+ct)+"|"+n("%[89A-Fa-f]"+ct+"%"+ct+ct)+"|"+n("%"+ct+ct)),Ce="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",E="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",_=i(E,'[\\"\\\\]'),fe="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Ye=new RegExp(bt,"g"),ue=new RegExp(Ht,"g"),le=new RegExp(i("[^]",Ce,"[\\.]",'[\\"]',_),"g"),re=new RegExp(i("[^]",bt,fe),"g"),oe=re;function Re(O){var D=ne(O);return D.match(Ye)?D:O}var xe={scheme:"mailto",parse:function(D,ee){var ce=D,de=ce.to=ce.path?ce.path.split(","):[];if(ce.path=void 0,ce.query){for(var Le=!1,Ue={},dt=ce.query.split("&"),yt=0,kt=dt.length;yt=55296&&C<=56319&&n=g)throw new Error("Cannot access property/index "+i+" levels up, current level is "+g);return I[g-i]}if(i>g)throw new Error("Cannot access data "+i+" levels up, current level is "+g);if(C="data"+(g-i||""),!n)return C}for(var o=C,a=n.split("/"),s=0;s=0?{index:i,compiling:!0}:(i=this._compilations.length,this._compilations[i]={schema:e,root:g,baseId:I},{index:i,compiling:!1})}function R$e(e,g,I){var i=Jbe.call(this,e,g,I);i>=0&&this._compilations.splice(i,1)}function Jbe(e,g,I){for(var i=0;i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,Ube=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,Qbe=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,jbe=/^(?:\/(?:[^~/]|~0|~1)*)*$/,$be=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,qbe=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,x$e=ET;function ET(e){return e=e=="full"?"full":"fast",N$e.copy(ET[e])}ET.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":Lbe,url:Ube,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:_be,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:g0e,uuid:Qbe,"json-pointer":jbe,"json-pointer-uri-fragment":$be,"relative-json-pointer":qbe};ET.full={date:e0e,time:t0e,"date-time":z$e,uri:J$e,"uri-reference":D$e,"uri-template":Lbe,url:Ube,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:_be,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:g0e,uuid:Qbe,"json-pointer":jbe,"json-pointer-uri-fragment":$be,"relative-json-pointer":qbe};function E$e(e){return e%4===0&&(e%100!==0||e%400===0)}function e0e(e){var g=e.match(k$e);if(!g)return!1;var I=+g[1],i=+g[2],n=+g[3];return i>=1&&i<=12&&n>=1&&n<=(i==2&&E$e(I)?29:Y$e[i])}function t0e(e,g){var I=e.match(K$e);if(!I)return!1;var i=I[1],n=I[2],C=I[3],r=I[5];return(i<=23&&n<=59&&C<=59||i==23&&n==59&&C==60)&&(!g||r)}var M$e=/t|\s/i;function z$e(e){var g=e.split(M$e);return g.length==2&&e0e(g[0])&&t0e(g[1],!0)}var P$e=/\/|:/;function J$e(e){return P$e.test(e)&&F$e.test(e)}var O$e=/[^\\]\\Z/;function g0e(e){if(O$e.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}var _$e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.errSchemaPath+"/"+I,s=!g.opts.allErrors,A="data"+(r||""),l="valid"+C,c,u;if(o=="#"||o=="#/")g.isRoot?(c=g.async,u="validate"):(c=g.root.schema.$async===!0,u="root.refVal[0]");else{var d=g.resolveRef(g.baseId,o,g.isRoot);if(d===void 0){var h=g.MissingRefError.message(g.baseId,o);if(g.opts.missingRefs=="fail"){g.logger.error(h);var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(a)+" , params: { ref: '"+g.util.escapeQuotes(o)+"' } ",g.opts.messages!==!1&&(n+=" , message: 'can\\'t resolve reference "+g.util.escapeQuotes(o)+"' "),g.opts.verbose&&(n+=" , schema: "+g.util.toQuotedString(o)+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+A+" "),n+=" } "):n+=" {} ";var f=n;n=m.pop(),!g.compositeRule&&s?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s&&(n+=" if (false) { ")}else if(g.opts.missingRefs=="ignore")g.logger.warn(h),s&&(n+=" if (true) { ");else throw new g.MissingRefError(g.baseId,o,h)}else if(d.inline){var b=g.util.copy(g);b.level++;var p="valid"+b.level;b.schema=d.schema,b.schemaPath="",b.errSchemaPath=o;var y=g.validate(b).replace(/validate\.schema/g,d.code);n+=" "+y+" ",s&&(n+=" if ("+p+") { ")}else c=d.$async===!0||g.async&&d.$async!==!1,u=d.code}if(u){var m=m||[];m.push(n),n="",g.opts.passContext?n+=" "+u+".call(this, ":n+=" "+u+"( ",n+=" "+A+", (dataPath || '')",g.errorPath!='""'&&(n+=" + "+g.errorPath);var Z=r?"data"+(r-1||""):"parentData",B=r?g.dataPathArr[r]:"parentDataProperty";n+=" , "+Z+" , "+B+", rootData) ";var G=n;if(n=m.pop(),c){if(!g.async)throw new Error("async schema referenced by sync schema");s&&(n+=" var "+l+"; "),n+=" try { await "+G+"; ",s&&(n+=" "+l+" = true; "),n+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",s&&(n+=" "+l+" = false; "),n+=" } ",s&&(n+=" if ("+l+") { ")}else n+=" if (!"+G+") { if (vErrors === null) vErrors = "+u+".errors; else vErrors = vErrors.concat("+u+".errors); errors = vErrors.length; } ",s&&(n+=" else { ")}return n},L$e=function(g,I,i){var n=" ",C=g.schema[I],r=g.schemaPath+g.util.getProperty(I),o=g.errSchemaPath+"/"+I,a=!g.opts.allErrors,s=g.util.copy(g),A="";s.level++;var l="valid"+s.level,c=s.baseId,u=!0,d=C;if(d)for(var h,m=-1,f=d.length-1;m0||h===!1:g.util.schemaHasRules(h,g.RULES.all))&&(u=!1,s.schema=h,s.schemaPath=r+"["+m+"]",s.errSchemaPath=o+"/"+m,n+=" "+g.validate(s)+" ",s.baseId=c,a&&(n+=" if ("+l+") { ",A+="}"));return a&&(u?n+=" if (true) { ":n+=" "+A.slice(0,-1)+" "),n},U$e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=o.every(function(v){return g.opts.strictKeywords?typeof v=="object"&&Object.keys(v).length>0||v===!1:g.util.schemaHasRules(v,g.RULES.all)});if(f){var b=d.baseId;n+=" var "+u+" = errors; var "+c+" = false; ";var p=g.compositeRule;g.compositeRule=d.compositeRule=!0;var y=o;if(y)for(var Z,B=-1,G=y.length-1;B0||o===!1:g.util.schemaHasRules(o,g.RULES.all);if(n+="var "+u+" = errors;var "+c+";",Z){var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+m+" = false; for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var G=l+"["+f+"]";d.dataPathArr[b]=f;var v=g.validate(d);d.baseId=y,g.util.varOccurences(v,p)<2?n+=" "+g.util.varReplace(v,p,G)+" ":n+=" var "+p+" = "+G+"; "+v+" ",n+=" if ("+m+") break; } ",g.compositeRule=d.compositeRule=B,n+=" "+h+" if (!"+m+") {"}else n+=" if ("+l+".length == 0) {";var w=w||[];w.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should contain a valid item' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var R=n;return n=w.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+R+"]); ":n+=" validate.errors = ["+R+"]; return false; ":n+=" var err = "+R+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { ",Z&&(n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } "),g.opts.allErrors&&(n+=" } "),n},q$e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m={},f={},b=g.opts.ownProperties;for(B in o)if(B!="__proto__"){var p=o[B],y=Array.isArray(p)?f:m;y[B]=p}n+="var "+c+" = errors;";var Z=g.errorPath;n+="var missing"+C+";";for(var B in f)if(y=f[B],y.length){if(n+=" if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),A){n+=" && ( ";var G=y;if(G)for(var v,w=-1,R=G.length-1;w0||p===!1:g.util.schemaHasRules(p,g.RULES.all))&&(n+=" "+h+" = true; if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),n+=") { ",u.schema=p,u.schemaPath=a+g.util.getProperty(B),u.errSchemaPath=s+"/"+g.util.escapeFragment(B),n+=" "+g.validate(u)+" ",u.baseId=P,n+=" } ",A&&(n+=" if ("+h+") { ",d+="}"))}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},e8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u=g.opts.$data&&o&&o.$data;u&&(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ");var d="i"+C,h="schema"+C;u||(n+=" var "+h+" = validate.schema"+a+";"),n+="var "+c+";",u&&(n+=" if (schema"+C+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+C+")) "+c+" = false; else {"),n+=""+c+" = false;for (var "+d+"=0; "+d+"<"+h+".length; "+d+"++) if (equal("+l+", "+h+"["+d+"])) { "+c+" = true; break; }",u&&(n+=" } "),n+=" if (!"+c+") { ";var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { allowedValues: schema"+C+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be equal to one of the allowed values' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",A&&(n+=" else { "),n},t8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||"");if(g.opts.format===!1)return A&&(n+=" if (true) { "),n;var c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o;var d=g.opts.unknownFormats,h=Array.isArray(d);if(c){var m="format"+C,f="isObject"+C,b="formatType"+C;n+=" var "+m+" = formats["+u+"]; var "+f+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+b+" = "+f+" && "+m+".type || 'string'; if ("+f+") { ",g.async&&(n+=" var async"+C+" = "+m+".async; "),n+=" "+m+" = "+m+".validate; } if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" (",d!="ignore"&&(n+=" ("+u+" && !"+m+" ",h&&(n+=" && self._opts.unknownFormats.indexOf("+u+") == -1 "),n+=") || "),n+=" ("+m+" && "+b+" == '"+i+"' && !(typeof "+m+" == 'function' ? ",g.async?n+=" (async"+C+" ? await "+m+"("+l+") : "+m+"("+l+")) ":n+=" "+m+"("+l+") ",n+=" : "+m+".test("+l+"))))) {"}else{var m=g.formats[o];if(!m){if(d=="ignore")return g.logger.warn('unknown format "'+o+'" ignored in schema at path "'+g.errSchemaPath+'"'),A&&(n+=" if (true) { "),n;if(h&&d.indexOf(o)>=0)return A&&(n+=" if (true) { "),n;throw new Error('unknown format "'+o+'" is used in schema at path "'+g.errSchemaPath+'"')}var f=typeof m=="object"&&!(m instanceof RegExp)&&m.validate,b=f&&m.type||"string";if(f){var p=m.async===!0;m=m.validate}if(b!=i)return A&&(n+=" if (true) { "),n;if(p){if(!g.async)throw new Error("async format in sync schema");var y="formats"+g.util.getProperty(o)+".validate";n+=" if (!(await "+y+"("+l+"))) { "}else{n+=" if (! ";var y="formats"+g.util.getProperty(o);f&&(y+=".validate"),typeof m=="function"?n+=" "+y+"("+l+") ":n+=" "+y+".test("+l+") ",n+=") { "}}var Z=Z||[];Z.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'format' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { format: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match format "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var B=n;return n=Z.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+B+"]); ":n+=" validate.errors = ["+B+"]; return false; ":n+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},g8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g);d.level++;var h="valid"+d.level,m=g.schema.then,f=g.schema.else,b=m!==void 0&&(g.opts.strictKeywords?typeof m=="object"&&Object.keys(m).length>0||m===!1:g.util.schemaHasRules(m,g.RULES.all)),p=f!==void 0&&(g.opts.strictKeywords?typeof f=="object"&&Object.keys(f).length>0||f===!1:g.util.schemaHasRules(f,g.RULES.all)),y=d.baseId;if(b||p){var Z;d.createErrors=!1,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+u+" = errors; var "+c+" = true; ";var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,n+=" "+g.validate(d)+" ",d.baseId=y,d.createErrors=!0,n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",g.compositeRule=d.compositeRule=B,b?(n+=" if ("+h+") { ",d.schema=g.schema.then,d.schemaPath=g.schemaPath+".then",d.errSchemaPath=g.errSchemaPath+"/then",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+C,n+=" var "+Z+" = 'then'; "):Z="'then'",n+=" } ",p&&(n+=" else { ")):n+=" if (!"+h+") { ",p&&(d.schema=g.schema.else,d.schemaPath=g.schemaPath+".else",d.errSchemaPath=g.errSchemaPath+"/else",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+C,n+=" var "+Z+" = 'else'; "):Z="'else'",n+=" } "),n+=" if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'if' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { failingKeyword: "+Z+" } ",g.opts.messages!==!1&&(n+=` , message: 'should match "' + `+Z+` + '" schema' `),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},I8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f="i"+C,b=d.dataLevel=g.dataLevel+1,p="data"+b,y=g.baseId;if(n+="var "+u+" = errors;var "+c+";",Array.isArray(o)){var Z=g.schema.additionalItems;if(Z===!1){n+=" "+c+" = "+l+".length <= "+o.length+"; ";var B=s;s=g.errSchemaPath+"/additionalItems",n+=" if (!"+c+") { ";var G=G||[];G.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+o.length+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have more than "+o.length+" items' "),g.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var v=n;n=G.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+v+"]); ":n+=" validate.errors = ["+v+"]; return false; ":n+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",s=B,A&&(h+="}",n+=" else { ")}var w=o;if(w){for(var R,S=-1,X=w.length-1;S0||R===!1:g.util.schemaHasRules(R,g.RULES.all)){n+=" "+m+" = true; if ("+l+".length > "+S+") { ";var W=l+"["+S+"]";d.schema=R,d.schemaPath=a+"["+S+"]",d.errSchemaPath=s+"/"+S,d.errorPath=g.util.getPathExpr(g.errorPath,S,g.opts.jsonPointers,!0),d.dataPathArr[b]=S;var V=g.validate(d);d.baseId=y,g.util.varOccurences(V,p)<2?n+=" "+g.util.varReplace(V,p,W)+" ":n+=" var "+p+" = "+W+"; "+V+" ",n+=" } ",A&&(n+=" if ("+m+") { ",h+="}")}}if(typeof Z=="object"&&(g.opts.strictKeywords?typeof Z=="object"&&Object.keys(Z).length>0||Z===!1:g.util.schemaHasRules(Z,g.RULES.all))){d.schema=Z,d.schemaPath=g.schemaPath+".additionalItems",d.errSchemaPath=g.errSchemaPath+"/additionalItems",n+=" "+m+" = true; if ("+l+".length > "+o.length+") { for (var "+f+" = "+o.length+"; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var V=g.validate(d);d.baseId=y,g.util.varOccurences(V,p)<2?n+=" "+g.util.varReplace(V,p,W)+" ":n+=" var "+p+" = "+W+"; "+V+" ",A&&(n+=" if (!"+m+") break; "),n+=" } } ",A&&(n+=" if ("+m+") { ",h+="}")}}else if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var V=g.validate(d);d.baseId=y,g.util.varOccurences(V,p)<2?n+=" "+g.util.varReplace(V,p,W)+" ":n+=" var "+p+" = "+W+"; "+V+" ",A&&(n+=" if (!"+m+") break; "),n+=" }"}return A&&(n+=" "+h+" if ("+u+" == errors) {"),n},tge=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,y,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o;var d=I=="maximum",h=d?"exclusiveMaximum":"exclusiveMinimum",m=g.schema[h],f=g.opts.$data&&m&&m.$data,b=d?"<":">",p=d?">":"<",y=void 0;if(!(c||typeof o=="number"||o===void 0))throw new Error(I+" must be number");if(!(f||m===void 0||typeof m=="number"||typeof m=="boolean"))throw new Error(h+" must be number or boolean");if(f){var Z=g.util.getData(m.$data,r,g.dataPathArr),B="exclusive"+C,G="exclType"+C,v="exclIsNumber"+C,w="op"+C,R="' + "+w+" + '";n+=" var schemaExcl"+C+" = "+Z+"; ",Z="schemaExcl"+C,n+=" var "+B+"; var "+G+" = typeof "+Z+"; if ("+G+" != 'boolean' && "+G+" != 'undefined' && "+G+" != 'number') { ";var y=h,S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: '"+h+" should be boolean' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+G+" == 'number' ? ( ("+B+" = "+u+" === undefined || "+Z+" "+b+"= "+u+") ? "+l+" "+p+"= "+Z+" : "+l+" "+p+" "+u+" ) : ( ("+B+" = "+Z+" === true) ? "+l+" "+p+"= "+u+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { var op"+C+" = "+B+" ? '"+b+"' : '"+b+"='; ",o===void 0&&(y=h,s=g.errSchemaPath+"/"+h,u=Z,c=f)}else{var v=typeof m=="number",R=b;if(v&&c){var w="'"+R+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" ( "+u+" === undefined || "+m+" "+b+"= "+u+" ? "+l+" "+p+"= "+m+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { "}else{v&&o===void 0?(B=!0,y=h,s=g.errSchemaPath+"/"+h,u=m,p+="="):(v&&(u=Math[d?"min":"max"](m,o)),m===(v?u:!0)?(B=!0,y=h,s=g.errSchemaPath+"/"+h,p+="="):(B=!1,R+="="));var w="'"+R+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+" "+p+" "+u+" || "+l+" !== "+l+") { "}}y=y||I;var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_limit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { comparison: "+w+", limit: "+u+", exclusive: "+B+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be "+R+" ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;return n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},gge=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,h,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");var d=I=="maxItems"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+".length "+d+" "+u+") { ";var h=I,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitItems")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",I=="maxItems"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" items' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},Ige=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,h,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");var d=I=="maxLength"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),g.opts.unicode===!1?n+=" "+l+".length ":n+=" ucs2length("+l+") ",n+=" "+d+" "+u+") { ";var h=I,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitLength")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be ",I=="maxLength"?n+="longer":n+="shorter",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" characters' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},ige=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,h,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");var d=I=="maxProperties"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" Object.keys("+l+").length "+d+" "+u+") { ";var h=I,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitProperties")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",I=="maxProperties"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" properties' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},i8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");n+="var division"+C+";if (",c&&(n+=" "+u+" !== undefined && ( typeof "+u+" != 'number' || "),n+=" (division"+C+" = "+l+" / "+u+", ",g.opts.multipleOfPrecision?n+=" Math.abs(Math.round(division"+C+") - division"+C+") > 1e-"+g.opts.multipleOfPrecision+" ":n+=" division"+C+" !== parseInt(division"+C+") ",n+=" ) ",c&&(n+=" ) "),n+=" ) { ";var d=d||[];d.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { multipleOf: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be multiple of ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var h=n;return n=d.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+h+"]); ":n+=" validate.errors = ["+h+"]; return false; ":n+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},n8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g);u.level++;var d="valid"+u.level;if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s,n+=" var "+c+" = errors; ";var h=g.compositeRule;g.compositeRule=u.compositeRule=!0,u.createErrors=!1;var m;u.opts.allErrors&&(m=u.opts.allErrors,u.opts.allErrors=!1),n+=" "+g.validate(u)+" ",u.createErrors=!0,m&&(u.opts.allErrors=m),g.compositeRule=u.compositeRule=h,n+=" if ("+d+") { ";var f=f||[];f.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var b=n;n=f.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+b+"]); ":n+=" validate.errors = ["+b+"]; return false; ":n+=" var err = "+b+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { errors = "+c+"; if (vErrors !== null) { if ("+c+") vErrors.length = "+c+"; else vErrors = null; } ",g.opts.allErrors&&(n+=" } ")}else n+=" var err = ",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",A&&(n+=" if (false) { ");return n},C8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=d.baseId,b="prevValid"+C,p="passingSchemas"+C;n+="var "+u+" = errors , "+b+" = false , "+c+" = false , "+p+" = null; ";var y=g.compositeRule;g.compositeRule=d.compositeRule=!0;var Z=o;if(Z)for(var B,G=-1,v=Z.length-1;G0||B===!1:g.util.schemaHasRules(B,g.RULES.all))?(d.schema=B,d.schemaPath=a+"["+G+"]",d.errSchemaPath=s+"/"+G,n+=" "+g.validate(d)+" ",d.baseId=f):n+=" var "+m+" = true; ",G&&(n+=" if ("+m+" && "+b+") { "+c+" = false; "+p+" = ["+p+", "+G+"]; } else { ",h+="}"),n+=" if ("+m+") { "+c+" = "+b+" = true; "+p+" = "+G+"; }";return g.compositeRule=d.compositeRule=y,n+=""+h+"if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { passingSchemas: "+p+" } ",g.opts.messages!==!1&&(n+=" , message: 'should match exactly one schema in oneOf' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+="} else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; }",g.opts.allErrors&&(n+=" } "),n},r8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o;var d=c?"(new RegExp("+u+"))":g.usePattern(o);n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" !"+d+".test("+l+") ) { ";var h=h||[];h.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { pattern: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match pattern "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var m=n;return n=h.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},o8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m="key"+C,f="idx"+C,b=u.dataLevel=g.dataLevel+1,p="data"+b,y="dataProperties"+C,Z=Object.keys(o||{}).filter(x),B=g.schema.patternProperties||{},G=Object.keys(B).filter(x),v=g.schema.additionalProperties,w=Z.length||G.length,R=v===!1,S=typeof v=="object"&&Object.keys(v).length,X=g.opts.removeAdditional,W=R||S||X,V=g.opts.ownProperties,H=g.baseId,Y=g.schema.required;if(Y&&!(g.opts.$data&&Y.$data)&&Y.length8)n+=" || validate.schema"+a+".hasOwnProperty("+m+") ";else{var J=Z;if(J)for(var P,ge=-1,q=J.length-1;ge0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){var gt=g.util.getProperty(P),We=l+gt,lt=Je&&_e.default!==void 0;u.schema=_e,u.schemaPath=a+gt,u.errSchemaPath=s+"/"+g.util.escapeFragment(P),u.errorPath=g.util.getPath(g.errorPath,P,g.opts.jsonPointers),u.dataPathArr[b]=g.util.toQuotedString(P);var Be=g.validate(u);if(u.baseId=H,g.util.varOccurences(Be,p)<2){Be=g.util.varReplace(Be,p,We);var tt=We}else{var tt=p;n+=" var "+p+" = "+We+"; "}if(lt)n+=" "+Be+" ";else{if(K&&K[P]){n+=" if ( "+tt+" === undefined ",V&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = false; ";var ie=g.errorPath,ne=s,Xe=g.util.escapeQuotes(P);g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPath(ie,P,g.opts.jsonPointers)),s=g.errSchemaPath+"/required";var be=be||[];be.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+Xe+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+Xe+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var pe=n;n=be.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+pe+"]); ":n+=" validate.errors = ["+pe+"]; return false; ":n+=" var err = "+pe+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s=ne,g.errorPath=ie,n+=" } else { "}else A?(n+=" if ( "+tt+" === undefined ",V&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = true; } else { "):(n+=" if ("+tt+" !== undefined ",V&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=" ) { ");n+=" "+Be+" } "}}A&&(n+=" if ("+h+") { ",d+="}")}}if(G.length){var ae=G;if(ae)for(var j,ye=-1,He=ae.length-1;ye0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){u.schema=_e,u.schemaPath=g.schemaPath+".patternProperties"+g.util.getProperty(j),u.errSchemaPath=g.errSchemaPath+"/patternProperties/"+g.util.escapeFragment(j),V?n+=" "+y+" = "+y+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+y+".length; "+f+"++) { var "+m+" = "+y+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" if ("+g.usePattern(j)+".test("+m+")) { ",u.errorPath=g.util.getPathExpr(g.errorPath,m,g.opts.jsonPointers);var We=l+"["+m+"]";u.dataPathArr[b]=m;var Be=g.validate(u);u.baseId=H,g.util.varOccurences(Be,p)<2?n+=" "+g.util.varReplace(Be,p,We)+" ":n+=" var "+p+" = "+We+"; "+Be+" ",A&&(n+=" if (!"+h+") break; "),n+=" } ",A&&(n+=" else "+h+" = true; "),n+=" } ",A&&(n+=" if ("+h+") { ",d+="}")}}}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},a8e=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level;if(n+="var "+c+" = errors;",g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s;var m="key"+C,f="idx"+C,b="i"+C,p="' + "+m+" + '",y=u.dataLevel=g.dataLevel+1,Z="data"+y,B="dataProperties"+C,G=g.opts.ownProperties,v=g.baseId;G&&(n+=" var "+B+" = undefined; "),G?n+=" "+B+" = "+B+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+B+".length; "+f+"++) { var "+m+" = "+B+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" var startErrs"+C+" = errors; ";var w=m,R=g.compositeRule;g.compositeRule=u.compositeRule=!0;var S=g.validate(u);u.baseId=v,g.util.varOccurences(S,Z)<2?n+=" "+g.util.varReplace(S,Z,w)+" ":n+=" var "+Z+" = "+w+"; "+S+" ",g.compositeRule=u.compositeRule=R,n+=" if (!"+h+") { for (var "+b+"=startErrs"+C+"; "+b+"0||y===!1:g.util.schemaHasRules(y,g.RULES.all))||(h[h.length]=f)}}else var h=o;if(u||h.length){var Z=g.errorPath,B=u||h.length>=g.opts.loopRequired,G=g.opts.ownProperties;if(A)if(n+=" var missing"+C+"; ",B){u||(n+=" var "+d+" = validate.schema"+a+"; ");var v="i"+C,w="schema"+C+"["+v+"]",R="' + "+w+" + '";g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPathExpr(Z,w,g.opts.jsonPointers)),n+=" var "+c+" = true; ",u&&(n+=" if (schema"+C+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+C+")) "+c+" = false; else {"),n+=" for (var "+v+" = 0; "+v+" < "+d+".length; "+v+"++) { "+c+" = "+l+"["+d+"["+v+"]] !== undefined ",G&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", "+d+"["+v+"]) "),n+="; if (!"+c+") break; } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+R+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+R+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else{n+=" if ( ";var W=h;if(W)for(var V,v=-1,H=W.length-1;v 1) { ";var h=g.schema.items&&g.schema.items.type,m=Array.isArray(h);if(!h||h=="object"||h=="array"||m&&(h.indexOf("object")>=0||h.indexOf("array")>=0))n+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+l+"[i], "+l+"[j])) { "+c+" = false; break outer; } } } ";else{n+=" var itemIndices = {}, item; for (;i--;) { var item = "+l+"[i]; ";var f="checkDataType"+(m?"s":"");n+=" if ("+g.util[f](h,"item",g.opts.strictNumbers,!0)+") continue; ",m&&(n+=` if (typeof item == 'string') item = '"' + item; `),n+=" if (typeof itemIndices[item] == 'number') { "+c+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}n+=" } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var b=b||[];b.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { i: i, j: j } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),g.opts.verbose&&(n+=" , schema: ",u?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var p=n;n=b.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+p+"]); ":n+=" validate.errors = ["+p+"]; return false; ":n+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},l8e={$ref:_$e,allOf:L$e,anyOf:U$e,$comment:Q$e,const:j$e,contains:$$e,dependencies:q$e,enum:e8e,format:t8e,if:g8e,items:I8e,maximum:tge,minimum:tge,maxItems:gge,minItems:gge,maxLength:Ige,minLength:Ige,maxProperties:ige,minProperties:ige,multipleOf:i8e,not:n8e,oneOf:C8e,pattern:r8e,properties:o8e,propertyNames:a8e,required:A8e,uniqueItems:s8e,validate:zbe},nge=l8e,h5=k0.toHash,c8e=function(){var g=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],I=["type","$comment"],i=["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"],n=["number","integer","string","array","object","boolean","null"];return g.all=h5(I),g.types=h5(n),g.forEach(function(C){C.rules=C.rules.map(function(r){var o;if(typeof r=="object"){var a=Object.keys(r)[0];o=r[a],r=a,o.forEach(function(A){I.push(A),g.all[A]=!0})}I.push(r);var s=g.all[r]={keyword:r,code:nge[r],implements:o};return s}),g.all.$comment={keyword:"$comment",code:nge.$comment},C.type&&(g.types[C.type]=C)}),g.keywords=h5(I.concat(i)),g.custom={},g},Cge=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"],u8e=function(e,g){for(var I=0;I{g(I,i,n),J9(I,g)}):"views"in e&&e.views.forEach(I=>J9(I,g))}function bb(e,g){"tracks"in e?e.tracks.forEach(I=>{g(I),bb(I,g)}):"views"in e&&e.views.forEach(I=>{g(I),bb(I,g)})}function l0e(e,g){"tracks"in e||(g(e),e.views.forEach(I=>{l0e(I,g)}))}function c0e(e){if(kbe(e)){const I={...e,tracks:void 0,id:void 0};return e.tracks.filter(i=>!i._invalidTrack).map(i=>Object.assign(JSON.parse(JSON.stringify(I)),i))}const g=[];return Wje(e)?e.tracks.filter(I=>!I._invalidTrack).map(I=>{if("alignment"in I)g.push({...I,_overlay:[...I.tracks],tracks:void 0,alignment:void 0});else{const i={...e,tracks:void 0,id:void 0},n=Object.assign(JSON.parse(JSON.stringify(i)),I);g.push(n)}}):g.push({...e,_overlay:[...e.tracks.filter(I=>!I._invalidTrack)],tracks:void 0,alignment:void 0}),JSON.parse(JSON.stringify(g))}function Z3(e,g){if(g?(e.assembly===void 0&&(e.assembly=g.assembly),e.layout===void 0&&(e.layout=g.layout),e.orientation===void 0&&(e.orientation=g.orientation),e.static===void 0&&(e.static=g.static!==void 0?g.static:!1),e.zoomLimits===void 0&&(e.zoomLimits=g.zoomLimits),e.xDomain===void 0&&(e.xDomain=g.xDomain),e.yDomain===void 0&&(e.yDomain=g.yDomain),e.linkingId===void 0&&(e.linkingId=g.linkingId),e.centerRadius===void 0&&(e.centerRadius=g.centerRadius),e.spacing===void 0&&!("tracks"in e)&&(e.spacing=g.spacing),e.xOffset===void 0&&(e.xOffset=g.xOffset),e.yOffset===void 0&&(e.yOffset=g.yOffset),"views"in e&&"arrangement"in g&&e.arrangement===void 0&&(e.arrangement=g.arrangement),e.style=f5(g.style,e.style)):(e.assembly===void 0&&(e.assembly="hg38"),e.layout===void 0&&(e.layout="linear"),e.orientation===void 0&&(e.orientation="horizontal"),e.static===void 0&&(e.static=!1),e.zoomLimits===void 0&&(e.zoomLimits=[1,null]),e.centerRadius===void 0&&(e.centerRadius=Xbe),e.spacing===void 0&&(e.spacing=K1),"views"in e&&e.arrangement===void 0&&(e.arrangement="vertical"),e.xOffset===void 0&&(e.xOffset=0),e.yOffset===void 0&&(e.yOffset=0)),e.id||(e.id=ln()),"tracks"in e){let I=c0e(e);I=Nbe(I);const i=ln();I.forEach((n,C,r)=>{var o,a,s;if(n.id||(n.id=ln()),n.width||(n.width=iC(n)?Ote:_4e),n.height||(n.height=iC(n)?Ote:O4e),"displacement"in n)if(((o=n.displacement)==null?void 0:o.type)==="pile"&&n.row===void 0&&ut(n.x)&&n.x.field&&ut(n.xe)&&n.xe.field){const A=ln(),l=n.x.field,c=n.xe.field,u=n.displacement.padding,d={type:"displace",newField:A,boundingBox:{startField:l,endField:c,padding:u},method:"pile"};n.dataTransform||(n.dataTransform=[]),n.dataTransform=[...n.dataTransform,d],n.row={field:A,type:"nominal"}}else(a=n.displacement)==null||a.type;if(n.layout&&(n.layout=void 0),n.zoomLimits&&(n.zoomLimits=void 0),n.assembly||(n.assembly=e.assembly),n.layout||(n.layout=e.layout),n.orientation||(n.orientation=e.orientation),n.static===void 0&&(n.static=e.static!==void 0?e.static:!1),n.zoomLimits||(n.zoomLimits=e.zoomLimits),n.layout=="circular"&&HS(n)){n._invalidTrack=!0;return}if(n.style=f5(e.style,n.style),ui(n)&&(n._overlay=n._overlay.filter(A=>!("type"in A&&A.type=="dummy-track")),n._overlay.forEach(A=>{A.style=f5(n.style,A.style)})),(n.layout==="circular"||iC(n))&&n.orientation==="vertical"&&(n.orientation="horizontal"),iC(n)&&(n.layout="linear",(Er(n)||ui(n))&&ut(n.y)&&!n.y.domain?n.y.domain=e.yDomain:ui(n)&&n._overlay.forEach(A=>{ut(A.y)&&!A.y.domain&&(A.y.domain=e.yDomain)})),(Er(n)||ui(n))&&ut(n.x)&&!n.x.domain?n.x.domain=e.xDomain:ui(n)&&n._overlay.forEach(A=>{ut(A.x)&&!A.x.domain&&(A.x.domain=e.xDomain)}),(Er(n)||ui(n))&&ut(n.x)&&!n.x.linkingId)n.x.linkingId=(s=e.linkingId)!=null?s:i;else if(ui(n)){let A=!1;n._overlay.forEach(l=>{var c;A||ut(l.x)&&!l.x.linkingId&&(l.x.linkingId=(c=e.linkingId)!=null?c:i,A=!0)})}C===0&&(n.overlayOnPreviousTrack=!1),(C===0||C!==0&&I.slice(0,C).filter(A=>!A.overlayOnPreviousTrack).length===1&&n.overlayOnPreviousTrack===!0)&&((Er(n)||ui(n))&&ut(n.x)&&!n.x.axis?n.orientation==="vertical"?n.x.axis="left":n.x.axis="top":ui(n)&&n._overlay.forEach(A=>{ut(A.x)&&!A.x.axis&&(n.orientation==="vertical"?A.x.axis="left":A.x.axis="top")})),(Er(n)||ui(n))&&ut(n.x)&&n.x.axis&&n.x.axis!=="none"?n.orientation==="vertical"?n.x.axis==="top"?n.x.axis="left":n.x.axis==="bottom"&&(n.x.axis="right"):n.x.axis==="left"?n.x.axis="top":n.x.axis==="right"&&(n.x.axis="bottom"):ui(n)&&n._overlay.forEach(A=>{ut(A.x)&&A.x.axis&&A.x.axis!=="none"&&(n.orientation==="vertical"?A.x.axis==="top"?A.x.axis="left":A.x.axis==="bottom"&&(A.x.axis="right"):A.x.axis==="left"?A.x.axis="top":A.x.axis==="right"&&(A.x.axis="bottom"))}),C!==0&&(C===r.length-1&&r.slice(0,C+1).filter(A=>A.overlayOnPreviousTrack).lengthA.overlayOnPreviousTrack).length===r.length-C-1&&r.slice(0,C+1).filter(A=>A.overlayOnPreviousTrack).length{A.mark==="withinLink"&&A.flipY===void 0&&(A.flipY=!0)}))),n.overlayOnPreviousTrack&&r[C-1]&&(n.width=r[C-1].width,n.height=r[C-1].height,n.layout=r[C-1].layout,n.assembly=r[C-1].assembly)}),I=I.filter(n=>!n._invalidTrack),e.tracks=I}else e.views.forEach(I=>{Z3(I,e)})}function m6e(e,g){return{data:{type:"vector",url:"",column:e,value:g},mark:"bar",x:{field:e,type:"genomic",axis:"top"},y:{field:g,type:"quantitative"},width:400,height:100}}function f6e(e,g,I,i){return i&&i.length<10?{data:{type:"multivec",url:"",row:e,column:g,value:I,categories:i},mark:"bar",x:{field:g,type:"genomic",axis:"top"},y:{field:I,type:"quantitative"},row:{field:e,type:"nominal",legend:!0},color:{field:e,type:"nominal"},width:400,height:100}:{data:{type:"multivec",url:"",row:e,column:g,value:I,categories:i},mark:"rect",x:{field:g,type:"genomic",axis:"top"},row:{field:e,type:"nominal",legend:!0},color:{field:I,type:"quantitative"},width:400,height:100}}function p6e(e){J9(e,(g,I,i)=>{var n,C,r,o,a;if(!(!("data"in g)||!g.data||!c7(g.data))&&!("alignment"in g)&&Xje(g))switch(g.data.type){case"vector":case"bigwig":i[I]=Object.assign(m6e((n=g.data.column)!=null?n:"position",(C=g.data.value)!=null?C:"value"),g);break;case"multivec":i[I]=Object.assign(f6e((r=g.data.row)!=null?r:"category",(o=g.data.column)!=null?o:"position",(a=g.data.value)!=null?a:"value",g.data.categories),g);break}})}const p5={chr1:248956422,chr2:242193529,chr3:198295559,chr4:190214555,chr5:181538259,chr6:170805979,chr7:159345973,chr8:145138636,chr9:138394717,chr10:133797422,chr11:135086622,chr12:133275309,chr13:114364328,chr14:107043718,chr15:101991189,chr16:90338345,chr17:83257441,chr18:80373285,chr19:58617616,chr20:64444167,chr21:46709983,chr22:50818468,chrX:156040895,chrY:57227415},b5={chr1:249250621,chr2:243199373,chr3:198022430,chr4:191154276,chr5:180915260,chr6:171115067,chr7:159138663,chr8:146364022,chr9:141213431,chr10:135534747,chr11:135006516,chr12:133851895,chr13:115169878,chr14:107349540,chr15:102531392,chr16:90354753,chr17:81195210,chr18:78077248,chr19:59128983,chr20:63025520,chr21:48129895,chr22:51304566,chrX:155270560,chrY:59373566,chrM:16571},y5={chr1:247249719,chr2:242951149,chr3:199501827,chr4:191273063,chr5:180857866,chr6:170899992,chr7:158821424,chr8:146274826,chr9:140273252,chr10:135374737,chr11:134452384,chr12:132349534,chr13:114142980,chr14:106368585,chr15:100338915,chr16:88827254,chr17:78774742,chr18:76117153,chr19:63811651,chr20:62435964,chr21:46944323,chr22:49691432,chrX:154913754,chrY:57772954,chrM:16571},Z5={chr1:245522847,chr2:243018229,chr3:199505740,chr4:191411218,chr5:180857866,chr6:170975699,chr7:158628139,chr8:146274826,chr9:138429268,chr10:135413628,chr11:134452384,chr12:132449811,chr13:114142980,chr14:106368585,chr15:100338915,chr16:88827254,chr17:78774742,chr18:76117153,chr19:63811651,chr20:62435964,chr21:46944323,chr22:49554710,chrX:154824264,chrY:57701691,chrM:16571},G5={chr1:246127941,chr2:243615958,chr3:199344050,chr4:191731959,chr5:181034922,chr6:170914576,chr7:158545518,chr8:146308819,chr9:136372045,chr10:135037215,chr11:134482954,chr12:132078379,chr13:113042980,chr14:105311216,chr15:100256656,chr16:90041932,chr17:81860266,chr18:76115139,chr19:63811651,chr20:63741868,chr21:46976097,chr22:49396972,chrX:153692391,chrY:50286555,chrM:16571},v5={chr1:195471971,chr2:182113224,chr3:160039680,chr4:156508116,chr5:151834684,chr6:149736546,chr7:145441459,chr8:129401213,chr9:124595110,chr10:130694993,chr11:122082543,chr12:120129022,chr13:120421639,chr14:124902244,chr15:104043685,chr16:98207768,chr17:94987271,chr18:90702639,chr19:61431566,chrX:171031299,chrY:91744698,chrM:16299},B5={chr1:197195432,chr2:181748087,chr3:159599783,chr4:155630120,chr5:152537259,chr6:149517037,chr7:152524553,chr8:131738871,chr9:124076172,chr10:129993255,chr11:121843856,chr12:121257530,chr13:120284312,chr14:125194864,chr15:103494974,chr16:98319150,chr17:95272651,chr18:90772031,chr19:61342430,chrX:166650296,chrY:15902555,chrM:16299};function Lu(e,g,I=!1){const i=Object.entries(bI(g).interval),n={chromosome:"unknown",position:1/0},C={chromosome:"unknown",position:0};for(const r of i){const[o,a]=r,[s,A]=a;if(s<=e&&eC.position&&(C.chromosome=o,C.position=A)}return I?ei.join(" ")).join(` -`),I=new Blob([g],{type:"text/tsv"});return URL.createObjectURL(I)}function bI(e){if(e&&typeof e=="string"&&e in S5)return S5[e];if(Array.isArray(e)&&e.length!==0){const g=Object.fromEntries(e);return{size:g,interval:Wl(g),total:Xl(g),path:b6e(e)}}else return S5.hg38}const pl=e=>`https://s3.amazonaws.com/gosling-lang.org/data/${e}.chrom.sizes`,S5=Object.freeze({hg38:{size:p5,interval:Wl(p5),total:Xl(p5),path:pl("hg38")},hg19:{size:b5,interval:Wl(b5),total:Xl(b5),path:pl("hg19")},hg18:{size:y5,interval:Wl(y5),total:Xl(y5),path:pl("hg18")},hg17:{size:Z5,interval:Wl(Z5),total:Xl(Z5),path:pl("hg17")},hg16:{size:G5,interval:Wl(G5),total:Xl(G5),path:pl("hg16")},mm10:{size:v5,interval:Wl(v5),total:Xl(v5),path:pl("mm10")},mm9:{size:B5,interval:Wl(B5),total:Xl(B5),path:pl("mm9")},unknown:{size:{chr:Number.MAX_VALUE},interval:{chr:[0,Number.MAX_VALUE]},total:Number.MAX_VALUE,path:pl("hg38")}});function y6e(e){switch(e){case"hg19":return"OHJakQICQD6gTD7skx4EWA";case"mm10":return"QDutvmyiSrec5nX4pA5WGQ";case"mm9":return"GUm5aBiLRCyz2PsBea7Yzg";case"hg38":default:return"P0PLbQMwTYGy-5uPIQid7A"}}function Wl(e){const g={};return Object.keys(e).reduce((I,i)=>(g[i]=[I,I+e[i]],I+e[i]),0),g}function Xl(e){return Object.values(e).reduce((g,I)=>g+I,0)}function Z6e(e){const[g,I]=e.split(":");if(I){const[i,n]=I.split("-").map(C=>+C.replace(/,/g,""));if(!Number.isNaN(i)&&!Number.isNaN(n))return{chromosome:g,start:i,end:n}}return{chromosome:g}}class G7{constructor(g,I,i){this.chromosome=g,this.start=I,this.end=i}static fromString(g){const I=Z6e(g);return new G7(I.chromosome,I.start,I.end)}toAbsoluteCoordinates(g,I=0){const i=bI(g),n=i.size[this.chromosome],C=i.interval[this.chromosome];if(n===void 0||C===void 0)throw new Error(`Chromosome name ${this.chromosome} is not valid`);let{start:r,end:o}=this;(r===void 0||o===void 0)&&([r,o]=[1,n]);const a=C[0];return[r+a-I,o+a+I]}}function u0e(e,[g,I],i){const{x:n,xe:C,x1:r,x1e:o}=i,a=[n,C,r,o].filter(s=>s);return e.filter(s=>{if(a.length===0)return!0;if(a.length===1){const A=+s[a[0]];return typeof A=="number"&&g+s[u]).filter(u=>!isNaN(u)),l=Math.min(...A),c=Math.max(...A);return g<=c&&l<=I}})}UU(e=>e.pos).left;function G3(e,g,I){return Array.isArray(g)||(I?e=e.replace(I,"chr"):e.includes("chr")||(e=`chr${e}`)),e}class d0e extends Wbe{constructor(){super(...arguments),J4e(this,"read",async(g,I=0,i,n=0,C={})=>{const{headers:r={},signal:o,overrides:a={}}=C;i<1/0?r.range=`bytes=${n}-${n+i}`:i===1/0&&n!==0&&(r.range=`bytes=${n}-`);const s={...this.baseOverrides,...a,headers:{...r,...a.headers,...this.baseOverrides.headers},method:"GET",redirect:"follow",mode:"cors",signal:o},A=await this.fetch(this.url,s);if(!A.ok)throw new Error(`HTTP ${A.status} ${A.statusText} ${this.url}`);if(A.status===200||A.status===206){const l=await this.getBufferFromResponse(A),c=l.copy(g,I,0,Math.min(i,l.length)),u=A.headers.get("content-range"),d=/\/(\d+)$/.exec(u||"");return d&&d[1]&&(this._stat={size:parseInt(d[1],10)}),{bytesRead:c,buffer:g}}throw new Error(`HTTP ${A.status} fetching ${this.url}`)})}}window.higlassTracks=window.higlassTracks||{};window.higlassTracksByType=window.higlassTracksByType||{};window.higlassDataFetchersByType=window.higlassDataFetchersByType||{};const age=()=>Math.random().toString(36).substring(2,8),G6e=(e,{force:g=!1}={})=>{let I=age();for(;window.higlassTracks[I];)I=age();e.name=I,window.higlassTracks[e.name]=e,window.higlassTracksByType[e.config.type]&&!g?console.warn(`A track with the same type (${e.config.type}) was already registered. To override it, set force to true.`):window.higlassTracksByType[e.config.type]=e},v6e=(e,{force:g=!1}={})=>{window.higlassDataFetchersByType[e.config.type]&&!g?console.warn(`A data fetcher with the same type (${e.config.type}) was already registered. To override it, set force to true.`):window.higlassDataFetchersByType[e.config.type]=e},wu=(e,g={})=>{const{pluginType:I="track"}=g;I==="track"?G6e(e,g):I==="dataFetcher"&&v6e(e,g)};var NS={},v3={exports:{}},Age=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof window.msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto);if(Age){var sge=new Uint8Array(16);v3.exports=function(){return Age(sge),sge}}else{var lge=new Array(16);v3.exports=function(){for(var g=0,I;g<16;g++)g&3||(I=Math.random()*4294967296),lge[g]=I>>>((g&3)<<3)&255;return lge}}var B6e=v3.exports,h0e=[];for(var $R=0;$R<256;++$R)h0e[$R]=($R+256).toString(16).substr(1);function S6e(e,g){var I=g||0,i=h0e;return[i[e[I++]],i[e[I++]],i[e[I++]],i[e[I++]],"-",i[e[I++]],i[e[I++]],"-",i[e[I++]],i[e[I++]],"-",i[e[I++]],i[e[I++]],"-",i[e[I++]],i[e[I++]],i[e[I++]],i[e[I++]],i[e[I++]],i[e[I++]]].join("")}var w6e=S6e,R6e=B6e,V6e=w6e;function W6e(e,g,I){var i=g&&I||0;typeof e=="string"&&(g=e==="binary"?new Array(16):null,e=null),e=e||{};var n=e.random||(e.rng||R6e)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,g)for(var C=0;C<16;++C)g[i+C]=n[C];return g||V6e(n)}var X6e=W6e,B3=[],m0e={};for(var Ym=0;Ym<256;Ym++)B3[Ym]=(Ym+256).toString(16).substr(1),m0e[B3[Ym]]=Ym;function H6e(e,g,I){var i=g&&I||0,n=0;for(g=g||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,function(C){n<16&&(g[i+n++]=m0e[C])});n<16;)g[i+n++]=0;return g}function T6e(e,g){var I=g||0,i=B3;return i[e[I++]]+i[e[I++]]+i[e[I++]]+i[e[I++]]+"-"+i[e[I++]]+i[e[I++]]+"-"+i[e[I++]]+i[e[I++]]+"-"+i[e[I++]]+i[e[I++]]+"-"+i[e[I++]]+i[e[I++]]+i[e[I++]]+i[e[I++]]+i[e[I++]]+i[e[I++]]}var N6e={parse:H6e,unparse:T6e},f0e=X6e,p0e=N6e;NS.encode=function(e){var g=p0e.parse(e),I=new Buffer(g).toString("base64"),i=I.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return i};NS.decode=function(e){var g=e.replace(/-/g,"+").replace(/_/g,"/")+"==";return p0e.unparse(new Buffer(g,"base64"))};NS.v4=function(){var e=f0e(null,new Buffer(16)),g=e.toString("base64"),I=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return I};NS.nice=function(){var e=f0e(null,new Buffer(16));e[0]=e[0]&127;var g=e.toString("base64"),I=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return I};var k6e=NS;const Y6e=Qc(k6e);var K6e=function(){function e(g,I){for(var i=0;i1?I-1:0),n=1;nI;){if(i-I>600){var C=i-I+1,r=g-I+1,o=Math.log(C),a=.5*Math.exp(2*o/3),s=.5*Math.sqrt(o*a*(C-a)/C)*(r-C/2<0?-1:1),A=Math.max(I,Math.floor(g-r*a/C+s)),l=Math.min(i,Math.floor(g+(C-r)*a/C+s));b0e(e,g,A,l,n)}var c=e[g],u=I,d=i;for(Jy(e,I,g),n(e[i],c)>0&&Jy(e,I,i);u0;)d--}n(e[I],c)===0?Jy(e,I,d):(d++,Jy(e,d,i)),d<=g&&(I=d+1),g<=d&&(i=d-1)}}function Jy(e,g,I){var i=e[g];e[g]=e[I],e[I]=i}function _6e(e,g){return eg?1:0}class L6e{constructor(g=9){this._maxEntries=Math.max(4,g),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(g){let I=this.data;const i=[];if(!eV(g,I))return i;const n=this.toBBox,C=[];for(;I;){for(let r=0;r=0&&C[I].children.length>this._maxEntries;)this._split(C,I),I--;this._adjustParentBBoxes(n,C,I)}_split(g,I){const i=g[I],n=i.children.length,C=this._minEntries;this._chooseSplitAxis(i,C,n);const r=this._chooseSplitIndex(i,C,n),o=mf(i.children.splice(r,i.children.length-r));o.height=i.height,o.leaf=i.leaf,Km(i,this.toBBox),Km(o,this.toBBox),I?g[I-1].children.push(o):this._splitRoot(i,o)}_splitRoot(g,I){this.data=mf([g,I]),this.data.height=g.height+1,this.data.leaf=!1,Km(this.data,this.toBBox)}_chooseSplitIndex(g,I,i){let n,C=1/0,r=1/0;for(let o=I;o<=i-I;o++){const a=DZ(g,0,o,this.toBBox),s=DZ(g,o,i,this.toBBox),A=q6e(a,s),l=w5(a)+w5(s);A=I;s--){const A=g.children[s];xZ(o,g.leaf?C(A):A),a+=qR(o)}return a}_adjustParentBBoxes(g,I,i){for(let n=i;n>=0;n--)xZ(I[n],g)}_condense(g){for(let I=g.length-1,i;I>=0;I--)g[I].children.length===0?I>0?(i=g[I-1].children,i.splice(i.indexOf(g[I]),1)):this.clear():Km(g[I],this.toBBox)}}function U6e(e,g,I){if(!I)return g.indexOf(e);for(let i=0;i=e.minX&&g.maxY>=e.minY}function mf(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function cge(e,g,I,i,n){const C=[g,I];for(;C.length;){if(I=C.pop(),g=C.pop(),I-g<=i)continue;const r=g+Math.ceil((I-g)/i/2)*i;O6e(e,r,g,I,n),C.push(g,r,r,I)}}function eqe(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function O9(e,g){if((I=(e=g?e.toExponential(g-1):e.toExponential()).indexOf("e"))<0)return null;var I,i=e.slice(0,I);return[i.length>1?i[0]+i.slice(2):i,+e.slice(I+1)]}function w3(e){return e=O9(Math.abs(e)),e?e[1]:NaN}function tqe(e,g){return function(I,i){for(var n=I.length,C=[],r=0,o=e[0],a=0;n>0&&o>0&&(a+o+1>i&&(o=Math.max(1,i-a)),C.push(I.substring(n-=o,n+o)),!((a+=o+1)>i));)o=e[r=(r+1)%e.length];return C.reverse().join(g)}}function gqe(e){return function(g){return g.replace(/[0-9]/g,function(I){return e[+I]})}}var Iqe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function R3(e){if(!(g=Iqe.exec(e)))throw new Error("invalid format: "+e);var g;return new v7({fill:g[1],align:g[2],sign:g[3],symbol:g[4],zero:g[5],width:g[6],comma:g[7],precision:g[8]&&g[8].slice(1),trim:g[9],type:g[10]})}R3.prototype=v7.prototype;function v7(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}v7.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function iqe(e){e:for(var g=e.length,I=1,i=-1,n;I0&&(i=0);break}return i>0?e.slice(0,i)+e.slice(n+1):e}var y0e;function nqe(e,g){var I=O9(e,g);if(!I)return e+"";var i=I[0],n=I[1],C=n-(y0e=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,r=i.length;return C===r?i:C>r?i+new Array(C-r+1).join("0"):C>0?i.slice(0,C)+"."+i.slice(C):"0."+new Array(1-C).join("0")+O9(e,Math.max(0,g+C-1))[0]}function uge(e,g){var I=O9(e,g);if(!I)return e+"";var i=I[0],n=I[1];return n<0?"0."+new Array(-n).join("0")+i:i.length>n+1?i.slice(0,n+1)+"."+i.slice(n+1):i+new Array(n-i.length+2).join("0")}const dge={"%":(e,g)=>(e*100).toFixed(g),b:e=>Math.round(e).toString(2),c:e=>e+"",d:eqe,e:(e,g)=>e.toExponential(g),f:(e,g)=>e.toFixed(g),g:(e,g)=>e.toPrecision(g),o:e=>Math.round(e).toString(8),p:(e,g)=>uge(e*100,g),r:uge,s:nqe,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function hge(e){return e}var mge=Array.prototype.map,fge=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Cqe(e){var g=e.grouping===void 0||e.thousands===void 0?hge:tqe(mge.call(e.grouping,Number),e.thousands+""),I=e.currency===void 0?"":e.currency[0]+"",i=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",C=e.numerals===void 0?hge:gqe(mge.call(e.numerals,String)),r=e.percent===void 0?"%":e.percent+"",o=e.minus===void 0?"−":e.minus+"",a=e.nan===void 0?"NaN":e.nan+"";function s(l){l=R3(l);var c=l.fill,u=l.align,d=l.sign,h=l.symbol,m=l.zero,f=l.width,b=l.comma,p=l.precision,y=l.trim,Z=l.type;Z==="n"?(b=!0,Z="g"):dge[Z]||(p===void 0&&(p=12),y=!0,Z="g"),(m||c==="0"&&u==="=")&&(m=!0,c="0",u="=");var B=h==="$"?I:h==="#"&&/[boxX]/.test(Z)?"0"+Z.toLowerCase():"",G=h==="$"?i:/[%p]/.test(Z)?r:"",v=dge[Z],w=/[defgprs%]/.test(Z);p=p===void 0?6:/[gprs]/.test(Z)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p));function R(S){var X=B,W=G,V,H,Y;if(Z==="c")W=v(S)+W,S="";else{S=+S;var K=S<0||1/S<0;if(S=isNaN(S)?a:v(Math.abs(S),p),y&&(S=iqe(S)),K&&+S==0&&d!=="+"&&(K=!1),X=(K?d==="("?d:o:d==="-"||d==="("?"":d)+X,W=(Z==="s"?fge[8+y0e/3]:"")+W+(K&&d==="("?")":""),w){for(V=-1,H=S.length;++VY||Y>57){W=(Y===46?n+S.slice(V+1):S.slice(V))+W,S=S.slice(0,V);break}}}b&&!m&&(S=g(S,1/0));var x=X.length+S.length+W.length,J=x>1)+X+S+W+J.slice(x);break;default:S=J+X+S+W;break}return C(S)}return R.toString=function(){return l+""},R}function A(l,c){var u=s((l=R3(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(w3(c)/3)))*3,h=Math.pow(10,-d),m=fge[8+d/3];return function(f){return u(h*f)+m}}return{format:s,formatPrefix:A}}var tV,Z0e,G0e;rqe({thousands:",",grouping:[3],currency:["$",""]});function rqe(e){return tV=Cqe(e),Z0e=tV.format,G0e=tV.formatPrefix,tV}function oqe(e,g){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(w3(g)/3)))*3-w3(Math.abs(e)))}const V3=Math.PI,W3=2*V3,Uu=1e-6,aqe=W3-Uu;function X3(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function v0e(){return new X3}X3.prototype=v0e.prototype={constructor:X3,moveTo:function(e,g){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+g)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(e,g){this._+="L"+(this._x1=+e)+","+(this._y1=+g)},quadraticCurveTo:function(e,g,I,i){this._+="Q"+ +e+","+ +g+","+(this._x1=+I)+","+(this._y1=+i)},bezierCurveTo:function(e,g,I,i,n,C){this._+="C"+ +e+","+ +g+","+ +I+","+ +i+","+(this._x1=+n)+","+(this._y1=+C)},arcTo:function(e,g,I,i,n){e=+e,g=+g,I=+I,i=+i,n=+n;var C=this._x1,r=this._y1,o=I-e,a=i-g,s=C-e,A=r-g,l=s*s+A*A;if(n<0)throw new Error("negative radius: "+n);if(this._x1===null)this._+="M"+(this._x1=e)+","+(this._y1=g);else if(l>Uu)if(!(Math.abs(A*o-a*s)>Uu)||!n)this._+="L"+(this._x1=e)+","+(this._y1=g);else{var c=I-C,u=i-r,d=o*o+a*a,h=c*c+u*u,m=Math.sqrt(d),f=Math.sqrt(l),b=n*Math.tan((V3-Math.acos((d+l-h)/(2*m*f)))/2),p=b/f,y=b/m;Math.abs(p-1)>Uu&&(this._+="L"+(e+p*s)+","+(g+p*A)),this._+="A"+n+","+n+",0,0,"+ +(A*c>s*u)+","+(this._x1=e+y*o)+","+(this._y1=g+y*a)}},arc:function(e,g,I,i,n,C){e=+e,g=+g,I=+I,C=!!C;var r=I*Math.cos(i),o=I*Math.sin(i),a=e+r,s=g+o,A=1^C,l=C?i-n:n-i;if(I<0)throw new Error("negative radius: "+I);this._x1===null?this._+="M"+a+","+s:(Math.abs(this._x1-a)>Uu||Math.abs(this._y1-s)>Uu)&&(this._+="L"+a+","+s),I&&(l<0&&(l=l%W3+W3),l>aqe?this._+="A"+I+","+I+",0,1,"+A+","+(e-r)+","+(g-o)+"A"+I+","+I+",0,1,"+A+","+(this._x1=a)+","+(this._y1=s):l>Uu&&(this._+="A"+I+","+I+",0,"+ +(l>=V3)+","+A+","+(this._x1=e+I*Math.cos(n))+","+(this._y1=g+I*Math.sin(n))))},rect:function(e,g,I,i){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+g)+"h"+ +I+"v"+ +i+"h"+-I+"Z"},toString:function(){return this._}};function bl(e){return function(){return e}}var pge=Math.abs,vn=Math.atan2,Ru=Math.cos,Aqe=Math.max,V5=Math.min,Va=Math.sin,gp=Math.sqrt,GC=1e-12,VB=Math.PI,_9=VB/2,sqe=2*VB;function lqe(e){return e>1?0:e<-1?VB:Math.acos(e)}function bge(e){return e>=1?_9:e<=-1?-_9:Math.asin(e)}function cqe(e){return e.innerRadius}function uqe(e){return e.outerRadius}function dqe(e){return e.startAngle}function hqe(e){return e.endAngle}function mqe(e){return e&&e.padAngle}function fqe(e,g,I,i,n,C,r,o){var a=I-e,s=i-g,A=r-n,l=o-C,c=l*a-A*s;if(!(c*cV*V+H*H&&(v=R,w=S),{cx:v,cy:w,x01:-A,y01:-l,x11:v*(n/Z-1),y11:w*(n/Z-1)}}function pqe(){var e=cqe,g=uqe,I=bl(0),i=null,n=dqe,C=hqe,r=mqe,o=null;function a(){var s,A,l=+e.apply(this,arguments),c=+g.apply(this,arguments),u=n.apply(this,arguments)-_9,d=C.apply(this,arguments)-_9,h=pge(d-u),m=d>u;if(o||(o=s=v0e()),cGC))o.moveTo(0,0);else if(h>sqe-GC)o.moveTo(c*Ru(u),c*Va(u)),o.arc(0,0,c,u,d,!m),l>GC&&(o.moveTo(l*Ru(d),l*Va(d)),o.arc(0,0,l,d,u,m));else{var f=u,b=d,p=u,y=d,Z=h,B=h,G=r.apply(this,arguments)/2,v=G>GC&&(i?+i.apply(this,arguments):gp(l*l+c*c)),w=V5(pge(c-l)/2,+I.apply(this,arguments)),R=w,S=w,X,W;if(v>GC){var V=bge(v/l*Va(G)),H=bge(v/c*Va(G));(Z-=V*2)>GC?(V*=m?1:-1,p+=V,y-=V):(Z=0,p=y=(u+d)/2),(B-=H*2)>GC?(H*=m?1:-1,f+=H,b-=H):(B=0,f=b=(u+d)/2)}var Y=c*Ru(f),K=c*Va(f),x=l*Ru(y),J=l*Va(y);if(w>GC){var P=c*Ru(b),ge=c*Va(b),q=l*Ru(p),$=l*Va(p),j;if(hGC?S>GC?(X=gV(q,$,Y,K,c,S,m),W=gV(P,ge,x,J,c,S,m),o.moveTo(X.cx+X.x01,X.cy+X.y01),SGC)||!(Z>GC)?o.lineTo(x,J):R>GC?(X=gV(x,J,P,ge,l,-R,m),W=gV(Y,K,q,$,l,-R,m),o.lineTo(X.cx+X.x01,X.cy+X.y01),R({events:{},emit(e,...g){let I=this.events[e]||[];for(let i=0,n=I.length;i{var i;this.events[e]=(i=this.events[e])==null?void 0:i.filter(n=>g!==n)}}});var B0e={},eo={},Ih={};Object.defineProperty(Ih,"__esModule",{value:!0});Ih.DefaultSerializer=Ih.extendSerializer=void 0;function yqe(e,g){const I=e.deserialize.bind(e),i=e.serialize.bind(e);return{deserialize(n){return g.deserialize(n,I)},serialize(n){return g.serialize(n,i)}}}Ih.extendSerializer=yqe;const yge={deserialize(e){return Object.assign(Error(e.message),{name:e.name,stack:e.stack})},serialize(e){return{__error_marker:"$$error",message:e.message,name:e.name,stack:e.stack}}},Zqe=e=>e&&typeof e=="object"&&"__error_marker"in e&&e.__error_marker==="$$error";Ih.DefaultSerializer={deserialize(e){return Zqe(e)?yge.deserialize(e):e},serialize(e){return e instanceof Error?yge.serialize(e):e}};Object.defineProperty(eo,"__esModule",{value:!0});eo.serialize=eo.deserialize=eo.registerSerializer=void 0;const S0e=Ih;let L9=S0e.DefaultSerializer;function Gqe(e){L9=S0e.extendSerializer(L9,e)}eo.registerSerializer=Gqe;function vqe(e){return L9.deserialize(e)}eo.deserialize=vqe;function Bqe(e){return L9.serialize(e)}eo.serialize=Bqe;var w0e={},Rs={},yb={};Object.defineProperty(yb,"__esModule",{value:!0});yb.getBundleURL=yb.getBaseURL=void 0;let W5;function Sqe(){return W5||(W5=wqe()),W5}yb.getBundleURL=Sqe;function wqe(){try{throw new Error}catch(e){const g=(""+e.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);if(g)return R0e(g[0])}return"/"}function R0e(e){return(""+e).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/,"$1")+"/"}yb.getBaseURL=R0e;Object.defineProperty(Rs,"__esModule",{value:!0});Rs.isWorkerRuntime=Rs.getWorkerImplementation=Rs.defaultPoolSize=void 0;const Zge=yb;Rs.defaultPoolSize=typeof navigator<"u"&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:4;const Gge=e=>/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e);function vge(e){const g=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(g)}function Rqe(){if(typeof Worker>"u")return class{constructor(){throw Error("No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers.")}};class e extends Worker{constructor(i,n){var C,r;typeof i=="string"&&n&&n._baseURL?i=new URL(i,n._baseURL):typeof i=="string"&&!Gge(i)&&Zge.getBundleURL().match(/^file:\/\//i)&&(i=new URL(i,Zge.getBundleURL().replace(/\/[^\/]+$/,"/")),(!((C=n==null?void 0:n.CORSWorkaround)!==null&&C!==void 0)||C)&&(i=vge(`importScripts(${JSON.stringify(i)});`))),typeof i=="string"&&Gge(i)&&(!((r=n==null?void 0:n.CORSWorkaround)!==null&&r!==void 0)||r)&&(i=vge(`importScripts(${JSON.stringify(i)});`)),super(i,n)}}class g extends e{constructor(i,n){const C=window.URL.createObjectURL(i);super(C,n)}static fromText(i,n){const C=new window.Blob([i],{type:"text/javascript"});return new g(C,n)}}return{blob:g,default:e}}let X5;function Vqe(){return X5||(X5=Rqe()),X5}Rs.getWorkerImplementation=Vqe;function Wqe(){const e=typeof self<"u"&&typeof Window<"u"&&self instanceof Window;return!!(typeof self<"u"&&self.postMessage&&!e)}Rs.isWorkerRuntime=Wqe;var V0e={},H3={exports:{}},H5,Bge;function Xqe(){if(Bge)return H5;Bge=1;var e=1e3,g=e*60,I=g*60,i=I*24,n=i*7,C=i*365.25;H5=function(A,l){l=l||{};var c=typeof A;if(c==="string"&&A.length>0)return r(A);if(c==="number"&&isFinite(A))return l.long?a(A):o(A);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(A))};function r(A){if(A=String(A),!(A.length>100)){var l=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(A);if(l){var c=parseFloat(l[1]),u=(l[2]||"ms").toLowerCase();switch(u){case"years":case"year":case"yrs":case"yr":case"y":return c*C;case"weeks":case"week":case"w":return c*n;case"days":case"day":case"d":return c*i;case"hours":case"hour":case"hrs":case"hr":case"h":return c*I;case"minutes":case"minute":case"mins":case"min":case"m":return c*g;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}function o(A){var l=Math.abs(A);return l>=i?Math.round(A/i)+"d":l>=I?Math.round(A/I)+"h":l>=g?Math.round(A/g)+"m":l>=e?Math.round(A/e)+"s":A+"ms"}function a(A){var l=Math.abs(A);return l>=i?s(A,l,i,"day"):l>=I?s(A,l,I,"hour"):l>=g?s(A,l,g,"minute"):l>=e?s(A,l,e,"second"):A+" ms"}function s(A,l,c,u){var d=l>=c*1.5;return Math.round(A/c)+" "+u+(d?"s":"")}return H5}function Hqe(e){I.debug=I,I.default=I,I.coerce=a,I.disable=C,I.enable=n,I.enabled=r,I.humanize=Xqe(),I.destroy=s,Object.keys(e).forEach(A=>{I[A]=e[A]}),I.names=[],I.skips=[],I.formatters={};function g(A){let l=0;for(let c=0;c{if(B==="%%")return"%";y++;const v=I.formatters[G];if(typeof v=="function"){const w=m[y];B=v.call(f,w),m.splice(y,1),y--}return B}),I.formatArgs.call(f,m),(f.log||I.log).apply(f,m)}return h.namespace=A,h.useColors=I.useColors(),h.color=I.selectColor(A),h.extend=i,h.destroy=I.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>c!==null?c:(u!==I.namespaces&&(u=I.namespaces,d=I.enabled(A)),d),set:m=>{c=m}}),typeof I.init=="function"&&I.init(h),h}function i(A,l){const c=I(this.namespace+(typeof l>"u"?":":l)+A);return c.log=this.log,c}function n(A){I.save(A),I.namespaces=A,I.names=[],I.skips=[];let l;const c=(typeof A=="string"?A:"").split(/[\s,]+/),u=c.length;for(l=0;l"-"+l)].join(",");return I.enable(""),A}function r(A){if(A[A.length-1]==="*")return!0;let l,c;for(l=0,c=I.skips.length;l{let a=!1;return()=>{a||(a=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),g.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function I(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function i(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const s="color: "+this.color;a.splice(1,0,s,"color: inherit");let A=0,l=0;a[0].replace(/%[a-zA-Z%]/g,c=>{c!=="%%"&&(A++,c==="%c"&&(l=A))}),a.splice(l,0,s)}g.log=console.debug||console.log||(()=>{});function n(a){try{a?g.storage.setItem("debug",a):g.storage.removeItem("debug")}catch{}}function C(){let a;try{a=g.storage.getItem("debug")}catch{}return!a&&typeof process<"u"&&"env"in process&&(a={}.DEBUG),a}function r(){try{return localStorage}catch{}}e.exports=Tqe(g);const{formatters:o}=e.exports;o.j=function(a){try{return JSON.stringify(a)}catch(s){return"[UnexpectedJSONParseError]: "+s.message}}})(H3,H3.exports);var B7=H3.exports,Nqe=globalThis&&globalThis.__awaiter||function(e,g,I,i){function n(C){return C instanceof I?C:new I(function(r){r(C)})}return new(I||(I=Promise))(function(C,r){function o(A){try{s(i.next(A))}catch(l){r(l)}}function a(A){try{s(i.throw(A))}catch(l){r(l)}}function s(A){A.done?C(A.value):n(A.value).then(o,a)}s((i=i.apply(e,g||[])).next())})};class zT{constructor(g){this._baseObserver=g,this._pendingPromises=new Set}complete(){Promise.all(this._pendingPromises).then(()=>this._baseObserver.complete()).catch(g=>this._baseObserver.error(g))}error(g){this._baseObserver.error(g)}schedule(g){const I=Promise.all(this._pendingPromises),i=[],n=r=>i.push(r),C=Promise.resolve().then(()=>Nqe(this,void 0,void 0,function*(){yield I,yield g(n),this._pendingPromises.delete(C);for(const r of i)this._baseObserver.next(r)})).catch(r=>{this._pendingPromises.delete(C),this._baseObserver.error(r)});this._pendingPromises.add(C)}}const W0e=()=>typeof Symbol=="function",kS=e=>W0e()&&!!Symbol[e],S7=e=>kS(e)?Symbol[e]:"@@"+e;kS("asyncIterator")||(Symbol.asyncIterator=Symbol.asyncIterator||Symbol.for("Symbol.asyncIterator"));const kqe=S7("iterator"),T3=S7("observable"),X0e=S7("species");function U9(e,g){const I=e[g];if(I!=null){if(typeof I!="function")throw new TypeError(I+" is not a function");return I}}function Oy(e){let g=e.constructor;return g!==void 0&&(g=g[X0e],g===null&&(g=void 0)),g!==void 0?g:ih}function Yqe(e){return e instanceof ih}function Zb(e){Zb.log?Zb.log(e):setTimeout(()=>{throw e},0)}function x1(e){Promise.resolve().then(()=>{try{e()}catch(g){Zb(g)}})}function H0e(e){const g=e._cleanup;if(g!==void 0&&(e._cleanup=void 0,!!g))try{if(typeof g=="function")g();else{const I=U9(g,"unsubscribe");I&&I.call(g)}}catch(I){Zb(I)}}function N3(e){e._observer=void 0,e._queue=void 0,e._state="closed"}function Kqe(e){const g=e._queue;if(g){e._queue=void 0,e._state="ready";for(const I of g)if(T0e(e,I.type,I.value),e._state==="closed")break}}function T0e(e,g,I){e._state="running";const i=e._observer;try{const n=i?U9(i,g):void 0;switch(g){case"next":n&&n.call(i,I);break;case"error":if(N3(e),n)n.call(i,I);else throw I;break;case"complete":N3(e),n&&n.call(i);break}}catch(n){Zb(n)}e._state==="closed"?H0e(e):e._state==="running"&&(e._state="ready")}function T5(e,g,I){if(e._state!=="closed"){if(e._state==="buffering"){e._queue=e._queue||[],e._queue.push({type:g,value:I});return}if(e._state!=="ready"){e._state="buffering",e._queue=[{type:g,value:I}],x1(()=>Kqe(e));return}T0e(e,g,I)}}let Fqe=class{constructor(g,I){this._cleanup=void 0,this._observer=g,this._queue=void 0,this._state="initializing";const i=new Dqe(this);try{this._cleanup=I.call(void 0,i)}catch(n){i.error(n)}this._state==="initializing"&&(this._state="ready")}get closed(){return this._state==="closed"}unsubscribe(){this._state!=="closed"&&(N3(this),H0e(this))}};class Dqe{constructor(g){this._subscription=g}get closed(){return this._subscription._state==="closed"}next(g){T5(this._subscription,"next",g)}error(g){T5(this._subscription,"error",g)}complete(){T5(this._subscription,"complete")}}let ih=class EZ{constructor(g){if(!(this instanceof EZ))throw new TypeError("Observable cannot be called as a function");if(typeof g!="function")throw new TypeError("Observable initializer must be a function");this._subscriber=g}subscribe(g,I,i){return(typeof g!="object"||g===null)&&(g={next:g,error:I,complete:i}),new Fqe(g,this._subscriber)}pipe(g,...I){let i=this;for(const n of[g,...I])i=n(i);return i}tap(g,I,i){const n=typeof g!="object"||g===null?{next:g,error:I,complete:i}:g;return new EZ(C=>this.subscribe({next(r){n.next&&n.next(r),C.next(r)},error(r){n.error&&n.error(r),C.error(r)},complete(){n.complete&&n.complete(),C.complete()},start(r){n.start&&n.start(r)}}))}forEach(g){return new Promise((I,i)=>{if(typeof g!="function"){i(new TypeError(g+" is not a function"));return}function n(){C.unsubscribe(),I(void 0)}const C=this.subscribe({next(r){try{g(r,n)}catch(o){i(o),C.unsubscribe()}},error(r){i(r)},complete(){I(void 0)}})})}map(g){if(typeof g!="function")throw new TypeError(g+" is not a function");const I=Oy(this);return new I(i=>this.subscribe({next(n){let C=n;try{C=g(n)}catch(r){return i.error(r)}i.next(C)},error(n){i.error(n)},complete(){i.complete()}}))}filter(g){if(typeof g!="function")throw new TypeError(g+" is not a function");const I=Oy(this);return new I(i=>this.subscribe({next(n){try{if(!g(n))return}catch(C){return i.error(C)}i.next(n)},error(n){i.error(n)},complete(){i.complete()}}))}reduce(g,I){if(typeof g!="function")throw new TypeError(g+" is not a function");const i=Oy(this),n=arguments.length>1;let C=!1,r=I;return new i(o=>this.subscribe({next(a){const s=!C;if(C=!0,!s||n)try{r=g(r,a)}catch(A){return o.error(A)}else r=a},error(a){o.error(a)},complete(){if(!C&&!n)return o.error(new TypeError("Cannot reduce an empty sequence"));o.next(r),o.complete()}}))}concat(...g){const I=Oy(this);return new I(i=>{let n,C=0;function r(o){n=o.subscribe({next(a){i.next(a)},error(a){i.error(a)},complete(){C===g.length?(n=void 0,i.complete()):r(I.from(g[C++]))}})}return r(this),()=>{n&&(n.unsubscribe(),n=void 0)}})}flatMap(g){if(typeof g!="function")throw new TypeError(g+" is not a function");const I=Oy(this);return new I(i=>{const n=[],C=this.subscribe({next(o){let a;if(g)try{a=g(o)}catch(A){return i.error(A)}else a=o;const s=I.from(a).subscribe({next(A){i.next(A)},error(A){i.error(A)},complete(){const A=n.indexOf(s);A>=0&&n.splice(A,1),r()}});n.push(s)},error(o){i.error(o)},complete(){r()}});function r(){C.closed&&n.length===0&&i.complete()}return()=>{n.forEach(o=>o.unsubscribe()),C.unsubscribe()}})}[T3](){return this}static from(g){const I=typeof this=="function"?this:EZ;if(g==null)throw new TypeError(g+" is not an object");const i=U9(g,T3);if(i){const n=i.call(g);if(Object(n)!==n)throw new TypeError(n+" is not an object");return Yqe(n)&&n.constructor===I?n:new I(C=>n.subscribe(C))}if(kS("iterator")){const n=U9(g,kqe);if(n)return new I(C=>{x1(()=>{if(!C.closed){for(const r of n.call(g))if(C.next(r),C.closed)return;C.complete()}})})}if(Array.isArray(g))return new I(n=>{x1(()=>{if(!n.closed){for(const C of g)if(n.next(C),n.closed)return;n.complete()}})});throw new TypeError(g+" is not observable")}static of(...g){const I=typeof this=="function"?this:EZ;return new I(i=>{x1(()=>{if(!i.closed){for(const n of g)if(i.next(n),i.closed)return;i.complete()}})})}static get[X0e](){return this}};W0e()&&Object.defineProperty(ih,Symbol("extensions"),{value:{symbol:T3,hostReportError:Zb},configurable:!0});const Qh=ih;function jh(e){typeof e=="function"?e():e&&typeof e.unsubscribe=="function"&&e.unsubscribe()}var xqe=globalThis&&globalThis.__awaiter||function(e,g,I,i){function n(C){return C instanceof I?C:new I(function(r){r(C)})}return new(I||(I=Promise))(function(C,r){function o(A){try{s(i.next(A))}catch(l){r(l)}}function a(A){try{s(i.throw(A))}catch(l){r(l)}}function s(A){A.done?C(A.value):n(A.value).then(o,a)}s((i=i.apply(e,g||[])).next())})};function Eqe(e){return g=>new Qh(I=>{const i=new zT(I),n=g.subscribe({complete(){i.complete()},error(C){i.error(C)},next(C){i.schedule(r=>xqe(this,void 0,void 0,function*(){(yield e(C))&&r(C)}))}});return()=>jh(n)})}function Mqe(e){return e&&kS("asyncIterator")&&e[Symbol.asyncIterator]}function zqe(e){return e&&kS("iterator")&&e[Symbol.iterator]}var Pqe=globalThis&&globalThis.__awaiter||function(e,g,I,i){function n(C){return C instanceof I?C:new I(function(r){r(C)})}return new(I||(I=Promise))(function(C,r){function o(A){try{s(i.next(A))}catch(l){r(l)}}function a(A){try{s(i.throw(A))}catch(l){r(l)}}function s(A){A.done?C(A.value):n(A.value).then(o,a)}s((i=i.apply(e,g||[])).next())})},Jqe=globalThis&&globalThis.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var g=e[Symbol.asyncIterator],I;return g?g.call(e):(e=typeof __values=="function"?__values(e):e[Symbol.iterator](),I={},i("next"),i("throw"),i("return"),I[Symbol.asyncIterator]=function(){return this},I);function i(C){I[C]=e[C]&&function(r){return new Promise(function(o,a){r=e[C](r),n(o,a,r.done,r.value)})}}function n(C,r,o,a){Promise.resolve(a).then(function(s){C({value:s,done:o})},r)}};function Oqe(e){return g=>new Qh(I=>{const i=new zT(I),n=g.subscribe({complete(){i.complete()},error(C){i.error(C)},next(C){i.schedule(r=>Pqe(this,void 0,void 0,function*(){var o,a;const s=yield e(C);if(zqe(s)||Mqe(s))try{for(var A=Jqe(s),l;l=yield A.next(),!l.done;){const c=l.value;r(c)}}catch(c){o={error:c}}finally{try{l&&!l.done&&(a=A.return)&&(yield a.call(A))}finally{if(o)throw o.error}}else s.map(c=>r(c))}))}});return()=>jh(n)})}function _qe(e){return new ih(g=>{let I=0;const i=setInterval(()=>{g.next(I++)},e);return()=>clearInterval(i)})}var Lqe=globalThis&&globalThis.__awaiter||function(e,g,I,i){function n(C){return C instanceof I?C:new I(function(r){r(C)})}return new(I||(I=Promise))(function(C,r){function o(A){try{s(i.next(A))}catch(l){r(l)}}function a(A){try{s(i.throw(A))}catch(l){r(l)}}function s(A){A.done?C(A.value):n(A.value).then(o,a)}s((i=i.apply(e,g||[])).next())})};function Uqe(e){return g=>new Qh(I=>{const i=new zT(I),n=g.subscribe({complete(){i.complete()},error(C){i.error(C)},next(C){i.schedule(r=>Lqe(this,void 0,void 0,function*(){const o=yield e(C);r(o)}))}});return()=>jh(n)})}function Qqe(...e){return e.length===0?ih.from([]):new ih(g=>{let I=0;const i=e.map(C=>C.subscribe({error(r){g.error(r),n()},next(r){g.next(r)},complete(){++I===e.length&&(g.complete(),n())}})),n=()=>{i.forEach(C=>jh(C))};return n})}class jqe extends Qh{constructor(){super(g=>(this._observers.add(g),()=>this._observers.delete(g))),this._observers=new Set}next(g){for(const I of this._observers)I.next(g)}error(g){for(const I of this._observers)I.error(g)}complete(){for(const g of this._observers)g.complete()}}const N0e=jqe;function $qe(e){const g=new N0e;let I,i=0;return new Qh(n=>{I||(I=e.subscribe(g));const C=g.subscribe(n);return i++,()=>{i--,C.unsubscribe(),i===0&&(jh(I),I=void 0)}})}var qqe=globalThis&&globalThis.__awaiter||function(e,g,I,i){function n(C){return C instanceof I?C:new I(function(r){r(C)})}return new(I||(I=Promise))(function(C,r){function o(A){try{s(i.next(A))}catch(l){r(l)}}function a(A){try{s(i.throw(A))}catch(l){r(l)}}function s(A){A.done?C(A.value):n(A.value).then(o,a)}s((i=i.apply(e,g||[])).next())})};function eet(e,g){return I=>new Qh(i=>{let n,C=0;const r=new zT(i),o=I.subscribe({complete(){r.complete()},error(a){r.error(a)},next(a){r.schedule(s=>qqe(this,void 0,void 0,function*(){n=yield e(C===0?typeof g>"u"?a:g:n,a,C++),s(n)}))}});return()=>jh(o)})}const tet=Object.freeze(Object.defineProperty({__proto__:null,Observable:Qh,Subject:N0e,filter:Eqe,flatMap:Oqe,interval:_qe,map:Uqe,merge:Qqe,multicast:$qe,scan:eet,unsubscribe:jh},Symbol.toStringTag,{value:"Module"})),PT=q_(tet);var JT={};Object.defineProperty(JT,"__esModule",{value:!0});JT.allSettled=void 0;function get(e){return Promise.all(e.map(g=>{const I=C=>({status:"fulfilled",value:C}),i=C=>({status:"rejected",reason:C}),n=Promise.resolve(g);try{return n.then(I,i)}catch(C){return Promise.reject(C)}}))}JT.allSettled=get;var k0e={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.PoolEventType=void 0,function(g){g.initialized="initialized",g.taskCanceled="taskCanceled",g.taskCompleted="taskCompleted",g.taskFailed="taskFailed",g.taskQueued="taskQueued",g.taskQueueDrained="taskQueueDrained",g.taskStart="taskStart",g.terminated="terminated"}(e.PoolEventType||(e.PoolEventType={}))})(k0e);var YS={},TC={};Object.defineProperty(TC,"__esModule",{value:!0});TC.$worker=TC.$transferable=TC.$terminate=TC.$events=TC.$errors=void 0;TC.$errors=Symbol("thread.errors");TC.$events=Symbol("thread.events");TC.$terminate=Symbol("thread.terminate");TC.$transferable=Symbol("thread.transferable");TC.$worker=Symbol("thread.worker");Object.defineProperty(YS,"__esModule",{value:!0});YS.Thread=void 0;const N5=TC;function Sge(e){throw Error(e)}YS.Thread={errors(e){return e[N5.$errors]||Sge("Error observable not found. Make sure to pass a thread instance as returned by the spawn() promise.")},events(e){return e[N5.$events]||Sge("Events observable not found. Make sure to pass a thread instance as returned by the spawn() promise.")},terminate(e){return e[N5.$terminate]()}};(function(e){var g=yI&&yI.__awaiter||function(f,b,p,y){function Z(B){return B instanceof p?B:new p(function(G){G(B)})}return new(p||(p=Promise))(function(B,G){function v(S){try{R(y.next(S))}catch(X){G(X)}}function w(S){try{R(y.throw(S))}catch(X){G(X)}}function R(S){S.done?B(S.value):Z(S.value).then(v,w)}R((y=y.apply(f,b||[])).next())})},I=yI&&yI.__importDefault||function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(e,"__esModule",{value:!0}),e.Pool=e.Thread=e.PoolEventType=void 0;const i=I(B7),n=PT,C=JT,r=Rs,o=k0e;Object.defineProperty(e,"PoolEventType",{enumerable:!0,get:function(){return o.PoolEventType}});const a=YS;Object.defineProperty(e,"Thread",{enumerable:!0,get:function(){return a.Thread}});let s=1;function A(f){const b=[];for(let p=0;psetTimeout(b,f))}function c(f,b){return f.reduce((p,y)=>[...p,...b(y)],[])}function u(f){return f.replace(/\W/g," ").trim().replace(/\s+/g,"-")}function d(f,b){return A(b).map(()=>({init:f(),runningTasks:[]}))}class h{constructor(b,p){this.eventSubject=new n.Subject,this.initErrors=[],this.isClosing=!1,this.nextTaskID=1,this.taskQueue=[];const y=typeof p=="number"?{size:p}:p||{},{size:Z=r.defaultPoolSize}=y;this.debug=i.default(`threads:pool:${u(y.name||String(s++))}`),this.options=y,this.workers=d(b,Z),this.eventObservable=n.multicast(n.Observable.from(this.eventSubject)),Promise.all(this.workers.map(B=>B.init)).then(()=>this.eventSubject.next({type:o.PoolEventType.initialized,size:this.workers.length}),B=>{this.debug("Error while initializing pool worker:",B),this.eventSubject.error(B),this.initErrors.push(B)})}findIdlingWorker(){const{concurrency:b=1}=this.options;return this.workers.find(p=>p.runningTasks.lengthg(this,void 0,void 0,function*(){const Z=()=>{b.runningTasks=b.runningTasks.filter(B=>B!==y)};yield l(0);try{yield this.runPoolTask(b,p)}finally{Z(),this.isClosing||this.scheduleWork()}}))();b.runningTasks.push(y)})}scheduleWork(){this.debug("Attempt de-queueing a task in order to run it...");const b=this.findIdlingWorker();if(!b)return;const p=this.taskQueue.shift();if(!p){this.debug("Task queue is empty"),this.eventSubject.next({type:o.PoolEventType.taskQueueDrained});return}this.run(b,p)}taskCompletion(b){return new Promise((p,y)=>{const Z=this.events().subscribe(B=>{B.type===o.PoolEventType.taskCompleted&&B.taskID===b?(Z.unsubscribe(),p(B.returnValue)):B.type===o.PoolEventType.taskFailed&&B.taskID===b?(Z.unsubscribe(),y(B.error)):B.type===o.PoolEventType.terminated&&(Z.unsubscribe(),y(Error("Pool has been terminated before task was run.")))})})}settled(b=!1){return g(this,void 0,void 0,function*(){const p=()=>c(this.workers,B=>B.runningTasks),y=[],Z=this.eventObservable.subscribe(B=>{B.type===o.PoolEventType.taskFailed&&y.push(B.error)});return this.initErrors.length>0?Promise.reject(this.initErrors[0]):b&&this.taskQueue.length===0?(yield C.allSettled(p()),y):(yield new Promise((B,G)=>{const v=this.eventObservable.subscribe({next(w){w.type===o.PoolEventType.taskQueueDrained&&(v.unsubscribe(),B(void 0))},error:G})}),yield C.allSettled(p()),Z.unsubscribe(),y)})}completed(b=!1){return g(this,void 0,void 0,function*(){const p=this.settled(b),y=new Promise((B,G)=>{const v=this.eventObservable.subscribe({next(w){w.type===o.PoolEventType.taskQueueDrained?(v.unsubscribe(),B(p)):w.type===o.PoolEventType.taskFailed&&(v.unsubscribe(),G(w.error))},error:G})}),Z=yield Promise.race([p,y]);if(Z.length>0)throw Z[0]})}events(){return this.eventObservable}queue(b){const{maxQueuedJobs:p=1/0}=this.options;if(this.isClosing)throw Error("Cannot schedule pool tasks after terminate() has been called.");if(this.initErrors.length>0)throw this.initErrors[0];const y=this.nextTaskID++,Z=this.taskCompletion(y);Z.catch(G=>{this.debug(`Task #${y} errored:`,G)});const B={id:y,run:b,cancel:()=>{this.taskQueue.indexOf(B)!==-1&&(this.taskQueue=this.taskQueue.filter(G=>G!==B),this.eventSubject.next({type:o.PoolEventType.taskCanceled,taskID:B.id}))},then:Z.then.bind(Z)};if(this.taskQueue.length>=p)throw Error(`Maximum number of pool tasks queued. Refusing to queue another one. -This usually happens for one of two reasons: We are either at peak workload right now or some tasks just won't finish, thus blocking the pool.`);return this.debug(`Queueing task #${B.id}...`),this.taskQueue.push(B),this.eventSubject.next({type:o.PoolEventType.taskQueued,taskID:B.id}),this.scheduleWork(),B}terminate(b){return g(this,void 0,void 0,function*(){this.isClosing=!0,b||(yield this.completed(!0)),this.eventSubject.next({type:o.PoolEventType.terminated,remainingQueue:[...this.taskQueue]}),this.eventSubject.complete(),yield Promise.all(this.workers.map(p=>g(this,void 0,void 0,function*(){return a.Thread.terminate(yield p.init)})))})}}h.EventType=o.PoolEventType;function m(f,b){return new h(f,b)}m.EventType=o.PoolEventType,e.Pool=m})(V0e);var OT={},_T={};Object.defineProperty(_T,"__esModule",{value:!0});_T.createPromiseWithResolver=void 0;const Iet=()=>{};function iet(){let e=!1,g,I=Iet;return[new Promise(C=>{e?C(g):I=C}),C=>{e=!0,g=C,I(g)}]}_T.createPromiseWithResolver=iet;var Y0e={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WorkerEventType=void 0,function(g){g.internalError="internalError",g.message="message",g.termination="termination"}(e.WorkerEventType||(e.WorkerEventType={}))})(Y0e);var Gb={},LT={};Object.defineProperty(LT,"__esModule",{value:!0});LT.ObservablePromise=void 0;const net=PT,Cet=()=>{},ret=e=>e,wge=e=>Promise.resolve().then(e);function oet(e){throw e}function aet(e){return e&&typeof e.then=="function"}class w7 extends net.Observable{constructor(g){super(I=>{const i=this,n=Object.assign(Object.assign({},I),{complete(){I.complete(),i.onCompletion()},error(C){I.error(C),i.onError(C)},next(C){I.next(C),i.onNext(C)}});try{return this.initHasRun=!0,g(n)}catch(C){n.error(C)}}),this.initHasRun=!1,this.fulfillmentCallbacks=[],this.rejectionCallbacks=[],this.firstValueSet=!1,this.state="pending"}onNext(g){this.firstValueSet||(this.firstValue=g,this.firstValueSet=!0)}onError(g){this.state="rejected",this.rejection=g;for(const I of this.rejectionCallbacks)wge(()=>I(g))}onCompletion(){this.state="fulfilled";for(const g of this.fulfillmentCallbacks)wge(()=>g(this.firstValue))}then(g,I){const i=g||ret,n=I||oet;let C=!1;return new Promise((r,o)=>{const a=A=>{if(!C){C=!0;try{r(n(A))}catch(l){o(l)}}},s=A=>{try{r(i(A))}catch(l){a(l)}};if(this.initHasRun||this.subscribe({error:a}),this.state==="fulfilled")return r(i(this.firstValue));if(this.state==="rejected")return C=!0,r(n(this.rejection));this.fulfillmentCallbacks.push(s),this.rejectionCallbacks.push(a)})}catch(g){return this.then(void 0,g)}finally(g){const I=g||Cet;return this.then(i=>(I(),i),()=>I())}static from(g){return aet(g)?new w7(I=>{const i=C=>{I.next(C),I.complete()},n=C=>{I.error(C)};g.then(i,n)}):super.from(g)}}LT.ObservablePromise=w7;var Ds={};Object.defineProperty(Ds,"__esModule",{value:!0});Ds.Transfer=Ds.isTransferDescriptor=void 0;const K0e=TC;function Aet(e){return!(!e||typeof e!="object")}function set(e){return e&&typeof e=="object"&&e[K0e.$transferable]}Ds.isTransferDescriptor=set;function cet(e,g){if(!g){if(!Aet(e))throw Error();g=[e]}return{[K0e.$transferable]:!0,send:e,transferables:g}}Ds.Transfer=cet;var R7={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WorkerMessageType=e.MasterMessageType=void 0,function(g){g.cancel="cancel",g.run="run"}(e.MasterMessageType||(e.MasterMessageType={})),function(g){g.error="error",g.init="init",g.result="result",g.running="running",g.uncaughtError="uncaughtError"}(e.WorkerMessageType||(e.WorkerMessageType={}))})(R7);var uet=yI&&yI.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Gb,"__esModule",{value:!0});Gb.createProxyModule=Gb.createProxyFunction=void 0;const det=uet(B7),F0e=PT,zG=eo,Rge=LT,het=Ds,KS=R7,D0e=det.default("threads:master:messages");let met=1;const fet=e=>Array.from(new Set(e)),pet=e=>e&&e.type===KS.WorkerMessageType.error,bet=e=>e&&e.type===KS.WorkerMessageType.result,yet=e=>e&&e.type===KS.WorkerMessageType.running;function Zet(e,g){return new F0e.Observable(I=>{let i;const n=C=>{if(D0e("Message from worker:",C.data),!(!C.data||C.data.uid!==g)){if(yet(C.data))i=C.data.resultType;else if(bet(C.data))i==="promise"?(typeof C.data.payload<"u"&&I.next(zG.deserialize(C.data.payload)),I.complete(),e.removeEventListener("message",n)):(C.data.payload&&I.next(zG.deserialize(C.data.payload)),C.data.complete&&(I.complete(),e.removeEventListener("message",n)));else if(pet(C.data)){const r=zG.deserialize(C.data.error);I.error(r),e.removeEventListener("message",n)}}};return e.addEventListener("message",n),()=>{if(i==="observable"||!i){const C={type:KS.MasterMessageType.cancel,uid:g};e.postMessage(C)}e.removeEventListener("message",n)}})}function Get(e){if(e.length===0)return{args:[],transferables:[]};const g=[],I=[];for(const i of e)het.isTransferDescriptor(i)?(g.push(zG.serialize(i.send)),I.push(...i.transferables)):g.push(zG.serialize(i));return{args:g,transferables:I.length===0?I:fet(I)}}function x0e(e,g){return(...I)=>{const i=met++,{args:n,transferables:C}=Get(I),r={type:KS.MasterMessageType.run,uid:i,method:g,args:n};D0e("Sending command to run function to worker:",r);try{e.postMessage(r,C)}catch(o){return Rge.ObservablePromise.from(Promise.reject(o))}return Rge.ObservablePromise.from(F0e.multicast(Zet(e,i)))}}Gb.createProxyFunction=x0e;function vet(e,g){const I={};for(const i of g)I[i]=x0e(e,i);return I}Gb.createProxyModule=vet;var V7=yI&&yI.__awaiter||function(e,g,I,i){function n(C){return C instanceof I?C:new I(function(r){r(C)})}return new(I||(I=Promise))(function(C,r){function o(A){try{s(i.next(A))}catch(l){r(l)}}function a(A){try{s(i.throw(A))}catch(l){r(l)}}function s(A){A.done?C(A.value):n(A.value).then(o,a)}s((i=i.apply(e,g||[])).next())})},Bet=yI&&yI.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(OT,"__esModule",{value:!0});OT.spawn=void 0;const W7=Bet(B7),wet=PT,Ret=eo,Vet=_T,IV=TC,E1=Y0e,Vge=Gb,Wet=W7.default("threads:master:messages"),Xet=W7.default("threads:master:spawn"),E0e=W7.default("threads:master:thread-utils"),Het=e=>e&&e.type==="init",Tet=e=>e&&e.type==="uncaughtError",Net=typeof process<"u"&&{}.THREADS_WORKER_INIT_TIMEOUT?Number.parseInt({}.THREADS_WORKER_INIT_TIMEOUT,10):1e4;function ket(e,g,I){return V7(this,void 0,void 0,function*(){let i;const n=new Promise((r,o)=>{i=setTimeout(()=>o(Error(I)),g)}),C=yield Promise.race([e,n]);return clearTimeout(i),C})}function Yet(e){return new Promise((g,I)=>{const i=n=>{Wet("Message from worker before finishing initialization:",n.data),Het(n.data)?(e.removeEventListener("message",i),g(n.data)):Tet(n.data)&&(e.removeEventListener("message",i),I(Ret.deserialize(n.data.error)))};e.addEventListener("message",i)})}function Ket(e,g){return new wet.Observable(I=>{const i=C=>{const r={type:E1.WorkerEventType.message,data:C.data};I.next(r)},n=C=>{E0e("Unhandled promise rejection event in thread:",C);const r={type:E1.WorkerEventType.internalError,error:Error(C.reason)};I.next(r)};e.addEventListener("message",i),e.addEventListener("unhandledrejection",n),g.then(()=>{const C={type:E1.WorkerEventType.termination};e.removeEventListener("message",i),e.removeEventListener("unhandledrejection",n),I.next(C),I.complete()})})}function Fet(e){const[g,I]=Vet.createPromiseWithResolver();return{terminate:()=>V7(this,void 0,void 0,function*(){E0e("Terminating worker"),yield e.terminate(),I()}),termination:g}}function Wge(e,g,I,i){const n=I.filter(C=>C.type===E1.WorkerEventType.internalError).map(C=>C.error);return Object.assign(e,{[IV.$errors]:n,[IV.$events]:I,[IV.$terminate]:i,[IV.$worker]:g})}function Det(e,g){return V7(this,void 0,void 0,function*(){Xet("Initializing new thread");const I=g&&g.timeout?g.timeout:Net,n=(yield ket(Yet(e),I,`Timeout: Did not receive an init message from worker after ${I}ms. Make sure the worker calls expose().`)).exposed,{termination:C,terminate:r}=Fet(e),o=Ket(e,C);if(n.type==="function"){const a=Vge.createProxyFunction(e);return Wge(a,e,o,r)}else if(n.type==="module"){const a=Vge.createProxyModule(e,n.methods);return Wge(a,e,o,r)}else{const a=n.type;throw Error(`Worker init message states unexpected type of expose(): ${a}`)}})}OT.spawn=Det;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Worker=e.BlobWorker=e.isWorkerRuntime=e.Thread=e.spawn=e.Pool=void 0;const g=Rs;Object.defineProperty(e,"isWorkerRuntime",{enumerable:!0,get:function(){return g.isWorkerRuntime}});var I=V0e;Object.defineProperty(e,"Pool",{enumerable:!0,get:function(){return I.Pool}});var i=OT;Object.defineProperty(e,"spawn",{enumerable:!0,get:function(){return i.spawn}});var n=YS;Object.defineProperty(e,"Thread",{enumerable:!0,get:function(){return n.Thread}}),e.BlobWorker=g.getWorkerImplementation().blob,e.Worker=g.getWorkerImplementation().default})(w0e);var M0e={},xet=e=>e?typeof Symbol.observable=="symbol"&&typeof e[Symbol.observable]=="function"?e===e[Symbol.observable]():typeof e["@@observable"]=="function"?e===e["@@observable"]():!1:!1,X7={};Object.defineProperty(X7,"__esModule",{value:!0});const Eet=function(){const g=typeof self<"u"&&typeof Window<"u"&&self instanceof Window;return!!(typeof self<"u"&&self.postMessage&&!g)},Met=function(g,I){self.postMessage(g,I)},zet=function(g){const I=n=>{g(n.data)},i=()=>{self.removeEventListener("message",I)};return self.addEventListener("message",I),i};X7.default={isWorkerRuntime:Eet,postMessageToMaster:Met,subscribeToMasterMessages:zet};(function(e){var g=yI&&yI.__awaiter||function(w,R,S,X){function W(V){return V instanceof S?V:new S(function(H){H(V)})}return new(S||(S=Promise))(function(V,H){function Y(J){try{x(X.next(J))}catch(P){H(P)}}function K(J){try{x(X.throw(J))}catch(P){H(P)}}function x(J){J.done?V(J.value):W(J.value).then(Y,K)}x((X=X.apply(w,R||[])).next())})},I=yI&&yI.__importDefault||function(w){return w&&w.__esModule?w:{default:w}};Object.defineProperty(e,"__esModule",{value:!0}),e.expose=e.isWorkerRuntime=e.Transfer=e.registerSerializer=void 0;const i=I(xet),n=eo,C=Ds,r=R7,o=I(X7);var a=eo;Object.defineProperty(e,"registerSerializer",{enumerable:!0,get:function(){return a.registerSerializer}});var s=Ds;Object.defineProperty(e,"Transfer",{enumerable:!0,get:function(){return s.Transfer}}),e.isWorkerRuntime=o.default.isWorkerRuntime;let A=!1;const l=new Map,c=w=>w&&w.type===r.MasterMessageType.cancel,u=w=>w&&w.type===r.MasterMessageType.run,d=w=>i.default(w)||h(w);function h(w){return w&&typeof w=="object"&&typeof w.subscribe=="function"}function m(w){return C.isTransferDescriptor(w)?{payload:w.send,transferables:w.transferables}:{payload:w,transferables:void 0}}function f(){const w={type:r.WorkerMessageType.init,exposed:{type:"function"}};o.default.postMessageToMaster(w)}function b(w){const R={type:r.WorkerMessageType.init,exposed:{type:"module",methods:w}};o.default.postMessageToMaster(R)}function p(w,R){const{payload:S,transferables:X}=m(R),W={type:r.WorkerMessageType.error,uid:w,error:n.serialize(S)};o.default.postMessageToMaster(W,X)}function y(w,R,S){const{payload:X,transferables:W}=m(S),V={type:r.WorkerMessageType.result,uid:w,complete:R?!0:void 0,payload:X};o.default.postMessageToMaster(V,W)}function Z(w,R){const S={type:r.WorkerMessageType.running,uid:w,resultType:R};o.default.postMessageToMaster(S)}function B(w){try{const R={type:r.WorkerMessageType.uncaughtError,error:n.serialize(w)};o.default.postMessageToMaster(R)}catch(R){console.error(`Not reporting uncaught error back to master thread as it occured while reporting an uncaught error already. -Latest error:`,R,` -Original error:`,w)}}function G(w,R,S){return g(this,void 0,void 0,function*(){let X;try{X=R(...S)}catch(V){return p(w,V)}const W=d(X)?"observable":"promise";if(Z(w,W),d(X)){const V=X.subscribe(H=>y(w,!1,n.serialize(H)),H=>{p(w,n.serialize(H)),l.delete(w)},()=>{y(w,!0),l.delete(w)});l.set(w,V)}else try{const V=yield X;y(w,!0,n.serialize(V))}catch(V){p(w,n.serialize(V))}})}function v(w){if(!o.default.isWorkerRuntime())throw Error("expose() called in the master thread.");if(A)throw Error("expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.");if(A=!0,typeof w=="function")o.default.subscribeToMasterMessages(R=>{u(R)&&!R.method&&G(R.uid,w,R.args.map(n.deserialize))}),f();else if(typeof w=="object"&&w){o.default.subscribeToMasterMessages(S=>{u(S)&&S.method&&G(S.uid,w[S.method],S.args.map(n.deserialize))});const R=Object.keys(w).filter(S=>typeof w[S]=="function");b(R)}else throw Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${w}`);o.default.subscribeToMasterMessages(R=>{if(c(R)){const S=R.uid,X=l.get(S);X&&(X.unsubscribe(),l.delete(S))}})}e.expose=v,typeof self<"u"&&typeof self.addEventListener=="function"&&o.default.isWorkerRuntime()&&(self.addEventListener("error",w=>{setTimeout(()=>B(w.error||w),250)}),self.addEventListener("unhandledrejection",w=>{const R=w.reason;R&&typeof R.message=="string"&&setTimeout(()=>B(R),250)})),typeof process<"u"&&typeof process.on=="function"&&o.default.isWorkerRuntime()&&(process.on("uncaughtException",w=>{setTimeout(()=>B(w),250)}),process.on("unhandledRejection",w=>{w&&typeof w.message=="string"&&setTimeout(()=>B(w),250)}))})(M0e);(function(e){var g=yI&&yI.__createBinding||(Object.create?function(o,a,s,A){A===void 0&&(A=s),Object.defineProperty(o,A,{enumerable:!0,get:function(){return a[s]}})}:function(o,a,s,A){A===void 0&&(A=s),o[A]=a[s]}),I=yI&&yI.__exportStar||function(o,a){for(var s in o)s!=="default"&&!Object.prototype.hasOwnProperty.call(a,s)&&g(a,o,s)};Object.defineProperty(e,"__esModule",{value:!0}),e.Transfer=e.DefaultSerializer=e.expose=e.registerSerializer=void 0;var i=eo;Object.defineProperty(e,"registerSerializer",{enumerable:!0,get:function(){return i.registerSerializer}}),I(w0e,e);var n=M0e;Object.defineProperty(e,"expose",{enumerable:!0,get:function(){return n.expose}});var C=Ih;Object.defineProperty(e,"DefaultSerializer",{enumerable:!0,get:function(){return C.DefaultSerializer}});var r=Ds;Object.defineProperty(e,"Transfer",{enumerable:!0,get:function(){return r.Transfer}})})(B0e);const Iu=Qc(B0e);Iu.registerSerializer;const UT=Iu.spawn;Iu.BlobWorker;Iu.DefaultSerializer;Iu.Pool;Iu.Thread;Iu.Transfer;Iu.Worker;class Pet extends Map{constructor(g={}){if(super(),!(g.maxSize&&g.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");if(typeof g.maxAge=="number"&&g.maxAge===0)throw new TypeError("`maxAge` must be a number greater than 0");this.maxSize=g.maxSize,this.maxAge=g.maxAge||Number.POSITIVE_INFINITY,this.onEviction=g.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_emitEvictions(g){if(typeof this.onEviction=="function")for(const[I,i]of g)this.onEviction(I,i.value)}_deleteIfExpired(g,I){return typeof I.expiry=="number"&&I.expiry<=Date.now()?(typeof this.onEviction=="function"&&this.onEviction(g,I.value),this.delete(g)):!1}_getOrDeleteIfExpired(g,I){if(this._deleteIfExpired(g,I)===!1)return I.value}_getItemValue(g,I){return I.expiry?this._getOrDeleteIfExpired(g,I):I.value}_peek(g,I){const i=I.get(g);return this._getItemValue(g,i)}_set(g,I){this.cache.set(g,I),this._size++,this._size>=this.maxSize&&(this._size=0,this._emitEvictions(this.oldCache),this.oldCache=this.cache,this.cache=new Map)}_moveToRecent(g,I){this.oldCache.delete(g),this._set(g,I)}*_entriesAscending(){for(const g of this.oldCache){const[I,i]=g;this.cache.has(I)||this._deleteIfExpired(I,i)===!1&&(yield g)}for(const g of this.cache){const[I,i]=g;this._deleteIfExpired(I,i)===!1&&(yield g)}}get(g){if(this.cache.has(g)){const I=this.cache.get(g);return this._getItemValue(g,I)}if(this.oldCache.has(g)){const I=this.oldCache.get(g);if(this._deleteIfExpired(g,I)===!1)return this._moveToRecent(g,I),I.value}}set(g,I,{maxAge:i=this.maxAge}={}){const n=typeof i=="number"&&i!==Number.POSITIVE_INFINITY?Date.now()+i:void 0;return this.cache.has(g)?this.cache.set(g,{value:I,expiry:n}):this._set(g,{value:I,expiry:n}),this}has(g){return this.cache.has(g)?!this._deleteIfExpired(g,this.cache.get(g)):this.oldCache.has(g)?!this._deleteIfExpired(g,this.oldCache.get(g)):!1}peek(g){if(this.cache.has(g))return this._peek(g,this.cache);if(this.oldCache.has(g))return this._peek(g,this.oldCache)}delete(g){const I=this.cache.delete(g);return I&&this._size--,this.oldCache.delete(g)||I}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}resize(g){if(!(g&&g>0))throw new TypeError("`maxSize` must be a number greater than 0");const I=[...this._entriesAscending()],i=I.length-g;i<0?(this.cache=new Map(I),this.oldCache=new Map,this._size=I.length):(i>0&&this._emitEvictions(I.slice(0,i)),this.oldCache=new Map(I.slice(i)),this.cache=new Map,this._size=0),this.maxSize=g}*keys(){for(const[g]of this)yield g}*values(){for(const[,g]of this)yield g}*[Symbol.iterator](){for(const g of this.cache){const[I,i]=g;this._deleteIfExpired(I,i)===!1&&(yield[I,i.value])}for(const g of this.oldCache){const[I,i]=g;this.cache.has(I)||this._deleteIfExpired(I,i)===!1&&(yield[I,i.value])}}*entriesDescending(){let g=[...this.cache];for(let I=g.length-1;I>=0;--I){const i=g[I],[n,C]=i;this._deleteIfExpired(n,C)===!1&&(yield[n,C.value])}g=[...this.oldCache];for(let I=g.length-1;I>=0;--I){const i=g[I],[n,C]=i;this.cache.has(n)||this._deleteIfExpired(n,C)===!1&&(yield[n,C.value])}}*entriesAscending(){for(const[g,I]of this._entriesAscending())yield[g,I.value]}get size(){if(!this._size)return this.oldCache.size;let g=0;for(const I of this.oldCache.keys())this.cache.has(I)||g++;return Math.min(this._size+g,this.maxSize)}entries(){return this.entriesAscending()}forEach(g,I=this){for(const[i,n]of this.entriesAscending())g.call(I,n,i,this)}get[Symbol.toStringTag](){return JSON.stringify([...this.entriesAscending()])}}var Xge={},k5={},Y5=34,_y=10,K5=13;function z0e(e){return new Function("d","return {"+e.map(function(g,I){return JSON.stringify(g)+": d["+I+'] || ""'}).join(",")+"}")}function Jet(e,g){var I=z0e(e);return function(i,n){return g(I(i),n,e)}}function Hge(e){var g=Object.create(null),I=[];return e.forEach(function(i){for(var n in i)n in g||I.push(g[n]=n)}),I}function vC(e,g){var I=e+"",i=I.length;return i9999?"+"+vC(e,6):vC(e,4)}function _et(e){var g=e.getUTCHours(),I=e.getUTCMinutes(),i=e.getUTCSeconds(),n=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":Oet(e.getUTCFullYear())+"-"+vC(e.getUTCMonth()+1,2)+"-"+vC(e.getUTCDate(),2)+(n?"T"+vC(g,2)+":"+vC(I,2)+":"+vC(i,2)+"."+vC(n,3)+"Z":i?"T"+vC(g,2)+":"+vC(I,2)+":"+vC(i,2)+"Z":I||g?"T"+vC(g,2)+":"+vC(I,2)+"Z":"")}function Let(e){var g=new RegExp('["'+e+` -\r]`),I=e.charCodeAt(0);function i(l,c){var u,d,h=n(l,function(m,f){if(u)return u(m,f-1);d=m,u=c?Jet(m,c):z0e(m)});return h.columns=d||[],h}function n(l,c){var u=[],d=l.length,h=0,m=0,f,b=d<=0,p=!1;l.charCodeAt(d-1)===_y&&--d,l.charCodeAt(d-1)===K5&&--d;function y(){if(b)return k5;if(p)return p=!1,Xge;var B,G=h,v;if(l.charCodeAt(G)===Y5){for(;h++=d?b=!0:(v=l.charCodeAt(h++))===_y?p=!0:v===K5&&(p=!0,l.charCodeAt(h)===_y&&++h),l.slice(G+1,B-1).replace(/""/g,'"')}for(;hn)throw new RangeError('The value "'+F+'" is invalid for option "size"');const T=new Uint8Array(F);return Object.setPrototypeOf(T,o.prototype),T}function o(F,T,Y){if(typeof F=="number"){if(typeof T=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return l(F)}return a(F,T,Y)}o.poolSize=8192;function a(F,T,Y){if(typeof F=="string")return c(F,T);if(ArrayBuffer.isView(F))return d(F);if(F==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof F);if(tt(F,ArrayBuffer)||F&&tt(F.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(tt(F,SharedArrayBuffer)||F&&tt(F.buffer,SharedArrayBuffer)))return h(F,T,Y);if(typeof F=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const ie=F.valueOf&&F.valueOf();if(ie!=null&&ie!==F)return o.from(ie,T,Y);const me=m(F);if(me)return me;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof F[Symbol.toPrimitive]=="function")return o.from(F[Symbol.toPrimitive]("string"),T,Y);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof F)}o.from=function(F,T,Y){return a(F,T,Y)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array);function s(F){if(typeof F!="number")throw new TypeError('"size" argument must be of type number');if(F<0)throw new RangeError('The value "'+F+'" is invalid for option "size"')}function A(F,T,Y){return s(F),F<=0?C(F):T!==void 0?typeof Y=="string"?C(F).fill(T,Y):C(F).fill(T):C(F)}o.alloc=function(F,T,Y){return A(F,T,Y)};function l(F){return s(F),C(F<0?0:f(F)|0)}o.allocUnsafe=function(F){return l(F)},o.allocUnsafeSlow=function(F){return l(F)};function c(F,T){if((typeof T!="string"||T==="")&&(T="utf8"),!o.isEncoding(T))throw new TypeError("Unknown encoding: "+T);const Y=p(F,T)|0;let ie=C(Y);const me=ie.write(F,T);return me!==Y&&(ie=ie.slice(0,me)),ie}function u(F){const T=F.length<0?0:f(F.length)|0,Y=C(T);for(let ie=0;ie=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+" bytes");return F|0}function b(F){return+F!=F&&(F=0),o.alloc(+F)}o.isBuffer=function(T){return T!=null&&T._isBuffer===!0&&T!==o.prototype},o.compare=function(T,Y){if(tt(T,Uint8Array)&&(T=o.from(T,T.offset,T.byteLength)),tt(Y,Uint8Array)&&(Y=o.from(Y,Y.offset,Y.byteLength)),!o.isBuffer(T)||!o.isBuffer(Y))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(T===Y)return 0;let ie=T.length,me=Y.length;for(let Ve=0,we=Math.min(ie,me);Veme.length?(o.isBuffer(we)||(we=o.from(we)),we.copy(me,Ve)):Uint8Array.prototype.set.call(me,we,Ve);else if(o.isBuffer(we))we.copy(me,Ve);else throw new TypeError('"list" argument must be an Array of Buffers');Ve+=we.length}return me};function p(F,T){if(o.isBuffer(F))return F.length;if(ArrayBuffer.isView(F)||tt(F,ArrayBuffer))return F.byteLength;if(typeof F!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof F);const Y=F.length,ie=arguments.length>2&&arguments[2]===!0;if(!ie&&Y===0)return 0;let me=!1;for(;;)switch(T){case"ascii":case"latin1":case"binary":return Y;case"utf8":case"utf-8":return De(F).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Y*2;case"hex":return Y>>>1;case"base64":return gt(F).length;default:if(me)return ie?-1:De(F).length;T=(""+T).toLowerCase(),me=!0}}o.byteLength=p;function y(F,T,Y){let ie=!1;if((T===void 0||T<0)&&(T=0),T>this.length||((Y===void 0||Y>this.length)&&(Y=this.length),Y<=0)||(Y>>>=0,T>>>=0,Y<=T))return"";for(F||(F="utf8");;)switch(F){case"hex":return J(this,T,Y);case"utf8":case"utf-8":return R(this,T,Y);case"ascii":return K(this,T,Y);case"latin1":case"binary":return D(this,T,Y);case"base64":return W(this,T,Y);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,T,Y);default:if(ie)throw new TypeError("Unknown encoding: "+F);F=(F+"").toLowerCase(),ie=!0}}o.prototype._isBuffer=!0;function Z(F,T,Y){const ie=F[T];F[T]=F[Y],F[Y]=ie}o.prototype.swap16=function(){const T=this.length;if(T%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let Y=0;YY&&(T+=" ... "),""},I&&(o.prototype[I]=o.prototype.inspect),o.prototype.compare=function(T,Y,ie,me,Ve){if(tt(T,Uint8Array)&&(T=o.from(T,T.offset,T.byteLength)),!o.isBuffer(T))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof T);if(Y===void 0&&(Y=0),ie===void 0&&(ie=T?T.length:0),me===void 0&&(me=0),Ve===void 0&&(Ve=this.length),Y<0||ie>T.length||me<0||Ve>this.length)throw new RangeError("out of range index");if(me>=Ve&&Y>=ie)return 0;if(me>=Ve)return-1;if(Y>=ie)return 1;if(Y>>>=0,ie>>>=0,me>>>=0,Ve>>>=0,this===T)return 0;let we=Ve-me,je=ie-Y;const at=Math.min(we,je),bt=this.slice(me,Ve),ct=T.slice(Y,ie);for(let Ht=0;Ht2147483647?Y=2147483647:Y<-2147483648&&(Y=-2147483648),Y=+Y,Xe(Y)&&(Y=me?0:F.length-1),Y<0&&(Y=F.length+Y),Y>=F.length){if(me)return-1;Y=F.length-1}else if(Y<0)if(me)Y=0;else return-1;if(typeof T=="string"&&(T=o.from(T,ie)),o.isBuffer(T))return T.length===0?-1:G(F,T,Y,ie,me);if(typeof T=="number")return T=T&255,typeof Uint8Array.prototype.indexOf=="function"?me?Uint8Array.prototype.indexOf.call(F,T,Y):Uint8Array.prototype.lastIndexOf.call(F,T,Y):G(F,[T],Y,ie,me);throw new TypeError("val must be string, number or Buffer")}function G(F,T,Y,ie,me){let Ve=1,we=F.length,je=T.length;if(ie!==void 0&&(ie=String(ie).toLowerCase(),ie==="ucs2"||ie==="ucs-2"||ie==="utf16le"||ie==="utf-16le")){if(F.length<2||T.length<2)return-1;Ve=2,we/=2,je/=2,Y/=2}function at(ct,Ht){return Ve===1?ct[Ht]:ct.readUInt16BE(Ht*Ve)}let bt;if(me){let ct=-1;for(bt=Y;btwe&&(Y=we-je),bt=Y;bt>=0;bt--){let ct=!0;for(let Ht=0;Htme&&(ie=me)):ie=me;const Ve=T.length;ie>Ve/2&&(ie=Ve/2);let we;for(we=0;we>>0,isFinite(ie)?(ie=ie>>>0,me===void 0&&(me="utf8")):(me=ie,ie=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const Ve=this.length-Y;if((ie===void 0||ie>Ve)&&(ie=Ve),T.length>0&&(ie<0||Y<0)||Y>this.length)throw new RangeError("Attempt to write outside buffer bounds");me||(me="utf8");let we=!1;for(;;)switch(me){case"hex":return v(this,T,Y,ie);case"utf8":case"utf-8":return w(this,T,Y,ie);case"ascii":case"latin1":case"binary":return V(this,T,Y,ie);case"base64":return S(this,T,Y,ie);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return X(this,T,Y,ie);default:if(we)throw new TypeError("Unknown encoding: "+me);me=(""+me).toLowerCase(),we=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function W(F,T,Y){return T===0&&Y===F.length?g.fromByteArray(F):g.fromByteArray(F.slice(T,Y))}function R(F,T,Y){Y=Math.min(F.length,Y);const ie=[];let me=T;for(;me239?4:Ve>223?3:Ve>191?2:1;if(me+je<=Y){let at,bt,ct,Ht;switch(je){case 1:Ve<128&&(we=Ve);break;case 2:at=F[me+1],(at&192)===128&&(Ht=(Ve&31)<<6|at&63,Ht>127&&(we=Ht));break;case 3:at=F[me+1],bt=F[me+2],(at&192)===128&&(bt&192)===128&&(Ht=(Ve&15)<<12|(at&63)<<6|bt&63,Ht>2047&&(Ht<55296||Ht>57343)&&(we=Ht));break;case 4:at=F[me+1],bt=F[me+2],ct=F[me+3],(at&192)===128&&(bt&192)===128&&(ct&192)===128&&(Ht=(Ve&15)<<18|(at&63)<<12|(bt&63)<<6|ct&63,Ht>65535&&Ht<1114112&&(we=Ht))}}we===null?(we=65533,je=1):we>65535&&(we-=65536,ie.push(we>>>10&1023|55296),we=56320|we&1023),ie.push(we),me+=je}return k(ie)}const H=4096;function k(F){const T=F.length;if(T<=H)return String.fromCharCode.apply(String,F);let Y="",ie=0;for(;ieie)&&(Y=ie);let me="";for(let Ve=T;Veie&&(T=ie),Y<0?(Y+=ie,Y<0&&(Y=0)):Y>ie&&(Y=ie),YY)throw new RangeError("Trying to access beyond buffer length")}o.prototype.readUintLE=o.prototype.readUIntLE=function(T,Y,ie){T=T>>>0,Y=Y>>>0,ie||te(T,Y,this.length);let me=this[T],Ve=1,we=0;for(;++we>>0,Y=Y>>>0,ie||te(T,Y,this.length);let me=this[T+--Y],Ve=1;for(;Y>0&&(Ve*=256);)me+=this[T+--Y]*Ve;return me},o.prototype.readUint8=o.prototype.readUInt8=function(T,Y){return T=T>>>0,Y||te(T,1,this.length),this[T]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(T,Y){return T=T>>>0,Y||te(T,2,this.length),this[T]|this[T+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(T,Y){return T=T>>>0,Y||te(T,2,this.length),this[T]<<8|this[T+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(T,Y){return T=T>>>0,Y||te(T,4,this.length),(this[T]|this[T+1]<<8|this[T+2]<<16)+this[T+3]*16777216},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(T,Y){return T=T>>>0,Y||te(T,4,this.length),this[T]*16777216+(this[T+1]<<16|this[T+2]<<8|this[T+3])},o.prototype.readBigUInt64LE=ye(function(T){T=T>>>0,We(T,"offset");const Y=this[T],ie=this[T+7];(Y===void 0||ie===void 0)&&Be(T,this.length-8);const me=Y+this[++T]*2**8+this[++T]*2**16+this[++T]*2**24,Ve=this[++T]+this[++T]*2**8+this[++T]*2**16+ie*2**24;return BigInt(me)+(BigInt(Ve)<>>0,We(T,"offset");const Y=this[T],ie=this[T+7];(Y===void 0||ie===void 0)&&Be(T,this.length-8);const me=Y*2**24+this[++T]*2**16+this[++T]*2**8+this[++T],Ve=this[++T]*2**24+this[++T]*2**16+this[++T]*2**8+ie;return(BigInt(me)<>>0,Y=Y>>>0,ie||te(T,Y,this.length);let me=this[T],Ve=1,we=0;for(;++we=Ve&&(me-=Math.pow(2,8*Y)),me},o.prototype.readIntBE=function(T,Y,ie){T=T>>>0,Y=Y>>>0,ie||te(T,Y,this.length);let me=Y,Ve=1,we=this[T+--me];for(;me>0&&(Ve*=256);)we+=this[T+--me]*Ve;return Ve*=128,we>=Ve&&(we-=Math.pow(2,8*Y)),we},o.prototype.readInt8=function(T,Y){return T=T>>>0,Y||te(T,1,this.length),this[T]&128?(255-this[T]+1)*-1:this[T]},o.prototype.readInt16LE=function(T,Y){T=T>>>0,Y||te(T,2,this.length);const ie=this[T]|this[T+1]<<8;return ie&32768?ie|4294901760:ie},o.prototype.readInt16BE=function(T,Y){T=T>>>0,Y||te(T,2,this.length);const ie=this[T+1]|this[T]<<8;return ie&32768?ie|4294901760:ie},o.prototype.readInt32LE=function(T,Y){return T=T>>>0,Y||te(T,4,this.length),this[T]|this[T+1]<<8|this[T+2]<<16|this[T+3]<<24},o.prototype.readInt32BE=function(T,Y){return T=T>>>0,Y||te(T,4,this.length),this[T]<<24|this[T+1]<<16|this[T+2]<<8|this[T+3]},o.prototype.readBigInt64LE=ye(function(T){T=T>>>0,We(T,"offset");const Y=this[T],ie=this[T+7];(Y===void 0||ie===void 0)&&Be(T,this.length-8);const me=this[T+4]+this[T+5]*2**8+this[T+6]*2**16+(ie<<24);return(BigInt(me)<>>0,We(T,"offset");const Y=this[T],ie=this[T+7];(Y===void 0||ie===void 0)&&Be(T,this.length-8);const me=(Y<<24)+this[++T]*2**16+this[++T]*2**8+this[++T];return(BigInt(me)<>>0,Y||te(T,4,this.length),i.read(this,T,!0,23,4)},o.prototype.readFloatBE=function(T,Y){return T=T>>>0,Y||te(T,4,this.length),i.read(this,T,!1,23,4)},o.prototype.readDoubleLE=function(T,Y){return T=T>>>0,Y||te(T,8,this.length),i.read(this,T,!0,52,8)},o.prototype.readDoubleBE=function(T,Y){return T=T>>>0,Y||te(T,8,this.length),i.read(this,T,!1,52,8)};function q(F,T,Y,ie,me,Ve){if(!o.isBuffer(F))throw new TypeError('"buffer" argument must be a Buffer instance');if(T>me||TF.length)throw new RangeError("Index out of range")}o.prototype.writeUintLE=o.prototype.writeUIntLE=function(T,Y,ie,me){if(T=+T,Y=Y>>>0,ie=ie>>>0,!me){const je=Math.pow(2,8*ie)-1;q(this,T,Y,ie,je,0)}let Ve=1,we=0;for(this[Y]=T&255;++we>>0,ie=ie>>>0,!me){const je=Math.pow(2,8*ie)-1;q(this,T,Y,ie,je,0)}let Ve=ie-1,we=1;for(this[Y+Ve]=T&255;--Ve>=0&&(we*=256);)this[Y+Ve]=T/we&255;return Y+ie},o.prototype.writeUint8=o.prototype.writeUInt8=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,1,255,0),this[Y]=T&255,Y+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,2,65535,0),this[Y]=T&255,this[Y+1]=T>>>8,Y+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,2,65535,0),this[Y]=T>>>8,this[Y+1]=T&255,Y+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,4,4294967295,0),this[Y+3]=T>>>24,this[Y+2]=T>>>16,this[Y+1]=T>>>8,this[Y]=T&255,Y+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,4,4294967295,0),this[Y]=T>>>24,this[Y+1]=T>>>16,this[Y+2]=T>>>8,this[Y+3]=T&255,Y+4};function $(F,T,Y,ie,me){ve(T,ie,me,F,Y,7);let Ve=Number(T&BigInt(4294967295));F[Y++]=Ve,Ve=Ve>>8,F[Y++]=Ve,Ve=Ve>>8,F[Y++]=Ve,Ve=Ve>>8,F[Y++]=Ve;let we=Number(T>>BigInt(32)&BigInt(4294967295));return F[Y++]=we,we=we>>8,F[Y++]=we,we=we>>8,F[Y++]=we,we=we>>8,F[Y++]=we,Y}function j(F,T,Y,ie,me){ve(T,ie,me,F,Y,7);let Ve=Number(T&BigInt(4294967295));F[Y+7]=Ve,Ve=Ve>>8,F[Y+6]=Ve,Ve=Ve>>8,F[Y+5]=Ve,Ve=Ve>>8,F[Y+4]=Ve;let we=Number(T>>BigInt(32)&BigInt(4294967295));return F[Y+3]=we,we=we>>8,F[Y+2]=we,we=we>>8,F[Y+1]=we,we=we>>8,F[Y]=we,Y+8}o.prototype.writeBigUInt64LE=ye(function(T,Y=0){return $(this,T,Y,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeBigUInt64BE=ye(function(T,Y=0){return j(this,T,Y,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeIntLE=function(T,Y,ie,me){if(T=+T,Y=Y>>>0,!me){const at=Math.pow(2,8*ie-1);q(this,T,Y,ie,at-1,-at)}let Ve=0,we=1,je=0;for(this[Y]=T&255;++Ve>0)-je&255;return Y+ie},o.prototype.writeIntBE=function(T,Y,ie,me){if(T=+T,Y=Y>>>0,!me){const at=Math.pow(2,8*ie-1);q(this,T,Y,ie,at-1,-at)}let Ve=ie-1,we=1,je=0;for(this[Y+Ve]=T&255;--Ve>=0&&(we*=256);)T<0&&je===0&&this[Y+Ve+1]!==0&&(je=1),this[Y+Ve]=(T/we>>0)-je&255;return Y+ie},o.prototype.writeInt8=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,1,127,-128),T<0&&(T=255+T+1),this[Y]=T&255,Y+1},o.prototype.writeInt16LE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,2,32767,-32768),this[Y]=T&255,this[Y+1]=T>>>8,Y+2},o.prototype.writeInt16BE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,2,32767,-32768),this[Y]=T>>>8,this[Y+1]=T&255,Y+2},o.prototype.writeInt32LE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,4,2147483647,-2147483648),this[Y]=T&255,this[Y+1]=T>>>8,this[Y+2]=T>>>16,this[Y+3]=T>>>24,Y+4},o.prototype.writeInt32BE=function(T,Y,ie){return T=+T,Y=Y>>>0,ie||q(this,T,Y,4,2147483647,-2147483648),T<0&&(T=4294967295+T+1),this[Y]=T>>>24,this[Y+1]=T>>>16,this[Y+2]=T>>>8,this[Y+3]=T&255,Y+4},o.prototype.writeBigInt64LE=ye(function(T,Y=0){return $(this,T,Y,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),o.prototype.writeBigInt64BE=ye(function(T,Y=0){return j(this,T,Y,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function ge(F,T,Y,ie,me,Ve){if(Y+ie>F.length)throw new RangeError("Index out of range");if(Y<0)throw new RangeError("Index out of range")}function Q(F,T,Y,ie,me){return T=+T,Y=Y>>>0,me||ge(F,T,Y,4),i.write(F,T,Y,ie,23,4),Y+4}o.prototype.writeFloatLE=function(T,Y,ie){return Q(this,T,Y,!0,ie)},o.prototype.writeFloatBE=function(T,Y,ie){return Q(this,T,Y,!1,ie)};function Ie(F,T,Y,ie,me){return T=+T,Y=Y>>>0,me||ge(F,T,Y,8),i.write(F,T,Y,ie,52,8),Y+8}o.prototype.writeDoubleLE=function(T,Y,ie){return Ie(this,T,Y,!0,ie)},o.prototype.writeDoubleBE=function(T,Y,ie){return Ie(this,T,Y,!1,ie)},o.prototype.copy=function(T,Y,ie,me){if(!o.isBuffer(T))throw new TypeError("argument should be a Buffer");if(ie||(ie=0),!me&&me!==0&&(me=this.length),Y>=T.length&&(Y=T.length),Y||(Y=0),me>0&&me=this.length)throw new RangeError("Index out of range");if(me<0)throw new RangeError("sourceEnd out of bounds");me>this.length&&(me=this.length),T.length-Y>>0,ie=ie===void 0?this.length:ie>>>0,T||(T=0);let Ve;if(typeof T=="number")for(Ve=Y;Ve2**32?me=be(String(Y)):typeof Y=="bigint"&&(me=String(Y),(Y>BigInt(2)**BigInt(32)||Y<-(BigInt(2)**BigInt(32)))&&(me=be(me)),me+="n"),ie+=` It must be ${T}. Received ${me}`,ie},RangeError);function be(F){let T="",Y=F.length;const ie=F[0]==="-"?1:0;for(;Y>=ie+4;Y-=3)T=`_${F.slice(Y-3,Y)}${T}`;return`${F.slice(0,Y)}${T}`}function pe(F,T,Y){We(T,"offset"),(F[T]===void 0||F[T+Y]===void 0)&&Be(T,F.length-(Y+1))}function ve(F,T,Y,ie,me,Ve){if(F>Y||F3?T===0||T===BigInt(0)?je=`>= 0${we} and < 2${we} ** ${(Ve+1)*8}${we}`:je=`>= -(2${we} ** ${(Ve+1)*8-1}${we}) and < 2 ** ${(Ve+1)*8-1}${we}`:je=`>= ${T}${we} and <= ${Y}${we}`,new he.ERR_OUT_OF_RANGE("value",je,F)}pe(ie,me,Ve)}function We(F,T){if(typeof F!="number")throw new he.ERR_INVALID_ARG_TYPE(T,"number",F)}function Be(F,T,Y){throw Math.floor(F)!==F?(We(F,Y),new he.ERR_OUT_OF_RANGE(Y||"offset","an integer",F)):T<0?new he.ERR_BUFFER_OUT_OF_BOUNDS:new he.ERR_OUT_OF_RANGE(Y||"offset",`>= ${Y?1:0} and <= ${T}`,F)}const Je=/[^+/0-9A-Za-z-_]/g;function Pe(F){if(F=F.split("=")[0],F=F.trim().replace(Je,""),F.length<2)return"";for(;F.length%4!==0;)F=F+"=";return F}function De(F,T){T=T||1/0;let Y;const ie=F.length;let me=null;const Ve=[];for(let we=0;we55295&&Y<57344){if(!me){if(Y>56319){(T-=3)>-1&&Ve.push(239,191,189);continue}else if(we+1===ie){(T-=3)>-1&&Ve.push(239,191,189);continue}me=Y;continue}if(Y<56320){(T-=3)>-1&&Ve.push(239,191,189),me=Y;continue}Y=(me-55296<<10|Y-56320)+65536}else me&&(T-=3)>-1&&Ve.push(239,191,189);if(me=null,Y<128){if((T-=1)<0)break;Ve.push(Y)}else if(Y<2048){if((T-=2)<0)break;Ve.push(Y>>6|192,Y&63|128)}else if(Y<65536){if((T-=3)<0)break;Ve.push(Y>>12|224,Y>>6&63|128,Y&63|128)}else if(Y<1114112){if((T-=4)<0)break;Ve.push(Y>>18|240,Y>>12&63|128,Y>>6&63|128,Y&63|128)}else throw new Error("Invalid code point")}return Ve}function Qe(F){const T=[];for(let Y=0;Y>8,me=Y%256,Ve.push(me),Ve.push(ie);return Ve}function gt(F){return g.toByteArray(Pe(F))}function lt(F,T,Y,ie){let me;for(me=0;me=T.length||me>=F.length);++me)T[me+Y]=F[me];return me}function tt(F,T){return F instanceof T||F!=null&&F.constructor!=null&&F.constructor.name!=null&&F.constructor.name===T.name}function Xe(F){return F!==F}const ae=function(){const F="0123456789abcdef",T=new Array(256);for(let Y=0;Y<16;++Y){const ie=Y*16;for(let me=0;me<16;++me)T[ie+me]=F[Y]+F[me]}return T}();function ye(F){return typeof BigInt>"u"?He:F}function He(){throw new Error("BigInt not supported")}})(gh);let Kbe=class{async getBufferFromResponse(g){if(typeof g.buffer=="function")return g.buffer();if(typeof g.arrayBuffer=="function"){const i=await g.arrayBuffer();return gh.Buffer.from(i)}else throw new TypeError("invalid HTTP response object, has no buffer method, and no arrayBuffer method")}constructor(g,i={}){this.baseOverrides={},this.url=g;const I=i.fetch||globalThis.fetch.bind(globalThis);if(!I)throw new TypeError("no fetch function supplied, and none found in global environment");i.overrides&&(this.baseOverrides=i.overrides),this.fetchImplementation=I}async fetch(g,i){let I;try{I=await this.fetchImplementation(g,i)}catch(n){if(`${n}`.includes("Failed to fetch"))console.warn(`generic-filehandle: refetching ${g} to attempt to work around chrome CORS header caching bug`),I=await this.fetchImplementation(g,{...i,cache:"reload"});else throw n}return I}async read(g,i=0,I,n=0,r={}){const{headers:C={},signal:o,overrides:a={}}=r;I<1/0?C.range=`bytes=${n}-${n+I}`:I===1/0&&n!==0&&(C.range=`bytes=${n}-`);const s={...this.baseOverrides,...a,headers:{...C,...a.headers,...this.baseOverrides.headers},method:"GET",redirect:"follow",mode:"cors",signal:o},A=await this.fetch(this.url,s);if(!A.ok)throw new Error(`HTTP ${A.status} ${A.statusText} ${this.url}`);if(A.status===200&&n===0||A.status===206){const l=await this.getBufferFromResponse(A),c=l.copy(g,i,0,Math.min(I,l.length)),u=A.headers.get("content-range"),d=/\/(\d+)$/.exec(u||"");return d&&d[1]&&(this._stat={size:parseInt(d[1],10)}),{bytesRead:c,buffer:g}}throw A.status===200?new Error("${this.url} fetch returned status 200, expected 206"):new Error(`HTTP ${A.status} fetching ${this.url}`)}async readFile(g={}){let i,I;typeof g=="string"?(i=g,I={}):(i=g.encoding,I=g,delete I.encoding);const{headers:n={},signal:r,overrides:C={}}=I,o={headers:n,method:"GET",redirect:"follow",mode:"cors",signal:r,...this.baseOverrides,...C},a=await this.fetch(this.url,o);if(!a)throw new Error("generic-filehandle failed to fetch");if(a.status!==200)throw Object.assign(new Error(`HTTP ${a.status} fetching ${this.url}`),{status:a.status});if(i==="utf8")return a.text();if(i)throw new Error(`unsupported encoding: ${i}`);return this.getBufferFromResponse(a)}async stat(){if(!this._stat){const g=gh.Buffer.allocUnsafe(10);if(await this.read(g,0,10,0),!this._stat)throw new Error(`unable to determine size of file at ${this.url}`)}return this._stat}async close(){}};var j4e=Object.defineProperty,$4e=(e,g,i)=>g in e?j4e(e,g,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[g]=i,q4e=(e,g,i)=>($4e(e,typeof g!="symbol"?g+"":g,i),i);const x9=6,eje=130,tje=600,Qte=600,x1=10,Fbe=.3,gje=0,ije="gray",pt=e=>{let g=qd(e);return g||(g=qd(ije)),gfe([g.rgb().r/255,g.rgb().g/255,g.rgb().b/255])},gn=0;function $g(e,g,i,I,n){const r=Math.max(Math.min(g,e),0),C=n??gn,o=(I-i)/360*Math.PI*2-C*2;return-(i/360*Math.PI*2+r/g*o)-Math.PI/2-C}function Mt(e,g,i,I,n,r,C){return{x:I+i*Math.cos($g(e,g,r,C)),y:n+i*Math.sin($g(e,g,r,C))}}function cc(e,g,i,I){return i<=e?Math.atan((g-I)/(e-i)):Math.atan((g-I)/(e-i))-Math.PI}function Ije(e,g,i,I){return(Math.atan2(-(g-I),e-i)/Math.PI*180+270)%360}function nje(e,g,i){var I,n,r,C,o;const a=i.spec();if(!a.width||!a.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const s=i.data(),[A,l]=e.dimensions,c=i.getChannelScale("x").invert(A)-i.getChannelScale("x").invert(0),u=a.layout==="circular",d=(I=a.innerRadius)!=null?I:220,h=(n=a.outerRadius)!=null?n:300,m=(r=a.startAngle)!=null?r:0,f=(C=a.endAngle)!=null?C:360,b=h-d,p=A/2,y=l/2,Z=(o=i.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],B=l/Z.length;Z.forEach(G=>{const v=i.encodedValue("row",G);s.filter(w=>!bi(w,a.row)||bi(w,a.row)===G).forEach(w=>{const V=i.encodedPIXIProperty("x-center",w),S=i.encodedPIXIProperty("y-center",w),X=i.encodedPIXIProperty("color",w),W=i.encodedPIXIProperty("p-size",w),R=i.encodedPIXIProperty("strokeWidth",w),H=i.encodedPIXIProperty("stroke",w),k=i.encodedPIXIProperty("opacity",w),K=i.markVisibility(w,{width:W,zoomLevel:c}),D=Math.min(K,k);if(!(W<=.1||D===0||V+W<0||V-W>A))if(g.lineStyle(R,pt(H),D,1),u){const J=h-(v+B-S)/l*b,P=Mt(V,A,J,p,y,m,f);g.beginFill(pt(X),D),g.drawCircle(P.x,P.y,W),i.getMouseEventModel().addPointBasedEvent(w,[P.x,P.y,W])}else g.beginFill(pt(X),D),g.drawCircle(V,v+B-S,W),i.getMouseEventModel().addPointBasedEvent(w,[V,v+B-S,W])})})}function rje(e,g,i){const I=e.visualPropertyByChannel("xe",i),n=e.visualPropertyByChannel("x",i),r=e.visualPropertyByChannel("size",i);switch(g){case"x-center":return I?(I+n)/2:n;case"y-center":{const C=e.visualPropertyByChannel("ye",i),o=e.visualPropertyByChannel("y",i);return C?(C+o)/2:o}case"p-size":return I&&e.spec().stretch?(I-n)/2:r;default:return}}function Cje(e,g,i,I){var n,r,C,o,a,s;const A=g.spec();if(!A.width||!A.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const l=g.data(),c=A.layout==="circular",u=(n=A.innerRadius)!=null?n:220,d=(r=A.outerRadius)!=null?r:300,h=(C=A.startAngle)!=null?C:0,m=(o=A.endAngle)!=null?o:360,f=d-u,b=i/2,p=I/2,y=(a=g.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],Z=I/y.length,B=(s=g.getChannelDomainArray("color"))!=null?s:["___SINGLE_COLOR___"];y.forEach(G=>{const v=g.encodedValue("row",G);B.forEach(w=>{l.filter(V=>(!bi(V,A.row)||bi(V,A.row)===G)&&(!bi(V,A.color)||bi(V,A.color)===w)).sort((V,S)=>bi(V,A.x)-bi(S,A.x)).forEach((V,S)=>{const X=g.encodedPIXIProperty("x",V),W=g.encodedPIXIProperty("y",V),R=g.encodedPIXIProperty("size",V),H=g.encodedPIXIProperty("color",V),k=g.encodedPIXIProperty("opacity",V);if(e.lineStyle(R,pt(H),k,.5),c){const K=d-(v+Z-W)/I*f,D=Mt(X,i,K,b,p,h,m);S===0?e.moveTo(D.x,D.y):e.lineTo(D.x,D.y),g.getMouseEventModel().addPointBasedEvent(V,[D.x,D.y,1])}else S===0?e.moveTo(X,v+Z-W):e.lineTo(X,v+Z-W),g.getMouseEventModel().addPointBasedEvent(V,[X,v+Z-W,1])})})})}function oje(e,g,i){var I,n,r,C,o,a,s;const A=i.spec();if(!A.width||!A.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const l=i.data(),[c,u]=e.dimensions,d=e.tilesetInfo.tile_size,h=i.getChannelScale("x").invert(c)-i.getChannelScale("x").invert(0),m=A.layout==="circular",f=(I=A.innerRadius)!=null?I:220,b=(n=A.outerRadius)!=null?n:300,p=(r=A.startAngle)!=null?r:0,y=(C=A.endAngle)!=null?C:360,Z=b-f,B=c/2,G=u/2,v=i.getChannelScale("x");let w;if(g.tileData.tilePos){const{tileX:k,tileWidth:K}=e.getTilePosAndDimensions(g.tileData.zoomLevel,g.tileData.tilePos,d);w=v(k+K/d)-v(k)}const V=(o=i.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],S=u/V.length,X=!ut(A.row)||ut(A.row)&&typeof A.row.clip>"u"||A.row.clip,W=ut(A.y)?(a=A.y)==null?void 0:a.baseline:void 0,R=(s=i.encodedValue("y",W))!=null?s:0,H=g.graphics;if(zT(A)){const k=i.getGenomicChannel();if(!k||!k.field){console.warn("Genomic field is not provided in the specification");return}const K=XT(l,J=>J[k.field]);[...K.keys()].forEach(J=>{var P;let te=0;(P=K.get(J))==null||P.forEach(q=>{const $=i.encodedPIXIProperty("color",q),j=i.encodedPIXIProperty("stroke",q),ge=i.encodedPIXIProperty("strokeWidth",q),Q=i.encodedPIXIProperty("opacity",q),Ie=i.encodedPIXIProperty("y",q),he=i.encodedPIXIProperty("width",q,{tileUnitWidth:w}),ne=i.encodedPIXIProperty("x-start",q,{markWidth:he}),be=ne+he,pe=i.markVisibility(q,{width:he,zoomLevel:h}),ve=Math.min(pe,Q);if(ve===0||he<=0||Ie<=0)return;H.lineStyle(ge,pt(j),ve,0);let We=[];if(m){const Be=b-(S-te)/u*Z,Je=b-(S-Ie-te)/u*Z,Pe=Mt(ne,c,Je,B,G,p,y),De=$g(ne,c,p,y),Qe=$g(ne+he,c,p,y);H.beginFill(pt($),$==="none"?0:ve),H.moveTo(Pe.x,Pe.y),H.arc(B,G,Je,De,Qe,!0),H.arc(B,G,Be,Qe,De,!1),We=Array.from(H.currentPath.points),H.closePath()}else{H.beginFill(pt($),$==="none"?0:ve),H.drawRect(ne,S-Ie-te,he,Ie);const Be=S-Ie-te,Je=Be+Ie;We=[ne,Be,ne,Je,be,Je,be,Be]}i.getMouseEventModel().addPolygonBasedEvent(q,We),te+=Ie})})}else V.forEach(k=>{const K=i.encodedValue("row",k);l.filter(D=>{const J=bi(D,A.row);return!J||J===k}).forEach(D=>{const J=i.encodedPIXIProperty("color",D),P=i.encodedPIXIProperty("stroke",D),te=i.encodedPIXIProperty("strokeWidth",D),q=i.encodedPIXIProperty("opacity");let $=i.encodedPIXIProperty("y",D),j=i.encodedPIXIProperty("ye",D);typeof j<"u"&&$>j&&([$,j]=[j,$]);const ge=i.encodedPIXIProperty("width",D,{tileUnitWidth:w}),Q=i.encodedPIXIProperty("x-start",D,{markWidth:ge}),Ie=Q+ge;let he;typeof j>"u"?(he=K+S-R-$,j=K+S-R,(ut(A.y)&&A.y.flip||A.flipY)&&(j=he,he=K)):(he=K+S-j,j=K+S-$),X&&(he=Math.max(K,he),he=Math.min(he,K+S),j=Math.max(K,j),j=Math.min(j,K+S));const ne=i.markVisibility(D,{width:ge,zoomLevel:h}),be=Math.min(ne,q);if(be===0||ge===0||j-he===0)return;H.lineStyle(te,pt(P),be,0);let pe=[];if(m){const ve=b-he/u*Z,We=b-j/u*Z,Be=Mt(Q,c,We,B,G,p,y),Je=$g(Q,c,p,y),Pe=$g(Q+ge,c,p,y);H.beginFill(pt(J),J==="none"?0:be),H.moveTo(Be.x,Be.y),H.arc(B,G,We,Je,Pe,!0),H.arc(B,G,ve,Pe,Je,!1),pe=Array.from(H.currentPath.points),H.closePath()}else H.beginFill(pt(J),J==="none"?0:be),H.drawRect(Q,he,ge,j-he),pe=[Q,he,Q,j,Ie,j,Ie,he];i.getMouseEventModel().addPolygonBasedEvent(D,pe)})})}function aje(e,g,i,I){const n=e.visualPropertyByChannel("x",i),r=e.visualPropertyByChannel("xe",i),C=e.visualPropertyByChannel("size",i);switch(g){case"width":return C??(r?r-n:I==null?void 0:I.tileUnitWidth);case"x-start":return I!=null&&I.markWidth?r?(n+r-(I==null?void 0:I.markWidth))/2:n-(I==null?void 0:I.markWidth)/2:void 0;default:return}}function Aje(e,g,i,I){var n,r,C,o,a,s;const A=I.spec(),l=I.data(),[c,u]=g.dimensions,d=A.layout==="circular",h=(n=A.innerRadius)!=null?n:220,m=(r=A.outerRadius)!=null?r:300,f=(C=A.startAngle)!=null?C:0,b=(o=A.endAngle)!=null?o:360,p=m-h,y=c/2,Z=u/2,B=g._xScale,G=(a=I.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],v=u/G.length,w=(s=I.getChannelDomainArray("color"))!=null?s:["___SINGLE_COLOR___"],V=I.encodedPIXIProperty("opacity"),S=I.encodedPIXIProperty("strokeWidth"),X=I.encodedPIXIProperty("stroke"),W=i.graphics;if(zT(A)){const R=I.getGenomicChannel();if(!R||!R.field){console.warn("Genomic field is not provided in the specification");return}const H=XT(l,D=>D[R.field]),k=[...H.keys()];W.lineStyle(S,pt(X),V,1);const K={};w.forEach(D=>{const J=[],P=[];k.forEach((q,$,j)=>{var ge,Q;(Q=(ge=H.get(q))==null?void 0:ge.filter(Ie=>bi(Ie,A.color)===D))==null||Q.forEach(Ie=>{const he=+q,ne=B(he),be=PG([I.encodedPIXIProperty("y",Ie),0]);typeof K[q]>"u"&&(K[q]=0);const pe=v-be-K[q],ve=v-K[q];if(d){if($===0){const De=m-v/u*p,Qe=Mt(ne,c,De,y,Z,f,b);J.push([Qe.x,Qe.y]),P.push([Qe.x,Qe.y])}const We=m-pe/u*p,Be=Mt(ne,c,We,y,Z,f,b);J.push([Be.x,Be.y]);const Je=m-ve/u*p,Pe=Mt(ne,c,Je,y,Z,f,b);if(P.push([Pe.x,Pe.y]),$===j.length-1){const De=m-v/u*p,Qe=Mt(ne,c,De,y,Z,f,b);J.push([Qe.x,Qe.y]),P.push([Qe.x,Qe.y])}I.getMouseEventModel().addPointBasedEvent(Ie,[Pe.x,Pe.y,1])}else $===0&&(J.push([ne,v]),P.push([ne,v])),J.push([ne,pe]),P.push([ne,ve]),$===j.length-1&&(J.push([ne,v]),P.push([ne,v])),I.getMouseEventModel().addPointBasedEvent(Ie,[ne,pe,1]);K[q]+=be})});const te=I.encodedValue("color",D);W.beginFill(pt(te),V),W.drawPolygon([...J.reduce((q,$)=>q.concat($)),...P.reverse().reduce((q,$)=>q.concat($))]),W.endFill()})}else G.forEach(R=>{const H=I.encodedValue("row",R);W.lineStyle(S,pt(X),V,0),w.forEach(k=>{const K=[],D=[],J=m-(H+v)/u*p;let P=0;l.filter(q=>(typeof bi(q,A.row)>"u"||bi(q,A.row)===R)&&(typeof bi(q,A.color)>"u"||bi(q,A.color)===k)).sort((q,$)=>I.encodedPIXIProperty("x",q)-I.encodedPIXIProperty("x",$)).forEach((q,$,j)=>{const ge=F1([PG([I.encodedPIXIProperty("y",q),0]),v]),Q=I.encodedPIXIProperty("x",q);if(d){const Ie=Mt(Q,c,J,y,Z,f,b);K.push([Ie.x,Ie.y]),$===0&&D.push(Ie.x,Ie.y);const he=m-(H+v-ge)/u*p,ne=Mt(Q,c,he,y,Z,f,b);if(D.push(ne.x,ne.y),$===j.length-1){const be=m-(H+v)/u*p,pe=Mt(Q,c,be,y,Z,f,b);D.push(pe.x,pe.y)}I.getMouseEventModel().addPointBasedEvent(q,[ne.x,ne.y,1])}else $===0&&(D.push(Q,H+v),P=Q),D.push(Q,H+v-ge),$===j.length-1&&(D.push(Q,H+v),D.push(P,H+v)),I.getMouseEventModel().addPointBasedEvent(q,[Q,H+v-ge,1])}),d&&K.length!==0&&D.push(...K.reverse().reduce((q,$)=>q.concat($)));const te=I.encodedValue("color",k);W.beginFill(pt(te),V),W.drawPolygon(D),W.endFill()})})}function sje(e,g,i,I){var n,r,C,o,a,s;const A=I.spec(),l=I.data(),[c,u]=g.dimensions,d=A.layout==="circular",h=(n=A.innerRadius)!=null?n:220,m=(r=A.outerRadius)!=null?r:300,f=(C=A.startAngle)!=null?C:0,b=(o=A.endAngle)!=null?o:360,p=m-h,y=c/2,Z=u/2,B=g._xScale;let G;if(i.tileData.tilePos){const R=g.tilesetInfo.tile_size,{tileX:H,tileWidth:k}=g.getTilePosAndDimensions(i.tileData.zoomLevel,i.tileData.tilePos,R);G=B(H+k/R)-B(H)}const v=(a=I.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],w=u/v.length,V=ut(A.row)&&A.row.padding?A.row.padding:0,S=(s=I.getChannelDomainArray("y"))!=null?s:["___SINGLE_Y_POSITION___"],X=w/S.length-V*2,W=i.graphics;l.forEach(R=>{var H;const k=I.encodedPIXIProperty("row",R)+V,K=I.encodedPIXIProperty("x",R),D=I.encodedPIXIProperty("color",R),J=I.encodedPIXIProperty("stroke",R),P=I.encodedPIXIProperty("strokeWidth",R),te=I.encodedPIXIProperty("opacity",R),q=I.encodedPIXIProperty("width",R,{markWidth:G}),$=I.encodedPIXIProperty("height",R,{markHeight:X}),j=I.encodedPIXIProperty("y",R),ge=I.markVisibility(R,{width:q,zoomLevel:g._xScale.invert(c)-g._xScale.invert(0)}),Q=Math.min(ge,te);if(Q===0||$===0||q<=1e-4)return;const[Ie,he,ne,be]=[K,K+q,k+w-j-$/2,k+w-j+$/2],pe=(H=I.visualPropertyByChannel("size",R))!=null?H:void 0;W.lineStyle(P,pt(J),Q,.5);let ve=[];if(d){if(he<0||c{const S=g.encodedValue("row",V);c.filter(X=>!bi(X,l.row)||bi(X,l.row)===V).forEach(X=>{var W,R,H;const k=g.encodedPIXIProperty("x",X),K=g.encodedPIXIProperty("xe",X),D=(W=g.encodedPIXIProperty("size",X))!=null?W:K===void 0?w:K-k,J=g.encodedPIXIProperty("y",X),P=g.encodedPIXIProperty("strokeWidth",X),te=g.encodedPIXIProperty("stroke",X),q=g.encodedPIXIProperty("color",X),$=g.encodedPIXIProperty("opacity",X);let j=[];if(d){let ge=k||K-D,Q=K||k+D,Ie=(ge+Q)/2;const he=m-(S+G-J)/I*p,ne=he-w/2,be=he+w/2;if(((R=l.style)==null?void 0:R.align)==="right"&&!K&&(ge-=D,Q-=D,Ie-=D),l.mark==="triangleLeft"){const We=Mt(Q,i,ne,y,Z,f,b),Be=Mt(ge,i,he,y,Z,f,b),Je=Mt(Q,i,be,y,Z,f,b),Pe=Mt(Q,i,ne,y,Z,f,b);j=[We.x,We.y,Be.x,Be.y,Je.x,Je.y,Pe.x,Pe.y]}else if(l.mark==="triangleRight"){const We=Mt(ge,i,ne,y,Z,f,b),Be=Mt(Q,i,he,y,Z,f,b),Je=Mt(ge,i,be,y,Z,f,b),Pe=Mt(ge,i,ne,y,Z,f,b);j=[We.x,We.y,Be.x,Be.y,Je.x,Je.y,Pe.x,Pe.y]}else if(l.mark==="triangleBottom"){ge=Ie-D/2,Q=Ie+D/2;const We=Mt(ge,i,be,y,Z,f,b),Be=Mt(Q,i,be,y,Z,f,b),Je=Mt(Ie,i,ne,y,Z,f,b),Pe=Mt(ge,i,be,y,Z,f,b);j=[We.x,We.y,Be.x,Be.y,Je.x,Je.y,Pe.x,Pe.y]}const pe=g.markVisibility(X,{width:Q-ge,zoomLevel:u}),ve=Math.min(pe,$);e.lineStyle(P,pt(te),Q-ge>2?ve:0,0),e.beginFill(pt(q),ve),e.drawPolygon(j),e.endFill()}else{let ge=k||K-D,Q=K||k+D,Ie=ge+(Q-ge)/2;const he=S+G-J,ne=S+G-J-w/2,be=S+G-J+w/2;((H=l.style)==null?void 0:H.align)==="right"&&!K&&(ge-=D,Q-=D,Ie-=D),j={triangleLeft:[Q,ne,ge,he,Q,be,Q,ne],triangleRight:[ge,ne,Q,he,ge,be,ge,ne],triangleBottom:[ge,ne,Q,ne,Ie,be,ge,ne]}[l.mark];const pe=g.markVisibility(X,{width:Q-ge,zoomLevel:u}),ve=Math.min(pe,$);e.lineStyle(P,pt(te),Q-ge>2?ve:0,.5),e.beginFill(pt(q),ve),e.drawPolygon(j),e.endFill()}g.getMouseEventModel().addPolygonBasedEvent(X,j)})})}const Wa={fontSize:"12px",fontFamily:"sans-serif",fontWeight:"normal",fill:"black",background:"white",lineJoin:"round",stroke:"#ffffff",strokeThickness:0};function uje(e,g,i,I){var n,r,C,o,a,s,A,l,c,u;const d=I.spec(),h=I.data(),[m,f]=g.dimensions,b=d.layout==="circular",p=(n=d.innerRadius)!=null?n:220,y=(r=d.outerRadius)!=null?r:300,Z=(C=d.startAngle)!=null?C:0,B=(o=d.endAngle)!=null?o:360,G=y-p,v=m/2,w=f/2,V=(a=I.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],S=f/V.length,X=(A=(s=d.style)==null?void 0:s.dx)!=null?A:0,W=(c=(l=d.style)==null?void 0:l.dy)!=null?c:0,R=(u=d.style)!=null&&u.textAnchor?d.style.textAnchor:"middle";if(zT(d)){if(b)return;const H=i.graphics,k=I.getGenomicChannel();if(!k||!k.field){console.warn("Genomic field is not provided in the specification");return}const K=XT(h,J=>J[k.field]);[...K.keys()].forEach(J=>{var P;let te=0;(P=K.get(J))==null||P.forEach(q=>{var $,j,ge,Q,Ie,he,ne,be;const pe=I.encodedPIXIProperty("text",q),ve=I.encodedPIXIProperty("color",q),We=I.encodedPIXIProperty("x",q)+X,Be=I.encodedPIXIProperty("xe",q)+X,Je=I.encodedPIXIProperty("x-center",q)+X,Pe=I.encodedPIXIProperty("y",q)+W,De=I.encodedPIXIProperty("size",q),Qe=I.encodedPIXIProperty("stroke",q),_e=I.encodedPIXIProperty("strokeWidth",q),gt=I.encodedPIXIProperty("opacity",q);if(Je<0||Je>m||g.textsBeingUsed>1e3)return;const lt={...Wa,fontSize:De??(($=d.style)!=null&&$.textFontSize?`${(j=d.style)==null?void 0:j.textFontSize}px`:Wa.fontSize),stroke:(Q=Qe??((ge=d.style)==null?void 0:ge.textStroke))!=null?Q:Wa.stroke,strokeThickness:(he=_e??((Ie=d.style)==null?void 0:Ie.textStrokeWidth))!=null?he:Wa.strokeThickness,fontWeight:(be=(ne=d.style)==null?void 0:ne.textFontWeight)!=null?be:Wa.fontWeight},tt=new e.libraries.PIXI.TextStyle(lt);let Xe;g.textGraphics.length>g.textsBeingUsed?(Xe=g.textGraphics[g.textsBeingUsed],Xe.style.fill=ve,Xe.visible=!0,Xe.text=pe,Xe.alpha=1):(Xe=new e.libraries.PIXI.Text(pe,{...lt,fill:ve}),g.textGraphics.push(Xe));const ae=e.libraries.PIXI.TextMetrics.measureText(pe,tt);g.textsBeingUsed++;const ye=I.markVisibility(q,{...ae,zoomLevel:g._xScale.invert(m)-g._xScale.invert(0)}),He=Math.min(ye,gt);if(!pe||He===0){g.textsBeingUsed--,Xe.visible=!1;return}Xe.alpha=He,Xe.resolution=8,Xe.updateText(),Xe.texture.baseTexture.scaleMode=e.libraries.PIXI.SCALE_MODES.LINEAR;const F=new e.libraries.PIXI.Sprite(Xe.texture);F.x=We,F.y=S-Pe-te,F.width=Be-We,F.height=Pe,H.addChild(F),te+=Pe})})}else V.forEach(H=>{const k=i.graphics,K=I.encodedValue("row",H);h.filter(D=>!bi(D,d.row)||bi(D,d.row)===H).forEach(D=>{var J,P,te,q,$,j,ge,Q;const Ie=I.encodedPIXIProperty("text",D),he=I.encodedPIXIProperty("color",D),ne=I.encodedPIXIProperty("x-center",D)+X,be=I.encodedPIXIProperty("y",D)+W,pe=I.encodedPIXIProperty("size",D),ve=I.encodedPIXIProperty("stroke",D),We=I.encodedPIXIProperty("strokeWidth",D),Be=I.encodedPIXIProperty("opacity",D);if(ne<0||ne>m||g.textsBeingUsed>1e3)return;const Je={...Wa,fontSize:pe??((J=d.style)!=null&&J.textFontSize?`${(P=d.style)==null?void 0:P.textFontSize}px`:Wa.fontSize),stroke:(q=ve??((te=d.style)==null?void 0:te.textStroke))!=null?q:Wa.stroke,strokeThickness:(j=We??(($=d.style)==null?void 0:$.textStrokeWidth))!=null?j:Wa.strokeThickness,fontWeight:(Q=(ge=d.style)==null?void 0:ge.textFontWeight)!=null?Q:Wa.fontWeight},Pe=new e.libraries.PIXI.TextStyle(Je);let De;g.textGraphics.length>g.textsBeingUsed?(De=g.textGraphics[g.textsBeingUsed],De.style.fill=he,De.visible=!0,De.text=Ie,De.alpha=1):(De=new e.libraries.PIXI.Text(Ie,{...Je,fill:he}),g.textGraphics.push(De));const Qe=e.libraries.PIXI.TextMetrics.measureText(Ie,Pe);g.textsBeingUsed++;const _e=I.markVisibility(D,{...Qe,zoomLevel:g._xScale.invert(m)-g._xScale.invert(0)}),gt=Math.min(_e,Be);if(!Ie||gt===0){g.textsBeingUsed--,De.visible=!1;return}De.alpha=gt,De.anchor.y=.5,De.anchor.x=R==="middle"?.5:R==="start"?0:1;let lt=[];if(b){const tt=y-(K+S-be)/f*G,Xe=Mt(ne,m,tt,v,w,Z,B);De.x=Xe.x,De.y=Xe.y,De.resolution=4;const ae=Qe.width/(2*tt*Math.PI)*m;let[ye,He]=[ne-ae/2,ne+ae/2];if(ye<0){const me=-ye;ye=0,He+=me}else if(He>m){const me=He-m;He=m,ye-=me}const F=[],T=[],Y=[];for(let me=He;me>=ye;me-=ae/10){const Ve=Mt(me,m,tt,v,w,Z,B);F.push(new e.libraries.PIXI.Point(Ve.x,Ve.y));const we=Mt(me,m,tt+Qe.height/2,v,w,Z,B),je=Mt(me,m,tt-Qe.height/2,v,w,Z,B);T.push(we.x,we.y),me===He&&Y.push(we.y,we.x),Y.push(je.y,je.x)}De.updateText();const ie=new e.libraries.PIXI.SimpleRope(De.texture,F);ie.alpha=gt,k.addChild(ie),Y.reverse(),lt=T.concat(Y)}else{De.position.x=ne,De.position.y=K+S-be,k.addChild(De);const{height:tt,width:Xe}=Qe,ae=De.position.y-tt/2,ye=ae+tt;let He=0,F=0;R==="start"?(He=ne,F=ne+Xe):R==="middle"?(He=ne-Xe/2,F=ne+Xe/2):(He=ne-Xe,F=ne),lt=[He,ae,He,ye,F,ye,F,ae]}I.getMouseEventModel().addPolygonBasedEvent(D,lt)})})}function dje(e,g,i,I){var n,r,C,o,a,s,A,l;const c=I.spec(),u=I.data(),[d,h]=g.dimensions,m=c.layout==="circular",f=(n=c.innerRadius)!=null?n:220,b=(r=c.outerRadius)!=null?r:300,p=(C=c.startAngle)!=null?C:0,y=(o=c.endAngle)!=null?o:360,Z=b-f,B=d/2,G=h/2,v=(a=I.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"],w=h/v.length,V=(s=c.style)==null?void 0:s.dashed,S=(A=c.style)==null?void 0:A.linePattern,X=(l=c.style)==null?void 0:l.curve,W=i.graphics;v.forEach(R=>{const H=I.encodedValue("row",R);u.filter(k=>!bi(k,c.row)||bi(k,c.row)===R).forEach(k=>{const K=I.encodedPIXIProperty("x",k),D=I.encodedPIXIProperty("xe",k),J=I.encodedPIXIProperty("y",k),P=I.encodedPIXIProperty("color",k),te=I.encodedPIXIProperty("strokeWidth",k),q=I.encodedPIXIProperty("opacity",k),$=I.markVisibility(k,{width:D-K,zoomLevel:g._xScale.invert(d)-g._xScale.invert(0)}),j=Math.min($,q);if(W.lineStyle(te,pt(P),j,.5),!D&&(!c.y||!("field"in c.y))){if(m)return;if(V){const[ge,Q]=V;let Ie=0;do W.moveTo(K,Ie),W.lineTo(K,Ie+ge),Ie+=ge+Q;while(Ie{const H=i.encodedValue("row",R);d.filter(k=>!bi(k,u.row)||bi(k,u.row)===R).forEach(k=>{var K,D,J,P,te;let q=i.encodedPIXIProperty("x",k),$=i.encodedPIXIProperty("xe",k),j=i.encodedPIXIProperty("x1",k),ge=i.encodedPIXIProperty("x1e",k);const Q=i.encodedPIXIProperty("y",k),Ie=i.encodedPIXIProperty("ye",k),he=i.encodedPIXIProperty("stroke",k),ne=i.encodedPIXIProperty("strokeWidth",k),be=i.encodedPIXIProperty("color",k),pe=i.encodedPIXIProperty("opacity",k);typeof $<"u"&&([q,$]=[q,$].sort((Pe,De)=>Pe-De)),typeof j<"u"&&typeof ge<"u"&&([j,ge]=[j,ge].sort((Pe,De)=>Pe-De));const ve=typeof $<"u"&&typeof j<"u"&&typeof ge<"u"&&Math.abs(q-$)>.1&&Math.abs(j-ge)>.1;if(!ve&&$===void 0&&!Ir(u)){if(j===void 0&&ge===void 0)return;$=j!==void 0?j:ge}!ve&&Math.abs(q-$)<=.1&&Math.abs(j-ge)<=.1&&(q=(q+$)/2,$=(j+ge)/2),e.lineStyle(ne,pt(he),pe,.5);const We=ut(u.y)&&u.y.flip||u.flipY,Be=(K=u.baselineY)!=null?K:H+(We?0:V);let Je=[];if(ve){e.beginFill(pt(be==="none"?"white":be),be==="none"?0:pe);let[Pe,De,Qe,_e]=[q,$,j,ge];if([Pe,De,Qe,_e]=[Pe,De,Qe,_e].sort((gt,lt)=>gt-lt),Pe>h||_e<0||Math.abs(_e-Pe)<.5)return;if(f){if(Pe<0||_e>h)return;const gt=p-H/m*B,lt=Mt(Pe,h,gt,G,v,y,Z),tt=Mt(De,h,gt,G,v,y,Z),Xe=Mt(Qe,h,gt,G,v,y,Z),ae=Mt(_e,h,gt,G,v,y,Z);e.moveTo(lt.x,lt.y),e.bezierCurveTo(G,v,G,v,ae.x,ae.y),e.arc(G,v,p,cc(ae.x,ae.y,G,v),cc(Xe.x,Xe.y,G,v),!1),e.bezierCurveTo(G,v,G,v,tt.x,tt.y),e.arc(G,v,p,cc(tt.x,tt.y,G,v),cc(lt.x,lt.y,G,v),!1),Je=Array.from(e.currentPath.points),e.endFill()}else e.moveTo(Pe,Be),!((D=u.style)!=null&&D.linkStyle)||((J=u.style)==null?void 0:J.linkStyle)==="circular"?(e.arc((Pe+_e)/2,Be,(_e-Pe)/2,-Math.PI,Math.PI,!1),e.arc((De+Qe)/2,Be,(Qe-De)/2,Math.PI,-Math.PI,!0),Je=Array.from(e.currentPath.points),e.closePath()):(e.lineTo(Qe,H+V),e.bezierCurveTo(Qe+(De-Qe)/3,H+V-(De-Qe)/2,Qe+(De-Qe)/3*2,H+V-(De-Qe)/2,De,H+V),e.lineTo(_e,H+V),e.bezierCurveTo(Pe+(_e-Pe)/3*2,H+V-(_e-Pe)/2,Pe+(_e-Pe)/3,H+V-(_e-Pe)/2,Pe,H+V),Je=Array.from(e.currentPath.points),e.endFill());i.getMouseEventModel().addPolygonBasedEvent(k,Je)}else{const Pe=(q+$)/2;if(e.beginFill(pt("white"),0),f){if(q<0||$>h)return;if(((P=u.style)==null?void 0:P.linkStyle)==="straight"){const De=p-H/m*B,Qe=Mt(q,h,De,G,v,y,Z),_e=Mt($,h,De,G,v,y,Z),gt=Qe.x,lt=Qe.y,tt=_e.x,Xe=_e.y;e.moveTo(gt,lt),e.lineTo(tt,Xe);const ae=100;Je=Array.from({length:ae},(He,F)=>({x:(tt-gt)/(ae-1)*F+gt,y:(Xe-lt)/(ae-1)*F+lt})).flatMap(He=>[He.x,He.y])}else{const De=p-H/m*B,Qe=Mt(q,h,De,G,v,y,Z),_e=Mt($,h,De,G,v,y,Z),gt=Qe.x,lt=Qe.y,tt=Qe.x,Xe=Qe.y,ae=h/2,ye=m/2,He=_e.x,F=_e.y;e.moveTo(gt,lt);const T=new nI(gt,lt,tt,Xe,ae,ye,He,F);T.getLUT(14).forEach(me=>e.lineTo(me.x,me.y)),Je=T.getLUT(1e3).flatMap(me=>[me.x,me.y])}}else if(((te=u.style)==null?void 0:te.linkStyle)==="elliptical"){if(!(0<=q&&q<=h)&&!(0<=$&&$<=h))return;const De=[],Qe=ut(u.y);for(let _e=0;_e<=X;_e++){const gt=Math.PI*(_e/X),lt=($-q)/2*Math.cos(gt)+(q+$)/2;let tt=Be-Q*Math.sin(gt)*(Qe?1:Math.min($-q+h*S,h)/h)*(We?-1:1);if(typeof Q<"u"&&typeof Ie<"u"){const Xe=Math.abs(Ie-Q),ae=Ie>Q;tt=Q-Xe*Math.sin(gt)*(ae?-1:1)}if(_e===0)if(W){const Xe=We?Be-m:Be;e.moveTo(lt,Xe),De.push({x:lt,y:Xe}),e.lineTo(lt,tt)}else e.moveTo(lt,tt);else e.lineTo(lt,tt);if(De.push({x:lt,y:tt}),_e===X&&W){const Xe=We?Be-m:Be;e.lineTo(lt,Xe),De.push({x:lt,y:Xe})}}Je=De.flatMap(_e=>[_e.x,_e.y])}else{if($<0||q>h)return;e.arc(Pe,Be,($-q)/2,-Math.PI,Math.PI),Je=Array.from(e.currentPath.points),e.closePath()}i.getMouseEventModel().addLineBasedEvent(k,Je)}})})}function mje(e,g,i){return[...e.slice(0,g),i,...e.slice(g)]}function fje(e){const g=[];for(let i=0;itypeof g=="number")}function xbe(e){return Dbe(e,g=>typeof g=="string")}function pje(e,g,i){yje(e,g,i),bje(e,g,i)}function bje(e,g,i){var I,n,r,C;const o=g.spec();if(!ut(o.row)||o.row.grid!==!0)return;const[a,s]=e.position,[A,l]=e.dimensions,c=g.spec().layout==="circular",u=(I=o.innerRadius)!=null?I:220,d=(n=o.outerRadius)!=null?n:300,h=(r=o.startAngle)!=null?r:0,m=(C=o.endAngle)!=null?C:360,f=d-u,b=A/2,p=l/2,y=g.getChannelDomainArray("row");if(!y)return;const Z=l/y.length;if(c&&f<=20||!c&&Z<=20)return;const B=e.pBackground,G=i.axis.gridStrokeWidth;y.forEach(v=>{const w=g.encodedValue("row",v);if(c){const V=w+Z/2,S=d-V/l*f,X=S+G/2,W=S-G/2,R=Mt(0,A,W,b,p,h,m),H=$g(0,A,h,m),k=$g(A,A,h,m);B.lineStyle(G,pt("black"),0,.5),B.beginFill(pt(i.axis.gridColor),1),B.moveTo(a+R.x,s+R.y),B.arc(a+b,s+p,W,H,k,!0),B.arc(a+b,s+p,X,k,H,!1),B.closePath()}else{B.lineStyle(G,pt(i.axis.gridColor),1,.5);const V=s+w+Z/2;B.moveTo(a,V),B.lineTo(a+A,V)}})}function yje(e,g,i){var I,n,r,C,o;const a=g.spec();if(!ut(a.y)||a.y.grid!==!0)return;const[s,A]=e.position,[l,c]=e.dimensions,u=s,d=s+l,h=g.spec().layout==="circular",m=(I=a.innerRadius)!=null?I:220,f=(n=a.outerRadius)!=null?n:300,b=(r=a.startAngle)!=null?r:0,p=(C=a.endAngle)!=null?C:360,y=f-m,Z=l/2,B=c/2,G=(o=g.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],v=c/G.length;if(!xbe(G))return;const w=g.getChannelScale("y"),V=g.getChannelDomainArray("y");if(!w||!V||!m7(V)||h&&v/c*y<=20||!h&&v<=20)return;const S=e.pBackground,X=i.axis.gridStrokeWidth;G.forEach(W=>{const R=g.encodedValue("row",W),H=h?v/c*y:v,k=Math.max(Math.ceil(H/40),1);let K=w.ticks(k).filter(D=>V[0]<=D&&D<=V[1]);K.length===1&&(K=w.ticks(k+1).filter(D=>V[0]<=D&&D<=V[1])),h?K.forEach(D=>{const J=w(D),P=f-(R+v-J)/c*y,te=P+X/2,q=P-X/2,$=Mt(0,l,q,Z,B,b,p),j=$g(0,l,b,p),ge=$g(l,l,b,p);S.lineStyle(X,pt("black"),0,.5),S.beginFill(pt(i.axis.gridColor),1),S.moveTo(s+$.x,A+$.y),S.arc(s+Z,A+B,q,j,ge,!0),S.arc(s+Z,A+B,te,ge,j,!1),S.closePath()}):(S.lineStyle(X,pt(i.axis.gridColor),1,.5),K.forEach(D=>{var J;const P=A+R+v-w(D);if(i.axis.gridStrokeType==="solid")S.moveTo(u,P),S.lineTo(d,P);else if(i.axis.gridStrokeType==="dashed"){const[te,q]=(J=i.axis.gridStrokeDash)!=null?J:[1,1];for(let $=u;$=V;k-=w/10){const K=Mt(k,A,b-v.height/2,h,m,u,d);X.push(new e.libraries.PIXI.Point(K.x,K.y))}const W=$g(V,A,u,d),R=$g(S+p,A,u,d);f.lineStyle(1,pt("red"),0,.5),f.beginFill(pt(n.track.titleBackground),.5),f.moveTo(y.x,y.y),f.arc(h,m,b-v.height,W,R,!0),f.arc(h,m,b,R,W,!1),f.closePath(),B.updateText();const H=new e.libraries.PIXI.SimpleRope(B.texture,X);f.addChild(H)}function Gje(e,g,i){var I,n,r,C;const o=e.pBorder,[a,s]=e.position,[A,l]=e.dimensions;o.lineStyle((n=(I=g.spec().style)==null?void 0:I.outlineWidth)!=null?n:1,pt((C=(r=g.spec().style)==null?void 0:r.outline)!=null?C:i.track.outline),1,.5),o.beginFill(pt("white"),0),o.drawRect(a,s,A,l);const c=g.spec().x;o.lineStyle(1,pt(i.axis.baselineColor),1,.5),ut(c)&&c.axis==="top"?(o.moveTo(a,s),o.lineTo(a+A,s)):ut(c)&&c.axis==="bottom"&&(o.moveTo(a,s+l),o.lineTo(a+A,s+l))}function vje(e,g,i,I,n){if(!g.gLegend)return;g.gLegend.selectAll(".brush").remove();const r=I.spec(),C={offsetRight:0};if(ut(r.color)&&r.color.legend)switch(r.color.type){case"nominal":Bje(e,g,i,I,n);break;case"quantitative":jte(e,g,i,I,n,"color",C);break}if(ut(r.stroke)&&r.stroke.legend)switch(r.stroke.type){case"quantitative":jte(e,g,i,I,n,"stroke",C);break}}function jte(e,g,i,I,n,r,C){const o=I.spec(),a=o[r];if(!ut(a)||a.type!=="quantitative"||!a.legend)return;const[s,A]=g.position,[l,c]=g.dimensions,u=80,d=c-2>110?110:Math.max(c-2,40-2),h={top:10,left:55,width:20,height:d-20},m=s+l-u-1-C.offsetRight,f=A+1,b=I.getChannelScale(r),p=I.getChannelDomainArray(r);if(!b||!p)return;const y=g.pBorder;if(y.beginFill(pt(n.legend.background),n.legend.backgroundOpacity),y.lineStyle(1,pt(n.legend.backgroundStroke),n.legend.backgroundOpacity,0),y.drawRect(m,f,u,d),a.title){const H=a.title,k=Ds({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily}),K=new e.libraries.PIXI.Text(H,{...k,fontWeight:"bold"});K.anchor.x=0,K.anchor.y=0,K.position.x=m+10,K.position.y=f+10;const D=new e.libraries.PIXI.TextStyle({...k,fontWeight:"bold"}),J=e.libraries.PIXI.TextMetrics.measureText(H,D);y.addChild(K),h.top+=J.height+4,h.height-=J.height+4}const[Z,B]=p,G=B-Z,v=ut(a)&&a.scaleOffset?a.scaleOffset:[0,1];[...Array(h.height).keys()].forEach(H=>{let k;const K=Array.from(v).sort();if(H/h.height>=K[1])k=B;else if(H/h.height<=K[0])k=Z;else{const D=eh().domain([h.height*K[0],h.height*K[1]]).range([0,h.height]);k=eh().domain([0,h.height]).range([Z,B])(D(H))}y.beginFill(pt(b(k)),1),y.lineStyle(1,pt(n.legend.backgroundStroke),0,.5),y.drawRect(m+h.left,f+h.top+h.height-H,h.width,1)});const w=4;g.colorBrushes=g.gLegend.append("g").attr("class",r).selectAll(".brush").data(v.map((H,k)=>({y:H,id:k}))).enter().append("rect").attr("class","brush").attr("pointer-events","all").attr("cursor","ns-resize").attr("transform",H=>`translate(${m+h.left}, ${f+h.top-w/2+h.height-h.height*H.y})`).attr("width",`${h.width}px`).attr("height",`${w}px`).attr("fill","lightgrey").attr("stroke","black").attr("stroke-width","0.5px").call(e.libraries.d3Drag.drag().on("start",H=>{g.startEvent=H.sourceEvent}).on("drag",(H,k)=>{if(a&&a.scaleOffset){const K=H.sourceEvent,D=g.startEvent.clientY-K.clientY,J=[a.scaleOffset[0],a.scaleOffset[1]];k.id===0?J[0]+=D/h.height:J[1]+=D/h.height,J[0]=Math.min(1,Math.max(0,J[0])),J[1]=Math.min(1,Math.max(0,J[1])),g.updateScaleOffsetFromOriginalSpec(o._renderingId,J,r),g.shareScaleOffsetAcrossTracksAndTiles(J,r),g.draw(),g.startEvent=H.sourceEvent}}));const V=Math.max(Math.ceil(h.height/30),2);let S=b.ticks(V).filter(H=>p[0]<=H&&H<=p[1]);S.length===1&&(S=b.ticks(V+1).filter(H=>p[0]<=H&&H<=p[1]));const X=1;y.lineStyle(X,pt(n.legend.tickColor),1,.5);const W=Ds({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily}),R=m+h.left;S.forEach(H=>{let k=f+h.top+h.height-(H-Z)/G*h.height;k===f+h.top?k+=X/2:k===f+h.top+h.height&&(k-=X/2),y.moveTo(R-3,k),y.lineTo(R,k);const K=new e.libraries.PIXI.Text(H,W);K.anchor.x=1,K.anchor.y=.5,K.position.x=R-6,K.position.y=k,y.addChild(K)}),C.offsetRight=l-m}function Bje(e,g,i,I,n){var r,C,o,a,s;const A=I.spec();if(!ut(A.color)||A.color.type!=="nominal"||!A.color.legend)return;const l=(r=I.getChannelDomainArray("color"))!=null?r:["___SINGLE_COLOR___"];if(l.length===0)return;const c=A.color.domain,u=A.color.range,d=g.displayedLegends,h=G=>typeof G=="string"?G:G.join();if(d.find(G=>h(G.domain)===h(c)&&h(G.range)===h(u)))return;d.push({domain:c,range:u});const m=g.pBorder,f=10,b=4;let p=b,y=0;const Z=[],B=Ds({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily});if((C=A.style)!=null&&C.inlineLegend)l.map(G=>G).reverse().forEach(G=>{if(y>g.dimensions[0])return;const v=I.encodedValue("color",G),w=new e.libraries.PIXI.Text(G,B);w.anchor.x=1,w.anchor.y=0,w.position.x=g.position[0]+g.dimensions[0]-y-f,w.position.y=g.position[1]+b,m.addChild(w);const V=new e.libraries.PIXI.TextStyle(B),S=e.libraries.PIXI.TextMetrics.measureText(G,V);p{if(p>g.dimensions[1])return;const v=I.encodedValue("color",G),w=new e.libraries.PIXI.Text(G,B);w.anchor.x=1,w.anchor.y=0,w.position.x=g.position[0]+g.dimensions[0]-f,w.position.y=g.position[1]+p,m.addChild(w);const V=new e.libraries.PIXI.TextStyle(B),S=e.libraries.PIXI.TextMetrics.measureText(G,V);y{m.lineStyle(1,pt("black"),0,0),m.beginFill(pt(G.color),1),m.drawCircle(G.x,G.y,4)})}function Sje(e,g,i,I,n){var r;const C=I.spec();if(!ut(C.row)||C.row.type!=="nominal"||!C.row.legend)return;const o=(r=I.getChannelDomainArray("row"))!=null?r:["___SINGLE_ROW___"];if(o.length===0)return;const a=g.pBorder,s=4,A=2,l=Ds({color:n.legend.labelColor,size:n.legend.labelFontSize,fontWeight:n.legend.labelFontWeight,fontFamily:n.legend.labelFontFamily});o.forEach(c=>{const u=I.encodedValue("row",c),d=new e.libraries.PIXI.Text(c,l);d.anchor.x=0,d.anchor.y=0,d.position.x=g.position[0]+s,d.position.y=g.position[1]+u+A,a.addChild(d);const h=new e.libraries.PIXI.TextStyle(l),m=e.libraries.PIXI.TextMetrics.measureText(c,h);a.beginFill(pt(n.legend.background),n.legend.backgroundOpacity),a.lineStyle(1,pt(n.legend.backgroundStroke),0,0),a.drawRect(g.position[0]+1,g.position[1]+u+1,m.width+s*2,m.height+A*2)})}const p3=8,EZ=6;function wje(e,g,i,I,n){var r;const C=I.spec(),o=C.layout==="circular",a=I.getChannelDomainArray("y"),s=I.getChannelRangeArray("y");if(o||!I.isShowYAxis()||!a||!s||!m7(a))return;const[A,l]=g.dimensions,[c,u]=g.position,d=(r=I.getChannelDomainArray("row"))!=null?r:["___SINGLE_ROW___"];if(!xbe(d))return;const h=l/d.length;if(h<=20)return;const m=I.spec().y,f=!(ut(m)&&"axis"in m&&m.axis==="right"),b=eh().domain(a).range(s),p=g.pBorder;d.forEach(y=>{const Z=I.encodedValue("row",y),B=f?c:c+A,G=u+Z;p.lineStyle(1,pt(n.axis.baselineColor),1,.5),p.moveTo(B,G),p.lineTo(B,G+h);const v=Math.max(Math.ceil(h/40),1);let w=b.ticks(v).filter(X=>a[0]<=X&&X<=a[1]);w.length===1&&(w=b.ticks(v+1).filter(X=>a[0]<=X&&X<=a[1])),p.lineStyle(1,pt(n.axis.tickColor),1,.5);let V=f?B+EZ:B-EZ;w.forEach(X=>{const W=b(X);p.moveTo(B,G+h-W),p.lineTo(V,G+h-W)}),V=f?B+p3:B-p3,p.moveTo(B,G),p.lineTo(V,G),p.moveTo(B,G+h),p.lineTo(V,G+h);const S=Ds({color:n.axis.labelColor,size:n.axis.labelFontSize,fontFamily:n.axis.labelFontFamily,fontWeight:n.axis.labelFontWeight});w.forEach(X=>{const W=b(X);V=f?B+EZ*2:B-EZ*2;const R=new e.libraries.PIXI.Text(X,S);R.anchor.x=f?0:1,R.anchor.y=W===0?.9:.5,R.position.x=V,R.position.y=G+h-W,C.orientation==="vertical"&&(R.anchor.x=f?1:0,R.scale.x*=-1),p.addChild(R)})})}function Rje(e,g,i,I,n){var r,C,o,a,s;const A=I.spec(),l=A.layout==="circular",c=I.getChannelDomainArray("y"),u=I.getChannelRangeArray("y");if(!l||!I.isShowYAxis()||!c||!u||!m7(c))return;const[d,h]=g.dimensions,m=(r=A.innerRadius)!=null?r:220,f=(C=A.outerRadius)!=null?C:300,b=f-m,p=(o=A.startAngle)!=null?o:0,y=(a=A.endAngle)!=null?a:360,Z=d/2,B=h/2,G=(s=I.getChannelDomainArray("row"))!=null?s:["___SINGLE_ROW___"],v=h/G.length;if(v/h*b<=20)return;const w=I.spec().y,V=!(ut(w)&&"axis"in w&&w.axis==="right"),S=eh().domain(c).range(u),X=i.graphics;G.forEach(W=>{const R=I.encodedValue("row",W),H=f-(R+v)/h*b,k=f-R/h*b,K=Mt(V?0:d,d,H,Z,B,p,y),D=Mt(V?0:d,d,k,Z,B,p,y);X.lineStyle(1,pt(n.axis.baselineColor),1,.5),X.moveTo(K.x,K.y),X.lineTo(D.x,D.y);const J=j=>EZ*d/2/Math.PI/j,P=j=>p3*d/2/Math.PI/j,te=v/h*b,q=Math.max(Math.ceil(te/40),1);let $=S.ticks(q).filter(j=>c[0]<=j&&j<=c[1]);$.length===1&&($=S.ticks(q+1).filter(j=>c[0]<=j&&j<=c[1])),X.lineStyle(1,pt(n.axis.tickColor),1,.5),$.forEach(j=>{const ge=S(j),Q=f-(R+v-ge)/h*b,Ie=V?0:d-J(Q),he=V?J(Q):d,ne=Mt(Ie,d,Q,Z,B,p,y),be=$g(Ie,d,p,y),pe=$g(he,d,p,y);X.moveTo(ne.x,ne.y),X.arc(Z,B,Q,be,pe,!0),X.arc(Z,B,Q,pe,be,!1),X.closePath()});{const j=V?0:d-P(m),ge=V?P(m):d,Q=$g(j,d,p,y),Ie=$g(ge,d,p,y);X.moveTo(K.x,K.y),X.arc(Z,B,m,Q,Ie,!0),X.arc(Z,B,m,Ie,Q,!1),X.closePath()}{const j=V?0:d-P(f),ge=V?P(f):d,Q=$g(j,d,p,y),Ie=$g(ge,d,p,y);X.moveTo(D.x,D.y),X.arc(Z,B,f,Q,Ie,!0),X.arc(Z,B,f,Ie,Q,!1),X.closePath()}$.forEach(j=>{const ge=S(j),Q=f-(R+v-ge)/h*b,Ie=Mt(J(Q)*2,d,Q,Z,B,p,y),he=Ds({color:n.axis.labelColor,size:n.axis.labelFontSize,fontFamily:n.axis.labelFontFamily,fontWeight:n.axis.labelFontWeight}),ne=new e.libraries.PIXI.Text(j,he);ne.anchor.x=V?1:0,ne.anchor.y=.5,ne.position.x=Ie.x,ne.position.y=Ie.y,ne.resolution=4;const be=new e.libraries.PIXI.TextStyle(he),ve=e.libraries.PIXI.TextMetrics.measureText(ne.text,be).width/(2*Q*Math.PI)*d*360/(y-p),We=V?J(Q)*2:d-J(Q)*2-ve,Be=V?J(Q)*2+ve:d-J(Q)*2,Je=[];for(let De=Be;De>=We;De-=ve/10){const Qe=Mt(De,d,Q,Z,B,p,y);Je.push(new e.libraries.PIXI.Point(Qe.x,Qe.y))}ne.updateText();const Pe=new e.libraries.PIXI.SimpleRope(ne.texture,Je);X.addChild(Pe)})})}function Vje(e,g,i){var I,n,r,C,o,a,s,A,l,c,u,d;const h=g.spec(),[m,f]=e.position,[b,p]=e.dimensions,y=(I=h.innerRadius)!=null?I:220,Z=(n=h.outerRadius)!=null?n:300,B=(r=h.startAngle)!=null?r:0,G=(C=h.endAngle)!=null?C:360,v=m+b/2,w=f+p/2,V=Mt(0,b,y,v,w,B,G),S=$g(0,b,B,G),X=$g(b,b,B,G),W=e.pBackground;h.layout==="circular"&&h.mark==="withinLink"||(W.lineStyle((o=h.style)!=null&&o.outlineWidth?((a=h.style)==null?void 0:a.outlineWidth)/2.5:0,pt((A=(s=h.style)==null?void 0:s.outline)!=null?A:"#DBDBDB"),1,1),W.beginFill(pt((c=(l=g.spec().style)==null?void 0:l.background)!=null?c:i.track.background),(d=(u=g.spec().style)==null?void 0:u.backgroundOpacity)!=null?d:!i.track.background||i.track.background==="transparent"?0:1),W.moveTo(V.x,V.y),W.arc(v,w,y,S,X,!0),W.arc(v,w,Z,X,S,!1),W.closePath()),ut(h.x)&&h.x.axis==="top"&&(W.lineStyle(.5,pt("black"),0,.5),W.beginFill(pt("white"),0),W.moveTo(V.x,V.y),W.arc(v,w,Z-.5,S,X,!0),W.arc(v,w,Z,X,S,!1),W.closePath()),W.lineStyle(.5,pt("black"),0,.5),W.beginFill(pt("white"),0),W.moveTo(v,w),W.arc(v,w,Z+3,S,X,!1),W.closePath(),W.lineStyle(1,pt("#DBDBDB"),0,0),W.beginFill(pt("white"),0),W.drawCircle(v,w,y-1)}function Wje(e,g,i){var I,n,r,C,o,a;const[s,A]=e.position,[l,c]=e.dimensions,u=e.pBackground;if((I=g.spec().style)!=null&&I.background||i.track.background&&i.track.background!=="transparent"){u.clear();const d=(r=(n=g.spec().style)==null?void 0:n.background)!=null?r:i.track.background,h=Ute((C=g.spec().style)==null?void 0:C.backgroundOpacity)?1:(o=g.spec().style)==null?void 0:o.backgroundOpacity;u.lineStyle(1,pt("white"),0,0),u.beginFill(pt(d),h),u.drawRect(s,A,l,c)}if(i.track.alternatingBackground&&i.track.alternatingBackground!=="transparent"){const d=g.spec();if(!ut(d.row)||d.row.type!=="nominal")return;const h=(a=g.getChannelDomainArray("row"))!=null?a:["___SINGLE_ROW___"];if(h.length===0)return;h.forEach((m,f)=>{var b,p,y,Z;if(f%2===0)return;const B=g.encodedValue("row",m),G=(p=(b=g.spec().style)==null?void 0:b.background)!=null?p:i.track.alternatingBackground,v=Ute((y=g.spec().style)==null?void 0:y.backgroundOpacity)?1:(Z=g.spec().style)==null?void 0:Z.backgroundOpacity;u.lineStyle(1,pt("white"),0,0),u.beginFill(pt(G),v),u.drawRect(e.position[0],e.position[1]+B,l,c/h.length)})}}function Xje(e,g,i){var I,n,r,C,o;const a=i.spec();if(!a.width||!a.height){console.warn("Size of a track is not properly determined, so visual mark cannot be rendered");return}const s=i.data(),[A,l]=g.dimensions,c=a.layout==="circular",u=(I=a.innerRadius)!=null?I:220,d=(n=a.outerRadius)!=null?n:300,h=(r=a.startAngle)!=null?r:0,m=(C=a.endAngle)!=null?C:360,f=d-u,b=A/2,p=l/2,y=(o=i.getChannelDomainArray("row"))!=null?o:["___SINGLE_ROW___"],Z=l/y.length;y.forEach(B=>{const G=i.encodedValue("row",B);s.filter(v=>!bi(v,a.row)||bi(v,a.row)===B).forEach(v=>{var w,V;let S=i.encodedPIXIProperty("x",v),X=i.encodedPIXIProperty("xe",v),W=i.encodedPIXIProperty("x1",v),R=i.encodedPIXIProperty("x1e",v);const H=i.encodedPIXIProperty("y",v),k=i.encodedPIXIProperty("stroke",v),K=i.encodedPIXIProperty("strokeWidth",v),D=i.encodedPIXIProperty("color",v),J=i.encodedPIXIProperty("opacity",v);typeof X<"u"&&([S,X]=[S,X].sort((te,q)=>te-q)),typeof W<"u"&&typeof R<"u"&&([W,R]=[W,R].sort((te,q)=>te-q));const P=typeof X<"u"&&typeof W<"u"&&typeof R<"u"&&Math.abs(S-X)>.1&&Math.abs(W-R)>.1;if(!P&&X===void 0&&!Ir(a)){if(W===void 0&&R===void 0)return;X=W!==void 0?W:R}if(!P&&Math.abs(S-X)<=.1&&Math.abs(W-R)<=.1&&(S=(S+X)/2,X=(W+R)/2),e.lineStyle(K,pt(k),J,.5),P){e.beginFill(pt(D==="none"?"white":D),D==="none"?0:J);let[te,q,$,j]=[S,X,W,R];if([te,q]=[te,q].sort((ge,Q)=>ge-Q),[$,j]=[$,j].sort((ge,Q)=>ge-Q),te>A||j<0||Math.abs(j-te)<.5)return;if(c){if(te<0||j>A)return;const ge=d-G/l*f,Q=Mt(te,A,ge,b,p,h,m),Ie=Mt(q,A,ge,b,p,h,m),he=Mt($,A,ge,b,p,h,m),ne=Mt(j,A,ge,b,p,h,m);e.moveTo(Q.x,Q.y),e.bezierCurveTo(b,p,b,p,ne.x,ne.y),e.arc(b,p,d,cc(ne.x,ne.y,b,p),cc(he.x,he.y,b,p),!1),e.bezierCurveTo(b,p,b,p,Ie.x,Ie.y),e.arc(b,p,d,cc(Ie.x,Ie.y,b,p),cc(Q.x,Q.y,b,p),!1),e.endFill()}else e.moveTo(te,G),e.lineTo(q,G),e.lineTo(j,G+Z),e.lineTo($,G+Z),e.lineTo(te,G),e.closePath()}else{if(Ir(a)){((w=a.style)==null?void 0:w.linkConnectionType)==="curve"?(e.moveTo(S,0),e.bezierCurveTo(S/5*4,(G+Z-H)/2,S/2,(G+Z-H)/5*4,0,G+Z-H)):((V=a.style)==null?void 0:V.linkConnectionType)==="straight"?(e.moveTo(S,0),e.lineTo(0,G+Z-H)):(e.moveTo(S,0),e.lineTo(S,G+Z-H),e.lineTo(0,G+Z-H));return}if(c){let te,q;for(let $=0;$<=1;$+=.02){const j=ne=>Math.log(ne/(1-ne)),ge=ne=>d-1/(1+Math.exp(j(ne)))*f+3,Q=(ne,be,pe)=>((pe-be)*ne+be)/A,Ie=b+ge($)*Math.cos(-Q($,S,X)*2*Math.PI-Math.PI/2),he=p+ge($)*Math.sin(-Q($,S,X)*2*Math.PI-Math.PI/2);te&&q&&(e.lineStyle(K,pt(k),J,.5),e.moveTo(te,q),e.lineTo(Ie,he)),te=Ie,q=he}return}e.moveTo(X,G+Z),e.lineTo(S,G)}})})}const Hd=["x","xe","x1","x1e","y","ye","y1","y1e","color","size","row","stroke","strokeWidth","opacity","text"];function Hje(e,g,i,I){if(!e||!g||!i||I.spec().mark==="brush")return;if(["x","x1","x1e","xe"].forEach(C=>{I.setChannelScale(C,g._xScale)}),Ir(I.spec())||Pje(I.spec())){const C=g._yScale.copy();C.range([C.range()[1],C.range()[0]]),["y","y1","y1e","ye"].forEach(o=>{I.setChannelScale(o,C)})}const[n,r]=g.dimensions;switch(I.spec().mark){case"point":nje(g,i.graphics,I);break;case"bar":oje(g,i,I);break;case"line":Cje(i.graphics,I,n,r);break;case"area":Aje(e,g,i,I);break;case"rect":sje(e,g,i,I);break;case"triangleLeft":case"triangleRight":case"triangleBottom":cje(i.graphics,I,n,r);break;case"text":uje(e,g,i,I);break;case"rule":dje(e,g,i,I);break;case"betweenLink":Xje(i.graphics,g,I);break;case"withinLink":hje(i.graphics,g,I);break;default:console.warn("Unsupported mark type");break}}function Tje(e,g,i,I,n){if(!e||!g||!i||I.spec().mark==="brush")return;["x","x1","x1e","xe"].forEach(C=>{I.setChannelScale(C,g._xScale)}),I.spec().layout==="circular"?Vje(g,I,n):(Wje(g,I,n),Gje(g,I,n)),pje(g,I,n)}function Nje(e,g,i,I,n){if(!e||!g||!i||I.spec().mark==="brush")return;["x","x1","x1e","xe"].forEach(C=>{I.setChannelScale(C,g._xScale)}),I.spec().layout==="circular"?(Rje(e,g,i,I,n),Zje(e,g,i,I,n)):(wje(e,g,i,I,n),Sje(e,g,i,I,n)),vje(e,g,i,I,n)}function Y0(e){if(zbe(e)||NS(e))return[];if(!dI(e))return[e];if(e._overlay.length===0)return[{...e,superpose:void 0}];const g=JSON.parse(JSON.stringify(e));delete g._overlay;const i=[];e._overlay.forEach((r,C)=>{const o=Object.assign(JSON.parse(JSON.stringify(g)),r);o.title&&C!==0&&delete o.title,i.push(o)});let I;return i.forEach(r=>{ut(r.x)&&r.x.axis&&!I&&(I=r.x.axis)}),i.map(r=>({...r,x:{...r.x,axis:I}}))}function Ebe(e){return[].concat(...e.map(g=>{if(zbe(g)||!dI(g)||g._overlay.length<=1)return[g];if(g._overlay.filter(C=>C.data).length===0)return[g];if($te([g.data,...g._overlay.map(C=>C.data)]))return[g];const i={...g,id:void 0,_overlay:void 0},I=[],n=JSON.parse(JSON.stringify(i));return n._overlay=[],g._overlay.forEach(C=>{if(n.data||(n.data=C.data),n.id||(n.id=C.id),!C.data||$te([n.data,C.data])){n._overlay.push(C);return}const o=Object.assign(JSON.parse(JSON.stringify(i)),C);I.push(o)}),(n._overlay.length>0?[n,...I]:I).map((C,o,a)=>{const s=o!==0,A=zC(C)&&ut(C.y)&&!C.y.axis&&s?{...C.y,axis:o===1?"right":"none"}:zC(C)?C.y:void 0;return C.title&&o!==a.length-1&&a.length!==1&&delete C.title,{...C,overlayOnPreviousTrack:s,y:A}})}))}function $te(e){if(e.length===0)return!1;const g=e.filter(n=>n);if(g.length!==e.length)return!1;const i=Object.keys(g[0]).sort();let I=!0;return i.forEach(n=>{if(Array.from(new Set(g.map(C=>JSON.stringify(C[n])))).length!==1){I=!1;return}}),I}const E9={viridis:kbe,grey:x4e,warm:M4e,spectral:H4e,cividis:E4e,bupu:N4e,rdbu:W4e,hot:F4e,pink:Y4e};function f7(e){return typeof e=="object"&&e!==null}function QR(e){return f7(e)&&"getTabularData"in e}function kje(e,g){var i;return((i=e.dataTransform)!=null?i:[]).some(I=>I.type===g)}function Yje(e="viridis",g=100){var i;const I=(i=E9[e])!=null?i:E9.viridis;return[...Array(g)].map((n,r)=>I(1/g*r))}function Mbe(e){return!("alignment"in e)&&!e.tracks.find(g=>g.alignment==="overlay"||"tracks"in g)}function Kje(e){return"alignment"in e&&e.alignment==="overlay"}function Fje(e){return!Mbe(e)&&!Kje(e)}function zbe(e){return!dI(e)&&"data"in e&&!("mark"in e)}function NS(e){return"type"in e&&e.type=="dummy-track"}function Dje(e){return!!("data"in e&&"overrideTemplate"in e&&e.overrideTemplate)}function qte(e){return typeof e=="object"}function xje(e){return"chromosome"in e&&!("interval"in e)}function Eje(e){return!("chromosome"in e)&&"interval"in e}function Mje(e){return"chromosome"in e&&"interval"in e}function zC(e){return!("_overlay"in e)}function dI(e){return"_overlay"in e}function zje(e){return"template"in e}function Pje(e){return zC(e)&&!ut(e.x)&&ut(e.y)&&e.y.type==="genomic"}function Ir(e){const g=zC(e)?e:Y0(e)[0];return ut(g.x)&&g.x.type==="genomic"&&ut(g.y)&&g.y.type==="genomic"}function Jje(e){return Ir(e)&&e.data.type==="matrix"&&(e.mark==="bar"||e.mark==="rect")&&e.xe&&e.ye}function E1(e){return e!==null&&typeof e=="object"&&"value"in e}function p7(e){return e!==void 0&&(e.type==="vector"||e.type==="beddb"||e.type==="multivec"||e.type==="bigwig"||e.type==="matrix"||e.type==="bam"||e.type==="vcf"||e.type==="gff"||e.type==="bed")}function ut(e){return f7(e)&&!("value"in e)}function Oje(e){return"oneOf"in e}function _je(e){return"inRange"in e}function Lje(e){return"include"in e}function ege(e){return Array.isArray(e)}function Uje(e){return Array.isArray(e)}function zT(e){return(e.mark==="bar"||e.mark==="area"||e.mark==="text")&&ut(e.color)&&e.color.type==="nominal"&&(!e.row||E1(e.row))&&ut(e.y)&&e.y.type==="quantitative"&&!ut(e.ye)}function Qje(e,g){const i=e[g];return zT(e)&&(g==="x"||g==="y")&&ut(i)&&i.type==="quantitative"}function bi(e,g){if(ut(g)&&g.field)return e[g==null?void 0:g.field]}function jje(e){const g=[];return Hd.forEach(i=>{const I=e[i];ut(I)&&"aggregate"in I&&g.push(i)}),g}function b5(e,g){const i=[];return Hd.forEach(I=>{const n=e[I];ut(n)&&n.type===g&&i.push(I)}),i}function M9(e){if((zC(e)||dI(e))&&ut(e.x)&&e.x.axis&&e.x.axis!=="none")return!0;if(dI(e)){let g=!1;return e._overlay.forEach(i=>{g||ut(i.x)&&i.x.axis&&i.x.axis!=="none"&&(g=!0)}),g}return!1}function $je(e){if((zC(e)||dI(e))&&ut(e.y)&&e.y.axis&&e.y.axis!=="none")return!0;if(dI(e)){let g=!1;return e._overlay.forEach(i=>{g||ut(i.y)&&i.y.axis&&i.y.axis!=="none"&&(g=!0)}),g}return!1}function Ym(e){return typeof e=="object"}var ih=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function qje(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var b3={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(e,g){(function(i,I){I(g)})(ih,function(i){function I(){for(var O=arguments.length,x=Array(O),ee=0;ee1){x[0]=x[0].slice(0,-1);for(var ce=x.length-1,de=1;de= 0x80 (not a basic code point)","invalid-input":"Invalid input"},S=h-m,X=Math.floor,W=String.fromCharCode;function R(O){throw new RangeError(V[O])}function H(O,x){for(var ee=[],ce=O.length;ce--;)ee[ce]=x(O[ce]);return ee}function k(O,x){var ee=O.split("@"),ce="";ee.length>1&&(ce=ee[0]+"@",O=ee[1]),O=O.replace(w,".");var de=O.split("."),Le=H(de,x).join(".");return ce+Le}function K(O){for(var x=[],ee=0,ce=O.length;ee=55296&&de<=56319&&ee>1,x+=X(x/ee);x>S*f>>1;de+=h)x=X(x/S);return X(de+(S+1)*x/(x+b))},q=function(x){var ee=[],ce=x.length,de=0,Le=Z,Ue=y,dt=x.lastIndexOf(B);dt<0&&(dt=0);for(var yt=0;yt=128&&R("not-basic"),ee.push(x.charCodeAt(yt));for(var kt=dt>0?dt+1:0;kt=ce&&R("invalid-input");var At=J(x.charCodeAt(kt++));(At>=h||At>X((d-de)/Rt))&&R("overflow"),de+=At*Rt;var Xt=xt<=Ue?m:xt>=Ue+f?f:xt-Ue;if(AtX(d/Pt)&&R("overflow"),Rt*=Pt}var Ft=ee.length+1;Ue=te(de-ht,Ft,ht==0),X(de/Ft)>d-Le&&R("overflow"),Le+=X(de/Ft),de%=Ft,ee.splice(de++,0,Le)}return String.fromCodePoint.apply(String,ee)},$=function(x){var ee=[];x=K(x);var ce=x.length,de=Z,Le=0,Ue=y,dt=!0,yt=!1,kt=void 0;try{for(var ht=x[Symbol.iterator](),Rt;!(dt=(Rt=ht.next()).done);dt=!0){var xt=Rt.value;xt<128&&ee.push(W(xt))}}catch(pr){yt=!0,kt=pr}finally{try{!dt&&ht.return&&ht.return()}finally{if(yt)throw kt}}var At=ee.length,Xt=At;for(At&&ee.push(B);Xt=de&&LtX((d-Le)/Yt)&&R("overflow"),Le+=(Pt-de)*Yt,de=Pt;var Wt=!0,eg=!1,_t=void 0;try{for(var qt=x[Symbol.iterator](),sg;!(Wt=(sg=qt.next()).done);Wt=!0){var Wg=sg.value;if(Wgd&&R("overflow"),Wg==de){for(var mg=Le,Oi=h;;Oi+=h){var en=Oi<=Ue?m:Oi>=Ue+f?f:Oi-Ue;if(mg>6|192).toString(16).toUpperCase()+"%"+(x&63|128).toString(16).toUpperCase():ee="%"+(x>>12|224).toString(16).toUpperCase()+"%"+(x>>6&63|128).toString(16).toUpperCase()+"%"+(x&63|128).toString(16).toUpperCase(),ee}function ne(O){for(var x="",ee=0,ce=O.length;ee=194&&de<224){if(ce-ee>=6){var Le=parseInt(O.substr(ee+4,2),16);x+=String.fromCharCode((de&31)<<6|Le&63)}else x+=O.substr(ee,6);ee+=6}else if(de>=224){if(ce-ee>=9){var Ue=parseInt(O.substr(ee+4,2),16),dt=parseInt(O.substr(ee+7,2),16);x+=String.fromCharCode((de&15)<<12|(Ue&63)<<6|dt&63)}else x+=O.substr(ee,9);ee+=9}else x+=O.substr(ee,3),ee+=3}return x}function be(O,x){function ee(ce){var de=ne(ce);return de.match(x.UNRESERVED)?de:ce}return O.scheme&&(O.scheme=String(O.scheme).replace(x.PCT_ENCODED,ee).toLowerCase().replace(x.NOT_SCHEME,"")),O.userinfo!==void 0&&(O.userinfo=String(O.userinfo).replace(x.PCT_ENCODED,ee).replace(x.NOT_USERINFO,he).replace(x.PCT_ENCODED,C)),O.host!==void 0&&(O.host=String(O.host).replace(x.PCT_ENCODED,ee).toLowerCase().replace(x.NOT_HOST,he).replace(x.PCT_ENCODED,C)),O.path!==void 0&&(O.path=String(O.path).replace(x.PCT_ENCODED,ee).replace(O.scheme?x.NOT_PATH:x.NOT_PATH_NOSCHEME,he).replace(x.PCT_ENCODED,C)),O.query!==void 0&&(O.query=String(O.query).replace(x.PCT_ENCODED,ee).replace(x.NOT_QUERY,he).replace(x.PCT_ENCODED,C)),O.fragment!==void 0&&(O.fragment=String(O.fragment).replace(x.PCT_ENCODED,ee).replace(x.NOT_FRAGMENT,he).replace(x.PCT_ENCODED,C)),O}function pe(O){return O.replace(/^0*(.*)/,"$1")||"0"}function ve(O,x){var ee=O.match(x.IPV4ADDRESS)||[],ce=c(ee,2),de=ce[1];return de?de.split(".").map(pe).join("."):O}function We(O,x){var ee=O.match(x.IPV6ADDRESS)||[],ce=c(ee,3),de=ce[1],Le=ce[2];if(de){for(var Ue=de.toLowerCase().split("::").reverse(),dt=c(Ue,2),yt=dt[0],kt=dt[1],ht=kt?kt.split(":").map(pe):[],Rt=yt.split(":").map(pe),xt=x.IPV4ADDRESS.test(Rt[Rt.length-1]),At=xt?7:8,Xt=Rt.length-At,Pt=Array(At),Ft=0;Ft1){var Zt=Pt.slice(0,ei.index),Lt=Pt.slice(ei.index+ei.length);it=Zt.join(":")+"::"+Lt.join(":")}else it=Pt.join(":");return Le&&(it+="%"+Le),it}else return O}var Be=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Je="".match(/(){0}/)[1]===void 0;function Pe(O){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee={},ce=x.iri!==!1?l:A;x.reference==="suffix"&&(O=(x.scheme?x.scheme+":":"")+"//"+O);var de=O.match(Be);if(de){Je?(ee.scheme=de[1],ee.userinfo=de[3],ee.host=de[4],ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=de[7],ee.fragment=de[8],isNaN(ee.port)&&(ee.port=de[5])):(ee.scheme=de[1]||void 0,ee.userinfo=O.indexOf("@")!==-1?de[3]:void 0,ee.host=O.indexOf("//")!==-1?de[4]:void 0,ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=O.indexOf("?")!==-1?de[7]:void 0,ee.fragment=O.indexOf("#")!==-1?de[8]:void 0,isNaN(ee.port)&&(ee.port=O.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?de[4]:void 0)),ee.host&&(ee.host=We(ve(ee.host,ce),ce)),ee.scheme===void 0&&ee.userinfo===void 0&&ee.host===void 0&&ee.port===void 0&&!ee.path&&ee.query===void 0?ee.reference="same-document":ee.scheme===void 0?ee.reference="relative":ee.fragment===void 0?ee.reference="absolute":ee.reference="uri",x.reference&&x.reference!=="suffix"&&x.reference!==ee.reference&&(ee.error=ee.error||"URI is not a "+x.reference+" reference.");var Le=Ie[(x.scheme||ee.scheme||"").toLowerCase()];if(!x.unicodeSupport&&(!Le||!Le.unicodeSupport)){if(ee.host&&(x.domainHost||Le&&Le.domainHost))try{ee.host=Q.toASCII(ee.host.replace(ce.PCT_ENCODED,ne).toLowerCase())}catch(Ue){ee.error=ee.error||"Host's domain name can not be converted to ASCII via punycode: "+Ue}be(ee,A)}else be(ee,ce);Le&&Le.parse&&Le.parse(ee,x)}else ee.error=ee.error||"URI can not be parsed.";return ee}function De(O,x){var ee=x.iri!==!1?l:A,ce=[];return O.userinfo!==void 0&&(ce.push(O.userinfo),ce.push("@")),O.host!==void 0&&ce.push(We(ve(String(O.host),ee),ee).replace(ee.IPV6ADDRESS,function(de,Le,Ue){return"["+Le+(Ue?"%25"+Ue:"")+"]"})),(typeof O.port=="number"||typeof O.port=="string")&&(ce.push(":"),ce.push(String(O.port))),ce.length?ce.join(""):void 0}var Qe=/^\.\.?\//,_e=/^\/\.(\/|$)/,gt=/^\/\.\.(\/|$)/,lt=/^\/?(?:.|\n)*?(?=\/|$)/;function tt(O){for(var x=[];O.length;)if(O.match(Qe))O=O.replace(Qe,"");else if(O.match(_e))O=O.replace(_e,"/");else if(O.match(gt))O=O.replace(gt,"/"),x.pop();else if(O==="."||O==="..")O="";else{var ee=O.match(lt);if(ee){var ce=ee[0];O=O.slice(ce.length),x.push(ce)}else throw new Error("Unexpected dot segment condition")}return x.join("")}function Xe(O){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee=x.iri?l:A,ce=[],de=Ie[(x.scheme||O.scheme||"").toLowerCase()];if(de&&de.serialize&&de.serialize(O,x),O.host&&!ee.IPV6ADDRESS.test(O.host)){if(x.domainHost||de&&de.domainHost)try{O.host=x.iri?Q.toUnicode(O.host):Q.toASCII(O.host.replace(ee.PCT_ENCODED,ne).toLowerCase())}catch(dt){O.error=O.error||"Host's domain name can not be converted to "+(x.iri?"Unicode":"ASCII")+" via punycode: "+dt}}be(O,ee),x.reference!=="suffix"&&O.scheme&&(ce.push(O.scheme),ce.push(":"));var Le=De(O,x);if(Le!==void 0&&(x.reference!=="suffix"&&ce.push("//"),ce.push(Le),O.path&&O.path.charAt(0)!=="/"&&ce.push("/")),O.path!==void 0){var Ue=O.path;!x.absolutePath&&(!de||!de.absolutePath)&&(Ue=tt(Ue)),Le===void 0&&(Ue=Ue.replace(/^\/\//,"/%2F")),ce.push(Ue)}return O.query!==void 0&&(ce.push("?"),ce.push(O.query)),O.fragment!==void 0&&(ce.push("#"),ce.push(O.fragment)),ce.join("")}function ae(O,x){var ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},ce=arguments[3],de={};return ce||(O=Pe(Xe(O,ee),ee),x=Pe(Xe(x,ee),ee)),ee=ee||{},!ee.tolerant&&x.scheme?(de.scheme=x.scheme,de.userinfo=x.userinfo,de.host=x.host,de.port=x.port,de.path=tt(x.path||""),de.query=x.query):(x.userinfo!==void 0||x.host!==void 0||x.port!==void 0?(de.userinfo=x.userinfo,de.host=x.host,de.port=x.port,de.path=tt(x.path||""),de.query=x.query):(x.path?(x.path.charAt(0)==="/"?de.path=tt(x.path):((O.userinfo!==void 0||O.host!==void 0||O.port!==void 0)&&!O.path?de.path="/"+x.path:O.path?de.path=O.path.slice(0,O.path.lastIndexOf("/")+1)+x.path:de.path=x.path,de.path=tt(de.path)),de.query=x.query):(de.path=O.path,x.query!==void 0?de.query=x.query:de.query=O.query),de.userinfo=O.userinfo,de.host=O.host,de.port=O.port),de.scheme=O.scheme),de.fragment=x.fragment,de}function ye(O,x,ee){var ce=a({scheme:"null"},ee);return Xe(ae(Pe(O,ce),Pe(x,ce),ce,!0),ce)}function He(O,x){return typeof O=="string"?O=Xe(Pe(O,x),x):r(O)==="object"&&(O=Pe(Xe(O,x),x)),O}function F(O,x,ee){return typeof O=="string"?O=Xe(Pe(O,ee),ee):r(O)==="object"&&(O=Xe(O,ee)),typeof x=="string"?x=Xe(Pe(x,ee),ee):r(x)==="object"&&(x=Xe(x,ee)),O===x}function T(O,x){return O&&O.toString().replace(!x||!x.iri?A.ESCAPE:l.ESCAPE,he)}function Y(O,x){return O&&O.toString().replace(!x||!x.iri?A.PCT_ENCODED:l.PCT_ENCODED,ne)}var ie={scheme:"http",domainHost:!0,parse:function(x,ee){return x.host||(x.error=x.error||"HTTP URIs must have a host."),x},serialize:function(x,ee){var ce=String(x.scheme).toLowerCase()==="https";return(x.port===(ce?443:80)||x.port==="")&&(x.port=void 0),x.path||(x.path="/"),x}},me={scheme:"https",domainHost:ie.domainHost,parse:ie.parse,serialize:ie.serialize};function Ve(O){return typeof O.secure=="boolean"?O.secure:String(O.scheme).toLowerCase()==="wss"}var we={scheme:"ws",domainHost:!0,parse:function(x,ee){var ce=x;return ce.secure=Ve(ce),ce.resourceName=(ce.path||"/")+(ce.query?"?"+ce.query:""),ce.path=void 0,ce.query=void 0,ce},serialize:function(x,ee){if((x.port===(Ve(x)?443:80)||x.port==="")&&(x.port=void 0),typeof x.secure=="boolean"&&(x.scheme=x.secure?"wss":"ws",x.secure=void 0),x.resourceName){var ce=x.resourceName.split("?"),de=c(ce,2),Le=de[0],Ue=de[1];x.path=Le&&Le!=="/"?Le:void 0,x.query=Ue,x.resourceName=void 0}return x.fragment=void 0,x}},je={scheme:"wss",domainHost:we.domainHost,parse:we.parse,serialize:we.serialize},at={},bt="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",ct="[0-9A-Fa-f]",Ht=n(n("%[EFef]"+ct+"%"+ct+ct+"%"+ct+ct)+"|"+n("%[89A-Fa-f]"+ct+"%"+ct+ct)+"|"+n("%"+ct+ct)),re="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",E="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",_=I(E,'[\\"\\\\]'),fe="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Ke=new RegExp(bt,"g"),ue=new RegExp(Ht,"g"),le=new RegExp(I("[^]",re,"[\\.]",'[\\"]',_),"g"),Ce=new RegExp(I("[^]",bt,fe),"g"),oe=Ce;function Re(O){var x=ne(O);return x.match(Ke)?x:O}var xe={scheme:"mailto",parse:function(x,ee){var ce=x,de=ce.to=ce.path?ce.path.split(","):[];if(ce.path=void 0,ce.query){for(var Le=!1,Ue={},dt=ce.query.split("&"),yt=0,kt=dt.length;yt=55296&&r<=56319&&n=g)throw new Error("Cannot access property/index "+I+" levels up, current level is "+g);return i[g-I]}if(I>g)throw new Error("Cannot access data "+I+" levels up, current level is "+g);if(r="data"+(g-I||""),!n)return r}for(var o=r,a=n.split("/"),s=0;s=0?{index:I,compiling:!0}:(I=this._compilations.length,this._compilations[I]={schema:e,root:g,baseId:i},{index:I,compiling:!1})}function Y$e(e,g,i){var I=$be.call(this,e,g,i);I>=0&&this._compilations.splice(I,1)}function $be(e,g,i){for(var I=0;I%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,g0e=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,i0e=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,I0e=/^(?:\/(?:[^~/]|~0|~1)*)*$/,n0e=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,r0e=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,L$e=_T;function _T(e){return e=e=="full"?"full":"fast",M$e.copy(_T[e])}_T.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":t0e,url:g0e,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:e0e,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:a0e,uuid:i0e,"json-pointer":I0e,"json-pointer-uri-fragment":n0e,"relative-json-pointer":r0e};_T.full={date:C0e,time:o0e,"date-time":j$e,uri:q$e,"uri-reference":_$e,"uri-template":t0e,url:g0e,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:e0e,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:a0e,uuid:i0e,"json-pointer":I0e,"json-pointer-uri-fragment":n0e,"relative-json-pointer":r0e};function U$e(e){return e%4===0&&(e%100!==0||e%400===0)}function C0e(e){var g=e.match(z$e);if(!g)return!1;var i=+g[1],I=+g[2],n=+g[3];return I>=1&&I<=12&&n>=1&&n<=(I==2&&U$e(i)?29:P$e[I])}function o0e(e,g){var i=e.match(J$e);if(!i)return!1;var I=i[1],n=i[2],r=i[3],C=i[5];return(I<=23&&n<=59&&r<=59||I==23&&n==59&&r==60)&&(!g||C)}var Q$e=/t|\s/i;function j$e(e){var g=e.split(Q$e);return g.length==2&&C0e(g[0])&&o0e(g[1],!0)}var $$e=/\/|:/;function q$e(e){return $$e.test(e)&&O$e.test(e)}var e8e=/[^\\]\\Z/;function a0e(e){if(e8e.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}var t8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.errSchemaPath+"/"+i,s=!g.opts.allErrors,A="data"+(C||""),l="valid"+r,c,u;if(o=="#"||o=="#/")g.isRoot?(c=g.async,u="validate"):(c=g.root.schema.$async===!0,u="root.refVal[0]");else{var d=g.resolveRef(g.baseId,o,g.isRoot);if(d===void 0){var h=g.MissingRefError.message(g.baseId,o);if(g.opts.missingRefs=="fail"){g.logger.error(h);var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(a)+" , params: { ref: '"+g.util.escapeQuotes(o)+"' } ",g.opts.messages!==!1&&(n+=" , message: 'can\\'t resolve reference "+g.util.escapeQuotes(o)+"' "),g.opts.verbose&&(n+=" , schema: "+g.util.toQuotedString(o)+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+A+" "),n+=" } "):n+=" {} ";var f=n;n=m.pop(),!g.compositeRule&&s?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s&&(n+=" if (false) { ")}else if(g.opts.missingRefs=="ignore")g.logger.warn(h),s&&(n+=" if (true) { ");else throw new g.MissingRefError(g.baseId,o,h)}else if(d.inline){var b=g.util.copy(g);b.level++;var p="valid"+b.level;b.schema=d.schema,b.schemaPath="",b.errSchemaPath=o;var y=g.validate(b).replace(/validate\.schema/g,d.code);n+=" "+y+" ",s&&(n+=" if ("+p+") { ")}else c=d.$async===!0||g.async&&d.$async!==!1,u=d.code}if(u){var m=m||[];m.push(n),n="",g.opts.passContext?n+=" "+u+".call(this, ":n+=" "+u+"( ",n+=" "+A+", (dataPath || '')",g.errorPath!='""'&&(n+=" + "+g.errorPath);var Z=C?"data"+(C-1||""):"parentData",B=C?g.dataPathArr[C]:"parentDataProperty";n+=" , "+Z+" , "+B+", rootData) ";var G=n;if(n=m.pop(),c){if(!g.async)throw new Error("async schema referenced by sync schema");s&&(n+=" var "+l+"; "),n+=" try { await "+G+"; ",s&&(n+=" "+l+" = true; "),n+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",s&&(n+=" "+l+" = false; "),n+=" } ",s&&(n+=" if ("+l+") { ")}else n+=" if (!"+G+") { if (vErrors === null) vErrors = "+u+".errors; else vErrors = vErrors.concat("+u+".errors); errors = vErrors.length; } ",s&&(n+=" else { ")}return n},g8e=function(g,i,I){var n=" ",r=g.schema[i],C=g.schemaPath+g.util.getProperty(i),o=g.errSchemaPath+"/"+i,a=!g.opts.allErrors,s=g.util.copy(g),A="";s.level++;var l="valid"+s.level,c=s.baseId,u=!0,d=r;if(d)for(var h,m=-1,f=d.length-1;m0||h===!1:g.util.schemaHasRules(h,g.RULES.all))&&(u=!1,s.schema=h,s.schemaPath=C+"["+m+"]",s.errSchemaPath=o+"/"+m,n+=" "+g.validate(s)+" ",s.baseId=c,a&&(n+=" if ("+l+") { ",A+="}"));return a&&(u?n+=" if (true) { ":n+=" "+A.slice(0,-1)+" "),n},i8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=o.every(function(v){return g.opts.strictKeywords?typeof v=="object"&&Object.keys(v).length>0||v===!1:g.util.schemaHasRules(v,g.RULES.all)});if(f){var b=d.baseId;n+=" var "+u+" = errors; var "+c+" = false; ";var p=g.compositeRule;g.compositeRule=d.compositeRule=!0;var y=o;if(y)for(var Z,B=-1,G=y.length-1;B0||o===!1:g.util.schemaHasRules(o,g.RULES.all);if(n+="var "+u+" = errors;var "+c+";",Z){var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+m+" = false; for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var G=l+"["+f+"]";d.dataPathArr[b]=f;var v=g.validate(d);d.baseId=y,g.util.varOccurences(v,p)<2?n+=" "+g.util.varReplace(v,p,G)+" ":n+=" var "+p+" = "+G+"; "+v+" ",n+=" if ("+m+") break; } ",g.compositeRule=d.compositeRule=B,n+=" "+h+" if (!"+m+") {"}else n+=" if ("+l+".length == 0) {";var w=w||[];w.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should contain a valid item' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var V=n;return n=w.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+V+"]); ":n+=" validate.errors = ["+V+"]; return false; ":n+=" var err = "+V+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { ",Z&&(n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } "),g.opts.allErrors&&(n+=" } "),n},C8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m={},f={},b=g.opts.ownProperties;for(B in o)if(B!="__proto__"){var p=o[B],y=Array.isArray(p)?f:m;y[B]=p}n+="var "+c+" = errors;";var Z=g.errorPath;n+="var missing"+r+";";for(var B in f)if(y=f[B],y.length){if(n+=" if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),A){n+=" && ( ";var G=y;if(G)for(var v,w=-1,V=G.length-1;w0||p===!1:g.util.schemaHasRules(p,g.RULES.all))&&(n+=" "+h+" = true; if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),n+=") { ",u.schema=p,u.schemaPath=a+g.util.getProperty(B),u.errSchemaPath=s+"/"+g.util.escapeFragment(B),n+=" "+g.validate(u)+" ",u.baseId=P,n+=" } ",A&&(n+=" if ("+h+") { ",d+="}"))}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},o8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u=g.opts.$data&&o&&o.$data;u&&(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ");var d="i"+r,h="schema"+r;u||(n+=" var "+h+" = validate.schema"+a+";"),n+="var "+c+";",u&&(n+=" if (schema"+r+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+r+")) "+c+" = false; else {"),n+=""+c+" = false;for (var "+d+"=0; "+d+"<"+h+".length; "+d+"++) if (equal("+l+", "+h+"["+d+"])) { "+c+" = true; break; }",u&&(n+=" } "),n+=" if (!"+c+") { ";var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { allowedValues: schema"+r+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be equal to one of the allowed values' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",A&&(n+=" else { "),n},a8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||"");if(g.opts.format===!1)return A&&(n+=" if (true) { "),n;var c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o;var d=g.opts.unknownFormats,h=Array.isArray(d);if(c){var m="format"+r,f="isObject"+r,b="formatType"+r;n+=" var "+m+" = formats["+u+"]; var "+f+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+b+" = "+f+" && "+m+".type || 'string'; if ("+f+") { ",g.async&&(n+=" var async"+r+" = "+m+".async; "),n+=" "+m+" = "+m+".validate; } if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" (",d!="ignore"&&(n+=" ("+u+" && !"+m+" ",h&&(n+=" && self._opts.unknownFormats.indexOf("+u+") == -1 "),n+=") || "),n+=" ("+m+" && "+b+" == '"+I+"' && !(typeof "+m+" == 'function' ? ",g.async?n+=" (async"+r+" ? await "+m+"("+l+") : "+m+"("+l+")) ":n+=" "+m+"("+l+") ",n+=" : "+m+".test("+l+"))))) {"}else{var m=g.formats[o];if(!m){if(d=="ignore")return g.logger.warn('unknown format "'+o+'" ignored in schema at path "'+g.errSchemaPath+'"'),A&&(n+=" if (true) { "),n;if(h&&d.indexOf(o)>=0)return A&&(n+=" if (true) { "),n;throw new Error('unknown format "'+o+'" is used in schema at path "'+g.errSchemaPath+'"')}var f=typeof m=="object"&&!(m instanceof RegExp)&&m.validate,b=f&&m.type||"string";if(f){var p=m.async===!0;m=m.validate}if(b!=I)return A&&(n+=" if (true) { "),n;if(p){if(!g.async)throw new Error("async format in sync schema");var y="formats"+g.util.getProperty(o)+".validate";n+=" if (!(await "+y+"("+l+"))) { "}else{n+=" if (! ";var y="formats"+g.util.getProperty(o);f&&(y+=".validate"),typeof m=="function"?n+=" "+y+"("+l+") ":n+=" "+y+".test("+l+") ",n+=") { "}}var Z=Z||[];Z.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'format' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { format: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match format "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var B=n;return n=Z.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+B+"]); ":n+=" validate.errors = ["+B+"]; return false; ":n+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},A8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g);d.level++;var h="valid"+d.level,m=g.schema.then,f=g.schema.else,b=m!==void 0&&(g.opts.strictKeywords?typeof m=="object"&&Object.keys(m).length>0||m===!1:g.util.schemaHasRules(m,g.RULES.all)),p=f!==void 0&&(g.opts.strictKeywords?typeof f=="object"&&Object.keys(f).length>0||f===!1:g.util.schemaHasRules(f,g.RULES.all)),y=d.baseId;if(b||p){var Z;d.createErrors=!1,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+u+" = errors; var "+c+" = true; ";var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,n+=" "+g.validate(d)+" ",d.baseId=y,d.createErrors=!0,n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",g.compositeRule=d.compositeRule=B,b?(n+=" if ("+h+") { ",d.schema=g.schema.then,d.schemaPath=g.schemaPath+".then",d.errSchemaPath=g.errSchemaPath+"/then",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+r,n+=" var "+Z+" = 'then'; "):Z="'then'",n+=" } ",p&&(n+=" else { ")):n+=" if (!"+h+") { ",p&&(d.schema=g.schema.else,d.schemaPath=g.schemaPath+".else",d.errSchemaPath=g.errSchemaPath+"/else",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+r,n+=" var "+Z+" = 'else'; "):Z="'else'",n+=" } "),n+=" if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'if' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { failingKeyword: "+Z+" } ",g.opts.messages!==!1&&(n+=` , message: 'should match "' + `+Z+` + '" schema' `),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},s8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f="i"+r,b=d.dataLevel=g.dataLevel+1,p="data"+b,y=g.baseId;if(n+="var "+u+" = errors;var "+c+";",Array.isArray(o)){var Z=g.schema.additionalItems;if(Z===!1){n+=" "+c+" = "+l+".length <= "+o.length+"; ";var B=s;s=g.errSchemaPath+"/additionalItems",n+=" if (!"+c+") { ";var G=G||[];G.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+o.length+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have more than "+o.length+" items' "),g.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var v=n;n=G.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+v+"]); ":n+=" validate.errors = ["+v+"]; return false; ":n+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",s=B,A&&(h+="}",n+=" else { ")}var w=o;if(w){for(var V,S=-1,X=w.length-1;S0||V===!1:g.util.schemaHasRules(V,g.RULES.all)){n+=" "+m+" = true; if ("+l+".length > "+S+") { ";var W=l+"["+S+"]";d.schema=V,d.schemaPath=a+"["+S+"]",d.errSchemaPath=s+"/"+S,d.errorPath=g.util.getPathExpr(g.errorPath,S,g.opts.jsonPointers,!0),d.dataPathArr[b]=S;var R=g.validate(d);d.baseId=y,g.util.varOccurences(R,p)<2?n+=" "+g.util.varReplace(R,p,W)+" ":n+=" var "+p+" = "+W+"; "+R+" ",n+=" } ",A&&(n+=" if ("+m+") { ",h+="}")}}if(typeof Z=="object"&&(g.opts.strictKeywords?typeof Z=="object"&&Object.keys(Z).length>0||Z===!1:g.util.schemaHasRules(Z,g.RULES.all))){d.schema=Z,d.schemaPath=g.schemaPath+".additionalItems",d.errSchemaPath=g.errSchemaPath+"/additionalItems",n+=" "+m+" = true; if ("+l+".length > "+o.length+") { for (var "+f+" = "+o.length+"; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var R=g.validate(d);d.baseId=y,g.util.varOccurences(R,p)<2?n+=" "+g.util.varReplace(R,p,W)+" ":n+=" var "+p+" = "+W+"; "+R+" ",A&&(n+=" if (!"+m+") break; "),n+=" } } ",A&&(n+=" if ("+m+") { ",h+="}")}}else if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var R=g.validate(d);d.baseId=y,g.util.varOccurences(R,p)<2?n+=" "+g.util.varReplace(R,p,W)+" ":n+=" var "+p+" = "+W+"; "+R+" ",A&&(n+=" if (!"+m+") break; "),n+=" }"}return A&&(n+=" "+h+" if ("+u+" == errors) {"),n},nge=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,y,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o;var d=i=="maximum",h=d?"exclusiveMaximum":"exclusiveMinimum",m=g.schema[h],f=g.opts.$data&&m&&m.$data,b=d?"<":">",p=d?">":"<",y=void 0;if(!(c||typeof o=="number"||o===void 0))throw new Error(i+" must be number");if(!(f||m===void 0||typeof m=="number"||typeof m=="boolean"))throw new Error(h+" must be number or boolean");if(f){var Z=g.util.getData(m.$data,C,g.dataPathArr),B="exclusive"+r,G="exclType"+r,v="exclIsNumber"+r,w="op"+r,V="' + "+w+" + '";n+=" var schemaExcl"+r+" = "+Z+"; ",Z="schemaExcl"+r,n+=" var "+B+"; var "+G+" = typeof "+Z+"; if ("+G+" != 'boolean' && "+G+" != 'undefined' && "+G+" != 'number') { ";var y=h,S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: '"+h+" should be boolean' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+G+" == 'number' ? ( ("+B+" = "+u+" === undefined || "+Z+" "+b+"= "+u+") ? "+l+" "+p+"= "+Z+" : "+l+" "+p+" "+u+" ) : ( ("+B+" = "+Z+" === true) ? "+l+" "+p+"= "+u+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { var op"+r+" = "+B+" ? '"+b+"' : '"+b+"='; ",o===void 0&&(y=h,s=g.errSchemaPath+"/"+h,u=Z,c=f)}else{var v=typeof m=="number",V=b;if(v&&c){var w="'"+V+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" ( "+u+" === undefined || "+m+" "+b+"= "+u+" ? "+l+" "+p+"= "+m+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { "}else{v&&o===void 0?(B=!0,y=h,s=g.errSchemaPath+"/"+h,u=m,p+="="):(v&&(u=Math[d?"min":"max"](m,o)),m===(v?u:!0)?(B=!0,y=h,s=g.errSchemaPath+"/"+h,p+="="):(B=!1,V+="="));var w="'"+V+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+" "+p+" "+u+" || "+l+" !== "+l+") { "}}y=y||i;var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_limit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { comparison: "+w+", limit: "+u+", exclusive: "+B+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be "+V+" ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;return n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},rge=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,h,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");var d=i=="maxItems"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+".length "+d+" "+u+") { ";var h=i,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitItems")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",i=="maxItems"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" items' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},Cge=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,h,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");var d=i=="maxLength"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),g.opts.unicode===!1?n+=" "+l+".length ":n+=" ucs2length("+l+") ",n+=" "+d+" "+u+") { ";var h=i,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitLength")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be ",i=="maxLength"?n+="longer":n+="shorter",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" characters' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},oge=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,h,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");var d=i=="maxProperties"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" Object.keys("+l+").length "+d+" "+u+") { ";var h=i,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitProperties")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",i=="maxProperties"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" properties' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},l8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");n+="var division"+r+";if (",c&&(n+=" "+u+" !== undefined && ( typeof "+u+" != 'number' || "),n+=" (division"+r+" = "+l+" / "+u+", ",g.opts.multipleOfPrecision?n+=" Math.abs(Math.round(division"+r+") - division"+r+") > 1e-"+g.opts.multipleOfPrecision+" ":n+=" division"+r+" !== parseInt(division"+r+") ",n+=" ) ",c&&(n+=" ) "),n+=" ) { ";var d=d||[];d.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { multipleOf: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be multiple of ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var h=n;return n=d.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+h+"]); ":n+=" validate.errors = ["+h+"]; return false; ":n+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},c8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g);u.level++;var d="valid"+u.level;if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s,n+=" var "+c+" = errors; ";var h=g.compositeRule;g.compositeRule=u.compositeRule=!0,u.createErrors=!1;var m;u.opts.allErrors&&(m=u.opts.allErrors,u.opts.allErrors=!1),n+=" "+g.validate(u)+" ",u.createErrors=!0,m&&(u.opts.allErrors=m),g.compositeRule=u.compositeRule=h,n+=" if ("+d+") { ";var f=f||[];f.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var b=n;n=f.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+b+"]); ":n+=" validate.errors = ["+b+"]; return false; ":n+=" var err = "+b+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { errors = "+c+"; if (vErrors !== null) { if ("+c+") vErrors.length = "+c+"; else vErrors = null; } ",g.opts.allErrors&&(n+=" } ")}else n+=" var err = ",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",A&&(n+=" if (false) { ");return n},u8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=d.baseId,b="prevValid"+r,p="passingSchemas"+r;n+="var "+u+" = errors , "+b+" = false , "+c+" = false , "+p+" = null; ";var y=g.compositeRule;g.compositeRule=d.compositeRule=!0;var Z=o;if(Z)for(var B,G=-1,v=Z.length-1;G0||B===!1:g.util.schemaHasRules(B,g.RULES.all))?(d.schema=B,d.schemaPath=a+"["+G+"]",d.errSchemaPath=s+"/"+G,n+=" "+g.validate(d)+" ",d.baseId=f):n+=" var "+m+" = true; ",G&&(n+=" if ("+m+" && "+b+") { "+c+" = false; "+p+" = ["+p+", "+G+"]; } else { ",h+="}"),n+=" if ("+m+") { "+c+" = "+b+" = true; "+p+" = "+G+"; }";return g.compositeRule=d.compositeRule=y,n+=""+h+"if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { passingSchemas: "+p+" } ",g.opts.messages!==!1&&(n+=" , message: 'should match exactly one schema in oneOf' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+="} else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; }",g.opts.allErrors&&(n+=" } "),n},d8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o;var d=c?"(new RegExp("+u+"))":g.usePattern(o);n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" !"+d+".test("+l+") ) { ";var h=h||[];h.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { pattern: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match pattern "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var m=n;return n=h.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},h8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m="key"+r,f="idx"+r,b=u.dataLevel=g.dataLevel+1,p="data"+b,y="dataProperties"+r,Z=Object.keys(o||{}).filter(D),B=g.schema.patternProperties||{},G=Object.keys(B).filter(D),v=g.schema.additionalProperties,w=Z.length||G.length,V=v===!1,S=typeof v=="object"&&Object.keys(v).length,X=g.opts.removeAdditional,W=V||S||X,R=g.opts.ownProperties,H=g.baseId,k=g.schema.required;if(k&&!(g.opts.$data&&k.$data)&&k.length8)n+=" || validate.schema"+a+".hasOwnProperty("+m+") ";else{var J=Z;if(J)for(var P,te=-1,q=J.length-1;te0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){var gt=g.util.getProperty(P),We=l+gt,lt=Je&&_e.default!==void 0;u.schema=_e,u.schemaPath=a+gt,u.errSchemaPath=s+"/"+g.util.escapeFragment(P),u.errorPath=g.util.getPath(g.errorPath,P,g.opts.jsonPointers),u.dataPathArr[b]=g.util.toQuotedString(P);var Be=g.validate(u);if(u.baseId=H,g.util.varOccurences(Be,p)<2){Be=g.util.varReplace(Be,p,We);var tt=We}else{var tt=p;n+=" var "+p+" = "+We+"; "}if(lt)n+=" "+Be+" ";else{if(K&&K[P]){n+=" if ( "+tt+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = false; ";var Ie=g.errorPath,ne=s,Xe=g.util.escapeQuotes(P);g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPath(Ie,P,g.opts.jsonPointers)),s=g.errSchemaPath+"/required";var be=be||[];be.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+Xe+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+Xe+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var pe=n;n=be.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+pe+"]); ":n+=" validate.errors = ["+pe+"]; return false; ":n+=" var err = "+pe+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s=ne,g.errorPath=Ie,n+=" } else { "}else A?(n+=" if ( "+tt+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = true; } else { "):(n+=" if ("+tt+" !== undefined ",R&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=" ) { ");n+=" "+Be+" } "}}A&&(n+=" if ("+h+") { ",d+="}")}}if(G.length){var ae=G;if(ae)for(var j,ye=-1,He=ae.length-1;ye0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){u.schema=_e,u.schemaPath=g.schemaPath+".patternProperties"+g.util.getProperty(j),u.errSchemaPath=g.errSchemaPath+"/patternProperties/"+g.util.escapeFragment(j),R?n+=" "+y+" = "+y+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+y+".length; "+f+"++) { var "+m+" = "+y+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" if ("+g.usePattern(j)+".test("+m+")) { ",u.errorPath=g.util.getPathExpr(g.errorPath,m,g.opts.jsonPointers);var We=l+"["+m+"]";u.dataPathArr[b]=m;var Be=g.validate(u);u.baseId=H,g.util.varOccurences(Be,p)<2?n+=" "+g.util.varReplace(Be,p,We)+" ":n+=" var "+p+" = "+We+"; "+Be+" ",A&&(n+=" if (!"+h+") break; "),n+=" } ",A&&(n+=" else "+h+" = true; "),n+=" } ",A&&(n+=" if ("+h+") { ",d+="}")}}}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},m8e=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level;if(n+="var "+c+" = errors;",g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s;var m="key"+r,f="idx"+r,b="i"+r,p="' + "+m+" + '",y=u.dataLevel=g.dataLevel+1,Z="data"+y,B="dataProperties"+r,G=g.opts.ownProperties,v=g.baseId;G&&(n+=" var "+B+" = undefined; "),G?n+=" "+B+" = "+B+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+B+".length; "+f+"++) { var "+m+" = "+B+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" var startErrs"+r+" = errors; ";var w=m,V=g.compositeRule;g.compositeRule=u.compositeRule=!0;var S=g.validate(u);u.baseId=v,g.util.varOccurences(S,Z)<2?n+=" "+g.util.varReplace(S,Z,w)+" ":n+=" var "+Z+" = "+w+"; "+S+" ",g.compositeRule=u.compositeRule=V,n+=" if (!"+h+") { for (var "+b+"=startErrs"+r+"; "+b+"0||y===!1:g.util.schemaHasRules(y,g.RULES.all))||(h[h.length]=f)}}else var h=o;if(u||h.length){var Z=g.errorPath,B=u||h.length>=g.opts.loopRequired,G=g.opts.ownProperties;if(A)if(n+=" var missing"+r+"; ",B){u||(n+=" var "+d+" = validate.schema"+a+"; ");var v="i"+r,w="schema"+r+"["+v+"]",V="' + "+w+" + '";g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPathExpr(Z,w,g.opts.jsonPointers)),n+=" var "+c+" = true; ",u&&(n+=" if (schema"+r+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+r+")) "+c+" = false; else {"),n+=" for (var "+v+" = 0; "+v+" < "+d+".length; "+v+"++) { "+c+" = "+l+"["+d+"["+v+"]] !== undefined ",G&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", "+d+"["+v+"]) "),n+="; if (!"+c+") break; } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+V+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+V+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else{n+=" if ( ";var W=h;if(W)for(var R,v=-1,H=W.length-1;v 1) { ";var h=g.schema.items&&g.schema.items.type,m=Array.isArray(h);if(!h||h=="object"||h=="array"||m&&(h.indexOf("object")>=0||h.indexOf("array")>=0))n+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+l+"[i], "+l+"[j])) { "+c+" = false; break outer; } } } ";else{n+=" var itemIndices = {}, item; for (;i--;) { var item = "+l+"[i]; ";var f="checkDataType"+(m?"s":"");n+=" if ("+g.util[f](h,"item",g.opts.strictNumbers,!0)+") continue; ",m&&(n+=` if (typeof item == 'string') item = '"' + item; `),n+=" if (typeof itemIndices[item] == 'number') { "+c+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}n+=" } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var b=b||[];b.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { i: i, j: j } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),g.opts.verbose&&(n+=" , schema: ",u?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var p=n;n=b.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+p+"]); ":n+=" validate.errors = ["+p+"]; return false; ":n+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},b8e={$ref:t8e,allOf:g8e,anyOf:i8e,$comment:I8e,const:n8e,contains:r8e,dependencies:C8e,enum:o8e,format:a8e,if:A8e,items:s8e,maximum:nge,minimum:nge,maxItems:rge,minItems:rge,maxLength:Cge,minLength:Cge,maxProperties:oge,minProperties:oge,multipleOf:l8e,not:c8e,oneOf:u8e,pattern:d8e,properties:h8e,propertyNames:m8e,required:f8e,uniqueItems:p8e,validate:Qbe},age=b8e,Z5=K0.toHash,y8e=function(){var g=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],i=["type","$comment"],I=["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"],n=["number","integer","string","array","object","boolean","null"];return g.all=Z5(i),g.types=Z5(n),g.forEach(function(r){r.rules=r.rules.map(function(C){var o;if(typeof C=="object"){var a=Object.keys(C)[0];o=C[a],C=a,o.forEach(function(A){i.push(A),g.all[A]=!0})}i.push(C);var s=g.all[C]={keyword:C,code:age[C],implements:o};return s}),g.all.$comment={keyword:"$comment",code:age.$comment},r.type&&(g.types[r.type]=r)}),g.keywords=Z5(i.concat(I)),g.custom={},g},Age=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"],Z8e=function(e,g){for(var i=0;i{g(i,I,n),L9(i,g)}):"views"in e&&e.views.forEach(i=>L9(i,g))}function Zb(e,g){"tracks"in e?e.tracks.forEach(i=>{g(i),Zb(i,g)}):"views"in e&&e.views.forEach(i=>{g(i),Zb(i,g)})}function p0e(e,g){"tracks"in e||(g(e),e.views.forEach(i=>{p0e(i,g)}))}function b0e(e){if(Mbe(e)){const i={...e,tracks:void 0,id:void 0};return e.tracks.filter(I=>!I._invalidTrack).map(I=>Object.assign(JSON.parse(JSON.stringify(i)),I))}const g=[];return Fje(e)?e.tracks.filter(i=>!i._invalidTrack).map(i=>{if("alignment"in i)g.push({...i,_overlay:[...i.tracks],tracks:void 0,alignment:void 0});else{const I={...e,tracks:void 0,id:void 0},n=Object.assign(JSON.parse(JSON.stringify(I)),i);g.push(n)}}):g.push({...e,_overlay:[...e.tracks.filter(i=>!i._invalidTrack)],tracks:void 0,alignment:void 0}),JSON.parse(JSON.stringify(g))}function R3(e,g){if(g?(e.assembly===void 0&&(e.assembly=g.assembly),e.layout===void 0&&(e.layout=g.layout),e.orientation===void 0&&(e.orientation=g.orientation),e.static===void 0&&(e.static=g.static!==void 0?g.static:!1),e.zoomLimits===void 0&&(e.zoomLimits=g.zoomLimits),e.xDomain===void 0&&(e.xDomain=g.xDomain),e.yDomain===void 0&&(e.yDomain=g.yDomain),e.linkingId===void 0&&(e.linkingId=g.linkingId),e.centerRadius===void 0&&(e.centerRadius=g.centerRadius),e.spacing===void 0&&!("tracks"in e)&&(e.spacing=g.spacing),e.xOffset===void 0&&(e.xOffset=g.xOffset),e.yOffset===void 0&&(e.yOffset=g.yOffset),"views"in e&&"arrangement"in g&&e.arrangement===void 0&&(e.arrangement=g.arrangement),e.style=v5(g.style,e.style)):(e.assembly===void 0&&(e.assembly="hg38"),e.layout===void 0&&(e.layout="linear"),e.orientation===void 0&&(e.orientation="horizontal"),e.static===void 0&&(e.static=!1),e.zoomLimits===void 0&&(e.zoomLimits=[1,null]),e.centerRadius===void 0&&(e.centerRadius=Fbe),e.spacing===void 0&&(e.spacing=x1),"views"in e&&e.arrangement===void 0&&(e.arrangement="vertical"),e.xOffset===void 0&&(e.xOffset=0),e.yOffset===void 0&&(e.yOffset=0)),e.id||(e.id=ln()),"tracks"in e){let i=b0e(e);i=Ebe(i);const I=ln();i.forEach((n,r,C)=>{var o,a,s;if(n.id||(n.id=ln()),n.width||(n.width=Ir(n)?Qte:tje),n.height||(n.height=Ir(n)?Qte:eje),"displacement"in n)if(((o=n.displacement)==null?void 0:o.type)==="pile"&&n.row===void 0&&ut(n.x)&&n.x.field&&ut(n.xe)&&n.xe.field){const A=ln(),l=n.x.field,c=n.xe.field,u=n.displacement.padding,d={type:"displace",newField:A,boundingBox:{startField:l,endField:c,padding:u},method:"pile"};n.dataTransform||(n.dataTransform=[]),n.dataTransform=[...n.dataTransform,d],n.row={field:A,type:"nominal"}}else(a=n.displacement)==null||a.type;if(n.layout&&(n.layout=void 0),n.zoomLimits&&(n.zoomLimits=void 0),n.assembly||(n.assembly=e.assembly),n.layout||(n.layout=e.layout),n.orientation||(n.orientation=e.orientation),n.static===void 0&&(n.static=e.static!==void 0?e.static:!1),n.zoomLimits||(n.zoomLimits=e.zoomLimits),n.layout=="circular"&&NS(n)){n._invalidTrack=!0;return}if(n.style=v5(e.style,n.style),dI(n)&&(n._overlay=n._overlay.filter(A=>!("type"in A&&A.type=="dummy-track")),n._overlay.forEach(A=>{A.style=v5(n.style,A.style)})),(n.layout==="circular"||Ir(n))&&n.orientation==="vertical"&&(n.orientation="horizontal"),Ir(n)&&(n.layout="linear",(zC(n)||dI(n))&&ut(n.y)&&!n.y.domain?n.y.domain=e.yDomain:dI(n)&&n._overlay.forEach(A=>{ut(A.y)&&!A.y.domain&&(A.y.domain=e.yDomain)})),(zC(n)||dI(n))&&ut(n.x)&&!n.x.domain?n.x.domain=e.xDomain:dI(n)&&n._overlay.forEach(A=>{ut(A.x)&&!A.x.domain&&(A.x.domain=e.xDomain)}),(zC(n)||dI(n))&&ut(n.x)&&!n.x.linkingId)n.x.linkingId=(s=e.linkingId)!=null?s:I;else if(dI(n)){let A=!1;n._overlay.forEach(l=>{var c;A||ut(l.x)&&!l.x.linkingId&&(l.x.linkingId=(c=e.linkingId)!=null?c:I,A=!0)})}r===0&&(n.overlayOnPreviousTrack=!1),(r===0||r!==0&&i.slice(0,r).filter(A=>!A.overlayOnPreviousTrack).length===1&&n.overlayOnPreviousTrack===!0)&&((zC(n)||dI(n))&&ut(n.x)&&!n.x.axis?n.orientation==="vertical"?n.x.axis="left":n.x.axis="top":dI(n)&&n._overlay.forEach(A=>{ut(A.x)&&!A.x.axis&&(n.orientation==="vertical"?A.x.axis="left":A.x.axis="top")})),(zC(n)||dI(n))&&ut(n.x)&&n.x.axis&&n.x.axis!=="none"?n.orientation==="vertical"?n.x.axis==="top"?n.x.axis="left":n.x.axis==="bottom"&&(n.x.axis="right"):n.x.axis==="left"?n.x.axis="top":n.x.axis==="right"&&(n.x.axis="bottom"):dI(n)&&n._overlay.forEach(A=>{ut(A.x)&&A.x.axis&&A.x.axis!=="none"&&(n.orientation==="vertical"?A.x.axis==="top"?A.x.axis="left":A.x.axis==="bottom"&&(A.x.axis="right"):A.x.axis==="left"?A.x.axis="top":A.x.axis==="right"&&(A.x.axis="bottom"))}),r!==0&&(r===C.length-1&&C.slice(0,r+1).filter(A=>A.overlayOnPreviousTrack).lengthA.overlayOnPreviousTrack).length===C.length-r-1&&C.slice(0,r+1).filter(A=>A.overlayOnPreviousTrack).length{A.mark==="withinLink"&&A.flipY===void 0&&(A.flipY=!0)}))),n.overlayOnPreviousTrack&&C[r-1]&&(n.width=C[r-1].width,n.height=C[r-1].height,n.layout=C[r-1].layout,n.assembly=C[r-1].assembly)}),i=i.filter(n=>!n._invalidTrack),e.tracks=i}else e.views.forEach(i=>{R3(i,e)})}function B6e(e,g){return{data:{type:"vector",url:"",column:e,value:g},mark:"bar",x:{field:e,type:"genomic",axis:"top"},y:{field:g,type:"quantitative"},width:400,height:100}}function S6e(e,g,i,I){return I&&I.length<10?{data:{type:"multivec",url:"",row:e,column:g,value:i,categories:I},mark:"bar",x:{field:g,type:"genomic",axis:"top"},y:{field:i,type:"quantitative"},row:{field:e,type:"nominal",legend:!0},color:{field:e,type:"nominal"},width:400,height:100}:{data:{type:"multivec",url:"",row:e,column:g,value:i,categories:I},mark:"rect",x:{field:g,type:"genomic",axis:"top"},row:{field:e,type:"nominal",legend:!0},color:{field:i,type:"quantitative"},width:400,height:100}}function w6e(e){L9(e,(g,i,I)=>{var n,r,C,o,a;if(!(!("data"in g)||!g.data||!p7(g.data))&&!("alignment"in g)&&Dje(g))switch(g.data.type){case"vector":case"bigwig":I[i]=Object.assign(B6e((n=g.data.column)!=null?n:"position",(r=g.data.value)!=null?r:"value"),g);break;case"multivec":I[i]=Object.assign(S6e((C=g.data.row)!=null?C:"category",(o=g.data.column)!=null?o:"position",(a=g.data.value)!=null?a:"value",g.data.categories),g);break}})}const B5={chr1:248956422,chr2:242193529,chr3:198295559,chr4:190214555,chr5:181538259,chr6:170805979,chr7:159345973,chr8:145138636,chr9:138394717,chr10:133797422,chr11:135086622,chr12:133275309,chr13:114364328,chr14:107043718,chr15:101991189,chr16:90338345,chr17:83257441,chr18:80373285,chr19:58617616,chr20:64444167,chr21:46709983,chr22:50818468,chrX:156040895,chrY:57227415},S5={chr1:249250621,chr2:243199373,chr3:198022430,chr4:191154276,chr5:180915260,chr6:171115067,chr7:159138663,chr8:146364022,chr9:141213431,chr10:135534747,chr11:135006516,chr12:133851895,chr13:115169878,chr14:107349540,chr15:102531392,chr16:90354753,chr17:81195210,chr18:78077248,chr19:59128983,chr20:63025520,chr21:48129895,chr22:51304566,chrX:155270560,chrY:59373566,chrM:16571},w5={chr1:247249719,chr2:242951149,chr3:199501827,chr4:191273063,chr5:180857866,chr6:170899992,chr7:158821424,chr8:146274826,chr9:140273252,chr10:135374737,chr11:134452384,chr12:132349534,chr13:114142980,chr14:106368585,chr15:100338915,chr16:88827254,chr17:78774742,chr18:76117153,chr19:63811651,chr20:62435964,chr21:46944323,chr22:49691432,chrX:154913754,chrY:57772954,chrM:16571},R5={chr1:245522847,chr2:243018229,chr3:199505740,chr4:191411218,chr5:180857866,chr6:170975699,chr7:158628139,chr8:146274826,chr9:138429268,chr10:135413628,chr11:134452384,chr12:132449811,chr13:114142980,chr14:106368585,chr15:100338915,chr16:88827254,chr17:78774742,chr18:76117153,chr19:63811651,chr20:62435964,chr21:46944323,chr22:49554710,chrX:154824264,chrY:57701691,chrM:16571},V5={chr1:246127941,chr2:243615958,chr3:199344050,chr4:191731959,chr5:181034922,chr6:170914576,chr7:158545518,chr8:146308819,chr9:136372045,chr10:135037215,chr11:134482954,chr12:132078379,chr13:113042980,chr14:105311216,chr15:100256656,chr16:90041932,chr17:81860266,chr18:76115139,chr19:63811651,chr20:63741868,chr21:46976097,chr22:49396972,chrX:153692391,chrY:50286555,chrM:16571},W5={chr1:195471971,chr2:182113224,chr3:160039680,chr4:156508116,chr5:151834684,chr6:149736546,chr7:145441459,chr8:129401213,chr9:124595110,chr10:130694993,chr11:122082543,chr12:120129022,chr13:120421639,chr14:124902244,chr15:104043685,chr16:98207768,chr17:94987271,chr18:90702639,chr19:61431566,chrX:171031299,chrY:91744698,chrM:16299},X5={chr1:197195432,chr2:181748087,chr3:159599783,chr4:155630120,chr5:152537259,chr6:149517037,chr7:152524553,chr8:131738871,chr9:124076172,chr10:129993255,chr11:121843856,chr12:121257530,chr13:120284312,chr14:125194864,chr15:103494974,chr16:98319150,chr17:95272651,chr18:90772031,chr19:61342430,chrX:166650296,chrY:15902555,chrM:16299};function Uu(e,g,i=!1){const I=Object.entries(yi(g).interval),n={chromosome:"unknown",position:1/0},r={chromosome:"unknown",position:0};for(const C of I){const[o,a]=C,[s,A]=a;if(s<=e&&er.position&&(r.chromosome=o,r.position=A)}return i?eI.join(" ")).join(` +`),i=new Blob([g],{type:"text/tsv"});return URL.createObjectURL(i)}function yi(e){if(e&&typeof e=="string"&&e in H5)return H5[e];if(Array.isArray(e)&&e.length!==0){const g=Object.fromEntries(e);return{size:g,interval:Xl(g),total:Hl(g),path:R6e(e)}}else return H5.hg38}const bl=e=>`https://s3.amazonaws.com/gosling-lang.org/data/${e}.chrom.sizes`,H5=Object.freeze({hg38:{size:B5,interval:Xl(B5),total:Hl(B5),path:bl("hg38")},hg19:{size:S5,interval:Xl(S5),total:Hl(S5),path:bl("hg19")},hg18:{size:w5,interval:Xl(w5),total:Hl(w5),path:bl("hg18")},hg17:{size:R5,interval:Xl(R5),total:Hl(R5),path:bl("hg17")},hg16:{size:V5,interval:Xl(V5),total:Hl(V5),path:bl("hg16")},mm10:{size:W5,interval:Xl(W5),total:Hl(W5),path:bl("mm10")},mm9:{size:X5,interval:Xl(X5),total:Hl(X5),path:bl("mm9")},unknown:{size:{chr:Number.MAX_VALUE},interval:{chr:[0,Number.MAX_VALUE]},total:Number.MAX_VALUE,path:bl("hg38")}});function V6e(e){switch(e){case"hg19":return"OHJakQICQD6gTD7skx4EWA";case"mm10":return"QDutvmyiSrec5nX4pA5WGQ";case"mm9":return"GUm5aBiLRCyz2PsBea7Yzg";case"hg38":default:return"P0PLbQMwTYGy-5uPIQid7A"}}function Xl(e){const g={};return Object.keys(e).reduce((i,I)=>(g[I]=[i,i+e[I]],i+e[I]),0),g}function Hl(e){return Object.values(e).reduce((g,i)=>g+i,0)}function W6e(e){const[g,i]=e.split(":");if(i){const[I,n]=i.split("-").map(r=>+r.replace(/,/g,""));if(!Number.isNaN(I)&&!Number.isNaN(n))return{chromosome:g,start:I,end:n}}return{chromosome:g}}class V7{constructor(g,i,I){this.chromosome=g,this.start=i,this.end=I}static fromString(g){const i=W6e(g);return new V7(i.chromosome,i.start,i.end)}toAbsoluteCoordinates(g,i=0){const I=yi(g),n=I.size[this.chromosome],r=I.interval[this.chromosome];if(n===void 0||r===void 0)throw new Error(`Chromosome name ${this.chromosome} is not valid`);let{start:C,end:o}=this;(C===void 0||o===void 0)&&([C,o]=[1,n]);const a=r[0];return[C+a-i,o+a+i]}}function y0e(e,[g,i],I){const{x:n,xe:r,x1:C,x1e:o}=I,a=[n,r,C,o].filter(s=>s);return e.filter(s=>{if(a.length===0)return!0;if(a.length===1){const A=+s[a[0]];return typeof A=="number"&&g+s[u]).filter(u=>!isNaN(u)),l=Math.min(...A),c=Math.max(...A);return g<=c&&l<=i}})}t7(e=>e.pos).left;function V3(e,g,i){return Array.isArray(g)||(i?e=e.replace(i,"chr"):e.includes("chr")||(e=`chr${e}`)),e}class Z0e extends Kbe{constructor(){super(...arguments),q4e(this,"read",async(g,i=0,I,n=0,r={})=>{const{headers:C={},signal:o,overrides:a={}}=r;I<1/0?C.range=`bytes=${n}-${n+I}`:I===1/0&&n!==0&&(C.range=`bytes=${n}-`);const s={...this.baseOverrides,...a,headers:{...C,...a.headers,...this.baseOverrides.headers},method:"GET",redirect:"follow",mode:"cors",signal:o},A=await this.fetch(this.url,s);if(!A.ok)throw new Error(`HTTP ${A.status} ${A.statusText} ${this.url}`);if(A.status===200||A.status===206){const l=await this.getBufferFromResponse(A),c=l.copy(g,i,0,Math.min(I,l.length)),u=A.headers.get("content-range"),d=/\/(\d+)$/.exec(u||"");return d&&d[1]&&(this._stat={size:parseInt(d[1],10)}),{bytesRead:c,buffer:g}}throw new Error(`HTTP ${A.status} fetching ${this.url}`)})}}window.higlassTracks=window.higlassTracks||{};window.higlassTracksByType=window.higlassTracksByType||{};window.higlassDataFetchersByType=window.higlassDataFetchersByType||{};const cge=()=>Math.random().toString(36).substring(2,8),X6e=(e,{force:g=!1}={})=>{let i=cge();for(;window.higlassTracks[i];)i=cge();e.name=i,window.higlassTracks[e.name]=e,window.higlassTracksByType[e.config.type]&&!g?console.warn(`A track with the same type (${e.config.type}) was already registered. To override it, set force to true.`):window.higlassTracksByType[e.config.type]=e},H6e=(e,{force:g=!1}={})=>{window.higlassDataFetchersByType[e.config.type]&&!g?console.warn(`A data fetcher with the same type (${e.config.type}) was already registered. To override it, set force to true.`):window.higlassDataFetchersByType[e.config.type]=e},Ru=(e,g={})=>{const{pluginType:i="track"}=g;i==="track"?X6e(e,g):i==="dataFetcher"&&H6e(e,g)};var YS={},W3={exports:{}},uge=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof window.msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto);if(uge){var dge=new Uint8Array(16);W3.exports=function(){return uge(dge),dge}}else{var hge=new Array(16);W3.exports=function(){for(var g=0,i;g<16;g++)g&3||(i=Math.random()*4294967296),hge[g]=i>>>((g&3)<<3)&255;return hge}}var T6e=W3.exports,G0e=[];for(var eV=0;eV<256;++eV)G0e[eV]=(eV+256).toString(16).substr(1);function N6e(e,g){var i=g||0,I=G0e;return[I[e[i++]],I[e[i++]],I[e[i++]],I[e[i++]],"-",I[e[i++]],I[e[i++]],"-",I[e[i++]],I[e[i++]],"-",I[e[i++]],I[e[i++]],"-",I[e[i++]],I[e[i++]],I[e[i++]],I[e[i++]],I[e[i++]],I[e[i++]]].join("")}var k6e=N6e,Y6e=T6e,K6e=k6e;function F6e(e,g,i){var I=g&&i||0;typeof e=="string"&&(g=e==="binary"?new Array(16):null,e=null),e=e||{};var n=e.random||(e.rng||Y6e)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,g)for(var r=0;r<16;++r)g[I+r]=n[r];return g||K6e(n)}var D6e=F6e,X3=[],v0e={};for(var Km=0;Km<256;Km++)X3[Km]=(Km+256).toString(16).substr(1),v0e[X3[Km]]=Km;function x6e(e,g,i){var I=g&&i||0,n=0;for(g=g||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,function(r){n<16&&(g[I+n++]=v0e[r])});n<16;)g[I+n++]=0;return g}function E6e(e,g){var i=g||0,I=X3;return I[e[i++]]+I[e[i++]]+I[e[i++]]+I[e[i++]]+"-"+I[e[i++]]+I[e[i++]]+"-"+I[e[i++]]+I[e[i++]]+"-"+I[e[i++]]+I[e[i++]]+"-"+I[e[i++]]+I[e[i++]]+I[e[i++]]+I[e[i++]]+I[e[i++]]+I[e[i++]]}var M6e={parse:x6e,unparse:E6e},B0e=D6e,S0e=M6e;YS.encode=function(e){var g=S0e.parse(e),i=new Buffer(g).toString("base64"),I=i.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return I};YS.decode=function(e){var g=e.replace(/-/g,"+").replace(/_/g,"/")+"==";return S0e.unparse(new Buffer(g,"base64"))};YS.v4=function(){var e=B0e(null,new Buffer(16)),g=e.toString("base64"),i=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return i};YS.nice=function(){var e=B0e(null,new Buffer(16));e[0]=e[0]&127;var g=e.toString("base64"),i=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return i};var z6e=YS;const P6e=jc(z6e);var J6e=function(){function e(g,i){for(var I=0;I1?i-1:0),n=1;ni;){if(I-i>600){var r=I-i+1,C=g-i+1,o=Math.log(r),a=.5*Math.exp(2*o/3),s=.5*Math.sqrt(o*a*(r-a)/r)*(C-r/2<0?-1:1),A=Math.max(i,Math.floor(g-C*a/r+s)),l=Math.min(I,Math.floor(g+(r-C)*a/r+s));w0e(e,g,A,l,n)}var c=e[g],u=i,d=I;for(_y(e,i,g),n(e[I],c)>0&&_y(e,i,I);u0;)d--}n(e[i],c)===0?_y(e,i,d):(d++,_y(e,d,I)),d<=g&&(i=d+1),g<=d&&(I=d-1)}}function _y(e,g,i){var I=e[g];e[g]=e[i],e[i]=I}function tqe(e,g){return eg?1:0}class gqe{constructor(g=9){this._maxEntries=Math.max(4,g),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(g){let i=this.data;const I=[];if(!gV(g,i))return I;const n=this.toBBox,r=[];for(;i;){for(let C=0;C=0&&r[i].children.length>this._maxEntries;)this._split(r,i),i--;this._adjustParentBBoxes(n,r,i)}_split(g,i){const I=g[i],n=I.children.length,r=this._minEntries;this._chooseSplitAxis(I,r,n);const C=this._chooseSplitIndex(I,r,n),o=ff(I.children.splice(C,I.children.length-C));o.height=I.height,o.leaf=I.leaf,Fm(I,this.toBBox),Fm(o,this.toBBox),i?g[i-1].children.push(o):this._splitRoot(I,o)}_splitRoot(g,i){this.data=ff([g,i]),this.data.height=g.height+1,this.data.leaf=!1,Fm(this.data,this.toBBox)}_chooseSplitIndex(g,i,I){let n,r=1/0,C=1/0;for(let o=i;o<=I-i;o++){const a=MZ(g,0,o,this.toBBox),s=MZ(g,o,I,this.toBBox),A=Cqe(a,s),l=T5(a)+T5(s);A=i;s--){const A=g.children[s];zZ(o,g.leaf?r(A):A),a+=tV(o)}return a}_adjustParentBBoxes(g,i,I){for(let n=I;n>=0;n--)zZ(i[n],g)}_condense(g){for(let i=g.length-1,I;i>=0;i--)g[i].children.length===0?i>0?(I=g[i-1].children,I.splice(I.indexOf(g[i]),1)):this.clear():Fm(g[i],this.toBBox)}}function iqe(e,g,i){if(!i)return g.indexOf(e);for(let I=0;I=e.minX&&g.maxY>=e.minY}function ff(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function mge(e,g,i,I,n){const r=[g,i];for(;r.length;){if(i=r.pop(),g=r.pop(),i-g<=I)continue;const C=g+Math.ceil((i-g)/I/2)*I;eqe(e,C,g,i,n),r.push(g,C,C,i)}}function oqe(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function U9(e,g){if((i=(e=g?e.toExponential(g-1):e.toExponential()).indexOf("e"))<0)return null;var i,I=e.slice(0,i);return[I.length>1?I[0]+I.slice(2):I,+e.slice(i+1)]}function T3(e){return e=U9(Math.abs(e)),e?e[1]:NaN}function aqe(e,g){return function(i,I){for(var n=i.length,r=[],C=0,o=e[0],a=0;n>0&&o>0&&(a+o+1>I&&(o=Math.max(1,I-a)),r.push(i.substring(n-=o,n+o)),!((a+=o+1)>I));)o=e[C=(C+1)%e.length];return r.reverse().join(g)}}function Aqe(e){return function(g){return g.replace(/[0-9]/g,function(i){return e[+i]})}}var sqe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function N3(e){if(!(g=sqe.exec(e)))throw new Error("invalid format: "+e);var g;return new W7({fill:g[1],align:g[2],sign:g[3],symbol:g[4],zero:g[5],width:g[6],comma:g[7],precision:g[8]&&g[8].slice(1),trim:g[9],type:g[10]})}N3.prototype=W7.prototype;function W7(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}W7.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function lqe(e){e:for(var g=e.length,i=1,I=-1,n;i0&&(I=0);break}return I>0?e.slice(0,I)+e.slice(n+1):e}var R0e;function cqe(e,g){var i=U9(e,g);if(!i)return e+"";var I=i[0],n=i[1],r=n-(R0e=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,C=I.length;return r===C?I:r>C?I+new Array(r-C+1).join("0"):r>0?I.slice(0,r)+"."+I.slice(r):"0."+new Array(1-r).join("0")+U9(e,Math.max(0,g+r-1))[0]}function fge(e,g){var i=U9(e,g);if(!i)return e+"";var I=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+I:I.length>n+1?I.slice(0,n+1)+"."+I.slice(n+1):I+new Array(n-I.length+2).join("0")}const pge={"%":(e,g)=>(e*100).toFixed(g),b:e=>Math.round(e).toString(2),c:e=>e+"",d:oqe,e:(e,g)=>e.toExponential(g),f:(e,g)=>e.toFixed(g),g:(e,g)=>e.toPrecision(g),o:e=>Math.round(e).toString(8),p:(e,g)=>fge(e*100,g),r:fge,s:cqe,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function bge(e){return e}var yge=Array.prototype.map,Zge=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function uqe(e){var g=e.grouping===void 0||e.thousands===void 0?bge:aqe(yge.call(e.grouping,Number),e.thousands+""),i=e.currency===void 0?"":e.currency[0]+"",I=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",r=e.numerals===void 0?bge:Aqe(yge.call(e.numerals,String)),C=e.percent===void 0?"%":e.percent+"",o=e.minus===void 0?"−":e.minus+"",a=e.nan===void 0?"NaN":e.nan+"";function s(l){l=N3(l);var c=l.fill,u=l.align,d=l.sign,h=l.symbol,m=l.zero,f=l.width,b=l.comma,p=l.precision,y=l.trim,Z=l.type;Z==="n"?(b=!0,Z="g"):pge[Z]||(p===void 0&&(p=12),y=!0,Z="g"),(m||c==="0"&&u==="=")&&(m=!0,c="0",u="=");var B=h==="$"?i:h==="#"&&/[boxX]/.test(Z)?"0"+Z.toLowerCase():"",G=h==="$"?I:/[%p]/.test(Z)?C:"",v=pge[Z],w=/[defgprs%]/.test(Z);p=p===void 0?6:/[gprs]/.test(Z)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p));function V(S){var X=B,W=G,R,H,k;if(Z==="c")W=v(S)+W,S="";else{S=+S;var K=S<0||1/S<0;if(S=isNaN(S)?a:v(Math.abs(S),p),y&&(S=lqe(S)),K&&+S==0&&d!=="+"&&(K=!1),X=(K?d==="("?d:o:d==="-"||d==="("?"":d)+X,W=(Z==="s"?Zge[8+R0e/3]:"")+W+(K&&d==="("?")":""),w){for(R=-1,H=S.length;++Rk||k>57){W=(k===46?n+S.slice(R+1):S.slice(R))+W,S=S.slice(0,R);break}}}b&&!m&&(S=g(S,1/0));var D=X.length+S.length+W.length,J=D>1)+X+S+W+J.slice(D);break;default:S=J+X+S+W;break}return r(S)}return V.toString=function(){return l+""},V}function A(l,c){var u=s((l=N3(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(T3(c)/3)))*3,h=Math.pow(10,-d),m=Zge[8+d/3];return function(f){return u(h*f)+m}}return{format:s,formatPrefix:A}}var iV,V0e,W0e;dqe({thousands:",",grouping:[3],currency:["$",""]});function dqe(e){return iV=uqe(e),V0e=iV.format,W0e=iV.formatPrefix,iV}function hqe(e,g){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(T3(g)/3)))*3-T3(Math.abs(e)))}const k3=Math.PI,Y3=2*k3,Qu=1e-6,mqe=Y3-Qu;function K3(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function X0e(){return new K3}K3.prototype=X0e.prototype={constructor:K3,moveTo:function(e,g){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+g)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(e,g){this._+="L"+(this._x1=+e)+","+(this._y1=+g)},quadraticCurveTo:function(e,g,i,I){this._+="Q"+ +e+","+ +g+","+(this._x1=+i)+","+(this._y1=+I)},bezierCurveTo:function(e,g,i,I,n,r){this._+="C"+ +e+","+ +g+","+ +i+","+ +I+","+(this._x1=+n)+","+(this._y1=+r)},arcTo:function(e,g,i,I,n){e=+e,g=+g,i=+i,I=+I,n=+n;var r=this._x1,C=this._y1,o=i-e,a=I-g,s=r-e,A=C-g,l=s*s+A*A;if(n<0)throw new Error("negative radius: "+n);if(this._x1===null)this._+="M"+(this._x1=e)+","+(this._y1=g);else if(l>Qu)if(!(Math.abs(A*o-a*s)>Qu)||!n)this._+="L"+(this._x1=e)+","+(this._y1=g);else{var c=i-r,u=I-C,d=o*o+a*a,h=c*c+u*u,m=Math.sqrt(d),f=Math.sqrt(l),b=n*Math.tan((k3-Math.acos((d+l-h)/(2*m*f)))/2),p=b/f,y=b/m;Math.abs(p-1)>Qu&&(this._+="L"+(e+p*s)+","+(g+p*A)),this._+="A"+n+","+n+",0,0,"+ +(A*c>s*u)+","+(this._x1=e+y*o)+","+(this._y1=g+y*a)}},arc:function(e,g,i,I,n,r){e=+e,g=+g,i=+i,r=!!r;var C=i*Math.cos(I),o=i*Math.sin(I),a=e+C,s=g+o,A=1^r,l=r?I-n:n-I;if(i<0)throw new Error("negative radius: "+i);this._x1===null?this._+="M"+a+","+s:(Math.abs(this._x1-a)>Qu||Math.abs(this._y1-s)>Qu)&&(this._+="L"+a+","+s),i&&(l<0&&(l=l%Y3+Y3),l>mqe?this._+="A"+i+","+i+",0,1,"+A+","+(e-C)+","+(g-o)+"A"+i+","+i+",0,1,"+A+","+(this._x1=a)+","+(this._y1=s):l>Qu&&(this._+="A"+i+","+i+",0,"+ +(l>=k3)+","+A+","+(this._x1=e+i*Math.cos(n))+","+(this._y1=g+i*Math.sin(n))))},rect:function(e,g,i,I){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+g)+"h"+ +i+"v"+ +I+"h"+-i+"Z"},toString:function(){return this._}};function yl(e){return function(){return e}}var Gge=Math.abs,vn=Math.atan2,Vu=Math.cos,fqe=Math.max,k5=Math.min,Xa=Math.sin,ip=Math.sqrt,vr=1e-12,XB=Math.PI,Q9=XB/2,pqe=2*XB;function bqe(e){return e>1?0:e<-1?XB:Math.acos(e)}function vge(e){return e>=1?Q9:e<=-1?-Q9:Math.asin(e)}function yqe(e){return e.innerRadius}function Zqe(e){return e.outerRadius}function Gqe(e){return e.startAngle}function vqe(e){return e.endAngle}function Bqe(e){return e&&e.padAngle}function Sqe(e,g,i,I,n,r,C,o){var a=i-e,s=I-g,A=C-n,l=o-r,c=l*a-A*s;if(!(c*cR*R+H*H&&(v=V,w=S),{cx:v,cy:w,x01:-A,y01:-l,x11:v*(n/Z-1),y11:w*(n/Z-1)}}function wqe(){var e=yqe,g=Zqe,i=yl(0),I=null,n=Gqe,r=vqe,C=Bqe,o=null;function a(){var s,A,l=+e.apply(this,arguments),c=+g.apply(this,arguments),u=n.apply(this,arguments)-Q9,d=r.apply(this,arguments)-Q9,h=Gge(d-u),m=d>u;if(o||(o=s=X0e()),cvr))o.moveTo(0,0);else if(h>pqe-vr)o.moveTo(c*Vu(u),c*Xa(u)),o.arc(0,0,c,u,d,!m),l>vr&&(o.moveTo(l*Vu(d),l*Xa(d)),o.arc(0,0,l,d,u,m));else{var f=u,b=d,p=u,y=d,Z=h,B=h,G=C.apply(this,arguments)/2,v=G>vr&&(I?+I.apply(this,arguments):ip(l*l+c*c)),w=k5(Gge(c-l)/2,+i.apply(this,arguments)),V=w,S=w,X,W;if(v>vr){var R=vge(v/l*Xa(G)),H=vge(v/c*Xa(G));(Z-=R*2)>vr?(R*=m?1:-1,p+=R,y-=R):(Z=0,p=y=(u+d)/2),(B-=H*2)>vr?(H*=m?1:-1,f+=H,b-=H):(B=0,f=b=(u+d)/2)}var k=c*Vu(f),K=c*Xa(f),D=l*Vu(y),J=l*Xa(y);if(w>vr){var P=c*Vu(b),te=c*Xa(b),q=l*Vu(p),$=l*Xa(p),j;if(hvr?S>vr?(X=IV(q,$,k,K,c,S,m),W=IV(P,te,D,J,c,S,m),o.moveTo(X.cx+X.x01,X.cy+X.y01),Svr)||!(Z>vr)?o.lineTo(D,J):V>vr?(X=IV(D,J,P,te,l,-V,m),W=IV(k,K,q,$,l,-V,m),o.lineTo(X.cx+X.x01,X.cy+X.y01),V({events:{},emit(e,...g){let i=this.events[e]||[];for(let I=0,n=i.length;I{var I;this.events[e]=(I=this.events[e])==null?void 0:I.filter(n=>g!==n)}}});var H0e={},go={},Ih={};Object.defineProperty(Ih,"__esModule",{value:!0});Ih.DefaultSerializer=Ih.extendSerializer=void 0;function Vqe(e,g){const i=e.deserialize.bind(e),I=e.serialize.bind(e);return{deserialize(n){return g.deserialize(n,i)},serialize(n){return g.serialize(n,I)}}}Ih.extendSerializer=Vqe;const Bge={deserialize(e){return Object.assign(Error(e.message),{name:e.name,stack:e.stack})},serialize(e){return{__error_marker:"$$error",message:e.message,name:e.name,stack:e.stack}}},Wqe=e=>e&&typeof e=="object"&&"__error_marker"in e&&e.__error_marker==="$$error";Ih.DefaultSerializer={deserialize(e){return Wqe(e)?Bge.deserialize(e):e},serialize(e){return e instanceof Error?Bge.serialize(e):e}};Object.defineProperty(go,"__esModule",{value:!0});go.serialize=go.deserialize=go.registerSerializer=void 0;const T0e=Ih;let j9=T0e.DefaultSerializer;function Xqe(e){j9=T0e.extendSerializer(j9,e)}go.registerSerializer=Xqe;function Hqe(e){return j9.deserialize(e)}go.deserialize=Hqe;function Tqe(e){return j9.serialize(e)}go.serialize=Tqe;var N0e={},Vs={},Gb={};Object.defineProperty(Gb,"__esModule",{value:!0});Gb.getBundleURL=Gb.getBaseURL=void 0;let Y5;function Nqe(){return Y5||(Y5=kqe()),Y5}Gb.getBundleURL=Nqe;function kqe(){try{throw new Error}catch(e){const g=(""+e.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);if(g)return k0e(g[0])}return"/"}function k0e(e){return(""+e).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/,"$1")+"/"}Gb.getBaseURL=k0e;Object.defineProperty(Vs,"__esModule",{value:!0});Vs.isWorkerRuntime=Vs.getWorkerImplementation=Vs.defaultPoolSize=void 0;const Sge=Gb;Vs.defaultPoolSize=typeof navigator<"u"&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:4;const wge=e=>/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e);function Rge(e){const g=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(g)}function Yqe(){if(typeof Worker>"u")return class{constructor(){throw Error("No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers.")}};class e extends Worker{constructor(I,n){var r,C;typeof I=="string"&&n&&n._baseURL?I=new URL(I,n._baseURL):typeof I=="string"&&!wge(I)&&Sge.getBundleURL().match(/^file:\/\//i)&&(I=new URL(I,Sge.getBundleURL().replace(/\/[^\/]+$/,"/")),(!((r=n==null?void 0:n.CORSWorkaround)!==null&&r!==void 0)||r)&&(I=Rge(`importScripts(${JSON.stringify(I)});`))),typeof I=="string"&&wge(I)&&(!((C=n==null?void 0:n.CORSWorkaround)!==null&&C!==void 0)||C)&&(I=Rge(`importScripts(${JSON.stringify(I)});`)),super(I,n)}}class g extends e{constructor(I,n){const r=window.URL.createObjectURL(I);super(r,n)}static fromText(I,n){const r=new window.Blob([I],{type:"text/javascript"});return new g(r,n)}}return{blob:g,default:e}}let K5;function Kqe(){return K5||(K5=Yqe()),K5}Vs.getWorkerImplementation=Kqe;function Fqe(){const e=typeof self<"u"&&typeof Window<"u"&&self instanceof Window;return!!(typeof self<"u"&&self.postMessage&&!e)}Vs.isWorkerRuntime=Fqe;var Y0e={},F3={exports:{}},F5,Vge;function Dqe(){if(Vge)return F5;Vge=1;var e=1e3,g=e*60,i=g*60,I=i*24,n=I*7,r=I*365.25;F5=function(A,l){l=l||{};var c=typeof A;if(c==="string"&&A.length>0)return C(A);if(c==="number"&&isFinite(A))return l.long?a(A):o(A);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(A))};function C(A){if(A=String(A),!(A.length>100)){var l=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(A);if(l){var c=parseFloat(l[1]),u=(l[2]||"ms").toLowerCase();switch(u){case"years":case"year":case"yrs":case"yr":case"y":return c*r;case"weeks":case"week":case"w":return c*n;case"days":case"day":case"d":return c*I;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*g;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}function o(A){var l=Math.abs(A);return l>=I?Math.round(A/I)+"d":l>=i?Math.round(A/i)+"h":l>=g?Math.round(A/g)+"m":l>=e?Math.round(A/e)+"s":A+"ms"}function a(A){var l=Math.abs(A);return l>=I?s(A,l,I,"day"):l>=i?s(A,l,i,"hour"):l>=g?s(A,l,g,"minute"):l>=e?s(A,l,e,"second"):A+" ms"}function s(A,l,c,u){var d=l>=c*1.5;return Math.round(A/c)+" "+u+(d?"s":"")}return F5}function xqe(e){i.debug=i,i.default=i,i.coerce=a,i.disable=r,i.enable=n,i.enabled=C,i.humanize=Dqe(),i.destroy=s,Object.keys(e).forEach(A=>{i[A]=e[A]}),i.names=[],i.skips=[],i.formatters={};function g(A){let l=0;for(let c=0;c{if(B==="%%")return"%";y++;const v=i.formatters[G];if(typeof v=="function"){const w=m[y];B=v.call(f,w),m.splice(y,1),y--}return B}),i.formatArgs.call(f,m),(f.log||i.log).apply(f,m)}return h.namespace=A,h.useColors=i.useColors(),h.color=i.selectColor(A),h.extend=I,h.destroy=i.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>c!==null?c:(u!==i.namespaces&&(u=i.namespaces,d=i.enabled(A)),d),set:m=>{c=m}}),typeof i.init=="function"&&i.init(h),h}function I(A,l){const c=i(this.namespace+(typeof l>"u"?":":l)+A);return c.log=this.log,c}function n(A){i.save(A),i.namespaces=A,i.names=[],i.skips=[];let l;const c=(typeof A=="string"?A:"").split(/[\s,]+/),u=c.length;for(l=0;l"-"+l)].join(",");return i.enable(""),A}function C(A){if(A[A.length-1]==="*")return!0;let l,c;for(l=0,c=i.skips.length;l{let a=!1;return()=>{a||(a=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),g.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function i(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function I(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const s="color: "+this.color;a.splice(1,0,s,"color: inherit");let A=0,l=0;a[0].replace(/%[a-zA-Z%]/g,c=>{c!=="%%"&&(A++,c==="%c"&&(l=A))}),a.splice(l,0,s)}g.log=console.debug||console.log||(()=>{});function n(a){try{a?g.storage.setItem("debug",a):g.storage.removeItem("debug")}catch{}}function r(){let a;try{a=g.storage.getItem("debug")}catch{}return!a&&typeof process<"u"&&"env"in process&&(a={}.DEBUG),a}function C(){try{return localStorage}catch{}}e.exports=Eqe(g);const{formatters:o}=e.exports;o.j=function(a){try{return JSON.stringify(a)}catch(s){return"[UnexpectedJSONParseError]: "+s.message}}})(F3,F3.exports);var X7=F3.exports,Mqe=globalThis&&globalThis.__awaiter||function(e,g,i,I){function n(r){return r instanceof i?r:new i(function(C){C(r)})}return new(i||(i=Promise))(function(r,C){function o(A){try{s(I.next(A))}catch(l){C(l)}}function a(A){try{s(I.throw(A))}catch(l){C(l)}}function s(A){A.done?r(A.value):n(A.value).then(o,a)}s((I=I.apply(e,g||[])).next())})};class UT{constructor(g){this._baseObserver=g,this._pendingPromises=new Set}complete(){Promise.all(this._pendingPromises).then(()=>this._baseObserver.complete()).catch(g=>this._baseObserver.error(g))}error(g){this._baseObserver.error(g)}schedule(g){const i=Promise.all(this._pendingPromises),I=[],n=C=>I.push(C),r=Promise.resolve().then(()=>Mqe(this,void 0,void 0,function*(){yield i,yield g(n),this._pendingPromises.delete(r);for(const C of I)this._baseObserver.next(C)})).catch(C=>{this._pendingPromises.delete(r),this._baseObserver.error(C)});this._pendingPromises.add(r)}}const K0e=()=>typeof Symbol=="function",KS=e=>K0e()&&!!Symbol[e],H7=e=>KS(e)?Symbol[e]:"@@"+e;KS("asyncIterator")||(Symbol.asyncIterator=Symbol.asyncIterator||Symbol.for("Symbol.asyncIterator"));const zqe=H7("iterator"),D3=H7("observable"),F0e=H7("species");function $9(e,g){const i=e[g];if(i!=null){if(typeof i!="function")throw new TypeError(i+" is not a function");return i}}function Ly(e){let g=e.constructor;return g!==void 0&&(g=g[F0e],g===null&&(g=void 0)),g!==void 0?g:nh}function Pqe(e){return e instanceof nh}function vb(e){vb.log?vb.log(e):setTimeout(()=>{throw e},0)}function z1(e){Promise.resolve().then(()=>{try{e()}catch(g){vb(g)}})}function D0e(e){const g=e._cleanup;if(g!==void 0&&(e._cleanup=void 0,!!g))try{if(typeof g=="function")g();else{const i=$9(g,"unsubscribe");i&&i.call(g)}}catch(i){vb(i)}}function x3(e){e._observer=void 0,e._queue=void 0,e._state="closed"}function Jqe(e){const g=e._queue;if(g){e._queue=void 0,e._state="ready";for(const i of g)if(x0e(e,i.type,i.value),e._state==="closed")break}}function x0e(e,g,i){e._state="running";const I=e._observer;try{const n=I?$9(I,g):void 0;switch(g){case"next":n&&n.call(I,i);break;case"error":if(x3(e),n)n.call(I,i);else throw i;break;case"complete":x3(e),n&&n.call(I);break}}catch(n){vb(n)}e._state==="closed"?D0e(e):e._state==="running"&&(e._state="ready")}function D5(e,g,i){if(e._state!=="closed"){if(e._state==="buffering"){e._queue=e._queue||[],e._queue.push({type:g,value:i});return}if(e._state!=="ready"){e._state="buffering",e._queue=[{type:g,value:i}],z1(()=>Jqe(e));return}x0e(e,g,i)}}let Oqe=class{constructor(g,i){this._cleanup=void 0,this._observer=g,this._queue=void 0,this._state="initializing";const I=new _qe(this);try{this._cleanup=i.call(void 0,I)}catch(n){I.error(n)}this._state==="initializing"&&(this._state="ready")}get closed(){return this._state==="closed"}unsubscribe(){this._state!=="closed"&&(x3(this),D0e(this))}};class _qe{constructor(g){this._subscription=g}get closed(){return this._subscription._state==="closed"}next(g){D5(this._subscription,"next",g)}error(g){D5(this._subscription,"error",g)}complete(){D5(this._subscription,"complete")}}let nh=class PZ{constructor(g){if(!(this instanceof PZ))throw new TypeError("Observable cannot be called as a function");if(typeof g!="function")throw new TypeError("Observable initializer must be a function");this._subscriber=g}subscribe(g,i,I){return(typeof g!="object"||g===null)&&(g={next:g,error:i,complete:I}),new Oqe(g,this._subscriber)}pipe(g,...i){let I=this;for(const n of[g,...i])I=n(I);return I}tap(g,i,I){const n=typeof g!="object"||g===null?{next:g,error:i,complete:I}:g;return new PZ(r=>this.subscribe({next(C){n.next&&n.next(C),r.next(C)},error(C){n.error&&n.error(C),r.error(C)},complete(){n.complete&&n.complete(),r.complete()},start(C){n.start&&n.start(C)}}))}forEach(g){return new Promise((i,I)=>{if(typeof g!="function"){I(new TypeError(g+" is not a function"));return}function n(){r.unsubscribe(),i(void 0)}const r=this.subscribe({next(C){try{g(C,n)}catch(o){I(o),r.unsubscribe()}},error(C){I(C)},complete(){i(void 0)}})})}map(g){if(typeof g!="function")throw new TypeError(g+" is not a function");const i=Ly(this);return new i(I=>this.subscribe({next(n){let r=n;try{r=g(n)}catch(C){return I.error(C)}I.next(r)},error(n){I.error(n)},complete(){I.complete()}}))}filter(g){if(typeof g!="function")throw new TypeError(g+" is not a function");const i=Ly(this);return new i(I=>this.subscribe({next(n){try{if(!g(n))return}catch(r){return I.error(r)}I.next(n)},error(n){I.error(n)},complete(){I.complete()}}))}reduce(g,i){if(typeof g!="function")throw new TypeError(g+" is not a function");const I=Ly(this),n=arguments.length>1;let r=!1,C=i;return new I(o=>this.subscribe({next(a){const s=!r;if(r=!0,!s||n)try{C=g(C,a)}catch(A){return o.error(A)}else C=a},error(a){o.error(a)},complete(){if(!r&&!n)return o.error(new TypeError("Cannot reduce an empty sequence"));o.next(C),o.complete()}}))}concat(...g){const i=Ly(this);return new i(I=>{let n,r=0;function C(o){n=o.subscribe({next(a){I.next(a)},error(a){I.error(a)},complete(){r===g.length?(n=void 0,I.complete()):C(i.from(g[r++]))}})}return C(this),()=>{n&&(n.unsubscribe(),n=void 0)}})}flatMap(g){if(typeof g!="function")throw new TypeError(g+" is not a function");const i=Ly(this);return new i(I=>{const n=[],r=this.subscribe({next(o){let a;if(g)try{a=g(o)}catch(A){return I.error(A)}else a=o;const s=i.from(a).subscribe({next(A){I.next(A)},error(A){I.error(A)},complete(){const A=n.indexOf(s);A>=0&&n.splice(A,1),C()}});n.push(s)},error(o){I.error(o)},complete(){C()}});function C(){r.closed&&n.length===0&&I.complete()}return()=>{n.forEach(o=>o.unsubscribe()),r.unsubscribe()}})}[D3](){return this}static from(g){const i=typeof this=="function"?this:PZ;if(g==null)throw new TypeError(g+" is not an object");const I=$9(g,D3);if(I){const n=I.call(g);if(Object(n)!==n)throw new TypeError(n+" is not an object");return Pqe(n)&&n.constructor===i?n:new i(r=>n.subscribe(r))}if(KS("iterator")){const n=$9(g,zqe);if(n)return new i(r=>{z1(()=>{if(!r.closed){for(const C of n.call(g))if(r.next(C),r.closed)return;r.complete()}})})}if(Array.isArray(g))return new i(n=>{z1(()=>{if(!n.closed){for(const r of g)if(n.next(r),n.closed)return;n.complete()}})});throw new TypeError(g+" is not observable")}static of(...g){const i=typeof this=="function"?this:PZ;return new i(I=>{z1(()=>{if(!I.closed){for(const n of g)if(I.next(n),I.closed)return;I.complete()}})})}static get[F0e](){return this}};K0e()&&Object.defineProperty(nh,Symbol("extensions"),{value:{symbol:D3,hostReportError:vb},configurable:!0});const jh=nh;function $h(e){typeof e=="function"?e():e&&typeof e.unsubscribe=="function"&&e.unsubscribe()}var Lqe=globalThis&&globalThis.__awaiter||function(e,g,i,I){function n(r){return r instanceof i?r:new i(function(C){C(r)})}return new(i||(i=Promise))(function(r,C){function o(A){try{s(I.next(A))}catch(l){C(l)}}function a(A){try{s(I.throw(A))}catch(l){C(l)}}function s(A){A.done?r(A.value):n(A.value).then(o,a)}s((I=I.apply(e,g||[])).next())})};function Uqe(e){return g=>new jh(i=>{const I=new UT(i),n=g.subscribe({complete(){I.complete()},error(r){I.error(r)},next(r){I.schedule(C=>Lqe(this,void 0,void 0,function*(){(yield e(r))&&C(r)}))}});return()=>$h(n)})}function Qqe(e){return e&&KS("asyncIterator")&&e[Symbol.asyncIterator]}function jqe(e){return e&&KS("iterator")&&e[Symbol.iterator]}var $qe=globalThis&&globalThis.__awaiter||function(e,g,i,I){function n(r){return r instanceof i?r:new i(function(C){C(r)})}return new(i||(i=Promise))(function(r,C){function o(A){try{s(I.next(A))}catch(l){C(l)}}function a(A){try{s(I.throw(A))}catch(l){C(l)}}function s(A){A.done?r(A.value):n(A.value).then(o,a)}s((I=I.apply(e,g||[])).next())})},qqe=globalThis&&globalThis.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var g=e[Symbol.asyncIterator],i;return g?g.call(e):(e=typeof __values=="function"?__values(e):e[Symbol.iterator](),i={},I("next"),I("throw"),I("return"),i[Symbol.asyncIterator]=function(){return this},i);function I(r){i[r]=e[r]&&function(C){return new Promise(function(o,a){C=e[r](C),n(o,a,C.done,C.value)})}}function n(r,C,o,a){Promise.resolve(a).then(function(s){r({value:s,done:o})},C)}};function eet(e){return g=>new jh(i=>{const I=new UT(i),n=g.subscribe({complete(){I.complete()},error(r){I.error(r)},next(r){I.schedule(C=>$qe(this,void 0,void 0,function*(){var o,a;const s=yield e(r);if(jqe(s)||Qqe(s))try{for(var A=qqe(s),l;l=yield A.next(),!l.done;){const c=l.value;C(c)}}catch(c){o={error:c}}finally{try{l&&!l.done&&(a=A.return)&&(yield a.call(A))}finally{if(o)throw o.error}}else s.map(c=>C(c))}))}});return()=>$h(n)})}function tet(e){return new nh(g=>{let i=0;const I=setInterval(()=>{g.next(i++)},e);return()=>clearInterval(I)})}var get=globalThis&&globalThis.__awaiter||function(e,g,i,I){function n(r){return r instanceof i?r:new i(function(C){C(r)})}return new(i||(i=Promise))(function(r,C){function o(A){try{s(I.next(A))}catch(l){C(l)}}function a(A){try{s(I.throw(A))}catch(l){C(l)}}function s(A){A.done?r(A.value):n(A.value).then(o,a)}s((I=I.apply(e,g||[])).next())})};function iet(e){return g=>new jh(i=>{const I=new UT(i),n=g.subscribe({complete(){I.complete()},error(r){I.error(r)},next(r){I.schedule(C=>get(this,void 0,void 0,function*(){const o=yield e(r);C(o)}))}});return()=>$h(n)})}function Iet(...e){return e.length===0?nh.from([]):new nh(g=>{let i=0;const I=e.map(r=>r.subscribe({error(C){g.error(C),n()},next(C){g.next(C)},complete(){++i===e.length&&(g.complete(),n())}})),n=()=>{I.forEach(r=>$h(r))};return n})}class net extends jh{constructor(){super(g=>(this._observers.add(g),()=>this._observers.delete(g))),this._observers=new Set}next(g){for(const i of this._observers)i.next(g)}error(g){for(const i of this._observers)i.error(g)}complete(){for(const g of this._observers)g.complete()}}const E0e=net;function ret(e){const g=new E0e;let i,I=0;return new jh(n=>{i||(i=e.subscribe(g));const r=g.subscribe(n);return I++,()=>{I--,r.unsubscribe(),I===0&&($h(i),i=void 0)}})}var Cet=globalThis&&globalThis.__awaiter||function(e,g,i,I){function n(r){return r instanceof i?r:new i(function(C){C(r)})}return new(i||(i=Promise))(function(r,C){function o(A){try{s(I.next(A))}catch(l){C(l)}}function a(A){try{s(I.throw(A))}catch(l){C(l)}}function s(A){A.done?r(A.value):n(A.value).then(o,a)}s((I=I.apply(e,g||[])).next())})};function oet(e,g){return i=>new jh(I=>{let n,r=0;const C=new UT(I),o=i.subscribe({complete(){C.complete()},error(a){C.error(a)},next(a){C.schedule(s=>Cet(this,void 0,void 0,function*(){n=yield e(r===0?typeof g>"u"?a:g:n,a,r++),s(n)}))}});return()=>$h(o)})}const aet=Object.freeze(Object.defineProperty({__proto__:null,Observable:jh,Subject:E0e,filter:Uqe,flatMap:eet,interval:tet,map:iet,merge:Iet,multicast:ret,scan:oet,unsubscribe:$h},Symbol.toStringTag,{value:"Module"})),QT=nL(aet);var jT={};Object.defineProperty(jT,"__esModule",{value:!0});jT.allSettled=void 0;function Aet(e){return Promise.all(e.map(g=>{const i=r=>({status:"fulfilled",value:r}),I=r=>({status:"rejected",reason:r}),n=Promise.resolve(g);try{return n.then(i,I)}catch(r){return Promise.reject(r)}}))}jT.allSettled=Aet;var M0e={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.PoolEventType=void 0,function(g){g.initialized="initialized",g.taskCanceled="taskCanceled",g.taskCompleted="taskCompleted",g.taskFailed="taskFailed",g.taskQueued="taskQueued",g.taskQueueDrained="taskQueueDrained",g.taskStart="taskStart",g.terminated="terminated"}(e.PoolEventType||(e.PoolEventType={}))})(M0e);var FS={},Nr={};Object.defineProperty(Nr,"__esModule",{value:!0});Nr.$worker=Nr.$transferable=Nr.$terminate=Nr.$events=Nr.$errors=void 0;Nr.$errors=Symbol("thread.errors");Nr.$events=Symbol("thread.events");Nr.$terminate=Symbol("thread.terminate");Nr.$transferable=Symbol("thread.transferable");Nr.$worker=Symbol("thread.worker");Object.defineProperty(FS,"__esModule",{value:!0});FS.Thread=void 0;const x5=Nr;function Wge(e){throw Error(e)}FS.Thread={errors(e){return e[x5.$errors]||Wge("Error observable not found. Make sure to pass a thread instance as returned by the spawn() promise.")},events(e){return e[x5.$events]||Wge("Events observable not found. Make sure to pass a thread instance as returned by the spawn() promise.")},terminate(e){return e[x5.$terminate]()}};(function(e){var g=Zi&&Zi.__awaiter||function(f,b,p,y){function Z(B){return B instanceof p?B:new p(function(G){G(B)})}return new(p||(p=Promise))(function(B,G){function v(S){try{V(y.next(S))}catch(X){G(X)}}function w(S){try{V(y.throw(S))}catch(X){G(X)}}function V(S){S.done?B(S.value):Z(S.value).then(v,w)}V((y=y.apply(f,b||[])).next())})},i=Zi&&Zi.__importDefault||function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(e,"__esModule",{value:!0}),e.Pool=e.Thread=e.PoolEventType=void 0;const I=i(X7),n=QT,r=jT,C=Vs,o=M0e;Object.defineProperty(e,"PoolEventType",{enumerable:!0,get:function(){return o.PoolEventType}});const a=FS;Object.defineProperty(e,"Thread",{enumerable:!0,get:function(){return a.Thread}});let s=1;function A(f){const b=[];for(let p=0;psetTimeout(b,f))}function c(f,b){return f.reduce((p,y)=>[...p,...b(y)],[])}function u(f){return f.replace(/\W/g," ").trim().replace(/\s+/g,"-")}function d(f,b){return A(b).map(()=>({init:f(),runningTasks:[]}))}class h{constructor(b,p){this.eventSubject=new n.Subject,this.initErrors=[],this.isClosing=!1,this.nextTaskID=1,this.taskQueue=[];const y=typeof p=="number"?{size:p}:p||{},{size:Z=C.defaultPoolSize}=y;this.debug=I.default(`threads:pool:${u(y.name||String(s++))}`),this.options=y,this.workers=d(b,Z),this.eventObservable=n.multicast(n.Observable.from(this.eventSubject)),Promise.all(this.workers.map(B=>B.init)).then(()=>this.eventSubject.next({type:o.PoolEventType.initialized,size:this.workers.length}),B=>{this.debug("Error while initializing pool worker:",B),this.eventSubject.error(B),this.initErrors.push(B)})}findIdlingWorker(){const{concurrency:b=1}=this.options;return this.workers.find(p=>p.runningTasks.lengthg(this,void 0,void 0,function*(){const Z=()=>{b.runningTasks=b.runningTasks.filter(B=>B!==y)};yield l(0);try{yield this.runPoolTask(b,p)}finally{Z(),this.isClosing||this.scheduleWork()}}))();b.runningTasks.push(y)})}scheduleWork(){this.debug("Attempt de-queueing a task in order to run it...");const b=this.findIdlingWorker();if(!b)return;const p=this.taskQueue.shift();if(!p){this.debug("Task queue is empty"),this.eventSubject.next({type:o.PoolEventType.taskQueueDrained});return}this.run(b,p)}taskCompletion(b){return new Promise((p,y)=>{const Z=this.events().subscribe(B=>{B.type===o.PoolEventType.taskCompleted&&B.taskID===b?(Z.unsubscribe(),p(B.returnValue)):B.type===o.PoolEventType.taskFailed&&B.taskID===b?(Z.unsubscribe(),y(B.error)):B.type===o.PoolEventType.terminated&&(Z.unsubscribe(),y(Error("Pool has been terminated before task was run.")))})})}settled(b=!1){return g(this,void 0,void 0,function*(){const p=()=>c(this.workers,B=>B.runningTasks),y=[],Z=this.eventObservable.subscribe(B=>{B.type===o.PoolEventType.taskFailed&&y.push(B.error)});return this.initErrors.length>0?Promise.reject(this.initErrors[0]):b&&this.taskQueue.length===0?(yield r.allSettled(p()),y):(yield new Promise((B,G)=>{const v=this.eventObservable.subscribe({next(w){w.type===o.PoolEventType.taskQueueDrained&&(v.unsubscribe(),B(void 0))},error:G})}),yield r.allSettled(p()),Z.unsubscribe(),y)})}completed(b=!1){return g(this,void 0,void 0,function*(){const p=this.settled(b),y=new Promise((B,G)=>{const v=this.eventObservable.subscribe({next(w){w.type===o.PoolEventType.taskQueueDrained?(v.unsubscribe(),B(p)):w.type===o.PoolEventType.taskFailed&&(v.unsubscribe(),G(w.error))},error:G})}),Z=yield Promise.race([p,y]);if(Z.length>0)throw Z[0]})}events(){return this.eventObservable}queue(b){const{maxQueuedJobs:p=1/0}=this.options;if(this.isClosing)throw Error("Cannot schedule pool tasks after terminate() has been called.");if(this.initErrors.length>0)throw this.initErrors[0];const y=this.nextTaskID++,Z=this.taskCompletion(y);Z.catch(G=>{this.debug(`Task #${y} errored:`,G)});const B={id:y,run:b,cancel:()=>{this.taskQueue.indexOf(B)!==-1&&(this.taskQueue=this.taskQueue.filter(G=>G!==B),this.eventSubject.next({type:o.PoolEventType.taskCanceled,taskID:B.id}))},then:Z.then.bind(Z)};if(this.taskQueue.length>=p)throw Error(`Maximum number of pool tasks queued. Refusing to queue another one. +This usually happens for one of two reasons: We are either at peak workload right now or some tasks just won't finish, thus blocking the pool.`);return this.debug(`Queueing task #${B.id}...`),this.taskQueue.push(B),this.eventSubject.next({type:o.PoolEventType.taskQueued,taskID:B.id}),this.scheduleWork(),B}terminate(b){return g(this,void 0,void 0,function*(){this.isClosing=!0,b||(yield this.completed(!0)),this.eventSubject.next({type:o.PoolEventType.terminated,remainingQueue:[...this.taskQueue]}),this.eventSubject.complete(),yield Promise.all(this.workers.map(p=>g(this,void 0,void 0,function*(){return a.Thread.terminate(yield p.init)})))})}}h.EventType=o.PoolEventType;function m(f,b){return new h(f,b)}m.EventType=o.PoolEventType,e.Pool=m})(Y0e);var $T={},qT={};Object.defineProperty(qT,"__esModule",{value:!0});qT.createPromiseWithResolver=void 0;const set=()=>{};function cet(){let e=!1,g,i=set;return[new Promise(r=>{e?r(g):i=r}),r=>{e=!0,g=r,i(g)}]}qT.createPromiseWithResolver=cet;var z0e={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WorkerEventType=void 0,function(g){g.internalError="internalError",g.message="message",g.termination="termination"}(e.WorkerEventType||(e.WorkerEventType={}))})(z0e);var Bb={},eN={};Object.defineProperty(eN,"__esModule",{value:!0});eN.ObservablePromise=void 0;const uet=QT,det=()=>{},het=e=>e,Xge=e=>Promise.resolve().then(e);function met(e){throw e}function fet(e){return e&&typeof e.then=="function"}class T7 extends uet.Observable{constructor(g){super(i=>{const I=this,n=Object.assign(Object.assign({},i),{complete(){i.complete(),I.onCompletion()},error(r){i.error(r),I.onError(r)},next(r){i.next(r),I.onNext(r)}});try{return this.initHasRun=!0,g(n)}catch(r){n.error(r)}}),this.initHasRun=!1,this.fulfillmentCallbacks=[],this.rejectionCallbacks=[],this.firstValueSet=!1,this.state="pending"}onNext(g){this.firstValueSet||(this.firstValue=g,this.firstValueSet=!0)}onError(g){this.state="rejected",this.rejection=g;for(const i of this.rejectionCallbacks)Xge(()=>i(g))}onCompletion(){this.state="fulfilled";for(const g of this.fulfillmentCallbacks)Xge(()=>g(this.firstValue))}then(g,i){const I=g||het,n=i||met;let r=!1;return new Promise((C,o)=>{const a=A=>{if(!r){r=!0;try{C(n(A))}catch(l){o(l)}}},s=A=>{try{C(I(A))}catch(l){a(l)}};if(this.initHasRun||this.subscribe({error:a}),this.state==="fulfilled")return C(I(this.firstValue));if(this.state==="rejected")return r=!0,C(n(this.rejection));this.fulfillmentCallbacks.push(s),this.rejectionCallbacks.push(a)})}catch(g){return this.then(void 0,g)}finally(g){const i=g||det;return this.then(I=>(i(),I),()=>i())}static from(g){return fet(g)?new T7(i=>{const I=r=>{i.next(r),i.complete()},n=r=>{i.error(r)};g.then(I,n)}):super.from(g)}}eN.ObservablePromise=T7;var xs={};Object.defineProperty(xs,"__esModule",{value:!0});xs.Transfer=xs.isTransferDescriptor=void 0;const P0e=Nr;function pet(e){return!(!e||typeof e!="object")}function bet(e){return e&&typeof e=="object"&&e[P0e.$transferable]}xs.isTransferDescriptor=bet;function yet(e,g){if(!g){if(!pet(e))throw Error();g=[e]}return{[P0e.$transferable]:!0,send:e,transferables:g}}xs.Transfer=yet;var N7={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WorkerMessageType=e.MasterMessageType=void 0,function(g){g.cancel="cancel",g.run="run"}(e.MasterMessageType||(e.MasterMessageType={})),function(g){g.error="error",g.init="init",g.result="result",g.running="running",g.uncaughtError="uncaughtError"}(e.WorkerMessageType||(e.WorkerMessageType={}))})(N7);var Zet=Zi&&Zi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Bb,"__esModule",{value:!0});Bb.createProxyModule=Bb.createProxyFunction=void 0;const Get=Zet(X7),J0e=QT,OG=go,Hge=eN,vet=xs,DS=N7,O0e=Get.default("threads:master:messages");let Bet=1;const wet=e=>Array.from(new Set(e)),Ret=e=>e&&e.type===DS.WorkerMessageType.error,Vet=e=>e&&e.type===DS.WorkerMessageType.result,Wet=e=>e&&e.type===DS.WorkerMessageType.running;function Xet(e,g){return new J0e.Observable(i=>{let I;const n=r=>{if(O0e("Message from worker:",r.data),!(!r.data||r.data.uid!==g)){if(Wet(r.data))I=r.data.resultType;else if(Vet(r.data))I==="promise"?(typeof r.data.payload<"u"&&i.next(OG.deserialize(r.data.payload)),i.complete(),e.removeEventListener("message",n)):(r.data.payload&&i.next(OG.deserialize(r.data.payload)),r.data.complete&&(i.complete(),e.removeEventListener("message",n)));else if(Ret(r.data)){const C=OG.deserialize(r.data.error);i.error(C),e.removeEventListener("message",n)}}};return e.addEventListener("message",n),()=>{if(I==="observable"||!I){const r={type:DS.MasterMessageType.cancel,uid:g};e.postMessage(r)}e.removeEventListener("message",n)}})}function Het(e){if(e.length===0)return{args:[],transferables:[]};const g=[],i=[];for(const I of e)vet.isTransferDescriptor(I)?(g.push(OG.serialize(I.send)),i.push(...I.transferables)):g.push(OG.serialize(I));return{args:g,transferables:i.length===0?i:wet(i)}}function _0e(e,g){return(...i)=>{const I=Bet++,{args:n,transferables:r}=Het(i),C={type:DS.MasterMessageType.run,uid:I,method:g,args:n};O0e("Sending command to run function to worker:",C);try{e.postMessage(C,r)}catch(o){return Hge.ObservablePromise.from(Promise.reject(o))}return Hge.ObservablePromise.from(J0e.multicast(Xet(e,I)))}}Bb.createProxyFunction=_0e;function Tet(e,g){const i={};for(const I of g)i[I]=_0e(e,I);return i}Bb.createProxyModule=Tet;var k7=Zi&&Zi.__awaiter||function(e,g,i,I){function n(r){return r instanceof i?r:new i(function(C){C(r)})}return new(i||(i=Promise))(function(r,C){function o(A){try{s(I.next(A))}catch(l){C(l)}}function a(A){try{s(I.throw(A))}catch(l){C(l)}}function s(A){A.done?r(A.value):n(A.value).then(o,a)}s((I=I.apply(e,g||[])).next())})},Net=Zi&&Zi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty($T,"__esModule",{value:!0});$T.spawn=void 0;const Y7=Net(X7),ket=QT,Yet=go,Ket=qT,nV=Nr,P1=z0e,Tge=Bb,Fet=Y7.default("threads:master:messages"),Det=Y7.default("threads:master:spawn"),L0e=Y7.default("threads:master:thread-utils"),xet=e=>e&&e.type==="init",Eet=e=>e&&e.type==="uncaughtError",Met=typeof process<"u"&&{}.THREADS_WORKER_INIT_TIMEOUT?Number.parseInt({}.THREADS_WORKER_INIT_TIMEOUT,10):1e4;function zet(e,g,i){return k7(this,void 0,void 0,function*(){let I;const n=new Promise((C,o)=>{I=setTimeout(()=>o(Error(i)),g)}),r=yield Promise.race([e,n]);return clearTimeout(I),r})}function Pet(e){return new Promise((g,i)=>{const I=n=>{Fet("Message from worker before finishing initialization:",n.data),xet(n.data)?(e.removeEventListener("message",I),g(n.data)):Eet(n.data)&&(e.removeEventListener("message",I),i(Yet.deserialize(n.data.error)))};e.addEventListener("message",I)})}function Jet(e,g){return new ket.Observable(i=>{const I=r=>{const C={type:P1.WorkerEventType.message,data:r.data};i.next(C)},n=r=>{L0e("Unhandled promise rejection event in thread:",r);const C={type:P1.WorkerEventType.internalError,error:Error(r.reason)};i.next(C)};e.addEventListener("message",I),e.addEventListener("unhandledrejection",n),g.then(()=>{const r={type:P1.WorkerEventType.termination};e.removeEventListener("message",I),e.removeEventListener("unhandledrejection",n),i.next(r),i.complete()})})}function Oet(e){const[g,i]=Ket.createPromiseWithResolver();return{terminate:()=>k7(this,void 0,void 0,function*(){L0e("Terminating worker"),yield e.terminate(),i()}),termination:g}}function Nge(e,g,i,I){const n=i.filter(r=>r.type===P1.WorkerEventType.internalError).map(r=>r.error);return Object.assign(e,{[nV.$errors]:n,[nV.$events]:i,[nV.$terminate]:I,[nV.$worker]:g})}function _et(e,g){return k7(this,void 0,void 0,function*(){Det("Initializing new thread");const i=g&&g.timeout?g.timeout:Met,n=(yield zet(Pet(e),i,`Timeout: Did not receive an init message from worker after ${i}ms. Make sure the worker calls expose().`)).exposed,{termination:r,terminate:C}=Oet(e),o=Jet(e,r);if(n.type==="function"){const a=Tge.createProxyFunction(e);return Nge(a,e,o,C)}else if(n.type==="module"){const a=Tge.createProxyModule(e,n.methods);return Nge(a,e,o,C)}else{const a=n.type;throw Error(`Worker init message states unexpected type of expose(): ${a}`)}})}$T.spawn=_et;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Worker=e.BlobWorker=e.isWorkerRuntime=e.Thread=e.spawn=e.Pool=void 0;const g=Vs;Object.defineProperty(e,"isWorkerRuntime",{enumerable:!0,get:function(){return g.isWorkerRuntime}});var i=Y0e;Object.defineProperty(e,"Pool",{enumerable:!0,get:function(){return i.Pool}});var I=$T;Object.defineProperty(e,"spawn",{enumerable:!0,get:function(){return I.spawn}});var n=FS;Object.defineProperty(e,"Thread",{enumerable:!0,get:function(){return n.Thread}}),e.BlobWorker=g.getWorkerImplementation().blob,e.Worker=g.getWorkerImplementation().default})(N0e);var U0e={},Let=e=>e?typeof Symbol.observable=="symbol"&&typeof e[Symbol.observable]=="function"?e===e[Symbol.observable]():typeof e["@@observable"]=="function"?e===e["@@observable"]():!1:!1,K7={};Object.defineProperty(K7,"__esModule",{value:!0});const Uet=function(){const g=typeof self<"u"&&typeof Window<"u"&&self instanceof Window;return!!(typeof self<"u"&&self.postMessage&&!g)},Qet=function(g,i){self.postMessage(g,i)},jet=function(g){const i=n=>{g(n.data)},I=()=>{self.removeEventListener("message",i)};return self.addEventListener("message",i),I};K7.default={isWorkerRuntime:Uet,postMessageToMaster:Qet,subscribeToMasterMessages:jet};(function(e){var g=Zi&&Zi.__awaiter||function(w,V,S,X){function W(R){return R instanceof S?R:new S(function(H){H(R)})}return new(S||(S=Promise))(function(R,H){function k(J){try{D(X.next(J))}catch(P){H(P)}}function K(J){try{D(X.throw(J))}catch(P){H(P)}}function D(J){J.done?R(J.value):W(J.value).then(k,K)}D((X=X.apply(w,V||[])).next())})},i=Zi&&Zi.__importDefault||function(w){return w&&w.__esModule?w:{default:w}};Object.defineProperty(e,"__esModule",{value:!0}),e.expose=e.isWorkerRuntime=e.Transfer=e.registerSerializer=void 0;const I=i(Let),n=go,r=xs,C=N7,o=i(K7);var a=go;Object.defineProperty(e,"registerSerializer",{enumerable:!0,get:function(){return a.registerSerializer}});var s=xs;Object.defineProperty(e,"Transfer",{enumerable:!0,get:function(){return s.Transfer}}),e.isWorkerRuntime=o.default.isWorkerRuntime;let A=!1;const l=new Map,c=w=>w&&w.type===C.MasterMessageType.cancel,u=w=>w&&w.type===C.MasterMessageType.run,d=w=>I.default(w)||h(w);function h(w){return w&&typeof w=="object"&&typeof w.subscribe=="function"}function m(w){return r.isTransferDescriptor(w)?{payload:w.send,transferables:w.transferables}:{payload:w,transferables:void 0}}function f(){const w={type:C.WorkerMessageType.init,exposed:{type:"function"}};o.default.postMessageToMaster(w)}function b(w){const V={type:C.WorkerMessageType.init,exposed:{type:"module",methods:w}};o.default.postMessageToMaster(V)}function p(w,V){const{payload:S,transferables:X}=m(V),W={type:C.WorkerMessageType.error,uid:w,error:n.serialize(S)};o.default.postMessageToMaster(W,X)}function y(w,V,S){const{payload:X,transferables:W}=m(S),R={type:C.WorkerMessageType.result,uid:w,complete:V?!0:void 0,payload:X};o.default.postMessageToMaster(R,W)}function Z(w,V){const S={type:C.WorkerMessageType.running,uid:w,resultType:V};o.default.postMessageToMaster(S)}function B(w){try{const V={type:C.WorkerMessageType.uncaughtError,error:n.serialize(w)};o.default.postMessageToMaster(V)}catch(V){console.error(`Not reporting uncaught error back to master thread as it occured while reporting an uncaught error already. +Latest error:`,V,` +Original error:`,w)}}function G(w,V,S){return g(this,void 0,void 0,function*(){let X;try{X=V(...S)}catch(R){return p(w,R)}const W=d(X)?"observable":"promise";if(Z(w,W),d(X)){const R=X.subscribe(H=>y(w,!1,n.serialize(H)),H=>{p(w,n.serialize(H)),l.delete(w)},()=>{y(w,!0),l.delete(w)});l.set(w,R)}else try{const R=yield X;y(w,!0,n.serialize(R))}catch(R){p(w,n.serialize(R))}})}function v(w){if(!o.default.isWorkerRuntime())throw Error("expose() called in the master thread.");if(A)throw Error("expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.");if(A=!0,typeof w=="function")o.default.subscribeToMasterMessages(V=>{u(V)&&!V.method&&G(V.uid,w,V.args.map(n.deserialize))}),f();else if(typeof w=="object"&&w){o.default.subscribeToMasterMessages(S=>{u(S)&&S.method&&G(S.uid,w[S.method],S.args.map(n.deserialize))});const V=Object.keys(w).filter(S=>typeof w[S]=="function");b(V)}else throw Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${w}`);o.default.subscribeToMasterMessages(V=>{if(c(V)){const S=V.uid,X=l.get(S);X&&(X.unsubscribe(),l.delete(S))}})}e.expose=v,typeof self<"u"&&typeof self.addEventListener=="function"&&o.default.isWorkerRuntime()&&(self.addEventListener("error",w=>{setTimeout(()=>B(w.error||w),250)}),self.addEventListener("unhandledrejection",w=>{const V=w.reason;V&&typeof V.message=="string"&&setTimeout(()=>B(V),250)})),typeof process<"u"&&typeof process.on=="function"&&o.default.isWorkerRuntime()&&(process.on("uncaughtException",w=>{setTimeout(()=>B(w),250)}),process.on("unhandledRejection",w=>{w&&typeof w.message=="string"&&setTimeout(()=>B(w),250)}))})(U0e);(function(e){var g=Zi&&Zi.__createBinding||(Object.create?function(o,a,s,A){A===void 0&&(A=s),Object.defineProperty(o,A,{enumerable:!0,get:function(){return a[s]}})}:function(o,a,s,A){A===void 0&&(A=s),o[A]=a[s]}),i=Zi&&Zi.__exportStar||function(o,a){for(var s in o)s!=="default"&&!Object.prototype.hasOwnProperty.call(a,s)&&g(a,o,s)};Object.defineProperty(e,"__esModule",{value:!0}),e.Transfer=e.DefaultSerializer=e.expose=e.registerSerializer=void 0;var I=go;Object.defineProperty(e,"registerSerializer",{enumerable:!0,get:function(){return I.registerSerializer}}),i(N0e,e);var n=U0e;Object.defineProperty(e,"expose",{enumerable:!0,get:function(){return n.expose}});var r=Ih;Object.defineProperty(e,"DefaultSerializer",{enumerable:!0,get:function(){return r.DefaultSerializer}});var C=xs;Object.defineProperty(e,"Transfer",{enumerable:!0,get:function(){return C.Transfer}})})(H0e);const Iu=jc(H0e);Iu.registerSerializer;const tN=Iu.spawn;Iu.BlobWorker;Iu.DefaultSerializer;Iu.Pool;Iu.Thread;Iu.Transfer;Iu.Worker;class $et extends Map{constructor(g={}){if(super(),!(g.maxSize&&g.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");if(typeof g.maxAge=="number"&&g.maxAge===0)throw new TypeError("`maxAge` must be a number greater than 0");this.maxSize=g.maxSize,this.maxAge=g.maxAge||Number.POSITIVE_INFINITY,this.onEviction=g.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_emitEvictions(g){if(typeof this.onEviction=="function")for(const[i,I]of g)this.onEviction(i,I.value)}_deleteIfExpired(g,i){return typeof i.expiry=="number"&&i.expiry<=Date.now()?(typeof this.onEviction=="function"&&this.onEviction(g,i.value),this.delete(g)):!1}_getOrDeleteIfExpired(g,i){if(this._deleteIfExpired(g,i)===!1)return i.value}_getItemValue(g,i){return i.expiry?this._getOrDeleteIfExpired(g,i):i.value}_peek(g,i){const I=i.get(g);return this._getItemValue(g,I)}_set(g,i){this.cache.set(g,i),this._size++,this._size>=this.maxSize&&(this._size=0,this._emitEvictions(this.oldCache),this.oldCache=this.cache,this.cache=new Map)}_moveToRecent(g,i){this.oldCache.delete(g),this._set(g,i)}*_entriesAscending(){for(const g of this.oldCache){const[i,I]=g;this.cache.has(i)||this._deleteIfExpired(i,I)===!1&&(yield g)}for(const g of this.cache){const[i,I]=g;this._deleteIfExpired(i,I)===!1&&(yield g)}}get(g){if(this.cache.has(g)){const i=this.cache.get(g);return this._getItemValue(g,i)}if(this.oldCache.has(g)){const i=this.oldCache.get(g);if(this._deleteIfExpired(g,i)===!1)return this._moveToRecent(g,i),i.value}}set(g,i,{maxAge:I=this.maxAge}={}){const n=typeof I=="number"&&I!==Number.POSITIVE_INFINITY?Date.now()+I:void 0;return this.cache.has(g)?this.cache.set(g,{value:i,expiry:n}):this._set(g,{value:i,expiry:n}),this}has(g){return this.cache.has(g)?!this._deleteIfExpired(g,this.cache.get(g)):this.oldCache.has(g)?!this._deleteIfExpired(g,this.oldCache.get(g)):!1}peek(g){if(this.cache.has(g))return this._peek(g,this.cache);if(this.oldCache.has(g))return this._peek(g,this.oldCache)}delete(g){const i=this.cache.delete(g);return i&&this._size--,this.oldCache.delete(g)||i}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}resize(g){if(!(g&&g>0))throw new TypeError("`maxSize` must be a number greater than 0");const i=[...this._entriesAscending()],I=i.length-g;I<0?(this.cache=new Map(i),this.oldCache=new Map,this._size=i.length):(I>0&&this._emitEvictions(i.slice(0,I)),this.oldCache=new Map(i.slice(I)),this.cache=new Map,this._size=0),this.maxSize=g}*keys(){for(const[g]of this)yield g}*values(){for(const[,g]of this)yield g}*[Symbol.iterator](){for(const g of this.cache){const[i,I]=g;this._deleteIfExpired(i,I)===!1&&(yield[i,I.value])}for(const g of this.oldCache){const[i,I]=g;this.cache.has(i)||this._deleteIfExpired(i,I)===!1&&(yield[i,I.value])}}*entriesDescending(){let g=[...this.cache];for(let i=g.length-1;i>=0;--i){const I=g[i],[n,r]=I;this._deleteIfExpired(n,r)===!1&&(yield[n,r.value])}g=[...this.oldCache];for(let i=g.length-1;i>=0;--i){const I=g[i],[n,r]=I;this.cache.has(n)||this._deleteIfExpired(n,r)===!1&&(yield[n,r.value])}}*entriesAscending(){for(const[g,i]of this._entriesAscending())yield[g,i.value]}get size(){if(!this._size)return this.oldCache.size;let g=0;for(const i of this.oldCache.keys())this.cache.has(i)||g++;return Math.min(this._size+g,this.maxSize)}entries(){return this.entriesAscending()}forEach(g,i=this){for(const[I,n]of this.entriesAscending())g.call(i,n,I,this)}get[Symbol.toStringTag](){return JSON.stringify([...this.entriesAscending()])}}var kge={},E5={},M5=34,Uy=10,z5=13;function Q0e(e){return new Function("d","return {"+e.map(function(g,i){return JSON.stringify(g)+": d["+i+'] || ""'}).join(",")+"}")}function qet(e,g){var i=Q0e(e);return function(I,n){return g(i(I),n,e)}}function Yge(e){var g=Object.create(null),i=[];return e.forEach(function(I){for(var n in I)n in g||i.push(g[n]=n)}),i}function Br(e,g){var i=e+"",I=i.length;return I9999?"+"+Br(e,6):Br(e,4)}function ttt(e){var g=e.getUTCHours(),i=e.getUTCMinutes(),I=e.getUTCSeconds(),n=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":ett(e.getUTCFullYear())+"-"+Br(e.getUTCMonth()+1,2)+"-"+Br(e.getUTCDate(),2)+(n?"T"+Br(g,2)+":"+Br(i,2)+":"+Br(I,2)+"."+Br(n,3)+"Z":I?"T"+Br(g,2)+":"+Br(i,2)+":"+Br(I,2)+"Z":i||g?"T"+Br(g,2)+":"+Br(i,2)+"Z":"")}function gtt(e){var g=new RegExp('["'+e+` +\r]`),i=e.charCodeAt(0);function I(l,c){var u,d,h=n(l,function(m,f){if(u)return u(m,f-1);d=m,u=c?qet(m,c):Q0e(m)});return h.columns=d||[],h}function n(l,c){var u=[],d=l.length,h=0,m=0,f,b=d<=0,p=!1;l.charCodeAt(d-1)===Uy&&--d,l.charCodeAt(d-1)===z5&&--d;function y(){if(b)return E5;if(p)return p=!1,kge;var B,G=h,v;if(l.charCodeAt(G)===M5){for(;h++=d?b=!0:(v=l.charCodeAt(h++))===Uy?p=!0:v===z5&&(p=!0,l.charCodeAt(h)===Uy&&++h),l.slice(G+1,B-1).replace(/""/g,'"')}for(;hsvg{width:30px;height:20px}._context-menu-item_18ock_27{padding:2px;white-space:nowrap;border-radius:2px;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1)}._context-menu-item_18ock_27:hover{background:#337ab7;color:#fff}._context-menu-hr_18ock_38{margin-top:5px;margin-bottom:5px;border:0;border-top:1px solid rgba(0,0,0,.1)}._play-icon_18ock_45{width:12px;height:12px;position:absolute;right:5px}._context-menu-span_18ock_52{margin-right:20px;vertical-align:middle;display:inline-block;line-height:normal;white-space:nowrap}._context-menu-thumbnail_18ock_60{margin-right:10px;border:1px solid #888888}._context-menu-thumbnail-inline_18ock_65{display:inline-block;margin-right:10px;vertical-align:middle}._multitrack-header_1yz7l_1,._multitrack-header-focus_1yz7l_2,._multitrack-header-squeazed_1yz7l_3{position:relative;display:flex;justify-content:space-between;height:24px;margin-top:4px;margin-bottom:4px;color:#999;font-size:12px;line-height:24px;vertical-align:middle;border:0;border-radius:3px;background:#e5e5e5;transition:height .15s cubic-bezier(.25,.1,.25,1),margin .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-dark_1yz7l_20{background:#222}._multitrack-header-focus_1yz7l_2{height:32px;margin-top:0;margin-bottom:0}._multitrack-header-id_1yz7l_30{padding-left:3px}._multitrack-header-id_1yz7l_30:before{content:"ID:";font-weight:700;padding-right:5px}._multitrack-header-left_1yz7l_39{display:flex;flex-grow:1}._multitrack-header-grabber_1yz7l_44,._multitrack-header-grabber-squeazed_1yz7l_45{display:flex;align-items:center;justify-content:center;width:24px;height:100%;cursor:move;border-radius:3px 0 0 3px;transition:background .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-grabber_1yz7l_44:hover,._multitrack-header-grabber-squeazed_1yz7l_45:hover{background:#999}._multitrack-header-grabber_1yz7l_44:hover div,._multitrack-header-grabber-squeazed_1yz7l_45:hover div{background:#fff}._multitrack-header-grabber_1yz7l_44 div,._multitrack-header-grabber-squeazed_1yz7l_45 div{width:1px;height:50%;margin:1px;background:#999;transition:background .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-dark_1yz7l_20 ._multitrack-header-grabber_1yz7l_44 div{background:#666}._multitrack-header-grabber-squeazed_1yz7l_45{width:19.2px}._multitrack-header-search_1yz7l_80{position:relative;flex-grow:1;height:100%;margin-right:12px}._multitrack-header-search_1yz7l_80:after{position:absolute;top:3px;bottom:3px;right:-12px;display:block;content:"";width:1px;margin:0 6px;background:#cccccc}._multitrack-header-dark_1yz7l_20 ._multitrack-header-search_1yz7l_80:after{background:#666}._multitrack-header-nav-list_1yz7l_102,._multitrack-header_1yz7l_1>nav{display:flex}._multitrack-header-icon_1yz7l_107,._multitrack-header-icon-squeazed_1yz7l_108{width:24px;height:100%;padding:6px;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-icon_1yz7l_107 g,._multitrack-header-icon-squeazed_1yz7l_108 g{stroke:#999}._multitrack-header-icon_1yz7l_107:hover,._multitrack-header-icon_1yz7l_107:active,._multitrack-header-icon_1yz7l_107:focus,._multitrack-header-icon-squeazed_1yz7l_108:hover,._multitrack-header-icon-squeazed_1yz7l_108:active,._multitrack-header-icon-squeazed_1yz7l_108:focus{color:#fff;background:#337ab7}._multitrack-header-icon_1yz7l_107:hover g,._multitrack-header-icon_1yz7l_107:active g,._multitrack-header-icon_1yz7l_107:focus g,._multitrack-header-icon-squeazed_1yz7l_108:hover g,._multitrack-header-icon-squeazed_1yz7l_108:active g,._multitrack-header-icon-squeazed_1yz7l_108:focus g{stroke:#fff}._multitrack-header-icon_1yz7l_107:last-child,._multitrack-header-icon-squeazed_1yz7l_108:last-child{border-radius:0 3px 3px 0}._mouse-tool-selection_1yz7l_136{color:#fff;border-radius:3px 0 0 3px;background:#337ab7}._multitrack-header-icon-squeazed_1yz7l_108{width:20px 5;padding-left:3px;padding-right:3px}._track-control_w7hx2_1,._track-control-vertical_w7hx2_2{position:absolute;z-index:1;display:flex;background:rgba(255,255,255,.75);right:2px;top:2px;border-radius:2.5px;box-shadow:0 0 0 1px #0000000d,0 0 3px #0000001a;opacity:0;transition:opacity .15s cubic-bezier(.25,.1,.25,1),background .15s cubic-bezier(.25,.1,.25,1),box-shadow .15s cubic-bezier(.25,.1,.25,1)}._track-control-dark_w7hx2_15,._track-control-dark_w7hx2_15 ._track-control-active_w7hx2_16{background:rgba(40,40,40,.85)}._track-control-vertical_w7hx2_2{flex-direction:column-reverse}._track-control-left_w7hx2_24{left:2px;right:auto}._track-control-active_w7hx2_16,._track-control-vertical-active_w7hx2_30{opacity:1;z-index:1}._track-control-active_w7hx2_16:hover,._track-control-vertical-active_w7hx2_30:hover{background:rgb(255,255,255);box-shadow:0 0 0 1px #0000001a,0 0 3px #0003}._track-control-dark_w7hx2_15._track-control-active_w7hx2_16:hover{background:rgba(34,34,34,.95)}._track-control-padding-right_w7hx2_48{right:80px}._track-control-button_w7hx2_52{width:20px;height:20px;padding:4px;cursor:pointer;opacity:.66;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1),opacity .15s cubic-bezier(.25,.1,.25,1)}._track-control-button_w7hx2_52:hover{color:#fff;background:#337ab7;opacity:1}._track-control-button_w7hx2_52:first-child{border-radius:2.5px 0 0 2.5px}._track-control-button_w7hx2_52:last-child{border-radius:0 2.5px 2.5px 0}._track-control-dark_w7hx2_15 ._track-control-button_w7hx2_52{color:#ccc}._track-control-dark_w7hx2_15 ._track-control-button_w7hx2_52:hover{color:#fff;background:#337ab7;opacity:1}._track-control-button-vertical_w7hx2_81:first-child{border-radius:0 0 2.5px 2.5px}._track-control-button-vertical_w7hx2_81:last-child{border-radius:2.5px 2.5px 0 0}._center-track_fiu64_1{position:relative;background:transparent}._center-track-container_fiu64_6{position:absolute;z-index:1}._track-range-selection_5bcsr_1{position:absolute;z-index:-1;opacity:0;transition:opacity .15s cubic-bezier(.25,.1,.25,1)}._track-range-selection-active_5bcsr_8{z-index:1;opacity:1}._track-range-selection-group-inactive_5bcsr_22{display:none}._track-range-selection-group-brush-selection_5bcsr_26{outline:2px solid rgba(0,0,0,.33);fill:#000;fill-opacity:.1}._drag-listening-div-active_19gkt_1{z-index:10;box-shadow:inset 0 0 3px red}._gallery-tracks_fbxxi_1{position:relative;top:0;left:0;width:100%;height:100%}._gallery-track_fbxxi_1{position:absolute;box-sizing:border-box;top:0;right:0;bottom:0;left:0}._gallery-sub-track_fbxxi_18,._gallery-invisible-track_fbxxi_19{position:absolute}._tiled-plot_1y7td_1{position:relative;flex:1;overflow:hidden}._horizontalList_1y7td_7{display:flex;width:600px;height:300px;white-space:nowrap}._list_1y7td_14{width:400px;height:600px;overflow:hidden;-webkit-overflow-scrolling:touch}._stylizedList_1y7td_21{position:relative;z-index:0;background-color:#f3f3f3;outline:none}._stylizedItem_1y7td_28{position:relative;display:flex;align-items:center;width:100%;background-color:transparent;-webkit-user-select:none;user-select:none;color:#333;font-weight:400}._stylizedHelper_1y7td_39{box-shadow:0 5px 5px -5px #0003,0 -5px 5px -5px #0003;background-color:#fffc;cursor:row-resize}._stylizedHelper_1y7td_39._horizontalItem_1y7td_44{cursor:col-resize}._horizontalItem_1y7td_44{display:flex;flex-shrink:0;align-items:center;justify-content:center}._resizable-track_1y7td_55{width:100%;height:100%}path._domain_1y7td_60{stroke-width:0px}._top-right-handle_cizw2_1,._bottom-right-handle_cizw2_2{border-right:black solid;border-top:black solid}._top-left-handle_cizw2_7,._bottom-left-handle_cizw2_8{border-left:black solid;border-top:black solid}._top-draggable-handle_cizw2_13,._bottom-draggable-handle_cizw2_14,._left-draggable-handle_cizw2_15,._right-draggable-handle_cizw2_16{position:absolute;opacity:0;transition:transform .15s cubic-bezier(.25,.1,.25,1),opacity .15s cubic-bezier(.25,.1,.25,1)}._draggable-div_cizw2_22{background-color:transparent;box-sizing:border-box}._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle-grabber_cizw2_28{width:10px;height:4px;border-top:1px solid black;border-bottom:1px solid black}._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle-grabber_cizw2_28{margin:4px 7px}._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle-grabber_cizw2_44{width:4px;height:10px;border-left:1px solid black;border-right:1px solid black}._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle-grabber_cizw2_44{margin:7px 4px}._draggable-div_cizw2_22:hover ._top-draggable-handle_cizw2_13,._draggable-div_cizw2_22:hover ._bottom-draggable-handle_cizw2_14,._draggable-div_cizw2_22:hover ._left-draggable-handle_cizw2_15,._draggable-div_cizw2_22:hover ._right-draggable-handle_cizw2_16{opacity:.5;background:rgba(255,255,255,.75);box-shadow:0 0 3px 1px #ffffffbf;border-radius:3px}._top-draggable-handle_cizw2_13:hover,._top-draggable-handle_cizw2_13:active,._bottom-draggable-handle_cizw2_14:hover,._bottom-draggable-handle_cizw2_14:active,._left-draggable-handle_cizw2_15:hover,._left-draggable-handle_cizw2_15:active,._right-draggable-handle_cizw2_16:hover,._right-draggable-handle_cizw2_16:active{opacity:1!important;transform:scale(2)}._top-draggable-handle_cizw2_13:hover ._top-draggable-handle-grabber_cizw2_27,._top-draggable-handle_cizw2_13:hover ._bottom-draggable-handle-grabber_cizw2_28,._top-draggable-handle_cizw2_13:hover ._left-draggable-handle-grabber_cizw2_43,._top-draggable-handle_cizw2_13:hover ._right-draggable-handle-grabber_cizw2_44,._top-draggable-handle_cizw2_13:active ._top-draggable-handle-grabber_cizw2_27,._top-draggable-handle_cizw2_13:active ._bottom-draggable-handle-grabber_cizw2_28,._top-draggable-handle_cizw2_13:active ._left-draggable-handle-grabber_cizw2_43,._top-draggable-handle_cizw2_13:active ._right-draggable-handle-grabber_cizw2_44,._bottom-draggable-handle_cizw2_14:hover ._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle_cizw2_14:hover ._bottom-draggable-handle-grabber_cizw2_28,._bottom-draggable-handle_cizw2_14:hover ._left-draggable-handle-grabber_cizw2_43,._bottom-draggable-handle_cizw2_14:hover ._right-draggable-handle-grabber_cizw2_44,._bottom-draggable-handle_cizw2_14:active ._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle_cizw2_14:active ._bottom-draggable-handle-grabber_cizw2_28,._bottom-draggable-handle_cizw2_14:active ._left-draggable-handle-grabber_cizw2_43,._bottom-draggable-handle_cizw2_14:active ._right-draggable-handle-grabber_cizw2_44,._left-draggable-handle_cizw2_15:hover ._top-draggable-handle-grabber_cizw2_27,._left-draggable-handle_cizw2_15:hover ._bottom-draggable-handle-grabber_cizw2_28,._left-draggable-handle_cizw2_15:hover ._left-draggable-handle-grabber_cizw2_43,._left-draggable-handle_cizw2_15:hover ._right-draggable-handle-grabber_cizw2_44,._left-draggable-handle_cizw2_15:active ._top-draggable-handle-grabber_cizw2_27,._left-draggable-handle_cizw2_15:active ._bottom-draggable-handle-grabber_cizw2_28,._left-draggable-handle_cizw2_15:active ._left-draggable-handle-grabber_cizw2_43,._left-draggable-handle_cizw2_15:active ._right-draggable-handle-grabber_cizw2_44,._right-draggable-handle_cizw2_16:hover ._top-draggable-handle-grabber_cizw2_27,._right-draggable-handle_cizw2_16:hover ._bottom-draggable-handle-grabber_cizw2_28,._right-draggable-handle_cizw2_16:hover ._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle_cizw2_16:hover ._right-draggable-handle-grabber_cizw2_44,._right-draggable-handle_cizw2_16:active ._top-draggable-handle-grabber_cizw2_27,._right-draggable-handle_cizw2_16:active ._bottom-draggable-handle-grabber_cizw2_28,._right-draggable-handle_cizw2_16:active ._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle_cizw2_16:active ._right-draggable-handle-grabber_cizw2_44{box-shadow:0 0 3px 1px #0089ff;background:#0089ff}._top-draggable-handle_cizw2_13,._bottom-draggable-handle_cizw2_14{height:12px;cursor:row-resize}._left-draggable-handle_cizw2_15,._right-draggable-handle_cizw2_16{width:12px;cursor:col-resize}._horizontal-tiled-plot_1bqkg_1{position:relative}._button_1wnjn_1{display:flex;align-items:center;box-sizing:border-box;padding:.5em;color:#000;font-size:1em;line-height:1em;border:0;border-radius:2.5px;background:#fff;box-shadow:0 0 0 1px #ccc;transition:transform .15s cubic-bezier(.25,.1,.25,1),box-shadow .15s cubic-bezier(.25,.1,.25,1),background .15s cubic-bezier(.25,.1,.25,1);-webkit-appearance:none}._button_1wnjn_1:hover{background:#f2f2f2;box-shadow:0 0 0 1px #ccc}._button_1wnjn_1:focus{box-shadow:0 0 0 2px #0089ff}._button_1wnjn_1:active{transform:scale(.9)}._button_1wnjn_1:hover,._button_1wnjn_1:focus,._button_1wnjn_1:active{cursor:pointer;outline:none}._button-shortcut_1wnjn_35{padding:.1em 5px;color:#999;font-size:.8em;transition:color .15s cubic-bezier(.25,.1,.25,1)}._cross_2ke8w_1{position:relative;width:1em;height:1em}._cross_2ke8w_1:before,._cross_2ke8w_1:after{content:"";display:block;position:absolute;top:50%;left:0;width:1em;height:1px;background:black;transform-origin:center}._cross_2ke8w_1:before{-webkit-transform:translate(0,-50%) rotate(45deg);-moz-transform:translate(0,-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}._cross_2ke8w_1:after{-webkit-transform:translate(0,-50%) rotate(-45deg);-moz-transform:translate(0,-50%) rotate(-45deg);transform:translateY(-50%) rotate(-45deg)}._modal-background_zzhoe_1{position:absolute;z-index:1000;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.666);animation:_fade-in_zzhoe_1 .2s cubic-bezier(.25,.1,.25,1) 1;transition:opacity .2s cubic-bezier(.25,.1,.25,1)}._modal-hide_zzhoe_13{opacity:0}._modal-wrap_zzhoe_17{position:absolute;top:20px;right:20px;bottom:20px;left:20px}._modal-window_zzhoe_25{position:relative;width:100%;max-width:640px;max-height:100%;margin-left:auto;margin-right:auto;color:#000;border-radius:5px;background:#fff;animation:_fade-scale-in_zzhoe_1 .2s cubic-bezier(.25,.1,.25,1) 1}._modal-window-max-height_zzhoe_38{height:100%}._modal-content_zzhoe_42{padding:10px}@keyframes _fade-in_zzhoe_1{0%{opacity:0}to{opacity:1}}@keyframes _fade-scale-in_zzhoe_1{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}._dialog-header_wp50s_1{position:relative;z-index:2;display:flex;justify-content:space-between;margin:0 -10px 10px;padding:0 10px 10px;border-bottom:1px solid #cccccc}._dialog-header_wp50s_1 h3{margin:0;padding:0;font-size:20px;line-height:1em}._dialog-header_wp50s_1 button{font-size:10px}._dialog-main-max-height_wp50s_20{position:absolute;z-index:1;top:40px;right:0;bottom:50px;left:0;padding:10px;overflow:auto}._dialog-footer_wp50s_31,._dialog-footer-max-height_wp50s_31{display:flex;justify-content:space-between;margin:10px -10px 0;padding:10px 10px 0;border-top:1px solid #cccccc}._dialog-footer_wp50s_31 button,._dialog-footer-max-height_wp50s_31 button{font-size:14px}._dialog-footer-max-height_wp50s_31{position:absolute;z-index:2;left:10px;right:10px;bottom:10px}table.table-track-options{border-collapse:collapse;margin-left:auto;margin-right:auto}td.td-track-options{border:1px solid #fff;outline:none;padding:3px;position:relative;font-family:Roboto,sans-serif;font-size:14px;color:#666}.cell-label{position:absolute;left:0;top:0;margin-left:5px;color:#777}.modal-dialog{position:relative;display:table;overflow-y:auto;overflow-x:auto;width:auto;min-width:300px;margin:auto}._track-renderer_11dwb_1{position:relative}._track-renderer-element_11dwb_5,._track-renderer-events_11dwb_6{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}._track-renderer-events_11dwb_6{z-index:1}.tileset-finder-label{font-weight:700}.tileset-finder-search-box{margin-left:10px}.tileset-finder-search-bar{display:flex;margin-left:5px;justify-content:space-between;align-items:center}.tileset-finder-checkbox-tree{margin:5px;padding:3px;border:1px solid #aaaaaa;border-radius:5px}.react-checkbox-tree{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;font-size:16px}.react-checkbox-tree>ol{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.react-checkbox-tree ol{margin:0;padding-left:0;list-style-type:none}.react-checkbox-tree ol ol{padding-left:24px}.react-checkbox-tree button{line-height:normal;color:inherit}.react-checkbox-tree button:disabled{cursor:not-allowed}.react-checkbox-tree .rct-bare-label{cursor:default}.react-checkbox-tree label{margin-bottom:0;cursor:pointer}.react-checkbox-tree label:hover{background:rgba(51,51,204,.1)}.react-checkbox-tree label:active,.react-checkbox-tree label:focus{background:rgba(51,51,204,.15)}.react-checkbox-tree:not(.rct-native-display) input{display:none}.react-checkbox-tree.rct-native-display input{margin:0 5px}.react-checkbox-tree .rct-icon{display:inline-block;text-align:center;text-rendering:auto;font-family:"Font Awesome 5 Free",FontAwesome,sans-serif;font-weight:400;font-variant:normal;font-style:normal}.rct-disabled>.rct-text>label{opacity:.75;cursor:not-allowed}.rct-disabled>.rct-text>label:hover{background:transparent}.rct-disabled>.rct-text>label:active{background:transparent}.rct-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rct-options{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:.5rem;text-align:right}.rct-option{opacity:.75;border:0;background:none;cursor:pointer;padding:0 4px;font-size:18px}.rct-option:hover{opacity:1}.rct-option+.rct-option{margin-left:2px}.rct-collapse,.rct-checkbox,.rct-node-icon{padding:0 5px}.rct-collapse *,.rct-checkbox *,.rct-node-icon *{display:inline-block;margin:0;width:14px}.rct-collapse{-ms-flex-item-align:stretch;align-self:stretch;border:0;background:none;line-height:normal;color:inherit;font-size:12px}.rct-collapse.rct-collapse-btn{cursor:pointer}.rct-collapse>.rct-icon-expand-close{opacity:.5}.rct-collapse>.rct-icon-expand-close:hover{opacity:1}.rct-native-display .rct-checkbox{display:none}.rct-node-clickable{cursor:pointer}.rct-node-clickable:hover{background:rgba(51,51,204,.1)}.rct-node-clickable:focus{outline:0;background:rgba(51,51,204,.2)}.rct-node-icon{color:#33c}.rct-title{padding:0 5px}.rct-icons-fa4 .rct-icon-expand-close:before{content:""}.rct-icons-fa4 .rct-icon-expand-open:before{content:""}.rct-icons-fa4 .rct-icon-uncheck:before{content:""}.rct-icons-fa4 .rct-icon-check:before{content:""}.rct-icons-fa4 .rct-icon-half-check:before{opacity:.5;content:""}.rct-icons-fa4 .rct-icon-leaf:before{content:""}.rct-icons-fa4 .rct-icon-parent-open:before{content:""}.rct-icons-fa4 .rct-icon-parent-close:before{content:""}.rct-icons-fa4 .rct-icon-expand-all:before{content:""}.rct-icons-fa4 .rct-icon-collapse-all:before{content:""}.rct-icons-fa5 .rct-icon-expand-close:before{font-weight:900;content:""}.rct-icons-fa5 .rct-icon-expand-open:before{font-weight:900;content:""}.rct-icons-fa5 .rct-icon-uncheck:before{content:""}.rct-icons-fa5 .rct-icon-check:before{content:""}.rct-icons-fa5 .rct-icon-half-check:before{opacity:.5;content:""}.rct-icons-fa5 .rct-icon-leaf:before{content:""}.rct-icons-fa5 .rct-icon-parent-open:before{content:""}.rct-icons-fa5 .rct-icon-parent-close:before{content:""}.rct-icons-fa5 .rct-icon-expand-all:before{content:""}.rct-icons-fa5 .rct-icon-collapse-all:before{content:""}.rct-direction-rtl{direction:rtl}.rct-direction-rtl ol ol{padding-right:24px;padding-left:0}.rct-direction-rtl.rct-icons-fa4 .rct-icon-expand-close:before{content:""}.rct-direction-rtl.rct-icons-fa5 .rct-icon-expand-close:before{content:""}.plot-type-selected{background-color:#0000ff4d}.plot-type-container{overflow-y:scroll;margin:5px;padding:3px;border:1px solid #aaaaaa;border-radius:5px;max-height:15vh}.plot-type-container-empty{margin:5px;padding:3px 8px;border:1px solid #aaaaaa;background-color:#e8e8e8;border-radius:5px}.plot-type-item{cursor:pointer}.plot-type-item:not(.plot-type-selected):hover{background-color:#3333cc1a}.track-thumbnail{width:30px;height:20px;display:inline-block;margin-right:10;vertical-align:middle}.track-thumbnail>svg{width:20px;height:20px}._collapse-toggle-icon_ub7s6_1:before{font-family:Glyphicons Halflings;content:"";float:left;padding-right:3px}._collapse-toggle-icon_ub7s6_1._collapsed_ub7s6_9:before{content:""}._modal-title_ub7s6_14{font-family:Roboto;font-weight:700}._modal-container_ub7s6_19{position:relative}._modal-container_ub7s6_19 ._modal_ub7s6_14,._modal-container_ub7s6_19 ._modal-backdrop_ub7s6_23{position:absolute}._modal-dialog_ub7s6_27{position:relative;display:table;overflow-y:auto;overflow-x:auto;width:600px;min-width:300px;margin:auto}._vertical-tiled-plot_f3ho8_1{position:relative}._genome-position-search_1l2sx_1,._genome-position-search-focus_1l2sx_2{position:relative;display:flex;align-items:stretch;height:100%;margin-bottom:0;font-size:13.7142857143px;transition:box-shadow .15s cubic-bezier(.25,.1,.25,1),font-size .15s cubic-bezier(.25,.1,.25,1)}._genome-position-search-focus_1l2sx_2{box-shadow:0 0 0 1px #337ab7,0 0 3px 1px #337ab7}._genome-position-search-bar_1l2sx_16{position:relative;box-sizing:border-box;width:100%;height:100%;padding:3px;color:#666;font-size:inherit;line-height:24px;border:0;border-radius:3px 0 0 3px;background:transparent}._genome-position-search-bar_1l2sx_16:focus{outline:none;color:#000}._genome-position-search-dark_1l2sx_34 ._genome-position-search-bar_1l2sx_16:focus{color:#e5e5e5}._genome-position-search-bar-button_1l2sx_38,._genome-position-search-bar-button-focus_1l2sx_39{display:block;height:100%;padding:0 8px!important;color:#999;border:0!important;border-radius:0!important;background:transparent;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1)}._genome-position-search-bar-button_1l2sx_38:active,._genome-position-search-bar-button_1l2sx_38:focus,._genome-position-search-bar-button_1l2sx_38:hover,._genome-position-search-bar-button-focus_1l2sx_39:active,._genome-position-search-bar-button-focus_1l2sx_39:focus,._genome-position-search-bar-button-focus_1l2sx_39:hover{color:#fff;background:#337ab7}._genome-position-search-bar-button-focus_1l2sx_39{color:#fff;background:#337ab7}._genome-position-search-bar-icon_1l2sx_62,._genome-position-search-bar-icon-focus_1l2sx_63{display:flex;align-items:center;transition:color .15s cubic-bezier(.25,.1,.25,1)}._genome-position-search-bar-icon_1l2sx_62:first-child,._genome-position-search-bar-icon-focus_1l2sx_63:first-child{margin-left:6px;margin-right:2px}._genome-position-search-bar-icon_1l2sx_62 span,._genome-position-search-bar-icon-focus_1l2sx_63 span{display:block;margin-top:-2px}._genome-position-search-bar-icon-focus_1l2sx_63{color:#337ab7}._genome-position-search-bar-suggestions_1l2sx_83{position:fixed;border-radius:3px;box-shadow:0 0 3px #0000001a,0 1px 5px #0000000d;background-color:#fffffff2;border:1px solid rgba(0,0,0,.1);padding:2px 0;font-size:90%;overflow:auto;max-height:50%}._btn_1l2sx_95{display:inline-block;margin-bottom:0;font-size:13.7142857143px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}._btn-sm_1l2sx_116{font-size:12px;line-height:1.5;border-radius:3px}._btn-default_1l2sx_122{color:#666;background-color:#fff;border-color:#ccc}._btn-default_1l2sx_122:hover{color:#000;background:#ccc}._btn-default_1l2sx_122:active,._btn-default_1l2sx_122:focus{color:#fff;border-color:#000;background:#000}._genome-position-search_1l2sx_1 ._btn_1l2sx_95{border-radius:0 3px 3px 0}._export-link-dialog-wrapper_p9gxw_1{display:flex}._export-link-dialog-wrapper_p9gxw_1 input{flex-grow:1}._add-track-position-table_wdy5w_1{border-collapse:collapse;margin:5px;color:#666}._add-track-position-table-dark_wdy5w_7{color:#ccc}._add-track-position-other_wdy5w_11{outline:none}._add-track-position-top-center_wdy5w_15{min-width:80px;min-height:20px;text-align:center;outline:none;border-top:1px solid #999;border-left:1px solid #999;border-right:1px solid #999;border-radius:2px 2px 0 0}._add-track-position-top-center_wdy5w_15:hover{color:#fff;background-color:#337ab7}._add-track-position-middle-left_wdy5w_30{min-width:40px;text-align:center;outline:none;border-top:1px solid #999;border-left:1px solid #999;border-bottom:1px solid #999;border-radius:2px 0 0 2px}._add-track-position-middle-left_wdy5w_30:hover{background-color:#337ab7;color:#fff}._add-track-position-middle-right_wdy5w_45{min-width:40px;text-align:center;outline:none;border-top:1px solid #999;border-right:1px solid #999;border-bottom:1px solid #999;border-radius:0 2px 2px 0}._add-track-position-middle-right_wdy5w_45:hover{background-color:#337ab7;color:#fff}._add-track-position-middle-middle_wdy5w_60{text-align:center;outline:none;border:1px solid #999}._add-track-position-middle-middle_wdy5w_60:hover{background-color:#337ab7;color:#fff}._add-track-position-bottom-middle_wdy5w_71{min-height:20px;text-align:center;outline:none;border-left:1px solid #999;border-right:1px solid #999;border-bottom:1px solid #999;border-radius:0 0 2px 2px}._add-track-position-bottom-middle_wdy5w_71:hover{background-color:#337ab7;color:#fff}._add-track-position-span_wdy5w_86{margin:5px}._view-config-editor-header_1hlm6_1{margin:-10px -10px 0;padding:10px;display:flex;justify-content:space-between;background:#f2f2f2}._view-config-editor-header_1hlm6_1 button{display:flex;align-items:center;font-size:14px;background:#f2f2f2}._view-config-editor-header_1hlm6_1 button:hover{background:#e5e5e5}._view-config-editor-header_1hlm6_1 button:hover span{color:#666}._view-config-editor_1hlm6_1{position:absolute;top:50px;right:0;bottom:0;left:0;margin:1px 0 0;padding:0;overflow:auto;font-size:12.5px;height:calc(100% - 80px)}._view-config-log_1hlm6_34{position:absolute;right:0;bottom:0;left:0;margin:1px 0 0;padding:0;min-height:30px;background:#f2f2f2;transition:height .15s cubic-bezier(.25,.1,.25,1)}._view-config-log-header_1hlm6_46{background:#f2f2f2;border-top:1px solid #cccccc;border-bottom:1px solid #cccccc;padding-left:10px;height:30px;display:flex;align-items:center;cursor:pointer;position:sticky;position:-webkit-sticky;top:0}._view-config-log-msg_1hlm6_60{background:#f2f2f2;overflow:auto;height:calc(100% - 30px)}._view-config-log-msg_1hlm6_60 tr,._view-config-log-msg_1hlm6_60 td{outline:none;vertical-align:top}._view-config-log-msg_1hlm6_60 ._title_1hlm6_70{font-weight:700;padding-left:8px;padding-top:8px;width:100px}._view-config-log-msg_1hlm6_60 ._Warning_1hlm6_76{color:orange}._view-config-log-msg_1hlm6_60 ._Success_1hlm6_79{color:green}._view-config-log-msg_1hlm6_60 ._Error_1hlm6_82{color:red}._view-config-log-msg_1hlm6_60 pre{background:white;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}._higlass_1uoq8_1{position:relative}._higlass-dark-theme_1uoq8_5{background:black}._higlass-container-overflow_1uoq8_9,._higlass-scroll-container-overflow_1uoq8_10,._higlass-scroll-container-scroll_1uoq8_11{position:absolute;top:0;right:0;bottom:0;left:0}._higlass-scroll-container-overflow_1uoq8_10{overflow:hidden}._higlass-scroll-container-scroll_1uoq8_11{overflow-x:hidden;overflow-y:auto}._higlass-canvas_1uoq8_28{position:absolute;width:100%;height:100%}._higlass-drawing-surface_1uoq8_34{position:relative}._higlass-svg_1uoq8_38{position:absolute;width:100%;height:100%;left:0;top:0;pointer-events:none}._tiled-area_1uoq8_47{display:flex;flex-direction:column}._track-mouseover-menu_1uoq8_52{position:fixed;z-index:1;margin:17px 0 0 9px;padding:0 .25rem;max-width:50vw;word-wrap:break-word;font-size:.8em;pointer-events:none;background:white;border-radius:.25rem;box-shadow:0 0 0 1px #0000001a,0 0 3px #00000013,0 0 7px #0000000d}.react-grid-layout{position:relative;transition:height .2s ease}.react-grid-item{transition:all .2s ease;transition-property:left,top}.react-grid-item.cssTransforms{transition-property:transform}.react-grid-item.resizing{z-index:1;will-change:width,height}.react-grid-item.react-draggable-dragging{transition:none;z-index:3;will-change:transform}.react-grid-item.react-grid-placeholder{background:red;opacity:.2;transition-duration:.1s;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.react-grid-item>.react-resizable-handle{position:absolute;width:20px;height:20px;bottom:0;right:0;cursor:se-resize}.react-grid-item>.react-resizable-handle:after{content:"";position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-right:2px solid rgba(0,0,0,.4);border-bottom:2px solid rgba(0,0,0,.4)}.react-resizable{position:relative}.react-resizable-handle{position:absolute;width:20px;height:20px;background-repeat:no-repeat;background-origin:content-box;box-sizing:border-box;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+);background-position:bottom right;padding:0 3px 3px 0}.react-resizable-handle-sw{bottom:0;left:0;cursor:sw-resize;transform:rotate(90deg)}.react-resizable-handle-se{bottom:0;right:0;cursor:se-resize}.react-resizable-handle-nw{top:0;left:0;cursor:nw-resize;transform:rotate(180deg)}.react-resizable-handle-ne{top:0;right:0;cursor:ne-resize;transform:rotate(270deg)}.react-resizable-handle-w,.react-resizable-handle-e{top:50%;margin-top:-10px;cursor:ew-resize}.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-resizable-handle-n,.react-resizable-handle-s{left:50%;margin-left:-10px;cursor:ns-resize}.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}code[class*=language-],pre[class*=language-]{color:#393a34;font-family:Consolas,Bitstream Vera Sans Mono,Courier New,Courier,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;font-size:.95em;line-height:1.2em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{background:#b3d4fc}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{background:#b3d4fc}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border:1px solid #dddddd;background-color:#fff}:not(pre)>code[class*=language-]{padding:1px .2em;background:#f8f8f8;border:1px solid #dddddd}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#998;font-style:italic}.token.namespace{opacity:.7}.token.string,.token.attr-value{color:#e3116c}.token.punctuation,.token.operator{color:#393a34}.token.entity,.token.url,.token.symbol,.token.number,.token.boolean,.token.variable,.token.constant,.token.property,.token.regex,.token.inserted{color:#36acaa}.token.atrule,.token.keyword,.token.attr-name,.language-autohotkey .token.selector{color:#00a4db}.token.function,.token.deleted,.language-autohotkey .token.tag{color:#9a050f}.token.tag,.token.selector,.language-autohotkey .token.keyword{color:#00009f}.token.important,.token.function,.token.bold{font-weight:700}.token.italic{font-style:italic}.higlass *{box-sizing:border-box}.higlass .react-resizable-handle{z-index:1}')),document.head.appendChild(e)}}catch(g){console.error("vite-plugin-css-injected-by-js",g)}})();var $e=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};function PC(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function qs(e){if(e.__esModule)return e;var g=e.default;if(typeof g=="function"){var I=function i(){return this instanceof i?Reflect.construct(g,arguments,this.constructor):g.apply(this,arguments)};I.prototype=g.prototype}else I={};return Object.defineProperty(I,"__esModule",{value:!0}),Object.keys(e).forEach(function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(I,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})}),I}var P0e={exports:{}},Qet="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",jet=Qet,$et=jet;function J0e(){}function O0e(){}O0e.resetWarningCache=J0e;var qet=function(){function e(i,n,C,r,o,a){if(a!==$et){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}e.isRequired=e;function g(){return e}var I={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:g,element:e,elementType:e,instanceOf:g,node:e,objectOf:g,oneOf:g,oneOfType:g,shape:g,exact:g,checkPropTypes:O0e,resetWarningCache:J0e};return I.PropTypes=I,I};P0e.exports=qet();var el=P0e.exports;const L=PC(el);var k3="http://www.w3.org/1999/xhtml";const Y3={svg:"http://www.w3.org/2000/svg",xhtml:k3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function $h(e){var g=e+="",I=g.indexOf(":");return I>=0&&(g=e.slice(0,I))!=="xmlns"&&(e=e.slice(I+1)),Y3.hasOwnProperty(g)?{space:Y3[g],local:e}:e}function ett(e){return function(){var g=this.ownerDocument,I=this.namespaceURI;return I===k3&&g.documentElement.namespaceURI===k3?g.createElement(e):g.createElementNS(I,e)}}function ttt(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function QT(e){var g=$h(e);return(g.local?ttt:ett)(g)}function gtt(){}function FS(e){return e==null?gtt:function(){return this.querySelector(e)}}function Itt(e){typeof e!="function"&&(e=FS(e));for(var g=this._groups,I=g.length,i=new Array(I),n=0;n=p&&(p=b+1);!(Z=m[p])&&++p=0;)(r=i[n])&&(C&&r.compareDocumentPosition(C)^4&&C.parentNode.insertBefore(r,C),C=r);return this}function Stt(e){e||(e=wtt);function g(l,c){return l&&c?e(l.__data__,c.__data__):!l-!c}for(var I=this._groups,i=I.length,n=new Array(i),C=0;Cg?1:e>=g?0:NaN}function Rtt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Vtt(){return Array.from(this)}function Wtt(){for(var e=this._groups,g=0,I=e.length;g1?this.each((g==null?Ett:typeof g=="function"?ztt:Mtt)(e,g,I??"")):ro(this.node(),e)}function ro(e,g){return e.style.getPropertyValue(g)||N7(e).getComputedStyle(e,null).getPropertyValue(g)}function Jtt(e){return function(){delete this[e]}}function Ott(e,g){return function(){this[e]=g}}function _tt(e,g){return function(){var I=g.apply(this,arguments);I==null?delete this[e]:this[e]=I}}function Ltt(e,g){return arguments.length>1?this.each((g==null?Jtt:typeof g=="function"?_tt:Ott)(e,g)):this.node()[e]}function U0e(e){return e.trim().split(/^|\s+/)}function k7(e){return e.classList||new Q0e(e)}function Q0e(e){this._node=e,this._names=U0e(e.getAttribute("class")||"")}Q0e.prototype={add:function(e){var g=this._names.indexOf(e);g<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var g=this._names.indexOf(e);g>=0&&(this._names.splice(g,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function j0e(e,g){for(var I=k7(e),i=-1,n=g.length;++i=0&&(I=g.slice(i+1),g=g.slice(0,i)),{type:g,name:I}})}function Zgt(e){return function(){var g=this.__on;if(g){for(var I=0,i=-1,n=g.length,C;Izg(I,g))}function Tgt(e){return typeof e=="string"?new Dn([document.querySelectorAll(e)],[document.documentElement]):new Dn([e==null?[]:T7(e)],Y7)}const Ngt=Object.freeze(Object.defineProperty({__proto__:null,create:Wgt,creator:QT,local:eye,matcher:$T,namespace:$h,namespaces:Y3,pointer:zg,pointers:Hgt,select:hg,selectAll:Tgt,selection:ma,selector:FS,selectorAll:jT,style:ro,window:N7},Symbol.toStringTag,{value:"Module"}));function yi(e,g){return eg?1:e>=g?0:NaN}function Y0(e){let g=e,I=e;e.length===1&&(g=(r,o)=>e(r)-o,I=kgt(e));function i(r,o,a,s){for(a==null&&(a=0),s==null&&(s=r.length);a>>1;I(r[A],o)<0?a=A+1:s=A}return a}function n(r,o,a,s){for(a==null&&(a=0),s==null&&(s=r.length);a>>1;I(r[A],o)>0?s=A:a=A+1}return a}function C(r,o,a,s){a==null&&(a=0),s==null&&(s=r.length);const A=i(r,o,a,s-1);return A>a&&g(r[A-1],o)>-g(r[A],o)?A-1:A}return{left:i,center:C,right:n}}function kgt(e){return(g,I)=>yi(e(g),I)}function gye(e){return e===null?NaN:+e}function*Ygt(e,g){if(g===void 0)for(let I of e)I!=null&&(I=+I)>=I&&(yield I);else{let I=-1;for(let i of e)(i=g(i,++I,e))!=null&&(i=+i)>=i&&(yield i)}}const Iye=Y0(yi),iye=Iye.right,Kgt=Iye.left,Fgt=Y0(gye).center,qh=iye;function qT(e,g){let I=0;if(g===void 0)for(let i of e)i!=null&&(i=+i)>=i&&++I;else{let i=-1;for(let n of e)(n=g(n,++i,e))!=null&&(n=+n)>=n&&++I}return I}function Dgt(e){return e.length|0}function xgt(e){return!(e>0)}function Egt(e){return typeof e!="object"||"length"in e?e:Array.from(e)}function Mgt(e){return g=>e(...g)}function zgt(...e){const g=typeof e[e.length-1]=="function"&&Mgt(e.pop());e=e.map(Egt);const I=e.map(Dgt),i=e.length-1,n=new Array(i+1).fill(0),C=[];if(i<0||I.some(xgt))return C;for(;;){C.push(n.map((o,a)=>e[a][o]));let r=i;for(;++n[r]===I[r];){if(r===0)return g?C.map(g):C;n[r--]=0}}}function Pgt(e,g){var I=0,i=0;return Float64Array.from(e,g===void 0?n=>I+=+n||0:n=>I+=+g(n,i++,e)||0)}function Jgt(e,g){return ge?1:g>=e?0:NaN}function K7(e,g){let I=0,i,n=0,C=0;if(g===void 0)for(let r of e)r!=null&&(r=+r)>=r&&(i=r-n,n+=i/++I,C+=i*(r-n));else{let r=-1;for(let o of e)(o=g(o,++r,e))!=null&&(o=+o)>=o&&(i=o-n,n+=i/++I,C+=i*(o-n))}if(I>1)return C/(I-1)}function F7(e,g){const I=K7(e,g);return I&&Math.sqrt(I)}function M1(e,g){let I,i;if(g===void 0)for(const n of e)n!=null&&(I===void 0?n>=n&&(I=i=n):(I>n&&(I=n),i=C&&(I=i=C):(I>C&&(I=C),i0){for(o=I[--i];i>0&&(n=o,C=I[--i],o=n+C,r=C-(o-n),!r););i>0&&(r<0&&I[i-1]<0||r>0&&I[i-1]>0)&&(C=r*2,n=o+C,C==n-o&&(o=n))}return o}}]),e}();function Qgt(e,g){const I=new Yi;if(g===void 0)for(let i of e)(i=+i)&&I.add(i);else{let i=-1;for(let n of e)(n=+g(n,++i,e))&&I.add(n)}return+I}function jgt(e,g){const I=new Yi;let i=-1;return Float64Array.from(e,g===void 0?n=>I.add(+n||0):n=>I.add(+g(n,++i,e)||0))}function nye(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Nge(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gIt(e){try{return Function.toString.call(e).indexOf("[native code]")!==-1}catch{return typeof e=="function"}}function WB(e,g){return WB=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,n){return i.__proto__=n,i},WB(e,g)}function sr(e){return sr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},sr(e)}let q9=function(e){rye(I,e);var g=oye(I);function I(i,n=lye){var C;if(nye(this,I),C=g.call(this),Object.defineProperties(D7(C),{_intern:{value:new Map},_key:{value:n}}),i!=null)for(const[r,o]of i)C.set(r,o);return C}return Cye(I,[{key:"get",value:function(n){return iA(sr(I.prototype),"get",this).call(this,F3(this,n))}},{key:"has",value:function(n){return iA(sr(I.prototype),"has",this).call(this,F3(this,n))}},{key:"set",value:function(n,C){return iA(sr(I.prototype),"set",this).call(this,Aye(this,n),C)}},{key:"delete",value:function(n){return iA(sr(I.prototype),"delete",this).call(this,sye(this,n))}}]),I}($9(Map)),IIt=function(e){rye(I,e);var g=oye(I);function I(i,n=lye){var C;if(nye(this,I),C=g.call(this),Object.defineProperties(D7(C),{_intern:{value:new Map},_key:{value:n}}),i!=null)for(const r of i)C.add(r);return C}return Cye(I,[{key:"has",value:function(n){return iA(sr(I.prototype),"has",this).call(this,F3(this,n))}},{key:"add",value:function(n){return iA(sr(I.prototype),"add",this).call(this,Aye(this,n))}},{key:"delete",value:function(n){return iA(sr(I.prototype),"delete",this).call(this,sye(this,n))}}]),I}($9(Set));function F3({_intern:e,_key:g},I){const i=g(I);return e.has(i)?e.get(i):I}function Aye({_intern:e,_key:g},I){const i=g(I);return e.has(i)?e.get(i):(e.set(i,I),I)}function sye({_intern:e,_key:g},I){const i=g(I);return e.has(i)&&(I=e.get(I),e.delete(i)),I}function lye(e){return e!==null&&typeof e=="object"?e.valueOf():e}function vb(e){return e}function cye(e,...g){return K0(e,vb,vb,g)}function iIt(e,...g){return K0(e,Array.from,vb,g)}function uye(e,g,...I){return K0(e,vb,g,I)}function nIt(e,g,...I){return K0(e,Array.from,g,I)}function CIt(e,...g){return K0(e,vb,dye,g)}function rIt(e,...g){return K0(e,Array.from,dye,g)}function dye(e){if(e.length!==1)throw new Error("duplicate key");return e[0]}function K0(e,g,I,i){return function n(C,r){if(r>=i.length)return I(C);const o=new q9,a=i[r++];let s=-1;for(const A of C){const l=a(A,++s,C),c=o.get(l);c?c.push(A):o.set(l,[A])}for(const[A,l]of o)o.set(A,n(l,r));return g(o)}(e,0)}function hye(e,g){return Array.from(g,I=>e[I])}function D3(e,...g){if(typeof e[Symbol.iterator]!="function")throw new TypeError("values is not iterable");e=Array.from(e);let[I=yi]=g;if(I.length===1||g.length>1){const i=Uint32Array.from(e,(n,C)=>C);return g.length>1?(g=g.map(n=>e.map(n)),i.sort((n,C)=>{for(const r of g){const o=yi(r[n],r[C]);if(o)return o}})):(I=e.map(I),i.sort((n,C)=>yi(I[n],I[C]))),hye(e,i)}return e.sort(I)}function oIt(e,g,I){return(g.length===1?D3(uye(e,g,I),([i,n],[C,r])=>yi(n,r)||yi(i,C)):D3(cye(e,I),([i,n],[C,r])=>g(n,r)||yi(i,C))).map(([i])=>i)}var aIt=Array.prototype,AIt=aIt.slice;function iV(e){return function(){return e}}var x3=Math.sqrt(50),E3=Math.sqrt(10),M3=Math.sqrt(2);function nh(e,g,I){var i,n=-1,C,r,o;if(g=+g,e=+e,I=+I,e===g&&I>0)return[e];if((i=g0){let a=Math.round(e/o),s=Math.round(g/o);for(a*og&&--s,r=new Array(C=s-a+1);++ng&&--s,r=new Array(C=s-a+1);++n=0?(C>=x3?10:C>=E3?5:C>=M3?2:1)*Math.pow(10,n):-Math.pow(10,-n)/(C>=x3?10:C>=E3?5:C>=M3?2:1)}function eX(e,g,I){var i=Math.abs(g-e)/Math.max(0,I),n=Math.pow(10,Math.floor(Math.log(i)/Math.LN10)),C=i/n;return C>=x3?n*=10:C>=E3?n*=5:C>=M3&&(n*=2),g0?(e=Math.floor(e/n)*n,g=Math.ceil(g/n)*n):n<0&&(e=Math.ceil(e*n)/n,g=Math.floor(g*n)/n),i=n}}function fye(e){return Math.ceil(Math.log(qT(e))/Math.LN2)+1}function kge(){var e=vb,g=M1,I=fye;function i(n){Array.isArray(n)||(n=Array.from(n));var C,r=n.length,o,a=new Array(r);for(C=0;C=l)if(m>=l&&g===M1){const b=DS(A,l,f);isFinite(b)&&(b>0?l=(Math.floor(l/b)+1)*b:b<0&&(l=(Math.ceil(l*-b)+1)/-b))}else c.pop()}for(var u=c.length;c[0]<=A;)c.shift(),--u;for(;c[u-1]>l;)c.pop(),--u;var d=new Array(u+1),h;for(C=0;C<=u;++C)h=d[C]=[],h.x0=C>0?c[C-1]:A,h.x1=C=i)&&(I=i);else{let i=-1;for(let n of e)(n=g(n,++i,e))!=null&&(I=n)&&(I=n)}return I}function tX(e,g){let I;if(g===void 0)for(const i of e)i!=null&&(I>i||I===void 0&&i>=i)&&(I=i);else{let i=-1;for(let n of e)(n=g(n,++i,e))!=null&&(I>n||I===void 0&&n>=n)&&(I=n)}return I}function x7(e,g,I=0,i=e.length-1,n=yi){for(;i>I;){if(i-I>600){const a=i-I+1,s=g-I+1,A=Math.log(a),l=.5*Math.exp(2*A/3),c=.5*Math.sqrt(A*l*(a-l)/a)*(s-a/2<0?-1:1),u=Math.max(I,Math.floor(g-s*l/a+c)),d=Math.min(i,Math.floor(g+(a-s)*l/a+c));x7(e,g,u,d,n)}const C=e[g];let r=I,o=i;for(Ly(e,I,g),n(e[i],C)>0&&Ly(e,I,i);r0;)--o}n(e[I],C)===0?Ly(e,I,o):(++o,Ly(e,o,i)),o<=g&&(I=o+1),g<=o&&(i=o-1)}return e}function Ly(e,g,I){const i=e[g];e[g]=e[I],e[I]=i}function XB(e,g,I){if(e=Float64Array.from(Ygt(e,I)),!!(i=e.length)){if((g=+g)<=0||i<2)return tX(e);if(g>=1)return z3(e);var i,n=(i-1)*g,C=Math.floor(n),r=z3(x7(e,C).subarray(0,C+1)),o=tX(e.subarray(C+1));return r+(o-r)*(n-C)}}function pye(e,g,I=gye){if(i=e.length){if((g=+g)<=0||i<2)return+I(e[0],0,e);if(g>=1)return+I(e[i-1],i-1,e);var i,n=(i-1)*g,C=Math.floor(n),r=+I(e[C],C,e),o=+I(e[C+1],C+1,e);return r+(o-r)*(n-C)}}function sIt(e,g,I){return Math.ceil((I-g)/(2*(XB(e,.75)-XB(e,.25))*Math.pow(qT(e),-1/3)))}function lIt(e,g,I){return Math.ceil((I-g)/(3.5*F7(e)*Math.pow(qT(e),-1/3)))}function bye(e,g){let I,i=-1,n=-1;if(g===void 0)for(const C of e)++n,C!=null&&(I=C)&&(I=C,i=n);else for(let C of e)(C=g(C,++n,e))!=null&&(I=C)&&(I=C,i=n);return i}function P3(e,g){let I=0,i=0;if(g===void 0)for(let n of e)n!=null&&(n=+n)>=n&&(++I,i+=n);else{let n=-1;for(let C of e)(C=g(C,++n,e))!=null&&(C=+C)>=C&&(++I,i+=C)}if(I)return i/I}function E7(e,g){return XB(e,.5,g)}function*cIt(e){for(const g of e)yield*g}function M7(e){return Array.from(cIt(e))}function yye(e,g){let I,i=-1,n=-1;if(g===void 0)for(const C of e)++n,C!=null&&(I>C||I===void 0&&C>=C)&&(I=C,i=n);else for(let C of e)(C=g(C,++n,e))!=null&&(I>C||I===void 0&&C>=C)&&(I=C,i=n);return i}function uIt(e,g=dIt){const I=[];let i,n=!1;for(const C of e)n&&I.push(g(i,C)),i=C,n=!0;return I}function dIt(e,g){return[e,g]}function nC(e,g,I){e=+e,g=+g,I=(n=arguments.length)<2?(g=e,e=0,1):n<3?1:+I;for(var i=-1,n=Math.max(0,Math.ceil((g-e)/I))|0,C=new Array(n);++i0:yi(r,r)===0)&&(I=C,n=r,i=!0)}}else for(const n of e)(i?g(n,I)>0:g(n,n)===0)&&(I=n,i=!0);return I}function fIt(e,g=yi){if(g.length===1)return bye(e,g);let I,i=-1,n=-1;for(const C of e)++n,(i<0?g(C,C)===0:g(C,I)>0)&&(I=C,i=n);return i}function pIt(e,g){const I=Zye(e,g);return I<0?void 0:I}const bIt=Gye(Math.random);function Gye(e){return function(I,i=0,n=I.length){let C=n-(i=+i);for(;C;){const r=e()*C--|0,o=I[C+i];I[C+i]=I[r+i],I[r+i]=o}return I}}function vye(e,g){let I=0;if(g===void 0)for(let i of e)(i=+i)&&(I+=i);else{let i=-1;for(let n of e)(n=+g(n,++i,e))&&(I+=n)}return I}function Bye(e){if(!(C=e.length))return[];for(var g=-1,I=tX(e,yIt),i=new Array(I);++gg(I,i,e))}function wIt(e,g,I){if(typeof g!="function")throw new TypeError("reducer is not a function");const i=e[Symbol.iterator]();let n,C,r=-1;if(arguments.length<3){if({done:n,value:I}=i.next(),n)return;++r}for(;{done:n,value:C}=i.next(),!n;)I=g(I,C,++r,e);return I}function RIt(e){if(typeof e[Symbol.iterator]!="function")throw new TypeError("values is not iterable");return Array.from(e).reverse()}function VIt(e,...g){e=new Set(e);for(const I of g)for(const i of I)e.delete(i);return e}function WIt(e,g){const I=g[Symbol.iterator](),i=new Set;for(const n of e){if(i.has(n))return!1;let C,r;for(;({value:C,done:r}=I.next())&&!r;){if(Object.is(n,C))return!1;i.add(C)}}return!0}function XIt(e){return e instanceof Set?e:new Set(e)}function HIt(e,...g){e=new Set(e),g=g.map(XIt);e:for(const I of e)for(const i of g)if(!i.has(I)){e.delete(I);continue e}return e}function Sye(e,g){const I=e[Symbol.iterator](),i=new Set;for(const n of g){if(i.has(n))continue;let C,r;for(;{value:C,done:r}=I.next();){if(r)return!1;if(i.add(C),Object.is(n,C))break}}return!0}function TIt(e,g){return Sye(g,e)}function NIt(...e){const g=new Set;for(const I of e)for(const i of I)g.add(i);return g}const kIt=Object.freeze(Object.defineProperty({__proto__:null,Adder:Yi,InternMap:q9,InternSet:IIt,ascending:yi,bin:kge,bisect:qh,bisectCenter:Fgt,bisectLeft:Kgt,bisectRight:iye,bisector:Y0,count:qT,cross:zgt,cumsum:Pgt,descending:Jgt,deviation:F7,difference:VIt,disjoint:WIt,every:GIt,extent:M1,fcumsum:jgt,filter:BIt,fsum:Qgt,greatest:mIt,greatestIndex:fIt,group:cye,groupSort:oIt,groups:iIt,histogram:kge,index:CIt,indexes:rIt,intersection:HIt,least:hIt,leastIndex:Zye,map:SIt,max:z3,maxIndex:bye,mean:P3,median:E7,merge:M7,min:tX,minIndex:yye,nice:mye,pairs:uIt,permute:hye,quantile:XB,quantileSorted:pye,quickselect:x7,range:nC,reduce:wIt,reverse:RIt,rollup:uye,rollups:nIt,scan:pIt,shuffle:bIt,shuffler:Gye,some:vIt,sort:D3,subset:TIt,sum:vye,superset:Sye,thresholdFreedmanDiaconis:sIt,thresholdScott:lIt,thresholdSturges:fye,tickIncrement:DS,tickStep:eX,ticks:nh,transpose:Bye,union:NIt,variance:K7,zip:ZIt},Symbol.toStringTag,{value:"Module"}));function so(e,g){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(g).domain(e);break}return this}function tl(e,g){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof g=="function"?this.interpolator(g):this.range(g);break}}return this}const J3=Symbol("implicit");function z7(){var e=new q9,g=[],I=[],i=J3;function n(C){let r=e.get(C);if(r===void 0){if(i!==J3)return i;e.set(C,r=g.push(C)-1)}return I[r%I.length]}return n.domain=function(C){if(!arguments.length)return g.slice();g=[],e=new q9;for(const r of C)e.has(r)||e.set(r,g.push(r)-1);return n},n.range=function(C){return arguments.length?(I=Array.from(C),n):I.slice()},n.unknown=function(C){return arguments.length?(i=C,n):i},n.copy=function(){return z7(g,I).unknown(i)},so.apply(n,arguments),n}function xS(){var e=z7().unknown(void 0),g=e.domain,I=e.range,i=0,n=1,C,r,o=!1,a=0,s=0,A=.5;delete e.unknown;function l(){var c=g().length,u=n>8&15|g>>4&240,g>>4&15|g&240,(g&15)<<4|g&15,1):I===8?nV(g>>24&255,g>>16&255,g>>8&255,(g&255)/255):I===4?nV(g>>12&15|g>>8&240,g>>8&15|g>>4&240,g>>4&15|g&240,((g&15)<<4|g&15)/255):null):(g=FIt.exec(e))?new cn(g[1],g[2],g[3],1):(g=DIt.exec(e))?new cn(g[1]*255/100,g[2]*255/100,g[3]*255/100,1):(g=xIt.exec(e))?nV(g[1],g[2],g[3],g[4]):(g=EIt.exec(e))?nV(g[1]*255/100,g[2]*255/100,g[3]*255/100,g[4]):(g=MIt.exec(e))?Mge(g[1],g[2]/100,g[3]/100,1):(g=zIt.exec(e))?Mge(g[1],g[2]/100,g[3]/100,g[4]):Yge.hasOwnProperty(e)?Dge(Yge[e]):e==="transparent"?new cn(NaN,NaN,NaN,0):null}function Dge(e){return new cn(e>>16&255,e>>8&255,e&255,1)}function nV(e,g,I,i){return i<=0&&(e=g=I=NaN),new cn(e,g,I,i)}function P7(e){return e instanceof iu||(e=Hi(e)),e?(e=e.rgb(),new cn(e.r,e.g,e.b,e.opacity)):new cn}function Sb(e,g,I,i){return arguments.length===1?P7(e):new cn(e,g,I,i??1)}function cn(e,g,I,i){this.r=+e,this.g=+g,this.b=+I,this.opacity=+i}F0(cn,Sb,ES(iu,{brighter:function(e){return e=e==null?Bb:Math.pow(Bb,e),new cn(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=e==null?Ch:Math.pow(Ch,e),new cn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:xge,formatHex:xge,formatRgb:Ege,toString:Ege}));function xge(){return"#"+F5(this.r)+F5(this.g)+F5(this.b)}function Ege(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(e===1?")":", "+e+")")}function F5(e){return e=Math.max(0,Math.min(255,Math.round(e)||0)),(e<16?"0":"")+e.toString(16)}function Mge(e,g,I,i){return i<=0?e=g=I=NaN:I<=0||I>=1?e=g=NaN:g<=0&&(e=NaN),new Oa(e,g,I,i)}function Rye(e){if(e instanceof Oa)return new Oa(e.h,e.s,e.l,e.opacity);if(e instanceof iu||(e=Hi(e)),!e)return new Oa;if(e instanceof Oa)return e;e=e.rgb();var g=e.r/255,I=e.g/255,i=e.b/255,n=Math.min(g,I,i),C=Math.max(g,I,i),r=NaN,o=C-n,a=(C+n)/2;return o?(g===C?r=(I-i)/o+(I0&&a<1?0:r,new Oa(r,o,a,e.opacity)}function Vye(e,g,I,i){return arguments.length===1?Rye(e):new Oa(e,g,I,i??1)}function Oa(e,g,I,i){this.h=+e,this.s=+g,this.l=+I,this.opacity=+i}F0(Oa,Vye,ES(iu,{brighter:function(e){return e=e==null?Bb:Math.pow(Bb,e),new Oa(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?Ch:Math.pow(Ch,e),new Oa(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+(this.h<0)*360,g=isNaN(e)||isNaN(this.s)?0:this.s,I=this.l,i=I+(I<.5?I:1-I)*g,n=2*I-i;return new cn(D5(e>=240?e-240:e+120,n,i),D5(e,n,i),D5(e<120?e+240:e-120,n,i),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(e===1?")":", "+e+")")}}));function D5(e,g,I){return(e<60?g+(I-g)*e/60:e<180?I:e<240?g+(I-g)*(240-e)/60:g)*255}const Wye=Math.PI/180,Xye=180/Math.PI,gX=18,Hye=.96422,Tye=1,Nye=.82521,kye=4/29,Rp=6/29,Yye=3*Rp*Rp,JIt=Rp*Rp*Rp;function Kye(e){if(e instanceof Ca)return new Ca(e.l,e.a,e.b,e.opacity);if(e instanceof nA)return Eye(e);e instanceof cn||(e=P7(e));var g=z5(e.r),I=z5(e.g),i=z5(e.b),n=x5((.2225045*g+.7168786*I+.0606169*i)/Tye),C,r;return g===I&&I===i?C=r=n:(C=x5((.4360747*g+.3850649*I+.1430804*i)/Hye),r=x5((.0139322*g+.0971045*I+.7141733*i)/Nye)),new Ca(116*n-16,500*(C-n),200*(n-r),e.opacity)}function OIt(e,g){return new Ca(e,0,0,g??1)}function Fye(e,g,I,i){return arguments.length===1?Kye(e):new Ca(e,g,I,i??1)}function Ca(e,g,I,i){this.l=+e,this.a=+g,this.b=+I,this.opacity=+i}F0(Ca,Fye,ES(iu,{brighter:function(e){return new Ca(this.l+gX*(e??1),this.a,this.b,this.opacity)},darker:function(e){return new Ca(this.l-gX*(e??1),this.a,this.b,this.opacity)},rgb:function(){var e=(this.l+16)/116,g=isNaN(this.a)?e:e+this.a/500,I=isNaN(this.b)?e:e-this.b/200;return g=Hye*E5(g),e=Tye*E5(e),I=Nye*E5(I),new cn(M5(3.1338561*g-1.6168667*e-.4906146*I),M5(-.9787684*g+1.9161415*e+.033454*I),M5(.0719453*g-.2289914*e+1.4052427*I),this.opacity)}}));function x5(e){return e>JIt?Math.pow(e,1/3):e/Yye+kye}function E5(e){return e>Rp?e*e*e:Yye*(e-kye)}function M5(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function z5(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Dye(e){if(e instanceof nA)return new nA(e.h,e.c,e.l,e.opacity);if(e instanceof Ca||(e=Kye(e)),e.a===0&&e.b===0)return new nA(NaN,0()=>e;function QIt(e,g){return function(I){return e+I*g}}function jIt(e,g,I){return e=Math.pow(e,I),g=Math.pow(g,I)-e,I=1/I,function(i){return Math.pow(e+i*g,I)}}function $It(e){return(e=+e)==1?Pye:function(g,I){return I-g?jIt(g,I,e):_7(isNaN(g)?I:g)}}function Pye(e,g){var I=g-e;return I?QIt(e,I):_7(isNaN(e)?g:e)}const wb=function e(g){var I=$It(g);function i(n,C){var r=I((n=Sb(n)).r,(C=Sb(C)).r),o=I(n.g,C.g),a=I(n.b,C.b),s=Pye(n.opacity,C.opacity);return function(A){return n.r=r(A),n.g=o(A),n.b=a(A),n.opacity=s(A),n+""}}return i.gamma=e,i}(1);function qIt(e,g){g||(g=[]);var I=e?Math.min(g.length,e.length):0,i=g.slice(),n;return function(C){for(n=0;nI&&(C=g.slice(I,C),o[r]?o[r]+=C:o[++r]=C),(i=i[0])===(n=n[0])?o[r]?o[r]+=n:o[++r]=n:(o[++r]=null,a.push({i:r,x:Mr(i,n)})),I=P5.lastIndex;return I180?A+=360:A-s>180&&(s+=360),c.push({i:l.push(n(l)+"rotate(",null,i)-2,x:Mr(s,A)})):A&&l.push(n(l)+"rotate("+A+i)}function o(s,A,l,c){s!==A?c.push({i:l.push(n(l)+"skewX(",null,i)-2,x:Mr(s,A)}):A&&l.push(n(l)+"skewX("+A+i)}function a(s,A,l,c,u,d){if(s!==l||A!==c){var h=u.push(n(u)+"scale(",null,",",null,")");d.push({i:h-4,x:Mr(s,l)},{i:h-2,x:Mr(A,c)})}else(l!==1||c!==1)&&u.push(n(u)+"scale("+l+","+c+")")}return function(s,A){var l=[],c=[];return s=e(s),A=e(A),C(s.translateX,s.translateY,A.translateX,A.translateY,l,c),r(s.rotate,A.rotate,l,c),o(s.skewX,A.skewX,l,c),a(s.scaleX,s.scaleY,A.scaleX,A.scaleY,l,c),s=A=null,function(u){for(var d=-1,h=c.length,m;++dg&&(I=e,e=g,g=I),function(i){return Math.max(e,Math.min(g,i))}}function dit(e,g,I){var i=e[0],n=e[1],C=g[0],r=g[1];return n2?hit:dit,a=s=null,l}function l(c){return c==null||isNaN(c=+c)?C:(a||(a=o(e.map(i),g,I)))(i(r(c)))}return l.invert=function(c){return r(n((s||(s=o(g,e.map(i),Mr)))(c)))},l.domain=function(c){return arguments.length?(e=Array.from(c,IX),A()):e.slice()},l.range=function(c){return arguments.length?(g=Array.from(c),A()):g.slice()},l.rangeRound=function(c){return g=Array.from(c),I=U7,A()},l.clamp=function(c){return arguments.length?(r=c?!0:CC,A()):r!==CC},l.interpolate=function(c){return arguments.length?(I=c,A()):I},l.unknown=function(c){return arguments.length?(C=c,l):C},function(c,u){return i=c,n=u,A()}}function Q7(){return tN()(CC,CC)}function mit(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function iX(e,g){if((I=(e=g?e.toExponential(g-1):e.toExponential()).indexOf("e"))<0)return null;var I,i=e.slice(0,I);return[i.length>1?i[0]+i.slice(2):i,+e.slice(I+1)]}function Rb(e){return e=iX(Math.abs(e)),e?e[1]:NaN}function fit(e,g){return function(I,i){for(var n=I.length,C=[],r=0,o=e[0],a=0;n>0&&o>0&&(a+o+1>i&&(o=Math.max(1,i-a)),C.push(I.substring(n-=o,n+o)),!((a+=o+1)>i));)o=e[r=(r+1)%e.length];return C.reverse().join(g)}}function pit(e){return function(g){return g.replace(/[0-9]/g,function(I){return e[+I]})}}var bit=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Vb(e){if(!(g=bit.exec(e)))throw new Error("invalid format: "+e);var g;return new gN({fill:g[1],align:g[2],sign:g[3],symbol:g[4],zero:g[5],width:g[6],comma:g[7],precision:g[8]&&g[8].slice(1),trim:g[9],type:g[10]})}Vb.prototype=gN.prototype;function gN(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}gN.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function yit(e){e:for(var g=e.length,I=1,i=-1,n;I0&&(i=0);break}return i>0?e.slice(0,i)+e.slice(n+1):e}var Uye;function Zit(e,g){var I=iX(e,g);if(!I)return e+"";var i=I[0],n=I[1],C=n-(Uye=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,r=i.length;return C===r?i:C>r?i+new Array(C-r+1).join("0"):C>0?i.slice(0,C)+"."+i.slice(C):"0."+new Array(1-C).join("0")+iX(e,Math.max(0,g+C-1))[0]}function Uge(e,g){var I=iX(e,g);if(!I)return e+"";var i=I[0],n=I[1];return n<0?"0."+new Array(-n).join("0")+i:i.length>n+1?i.slice(0,n+1)+"."+i.slice(n+1):i+new Array(n-i.length+2).join("0")}const Qge={"%":(e,g)=>(e*100).toFixed(g),b:e=>Math.round(e).toString(2),c:e=>e+"",d:mit,e:(e,g)=>e.toExponential(g),f:(e,g)=>e.toFixed(g),g:(e,g)=>e.toPrecision(g),o:e=>Math.round(e).toString(8),p:(e,g)=>Uge(e*100,g),r:Uge,s:Zit,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function jge(e){return e}var $ge=Array.prototype.map,qge=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Qye(e){var g=e.grouping===void 0||e.thousands===void 0?jge:fit($ge.call(e.grouping,Number),e.thousands+""),I=e.currency===void 0?"":e.currency[0]+"",i=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",C=e.numerals===void 0?jge:pit($ge.call(e.numerals,String)),r=e.percent===void 0?"%":e.percent+"",o=e.minus===void 0?"−":e.minus+"",a=e.nan===void 0?"NaN":e.nan+"";function s(l){l=Vb(l);var c=l.fill,u=l.align,d=l.sign,h=l.symbol,m=l.zero,f=l.width,b=l.comma,p=l.precision,y=l.trim,Z=l.type;Z==="n"?(b=!0,Z="g"):Qge[Z]||(p===void 0&&(p=12),y=!0,Z="g"),(m||c==="0"&&u==="=")&&(m=!0,c="0",u="=");var B=h==="$"?I:h==="#"&&/[boxX]/.test(Z)?"0"+Z.toLowerCase():"",G=h==="$"?i:/[%p]/.test(Z)?r:"",v=Qge[Z],w=/[defgprs%]/.test(Z);p=p===void 0?6:/[gprs]/.test(Z)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p));function R(S){var X=B,W=G,V,H,Y;if(Z==="c")W=v(S)+W,S="";else{S=+S;var K=S<0||1/S<0;if(S=isNaN(S)?a:v(Math.abs(S),p),y&&(S=yit(S)),K&&+S==0&&d!=="+"&&(K=!1),X=(K?d==="("?d:o:d==="-"||d==="("?"":d)+X,W=(Z==="s"?qge[8+Uye/3]:"")+W+(K&&d==="("?")":""),w){for(V=-1,H=S.length;++VY||Y>57){W=(Y===46?n+S.slice(V+1):S.slice(V))+W,S=S.slice(0,V);break}}}b&&!m&&(S=g(S,1/0));var x=X.length+S.length+W.length,J=x>1)+X+S+W+J.slice(x);break;default:S=J+X+S+W;break}return C(S)}return R.toString=function(){return l+""},R}function A(l,c){var u=s((l=Vb(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(Rb(c)/3)))*3,h=Math.pow(10,-d),m=qge[8+d/3];return function(f){return u(h*f)+m}}return{format:s,formatPrefix:A}}var rV,ur,tm;jye({thousands:",",grouping:[3],currency:["$",""]});function jye(e){return rV=Qye(e),ur=rV.format,tm=rV.formatPrefix,rV}function $ye(e){return Math.max(0,-Rb(Math.abs(e)))}function D0(e,g){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Rb(g)/3)))*3-Rb(Math.abs(e)))}function qye(e,g){return e=Math.abs(e),g=Math.abs(g)-e,Math.max(0,Rb(g)-Rb(e))+1}const Git=Object.freeze(Object.defineProperty({__proto__:null,FormatSpecifier:gN,get format(){return ur},formatDefaultLocale:jye,formatLocale:Qye,get formatPrefix(){return tm},formatSpecifier:Vb,precisionFixed:$ye,precisionPrefix:D0,precisionRound:qye},Symbol.toStringTag,{value:"Module"}));function eZe(e,g,I,i){var n=eX(e,g,I),C;switch(i=Vb(i??",f"),i.type){case"s":{var r=Math.max(Math.abs(e),Math.abs(g));return i.precision==null&&!isNaN(C=D0(n,r))&&(i.precision=C),tm(i,r)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(C=qye(n,Math.max(Math.abs(e),Math.abs(g))))&&(i.precision=C-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(C=$ye(n))&&(i.precision=C-(i.type==="%")*2);break}}return ur(i)}function nu(e){var g=e.domain;return e.ticks=function(I){var i=g();return nh(i[0],i[i.length-1],I??10)},e.tickFormat=function(I,i){var n=g();return eZe(n[0],n[n.length-1],I??10,i)},e.nice=function(I){I==null&&(I=10);var i=g(),n=0,C=i.length-1,r=i[n],o=i[C],a,s,A=10;for(o0;){if(s=DS(r,o,I),s===a)return i[n]=r,i[C]=o,g(i);if(s>0)r=Math.floor(r/s)*s,o=Math.ceil(o/s)*s;else if(s<0)r=Math.ceil(r*s)/s,o=Math.floor(o*s)/s;else break;a=s}return e},e}function gg(){var e=Q7();return e.copy=function(){return MS(e,gg())},so.apply(e,arguments),nu(e)}function tZe(e){var g;function I(i){return i==null||isNaN(i=+i)?g:i}return I.invert=I,I.domain=I.range=function(i){return arguments.length?(e=Array.from(i,IX),I):e.slice()},I.unknown=function(i){return arguments.length?(g=i,I):g},I.copy=function(){return tZe(e).unknown(g)},e=arguments.length?Array.from(e,IX):[0,1],nu(I)}function gZe(e,g){e=e.slice();var I=0,i=e.length-1,n=e[I],C=e[i],r;return CMath.pow(e,g)}function Rit(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),g=>Math.log(g)/e)}function gIe(e){return(g,I)=>-e(-g,I)}function j7(e){const g=e(eIe,tIe),I=g.domain;let i=10,n,C;function r(){return n=Rit(i),C=wit(i),I()[0]<0?(n=gIe(n),C=gIe(C),e(vit,Bit)):e(eIe,tIe),g}return g.base=function(o){return arguments.length?(i=+o,r()):i},g.domain=function(o){return arguments.length?(I(o),r()):I()},g.ticks=o=>{const a=I();let s=a[0],A=a[a.length-1];const l=A0){for(;c<=u;++c)for(d=1;dA)break;f.push(h)}}else for(;c<=u;++c)for(d=i-1;d>=1;--d)if(h=c>0?d/C(-c):d*C(c),!(hA)break;f.push(h)}f.length*2{if(o==null&&(o=10),a==null&&(a=i===10?"s":","),typeof a!="function"&&(!(i%1)&&(a=Vb(a)).precision==null&&(a.trim=!0),a=ur(a)),o===1/0)return a;const s=Math.max(1,i*o/g.ticks().length);return A=>{let l=A/C(Math.round(n(A)));return l*iI(gZe(I(),{floor:o=>C(Math.floor(n(o))),ceil:o=>C(Math.ceil(n(o)))})),g}function Cu(){const e=j7(tN()).domain([1,10]);return e.copy=()=>MS(e,Cu()).base(e.base()),so.apply(e,arguments),e}function IIe(e){return function(g){return Math.sign(g)*Math.log1p(Math.abs(g/e))}}function iIe(e){return function(g){return Math.sign(g)*Math.expm1(Math.abs(g))*e}}function $7(e){var g=1,I=e(IIe(g),iIe(g));return I.constant=function(i){return arguments.length?e(IIe(g=+i),iIe(g)):g},nu(I)}function IZe(){var e=$7(tN());return e.copy=function(){return MS(e,IZe()).constant(e.constant())},so.apply(e,arguments)}function nIe(e){return function(g){return g<0?-Math.pow(-g,e):Math.pow(g,e)}}function Vit(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function Wit(e){return e<0?-e*e:e*e}function q7(e){var g=e(CC,CC),I=1;function i(){return I===1?e(CC,CC):I===.5?e(Vit,Wit):e(nIe(I),nIe(1/I))}return g.exponent=function(n){return arguments.length?(I=+n,i()):I},nu(g)}function eQ(){var e=q7(tN());return e.copy=function(){return MS(e,eQ()).exponent(e.exponent())},so.apply(e,arguments),e}function Xit(){return eQ.apply(null,arguments).exponent(.5)}function CIe(e){return Math.sign(e)*e*e}function Hit(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function iZe(){var e=Q7(),g=[0,1],I=!1,i;function n(C){var r=Hit(e(C));return isNaN(r)?i:I?Math.round(r):r}return n.invert=function(C){return e.invert(CIe(C))},n.domain=function(C){return arguments.length?(e.domain(C),n):e.domain()},n.range=function(C){return arguments.length?(e.range((g=Array.from(C,IX)).map(CIe)),n):g.slice()},n.rangeRound=function(C){return n.range(C).round(!0)},n.round=function(C){return arguments.length?(I=!!C,n):I},n.clamp=function(C){return arguments.length?(e.clamp(C),n):e.clamp()},n.unknown=function(C){return arguments.length?(i=C,n):i},n.copy=function(){return iZe(e.domain(),g).round(I).clamp(e.clamp()).unknown(i)},so.apply(n,arguments),nu(n)}function nX(){var e=[],g=[],I=[],i;function n(){var r=0,o=Math.max(1,g.length);for(I=new Array(o-1);++r0?I[o-1]:e[0],o=I?[i[I-1],g]:[i[s-1],i[s]]},r.unknown=function(a){return arguments.length&&(C=a),r},r.thresholds=function(){return i.slice()},r.copy=function(){return nZe().domain([e,g]).range(n).unknown(C)},so.apply(nu(r),arguments)}function CZe(){var e=[.5],g=[0,1],I,i=1;function n(C){return C!=null&&C<=C?g[qh(e,C,0,i)]:I}return n.domain=function(C){return arguments.length?(e=Array.from(C),i=Math.min(e.length,g.length-1),n):e.slice()},n.range=function(C){return arguments.length?(g=Array.from(C),i=Math.min(e.length,g.length-1),n):g.slice()},n.invertExtent=function(C){var r=g.indexOf(C);return[e[r-1],e[r]]},n.unknown=function(C){return arguments.length?(I=C,n):I},n.copy=function(){return CZe().domain(e).range(g).unknown(I)},so.apply(n,arguments)}const J5=new Date,O5=new Date;function Fi(e,g,I,i){function n(C){return e(C=arguments.length===0?new Date:new Date(+C)),C}return n.floor=C=>(e(C=new Date(+C)),C),n.ceil=C=>(e(C=new Date(C-1)),g(C,1),e(C),C),n.round=C=>{const r=n(C),o=n.ceil(C);return C-r(g(C=new Date(+C),r==null?1:Math.floor(r)),C),n.range=(C,r,o)=>{const a=[];if(C=n.ceil(C),o=o==null?1:Math.floor(o),!(C0))return a;let s;do a.push(s=new Date(+C)),g(C,o),e(C);while(sFi(r=>{if(r>=r)for(;e(r),!C(r);)r.setTime(r-1)},(r,o)=>{if(r>=r)if(o<0)for(;++o<=0;)for(;g(r,-1),!C(r););else for(;--o>=0;)for(;g(r,1),!C(r););}),I&&(n.count=(C,r)=>(J5.setTime(+C),O5.setTime(+r),e(J5),e(O5),Math.floor(I(J5,O5))),n.every=C=>(C=Math.floor(C),!isFinite(C)||!(C>0)?null:C>1?n.filter(i?r=>i(r)%C===0:r=>n.count(0,r)%C===0):n)),n}const CX=Fi(()=>{},(e,g)=>{e.setTime(+e+g)},(e,g)=>g-e);CX.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Fi(g=>{g.setTime(Math.floor(g/e)*e)},(g,I)=>{g.setTime(+g+I*e)},(g,I)=>(I-g)/e):CX);CX.range;const ds=1e3,Ur=ds*60,hs=Ur*60,xs=hs*24,tQ=xs*7,rIe=xs*30,_5=xs*365,sd=Fi(e=>{e.setTime(e-e.getMilliseconds())},(e,g)=>{e.setTime(+e+g*ds)},(e,g)=>(g-e)/ds,e=>e.getUTCSeconds());sd.range;const gQ=Fi(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*ds)},(e,g)=>{e.setTime(+e+g*Ur)},(e,g)=>(g-e)/Ur,e=>e.getMinutes());gQ.range;const IQ=Fi(e=>{e.setUTCSeconds(0,0)},(e,g)=>{e.setTime(+e+g*Ur)},(e,g)=>(g-e)/Ur,e=>e.getUTCMinutes());IQ.range;const iQ=Fi(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*ds-e.getMinutes()*Ur)},(e,g)=>{e.setTime(+e+g*hs)},(e,g)=>(g-e)/hs,e=>e.getHours());iQ.range;const nQ=Fi(e=>{e.setUTCMinutes(0,0,0)},(e,g)=>{e.setTime(+e+g*hs)},(e,g)=>(g-e)/hs,e=>e.getUTCHours());nQ.range;const zS=Fi(e=>e.setHours(0,0,0,0),(e,g)=>e.setDate(e.getDate()+g),(e,g)=>(g-e-(g.getTimezoneOffset()-e.getTimezoneOffset())*Ur)/xs,e=>e.getDate()-1);zS.range;const IN=Fi(e=>{e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCDate(e.getUTCDate()+g)},(e,g)=>(g-e)/xs,e=>e.getUTCDate()-1);IN.range;const rZe=Fi(e=>{e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCDate(e.getUTCDate()+g)},(e,g)=>(g-e)/xs,e=>Math.floor(e/xs));rZe.range;function gm(e){return Fi(g=>{g.setDate(g.getDate()-(g.getDay()+7-e)%7),g.setHours(0,0,0,0)},(g,I)=>{g.setDate(g.getDate()+I*7)},(g,I)=>(I-g-(I.getTimezoneOffset()-g.getTimezoneOffset())*Ur)/tQ)}const iN=gm(0),rX=gm(1),Tit=gm(2),Nit=gm(3),Wb=gm(4),kit=gm(5),Yit=gm(6);iN.range;rX.range;Tit.range;Nit.range;Wb.range;kit.range;Yit.range;function Im(e){return Fi(g=>{g.setUTCDate(g.getUTCDate()-(g.getUTCDay()+7-e)%7),g.setUTCHours(0,0,0,0)},(g,I)=>{g.setUTCDate(g.getUTCDate()+I*7)},(g,I)=>(I-g)/tQ)}const nN=Im(0),oX=Im(1),Kit=Im(2),Fit=Im(3),Xb=Im(4),Dit=Im(5),xit=Im(6);nN.range;oX.range;Kit.range;Fit.range;Xb.range;Dit.range;xit.range;const CQ=Fi(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,g)=>{e.setMonth(e.getMonth()+g)},(e,g)=>g.getMonth()-e.getMonth()+(g.getFullYear()-e.getFullYear())*12,e=>e.getMonth());CQ.range;const rQ=Fi(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCMonth(e.getUTCMonth()+g)},(e,g)=>g.getUTCMonth()-e.getUTCMonth()+(g.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());rQ.range;const Es=Fi(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,g)=>{e.setFullYear(e.getFullYear()+g)},(e,g)=>g.getFullYear()-e.getFullYear(),e=>e.getFullYear());Es.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Fi(g=>{g.setFullYear(Math.floor(g.getFullYear()/e)*e),g.setMonth(0,1),g.setHours(0,0,0,0)},(g,I)=>{g.setFullYear(g.getFullYear()+I*e)});Es.range;const Ms=Fi(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCFullYear(e.getUTCFullYear()+g)},(e,g)=>g.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Ms.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Fi(g=>{g.setUTCFullYear(Math.floor(g.getUTCFullYear()/e)*e),g.setUTCMonth(0,1),g.setUTCHours(0,0,0,0)},(g,I)=>{g.setUTCFullYear(g.getUTCFullYear()+I*e)});Ms.range;function oZe(e,g,I,i,n,C){const r=[[sd,1,ds],[sd,5,5*ds],[sd,15,15*ds],[sd,30,30*ds],[C,1,Ur],[C,5,5*Ur],[C,15,15*Ur],[C,30,30*Ur],[n,1,hs],[n,3,3*hs],[n,6,6*hs],[n,12,12*hs],[i,1,xs],[i,2,2*xs],[I,1,tQ],[g,1,rIe],[g,3,3*rIe],[e,1,_5]];function o(s,A,l){const c=Am).right(r,c);if(u===r.length)return e.every(eX(s/_5,A/_5,l));if(u===0)return CX.every(Math.max(eX(s,A,l),1));const[d,h]=r[c/r[u-1][2]53)return null;"w"in ve||(ve.w=1),"Z"in ve?(Be=U5(Uy(ve.y,0,1)),Je=Be.getUTCDay(),Be=Je>4||Je===0?oX.ceil(Be):oX(Be),Be=IN.offset(Be,(ve.V-1)*7),ve.y=Be.getUTCFullYear(),ve.m=Be.getUTCMonth(),ve.d=Be.getUTCDate()+(ve.w+6)%7):(Be=L5(Uy(ve.y,0,1)),Je=Be.getDay(),Be=Je>4||Je===0?rX.ceil(Be):rX(Be),Be=zS.offset(Be,(ve.V-1)*7),ve.y=Be.getFullYear(),ve.m=Be.getMonth(),ve.d=Be.getDate()+(ve.w+6)%7)}else("W"in ve||"U"in ve)&&("w"in ve||(ve.w="u"in ve?ve.u%7:"W"in ve?1:0),Je="Z"in ve?U5(Uy(ve.y,0,1)).getUTCDay():L5(Uy(ve.y,0,1)).getDay(),ve.m=0,ve.d="W"in ve?(ve.w+6)%7+ve.W*7-(Je+5)%7:ve.w+ve.U*7-(Je+6)%7);return"Z"in ve?(ve.H+=ve.Z/100|0,ve.M+=ve.Z%100,U5(ve)):L5(ve)}}function v(ne,be,pe,ve){for(var We=0,Be=be.length,Je=pe.length,Pe,De;We=Je)return-1;if(Pe=be.charCodeAt(We++),Pe===37){if(Pe=be.charAt(We++),De=Z[Pe in oIe?be.charAt(We++):Pe],!De||(ve=De(ne,pe,ve))<0)return-1}else if(Pe!=pe.charCodeAt(ve++))return-1}return ve}function w(ne,be,pe){var ve=s.exec(be.slice(pe));return ve?(ne.p=A.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function R(ne,be,pe){var ve=u.exec(be.slice(pe));return ve?(ne.w=d.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function S(ne,be,pe){var ve=l.exec(be.slice(pe));return ve?(ne.w=c.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function X(ne,be,pe){var ve=f.exec(be.slice(pe));return ve?(ne.m=b.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function W(ne,be,pe){var ve=h.exec(be.slice(pe));return ve?(ne.m=m.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function V(ne,be,pe){return v(ne,g,be,pe)}function H(ne,be,pe){return v(ne,I,be,pe)}function Y(ne,be,pe){return v(ne,i,be,pe)}function K(ne){return r[ne.getDay()]}function x(ne){return C[ne.getDay()]}function J(ne){return a[ne.getMonth()]}function P(ne){return o[ne.getMonth()]}function ge(ne){return n[+(ne.getHours()>=12)]}function q(ne){return 1+~~(ne.getMonth()/3)}function $(ne){return r[ne.getUTCDay()]}function j(ne){return C[ne.getUTCDay()]}function te(ne){return a[ne.getUTCMonth()]}function Q(ne){return o[ne.getUTCMonth()]}function ie(ne){return n[+(ne.getUTCHours()>=12)]}function he(ne){return 1+~~(ne.getUTCMonth()/3)}return{format:function(ne){var be=B(ne+="",p);return be.toString=function(){return ne},be},parse:function(ne){var be=G(ne+="",!1);return be.toString=function(){return ne},be},utcFormat:function(ne){var be=B(ne+="",y);return be.toString=function(){return ne},be},utcParse:function(ne){var be=G(ne+="",!0);return be.toString=function(){return ne},be}}}var oIe={"-":"",_:" ",0:"0"},$i=/^\s*\d+/,Oit=/^%/,_it=/[\\^$*+?|[\]().{}]/g;function Yg(e,g,I){var i=e<0?"-":"",n=(i?-e:e)+"",C=n.length;return i+(C[g.toLowerCase(),I]))}function Uit(e,g,I){var i=$i.exec(g.slice(I,I+1));return i?(e.w=+i[0],I+i[0].length):-1}function Qit(e,g,I){var i=$i.exec(g.slice(I,I+1));return i?(e.u=+i[0],I+i[0].length):-1}function jit(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.U=+i[0],I+i[0].length):-1}function $it(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.V=+i[0],I+i[0].length):-1}function qit(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.W=+i[0],I+i[0].length):-1}function aIe(e,g,I){var i=$i.exec(g.slice(I,I+4));return i?(e.y=+i[0],I+i[0].length):-1}function AIe(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.y=+i[0]+(+i[0]>68?1900:2e3),I+i[0].length):-1}function ent(e,g,I){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(g.slice(I,I+6));return i?(e.Z=i[1]?0:-(i[2]+(i[3]||"00")),I+i[0].length):-1}function tnt(e,g,I){var i=$i.exec(g.slice(I,I+1));return i?(e.q=i[0]*3-3,I+i[0].length):-1}function gnt(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.m=i[0]-1,I+i[0].length):-1}function sIe(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.d=+i[0],I+i[0].length):-1}function Int(e,g,I){var i=$i.exec(g.slice(I,I+3));return i?(e.m=0,e.d=+i[0],I+i[0].length):-1}function lIe(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.H=+i[0],I+i[0].length):-1}function int(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.M=+i[0],I+i[0].length):-1}function nnt(e,g,I){var i=$i.exec(g.slice(I,I+2));return i?(e.S=+i[0],I+i[0].length):-1}function Cnt(e,g,I){var i=$i.exec(g.slice(I,I+3));return i?(e.L=+i[0],I+i[0].length):-1}function rnt(e,g,I){var i=$i.exec(g.slice(I,I+6));return i?(e.L=Math.floor(i[0]/1e3),I+i[0].length):-1}function ont(e,g,I){var i=Oit.exec(g.slice(I,I+1));return i?I+i[0].length:-1}function ant(e,g,I){var i=$i.exec(g.slice(I));return i?(e.Q=+i[0],I+i[0].length):-1}function Ant(e,g,I){var i=$i.exec(g.slice(I));return i?(e.s=+i[0],I+i[0].length):-1}function cIe(e,g){return Yg(e.getDate(),g,2)}function snt(e,g){return Yg(e.getHours(),g,2)}function lnt(e,g){return Yg(e.getHours()%12||12,g,2)}function cnt(e,g){return Yg(1+zS.count(Es(e),e),g,3)}function aZe(e,g){return Yg(e.getMilliseconds(),g,3)}function unt(e,g){return aZe(e,g)+"000"}function dnt(e,g){return Yg(e.getMonth()+1,g,2)}function hnt(e,g){return Yg(e.getMinutes(),g,2)}function mnt(e,g){return Yg(e.getSeconds(),g,2)}function fnt(e){var g=e.getDay();return g===0?7:g}function pnt(e,g){return Yg(iN.count(Es(e)-1,e),g,2)}function AZe(e){var g=e.getDay();return g>=4||g===0?Wb(e):Wb.ceil(e)}function bnt(e,g){return e=AZe(e),Yg(Wb.count(Es(e),e)+(Es(e).getDay()===4),g,2)}function ynt(e){return e.getDay()}function Znt(e,g){return Yg(rX.count(Es(e)-1,e),g,2)}function Gnt(e,g){return Yg(e.getFullYear()%100,g,2)}function vnt(e,g){return e=AZe(e),Yg(e.getFullYear()%100,g,2)}function Bnt(e,g){return Yg(e.getFullYear()%1e4,g,4)}function Snt(e,g){var I=e.getDay();return e=I>=4||I===0?Wb(e):Wb.ceil(e),Yg(e.getFullYear()%1e4,g,4)}function wnt(e){var g=e.getTimezoneOffset();return(g>0?"-":(g*=-1,"+"))+Yg(g/60|0,"0",2)+Yg(g%60,"0",2)}function uIe(e,g){return Yg(e.getUTCDate(),g,2)}function Rnt(e,g){return Yg(e.getUTCHours(),g,2)}function Vnt(e,g){return Yg(e.getUTCHours()%12||12,g,2)}function Wnt(e,g){return Yg(1+IN.count(Ms(e),e),g,3)}function sZe(e,g){return Yg(e.getUTCMilliseconds(),g,3)}function Xnt(e,g){return sZe(e,g)+"000"}function Hnt(e,g){return Yg(e.getUTCMonth()+1,g,2)}function Tnt(e,g){return Yg(e.getUTCMinutes(),g,2)}function Nnt(e,g){return Yg(e.getUTCSeconds(),g,2)}function knt(e){var g=e.getUTCDay();return g===0?7:g}function Ynt(e,g){return Yg(nN.count(Ms(e)-1,e),g,2)}function lZe(e){var g=e.getUTCDay();return g>=4||g===0?Xb(e):Xb.ceil(e)}function Knt(e,g){return e=lZe(e),Yg(Xb.count(Ms(e),e)+(Ms(e).getUTCDay()===4),g,2)}function Fnt(e){return e.getUTCDay()}function Dnt(e,g){return Yg(oX.count(Ms(e)-1,e),g,2)}function xnt(e,g){return Yg(e.getUTCFullYear()%100,g,2)}function Ent(e,g){return e=lZe(e),Yg(e.getUTCFullYear()%100,g,2)}function Mnt(e,g){return Yg(e.getUTCFullYear()%1e4,g,4)}function znt(e,g){var I=e.getUTCDay();return e=I>=4||I===0?Xb(e):Xb.ceil(e),Yg(e.getUTCFullYear()%1e4,g,4)}function Pnt(){return"+0000"}function dIe(){return"%"}function hIe(e){return+e}function mIe(e){return Math.floor(+e/1e3)}var Fm,cZe,uZe;Jnt({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Jnt(e){return Fm=Jit(e),cZe=Fm.format,Fm.parse,uZe=Fm.utcFormat,Fm.utcParse,Fm}function Ont(e){return new Date(e)}function _nt(e){return e instanceof Date?+e:+new Date(+e)}function oQ(e,g,I,i,n,C,r,o,a,s){var A=Q7(),l=A.invert,c=A.domain,u=s(".%L"),d=s(":%S"),h=s("%I:%M"),m=s("%I %p"),f=s("%a %d"),b=s("%b %d"),p=s("%B"),y=s("%Y");function Z(B){return(a(B)g(n/(e.length-1)))},I.quantiles=function(i){return Array.from({length:i+1},(n,C)=>XB(e,C/i))},I.copy=function(){return fZe(g).domain(e)},tl.apply(I,arguments)}function rN(){var e=0,g=.5,I=1,i=1,n,C,r,o,a,s=CC,A,l=!1,c;function u(h){return isNaN(h=+h)?c:(h=.5+((h=+A(h))-C)*(i*h1&&arguments[1]!==void 0?arguments[1]:0,I=(In[e[g+0]]+In[e[g+1]]+In[e[g+2]]+In[e[g+3]]+"-"+In[e[g+4]]+In[e[g+5]]+"-"+In[e[g+6]]+In[e[g+7]]+"-"+In[e[g+8]]+In[e[g+9]]+"-"+In[e[g+10]]+In[e[g+11]]+In[e[g+12]]+In[e[g+13]]+In[e[g+14]]+In[e[g+15]]).toLowerCase();if(!oN(I))throw TypeError("Stringified UUID is invalid");return I}var fIe,j5,$5=0,q5=0;function tCt(e,g,I){var i=g&&I||0,n=g||new Array(16);e=e||{};var C=e.node||fIe,r=e.clockseq!==void 0?e.clockseq:j5;if(C==null||r==null){var o=e.random||(e.rng||ZZe)();C==null&&(C=fIe=[o[0]|1,o[1],o[2],o[3],o[4],o[5]]),r==null&&(r=j5=(o[6]<<8|o[7])&16383)}var a=e.msecs!==void 0?e.msecs:Date.now(),s=e.nsecs!==void 0?e.nsecs:q5+1,A=a-$5+(s-q5)/1e4;if(A<0&&e.clockseq===void 0&&(r=r+1&16383),(A<0||a>$5)&&e.nsecs===void 0&&(s=0),s>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");$5=a,q5=s,j5=r,a+=122192928e5;var l=((a&268435455)*1e4+s)%4294967296;n[i++]=l>>>24&255,n[i++]=l>>>16&255,n[i++]=l>>>8&255,n[i++]=l&255;var c=a/4294967296*1e4&268435455;n[i++]=c>>>8&255,n[i++]=c&255,n[i++]=c>>>24&15|16,n[i++]=c>>>16&255,n[i++]=r>>>8|128,n[i++]=r&255;for(var u=0;u<6;++u)n[i+u]=C[u];return g||aN(n)}function GZe(e){if(!oN(e))throw TypeError("Invalid UUID");var g,I=new Uint8Array(16);return I[0]=(g=parseInt(e.slice(0,8),16))>>>24,I[1]=g>>>16&255,I[2]=g>>>8&255,I[3]=g&255,I[4]=(g=parseInt(e.slice(9,13),16))>>>8,I[5]=g&255,I[6]=(g=parseInt(e.slice(14,18),16))>>>8,I[7]=g&255,I[8]=(g=parseInt(e.slice(19,23),16))>>>8,I[9]=g&255,I[10]=(g=parseInt(e.slice(24,36),16))/1099511627776&255,I[11]=g/4294967296&255,I[12]=g>>>24&255,I[13]=g>>>16&255,I[14]=g>>>8&255,I[15]=g&255,I}function gCt(e){e=unescape(encodeURIComponent(e));for(var g=[],I=0;I>5]>>>n%32&255,r=parseInt(i.charAt(C>>>4&15)+i.charAt(C&15),16);g.push(r)}return g}function BZe(e){return(e+64>>>9<<4)+14+1}function rCt(e,g){e[g>>5]|=128<>5]|=(e[i/8]&255)<>16)+(g>>16)+(I>>16);return i<<16|I&65535}function aCt(e,g){return e<>>32-g}function AN(e,g,I,i,n,C){return uc(aCt(uc(uc(g,e),uc(i,C)),n),I)}function Bn(e,g,I,i,n,C,r){return AN(g&I|~g&i,e,g,n,C,r)}function Sn(e,g,I,i,n,C,r){return AN(g&i|I&~i,e,g,n,C,r)}function wn(e,g,I,i,n,C,r){return AN(g^I^i,e,g,n,C,r)}function Rn(e,g,I,i,n,C,r){return AN(I^(g|~i),e,g,n,C,r)}var ACt=vZe("v3",48,nCt);const sCt=ACt;function lCt(e,g,I){e=e||{};var i=e.random||(e.rng||ZZe)();if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,g){I=I||0;for(var n=0;n<16;++n)g[I+n]=i[n];return g}return aN(i)}function cCt(e,g,I,i){switch(e){case 0:return g&I^~g&i;case 1:return g^I^i;case 2:return g&I^g&i^I&i;case 3:return g^I^i}}function eF(e,g){return e<>>32-g}function uCt(e){var g=[1518500249,1859775393,2400959708,3395469782],I=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof e=="string"){var i=unescape(encodeURIComponent(e));e=[];for(var n=0;n>>0;p=b,b=f,f=eF(m,30)>>>0,m=h,h=B}I[0]=I[0]+h>>>0,I[1]=I[1]+m>>>0,I[2]=I[2]+f>>>0,I[3]=I[3]+b>>>0,I[4]=I[4]+p>>>0}return[I[0]>>24&255,I[0]>>16&255,I[0]>>8&255,I[0]&255,I[1]>>24&255,I[1]>>16&255,I[1]>>8&255,I[1]&255,I[2]>>24&255,I[2]>>16&255,I[2]>>8&255,I[2]&255,I[3]>>24&255,I[3]>>16&255,I[3]>>8&255,I[3]&255,I[4]>>24&255,I[4]>>16&255,I[4]>>8&255,I[4]&255]}var dCt=vZe("v5",80,uCt);const hCt=dCt,mCt="00000000-0000-0000-0000-000000000000";function fCt(e){if(!oN(e))throw TypeError("Invalid UUID");return parseInt(e.substr(14,1),16)}const pCt=Object.freeze(Object.defineProperty({__proto__:null,NIL:mCt,parse:GZe,stringify:aN,v1:tCt,v3:sCt,v4:lCt,v5:hCt,validate:oN,version:fCt},Symbol.toStringTag,{value:"Module"})),bCt=qs(pCt);var sN=bCt,sQ=(()=>typeof Buffer<"u"?e=>Buffer.from(e).toString("base64"):e=>btoa(String.fromCharCode(...e)))(),yCt=(()=>typeof Buffer<"u"?e=>Buffer.from(e,"base64"):e=>Uint8Array.from(atob(e),g=>g.charCodeAt(0)))();PS.encode=function(e){var g=sN.parse(e),I=sQ(g),i=I.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return i};PS.decode=function(e){var g=e.replace(/-/g,"+").replace(/_/g,"/")+"==";return sN.stringify(yCt(g))};PS.v4=function(){var e=sN.v4(null,new Uint8Array(16)),g=sQ(e),I=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return I};PS.nice=function(){var e=sN.v4(null,new Uint8Array(16));e[0]=e[0]&127;var g=sQ(e),I=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return I};var ZCt=PS;const lg=PC(ZCt);var SZe={exports:{}},lN={},aX={exports:{}};aX.exports;(function(e,g){var I=200,i="__lodash_hash_undefined__",n=1,C=2,r=9007199254740991,o="[object Arguments]",a="[object Array]",s="[object AsyncFunction]",A="[object Boolean]",l="[object Date]",c="[object Error]",u="[object Function]",d="[object GeneratorFunction]",h="[object Map]",m="[object Number]",f="[object Null]",b="[object Object]",p="[object Promise]",y="[object Proxy]",Z="[object RegExp]",B="[object Set]",G="[object String]",v="[object Symbol]",w="[object Undefined]",R="[object WeakMap]",S="[object ArrayBuffer]",X="[object DataView]",W="[object Float32Array]",V="[object Float64Array]",H="[object Int8Array]",Y="[object Int16Array]",K="[object Int32Array]",x="[object Uint8Array]",J="[object Uint8ClampedArray]",P="[object Uint16Array]",ge="[object Uint32Array]",q=/[\\^$.*+?()[\]{}|]/g,$=/^\[object .+?Constructor\]$/,j=/^(?:0|[1-9]\d*)$/,te={};te[W]=te[V]=te[H]=te[Y]=te[K]=te[x]=te[J]=te[P]=te[ge]=!0,te[o]=te[a]=te[S]=te[A]=te[X]=te[l]=te[c]=te[u]=te[h]=te[m]=te[b]=te[Z]=te[B]=te[G]=te[R]=!1;var Q=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,ie=typeof self=="object"&&self&&self.Object===Object&&self,he=Q||ie||Function("return this")(),ne=g&&!g.nodeType&&g,be=ne&&!0&&e&&!e.nodeType&&e,pe=be&&be.exports===ne,ve=pe&&Q.process,We=function(){try{return ve&&ve.binding&&ve.binding("util")}catch{}}(),Be=We&&We.isTypedArray;function Je(Se,ze){for(var Ct=-1,St=Se==null?0:Se.length,sI=0,rg=[];++Ct-1}function At(Se,ze){var Ct=this.__data__,St=PI(Ct,Se);return St<0?(++this.size,Ct.push([Se,ze])):Ct[St][1]=ze,this}yt.prototype.clear=kt,yt.prototype.delete=ht,yt.prototype.get=Rt,yt.prototype.has=xt,yt.prototype.set=At;function Xt(Se){var ze=-1,Ct=Se==null?0:Se.length;for(this.clear();++zexi))return!1;var TI=rg.get(Se);if(TI&&rg.get(ze))return TI==ze;var LC=-1,ho=!0,yn=Ct&C?new Zt:void 0;for(rg.set(Se,ze),rg.set(ze,Se);++LC-1&&Se%1==0&&Se-1&&Se%1==0&&Se<=r}function d6(Se){var ze=typeof Se;return Se!=null&&(ze=="object"||ze=="function")}function Zy(Se){return Se!=null&&typeof Se=="object"}var h6=Be?_e(Be):Nke;function Lke(Se){return Oke(Se)?mg(Se):kke(Se)}function Uke(){return[]}function Qke(){return!1}e.exports=_ke})(aX,aX.exports);var cN=aX.exports,wZe={exports:{}};/*! +`)}function s(l){return l.map(A).join(e)}function A(l){return l==null?"":l instanceof Date?ttt(l):g.test(l+="")?'"'+l.replace(/"/g,'""')+'"':l}return{parse:I,parseRows:n,format:C,formatBody:o,formatRows:a,formatRow:s,formatValue:A}}var q9={exports:{}};q9.exports;(function(e,g){(function(i,I){var n={};i.PubSub?(n=i.PubSub,console.warn("PubSub already loaded, using existing version")):(i.PubSub=n,I(n)),e!==void 0&&e.exports&&(g=e.exports=n),g.PubSub=n,e.exports=g=n})(typeof window=="object"&&window||Zi,function(i){var I={},n=-1,r="*";function C(h){var m;for(m in h)if(Object.prototype.hasOwnProperty.call(h,m))return!0;return!1}function o(h){return function(){throw h}}function a(h,m,f){try{h(m,f)}catch(b){setTimeout(o(b),0)}}function s(h,m,f){h(m,f)}function A(h,m,f,b){var p=I[m],y=b?s:a,Z;if(Object.prototype.hasOwnProperty.call(I,m))for(Z in p)Object.prototype.hasOwnProperty.call(p,Z)&&y(p[Z],h,f)}function l(h,m,f){return function(){var p=String(h),y=p.lastIndexOf(".");for(A(h,h,m,f);y!==-1;)p=p.substr(0,y),y=p.lastIndexOf("."),A(h,p,m,f);A(h,r,m,f)}}function c(h){var m=String(h),f=!!(Object.prototype.hasOwnProperty.call(I,m)&&C(I[m]));return f}function u(h){for(var m=String(h),f=c(m)||c(r),b=m.lastIndexOf(".");!f&&b!==-1;)m=m.substr(0,b),b=m.lastIndexOf("."),f=c(m);return f}function d(h,m,f,b){h=typeof h=="symbol"?h.toString():h;var p=l(h,m,b),y=u(h);return y?(f===!0?p():setTimeout(p,0),!0):!1}i.publish=function(h,m){return d(h,m,!1,i.immediateExceptions)},i.publishSync=function(h,m){return d(h,m,!0,i.immediateExceptions)},i.subscribe=function(h,m){if(typeof m!="function")return!1;h=typeof h=="symbol"?h.toString():h,Object.prototype.hasOwnProperty.call(I,h)||(I[h]={});var f="uid_"+String(++n);return I[h][f]=m,f},i.subscribeAll=function(h){return i.subscribe(r,h)},i.subscribeOnce=function(h,m){var f=i.subscribe(h,function(){i.unsubscribe(f),m.apply(this,arguments)});return i},i.clearAllSubscriptions=function(){I={}},i.clearSubscriptions=function(m){var f;for(f in I)Object.prototype.hasOwnProperty.call(I,f)&&f.indexOf(m)===0&&delete I[f]},i.countSubscriptions=function(m){var f,b,p=0;for(f in I)if(Object.prototype.hasOwnProperty.call(I,f)&&f.indexOf(m)===0){for(b in I[f])p++;break}return p},i.getSubscriptions=function(m){var f,b=[];for(f in I)Object.prototype.hasOwnProperty.call(I,f)&&f.indexOf(m)===0&&b.push(f);return b},i.unsubscribe=function(h){var m=function(v){var w;for(w in I)if(Object.prototype.hasOwnProperty.call(I,w)&&w.indexOf(v)===0)return!0;return!1},f=typeof h=="string"&&(Object.prototype.hasOwnProperty.call(I,h)||m(h)),b=!f&&typeof h=="string",p=typeof h=="function",y=!1,Z,B,G;if(f){i.clearSubscriptions(h);return}for(Z in I)if(Object.prototype.hasOwnProperty.call(I,Z)){if(B=I[Z],b&&B[h]){delete B[h],y=h;break}if(p)for(G in B)Object.prototype.hasOwnProperty.call(B,G)&&B[G]===h&&(delete B[G],y=!0)}return y}})})(q9,q9.exports);var itt=q9.exports;const F7=jc(itt);(function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('._context-menu_18ock_1{position:fixed;background-color:#fffffff2;border:1px solid rgba(0,0,0,.1);border-radius:3px;font-size:12px;cursor:default;padding:3px;box-shadow:0 0 3px #0000001a,0 1px 5px #0000000d}._context-menu-dark_18ock_12{color:#ccc;background-color:#444444f7}._context-menu-icon_18ock_17{display:inline-block;margin-right:3px;vertical-align:middle}._context-menu-icon_18ock_17>svg{width:30px;height:20px}._context-menu-item_18ock_27{padding:2px;white-space:nowrap;border-radius:2px;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1)}._context-menu-item_18ock_27:hover{background:#337ab7;color:#fff}._context-menu-hr_18ock_38{margin-top:5px;margin-bottom:5px;border:0;border-top:1px solid rgba(0,0,0,.1)}._play-icon_18ock_45{width:12px;height:12px;position:absolute;right:5px}._context-menu-span_18ock_52{margin-right:20px;vertical-align:middle;display:inline-block;line-height:normal;white-space:nowrap}._context-menu-thumbnail_18ock_60{margin-right:10px;border:1px solid #888888}._context-menu-thumbnail-inline_18ock_65{display:inline-block;margin-right:10px;vertical-align:middle}._multitrack-header_1yz7l_1,._multitrack-header-focus_1yz7l_2,._multitrack-header-squeazed_1yz7l_3{position:relative;display:flex;justify-content:space-between;height:24px;margin-top:4px;margin-bottom:4px;color:#999;font-size:12px;line-height:24px;vertical-align:middle;border:0;border-radius:3px;background:#e5e5e5;transition:height .15s cubic-bezier(.25,.1,.25,1),margin .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-dark_1yz7l_20{background:#222}._multitrack-header-focus_1yz7l_2{height:32px;margin-top:0;margin-bottom:0}._multitrack-header-id_1yz7l_30{padding-left:3px}._multitrack-header-id_1yz7l_30:before{content:"ID:";font-weight:700;padding-right:5px}._multitrack-header-left_1yz7l_39{display:flex;flex-grow:1}._multitrack-header-grabber_1yz7l_44,._multitrack-header-grabber-squeazed_1yz7l_45{display:flex;align-items:center;justify-content:center;width:24px;height:100%;cursor:move;border-radius:3px 0 0 3px;transition:background .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-grabber_1yz7l_44:hover,._multitrack-header-grabber-squeazed_1yz7l_45:hover{background:#999}._multitrack-header-grabber_1yz7l_44:hover div,._multitrack-header-grabber-squeazed_1yz7l_45:hover div{background:#fff}._multitrack-header-grabber_1yz7l_44 div,._multitrack-header-grabber-squeazed_1yz7l_45 div{width:1px;height:50%;margin:1px;background:#999;transition:background .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-dark_1yz7l_20 ._multitrack-header-grabber_1yz7l_44 div{background:#666}._multitrack-header-grabber-squeazed_1yz7l_45{width:19.2px}._multitrack-header-search_1yz7l_80{position:relative;flex-grow:1;height:100%;margin-right:12px}._multitrack-header-search_1yz7l_80:after{position:absolute;top:3px;bottom:3px;right:-12px;display:block;content:"";width:1px;margin:0 6px;background:#cccccc}._multitrack-header-dark_1yz7l_20 ._multitrack-header-search_1yz7l_80:after{background:#666}._multitrack-header-nav-list_1yz7l_102,._multitrack-header_1yz7l_1>nav{display:flex}._multitrack-header-icon_1yz7l_107,._multitrack-header-icon-squeazed_1yz7l_108{width:24px;height:100%;padding:6px;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1)}._multitrack-header-icon_1yz7l_107 g,._multitrack-header-icon-squeazed_1yz7l_108 g{stroke:#999}._multitrack-header-icon_1yz7l_107:hover,._multitrack-header-icon_1yz7l_107:active,._multitrack-header-icon_1yz7l_107:focus,._multitrack-header-icon-squeazed_1yz7l_108:hover,._multitrack-header-icon-squeazed_1yz7l_108:active,._multitrack-header-icon-squeazed_1yz7l_108:focus{color:#fff;background:#337ab7}._multitrack-header-icon_1yz7l_107:hover g,._multitrack-header-icon_1yz7l_107:active g,._multitrack-header-icon_1yz7l_107:focus g,._multitrack-header-icon-squeazed_1yz7l_108:hover g,._multitrack-header-icon-squeazed_1yz7l_108:active g,._multitrack-header-icon-squeazed_1yz7l_108:focus g{stroke:#fff}._multitrack-header-icon_1yz7l_107:last-child,._multitrack-header-icon-squeazed_1yz7l_108:last-child{border-radius:0 3px 3px 0}._mouse-tool-selection_1yz7l_136{color:#fff;border-radius:3px 0 0 3px;background:#337ab7}._multitrack-header-icon-squeazed_1yz7l_108{width:20px 5;padding-left:3px;padding-right:3px}._track-control_w7hx2_1,._track-control-vertical_w7hx2_2{position:absolute;z-index:1;display:flex;background:rgba(255,255,255,.75);right:2px;top:2px;border-radius:2.5px;box-shadow:0 0 0 1px #0000000d,0 0 3px #0000001a;opacity:0;transition:opacity .15s cubic-bezier(.25,.1,.25,1),background .15s cubic-bezier(.25,.1,.25,1),box-shadow .15s cubic-bezier(.25,.1,.25,1)}._track-control-dark_w7hx2_15,._track-control-dark_w7hx2_15 ._track-control-active_w7hx2_16{background:rgba(40,40,40,.85)}._track-control-vertical_w7hx2_2{flex-direction:column-reverse}._track-control-left_w7hx2_24{left:2px;right:auto}._track-control-active_w7hx2_16,._track-control-vertical-active_w7hx2_30{opacity:1;z-index:1}._track-control-active_w7hx2_16:hover,._track-control-vertical-active_w7hx2_30:hover{background:rgb(255,255,255);box-shadow:0 0 0 1px #0000001a,0 0 3px #0003}._track-control-dark_w7hx2_15._track-control-active_w7hx2_16:hover{background:rgba(34,34,34,.95)}._track-control-padding-right_w7hx2_48{right:80px}._track-control-button_w7hx2_52{width:20px;height:20px;padding:4px;cursor:pointer;opacity:.66;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1),opacity .15s cubic-bezier(.25,.1,.25,1)}._track-control-button_w7hx2_52:hover{color:#fff;background:#337ab7;opacity:1}._track-control-button_w7hx2_52:first-child{border-radius:2.5px 0 0 2.5px}._track-control-button_w7hx2_52:last-child{border-radius:0 2.5px 2.5px 0}._track-control-dark_w7hx2_15 ._track-control-button_w7hx2_52{color:#ccc}._track-control-dark_w7hx2_15 ._track-control-button_w7hx2_52:hover{color:#fff;background:#337ab7;opacity:1}._track-control-button-vertical_w7hx2_81:first-child{border-radius:0 0 2.5px 2.5px}._track-control-button-vertical_w7hx2_81:last-child{border-radius:2.5px 2.5px 0 0}._center-track_fiu64_1{position:relative;background:transparent}._center-track-container_fiu64_6{position:absolute;z-index:1}._track-range-selection_5bcsr_1{position:absolute;z-index:-1;opacity:0;transition:opacity .15s cubic-bezier(.25,.1,.25,1)}._track-range-selection-active_5bcsr_8{z-index:1;opacity:1}._track-range-selection-group-inactive_5bcsr_22{display:none}._track-range-selection-group-brush-selection_5bcsr_26{outline:2px solid rgba(0,0,0,.33);fill:#000;fill-opacity:.1}._drag-listening-div-active_19gkt_1{z-index:10;box-shadow:inset 0 0 3px red}._gallery-tracks_fbxxi_1{position:relative;top:0;left:0;width:100%;height:100%}._gallery-track_fbxxi_1{position:absolute;box-sizing:border-box;top:0;right:0;bottom:0;left:0}._gallery-sub-track_fbxxi_18,._gallery-invisible-track_fbxxi_19{position:absolute}._tiled-plot_1y7td_1{position:relative;flex:1;overflow:hidden}._horizontalList_1y7td_7{display:flex;width:600px;height:300px;white-space:nowrap}._list_1y7td_14{width:400px;height:600px;overflow:hidden;-webkit-overflow-scrolling:touch}._stylizedList_1y7td_21{position:relative;z-index:0;background-color:#f3f3f3;outline:none}._stylizedItem_1y7td_28{position:relative;display:flex;align-items:center;width:100%;background-color:transparent;-webkit-user-select:none;user-select:none;color:#333;font-weight:400}._stylizedHelper_1y7td_39{box-shadow:0 5px 5px -5px #0003,0 -5px 5px -5px #0003;background-color:#fffc;cursor:row-resize}._stylizedHelper_1y7td_39._horizontalItem_1y7td_44{cursor:col-resize}._horizontalItem_1y7td_44{display:flex;flex-shrink:0;align-items:center;justify-content:center}._resizable-track_1y7td_55{width:100%;height:100%}path._domain_1y7td_60{stroke-width:0px}._top-right-handle_cizw2_1,._bottom-right-handle_cizw2_2{border-right:black solid;border-top:black solid}._top-left-handle_cizw2_7,._bottom-left-handle_cizw2_8{border-left:black solid;border-top:black solid}._top-draggable-handle_cizw2_13,._bottom-draggable-handle_cizw2_14,._left-draggable-handle_cizw2_15,._right-draggable-handle_cizw2_16{position:absolute;opacity:0;transition:transform .15s cubic-bezier(.25,.1,.25,1),opacity .15s cubic-bezier(.25,.1,.25,1)}._draggable-div_cizw2_22{background-color:transparent;box-sizing:border-box}._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle-grabber_cizw2_28{width:10px;height:4px;border-top:1px solid black;border-bottom:1px solid black}._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle-grabber_cizw2_28{margin:4px 7px}._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle-grabber_cizw2_44{width:4px;height:10px;border-left:1px solid black;border-right:1px solid black}._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle-grabber_cizw2_44{margin:7px 4px}._draggable-div_cizw2_22:hover ._top-draggable-handle_cizw2_13,._draggable-div_cizw2_22:hover ._bottom-draggable-handle_cizw2_14,._draggable-div_cizw2_22:hover ._left-draggable-handle_cizw2_15,._draggable-div_cizw2_22:hover ._right-draggable-handle_cizw2_16{opacity:.5;background:rgba(255,255,255,.75);box-shadow:0 0 3px 1px #ffffffbf;border-radius:3px}._top-draggable-handle_cizw2_13:hover,._top-draggable-handle_cizw2_13:active,._bottom-draggable-handle_cizw2_14:hover,._bottom-draggable-handle_cizw2_14:active,._left-draggable-handle_cizw2_15:hover,._left-draggable-handle_cizw2_15:active,._right-draggable-handle_cizw2_16:hover,._right-draggable-handle_cizw2_16:active{opacity:1!important;transform:scale(2)}._top-draggable-handle_cizw2_13:hover ._top-draggable-handle-grabber_cizw2_27,._top-draggable-handle_cizw2_13:hover ._bottom-draggable-handle-grabber_cizw2_28,._top-draggable-handle_cizw2_13:hover ._left-draggable-handle-grabber_cizw2_43,._top-draggable-handle_cizw2_13:hover ._right-draggable-handle-grabber_cizw2_44,._top-draggable-handle_cizw2_13:active ._top-draggable-handle-grabber_cizw2_27,._top-draggable-handle_cizw2_13:active ._bottom-draggable-handle-grabber_cizw2_28,._top-draggable-handle_cizw2_13:active ._left-draggable-handle-grabber_cizw2_43,._top-draggable-handle_cizw2_13:active ._right-draggable-handle-grabber_cizw2_44,._bottom-draggable-handle_cizw2_14:hover ._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle_cizw2_14:hover ._bottom-draggable-handle-grabber_cizw2_28,._bottom-draggable-handle_cizw2_14:hover ._left-draggable-handle-grabber_cizw2_43,._bottom-draggable-handle_cizw2_14:hover ._right-draggable-handle-grabber_cizw2_44,._bottom-draggable-handle_cizw2_14:active ._top-draggable-handle-grabber_cizw2_27,._bottom-draggable-handle_cizw2_14:active ._bottom-draggable-handle-grabber_cizw2_28,._bottom-draggable-handle_cizw2_14:active ._left-draggable-handle-grabber_cizw2_43,._bottom-draggable-handle_cizw2_14:active ._right-draggable-handle-grabber_cizw2_44,._left-draggable-handle_cizw2_15:hover ._top-draggable-handle-grabber_cizw2_27,._left-draggable-handle_cizw2_15:hover ._bottom-draggable-handle-grabber_cizw2_28,._left-draggable-handle_cizw2_15:hover ._left-draggable-handle-grabber_cizw2_43,._left-draggable-handle_cizw2_15:hover ._right-draggable-handle-grabber_cizw2_44,._left-draggable-handle_cizw2_15:active ._top-draggable-handle-grabber_cizw2_27,._left-draggable-handle_cizw2_15:active ._bottom-draggable-handle-grabber_cizw2_28,._left-draggable-handle_cizw2_15:active ._left-draggable-handle-grabber_cizw2_43,._left-draggable-handle_cizw2_15:active ._right-draggable-handle-grabber_cizw2_44,._right-draggable-handle_cizw2_16:hover ._top-draggable-handle-grabber_cizw2_27,._right-draggable-handle_cizw2_16:hover ._bottom-draggable-handle-grabber_cizw2_28,._right-draggable-handle_cizw2_16:hover ._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle_cizw2_16:hover ._right-draggable-handle-grabber_cizw2_44,._right-draggable-handle_cizw2_16:active ._top-draggable-handle-grabber_cizw2_27,._right-draggable-handle_cizw2_16:active ._bottom-draggable-handle-grabber_cizw2_28,._right-draggable-handle_cizw2_16:active ._left-draggable-handle-grabber_cizw2_43,._right-draggable-handle_cizw2_16:active ._right-draggable-handle-grabber_cizw2_44{box-shadow:0 0 3px 1px #0089ff;background:#0089ff}._top-draggable-handle_cizw2_13,._bottom-draggable-handle_cizw2_14{height:12px;cursor:row-resize}._left-draggable-handle_cizw2_15,._right-draggable-handle_cizw2_16{width:12px;cursor:col-resize}._horizontal-tiled-plot_1bqkg_1{position:relative}._button_1wnjn_1{display:flex;align-items:center;box-sizing:border-box;padding:.5em;color:#000;font-size:1em;line-height:1em;border:0;border-radius:2.5px;background:#fff;box-shadow:0 0 0 1px #ccc;transition:transform .15s cubic-bezier(.25,.1,.25,1),box-shadow .15s cubic-bezier(.25,.1,.25,1),background .15s cubic-bezier(.25,.1,.25,1);-webkit-appearance:none}._button_1wnjn_1:hover{background:#f2f2f2;box-shadow:0 0 0 1px #ccc}._button_1wnjn_1:focus{box-shadow:0 0 0 2px #0089ff}._button_1wnjn_1:active{transform:scale(.9)}._button_1wnjn_1:hover,._button_1wnjn_1:focus,._button_1wnjn_1:active{cursor:pointer;outline:none}._button-shortcut_1wnjn_35{padding:.1em 5px;color:#999;font-size:.8em;transition:color .15s cubic-bezier(.25,.1,.25,1)}._cross_2ke8w_1{position:relative;width:1em;height:1em}._cross_2ke8w_1:before,._cross_2ke8w_1:after{content:"";display:block;position:absolute;top:50%;left:0;width:1em;height:1px;background:black;transform-origin:center}._cross_2ke8w_1:before{-webkit-transform:translate(0,-50%) rotate(45deg);-moz-transform:translate(0,-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}._cross_2ke8w_1:after{-webkit-transform:translate(0,-50%) rotate(-45deg);-moz-transform:translate(0,-50%) rotate(-45deg);transform:translateY(-50%) rotate(-45deg)}._modal-background_zzhoe_1{position:absolute;z-index:1000;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.666);animation:_fade-in_zzhoe_1 .2s cubic-bezier(.25,.1,.25,1) 1;transition:opacity .2s cubic-bezier(.25,.1,.25,1)}._modal-hide_zzhoe_13{opacity:0}._modal-wrap_zzhoe_17{position:absolute;top:20px;right:20px;bottom:20px;left:20px}._modal-window_zzhoe_25{position:relative;width:100%;max-width:640px;max-height:100%;margin-left:auto;margin-right:auto;color:#000;border-radius:5px;background:#fff;animation:_fade-scale-in_zzhoe_1 .2s cubic-bezier(.25,.1,.25,1) 1}._modal-window-max-height_zzhoe_38{height:100%}._modal-content_zzhoe_42{padding:10px}@keyframes _fade-in_zzhoe_1{0%{opacity:0}to{opacity:1}}@keyframes _fade-scale-in_zzhoe_1{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}._dialog-header_wp50s_1{position:relative;z-index:2;display:flex;justify-content:space-between;margin:0 -10px 10px;padding:0 10px 10px;border-bottom:1px solid #cccccc}._dialog-header_wp50s_1 h3{margin:0;padding:0;font-size:20px;line-height:1em}._dialog-header_wp50s_1 button{font-size:10px}._dialog-main-max-height_wp50s_20{position:absolute;z-index:1;top:40px;right:0;bottom:50px;left:0;padding:10px;overflow:auto}._dialog-footer_wp50s_31,._dialog-footer-max-height_wp50s_31{display:flex;justify-content:space-between;margin:10px -10px 0;padding:10px 10px 0;border-top:1px solid #cccccc}._dialog-footer_wp50s_31 button,._dialog-footer-max-height_wp50s_31 button{font-size:14px}._dialog-footer-max-height_wp50s_31{position:absolute;z-index:2;left:10px;right:10px;bottom:10px}table.table-track-options{border-collapse:collapse;margin-left:auto;margin-right:auto}td.td-track-options{border:1px solid #fff;outline:none;padding:3px;position:relative;font-family:Roboto,sans-serif;font-size:14px;color:#666}.cell-label{position:absolute;left:0;top:0;margin-left:5px;color:#777}.modal-dialog{position:relative;display:table;overflow-y:auto;overflow-x:auto;width:auto;min-width:300px;margin:auto}._track-renderer_11dwb_1{position:relative}._track-renderer-element_11dwb_5,._track-renderer-events_11dwb_6{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}._track-renderer-events_11dwb_6{z-index:1}.tileset-finder-label{font-weight:700}.tileset-finder-search-box{margin-left:10px}.tileset-finder-search-bar{display:flex;margin-left:5px;justify-content:space-between;align-items:center}.tileset-finder-checkbox-tree{margin:5px;padding:3px;border:1px solid #aaaaaa;border-radius:5px}.react-checkbox-tree{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;font-size:16px}.react-checkbox-tree>ol{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.react-checkbox-tree ol{margin:0;padding-left:0;list-style-type:none}.react-checkbox-tree ol ol{padding-left:24px}.react-checkbox-tree button{line-height:normal;color:inherit}.react-checkbox-tree button:disabled{cursor:not-allowed}.react-checkbox-tree .rct-bare-label{cursor:default}.react-checkbox-tree label{margin-bottom:0;cursor:pointer}.react-checkbox-tree label:hover{background:rgba(51,51,204,.1)}.react-checkbox-tree label:active,.react-checkbox-tree label:focus{background:rgba(51,51,204,.15)}.react-checkbox-tree:not(.rct-native-display) input{display:none}.react-checkbox-tree.rct-native-display input{margin:0 5px}.react-checkbox-tree .rct-icon{display:inline-block;text-align:center;text-rendering:auto;font-family:"Font Awesome 5 Free",FontAwesome,sans-serif;font-weight:400;font-variant:normal;font-style:normal}.rct-disabled>.rct-text>label{opacity:.75;cursor:not-allowed}.rct-disabled>.rct-text>label:hover{background:transparent}.rct-disabled>.rct-text>label:active{background:transparent}.rct-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rct-options{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:.5rem;text-align:right}.rct-option{opacity:.75;border:0;background:none;cursor:pointer;padding:0 4px;font-size:18px}.rct-option:hover{opacity:1}.rct-option+.rct-option{margin-left:2px}.rct-collapse,.rct-checkbox,.rct-node-icon{padding:0 5px}.rct-collapse *,.rct-checkbox *,.rct-node-icon *{display:inline-block;margin:0;width:14px}.rct-collapse{-ms-flex-item-align:stretch;align-self:stretch;border:0;background:none;line-height:normal;color:inherit;font-size:12px}.rct-collapse.rct-collapse-btn{cursor:pointer}.rct-collapse>.rct-icon-expand-close{opacity:.5}.rct-collapse>.rct-icon-expand-close:hover{opacity:1}.rct-native-display .rct-checkbox{display:none}.rct-node-clickable{cursor:pointer}.rct-node-clickable:hover{background:rgba(51,51,204,.1)}.rct-node-clickable:focus{outline:0;background:rgba(51,51,204,.2)}.rct-node-icon{color:#33c}.rct-title{padding:0 5px}.rct-icons-fa4 .rct-icon-expand-close:before{content:""}.rct-icons-fa4 .rct-icon-expand-open:before{content:""}.rct-icons-fa4 .rct-icon-uncheck:before{content:""}.rct-icons-fa4 .rct-icon-check:before{content:""}.rct-icons-fa4 .rct-icon-half-check:before{opacity:.5;content:""}.rct-icons-fa4 .rct-icon-leaf:before{content:""}.rct-icons-fa4 .rct-icon-parent-open:before{content:""}.rct-icons-fa4 .rct-icon-parent-close:before{content:""}.rct-icons-fa4 .rct-icon-expand-all:before{content:""}.rct-icons-fa4 .rct-icon-collapse-all:before{content:""}.rct-icons-fa5 .rct-icon-expand-close:before{font-weight:900;content:""}.rct-icons-fa5 .rct-icon-expand-open:before{font-weight:900;content:""}.rct-icons-fa5 .rct-icon-uncheck:before{content:""}.rct-icons-fa5 .rct-icon-check:before{content:""}.rct-icons-fa5 .rct-icon-half-check:before{opacity:.5;content:""}.rct-icons-fa5 .rct-icon-leaf:before{content:""}.rct-icons-fa5 .rct-icon-parent-open:before{content:""}.rct-icons-fa5 .rct-icon-parent-close:before{content:""}.rct-icons-fa5 .rct-icon-expand-all:before{content:""}.rct-icons-fa5 .rct-icon-collapse-all:before{content:""}.rct-direction-rtl{direction:rtl}.rct-direction-rtl ol ol{padding-right:24px;padding-left:0}.rct-direction-rtl.rct-icons-fa4 .rct-icon-expand-close:before{content:""}.rct-direction-rtl.rct-icons-fa5 .rct-icon-expand-close:before{content:""}.plot-type-selected{background-color:#0000ff4d}.plot-type-container{overflow-y:scroll;margin:5px;padding:3px;border:1px solid #aaaaaa;border-radius:5px;max-height:15vh}.plot-type-container-empty{margin:5px;padding:3px 8px;border:1px solid #aaaaaa;background-color:#e8e8e8;border-radius:5px}.plot-type-item{cursor:pointer}.plot-type-item:not(.plot-type-selected):hover{background-color:#3333cc1a}.track-thumbnail{width:30px;height:20px;display:inline-block;margin-right:10;vertical-align:middle}.track-thumbnail>svg{width:20px;height:20px}._collapse-toggle-icon_ub7s6_1:before{font-family:Glyphicons Halflings;content:"";float:left;padding-right:3px}._collapse-toggle-icon_ub7s6_1._collapsed_ub7s6_9:before{content:""}._modal-title_ub7s6_14{font-family:Roboto;font-weight:700}._modal-container_ub7s6_19{position:relative}._modal-container_ub7s6_19 ._modal_ub7s6_14,._modal-container_ub7s6_19 ._modal-backdrop_ub7s6_23{position:absolute}._modal-dialog_ub7s6_27{position:relative;display:table;overflow-y:auto;overflow-x:auto;width:600px;min-width:300px;margin:auto}._vertical-tiled-plot_f3ho8_1{position:relative}._genome-position-search_1l2sx_1,._genome-position-search-focus_1l2sx_2{position:relative;display:flex;align-items:stretch;height:100%;margin-bottom:0;font-size:13.7142857143px;transition:box-shadow .15s cubic-bezier(.25,.1,.25,1),font-size .15s cubic-bezier(.25,.1,.25,1)}._genome-position-search-focus_1l2sx_2{box-shadow:0 0 0 1px #337ab7,0 0 3px 1px #337ab7}._genome-position-search-bar_1l2sx_16{position:relative;box-sizing:border-box;width:100%;height:100%;padding:3px;color:#666;font-size:inherit;line-height:24px;border:0;border-radius:3px 0 0 3px;background:transparent}._genome-position-search-bar_1l2sx_16:focus{outline:none;color:#000}._genome-position-search-dark_1l2sx_34 ._genome-position-search-bar_1l2sx_16:focus{color:#e5e5e5}._genome-position-search-bar-button_1l2sx_38,._genome-position-search-bar-button-focus_1l2sx_39{display:block;height:100%;padding:0 8px!important;color:#999;border:0!important;border-radius:0!important;background:transparent;transition:background .15s cubic-bezier(.25,.1,.25,1),color .15s cubic-bezier(.25,.1,.25,1)}._genome-position-search-bar-button_1l2sx_38:active,._genome-position-search-bar-button_1l2sx_38:focus,._genome-position-search-bar-button_1l2sx_38:hover,._genome-position-search-bar-button-focus_1l2sx_39:active,._genome-position-search-bar-button-focus_1l2sx_39:focus,._genome-position-search-bar-button-focus_1l2sx_39:hover{color:#fff;background:#337ab7}._genome-position-search-bar-button-focus_1l2sx_39{color:#fff;background:#337ab7}._genome-position-search-bar-icon_1l2sx_62,._genome-position-search-bar-icon-focus_1l2sx_63{display:flex;align-items:center;transition:color .15s cubic-bezier(.25,.1,.25,1)}._genome-position-search-bar-icon_1l2sx_62:first-child,._genome-position-search-bar-icon-focus_1l2sx_63:first-child{margin-left:6px;margin-right:2px}._genome-position-search-bar-icon_1l2sx_62 span,._genome-position-search-bar-icon-focus_1l2sx_63 span{display:block;margin-top:-2px}._genome-position-search-bar-icon-focus_1l2sx_63{color:#337ab7}._genome-position-search-bar-suggestions_1l2sx_83{position:fixed;border-radius:3px;box-shadow:0 0 3px #0000001a,0 1px 5px #0000000d;background-color:#fffffff2;border:1px solid rgba(0,0,0,.1);padding:2px 0;font-size:90%;overflow:auto;max-height:50%}._btn_1l2sx_95{display:inline-block;margin-bottom:0;font-size:13.7142857143px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}._btn-sm_1l2sx_116{font-size:12px;line-height:1.5;border-radius:3px}._btn-default_1l2sx_122{color:#666;background-color:#fff;border-color:#ccc}._btn-default_1l2sx_122:hover{color:#000;background:#ccc}._btn-default_1l2sx_122:active,._btn-default_1l2sx_122:focus{color:#fff;border-color:#000;background:#000}._genome-position-search_1l2sx_1 ._btn_1l2sx_95{border-radius:0 3px 3px 0}._export-link-dialog-wrapper_p9gxw_1{display:flex}._export-link-dialog-wrapper_p9gxw_1 input{flex-grow:1}._add-track-position-table_wdy5w_1{border-collapse:collapse;margin:5px;color:#666}._add-track-position-table-dark_wdy5w_7{color:#ccc}._add-track-position-other_wdy5w_11{outline:none}._add-track-position-top-center_wdy5w_15{min-width:80px;min-height:20px;text-align:center;outline:none;border-top:1px solid #999;border-left:1px solid #999;border-right:1px solid #999;border-radius:2px 2px 0 0}._add-track-position-top-center_wdy5w_15:hover{color:#fff;background-color:#337ab7}._add-track-position-middle-left_wdy5w_30{min-width:40px;text-align:center;outline:none;border-top:1px solid #999;border-left:1px solid #999;border-bottom:1px solid #999;border-radius:2px 0 0 2px}._add-track-position-middle-left_wdy5w_30:hover{background-color:#337ab7;color:#fff}._add-track-position-middle-right_wdy5w_45{min-width:40px;text-align:center;outline:none;border-top:1px solid #999;border-right:1px solid #999;border-bottom:1px solid #999;border-radius:0 2px 2px 0}._add-track-position-middle-right_wdy5w_45:hover{background-color:#337ab7;color:#fff}._add-track-position-middle-middle_wdy5w_60{text-align:center;outline:none;border:1px solid #999}._add-track-position-middle-middle_wdy5w_60:hover{background-color:#337ab7;color:#fff}._add-track-position-bottom-middle_wdy5w_71{min-height:20px;text-align:center;outline:none;border-left:1px solid #999;border-right:1px solid #999;border-bottom:1px solid #999;border-radius:0 0 2px 2px}._add-track-position-bottom-middle_wdy5w_71:hover{background-color:#337ab7;color:#fff}._add-track-position-span_wdy5w_86{margin:5px}._view-config-editor-header_1hlm6_1{margin:-10px -10px 0;padding:10px;display:flex;justify-content:space-between;background:#f2f2f2}._view-config-editor-header_1hlm6_1 button{display:flex;align-items:center;font-size:14px;background:#f2f2f2}._view-config-editor-header_1hlm6_1 button:hover{background:#e5e5e5}._view-config-editor-header_1hlm6_1 button:hover span{color:#666}._view-config-editor_1hlm6_1{position:absolute;top:50px;right:0;bottom:0;left:0;margin:1px 0 0;padding:0;overflow:auto;font-size:12.5px;height:calc(100% - 80px)}._view-config-log_1hlm6_34{position:absolute;right:0;bottom:0;left:0;margin:1px 0 0;padding:0;min-height:30px;background:#f2f2f2;transition:height .15s cubic-bezier(.25,.1,.25,1)}._view-config-log-header_1hlm6_46{background:#f2f2f2;border-top:1px solid #cccccc;border-bottom:1px solid #cccccc;padding-left:10px;height:30px;display:flex;align-items:center;cursor:pointer;position:sticky;position:-webkit-sticky;top:0}._view-config-log-msg_1hlm6_60{background:#f2f2f2;overflow:auto;height:calc(100% - 30px)}._view-config-log-msg_1hlm6_60 tr,._view-config-log-msg_1hlm6_60 td{outline:none;vertical-align:top}._view-config-log-msg_1hlm6_60 ._title_1hlm6_70{font-weight:700;padding-left:8px;padding-top:8px;width:100px}._view-config-log-msg_1hlm6_60 ._Warning_1hlm6_76{color:orange}._view-config-log-msg_1hlm6_60 ._Success_1hlm6_79{color:green}._view-config-log-msg_1hlm6_60 ._Error_1hlm6_82{color:red}._view-config-log-msg_1hlm6_60 pre{background:white;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}._higlass_1uoq8_1{position:relative}._higlass-dark-theme_1uoq8_5{background:black}._higlass-container-overflow_1uoq8_9,._higlass-scroll-container-overflow_1uoq8_10,._higlass-scroll-container-scroll_1uoq8_11{position:absolute;top:0;right:0;bottom:0;left:0}._higlass-scroll-container-overflow_1uoq8_10{overflow:hidden}._higlass-scroll-container-scroll_1uoq8_11{overflow-x:hidden;overflow-y:auto}._higlass-canvas_1uoq8_28{position:absolute;width:100%;height:100%}._higlass-drawing-surface_1uoq8_34{position:relative}._higlass-svg_1uoq8_38{position:absolute;width:100%;height:100%;left:0;top:0;pointer-events:none}._tiled-area_1uoq8_47{display:flex;flex-direction:column}._track-mouseover-menu_1uoq8_52{position:fixed;z-index:1;margin:17px 0 0 9px;padding:0 .25rem;max-width:50vw;word-wrap:break-word;font-size:.8em;pointer-events:none;background:white;border-radius:.25rem;box-shadow:0 0 0 1px #0000001a,0 0 3px #00000013,0 0 7px #0000000d}.react-grid-layout{position:relative;transition:height .2s ease}.react-grid-item{transition:all .2s ease;transition-property:left,top}.react-grid-item.cssTransforms{transition-property:transform}.react-grid-item.resizing{z-index:1;will-change:width,height}.react-grid-item.react-draggable-dragging{transition:none;z-index:3;will-change:transform}.react-grid-item.react-grid-placeholder{background:red;opacity:.2;transition-duration:.1s;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.react-grid-item>.react-resizable-handle{position:absolute;width:20px;height:20px;bottom:0;right:0;cursor:se-resize}.react-grid-item>.react-resizable-handle:after{content:"";position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-right:2px solid rgba(0,0,0,.4);border-bottom:2px solid rgba(0,0,0,.4)}.react-resizable{position:relative}.react-resizable-handle{position:absolute;width:20px;height:20px;background-repeat:no-repeat;background-origin:content-box;box-sizing:border-box;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+);background-position:bottom right;padding:0 3px 3px 0}.react-resizable-handle-sw{bottom:0;left:0;cursor:sw-resize;transform:rotate(90deg)}.react-resizable-handle-se{bottom:0;right:0;cursor:se-resize}.react-resizable-handle-nw{top:0;left:0;cursor:nw-resize;transform:rotate(180deg)}.react-resizable-handle-ne{top:0;right:0;cursor:ne-resize;transform:rotate(270deg)}.react-resizable-handle-w,.react-resizable-handle-e{top:50%;margin-top:-10px;cursor:ew-resize}.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-resizable-handle-n,.react-resizable-handle-s{left:50%;margin-left:-10px;cursor:ns-resize}.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}code[class*=language-],pre[class*=language-]{color:#393a34;font-family:Consolas,Bitstream Vera Sans Mono,Courier New,Courier,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;font-size:.95em;line-height:1.2em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{background:#b3d4fc}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{background:#b3d4fc}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border:1px solid #dddddd;background-color:#fff}:not(pre)>code[class*=language-]{padding:1px .2em;background:#f8f8f8;border:1px solid #dddddd}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#998;font-style:italic}.token.namespace{opacity:.7}.token.string,.token.attr-value{color:#e3116c}.token.punctuation,.token.operator{color:#393a34}.token.entity,.token.url,.token.symbol,.token.number,.token.boolean,.token.variable,.token.constant,.token.property,.token.regex,.token.inserted{color:#36acaa}.token.atrule,.token.keyword,.token.attr-name,.language-autohotkey .token.selector{color:#00a4db}.token.function,.token.deleted,.language-autohotkey .token.tag{color:#9a050f}.token.tag,.token.selector,.language-autohotkey .token.keyword{color:#00009f}.token.important,.token.function,.token.bold{font-weight:700}.token.italic{font-style:italic}.higlass *{box-sizing:border-box}.higlass .react-resizable-handle{z-index:1}')),document.head.appendChild(e)}}catch(g){console.error("vite-plugin-css-injected-by-js",g)}})();var $e=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};function Or(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function el(e){if(e.__esModule)return e;var g=e.default;if(typeof g=="function"){var i=function I(){return this instanceof I?Reflect.construct(g,arguments,this.constructor):g.apply(this,arguments)};i.prototype=g.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach(function(I){var n=Object.getOwnPropertyDescriptor(e,I);Object.defineProperty(i,I,n.get?n:{enumerable:!0,get:function(){return e[I]}})}),i}var j0e={exports:{}},Itt="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",ntt=Itt,rtt=ntt;function $0e(){}function q0e(){}q0e.resetWarningCache=$0e;var Ctt=function(){function e(I,n,r,C,o,a){if(a!==rtt){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}e.isRequired=e;function g(){return e}var i={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:g,element:e,elementType:e,instanceOf:g,node:e,objectOf:g,oneOf:g,oneOfType:g,shape:g,exact:g,checkPropTypes:q0e,resetWarningCache:$0e};return i.PropTypes=i,i};j0e.exports=Ctt();var tl=j0e.exports;const L=Or(tl);var E3="http://www.w3.org/1999/xhtml";const M3={svg:"http://www.w3.org/2000/svg",xhtml:E3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function qh(e){var g=e+="",i=g.indexOf(":");return i>=0&&(g=e.slice(0,i))!=="xmlns"&&(e=e.slice(i+1)),M3.hasOwnProperty(g)?{space:M3[g],local:e}:e}function ott(e){return function(){var g=this.ownerDocument,i=this.namespaceURI;return i===E3&&g.documentElement.namespaceURI===E3?g.createElement(e):g.createElementNS(i,e)}}function att(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function gN(e){var g=qh(e);return(g.local?att:ott)(g)}function Att(){}function xS(e){return e==null?Att:function(){return this.querySelector(e)}}function stt(e){typeof e!="function"&&(e=xS(e));for(var g=this._groups,i=g.length,I=new Array(i),n=0;n=p&&(p=b+1);!(Z=m[p])&&++p=0;)(C=I[n])&&(r&&C.compareDocumentPosition(r)^4&&r.parentNode.insertBefore(C,r),r=C);return this}function Ntt(e){e||(e=ktt);function g(l,c){return l&&c?e(l.__data__,c.__data__):!l-!c}for(var i=this._groups,I=i.length,n=new Array(I),r=0;rg?1:e>=g?0:NaN}function Ytt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Ktt(){return Array.from(this)}function Ftt(){for(var e=this._groups,g=0,i=e.length;g1?this.each((g==null?Utt:typeof g=="function"?jtt:Qtt)(e,g,i??"")):ao(this.node(),e)}function ao(e,g){return e.style.getPropertyValue(g)||x7(e).getComputedStyle(e,null).getPropertyValue(g)}function qtt(e){return function(){delete this[e]}}function egt(e,g){return function(){this[e]=g}}function tgt(e,g){return function(){var i=g.apply(this,arguments);i==null?delete this[e]:this[e]=i}}function ggt(e,g){return arguments.length>1?this.each((g==null?qtt:typeof g=="function"?tgt:egt)(e,g)):this.node()[e]}function gye(e){return e.trim().split(/^|\s+/)}function E7(e){return e.classList||new iye(e)}function iye(e){this._node=e,this._names=gye(e.getAttribute("class")||"")}iye.prototype={add:function(e){var g=this._names.indexOf(e);g<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var g=this._names.indexOf(e);g>=0&&(this._names.splice(g,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function Iye(e,g){for(var i=E7(e),I=-1,n=g.length;++I=0&&(i=g.slice(I+1),g=g.slice(0,I)),{type:g,name:i}})}function Wgt(e){return function(){var g=this.__on;if(g){for(var i=0,I=-1,n=g.length,r;iPg(i,g))}function Egt(e){return typeof e=="string"?new Dn([document.querySelectorAll(e)],[document.documentElement]):new Dn([e==null?[]:D7(e)],M7)}const Mgt=Object.freeze(Object.defineProperty({__proto__:null,create:Fgt,creator:gN,local:Cye,matcher:IN,namespace:qh,namespaces:M3,pointer:Pg,pointers:xgt,select:hg,selectAll:Egt,selection:ba,selector:xS,selectorAll:iN,style:ao,window:x7},Symbol.toStringTag,{value:"Module"}));function ZI(e,g){return eg?1:e>=g?0:NaN}function F0(e){let g=e,i=e;e.length===1&&(g=(C,o)=>e(C)-o,i=zgt(e));function I(C,o,a,s){for(a==null&&(a=0),s==null&&(s=C.length);a>>1;i(C[A],o)<0?a=A+1:s=A}return a}function n(C,o,a,s){for(a==null&&(a=0),s==null&&(s=C.length);a>>1;i(C[A],o)>0?s=A:a=A+1}return a}function r(C,o,a,s){a==null&&(a=0),s==null&&(s=C.length);const A=I(C,o,a,s-1);return A>a&&g(C[A-1],o)>-g(C[A],o)?A-1:A}return{left:I,center:r,right:n}}function zgt(e){return(g,i)=>ZI(e(g),i)}function aye(e){return e===null?NaN:+e}function*Pgt(e,g){if(g===void 0)for(let i of e)i!=null&&(i=+i)>=i&&(yield i);else{let i=-1;for(let I of e)(I=g(I,++i,e))!=null&&(I=+I)>=I&&(yield I)}}const Aye=F0(ZI),sye=Aye.right,Jgt=Aye.left,Ogt=F0(aye).center,em=sye;function nN(e,g){let i=0;if(g===void 0)for(let I of e)I!=null&&(I=+I)>=I&&++i;else{let I=-1;for(let n of e)(n=g(n,++I,e))!=null&&(n=+n)>=n&&++i}return i}function _gt(e){return e.length|0}function Lgt(e){return!(e>0)}function Ugt(e){return typeof e!="object"||"length"in e?e:Array.from(e)}function Qgt(e){return g=>e(...g)}function jgt(...e){const g=typeof e[e.length-1]=="function"&&Qgt(e.pop());e=e.map(Ugt);const i=e.map(_gt),I=e.length-1,n=new Array(I+1).fill(0),r=[];if(I<0||i.some(Lgt))return r;for(;;){r.push(n.map((o,a)=>e[a][o]));let C=I;for(;++n[C]===i[C];){if(C===0)return g?r.map(g):r;n[C--]=0}}}function $gt(e,g){var i=0,I=0;return Float64Array.from(e,g===void 0?n=>i+=+n||0:n=>i+=+g(n,I++,e)||0)}function qgt(e,g){return ge?1:g>=e?0:NaN}function z7(e,g){let i=0,I,n=0,r=0;if(g===void 0)for(let C of e)C!=null&&(C=+C)>=C&&(I=C-n,n+=I/++i,r+=I*(C-n));else{let C=-1;for(let o of e)(o=g(o,++C,e))!=null&&(o=+o)>=o&&(I=o-n,n+=I/++i,r+=I*(o-n))}if(i>1)return r/(i-1)}function P7(e,g){const i=z7(e,g);return i&&Math.sqrt(i)}function J1(e,g){let i,I;if(g===void 0)for(const n of e)n!=null&&(i===void 0?n>=n&&(i=I=n):(i>n&&(i=n),I=r&&(i=I=r):(i>r&&(i=r),I0){for(o=i[--I];I>0&&(n=o,r=i[--I],o=n+r,C=r-(o-n),!C););I>0&&(C<0&&i[I-1]<0||C>0&&i[I-1]>0)&&(r=C*2,n=o+r,r==n-o&&(o=n))}return o}}]),e}();function Iit(e,g){const i=new YI;if(g===void 0)for(let I of e)(I=+I)&&i.add(I);else{let I=-1;for(let n of e)(n=+g(n,++I,e))&&i.add(n)}return+i}function nit(e,g){const i=new YI;let I=-1;return Float64Array.from(e,g===void 0?n=>i.add(+n||0):n=>i.add(+g(n,++I,e)||0))}function lye(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Fge(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ait(e){try{return Function.toString.call(e).indexOf("[native code]")!==-1}catch{return typeof e=="function"}}function HB(e,g){return HB=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(I,n){return I.__proto__=n,I},HB(e,g)}function uC(e){return uC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},uC(e)}let gX=function(e){uye(i,e);var g=dye(i);function i(I,n=pye){var r;if(lye(this,i),r=g.call(this),Object.defineProperties(J7(r),{_intern:{value:new Map},_key:{value:n}}),I!=null)for(const[C,o]of I)r.set(C,o);return r}return cye(i,[{key:"get",value:function(n){return rA(uC(i.prototype),"get",this).call(this,P3(this,n))}},{key:"has",value:function(n){return rA(uC(i.prototype),"has",this).call(this,P3(this,n))}},{key:"set",value:function(n,r){return rA(uC(i.prototype),"set",this).call(this,mye(this,n),r)}},{key:"delete",value:function(n){return rA(uC(i.prototype),"delete",this).call(this,fye(this,n))}}]),i}(tX(Map)),sit=function(e){uye(i,e);var g=dye(i);function i(I,n=pye){var r;if(lye(this,i),r=g.call(this),Object.defineProperties(J7(r),{_intern:{value:new Map},_key:{value:n}}),I!=null)for(const C of I)r.add(C);return r}return cye(i,[{key:"has",value:function(n){return rA(uC(i.prototype),"has",this).call(this,P3(this,n))}},{key:"add",value:function(n){return rA(uC(i.prototype),"add",this).call(this,mye(this,n))}},{key:"delete",value:function(n){return rA(uC(i.prototype),"delete",this).call(this,fye(this,n))}}]),i}(tX(Set));function P3({_intern:e,_key:g},i){const I=g(i);return e.has(I)?e.get(I):i}function mye({_intern:e,_key:g},i){const I=g(i);return e.has(I)?e.get(I):(e.set(I,i),i)}function fye({_intern:e,_key:g},i){const I=g(i);return e.has(I)&&(i=e.get(i),e.delete(I)),i}function pye(e){return e!==null&&typeof e=="object"?e.valueOf():e}function Sb(e){return e}function bye(e,...g){return D0(e,Sb,Sb,g)}function lit(e,...g){return D0(e,Array.from,Sb,g)}function yye(e,g,...i){return D0(e,Sb,g,i)}function cit(e,g,...i){return D0(e,Array.from,g,i)}function uit(e,...g){return D0(e,Sb,Zye,g)}function dit(e,...g){return D0(e,Array.from,Zye,g)}function Zye(e){if(e.length!==1)throw new Error("duplicate key");return e[0]}function D0(e,g,i,I){return function n(r,C){if(C>=I.length)return i(r);const o=new gX,a=I[C++];let s=-1;for(const A of r){const l=a(A,++s,r),c=o.get(l);c?c.push(A):o.set(l,[A])}for(const[A,l]of o)o.set(A,n(l,C));return g(o)}(e,0)}function Gye(e,g){return Array.from(g,i=>e[i])}function J3(e,...g){if(typeof e[Symbol.iterator]!="function")throw new TypeError("values is not iterable");e=Array.from(e);let[i=ZI]=g;if(i.length===1||g.length>1){const I=Uint32Array.from(e,(n,r)=>r);return g.length>1?(g=g.map(n=>e.map(n)),I.sort((n,r)=>{for(const C of g){const o=ZI(C[n],C[r]);if(o)return o}})):(i=e.map(i),I.sort((n,r)=>ZI(i[n],i[r]))),Gye(e,I)}return e.sort(i)}function hit(e,g,i){return(g.length===1?J3(yye(e,g,i),([I,n],[r,C])=>ZI(n,C)||ZI(I,r)):J3(bye(e,i),([I,n],[r,C])=>g(n,C)||ZI(I,r))).map(([I])=>I)}var mit=Array.prototype,fit=mit.slice;function rV(e){return function(){return e}}var O3=Math.sqrt(50),_3=Math.sqrt(10),L3=Math.sqrt(2);function rh(e,g,i){var I,n=-1,r,C,o;if(g=+g,e=+e,i=+i,e===g&&i>0)return[e];if((I=g0){let a=Math.round(e/o),s=Math.round(g/o);for(a*og&&--s,C=new Array(r=s-a+1);++ng&&--s,C=new Array(r=s-a+1);++n=0?(r>=O3?10:r>=_3?5:r>=L3?2:1)*Math.pow(10,n):-Math.pow(10,-n)/(r>=O3?10:r>=_3?5:r>=L3?2:1)}function iX(e,g,i){var I=Math.abs(g-e)/Math.max(0,i),n=Math.pow(10,Math.floor(Math.log(I)/Math.LN10)),r=I/n;return r>=O3?n*=10:r>=_3?n*=5:r>=L3&&(n*=2),g0?(e=Math.floor(e/n)*n,g=Math.ceil(g/n)*n):n<0&&(e=Math.ceil(e*n)/n,g=Math.floor(g*n)/n),I=n}}function Bye(e){return Math.ceil(Math.log(nN(e))/Math.LN2)+1}function Dge(){var e=Sb,g=J1,i=Bye;function I(n){Array.isArray(n)||(n=Array.from(n));var r,C=n.length,o,a=new Array(C);for(r=0;r=l)if(m>=l&&g===J1){const b=ES(A,l,f);isFinite(b)&&(b>0?l=(Math.floor(l/b)+1)*b:b<0&&(l=(Math.ceil(l*-b)+1)/-b))}else c.pop()}for(var u=c.length;c[0]<=A;)c.shift(),--u;for(;c[u-1]>l;)c.pop(),--u;var d=new Array(u+1),h;for(r=0;r<=u;++r)h=d[r]=[],h.x0=r>0?c[r-1]:A,h.x1=r=I)&&(i=I);else{let I=-1;for(let n of e)(n=g(n,++I,e))!=null&&(i=n)&&(i=n)}return i}function IX(e,g){let i;if(g===void 0)for(const I of e)I!=null&&(i>I||i===void 0&&I>=I)&&(i=I);else{let I=-1;for(let n of e)(n=g(n,++I,e))!=null&&(i>n||i===void 0&&n>=n)&&(i=n)}return i}function O7(e,g,i=0,I=e.length-1,n=ZI){for(;I>i;){if(I-i>600){const a=I-i+1,s=g-i+1,A=Math.log(a),l=.5*Math.exp(2*A/3),c=.5*Math.sqrt(A*l*(a-l)/a)*(s-a/2<0?-1:1),u=Math.max(i,Math.floor(g-s*l/a+c)),d=Math.min(I,Math.floor(g+(a-s)*l/a+c));O7(e,g,u,d,n)}const r=e[g];let C=i,o=I;for(Qy(e,i,g),n(e[I],r)>0&&Qy(e,i,I);C0;)--o}n(e[i],r)===0?Qy(e,i,o):(++o,Qy(e,o,I)),o<=g&&(i=o+1),g<=o&&(I=o-1)}return e}function Qy(e,g,i){const I=e[g];e[g]=e[i],e[i]=I}function TB(e,g,i){if(e=Float64Array.from(Pgt(e,i)),!!(I=e.length)){if((g=+g)<=0||I<2)return IX(e);if(g>=1)return U3(e);var I,n=(I-1)*g,r=Math.floor(n),C=U3(O7(e,r).subarray(0,r+1)),o=IX(e.subarray(r+1));return C+(o-C)*(n-r)}}function Sye(e,g,i=aye){if(I=e.length){if((g=+g)<=0||I<2)return+i(e[0],0,e);if(g>=1)return+i(e[I-1],I-1,e);var I,n=(I-1)*g,r=Math.floor(n),C=+i(e[r],r,e),o=+i(e[r+1],r+1,e);return C+(o-C)*(n-r)}}function pit(e,g,i){return Math.ceil((i-g)/(2*(TB(e,.75)-TB(e,.25))*Math.pow(nN(e),-1/3)))}function bit(e,g,i){return Math.ceil((i-g)/(3.5*P7(e)*Math.pow(nN(e),-1/3)))}function wye(e,g){let i,I=-1,n=-1;if(g===void 0)for(const r of e)++n,r!=null&&(i=r)&&(i=r,I=n);else for(let r of e)(r=g(r,++n,e))!=null&&(i=r)&&(i=r,I=n);return I}function Q3(e,g){let i=0,I=0;if(g===void 0)for(let n of e)n!=null&&(n=+n)>=n&&(++i,I+=n);else{let n=-1;for(let r of e)(r=g(r,++n,e))!=null&&(r=+r)>=r&&(++i,I+=r)}if(i)return I/i}function _7(e,g){return TB(e,.5,g)}function*yit(e){for(const g of e)yield*g}function L7(e){return Array.from(yit(e))}function Rye(e,g){let i,I=-1,n=-1;if(g===void 0)for(const r of e)++n,r!=null&&(i>r||i===void 0&&r>=r)&&(i=r,I=n);else for(let r of e)(r=g(r,++n,e))!=null&&(i>r||i===void 0&&r>=r)&&(i=r,I=n);return I}function Zit(e,g=Git){const i=[];let I,n=!1;for(const r of e)n&&i.push(g(I,r)),I=r,n=!0;return i}function Git(e,g){return[e,g]}function nr(e,g,i){e=+e,g=+g,i=(n=arguments.length)<2?(g=e,e=0,1):n<3?1:+i;for(var I=-1,n=Math.max(0,Math.ceil((g-e)/i))|0,r=new Array(n);++I0:ZI(C,C)===0)&&(i=r,n=C,I=!0)}}else for(const n of e)(I?g(n,i)>0:g(n,n)===0)&&(i=n,I=!0);return i}function Sit(e,g=ZI){if(g.length===1)return wye(e,g);let i,I=-1,n=-1;for(const r of e)++n,(I<0?g(r,r)===0:g(r,i)>0)&&(i=r,I=n);return I}function wit(e,g){const i=Vye(e,g);return i<0?void 0:i}const Rit=Wye(Math.random);function Wye(e){return function(i,I=0,n=i.length){let r=n-(I=+I);for(;r;){const C=e()*r--|0,o=i[r+I];i[r+I]=i[C+I],i[C+I]=o}return i}}function Xye(e,g){let i=0;if(g===void 0)for(let I of e)(I=+I)&&(i+=I);else{let I=-1;for(let n of e)(n=+g(n,++I,e))&&(i+=n)}return i}function Hye(e){if(!(r=e.length))return[];for(var g=-1,i=IX(e,Vit),I=new Array(i);++gg(i,I,e))}function kit(e,g,i){if(typeof g!="function")throw new TypeError("reducer is not a function");const I=e[Symbol.iterator]();let n,r,C=-1;if(arguments.length<3){if({done:n,value:i}=I.next(),n)return;++C}for(;{done:n,value:r}=I.next(),!n;)i=g(i,r,++C,e);return i}function Yit(e){if(typeof e[Symbol.iterator]!="function")throw new TypeError("values is not iterable");return Array.from(e).reverse()}function Kit(e,...g){e=new Set(e);for(const i of g)for(const I of i)e.delete(I);return e}function Fit(e,g){const i=g[Symbol.iterator](),I=new Set;for(const n of e){if(I.has(n))return!1;let r,C;for(;({value:r,done:C}=i.next())&&!C;){if(Object.is(n,r))return!1;I.add(r)}}return!0}function Dit(e){return e instanceof Set?e:new Set(e)}function xit(e,...g){e=new Set(e),g=g.map(Dit);e:for(const i of e)for(const I of g)if(!I.has(i)){e.delete(i);continue e}return e}function Tye(e,g){const i=e[Symbol.iterator](),I=new Set;for(const n of g){if(I.has(n))continue;let r,C;for(;{value:r,done:C}=i.next();){if(C)return!1;if(I.add(r),Object.is(n,r))break}}return!0}function Eit(e,g){return Tye(g,e)}function Mit(...e){const g=new Set;for(const i of e)for(const I of i)g.add(I);return g}const zit=Object.freeze(Object.defineProperty({__proto__:null,Adder:YI,InternMap:gX,InternSet:sit,ascending:ZI,bin:Dge,bisect:em,bisectCenter:Ogt,bisectLeft:Jgt,bisectRight:sye,bisector:F0,count:nN,cross:jgt,cumsum:$gt,descending:qgt,deviation:P7,difference:Kit,disjoint:Fit,every:Xit,extent:J1,fcumsum:nit,filter:Tit,fsum:Iit,greatest:Bit,greatestIndex:Sit,group:bye,groupSort:hit,groups:lit,histogram:Dge,index:uit,indexes:dit,intersection:xit,least:vit,leastIndex:Vye,map:Nit,max:U3,maxIndex:wye,mean:Q3,median:_7,merge:L7,min:IX,minIndex:Rye,nice:vye,pairs:Zit,permute:Gye,quantile:TB,quantileSorted:Sye,quickselect:O7,range:nr,reduce:kit,reverse:Yit,rollup:yye,rollups:cit,scan:wit,shuffle:Rit,shuffler:Wye,some:Hit,sort:J3,subset:Eit,sum:Xye,superset:Tye,thresholdFreedmanDiaconis:pit,thresholdScott:bit,thresholdSturges:Bye,tickIncrement:ES,tickStep:iX,ticks:rh,transpose:Hye,union:Mit,variance:z7,zip:Wit},Symbol.toStringTag,{value:"Module"}));function co(e,g){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(g).domain(e);break}return this}function gl(e,g){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof g=="function"?this.interpolator(g):this.range(g);break}}return this}const j3=Symbol("implicit");function U7(){var e=new gX,g=[],i=[],I=j3;function n(r){let C=e.get(r);if(C===void 0){if(I!==j3)return I;e.set(r,C=g.push(r)-1)}return i[C%i.length]}return n.domain=function(r){if(!arguments.length)return g.slice();g=[],e=new gX;for(const C of r)e.has(C)||e.set(C,g.push(C)-1);return n},n.range=function(r){return arguments.length?(i=Array.from(r),n):i.slice()},n.unknown=function(r){return arguments.length?(I=r,n):I},n.copy=function(){return U7(g,i).unknown(I)},co.apply(n,arguments),n}function MS(){var e=U7().unknown(void 0),g=e.domain,i=e.range,I=0,n=1,r,C,o=!1,a=0,s=0,A=.5;delete e.unknown;function l(){var c=g().length,u=n>8&15|g>>4&240,g>>4&15|g&240,(g&15)<<4|g&15,1):i===8?CV(g>>24&255,g>>16&255,g>>8&255,(g&255)/255):i===4?CV(g>>12&15|g>>8&240,g>>8&15|g>>4&240,g>>4&15|g&240,((g&15)<<4|g&15)/255):null):(g=Oit.exec(e))?new cn(g[1],g[2],g[3],1):(g=_it.exec(e))?new cn(g[1]*255/100,g[2]*255/100,g[3]*255/100,1):(g=Lit.exec(e))?CV(g[1],g[2],g[3],g[4]):(g=Uit.exec(e))?CV(g[1]*255/100,g[2]*255/100,g[3]*255/100,g[4]):(g=Qit.exec(e))?Oge(g[1],g[2]/100,g[3]/100,1):(g=jit.exec(e))?Oge(g[1],g[2]/100,g[3]/100,g[4]):xge.hasOwnProperty(e)?zge(xge[e]):e==="transparent"?new cn(NaN,NaN,NaN,0):null}function zge(e){return new cn(e>>16&255,e>>8&255,e&255,1)}function CV(e,g,i,I){return I<=0&&(e=g=i=NaN),new cn(e,g,i,I)}function Q7(e){return e instanceof nu||(e=HI(e)),e?(e=e.rgb(),new cn(e.r,e.g,e.b,e.opacity)):new cn}function Rb(e,g,i,I){return arguments.length===1?Q7(e):new cn(e,g,i,I??1)}function cn(e,g,i,I){this.r=+e,this.g=+g,this.b=+i,this.opacity=+I}x0(cn,Rb,zS(nu,{brighter:function(e){return e=e==null?wb:Math.pow(wb,e),new cn(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=e==null?Ch:Math.pow(Ch,e),new cn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Pge,formatHex:Pge,formatRgb:Jge,toString:Jge}));function Pge(){return"#"+P5(this.r)+P5(this.g)+P5(this.b)}function Jge(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(e===1?")":", "+e+")")}function P5(e){return e=Math.max(0,Math.min(255,Math.round(e)||0)),(e<16?"0":"")+e.toString(16)}function Oge(e,g,i,I){return I<=0?e=g=i=NaN:i<=0||i>=1?e=g=NaN:g<=0&&(e=NaN),new La(e,g,i,I)}function kye(e){if(e instanceof La)return new La(e.h,e.s,e.l,e.opacity);if(e instanceof nu||(e=HI(e)),!e)return new La;if(e instanceof La)return e;e=e.rgb();var g=e.r/255,i=e.g/255,I=e.b/255,n=Math.min(g,i,I),r=Math.max(g,i,I),C=NaN,o=r-n,a=(r+n)/2;return o?(g===r?C=(i-I)/o+(i0&&a<1?0:C,new La(C,o,a,e.opacity)}function Yye(e,g,i,I){return arguments.length===1?kye(e):new La(e,g,i,I??1)}function La(e,g,i,I){this.h=+e,this.s=+g,this.l=+i,this.opacity=+I}x0(La,Yye,zS(nu,{brighter:function(e){return e=e==null?wb:Math.pow(wb,e),new La(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?Ch:Math.pow(Ch,e),new La(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+(this.h<0)*360,g=isNaN(e)||isNaN(this.s)?0:this.s,i=this.l,I=i+(i<.5?i:1-i)*g,n=2*i-I;return new cn(J5(e>=240?e-240:e+120,n,I),J5(e,n,I),J5(e<120?e+240:e-120,n,I),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(e===1?")":", "+e+")")}}));function J5(e,g,i){return(e<60?g+(i-g)*e/60:e<180?i:e<240?g+(i-g)*(240-e)/60:g)*255}const Kye=Math.PI/180,Fye=180/Math.PI,nX=18,Dye=.96422,xye=1,Eye=.82521,Mye=4/29,Vp=6/29,zye=3*Vp*Vp,qit=Vp*Vp*Vp;function Pye(e){if(e instanceof aa)return new aa(e.l,e.a,e.b,e.opacity);if(e instanceof CA)return Lye(e);e instanceof cn||(e=Q7(e));var g=U5(e.r),i=U5(e.g),I=U5(e.b),n=O5((.2225045*g+.7168786*i+.0606169*I)/xye),r,C;return g===i&&i===I?r=C=n:(r=O5((.4360747*g+.3850649*i+.1430804*I)/Dye),C=O5((.0139322*g+.0971045*i+.7141733*I)/Eye)),new aa(116*n-16,500*(r-n),200*(n-C),e.opacity)}function eIt(e,g){return new aa(e,0,0,g??1)}function Jye(e,g,i,I){return arguments.length===1?Pye(e):new aa(e,g,i,I??1)}function aa(e,g,i,I){this.l=+e,this.a=+g,this.b=+i,this.opacity=+I}x0(aa,Jye,zS(nu,{brighter:function(e){return new aa(this.l+nX*(e??1),this.a,this.b,this.opacity)},darker:function(e){return new aa(this.l-nX*(e??1),this.a,this.b,this.opacity)},rgb:function(){var e=(this.l+16)/116,g=isNaN(this.a)?e:e+this.a/500,i=isNaN(this.b)?e:e-this.b/200;return g=Dye*_5(g),e=xye*_5(e),i=Eye*_5(i),new cn(L5(3.1338561*g-1.6168667*e-.4906146*i),L5(-.9787684*g+1.9161415*e+.033454*i),L5(.0719453*g-.2289914*e+1.4052427*i),this.opacity)}}));function O5(e){return e>qit?Math.pow(e,1/3):e/zye+Mye}function _5(e){return e>Vp?e*e*e:zye*(e-Mye)}function L5(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function U5(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Oye(e){if(e instanceof CA)return new CA(e.h,e.c,e.l,e.opacity);if(e instanceof aa||(e=Pye(e)),e.a===0&&e.b===0)return new CA(NaN,0()=>e;function IIt(e,g){return function(i){return e+i*g}}function nIt(e,g,i){return e=Math.pow(e,i),g=Math.pow(g,i)-e,i=1/i,function(I){return Math.pow(e+I*g,i)}}function rIt(e){return(e=+e)==1?jye:function(g,i){return i-g?nIt(g,i,e):q7(isNaN(g)?i:g)}}function jye(e,g){var i=g-e;return i?IIt(e,i):q7(isNaN(e)?g:e)}const Vb=function e(g){var i=rIt(g);function I(n,r){var C=i((n=Rb(n)).r,(r=Rb(r)).r),o=i(n.g,r.g),a=i(n.b,r.b),s=jye(n.opacity,r.opacity);return function(A){return n.r=C(A),n.g=o(A),n.b=a(A),n.opacity=s(A),n+""}}return I.gamma=e,I}(1);function CIt(e,g){g||(g=[]);var i=e?Math.min(g.length,e.length):0,I=g.slice(),n;return function(r){for(n=0;ni&&(r=g.slice(i,r),o[C]?o[C]+=r:o[++C]=r),(I=I[0])===(n=n[0])?o[C]?o[C]+=n:o[++C]=n:(o[++C]=null,a.push({i:C,x:PC(I,n)})),i=Q5.lastIndex;return i180?A+=360:A-s>180&&(s+=360),c.push({i:l.push(n(l)+"rotate(",null,I)-2,x:PC(s,A)})):A&&l.push(n(l)+"rotate("+A+I)}function o(s,A,l,c){s!==A?c.push({i:l.push(n(l)+"skewX(",null,I)-2,x:PC(s,A)}):A&&l.push(n(l)+"skewX("+A+I)}function a(s,A,l,c,u,d){if(s!==l||A!==c){var h=u.push(n(u)+"scale(",null,",",null,")");d.push({i:h-4,x:PC(s,l)},{i:h-2,x:PC(A,c)})}else(l!==1||c!==1)&&u.push(n(u)+"scale("+l+","+c+")")}return function(s,A){var l=[],c=[];return s=e(s),A=e(A),r(s.translateX,s.translateY,A.translateX,A.translateY,l,c),C(s.rotate,A.rotate,l,c),o(s.skewX,A.skewX,l,c),a(s.scaleX,s.scaleY,A.scaleX,A.scaleY,l,c),s=A=null,function(u){for(var d=-1,h=c.length,m;++dg&&(i=e,e=g,g=i),function(I){return Math.max(e,Math.min(g,I))}}function GIt(e,g,i){var I=e[0],n=e[1],r=g[0],C=g[1];return n2?vIt:GIt,a=s=null,l}function l(c){return c==null||isNaN(c=+c)?r:(a||(a=o(e.map(I),g,i)))(I(C(c)))}return l.invert=function(c){return C(n((s||(s=o(g,e.map(I),PC)))(c)))},l.domain=function(c){return arguments.length?(e=Array.from(c,rX),A()):e.slice()},l.range=function(c){return arguments.length?(g=Array.from(c),A()):g.slice()},l.rangeRound=function(c){return g=Array.from(c),i=tQ,A()},l.clamp=function(c){return arguments.length?(C=c?!0:rr,A()):C!==rr},l.interpolate=function(c){return arguments.length?(i=c,A()):i},l.unknown=function(c){return arguments.length?(r=c,l):r},function(c,u){return I=c,n=u,A()}}function gQ(){return CN()(rr,rr)}function BIt(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function CX(e,g){if((i=(e=g?e.toExponential(g-1):e.toExponential()).indexOf("e"))<0)return null;var i,I=e.slice(0,i);return[I.length>1?I[0]+I.slice(2):I,+e.slice(i+1)]}function Wb(e){return e=CX(Math.abs(e)),e?e[1]:NaN}function SIt(e,g){return function(i,I){for(var n=i.length,r=[],C=0,o=e[0],a=0;n>0&&o>0&&(a+o+1>I&&(o=Math.max(1,I-a)),r.push(i.substring(n-=o,n+o)),!((a+=o+1)>I));)o=e[C=(C+1)%e.length];return r.reverse().join(g)}}function wIt(e){return function(g){return g.replace(/[0-9]/g,function(i){return e[+i]})}}var RIt=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Xb(e){if(!(g=RIt.exec(e)))throw new Error("invalid format: "+e);var g;return new oN({fill:g[1],align:g[2],sign:g[3],symbol:g[4],zero:g[5],width:g[6],comma:g[7],precision:g[8]&&g[8].slice(1),trim:g[9],type:g[10]})}Xb.prototype=oN.prototype;function oN(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}oN.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function VIt(e){e:for(var g=e.length,i=1,I=-1,n;i0&&(I=0);break}return I>0?e.slice(0,I)+e.slice(n+1):e}var gZe;function WIt(e,g){var i=CX(e,g);if(!i)return e+"";var I=i[0],n=i[1],r=n-(gZe=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,C=I.length;return r===C?I:r>C?I+new Array(r-C+1).join("0"):r>0?I.slice(0,r)+"."+I.slice(r):"0."+new Array(1-r).join("0")+CX(e,Math.max(0,g+r-1))[0]}function qge(e,g){var i=CX(e,g);if(!i)return e+"";var I=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+I:I.length>n+1?I.slice(0,n+1)+"."+I.slice(n+1):I+new Array(n-I.length+2).join("0")}const eie={"%":(e,g)=>(e*100).toFixed(g),b:e=>Math.round(e).toString(2),c:e=>e+"",d:BIt,e:(e,g)=>e.toExponential(g),f:(e,g)=>e.toFixed(g),g:(e,g)=>e.toPrecision(g),o:e=>Math.round(e).toString(8),p:(e,g)=>qge(e*100,g),r:qge,s:WIt,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function tie(e){return e}var gie=Array.prototype.map,iie=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function iZe(e){var g=e.grouping===void 0||e.thousands===void 0?tie:SIt(gie.call(e.grouping,Number),e.thousands+""),i=e.currency===void 0?"":e.currency[0]+"",I=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",r=e.numerals===void 0?tie:wIt(gie.call(e.numerals,String)),C=e.percent===void 0?"%":e.percent+"",o=e.minus===void 0?"−":e.minus+"",a=e.nan===void 0?"NaN":e.nan+"";function s(l){l=Xb(l);var c=l.fill,u=l.align,d=l.sign,h=l.symbol,m=l.zero,f=l.width,b=l.comma,p=l.precision,y=l.trim,Z=l.type;Z==="n"?(b=!0,Z="g"):eie[Z]||(p===void 0&&(p=12),y=!0,Z="g"),(m||c==="0"&&u==="=")&&(m=!0,c="0",u="=");var B=h==="$"?i:h==="#"&&/[boxX]/.test(Z)?"0"+Z.toLowerCase():"",G=h==="$"?I:/[%p]/.test(Z)?C:"",v=eie[Z],w=/[defgprs%]/.test(Z);p=p===void 0?6:/[gprs]/.test(Z)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p));function V(S){var X=B,W=G,R,H,k;if(Z==="c")W=v(S)+W,S="";else{S=+S;var K=S<0||1/S<0;if(S=isNaN(S)?a:v(Math.abs(S),p),y&&(S=VIt(S)),K&&+S==0&&d!=="+"&&(K=!1),X=(K?d==="("?d:o:d==="-"||d==="("?"":d)+X,W=(Z==="s"?iie[8+gZe/3]:"")+W+(K&&d==="("?")":""),w){for(R=-1,H=S.length;++Rk||k>57){W=(k===46?n+S.slice(R+1):S.slice(R))+W,S=S.slice(0,R);break}}}b&&!m&&(S=g(S,1/0));var D=X.length+S.length+W.length,J=D>1)+X+S+W+J.slice(D);break;default:S=J+X+S+W;break}return r(S)}return V.toString=function(){return l+""},V}function A(l,c){var u=s((l=Xb(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(Wb(c)/3)))*3,h=Math.pow(10,-d),m=iie[8+d/3];return function(f){return u(h*f)+m}}return{format:s,formatPrefix:A}}var aV,mC,gm;IZe({thousands:",",grouping:[3],currency:["$",""]});function IZe(e){return aV=iZe(e),mC=aV.format,gm=aV.formatPrefix,aV}function nZe(e){return Math.max(0,-Wb(Math.abs(e)))}function E0(e,g){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Wb(g)/3)))*3-Wb(Math.abs(e)))}function rZe(e,g){return e=Math.abs(e),g=Math.abs(g)-e,Math.max(0,Wb(g)-Wb(e))+1}const XIt=Object.freeze(Object.defineProperty({__proto__:null,FormatSpecifier:oN,get format(){return mC},formatDefaultLocale:IZe,formatLocale:iZe,get formatPrefix(){return gm},formatSpecifier:Xb,precisionFixed:nZe,precisionPrefix:E0,precisionRound:rZe},Symbol.toStringTag,{value:"Module"}));function CZe(e,g,i,I){var n=iX(e,g,i),r;switch(I=Xb(I??",f"),I.type){case"s":{var C=Math.max(Math.abs(e),Math.abs(g));return I.precision==null&&!isNaN(r=E0(n,C))&&(I.precision=r),gm(I,C)}case"":case"e":case"g":case"p":case"r":{I.precision==null&&!isNaN(r=rZe(n,Math.max(Math.abs(e),Math.abs(g))))&&(I.precision=r-(I.type==="e"));break}case"f":case"%":{I.precision==null&&!isNaN(r=nZe(n))&&(I.precision=r-(I.type==="%")*2);break}}return mC(I)}function ru(e){var g=e.domain;return e.ticks=function(i){var I=g();return rh(I[0],I[I.length-1],i??10)},e.tickFormat=function(i,I){var n=g();return CZe(n[0],n[n.length-1],i??10,I)},e.nice=function(i){i==null&&(i=10);var I=g(),n=0,r=I.length-1,C=I[n],o=I[r],a,s,A=10;for(o0;){if(s=ES(C,o,i),s===a)return I[n]=C,I[r]=o,g(I);if(s>0)C=Math.floor(C/s)*s,o=Math.ceil(o/s)*s;else if(s<0)C=Math.ceil(C*s)/s,o=Math.floor(o*s)/s;else break;a=s}return e},e}function tg(){var e=gQ();return e.copy=function(){return PS(e,tg())},co.apply(e,arguments),ru(e)}function oZe(e){var g;function i(I){return I==null||isNaN(I=+I)?g:I}return i.invert=i,i.domain=i.range=function(I){return arguments.length?(e=Array.from(I,rX),i):e.slice()},i.unknown=function(I){return arguments.length?(g=I,i):g},i.copy=function(){return oZe(e).unknown(g)},e=arguments.length?Array.from(e,rX):[0,1],ru(i)}function aZe(e,g){e=e.slice();var i=0,I=e.length-1,n=e[i],r=e[I],C;return rMath.pow(e,g)}function YIt(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),g=>Math.log(g)/e)}function rie(e){return(g,i)=>-e(-g,i)}function iQ(e){const g=e(Iie,nie),i=g.domain;let I=10,n,r;function C(){return n=YIt(I),r=kIt(I),i()[0]<0?(n=rie(n),r=rie(r),e(HIt,TIt)):e(Iie,nie),g}return g.base=function(o){return arguments.length?(I=+o,C()):I},g.domain=function(o){return arguments.length?(i(o),C()):i()},g.ticks=o=>{const a=i();let s=a[0],A=a[a.length-1];const l=A0){for(;c<=u;++c)for(d=1;dA)break;f.push(h)}}else for(;c<=u;++c)for(d=I-1;d>=1;--d)if(h=c>0?d/r(-c):d*r(c),!(hA)break;f.push(h)}f.length*2{if(o==null&&(o=10),a==null&&(a=I===10?"s":","),typeof a!="function"&&(!(I%1)&&(a=Xb(a)).precision==null&&(a.trim=!0),a=mC(a)),o===1/0)return a;const s=Math.max(1,I*o/g.ticks().length);return A=>{let l=A/r(Math.round(n(A)));return l*Ii(aZe(i(),{floor:o=>r(Math.floor(n(o))),ceil:o=>r(Math.ceil(n(o)))})),g}function Cu(){const e=iQ(CN()).domain([1,10]);return e.copy=()=>PS(e,Cu()).base(e.base()),co.apply(e,arguments),e}function Cie(e){return function(g){return Math.sign(g)*Math.log1p(Math.abs(g/e))}}function oie(e){return function(g){return Math.sign(g)*Math.expm1(Math.abs(g))*e}}function IQ(e){var g=1,i=e(Cie(g),oie(g));return i.constant=function(I){return arguments.length?e(Cie(g=+I),oie(g)):g},ru(i)}function AZe(){var e=IQ(CN());return e.copy=function(){return PS(e,AZe()).constant(e.constant())},co.apply(e,arguments)}function aie(e){return function(g){return g<0?-Math.pow(-g,e):Math.pow(g,e)}}function KIt(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function FIt(e){return e<0?-e*e:e*e}function nQ(e){var g=e(rr,rr),i=1;function I(){return i===1?e(rr,rr):i===.5?e(KIt,FIt):e(aie(i),aie(1/i))}return g.exponent=function(n){return arguments.length?(i=+n,I()):i},ru(g)}function rQ(){var e=nQ(CN());return e.copy=function(){return PS(e,rQ()).exponent(e.exponent())},co.apply(e,arguments),e}function DIt(){return rQ.apply(null,arguments).exponent(.5)}function Aie(e){return Math.sign(e)*e*e}function xIt(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function sZe(){var e=gQ(),g=[0,1],i=!1,I;function n(r){var C=xIt(e(r));return isNaN(C)?I:i?Math.round(C):C}return n.invert=function(r){return e.invert(Aie(r))},n.domain=function(r){return arguments.length?(e.domain(r),n):e.domain()},n.range=function(r){return arguments.length?(e.range((g=Array.from(r,rX)).map(Aie)),n):g.slice()},n.rangeRound=function(r){return n.range(r).round(!0)},n.round=function(r){return arguments.length?(i=!!r,n):i},n.clamp=function(r){return arguments.length?(e.clamp(r),n):e.clamp()},n.unknown=function(r){return arguments.length?(I=r,n):I},n.copy=function(){return sZe(e.domain(),g).round(i).clamp(e.clamp()).unknown(I)},co.apply(n,arguments),ru(n)}function oX(){var e=[],g=[],i=[],I;function n(){var C=0,o=Math.max(1,g.length);for(i=new Array(o-1);++C0?i[o-1]:e[0],o=i?[I[i-1],g]:[I[s-1],I[s]]},C.unknown=function(a){return arguments.length&&(r=a),C},C.thresholds=function(){return I.slice()},C.copy=function(){return lZe().domain([e,g]).range(n).unknown(r)},co.apply(ru(C),arguments)}function cZe(){var e=[.5],g=[0,1],i,I=1;function n(r){return r!=null&&r<=r?g[em(e,r,0,I)]:i}return n.domain=function(r){return arguments.length?(e=Array.from(r),I=Math.min(e.length,g.length-1),n):e.slice()},n.range=function(r){return arguments.length?(g=Array.from(r),I=Math.min(e.length,g.length-1),n):g.slice()},n.invertExtent=function(r){var C=g.indexOf(r);return[e[C-1],e[C]]},n.unknown=function(r){return arguments.length?(i=r,n):i},n.copy=function(){return cZe().domain(e).range(g).unknown(i)},co.apply(n,arguments)}const j5=new Date,$5=new Date;function FI(e,g,i,I){function n(r){return e(r=arguments.length===0?new Date:new Date(+r)),r}return n.floor=r=>(e(r=new Date(+r)),r),n.ceil=r=>(e(r=new Date(r-1)),g(r,1),e(r),r),n.round=r=>{const C=n(r),o=n.ceil(r);return r-C(g(r=new Date(+r),C==null?1:Math.floor(C)),r),n.range=(r,C,o)=>{const a=[];if(r=n.ceil(r),o=o==null?1:Math.floor(o),!(r0))return a;let s;do a.push(s=new Date(+r)),g(r,o),e(r);while(sFI(C=>{if(C>=C)for(;e(C),!r(C);)C.setTime(C-1)},(C,o)=>{if(C>=C)if(o<0)for(;++o<=0;)for(;g(C,-1),!r(C););else for(;--o>=0;)for(;g(C,1),!r(C););}),i&&(n.count=(r,C)=>(j5.setTime(+r),$5.setTime(+C),e(j5),e($5),Math.floor(i(j5,$5))),n.every=r=>(r=Math.floor(r),!isFinite(r)||!(r>0)?null:r>1?n.filter(I?C=>I(C)%r===0:C=>n.count(0,C)%r===0):n)),n}const aX=FI(()=>{},(e,g)=>{e.setTime(+e+g)},(e,g)=>g-e);aX.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?FI(g=>{g.setTime(Math.floor(g/e)*e)},(g,i)=>{g.setTime(+g+i*e)},(g,i)=>(i-g)/e):aX);aX.range;const hs=1e3,jC=hs*60,ms=jC*60,Es=ms*24,CQ=Es*7,sie=Es*30,q5=Es*365,ld=FI(e=>{e.setTime(e-e.getMilliseconds())},(e,g)=>{e.setTime(+e+g*hs)},(e,g)=>(g-e)/hs,e=>e.getUTCSeconds());ld.range;const oQ=FI(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*hs)},(e,g)=>{e.setTime(+e+g*jC)},(e,g)=>(g-e)/jC,e=>e.getMinutes());oQ.range;const aQ=FI(e=>{e.setUTCSeconds(0,0)},(e,g)=>{e.setTime(+e+g*jC)},(e,g)=>(g-e)/jC,e=>e.getUTCMinutes());aQ.range;const AQ=FI(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*hs-e.getMinutes()*jC)},(e,g)=>{e.setTime(+e+g*ms)},(e,g)=>(g-e)/ms,e=>e.getHours());AQ.range;const sQ=FI(e=>{e.setUTCMinutes(0,0,0)},(e,g)=>{e.setTime(+e+g*ms)},(e,g)=>(g-e)/ms,e=>e.getUTCHours());sQ.range;const JS=FI(e=>e.setHours(0,0,0,0),(e,g)=>e.setDate(e.getDate()+g),(e,g)=>(g-e-(g.getTimezoneOffset()-e.getTimezoneOffset())*jC)/Es,e=>e.getDate()-1);JS.range;const aN=FI(e=>{e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCDate(e.getUTCDate()+g)},(e,g)=>(g-e)/Es,e=>e.getUTCDate()-1);aN.range;const uZe=FI(e=>{e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCDate(e.getUTCDate()+g)},(e,g)=>(g-e)/Es,e=>Math.floor(e/Es));uZe.range;function im(e){return FI(g=>{g.setDate(g.getDate()-(g.getDay()+7-e)%7),g.setHours(0,0,0,0)},(g,i)=>{g.setDate(g.getDate()+i*7)},(g,i)=>(i-g-(i.getTimezoneOffset()-g.getTimezoneOffset())*jC)/CQ)}const AN=im(0),AX=im(1),EIt=im(2),MIt=im(3),Hb=im(4),zIt=im(5),PIt=im(6);AN.range;AX.range;EIt.range;MIt.range;Hb.range;zIt.range;PIt.range;function Im(e){return FI(g=>{g.setUTCDate(g.getUTCDate()-(g.getUTCDay()+7-e)%7),g.setUTCHours(0,0,0,0)},(g,i)=>{g.setUTCDate(g.getUTCDate()+i*7)},(g,i)=>(i-g)/CQ)}const sN=Im(0),sX=Im(1),JIt=Im(2),OIt=Im(3),Tb=Im(4),_It=Im(5),LIt=Im(6);sN.range;sX.range;JIt.range;OIt.range;Tb.range;_It.range;LIt.range;const lQ=FI(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,g)=>{e.setMonth(e.getMonth()+g)},(e,g)=>g.getMonth()-e.getMonth()+(g.getFullYear()-e.getFullYear())*12,e=>e.getMonth());lQ.range;const cQ=FI(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCMonth(e.getUTCMonth()+g)},(e,g)=>g.getUTCMonth()-e.getUTCMonth()+(g.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());cQ.range;const Ms=FI(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,g)=>{e.setFullYear(e.getFullYear()+g)},(e,g)=>g.getFullYear()-e.getFullYear(),e=>e.getFullYear());Ms.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:FI(g=>{g.setFullYear(Math.floor(g.getFullYear()/e)*e),g.setMonth(0,1),g.setHours(0,0,0,0)},(g,i)=>{g.setFullYear(g.getFullYear()+i*e)});Ms.range;const zs=FI(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,g)=>{e.setUTCFullYear(e.getUTCFullYear()+g)},(e,g)=>g.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());zs.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:FI(g=>{g.setUTCFullYear(Math.floor(g.getUTCFullYear()/e)*e),g.setUTCMonth(0,1),g.setUTCHours(0,0,0,0)},(g,i)=>{g.setUTCFullYear(g.getUTCFullYear()+i*e)});zs.range;function dZe(e,g,i,I,n,r){const C=[[ld,1,hs],[ld,5,5*hs],[ld,15,15*hs],[ld,30,30*hs],[r,1,jC],[r,5,5*jC],[r,15,15*jC],[r,30,30*jC],[n,1,ms],[n,3,3*ms],[n,6,6*ms],[n,12,12*ms],[I,1,Es],[I,2,2*Es],[i,1,CQ],[g,1,sie],[g,3,3*sie],[e,1,q5]];function o(s,A,l){const c=Am).right(C,c);if(u===C.length)return e.every(iX(s/q5,A/q5,l));if(u===0)return aX.every(Math.max(iX(s,A,l),1));const[d,h]=C[c/C[u-1][2]53)return null;"w"in ve||(ve.w=1),"Z"in ve?(Be=tF(jy(ve.y,0,1)),Je=Be.getUTCDay(),Be=Je>4||Je===0?sX.ceil(Be):sX(Be),Be=aN.offset(Be,(ve.V-1)*7),ve.y=Be.getUTCFullYear(),ve.m=Be.getUTCMonth(),ve.d=Be.getUTCDate()+(ve.w+6)%7):(Be=eF(jy(ve.y,0,1)),Je=Be.getDay(),Be=Je>4||Je===0?AX.ceil(Be):AX(Be),Be=JS.offset(Be,(ve.V-1)*7),ve.y=Be.getFullYear(),ve.m=Be.getMonth(),ve.d=Be.getDate()+(ve.w+6)%7)}else("W"in ve||"U"in ve)&&("w"in ve||(ve.w="u"in ve?ve.u%7:"W"in ve?1:0),Je="Z"in ve?tF(jy(ve.y,0,1)).getUTCDay():eF(jy(ve.y,0,1)).getDay(),ve.m=0,ve.d="W"in ve?(ve.w+6)%7+ve.W*7-(Je+5)%7:ve.w+ve.U*7-(Je+6)%7);return"Z"in ve?(ve.H+=ve.Z/100|0,ve.M+=ve.Z%100,tF(ve)):eF(ve)}}function v(ne,be,pe,ve){for(var We=0,Be=be.length,Je=pe.length,Pe,De;We=Je)return-1;if(Pe=be.charCodeAt(We++),Pe===37){if(Pe=be.charAt(We++),De=Z[Pe in lie?be.charAt(We++):Pe],!De||(ve=De(ne,pe,ve))<0)return-1}else if(Pe!=pe.charCodeAt(ve++))return-1}return ve}function w(ne,be,pe){var ve=s.exec(be.slice(pe));return ve?(ne.p=A.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function V(ne,be,pe){var ve=u.exec(be.slice(pe));return ve?(ne.w=d.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function S(ne,be,pe){var ve=l.exec(be.slice(pe));return ve?(ne.w=c.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function X(ne,be,pe){var ve=f.exec(be.slice(pe));return ve?(ne.m=b.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function W(ne,be,pe){var ve=h.exec(be.slice(pe));return ve?(ne.m=m.get(ve[0].toLowerCase()),pe+ve[0].length):-1}function R(ne,be,pe){return v(ne,g,be,pe)}function H(ne,be,pe){return v(ne,i,be,pe)}function k(ne,be,pe){return v(ne,I,be,pe)}function K(ne){return C[ne.getDay()]}function D(ne){return r[ne.getDay()]}function J(ne){return a[ne.getMonth()]}function P(ne){return o[ne.getMonth()]}function te(ne){return n[+(ne.getHours()>=12)]}function q(ne){return 1+~~(ne.getMonth()/3)}function $(ne){return C[ne.getUTCDay()]}function j(ne){return r[ne.getUTCDay()]}function ge(ne){return a[ne.getUTCMonth()]}function Q(ne){return o[ne.getUTCMonth()]}function Ie(ne){return n[+(ne.getUTCHours()>=12)]}function he(ne){return 1+~~(ne.getUTCMonth()/3)}return{format:function(ne){var be=B(ne+="",p);return be.toString=function(){return ne},be},parse:function(ne){var be=G(ne+="",!1);return be.toString=function(){return ne},be},utcFormat:function(ne){var be=B(ne+="",y);return be.toString=function(){return ne},be},utcParse:function(ne){var be=G(ne+="",!0);return be.toString=function(){return ne},be}}}var lie={"-":"",_:" ",0:"0"},$I=/^\s*\d+/,ent=/^%/,tnt=/[\\^$*+?|[\]().{}]/g;function Yg(e,g,i){var I=e<0?"-":"",n=(I?-e:e)+"",r=n.length;return I+(r[g.toLowerCase(),i]))}function int(e,g,i){var I=$I.exec(g.slice(i,i+1));return I?(e.w=+I[0],i+I[0].length):-1}function Int(e,g,i){var I=$I.exec(g.slice(i,i+1));return I?(e.u=+I[0],i+I[0].length):-1}function nnt(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.U=+I[0],i+I[0].length):-1}function rnt(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.V=+I[0],i+I[0].length):-1}function Cnt(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.W=+I[0],i+I[0].length):-1}function cie(e,g,i){var I=$I.exec(g.slice(i,i+4));return I?(e.y=+I[0],i+I[0].length):-1}function uie(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.y=+I[0]+(+I[0]>68?1900:2e3),i+I[0].length):-1}function ont(e,g,i){var I=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(g.slice(i,i+6));return I?(e.Z=I[1]?0:-(I[2]+(I[3]||"00")),i+I[0].length):-1}function ant(e,g,i){var I=$I.exec(g.slice(i,i+1));return I?(e.q=I[0]*3-3,i+I[0].length):-1}function Ant(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.m=I[0]-1,i+I[0].length):-1}function die(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.d=+I[0],i+I[0].length):-1}function snt(e,g,i){var I=$I.exec(g.slice(i,i+3));return I?(e.m=0,e.d=+I[0],i+I[0].length):-1}function hie(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.H=+I[0],i+I[0].length):-1}function lnt(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.M=+I[0],i+I[0].length):-1}function cnt(e,g,i){var I=$I.exec(g.slice(i,i+2));return I?(e.S=+I[0],i+I[0].length):-1}function unt(e,g,i){var I=$I.exec(g.slice(i,i+3));return I?(e.L=+I[0],i+I[0].length):-1}function dnt(e,g,i){var I=$I.exec(g.slice(i,i+6));return I?(e.L=Math.floor(I[0]/1e3),i+I[0].length):-1}function hnt(e,g,i){var I=ent.exec(g.slice(i,i+1));return I?i+I[0].length:-1}function mnt(e,g,i){var I=$I.exec(g.slice(i));return I?(e.Q=+I[0],i+I[0].length):-1}function fnt(e,g,i){var I=$I.exec(g.slice(i));return I?(e.s=+I[0],i+I[0].length):-1}function mie(e,g){return Yg(e.getDate(),g,2)}function pnt(e,g){return Yg(e.getHours(),g,2)}function bnt(e,g){return Yg(e.getHours()%12||12,g,2)}function ynt(e,g){return Yg(1+JS.count(Ms(e),e),g,3)}function hZe(e,g){return Yg(e.getMilliseconds(),g,3)}function Znt(e,g){return hZe(e,g)+"000"}function Gnt(e,g){return Yg(e.getMonth()+1,g,2)}function vnt(e,g){return Yg(e.getMinutes(),g,2)}function Bnt(e,g){return Yg(e.getSeconds(),g,2)}function Snt(e){var g=e.getDay();return g===0?7:g}function wnt(e,g){return Yg(AN.count(Ms(e)-1,e),g,2)}function mZe(e){var g=e.getDay();return g>=4||g===0?Hb(e):Hb.ceil(e)}function Rnt(e,g){return e=mZe(e),Yg(Hb.count(Ms(e),e)+(Ms(e).getDay()===4),g,2)}function Vnt(e){return e.getDay()}function Wnt(e,g){return Yg(AX.count(Ms(e)-1,e),g,2)}function Xnt(e,g){return Yg(e.getFullYear()%100,g,2)}function Hnt(e,g){return e=mZe(e),Yg(e.getFullYear()%100,g,2)}function Tnt(e,g){return Yg(e.getFullYear()%1e4,g,4)}function Nnt(e,g){var i=e.getDay();return e=i>=4||i===0?Hb(e):Hb.ceil(e),Yg(e.getFullYear()%1e4,g,4)}function knt(e){var g=e.getTimezoneOffset();return(g>0?"-":(g*=-1,"+"))+Yg(g/60|0,"0",2)+Yg(g%60,"0",2)}function fie(e,g){return Yg(e.getUTCDate(),g,2)}function Ynt(e,g){return Yg(e.getUTCHours(),g,2)}function Knt(e,g){return Yg(e.getUTCHours()%12||12,g,2)}function Fnt(e,g){return Yg(1+aN.count(zs(e),e),g,3)}function fZe(e,g){return Yg(e.getUTCMilliseconds(),g,3)}function Dnt(e,g){return fZe(e,g)+"000"}function xnt(e,g){return Yg(e.getUTCMonth()+1,g,2)}function Ent(e,g){return Yg(e.getUTCMinutes(),g,2)}function Mnt(e,g){return Yg(e.getUTCSeconds(),g,2)}function znt(e){var g=e.getUTCDay();return g===0?7:g}function Pnt(e,g){return Yg(sN.count(zs(e)-1,e),g,2)}function pZe(e){var g=e.getUTCDay();return g>=4||g===0?Tb(e):Tb.ceil(e)}function Jnt(e,g){return e=pZe(e),Yg(Tb.count(zs(e),e)+(zs(e).getUTCDay()===4),g,2)}function Ont(e){return e.getUTCDay()}function _nt(e,g){return Yg(sX.count(zs(e)-1,e),g,2)}function Lnt(e,g){return Yg(e.getUTCFullYear()%100,g,2)}function Unt(e,g){return e=pZe(e),Yg(e.getUTCFullYear()%100,g,2)}function Qnt(e,g){return Yg(e.getUTCFullYear()%1e4,g,4)}function jnt(e,g){var i=e.getUTCDay();return e=i>=4||i===0?Tb(e):Tb.ceil(e),Yg(e.getUTCFullYear()%1e4,g,4)}function $nt(){return"+0000"}function pie(){return"%"}function bie(e){return+e}function yie(e){return Math.floor(+e/1e3)}var Dm,bZe,yZe;qnt({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function qnt(e){return Dm=qIt(e),bZe=Dm.format,Dm.parse,yZe=Dm.utcFormat,Dm.utcParse,Dm}function ert(e){return new Date(e)}function trt(e){return e instanceof Date?+e:+new Date(+e)}function uQ(e,g,i,I,n,r,C,o,a,s){var A=gQ(),l=A.invert,c=A.domain,u=s(".%L"),d=s(":%S"),h=s("%I:%M"),m=s("%I %p"),f=s("%a %d"),b=s("%b %d"),p=s("%B"),y=s("%Y");function Z(B){return(a(B)g(n/(e.length-1)))},i.quantiles=function(I){return Array.from({length:I+1},(n,r)=>TB(e,r/I))},i.copy=function(){return BZe(g).domain(e)},gl.apply(i,arguments)}function cN(){var e=0,g=.5,i=1,I=1,n,r,C,o,a,s=rr,A,l=!1,c;function u(h){return isNaN(h=+h)?c:(h=.5+((h=+A(h))-r)*(I*h1&&arguments[1]!==void 0?arguments[1]:0,i=(In[e[g+0]]+In[e[g+1]]+In[e[g+2]]+In[e[g+3]]+"-"+In[e[g+4]]+In[e[g+5]]+"-"+In[e[g+6]]+In[e[g+7]]+"-"+In[e[g+8]]+In[e[g+9]]+"-"+In[e[g+10]]+In[e[g+11]]+In[e[g+12]]+In[e[g+13]]+In[e[g+14]]+In[e[g+15]]).toLowerCase();if(!uN(i))throw TypeError("Stringified UUID is invalid");return i}var Zie,iF,IF=0,nF=0;function art(e,g,i){var I=g&&i||0,n=g||new Array(16);e=e||{};var r=e.node||Zie,C=e.clockseq!==void 0?e.clockseq:iF;if(r==null||C==null){var o=e.random||(e.rng||VZe)();r==null&&(r=Zie=[o[0]|1,o[1],o[2],o[3],o[4],o[5]]),C==null&&(C=iF=(o[6]<<8|o[7])&16383)}var a=e.msecs!==void 0?e.msecs:Date.now(),s=e.nsecs!==void 0?e.nsecs:nF+1,A=a-IF+(s-nF)/1e4;if(A<0&&e.clockseq===void 0&&(C=C+1&16383),(A<0||a>IF)&&e.nsecs===void 0&&(s=0),s>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");IF=a,nF=s,iF=C,a+=122192928e5;var l=((a&268435455)*1e4+s)%4294967296;n[I++]=l>>>24&255,n[I++]=l>>>16&255,n[I++]=l>>>8&255,n[I++]=l&255;var c=a/4294967296*1e4&268435455;n[I++]=c>>>8&255,n[I++]=c&255,n[I++]=c>>>24&15|16,n[I++]=c>>>16&255,n[I++]=C>>>8|128,n[I++]=C&255;for(var u=0;u<6;++u)n[I+u]=r[u];return g||dN(n)}function WZe(e){if(!uN(e))throw TypeError("Invalid UUID");var g,i=new Uint8Array(16);return i[0]=(g=parseInt(e.slice(0,8),16))>>>24,i[1]=g>>>16&255,i[2]=g>>>8&255,i[3]=g&255,i[4]=(g=parseInt(e.slice(9,13),16))>>>8,i[5]=g&255,i[6]=(g=parseInt(e.slice(14,18),16))>>>8,i[7]=g&255,i[8]=(g=parseInt(e.slice(19,23),16))>>>8,i[9]=g&255,i[10]=(g=parseInt(e.slice(24,36),16))/1099511627776&255,i[11]=g/4294967296&255,i[12]=g>>>24&255,i[13]=g>>>16&255,i[14]=g>>>8&255,i[15]=g&255,i}function Art(e){e=unescape(encodeURIComponent(e));for(var g=[],i=0;i>5]>>>n%32&255,C=parseInt(I.charAt(r>>>4&15)+I.charAt(r&15),16);g.push(C)}return g}function HZe(e){return(e+64>>>9<<4)+14+1}function drt(e,g){e[g>>5]|=128<>5]|=(e[I/8]&255)<>16)+(g>>16)+(i>>16);return I<<16|i&65535}function mrt(e,g){return e<>>32-g}function hN(e,g,i,I,n,r){return dc(mrt(dc(dc(g,e),dc(I,r)),n),i)}function Bn(e,g,i,I,n,r,C){return hN(g&i|~g&I,e,g,n,r,C)}function Sn(e,g,i,I,n,r,C){return hN(g&I|i&~I,e,g,n,r,C)}function wn(e,g,i,I,n,r,C){return hN(g^i^I,e,g,n,r,C)}function Rn(e,g,i,I,n,r,C){return hN(i^(g|~I),e,g,n,r,C)}var frt=XZe("v3",48,crt);const prt=frt;function brt(e,g,i){e=e||{};var I=e.random||(e.rng||VZe)();if(I[6]=I[6]&15|64,I[8]=I[8]&63|128,g){i=i||0;for(var n=0;n<16;++n)g[i+n]=I[n];return g}return dN(I)}function yrt(e,g,i,I){switch(e){case 0:return g&i^~g&I;case 1:return g^i^I;case 2:return g&i^g&I^i&I;case 3:return g^i^I}}function rF(e,g){return e<>>32-g}function Zrt(e){var g=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof e=="string"){var I=unescape(encodeURIComponent(e));e=[];for(var n=0;n>>0;p=b,b=f,f=rF(m,30)>>>0,m=h,h=B}i[0]=i[0]+h>>>0,i[1]=i[1]+m>>>0,i[2]=i[2]+f>>>0,i[3]=i[3]+b>>>0,i[4]=i[4]+p>>>0}return[i[0]>>24&255,i[0]>>16&255,i[0]>>8&255,i[0]&255,i[1]>>24&255,i[1]>>16&255,i[1]>>8&255,i[1]&255,i[2]>>24&255,i[2]>>16&255,i[2]>>8&255,i[2]&255,i[3]>>24&255,i[3]>>16&255,i[3]>>8&255,i[3]&255,i[4]>>24&255,i[4]>>16&255,i[4]>>8&255,i[4]&255]}var Grt=XZe("v5",80,Zrt);const vrt=Grt,Brt="00000000-0000-0000-0000-000000000000";function Srt(e){if(!uN(e))throw TypeError("Invalid UUID");return parseInt(e.substr(14,1),16)}const wrt=Object.freeze(Object.defineProperty({__proto__:null,NIL:Brt,parse:WZe,stringify:dN,v1:art,v3:prt,v4:brt,v5:vrt,validate:uN,version:Srt},Symbol.toStringTag,{value:"Module"})),Rrt=el(wrt);var mN=Rrt,mQ=(()=>typeof Buffer<"u"?e=>Buffer.from(e).toString("base64"):e=>btoa(String.fromCharCode(...e)))(),Vrt=(()=>typeof Buffer<"u"?e=>Buffer.from(e,"base64"):e=>Uint8Array.from(atob(e),g=>g.charCodeAt(0)))();OS.encode=function(e){var g=mN.parse(e),i=mQ(g),I=i.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return I};OS.decode=function(e){var g=e.replace(/-/g,"+").replace(/_/g,"/")+"==";return mN.stringify(Vrt(g))};OS.v4=function(){var e=mN.v4(null,new Uint8Array(16)),g=mQ(e),i=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return i};OS.nice=function(){var e=mN.v4(null,new Uint8Array(16));e[0]=e[0]&127;var g=mQ(e),i=g.replace(/\+/g,"-").replace(/\//g,"_").substring(0,22);return i};var Wrt=OS;const cg=Or(Wrt);var TZe={exports:{}},fN={},lX={exports:{}};lX.exports;(function(e,g){var i=200,I="__lodash_hash_undefined__",n=1,r=2,C=9007199254740991,o="[object Arguments]",a="[object Array]",s="[object AsyncFunction]",A="[object Boolean]",l="[object Date]",c="[object Error]",u="[object Function]",d="[object GeneratorFunction]",h="[object Map]",m="[object Number]",f="[object Null]",b="[object Object]",p="[object Promise]",y="[object Proxy]",Z="[object RegExp]",B="[object Set]",G="[object String]",v="[object Symbol]",w="[object Undefined]",V="[object WeakMap]",S="[object ArrayBuffer]",X="[object DataView]",W="[object Float32Array]",R="[object Float64Array]",H="[object Int8Array]",k="[object Int16Array]",K="[object Int32Array]",D="[object Uint8Array]",J="[object Uint8ClampedArray]",P="[object Uint16Array]",te="[object Uint32Array]",q=/[\\^$.*+?()[\]{}|]/g,$=/^\[object .+?Constructor\]$/,j=/^(?:0|[1-9]\d*)$/,ge={};ge[W]=ge[R]=ge[H]=ge[k]=ge[K]=ge[D]=ge[J]=ge[P]=ge[te]=!0,ge[o]=ge[a]=ge[S]=ge[A]=ge[X]=ge[l]=ge[c]=ge[u]=ge[h]=ge[m]=ge[b]=ge[Z]=ge[B]=ge[G]=ge[V]=!1;var Q=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,Ie=typeof self=="object"&&self&&self.Object===Object&&self,he=Q||Ie||Function("return this")(),ne=g&&!g.nodeType&&g,be=ne&&!0&&e&&!e.nodeType&&e,pe=be&&be.exports===ne,ve=pe&&Q.process,We=function(){try{return ve&&ve.binding&&ve.binding("util")}catch{}}(),Be=We&&We.isTypedArray;function Je(Se,ze){for(var rt=-1,St=Se==null?0:Se.length,li=0,rg=[];++rt-1}function At(Se,ze){var rt=this.__data__,St=Oi(rt,Se);return St<0?(++this.size,rt.push([Se,ze])):rt[St][1]=ze,this}yt.prototype.clear=kt,yt.prototype.delete=ht,yt.prototype.get=Rt,yt.prototype.has=xt,yt.prototype.set=At;function Xt(Se){var ze=-1,rt=Se==null?0:Se.length;for(this.clear();++zexI))return!1;var Ni=rg.get(Se);if(Ni&&rg.get(ze))return Ni==ze;var Qr=-1,po=!0,yn=rt&r?new Zt:void 0;for(rg.set(Se,ze),rg.set(ze,Se);++Qr-1&&Se%1==0&&Se-1&&Se%1==0&&Se<=C}function p6(Se){var ze=typeof Se;return Se!=null&&(ze=="object"||ze=="function")}function vy(Se){return Se!=null&&typeof Se=="object"}var b6=Be?_e(Be):Mke;function gYe(Se){return eYe(Se)?mg(Se):zke(Se)}function iYe(){return[]}function IYe(){return!1}e.exports=tYe})(lX,lX.exports);var pN=lX.exports,NZe={exports:{}};/*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(e){(function(){var g={}.hasOwnProperty;function I(){for(var i=[],n=0;ng&&(g=I);return g}function wCt(e){for(var g=Array(e.length),I=0,i=e.length;I=g.x+g.w||e.y+e.h<=g.y||e.y>=g.y+g.h)}function WZe(e,g,I){for(var i=lQ(e),n=cQ(e,g),C=Array(e.length),r=0,o=n.length;rg.y+g.h)break;uN(g,o)&&Q3(e,o,I+g[n],i)}}g[i]=I}function XZe(e,g,I,i,n){var C=I==="vertical",r=I==="horizontal";if(C)for(g.y=Math.min(AX(e),g.y);g.y>0&&!Wp(e,g);)g.y--;else if(r)for(g.y=Math.min(AX(e),g.y);g.x>0&&!Wp(e,g);)g.x--;for(var o=void 0;o=Wp(e,g);)r?Q3(n,g,o.x+o.w,"x"):Q3(n,g,o.y+o.h,"y"),r&&g.x+g.w>i&&(g.x=i-g.w,g.y++);return g}function HZe(e,g){for(var I=lQ(e),i=0,n=e.length;ig.cols&&(C.x=g.cols-C.w),C.x<0&&(C.x=0,C.w=g.cols),!C.static)I.push(C);else for(;Wp(I,C);)C.y++}return e}function TZe(e,g){for(var I=0,i=e.length;I=i:r==="horizontal"&&typeof I=="number"?a>=I:!1;l&&(A=A.reverse());var c=NZe(A,g);if(C&&c.length)return""+g.i,g.x=a,g.y=s,g.moved=!1,e;for(var u=0,d=c.length;uI.y||g.y===I.y&&g.x>I.x?1:g.y===I.y&&g.x===I.x?0:-1})}function YZe(e){return[].concat(e).sort(function(g,I){return g.x>I.x||g.x===I.x&&g.y>I.y?1:-1})}function TCt(e,g,I,i){e=e||[];var n=[];return U3.default.Children.forEach(g,function(C,r){var o=TZe(e,String(C.key));if(o)n[r]=Vp(o);else{var a=C.props["data-grid"]||C.props._grid;a?n[r]=Vp(GCt({},a,{i:C.key})):n[r]=Vp({w:1,h:1,x:0,y:AX(n),i:String(C.key)})}}),n=HZe(n,{cols:I}),n=WZe(n,i,I),n}function NCt(e){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Layout",I=["x","y","w","h"];if(!Array.isArray(e))throw new Error(g+" must be an array!");for(var i=0,n=e.length;i1?Re-1:0),Fe=1;Fe2?xe-2:0),Me=2;Meg&&(g=i);return g}function krt(e){for(var g=Array(e.length),i=0,I=e.length;i=g.x+g.w||e.y+e.h<=g.y||e.y>=g.y+g.h)}function KZe(e,g,i){for(var I=fQ(e),n=pQ(e,g),r=Array(e.length),C=0,o=n.length;Cg.y+g.h)break;bN(g,o)&&gz(e,o,i+g[n],I)}}g[I]=i}function FZe(e,g,i,I,n){var r=i==="vertical",C=i==="horizontal";if(r)for(g.y=Math.min(cX(e),g.y);g.y>0&&!Xp(e,g);)g.y--;else if(C)for(g.y=Math.min(cX(e),g.y);g.x>0&&!Xp(e,g);)g.x--;for(var o=void 0;o=Xp(e,g);)C?gz(n,g,o.x+o.w,"x"):gz(n,g,o.y+o.h,"y"),C&&g.x+g.w>I&&(g.x=I-g.w,g.y++);return g}function DZe(e,g){for(var i=fQ(e),I=0,n=e.length;Ig.cols&&(r.x=g.cols-r.w),r.x<0&&(r.x=0,r.w=g.cols),!r.static)i.push(r);else for(;Xp(i,r);)r.y++}return e}function xZe(e,g){for(var i=0,I=e.length;i=I:C==="horizontal"&&typeof i=="number"?a>=i:!1;l&&(A=A.reverse());var c=EZe(A,g);if(r&&c.length)return""+g.i,g.x=a,g.y=s,g.moved=!1,e;for(var u=0,d=c.length;ui.y||g.y===i.y&&g.x>i.x?1:g.y===i.y&&g.x===i.x?0:-1})}function zZe(e){return[].concat(e).sort(function(g,i){return g.x>i.x||g.x===i.x&&g.y>i.y?1:-1})}function Ert(e,g,i,I){e=e||[];var n=[];return tz.default.Children.forEach(g,function(r,C){var o=xZe(e,String(r.key));if(o)n[C]=Wp(o);else{var a=r.props["data-grid"]||r.props._grid;a?n[C]=Wp(Xrt({},a,{i:r.key})):n[C]=Wp({w:1,h:1,x:0,y:cX(n),i:String(r.key)})}}),n=DZe(n,{cols:i}),n=KZe(n,I,i),n}function Mrt(e){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Layout",i=["x","y","w","h"];if(!Array.isArray(e))throw new Error(g+" must be an array!");for(var I=0,n=e.length;I1?Re-1:0),Fe=1;Fe2?xe-2:0),Me=2;Me"u"||It===null)return""+It;var Zt=Pt(It);if(Zt==="object"){if(It instanceof Date)return"date";if(It instanceof RegExp)return"regexp"}return Zt}function Vg(It){var Zt=Ft(It);switch(Zt){case"array":case"object":return"an "+Zt;case"boolean":case"date":case"regexp":return"a "+Zt;default:return Zt}}function qg(It){return!It.constructor||!It.constructor.name?Me:It.constructor.name}return ke.checkPropTypes=S,ke.PropTypes=ke,ke},W=n(function(re){{var oe=typeof Symbol=="function"&&Symbol.for&&Symbol.for("react.element")||60103,Re=function(Fe){return typeof Fe=="object"&&Fe!==null&&Fe.$$typeof===oe},xe=!0;re.exports=X(Re,xe)}}),V=n(function(re){/*! +*/var d=Object.getOwnPropertySymbols,h=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable;function f(Ce){if(Ce==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(Ce)}function b(){try{if(!Object.assign)return!1;var Ce=new String("abc");if(Ce[5]="de",Object.getOwnPropertyNames(Ce)[0]==="5")return!1;for(var oe={},Re=0;Re<10;Re++)oe["_"+String.fromCharCode(Re)]=Re;var xe=Object.getOwnPropertyNames(oe).map(function(Me){return oe[Me]});if(xe.join("")!=="0123456789")return!1;var Fe={};return"abcdefghijklmnopqrst".split("").forEach(function(Me){Fe[Me]=Me}),Object.keys(Object.assign({},Fe)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var p=b()?Object.assign:function(Ce,oe){for(var Re,xe=f(Ce),Fe,Me=1;Me"u"||it===null)return""+it;var Zt=Pt(it);if(Zt==="object"){if(it instanceof Date)return"date";if(it instanceof RegExp)return"regexp"}return Zt}function Vg(it){var Zt=Ft(it);switch(Zt){case"array":case"object":return"an "+Zt;case"boolean":case"date":case"regexp":return"a "+Zt;default:return Zt}}function ei(it){return!it.constructor||!it.constructor.name?Me:it.constructor.name}return ke.checkPropTypes=S,ke.PropTypes=ke,ke},W=n(function(Ce){{var oe=typeof Symbol=="function"&&Symbol.for&&Symbol.for("react.element")||60103,Re=function(Fe){return typeof Fe=="object"&&Fe!==null&&Fe.$$typeof===oe},xe=!0;Ce.exports=X(Re,xe)}}),R=n(function(Ce){/*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(){var oe={}.hasOwnProperty;function Re(){for(var xe=[],Fe=0;Fe0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u"||typeof window.document>"u")return"";var oe=window.document.documentElement.style;if(re in oe)return"";for(var Re=0;Re0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u"||typeof window.document>"u")return"";var oe=window.document.documentElement.style;if(Ce in oe)return"";for(var Re=0;Re0&&arguments[0]!==void 0?arguments[0]:{};return he({touchAction:"none"},re)}function Ie(re,oe){re.classList?re.classList.add(oe):re.className.match(new RegExp("(?:^|\\s)"+oe+"(?!\\S)"))||(re.className+=" "+oe)}function me(re,oe){re.classList?re.classList.remove(oe):re.className=re.className.replace(new RegExp("(?:^|\\s)"+oe+"(?!\\S)","g"),"")}function Ve(re,oe,Re){if(!re.props.bounds)return[oe,Re];var xe=re.props.bounds;xe=typeof xe=="string"?xe:Ce(xe);var Fe=E(re);if(typeof xe=="string"){var Me=Fe.ownerDocument,ke=Me.defaultView,Ee=void 0;if(xe==="parent"?Ee=Fe.parentNode:Ee=Me.querySelector(xe),!(Ee instanceof ke.HTMLElement))throw new Error('Bounds selector "'+xe+'" could not find an element.');var O=ke.getComputedStyle(Fe),D=ke.getComputedStyle(Ee);xe={left:-Fe.offsetLeft+x(D.paddingLeft)+x(O.marginLeft),top:-Fe.offsetTop+x(D.paddingTop)+x(O.marginTop),right:gt(Ee)-Qe(Fe)-Fe.offsetLeft+x(D.paddingRight)-x(O.marginRight),bottom:_e(Ee)-De(Fe)-Fe.offsetTop+x(D.paddingBottom)-x(O.marginBottom)}}return K(xe.right)&&(oe=Math.min(oe,xe.right)),K(xe.bottom)&&(Re=Math.min(Re,xe.bottom)),K(xe.left)&&(oe=Math.max(oe,xe.left)),K(xe.top)&&(Re=Math.max(Re,xe.top)),[oe,Re]}function we(re,oe,Re){var xe=Math.round(oe/re[0])*re[0],Fe=Math.round(Re/re[1])*re[1];return[xe,Fe]}function je(re){return re.props.axis==="both"||re.props.axis==="x"}function at(re){return re.props.axis==="both"||re.props.axis==="y"}function bt(re,oe,Re){var xe=typeof oe=="number"?ye(re,oe):null;if(typeof oe=="number"&&!xe)return null;var Fe=E(Re),Me=Re.props.offsetParent||Fe.offsetParent||Fe.ownerDocument.body;return lt(xe||re,Me)}function ct(re,oe,Re){var xe=re.state,Fe=!K(xe.lastX),Me=E(re);return Fe?{node:Me,deltaX:0,deltaY:0,lastX:oe,lastY:Re,x:oe,y:Re}:{node:Me,deltaX:oe-xe.lastX,deltaY:Re-xe.lastY,lastX:xe.lastX,lastY:xe.lastY,x:oe,y:Re}}function Ht(re,oe){var Re=re.props.scale;return{node:oe.node,x:re.state.x+oe.deltaX/Re,y:re.state.y+oe.deltaY/Re,deltaX:oe.deltaX/Re,deltaY:oe.deltaY/Re,lastX:re.state.x,lastY:re.state.y}}function Ce(re){return{left:re.left,top:re.top,right:re.right,bottom:re.bottom}}function E(re){var oe=I.findDOMNode(re);if(!oe)throw new Error(": Unmounted during event!");return oe}function _(){}var fe={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}},Ye=fe.mouse,ue=function(re){ne(oe,re);function oe(){var Re,xe,Fe,Me;te(this,oe);for(var ke=arguments.length,Ee=Array(ke),O=0;O not mounted on DragStart!");var ce=ee.ownerDocument;if(!(Fe.props.disabled||!(D.target instanceof ce.defaultView.Node)||Fe.props.handle&&!Be(D.target,Fe.props.handle,ee)||Fe.props.cancel&&Be(D.target,Fe.props.cancel,ee))){var de=He(D);Fe.setState({touchIdentifier:de});var Le=bt(D,de,Fe);if(Le!=null){var Ue=Le.x,dt=Le.y,yt=ct(Fe,Ue,dt);Fe.props.onStart;var kt=Fe.props.onStart(D,yt);kt!==!1&&(Fe.props.enableUserSelectHack&&F(ce),Fe.setState({dragging:!0,lastX:Ue,lastY:dt}),Je(ce,Ye.move,Fe.handleDrag),Je(ce,Ye.stop,Fe.handleDragStop))}}},Fe.handleDrag=function(D){D.type==="touchmove"&&D.preventDefault();var ee=bt(D,Fe.state.touchIdentifier,Fe);if(ee!=null){var ce=ee.x,de=ee.y;if(Array.isArray(Fe.props.grid)){var Le=ce-Fe.state.lastX,Ue=de-Fe.state.lastY,dt=we(Fe.props.grid,Le,Ue),yt=pe(dt,2);if(Le=yt[0],Ue=yt[1],!Le&&!Ue)return;ce=Fe.state.lastX+Le,de=Fe.state.lastY+Ue}var kt=ct(Fe,ce,de),ht=Fe.props.onDrag(D,kt);if(ht===!1){try{Fe.handleDragStop(new MouseEvent("mouseup"))}catch{var Rt=document.createEvent("MouseEvents");Rt.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),Fe.handleDragStop(Rt)}return}Fe.setState({lastX:ce,lastY:de})}},Fe.handleDragStop=function(D){if(Fe.state.dragging){var ee=bt(D,Fe.state.touchIdentifier,Fe);if(ee!=null){var ce=ee.x,de=ee.y,Le=ct(Fe,ce,de),Ue=I.findDOMNode(Fe);Ue&&Fe.props.enableUserSelectHack&&T(Ue.ownerDocument),Fe.setState({dragging:!1,lastX:NaN,lastY:NaN}),Fe.props.onStop(D,Le),Ue&&(Pe(Ue.ownerDocument,Ye.move,Fe.handleDrag),Pe(Ue.ownerDocument,Ye.stop,Fe.handleDragStop))}}},Fe.onMouseDown=function(D){return Ye=fe.mouse,Fe.handleDragStart(D)},Fe.onMouseUp=function(D){return Ye=fe.mouse,Fe.handleDragStop(D)},Fe.onTouchStart=function(D){return Ye=fe.touch,Fe.handleDragStart(D)},Fe.onTouchEnd=function(D){return Ye=fe.touch,Fe.handleDragStop(D)},xe),be(Fe,Me)}return Q(oe,[{key:"componentWillUnmount",value:function(){var xe=I.findDOMNode(this);if(xe){var Fe=xe.ownerDocument;Pe(Fe,fe.mouse.move,this.handleDrag),Pe(Fe,fe.touch.move,this.handleDrag),Pe(Fe,fe.mouse.stop,this.handleDragStop),Pe(Fe,fe.touch.stop,this.handleDragStop),this.props.enableUserSelectHack&&T(Fe)}}},{key:"render",value:function(){return i.cloneElement(i.Children.only(this.props.children),{style:k(this.props.children.props.style),onMouseDown:this.onMouseDown,onTouchStart:this.onTouchStart,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}]),oe}(i.Component);ue.displayName="DraggableCore",ue.propTypes={allowAnyClick:W.bool,disabled:W.bool,enableUserSelectHack:W.bool,offsetParent:function(oe,Re){if(oe[Re]&&oe[Re].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:W.arrayOf(W.number),scale:W.number,handle:W.string,cancel:W.string,onStart:W.func,onDrag:W.func,onStop:W.func,onMouseDown:W.func,className:J,style:J,transform:J},ue.defaultProps={allowAnyClick:!1,cancel:null,disabled:!1,enableUserSelectHack:!0,offsetParent:null,handle:null,grid:null,transform:null,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){}};var le=function(re){ne(oe,re);function oe(Re){te(this,oe);var xe=be(this,(oe.__proto__||Object.getPrototypeOf(oe)).call(this,Re));return xe.onDragStart=function(Fe,Me){var ke=xe.props.onStart(Fe,Ht(xe,Me));if(ke===!1)return!1;xe.setState({dragging:!0,dragged:!0})},xe.onDrag=function(Fe,Me){if(!xe.state.dragging)return!1;var ke=Ht(xe,Me),Ee={x:ke.x,y:ke.y};if(xe.props.bounds){var O=Ee.x,D=Ee.y;Ee.x+=xe.state.slackX,Ee.y+=xe.state.slackY;var ee=Ve(xe,Ee.x,Ee.y),ce=pe(ee,2),de=ce[0],Le=ce[1];Ee.x=de,Ee.y=Le,Ee.slackX=xe.state.slackX+(O-Ee.x),Ee.slackY=xe.state.slackY+(D-Ee.y),ke.x=Ee.x,ke.y=Ee.y,ke.deltaX=Ee.x-xe.state.x,ke.deltaY=Ee.y-xe.state.y}var Ue=xe.props.onDrag(Fe,ke);if(Ue===!1)return!1;xe.setState(Ee)},xe.onDragStop=function(Fe,Me){if(!xe.state.dragging)return!1;var ke=xe.props.onStop(Fe,Ht(xe,Me));if(ke===!1)return!1;var Ee={dragging:!1,slackX:0,slackY:0},O=!!xe.props.position;if(O){var D=xe.props.position,ee=D.x,ce=D.y;Ee.x=ee,Ee.y=ce}xe.setState(Ee)},xe.state={dragging:!1,dragged:!1,x:Re.position?Re.position.x:Re.defaultPosition.x,y:Re.position?Re.position.y:Re.defaultPosition.y,slackX:0,slackY:0,isElementSVG:!1},Re.position&&!(Re.onDrag||Re.onStop)&&console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element."),xe}return Q(oe,[{key:"componentDidMount",value:function(){typeof window.SVGElement<"u"&&I.findDOMNode(this)instanceof window.SVGElement&&this.setState({isElementSVG:!0})}},{key:"componentWillReceiveProps",value:function(xe){xe.position&&(!this.props.position||xe.position.x!==this.props.position.x||xe.position.y!==this.props.position.y)&&this.setState({x:xe.position.x,y:xe.position.y})}},{key:"componentWillUnmount",value:function(){this.setState({dragging:!1})}},{key:"render",value:function(){var xe,Fe={},Me=null,ke=!!this.props.position,Ee=!ke||this.state.dragging,O=this.props.position||this.props.defaultPosition,D={x:je(this)&&Ee?this.state.x:O.x,y:at(this)&&Ee?this.state.y:O.y};this.state.isElementSVG?Me=Xe(D,this.props.positionOffset):Fe=tt(D,this.props.positionOffset);var ee=this.props,ce=ee.defaultClassName,de=ee.defaultClassNameDragging,Le=ee.defaultClassNameDragged,Ue=i.Children.only(this.props.children),dt=V(Ue.props.className||"",ce,(xe={},ie(xe,de,this.state.dragging),ie(xe,Le,this.state.dragged),xe));return i.createElement(ue,he({},this.props,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),i.cloneElement(Ue,{className:dt,style:he({},Ue.props.style,Fe),transform:Me}))}}]),oe}(i.Component);return le.displayName="Draggable",le.propTypes=he({},ue.propTypes,{axis:W.oneOf(["both","x","y","none"]),bounds:W.oneOfType([W.shape({left:W.number,right:W.number,top:W.number,bottom:W.number}),W.string,W.oneOf([!1])]),defaultClassName:W.string,defaultClassNameDragging:W.string,defaultClassNameDragged:W.string,defaultPosition:W.shape({x:W.number,y:W.number}),positionOffset:W.shape({x:W.oneOfType([W.number,W.string]),y:W.oneOfType([W.number,W.string])}),position:W.shape({x:W.number,y:W.number}),className:J,style:J,transform:J}),le.defaultProps=he({},ue.defaultProps,{axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},position:null,scale:1}),le.default=le,le.DraggableCore=ue,le})})(KZe);var YCt=KZe.exports,dN={exports:{}},JS={},hN={exports:{}},FZe={};function DZe(e){var g,I,i="";if(typeof e=="string"||typeof e=="number")i+=e;else if(typeof e=="object")if(Array.isArray(e))for(g=0;g0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u")return"";const I=(e=window.document)===null||e===void 0||(e=e.documentElement)===null||e===void 0?void 0:e.style;if(!I||g in I)return"";for(let i=0;ig===I.identifier)||e.changedTouches&&(0,dr.findInArray)(e.changedTouches,I=>g===I.identifier)}function irt(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier}function nrt(e){if(!e)return;let g=e.getElementById("react-draggable-style-el");g||(g=e.createElement("style"),g.type="text/css",g.id="react-draggable-style-el",g.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;} +`,Ce.getElementsByTagName("head")[0].appendChild(oe)),Ce.body&&ie(Ce.body,"react-draggable-transparent-selection")}}function T(Ce){try{Ce&&Ce.body&&me(Ce.body,"react-draggable-transparent-selection"),Ce.selection?Ce.selection.empty():window.getSelection().removeAllRanges()}catch{}}function Y(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return he({touchAction:"none"},Ce)}function ie(Ce,oe){Ce.classList?Ce.classList.add(oe):Ce.className.match(new RegExp("(?:^|\\s)"+oe+"(?!\\S)"))||(Ce.className+=" "+oe)}function me(Ce,oe){Ce.classList?Ce.classList.remove(oe):Ce.className=Ce.className.replace(new RegExp("(?:^|\\s)"+oe+"(?!\\S)","g"),"")}function Ve(Ce,oe,Re){if(!Ce.props.bounds)return[oe,Re];var xe=Ce.props.bounds;xe=typeof xe=="string"?xe:re(xe);var Fe=E(Ce);if(typeof xe=="string"){var Me=Fe.ownerDocument,ke=Me.defaultView,Ee=void 0;if(xe==="parent"?Ee=Fe.parentNode:Ee=Me.querySelector(xe),!(Ee instanceof ke.HTMLElement))throw new Error('Bounds selector "'+xe+'" could not find an element.');var O=ke.getComputedStyle(Fe),x=ke.getComputedStyle(Ee);xe={left:-Fe.offsetLeft+D(x.paddingLeft)+D(O.marginLeft),top:-Fe.offsetTop+D(x.paddingTop)+D(O.marginTop),right:gt(Ee)-Qe(Fe)-Fe.offsetLeft+D(x.paddingRight)-D(O.marginRight),bottom:_e(Ee)-De(Fe)-Fe.offsetTop+D(x.paddingBottom)-D(O.marginBottom)}}return K(xe.right)&&(oe=Math.min(oe,xe.right)),K(xe.bottom)&&(Re=Math.min(Re,xe.bottom)),K(xe.left)&&(oe=Math.max(oe,xe.left)),K(xe.top)&&(Re=Math.max(Re,xe.top)),[oe,Re]}function we(Ce,oe,Re){var xe=Math.round(oe/Ce[0])*Ce[0],Fe=Math.round(Re/Ce[1])*Ce[1];return[xe,Fe]}function je(Ce){return Ce.props.axis==="both"||Ce.props.axis==="x"}function at(Ce){return Ce.props.axis==="both"||Ce.props.axis==="y"}function bt(Ce,oe,Re){var xe=typeof oe=="number"?ye(Ce,oe):null;if(typeof oe=="number"&&!xe)return null;var Fe=E(Re),Me=Re.props.offsetParent||Fe.offsetParent||Fe.ownerDocument.body;return lt(xe||Ce,Me)}function ct(Ce,oe,Re){var xe=Ce.state,Fe=!K(xe.lastX),Me=E(Ce);return Fe?{node:Me,deltaX:0,deltaY:0,lastX:oe,lastY:Re,x:oe,y:Re}:{node:Me,deltaX:oe-xe.lastX,deltaY:Re-xe.lastY,lastX:xe.lastX,lastY:xe.lastY,x:oe,y:Re}}function Ht(Ce,oe){var Re=Ce.props.scale;return{node:oe.node,x:Ce.state.x+oe.deltaX/Re,y:Ce.state.y+oe.deltaY/Re,deltaX:oe.deltaX/Re,deltaY:oe.deltaY/Re,lastX:Ce.state.x,lastY:Ce.state.y}}function re(Ce){return{left:Ce.left,top:Ce.top,right:Ce.right,bottom:Ce.bottom}}function E(Ce){var oe=i.findDOMNode(Ce);if(!oe)throw new Error(": Unmounted during event!");return oe}function _(){}var fe={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}},Ke=fe.mouse,ue=function(Ce){ne(oe,Ce);function oe(){var Re,xe,Fe,Me;ge(this,oe);for(var ke=arguments.length,Ee=Array(ke),O=0;O not mounted on DragStart!");var ce=ee.ownerDocument;if(!(Fe.props.disabled||!(x.target instanceof ce.defaultView.Node)||Fe.props.handle&&!Be(x.target,Fe.props.handle,ee)||Fe.props.cancel&&Be(x.target,Fe.props.cancel,ee))){var de=He(x);Fe.setState({touchIdentifier:de});var Le=bt(x,de,Fe);if(Le!=null){var Ue=Le.x,dt=Le.y,yt=ct(Fe,Ue,dt);Fe.props.onStart;var kt=Fe.props.onStart(x,yt);kt!==!1&&(Fe.props.enableUserSelectHack&&F(ce),Fe.setState({dragging:!0,lastX:Ue,lastY:dt}),Je(ce,Ke.move,Fe.handleDrag),Je(ce,Ke.stop,Fe.handleDragStop))}}},Fe.handleDrag=function(x){x.type==="touchmove"&&x.preventDefault();var ee=bt(x,Fe.state.touchIdentifier,Fe);if(ee!=null){var ce=ee.x,de=ee.y;if(Array.isArray(Fe.props.grid)){var Le=ce-Fe.state.lastX,Ue=de-Fe.state.lastY,dt=we(Fe.props.grid,Le,Ue),yt=pe(dt,2);if(Le=yt[0],Ue=yt[1],!Le&&!Ue)return;ce=Fe.state.lastX+Le,de=Fe.state.lastY+Ue}var kt=ct(Fe,ce,de),ht=Fe.props.onDrag(x,kt);if(ht===!1){try{Fe.handleDragStop(new MouseEvent("mouseup"))}catch{var Rt=document.createEvent("MouseEvents");Rt.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),Fe.handleDragStop(Rt)}return}Fe.setState({lastX:ce,lastY:de})}},Fe.handleDragStop=function(x){if(Fe.state.dragging){var ee=bt(x,Fe.state.touchIdentifier,Fe);if(ee!=null){var ce=ee.x,de=ee.y,Le=ct(Fe,ce,de),Ue=i.findDOMNode(Fe);Ue&&Fe.props.enableUserSelectHack&&T(Ue.ownerDocument),Fe.setState({dragging:!1,lastX:NaN,lastY:NaN}),Fe.props.onStop(x,Le),Ue&&(Pe(Ue.ownerDocument,Ke.move,Fe.handleDrag),Pe(Ue.ownerDocument,Ke.stop,Fe.handleDragStop))}}},Fe.onMouseDown=function(x){return Ke=fe.mouse,Fe.handleDragStart(x)},Fe.onMouseUp=function(x){return Ke=fe.mouse,Fe.handleDragStop(x)},Fe.onTouchStart=function(x){return Ke=fe.touch,Fe.handleDragStart(x)},Fe.onTouchEnd=function(x){return Ke=fe.touch,Fe.handleDragStop(x)},xe),be(Fe,Me)}return Q(oe,[{key:"componentWillUnmount",value:function(){var xe=i.findDOMNode(this);if(xe){var Fe=xe.ownerDocument;Pe(Fe,fe.mouse.move,this.handleDrag),Pe(Fe,fe.touch.move,this.handleDrag),Pe(Fe,fe.mouse.stop,this.handleDragStop),Pe(Fe,fe.touch.stop,this.handleDragStop),this.props.enableUserSelectHack&&T(Fe)}}},{key:"render",value:function(){return I.cloneElement(I.Children.only(this.props.children),{style:Y(this.props.children.props.style),onMouseDown:this.onMouseDown,onTouchStart:this.onTouchStart,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}]),oe}(I.Component);ue.displayName="DraggableCore",ue.propTypes={allowAnyClick:W.bool,disabled:W.bool,enableUserSelectHack:W.bool,offsetParent:function(oe,Re){if(oe[Re]&&oe[Re].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:W.arrayOf(W.number),scale:W.number,handle:W.string,cancel:W.string,onStart:W.func,onDrag:W.func,onStop:W.func,onMouseDown:W.func,className:J,style:J,transform:J},ue.defaultProps={allowAnyClick:!1,cancel:null,disabled:!1,enableUserSelectHack:!0,offsetParent:null,handle:null,grid:null,transform:null,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){}};var le=function(Ce){ne(oe,Ce);function oe(Re){ge(this,oe);var xe=be(this,(oe.__proto__||Object.getPrototypeOf(oe)).call(this,Re));return xe.onDragStart=function(Fe,Me){var ke=xe.props.onStart(Fe,Ht(xe,Me));if(ke===!1)return!1;xe.setState({dragging:!0,dragged:!0})},xe.onDrag=function(Fe,Me){if(!xe.state.dragging)return!1;var ke=Ht(xe,Me),Ee={x:ke.x,y:ke.y};if(xe.props.bounds){var O=Ee.x,x=Ee.y;Ee.x+=xe.state.slackX,Ee.y+=xe.state.slackY;var ee=Ve(xe,Ee.x,Ee.y),ce=pe(ee,2),de=ce[0],Le=ce[1];Ee.x=de,Ee.y=Le,Ee.slackX=xe.state.slackX+(O-Ee.x),Ee.slackY=xe.state.slackY+(x-Ee.y),ke.x=Ee.x,ke.y=Ee.y,ke.deltaX=Ee.x-xe.state.x,ke.deltaY=Ee.y-xe.state.y}var Ue=xe.props.onDrag(Fe,ke);if(Ue===!1)return!1;xe.setState(Ee)},xe.onDragStop=function(Fe,Me){if(!xe.state.dragging)return!1;var ke=xe.props.onStop(Fe,Ht(xe,Me));if(ke===!1)return!1;var Ee={dragging:!1,slackX:0,slackY:0},O=!!xe.props.position;if(O){var x=xe.props.position,ee=x.x,ce=x.y;Ee.x=ee,Ee.y=ce}xe.setState(Ee)},xe.state={dragging:!1,dragged:!1,x:Re.position?Re.position.x:Re.defaultPosition.x,y:Re.position?Re.position.y:Re.defaultPosition.y,slackX:0,slackY:0,isElementSVG:!1},Re.position&&!(Re.onDrag||Re.onStop)&&console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element."),xe}return Q(oe,[{key:"componentDidMount",value:function(){typeof window.SVGElement<"u"&&i.findDOMNode(this)instanceof window.SVGElement&&this.setState({isElementSVG:!0})}},{key:"componentWillReceiveProps",value:function(xe){xe.position&&(!this.props.position||xe.position.x!==this.props.position.x||xe.position.y!==this.props.position.y)&&this.setState({x:xe.position.x,y:xe.position.y})}},{key:"componentWillUnmount",value:function(){this.setState({dragging:!1})}},{key:"render",value:function(){var xe,Fe={},Me=null,ke=!!this.props.position,Ee=!ke||this.state.dragging,O=this.props.position||this.props.defaultPosition,x={x:je(this)&&Ee?this.state.x:O.x,y:at(this)&&Ee?this.state.y:O.y};this.state.isElementSVG?Me=Xe(x,this.props.positionOffset):Fe=tt(x,this.props.positionOffset);var ee=this.props,ce=ee.defaultClassName,de=ee.defaultClassNameDragging,Le=ee.defaultClassNameDragged,Ue=I.Children.only(this.props.children),dt=R(Ue.props.className||"",ce,(xe={},Ie(xe,de,this.state.dragging),Ie(xe,Le,this.state.dragged),xe));return I.createElement(ue,he({},this.props,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),I.cloneElement(Ue,{className:dt,style:he({},Ue.props.style,Fe),transform:Me}))}}]),oe}(I.Component);return le.displayName="Draggable",le.propTypes=he({},ue.propTypes,{axis:W.oneOf(["both","x","y","none"]),bounds:W.oneOfType([W.shape({left:W.number,right:W.number,top:W.number,bottom:W.number}),W.string,W.oneOf([!1])]),defaultClassName:W.string,defaultClassNameDragging:W.string,defaultClassNameDragged:W.string,defaultPosition:W.shape({x:W.number,y:W.number}),positionOffset:W.shape({x:W.oneOfType([W.number,W.string]),y:W.oneOfType([W.number,W.string])}),position:W.shape({x:W.number,y:W.number}),className:J,style:J,transform:J}),le.defaultProps=he({},ue.defaultProps,{axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},position:null,scale:1}),le.default=le,le.DraggableCore=ue,le})})(PZe);var Prt=PZe.exports,yN={exports:{}},_S={},ZN={exports:{}},JZe={};function OZe(e){var g,i,I="";if(typeof e=="string"||typeof e=="number")I+=e;else if(typeof e=="object")if(Array.isArray(e))for(g=0;g0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u")return"";const i=(e=window.document)===null||e===void 0||(e=e.documentElement)===null||e===void 0?void 0:e.style;if(!i||g in i)return"";for(let I=0;Ig===i.identifier)||e.changedTouches&&(0,fC.findInArray)(e.changedTouches,i=>g===i.identifier)}function lCt(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier}function cCt(e){if(!e)return;let g=e.getElementById("react-draggable-style-el");g||(g=e.createElement("style"),g.type="text/css",g.id="react-draggable-style-el",g.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;} `,g.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;} -`,e.getElementsByTagName("head")[0].appendChild(g)),e.body&&PZe(e.body,"react-draggable-transparent-selection")}function Crt(e){if(e)try{if(e.body&&JZe(e.body,"react-draggable-transparent-selection"),e.selection)e.selection.empty();else{const g=(e.defaultView||window).getSelection();g&&g.type!=="Caret"&&g.removeAllRanges()}}catch{}}function PZe(e,g){e.classList?e.classList.add(g):e.className.match(new RegExp("(?:^|\\s)".concat(g,"(?!\\S)")))||(e.className+=" ".concat(g))}function JZe(e,g){e.classList?e.classList.remove(g):e.className=e.className.replace(new RegExp("(?:^|\\s)".concat(g,"(?!\\S)"),"g"),"")}var HA={};Object.defineProperty(HA,"__esModule",{value:!0});HA.canDragX=art;HA.canDragY=Art;HA.createCoreData=lrt;HA.createDraggableData=crt;HA.getBoundPosition=rrt;HA.getControlPosition=srt;HA.snapToGrid=ort;var QC=XA,Ip=ti;function rrt(e,g,I){if(!e.props.bounds)return[g,I];let{bounds:i}=e.props;i=typeof i=="string"?i:urt(i);const n=hQ(e);if(typeof i=="string"){const{ownerDocument:C}=n,r=C.defaultView;let o;if(i==="parent"?o=n.parentNode:o=C.querySelector(i),!(o instanceof r.HTMLElement))throw new Error('Bounds selector "'+i+'" could not find an element.');const a=o,s=r.getComputedStyle(n),A=r.getComputedStyle(a);i={left:-n.offsetLeft+(0,QC.int)(A.paddingLeft)+(0,QC.int)(s.marginLeft),top:-n.offsetTop+(0,QC.int)(A.paddingTop)+(0,QC.int)(s.marginTop),right:(0,Ip.innerWidth)(a)-(0,Ip.outerWidth)(n)-n.offsetLeft+(0,QC.int)(A.paddingRight)-(0,QC.int)(s.marginRight),bottom:(0,Ip.innerHeight)(a)-(0,Ip.outerHeight)(n)-n.offsetTop+(0,QC.int)(A.paddingBottom)-(0,QC.int)(s.marginBottom)}}return(0,QC.isNum)(i.right)&&(g=Math.min(g,i.right)),(0,QC.isNum)(i.bottom)&&(I=Math.min(I,i.bottom)),(0,QC.isNum)(i.left)&&(g=Math.max(g,i.left)),(0,QC.isNum)(i.top)&&(I=Math.max(I,i.top)),[g,I]}function ort(e,g,I){const i=Math.round(g/e[0])*e[0],n=Math.round(I/e[1])*e[1];return[i,n]}function art(e){return e.props.axis==="both"||e.props.axis==="x"}function Art(e){return e.props.axis==="both"||e.props.axis==="y"}function srt(e,g,I){const i=typeof g=="number"?(0,Ip.getTouch)(e,g):null;if(typeof g=="number"&&!i)return null;const n=hQ(I),C=I.props.offsetParent||n.offsetParent||n.ownerDocument.body;return(0,Ip.offsetXYFromParent)(i||e,C,I.props.scale)}function lrt(e,g,I){const i=!(0,QC.isNum)(e.lastX),n=hQ(e);return i?{node:n,deltaX:0,deltaY:0,lastX:g,lastY:I,x:g,y:I}:{node:n,deltaX:g-e.lastX,deltaY:I-e.lastY,lastX:e.lastX,lastY:e.lastY,x:g,y:I}}function crt(e,g){const I=e.props.scale;return{node:g.node,x:e.state.x+g.deltaX/I,y:e.state.y+g.deltaY/I,deltaX:g.deltaX/I,deltaY:g.deltaY/I,lastX:e.state.x,lastY:e.state.y}}function urt(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function hQ(e){const g=e.findDOMNode();if(!g)throw new Error(": Unmounted during event!");return g}var mN={},fN={};Object.defineProperty(fN,"__esModule",{value:!0});fN.default=drt;function drt(){}function hrt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function bIe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sX(e){return sX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},sX(e)}Object.defineProperty(mN,"__esModule",{value:!0});mN.default=void 0;var gF=Brt(N),pC=mQ(el),vrt=mQ(jI),Vn=ti,yl=HA,IF=XA,$y=mQ(fN);function mQ(e){return e&&e.__esModule?e:{default:e}}function OZe(e){if(typeof WeakMap!="function")return null;var g=new WeakMap,I=new WeakMap;return(OZe=function(i){return i?I:g})(e)}function Brt(e,g){if(!g&&e&&e.__esModule)return e;if(e===null||typeof e!="object"&&typeof e!="function")return{default:e};var I=OZe(g);if(I&&I.has(e))return I.get(e);var i={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var C in e)if(C!=="default"&&Object.prototype.hasOwnProperty.call(e,C)){var r=n?Object.getOwnPropertyDescriptor(e,C):null;r&&(r.get||r.set)?Object.defineProperty(i,C,r):i[C]=e[C]}return i.default=e,I&&I.set(e,i),i}function _n(e,g,I){return g=Srt(g),g in e?Object.defineProperty(e,g,{value:I,enumerable:!0,configurable:!0,writable:!0}):e[g]=I,e}function Srt(e){var g=wrt(e,"string");return typeof g=="symbol"?g:String(g)}function wrt(e,g){if(typeof e!="object"||e===null)return e;var I=e[Symbol.toPrimitive];if(I!==void 0){var i=I.call(e,g||"default");if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(g==="string"?String:Number)(e)}const Yo={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}};let Zl=Yo.mouse,pN=function(e){brt(I,e);var g=yrt(I);function I(){var i;return hrt(this,I),i=g.apply(this,arguments),_n(Bi(i),"dragging",!1),_n(Bi(i),"lastX",NaN),_n(Bi(i),"lastY",NaN),_n(Bi(i),"touchIdentifier",null),_n(Bi(i),"mounted",!1),_n(Bi(i),"handleDragStart",n=>{if(i.props.onMouseDown(n),!i.props.allowAnyClick&&typeof n.button=="number"&&n.button!==0)return!1;const C=i.findDOMNode();if(!C||!C.ownerDocument||!C.ownerDocument.body)throw new Error(" not mounted on DragStart!");const{ownerDocument:r}=C;if(i.props.disabled||!(n.target instanceof r.defaultView.Node)||i.props.handle&&!(0,Vn.matchesSelectorAndParentsTo)(n.target,i.props.handle,C)||i.props.cancel&&(0,Vn.matchesSelectorAndParentsTo)(n.target,i.props.cancel,C))return;n.type==="touchstart"&&n.preventDefault();const o=(0,Vn.getTouchIdentifier)(n);i.touchIdentifier=o;const a=(0,yl.getControlPosition)(n,o,Bi(i));if(a==null)return;const{x:s,y:A}=a,l=(0,yl.createCoreData)(Bi(i),s,A);(0,$y.default)("DraggableCore: handleDragStart: %j",l),(0,$y.default)("calling",i.props.onStart),!(i.props.onStart(n,l)===!1||i.mounted===!1)&&(i.props.enableUserSelectHack&&(0,Vn.addUserSelectStyles)(r),i.dragging=!0,i.lastX=s,i.lastY=A,(0,Vn.addEvent)(r,Zl.move,i.handleDrag),(0,Vn.addEvent)(r,Zl.stop,i.handleDragStop))}),_n(Bi(i),"handleDrag",n=>{const C=(0,yl.getControlPosition)(n,i.touchIdentifier,Bi(i));if(C==null)return;let{x:r,y:o}=C;if(Array.isArray(i.props.grid)){let A=r-i.lastX,l=o-i.lastY;if([A,l]=(0,yl.snapToGrid)(i.props.grid,A,l),!A&&!l)return;r=i.lastX+A,o=i.lastY+l}const a=(0,yl.createCoreData)(Bi(i),r,o);if((0,$y.default)("DraggableCore: handleDrag: %j",a),i.props.onDrag(n,a)===!1||i.mounted===!1){try{i.handleDragStop(new MouseEvent("mouseup"))}catch{const l=document.createEvent("MouseEvents");l.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),i.handleDragStop(l)}return}i.lastX=r,i.lastY=o}),_n(Bi(i),"handleDragStop",n=>{if(!i.dragging)return;const C=(0,yl.getControlPosition)(n,i.touchIdentifier,Bi(i));if(C==null)return;let{x:r,y:o}=C;if(Array.isArray(i.props.grid)){let l=r-i.lastX||0,c=o-i.lastY||0;[l,c]=(0,yl.snapToGrid)(i.props.grid,l,c),r=i.lastX+l,o=i.lastY+c}const a=(0,yl.createCoreData)(Bi(i),r,o);if(i.props.onStop(n,a)===!1||i.mounted===!1)return!1;const A=i.findDOMNode();A&&i.props.enableUserSelectHack&&(0,Vn.removeUserSelectStyles)(A.ownerDocument),(0,$y.default)("DraggableCore: handleDragStop: %j",a),i.dragging=!1,i.lastX=NaN,i.lastY=NaN,A&&((0,$y.default)("DraggableCore: Removing handlers"),(0,Vn.removeEvent)(A.ownerDocument,Zl.move,i.handleDrag),(0,Vn.removeEvent)(A.ownerDocument,Zl.stop,i.handleDragStop))}),_n(Bi(i),"onMouseDown",n=>(Zl=Yo.mouse,i.handleDragStart(n))),_n(Bi(i),"onMouseUp",n=>(Zl=Yo.mouse,i.handleDragStop(n))),_n(Bi(i),"onTouchStart",n=>(Zl=Yo.touch,i.handleDragStart(n))),_n(Bi(i),"onTouchEnd",n=>(Zl=Yo.touch,i.handleDragStop(n))),i}return mrt(I,[{key:"componentDidMount",value:function(){this.mounted=!0;const n=this.findDOMNode();n&&(0,Vn.addEvent)(n,Yo.touch.start,this.onTouchStart,{passive:!1})}},{key:"componentWillUnmount",value:function(){this.mounted=!1;const n=this.findDOMNode();if(n){const{ownerDocument:C}=n;(0,Vn.removeEvent)(C,Yo.mouse.move,this.handleDrag),(0,Vn.removeEvent)(C,Yo.touch.move,this.handleDrag),(0,Vn.removeEvent)(C,Yo.mouse.stop,this.handleDragStop),(0,Vn.removeEvent)(C,Yo.touch.stop,this.handleDragStop),(0,Vn.removeEvent)(n,Yo.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&(0,Vn.removeUserSelectStyles)(C)}}},{key:"findDOMNode",value:function(){var n,C;return(n=this.props)!==null&&n!==void 0&&n.nodeRef?(C=this.props)===null||C===void 0||(C=C.nodeRef)===null||C===void 0?void 0:C.current:vrt.default.findDOMNode(this)}},{key:"render",value:function(){return gF.cloneElement(gF.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}]),I}(gF.Component);mN.default=pN;_n(pN,"displayName","DraggableCore");_n(pN,"propTypes",{allowAnyClick:pC.default.bool,children:pC.default.node.isRequired,disabled:pC.default.bool,enableUserSelectHack:pC.default.bool,offsetParent:function(e,g){if(e[g]&&e[g].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:pC.default.arrayOf(pC.default.number),handle:pC.default.string,cancel:pC.default.string,nodeRef:pC.default.object,onStart:pC.default.func,onDrag:pC.default.func,onStop:pC.default.func,onMouseDown:pC.default.func,scale:pC.default.number,className:IF.dontSetMe,style:IF.dontSetMe,transform:IF.dontSetMe});_n(pN,"defaultProps",{allowAnyClick:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1});(function(e){function g(V,H){if(!(V instanceof H))throw new TypeError("Cannot call a class as a function")}function I(V,H){for(var Y=0;Y"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function c(V){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(Y){return Y.__proto__||Object.getPrototypeOf(Y)},c(V)}Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"DraggableCore",{enumerable:!0,get:function(){return y.default}}),e.default=void 0;var u=v(N),d=B(el),h=B(jI),m=B(FCt),f=ti,b=HA,p=XA,y=B(mN),Z=B(fN);function B(V){return V&&V.__esModule?V:{default:V}}function G(V){if(typeof WeakMap!="function")return null;var H=new WeakMap,Y=new WeakMap;return(G=function(K){return K?Y:H})(V)}function v(V,H){if(!H&&V&&V.__esModule)return V;if(V===null||typeof V!="object"&&typeof V!="function")return{default:V};var Y=G(H);if(Y&&Y.has(V))return Y.get(V);var K={},x=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var J in V)if(J!=="default"&&Object.prototype.hasOwnProperty.call(V,J)){var P=x?Object.getOwnPropertyDescriptor(V,J):null;P&&(P.get||P.set)?Object.defineProperty(K,J,P):K[J]=V[J]}return K.default=V,Y&&Y.set(V,K),K}function w(){return w=Object.assign?Object.assign.bind():function(V){for(var H=1;H{if((0,Z.default)("Draggable: onDragStart: %j",P),x.props.onStart(J,(0,b.createDraggableData)(A(x),P))===!1)return!1;x.setState({dragging:!0,dragged:!0})}),R(A(x),"onDrag",(J,P)=>{if(!x.state.dragging)return!1;(0,Z.default)("Draggable: onDrag: %j",P);const ge=(0,b.createDraggableData)(A(x),P),q={x:ge.x,y:ge.y,slackX:0,slackY:0};if(x.props.bounds){const{x:j,y:te}=q;q.x+=x.state.slackX,q.y+=x.state.slackY;const[Q,ie]=(0,b.getBoundPosition)(A(x),q.x,q.y);q.x=Q,q.y=ie,q.slackX=x.state.slackX+(j-q.x),q.slackY=x.state.slackY+(te-q.y),ge.x=q.x,ge.y=q.y,ge.deltaX=q.x-x.state.x,ge.deltaY=q.y-x.state.y}if(x.props.onDrag(J,ge)===!1)return!1;x.setState(q)}),R(A(x),"onDragStop",(J,P)=>{if(!x.state.dragging||x.props.onStop(J,(0,b.createDraggableData)(A(x),P))===!1)return!1;(0,Z.default)("Draggable: onDragStop: %j",P);const q={dragging:!1,slackX:0,slackY:0};if(!!x.props.position){const{x:j,y:te}=x.props.position;q.x=j,q.y=te}x.setState(q)}),x.state={dragging:!1,dragged:!1,x:K.position?K.position.x:K.defaultPosition.x,y:K.position?K.position.y:K.defaultPosition.y,prevPropsPosition:{...K.position},slackX:0,slackY:0,isElementSVG:!1},K.position&&!(K.onDrag||K.onStop)&&console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element."),x}return i(Y,[{key:"componentDidMount",value:function(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}},{key:"componentWillUnmount",value:function(){this.setState({dragging:!1})}},{key:"findDOMNode",value:function(){var x,J;return(x=(J=this.props)===null||J===void 0||(J=J.nodeRef)===null||J===void 0?void 0:J.current)!==null&&x!==void 0?x:h.default.findDOMNode(this)}},{key:"render",value:function(){const{axis:x,bounds:J,children:P,defaultPosition:ge,defaultClassName:q,defaultClassNameDragging:$,defaultClassNameDragged:j,position:te,positionOffset:Q,scale:ie,...he}=this.props;let ne={},be=null;const ve=!!!te||this.state.dragging,We=te||ge,Be={x:(0,b.canDragX)(this)&&ve?this.state.x:We.x,y:(0,b.canDragY)(this)&&ve?this.state.y:We.y};this.state.isElementSVG?be=(0,f.createSVGTransform)(Be,Q):ne=(0,f.createCSSTransform)(Be,Q);const Je=(0,m.default)(P.props.className||"",q,{[$]:this.state.dragging,[j]:this.state.dragged});return u.createElement(y.default,w({},he,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),u.cloneElement(u.Children.only(P),{className:Je,style:{...P.props.style,...ne},transform:be}))}}],[{key:"getDerivedStateFromProps",value:function(x,J){let{position:P}=x,{prevPropsPosition:ge}=J;return P&&(!ge||P.x!==ge.x||P.y!==ge.y)?((0,Z.default)("Draggable: getDerivedStateFromProps %j",{position:P,prevPropsPosition:ge}),{x:P.x,y:P.y,prevPropsPosition:{...P}}):null}}]),Y}(u.Component);e.default=W,R(W,"displayName","Draggable"),R(W,"propTypes",{...y.default.propTypes,axis:d.default.oneOf(["both","x","y","none"]),bounds:d.default.oneOfType([d.default.shape({left:d.default.number,right:d.default.number,top:d.default.number,bottom:d.default.number}),d.default.string,d.default.oneOf([!1])]),defaultClassName:d.default.string,defaultClassNameDragging:d.default.string,defaultClassNameDragged:d.default.string,defaultPosition:d.default.shape({x:d.default.number,y:d.default.number}),positionOffset:d.default.shape({x:d.default.oneOfType([d.default.number,d.default.string]),y:d.default.oneOfType([d.default.number,d.default.string])}),position:d.default.shape({x:d.default.number,y:d.default.number}),className:p.dontSetMe,style:p.dontSetMe,transform:p.dontSetMe}),R(W,"defaultProps",{...y.default.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})})(FZe);const{default:_Ze,DraggableCore:Rrt}=FZe;hN.exports=_Ze;hN.exports.default=_Ze;hN.exports.DraggableCore=Rrt;var Vrt=hN.exports,fQ={};fQ.__esModule=!0;fQ.cloneElement=Trt;var Wrt=Xrt(N);function Xrt(e){return e&&e.__esModule?e:{default:e}}function yIe(e,g){var I=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);g&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),I.push.apply(I,i)}return I}function ZIe(e){for(var g=1;g=0)&&(I[n]=e[n]);return I}function nF(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ert(e,g){e.prototype=Object.create(g.prototype),e.prototype.constructor=e,e.__proto__=g}function Xp(e,g,I){return g in e?Object.defineProperty(e,g,{value:I,enumerable:!0,configurable:!0,writable:!0}):e[g]=I,e}var pQ=function(e){Ert(g,e);function g(){for(var i,n=arguments.length,C=new Array(n),r=0;r=0)&&(I[n]=e[n]);return I}function SIe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _rt(e,g){e.prototype=Object.create(g.prototype),e.prototype.constructor=e,e.__proto__=g}function cX(e,g,I){return g in e?Object.defineProperty(e,g,{value:I,enumerable:!0,configurable:!0,writable:!0}):e[g]=I,e}var QZe=function(e){_rt(g,e);function g(){for(var i,n=arguments.length,C=new Array(n),r=0;rg.w||i>g.maxW)return new Error("minWidth larger than item width/maxWidth")},maxW:function(g,I){var i=g[I];if(typeof i!="number")return new Error("maxWidth not Number");if(ig.h||i>g.maxH)return new Error("minHeight larger than item height/maxHeight")},maxH:function(g,I){var i=g[I];if(typeof i!="number")return new Error("maxHeight not Number");if(i0,m){var b=1/0,p=1/0;f.forEach(function(Z){Z.x>h.x&&(b=Math.min(b,Z.x)),Z.y>h.y&&(p=Math.min(p,Z.y))}),Number.isFinite(b)&&(h.w=b-h.x),Number.isFinite(p)&&(h.h=p-h.y)}}m||(h.w=n,h.h=C);var y={w:h.w,h:h.h,x:h.x,y:h.y,static:!0,i};this.props.onResize(A,l,h,y,o,a),this.setState({layout:(0,Mg.compact)(A,this.compactType(),u),activeDrag:y})}},g.prototype.onResizeStop=function(i,n,C,r){var o=r.e,a=r.node,s=this.state,A=s.layout,l=s.oldResizeItem,c=this.props.cols,u=(0,Mg.getLayoutItem)(A,i);this.props.onResizeStop(A,l,u,null,o,a);var d=(0,Mg.compact)(A,this.compactType(),c),h=this.state.oldLayout;this.setState({activeDrag:null,layout:d,oldResizeItem:null,oldLayout:null}),this.onLayoutMaybeChanged(d,h)},g.prototype.placeholder=function(){var i=this.state.activeDrag;if(!i)return null;var n=this.props,C=n.width,r=n.cols,o=n.margin,a=n.containerPadding,s=n.rowHeight,A=n.maxRows,l=n.useCSSTransforms;return Qu.default.createElement(WIe.default,{w:i.w,h:i.h,x:i.x,y:i.y,i:i.i,className:"react-grid-placeholder",containerWidth:C,cols:r,margin:o,containerPadding:a||o,maxRows:A,rowHeight:s,isDraggable:!1,isResizable:!1,useCSSTransforms:l},Qu.default.createElement("div",null))},g.prototype.processGridItem=function(i){if(!(!i||!i.key)){var n=(0,Mg.getLayoutItem)(this.state.layout,String(i.key));if(!n)return null;var C=this.props,r=C.width,o=C.cols,a=C.margin,s=C.containerPadding,A=C.rowHeight,l=C.maxRows,c=C.isDraggable,u=C.isResizable,d=C.useCSSTransforms,h=C.draggableCancel,m=C.draggableHandle,f=this.state.mounted,b=!!(!n.static&&c&&(n.isDraggable||n.isDraggable==null)),p=!!(!n.static&&u&&(n.isResizable||n.isResizable==null));return Qu.default.createElement(WIe.default,{containerWidth:r,cols:o,margin:a,containerPadding:s||a,maxRows:l,rowHeight:A,cancel:h,handle:m,onDragStop:this.onDragStop,onDragStart:this.onDragStart,onDrag:this.onDrag,onResizeStart:this.onResizeStart,onResize:this.onResize,onResizeStop:this.onResizeStop,isDraggable:b,isResizable:p,useCSSTransforms:d&&f,usePercentages:!f,w:n.w,h:n.h,x:n.x,y:n.y,i:n.i,minH:n.minH,minW:n.minW,maxH:n.maxH,maxW:n.maxW,static:n.static},i)}},g.prototype.render=function(){var i=this,n=this.props,C=n.className,r=n.style,o=(0,oot.default)("react-grid-layout",C),a=RIe({height:this.containerHeight()},r);return Qu.default.createElement("div",{className:o,style:a},Qu.default.Children.map(this.props.children,function(s){return i.processGridItem(s)}),this.placeholder())},g}(Qu.default.Component);yN.displayName="ReactGridLayout";yN.propTypes={className:cI.default.string,style:cI.default.object,width:cI.default.number,autoSize:cI.default.bool,cols:cI.default.number,draggableCancel:cI.default.string,draggableHandle:cI.default.string,verticalCompact:function(g){g.verticalCompact},compactType:cI.default.oneOf(["vertical","horizontal"]),layout:function(g){var I=g.layout;I!==void 0&&(0,Mg.validateLayout)(I,"layout")},margin:cI.default.arrayOf(cI.default.number),containerPadding:cI.default.arrayOf(cI.default.number),rowHeight:cI.default.number,maxRows:cI.default.number,isDraggable:cI.default.bool,isResizable:cI.default.bool,preventCollision:cI.default.bool,useCSSTransforms:cI.default.bool,onLayoutChange:cI.default.func,onDragStart:cI.default.func,onDrag:cI.default.func,onDragStop:cI.default.func,onResizeStart:cI.default.func,onResize:cI.default.func,onResizeStop:cI.default.func,children:function(g,I){var i=g[I],n={};Qu.default.Children.forEach(i,function(C){if(n[C.key])throw new Error('Duplicate child key "'+C.key+'" found! This will cause problems in ReactGridLayout.');n[C.key]=!0})}};yN.defaultProps={autoSize:!0,cols:12,className:"",style:{},draggableHandle:"",draggableCancel:"",containerPadding:null,rowHeight:150,maxRows:1/0,layout:[],margin:[10,10],isDraggable:!0,isResizable:!0,useCSSTransforms:!0,verticalCompact:!0,compactType:"vertical",preventCollision:!1,onLayoutChange:Mg.noop,onDragStart:Mg.noop,onDrag:Mg.noop,onDragStop:Mg.noop,onResizeStart:Mg.noop,onResize:Mg.noop,onResizeStop:Mg.noop};var cot=function(){this.state={activeDrag:null,layout:(0,Mg.synchronizeLayoutWithChildren)(this.props.layout,this.props.children,this.props.cols,this.compactType()),mounted:!1,oldDragItem:null,oldLayout:null,oldResizeItem:null}};lN.default=yN;var ZQ={},nm={};nm.__esModule=!0;nm.getBreakpointFromWidth=uot;nm.getColsFromBreakpoint=dot;nm.findOrGenerateResponsiveLayout=hot;nm.sortBreakpoints=GQ;var sV=Dg;function uot(e,g){for(var I=GQ(e),i=I[0],n=1,C=I.length;ne[r]&&(i=r)}return i}function dot(e,g){if(!g[e])throw new Error("ResponsiveReactGridLayout: `cols` entry for breakpoint "+e+" is missing!");return g[e]}function hot(e,g,I,i,n,C){if(e[I])return(0,sV.cloneLayout)(e[I]);for(var r=e[i],o=GQ(g),a=o.slice(o.indexOf(I)),s=0,A=a.length;s=0||Object.prototype.hasOwnProperty.call(e,i)&&(I[i]=e[i]);return I}function Got(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function TIe(e,g){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g&&(typeof g=="object"||typeof g=="function")?g:e}function vot(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof g);e.prototype=Object.create(g&&g.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),g&&(Object.setPrototypeOf?Object.setPrototypeOf(e,g):e.__proto__=g)}var NIe=function(g){return Object.prototype.toString.call(g)},vQ=function(e){vot(g,e);function g(){var I,i,n;Got(this,g);for(var C=arguments.length,r=Array(C),o=0;o=0||Object.prototype.hasOwnProperty.call(e,i)&&(I[i]=e[i]);return I}function Hot(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function kIe(e,g){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g&&(typeof g=="object"||typeof g=="function")?g:e}function Tot(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof g);e.prototype=Object.create(g&&g.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),g&&(Object.setPrototypeOf?Object.setPrototypeOf(e,g):e.__proto__=g)}function Not(e){var g,I;return I=g=function(i){Tot(n,i);function n(){var C,r,o;Hot(this,n);for(var a=arguments.length,s=Array(a),A=0;A"u")return null;var I=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")(),i=I.requestAnimationFrame||I.mozRequestAnimationFrame||I.webkitRequestAnimationFrame||function(A){return I.setTimeout(A,20)},n=I.cancelAnimationFrame||I.mozCancelAnimationFrame||I.webkitCancelAnimationFrame||function(A){I.clearTimeout(A)};function C(A,l){var c=Object.prototype.toString.call(A),u=c==="[object Array]"||c==="[object NodeList]"||c==="[object HTMLCollection]"||c==="[object Object]"||typeof jQuery<"u"&&A instanceof jQuery||typeof Elements<"u"&&A instanceof Elements,d=0,h=A.length;if(u)for(;d=X&&(H+=R.value),R.mode==="max"&&W<=X&&(H+=R.value),V[Y]||(V[Y]=""),H&&(" "+V[Y]+" ").indexOf(" "+H+" ")===-1&&(V[Y]+=" "+H));for(var x in K)K.hasOwnProperty(x)&&(V[K[x]]?this.element.setAttribute(K[x],V[K[x]].substr(1)):this.element.removeAttribute(K[x]))}}function c(G,v){G.elementQueriesSetupInformation||(G.elementQueriesSetupInformation=new l(G,v)),G.elementQueriesSensor||(G.elementQueriesSensor=new I(G,function(){G.elementQueriesSetupInformation.call()}))}function u(G,v,w,R){if(typeof r[G]>"u"){r[G]=[];var S=o.length;C.innerHTML+=` -`+G+" {animation: 0.1s element-queries;}",C.innerHTML+=` -`+G+" > .resize-sensor {min-width: "+S+"px;}",o.push(G)}r[G].push({mode:v,property:w,value:R})}function d(G){var v;if(document.querySelectorAll&&(v=G?G.querySelectorAll.bind(G):document.querySelectorAll.bind(document)),!v&&typeof $$<"u"&&(v=$$),!v&&typeof jQuery<"u"&&(v=jQuery),!v)throw"No document.querySelectorAll, jQuery or Mootools's $$ found.";return v}function h(G){var v=d(G);for(var w in r)if(r.hasOwnProperty(w))for(var R=v(w,G),S=0,X=R.length;Sw[P].minWidth&&(J=P);if(J||(J=S),X!==J)if(W[J])v[X].style.display="none",v[J].style.display="block",X=J;else{var ge=new Image;ge.onload=function(){v[J].src=R[J],v[X].style.display="none",v[J].style.display="block",W[J]=!0,X=J},ge.src=R[J]}else v[J].src=R[J]}G.resizeSensorInstance=new I(G,x),x()}function f(){for(var G=d(),v=G("[data-responsive-image],[responsive-image]"),w=0,R=v.length;w img, [data-responsive-image] {overflow: hidden; padding: 0; } [responsive-image] > img, [data-responsive-image] > img {width: 100%;}",C.innerHTML+=` -@keyframes element-queries { 0% { visibility: inherit; } }`,document.getElementsByTagName("head")[0].appendChild(C),B=!0);for(var v=0,w=document.styleSheets.length;v\s{0,}<").replace(/-1?(r+=a[C]+I[o],n=!0,(I[o].search(/-->/)>-1||I[o].search(/\]>/)>-1||I[o].search(/!DOCTYPE/)>-1)&&(n=!1)):I[o].search(/-->/)>-1||I[o].search(/\]>/)>-1?(r+=I[o],n=!1):/^<\w/.exec(I[o-1])&&/^<\/\w/.exec(I[o])&&/^<[\w:\-\.\,]+/.exec(I[o-1])==/^<\/[\w:\-\.\,]+/.exec(I[o])[0].replace("/","")?(r+=I[o],n||C--):I[o].search(/<\w/)>-1&&I[o].search(/<\//)==-1&&I[o].search(/\/>/)==-1?r=n?r+=I[o]:r+=a[C++]+I[o]:I[o].search(/<\w/)>-1&&I[o].search(/<\//)>-1?r=n?r+=I[o]:r+=a[C]+I[o]:I[o].search(/<\//)>-1?r=n?r+=I[o]:r+=a[--C]+I[o]:I[o].search(/\/>/)>-1?r=n?r+=I[o]:r+=a[C]+I[o]:I[o].search(/<\?/)>-1||I[o].search(/xmlns\:/)>-1||I[o].search(/xmlns\=/)>-1?r+=a[C]+I[o]:r+=I[o];return r[0]==` -`?r.slice(1):r};gl.prototype.json=function(e,I){var I=I||this.step;return typeof JSON>"u"?e:typeof e=="string"?JSON.stringify(JSON.parse(e),null,I):typeof e=="object"?JSON.stringify(e,null,I):e};gl.prototype.css=function(e,g){var I=e.replace(/\s{1,}/g," ").replace(/\{/g,"{~::~").replace(/\}/g,"~::~}~::~").replace(/\;/g,";~::~").replace(/\/\*/g,"~::~/*").replace(/\*\//g,"*/~::~").replace(/~::~\s{0,}~::~/g,"~::~").split("~::~"),i=I.length,n=0,C="",r=0,o=g?GN(g):this.shift;for(r=0;r/g,"").replace(/[ \r\n\t]{1,}xmlns/g," xmlns");return I.replace(/>\s{0,}<")};gl.prototype.jsonmin=function(e){return typeof JSON>"u"?e:JSON.stringify(JSON.parse(e),null,0)};gl.prototype.cssmin=function(e,g){var I=g?e:e.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"");return I.replace(/\s{1,}/g," ").replace(/\{\s{1,}/g,"{").replace(/\}\s{1,}/g,"}").replace(/\;\s{1,}/g,";").replace(/\/\*\s{1,}/g,"/*").replace(/\*\/\s{1,}/g,"*/")};gl.prototype.sqlmin=function(e){return e.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")")};var xot=new gl;const Eot=PC(xot);var Mot=function(g,I){if(I=I.split(":")[0],g=+g,!g)return!1;switch(I){case"http":case"ws":return g!==80;case"https":case"wss":return g!==443;case"ftp":return g!==21;case"gopher":return g!==70;case"file":return!1}return g!==0},wQ={},zot=Object.prototype.hasOwnProperty,Pot;function YIe(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function KIe(e){try{return encodeURIComponent(e)}catch{return null}}function Jot(e){for(var g=/([^=?#&]+)=?([^&]*)/g,I={},i;i=g.exec(e);){var n=YIe(i[1]),C=YIe(i[2]);n===null||C===null||n in I||(I[n]=C)}return I}function Oot(e,g){g=g||"";var I=[],i,n;typeof g!="string"&&(g="?");for(n in e)if(zot.call(e,n)){if(i=e[n],!i&&(i===null||i===Pot||isNaN(i))&&(i=""),n=KIe(n),i=KIe(i),n===null||i===null)continue;I.push(n+"="+i)}return I.length?g+I.join("&"):""}wQ.stringify=Oot;wQ.parse=Jot;var eGe=Mot,vN=wQ,_ot=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,tGe=/[\n\r\t]/g,Lot=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,gGe=/:\d+$/,Uot=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,Qot=/^[a-zA-Z]:/;function RQ(e){return(e||"").toString().replace(_ot,"")}var gz=[["#","hash"],["?","query"],function(g,I){return uA(I.protocol)?g.replace(/\\/g,"/"):g},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],FIe={hash:1,query:1};function IGe(e){var g;typeof window<"u"?g=window:typeof globalThis<"u"?g=globalThis:typeof self<"u"?g=self:g={};var I=g.location||{};e=e||I;var i={},n=typeof e,C;if(e.protocol==="blob:")i=new ZA(unescape(e.pathname),{});else if(n==="string"){i=new ZA(e,{});for(C in FIe)delete i[C]}else if(n==="object"){for(C in e)C in FIe||(i[C]=e[C]);i.slashes===void 0&&(i.slashes=Lot.test(e.href))}return i}function uA(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function iGe(e,g){e=RQ(e),e=e.replace(tGe,""),g=g||{};var I=Uot.exec(e),i=I[1]?I[1].toLowerCase():"",n=!!I[2],C=!!I[3],r=0,o;return n?C?(o=I[2]+I[3]+I[4],r=I[2].length+I[3].length):(o=I[2]+I[4],r=I[2].length):C?(o=I[3]+I[4],r=I[3].length):o=I[4],i==="file:"?r>=2&&(o=o.slice(2)):uA(i)?o=I[4]:i?n&&(o=o.slice(2)):r>=2&&uA(g.protocol)&&(o=I[4]),{protocol:i,slashes:n||uA(i),slashesCount:r,rest:o}}function jot(e,g){if(e==="")return g;for(var I=(g||"/").split("/").slice(0,-1).concat(e.split("/")),i=I.length,n=I[i-1],C=!1,r=0;i--;)I[i]==="."?I.splice(i,1):I[i]===".."?(I.splice(i,1),r++):r&&(i===0&&(C=!0),I.splice(i,1),r--);return C&&I.unshift(""),(n==="."||n==="..")&&I.push(""),I.join("/")}function ZA(e,g,I){if(e=RQ(e),e=e.replace(tGe,""),!(this instanceof ZA))return new ZA(e,g,I);var i,n,C,r,o,a,s=gz.slice(),A=typeof g,l=this,c=0;for(A!=="object"&&A!=="string"&&(I=g,g=null),I&&typeof I!="function"&&(I=vN.parse),g=IGe(g),n=iGe(e||"",g),i=!n.protocol&&!n.slashes,l.slashes=n.slashes||i&&g.slashes,l.protocol=n.protocol||g.protocol||"",e=n.rest,(n.protocol==="file:"&&(n.slashesCount!==2||Qot.test(e))||!n.slashes&&(n.protocol||n.slashesCount<2||!uA(l.protocol)))&&(s[3]=[/(.*)/,"pathname"]);c{try{return new window.BroadcastChannel("pub-sub-es")}catch{return{postMessage:()=>{}}}})(),VQ=(e,g)=>g?e.toLowerCase():e,CGe=(e,{caseInsensitive:g}={})=>(I,i,n=1/0)=>{const C=VQ(I,g);return e[C]||(e[C]=[],e.__times__[C]=[]),e[C].push(i),e.__times__[C].push(+n||1/0),{event:C,handler:i}},WQ=(e,{caseInsensitive:g}={})=>(I,i)=>{typeof I=="object"&&(i=I.handler,I=I.event);const n=VQ(I,g);if(!e[n])return;const C=e[n].indexOf(i);C===-1||C>=e[n].length||(e[n].splice(C,1),e.__times__[n].splice(C,1))},DIe=(e,g)=>()=>{e.forEach(I=>I(g))},rGe=(e,{isGlobal:g,caseInsensitive:I,async:i}={})=>{const n=WQ(e);return(C,r,o={})=>{const a=VQ(C,I);if(!e[a])return;const s=[...e[a]];if(s.forEach((A,l)=>{--e.__times__[a][l]<1&&n(a,A)}),i||o.async?setTimeout(DIe(s,r),0):DIe(s,r)(),g&&!o.isNoGlobalBroadcast)try{nGe.postMessage({event:a,news:r})}catch(A){if(A instanceof DOMException)console.warn(`Could not broadcast '${a}' globally. Payload is not clonable.`);else throw A}}},oGe=e=>()=>{Object.keys(e).filter(g=>g[0]!=="_").forEach(g=>{e[g]=void 0,e.__times__[g]=void 0,delete e[g],delete e.__times__[g]})},aGe=()=>({__times__:{}}),BN=(e={})=>{const g=e.async||!1,I=e.caseInsensitive||!1,i=e.stack||aGe();return i.__times__||(i.__times__={}),{publish:rGe(i,{async:g,caseInsensitive:I}),subscribe:CGe(i,{caseInsensitive:I}),unsubscribe:WQ(i,{caseInsensitive:I}),clear:oGe(i),stack:i}},eZ=aGe(),PG={publish:rGe(eZ,{isGlobal:!0}),subscribe:CGe(eZ),unsubscribe:WQ(eZ),clear:oGe(eZ),stack:eZ};nGe.onmessage=({data:{event:e,news:g}})=>PG.publish(e,g,{isNoGlobalBroadcast:!0});const Qt={"context-menu":"_context-menu_18ock_1","context-menu-dark":"_context-menu-dark_18ock_12","context-menu-icon":"_context-menu-icon_18ock_17","context-menu-item":"_context-menu-item_18ock_27","context-menu-hr":"_context-menu-hr_18ock_38","play-icon":"_play-icon_18ock_45","context-menu-span":"_context-menu-span_18ock_52","context-menu-thumbnail":"_context-menu-thumbnail_18ock_60","context-menu-thumbnail-inline":"_context-menu-thumbnail-inline_18ock_65"};function ig(e){return N.createElement("div",{"data-menu-item-for":typeof e.children=="string"?e.children:null,className:Qt["context-menu-item"],onClick:g=>e.onClick(g),onMouseEnter:g=>e.onMouseEnter(g),onMouseLeave:g=>e.onMouseLeave(g),role:"button",tabIndex:0},N.createElement("span",{className:Qt["context-menu-span"]},e.children))}ig.defaultProps={onMouseEnter:()=>{},onMouseLeave:()=>{}};ig.propTypes={children:L.node.isRequired,onClick:L.func.isRequired,onMouseEnter:L.func,onMouseLeave:L.func};var gat={value:()=>{}};function x0(){for(var e=0,g=arguments.length,I={},i;e=0&&(i=I.slice(n+1),I=I.slice(0,n)),I&&!g.hasOwnProperty(I))throw new Error("unknown type: "+I);return{type:I,name:i}})}P1.prototype=x0.prototype={constructor:P1,on:function(e,g){var I=this._,i=Iat(e+"",I),n,C=-1,r=i.length;if(arguments.length<2){for(;++C0)for(var I=new Array(n),i=0,n,C;i()=>e;function Iz(e,{sourceEvent:g,subject:I,target:i,identifier:n,active:C,x:r,y:o,dx:a,dy:s,dispatch:A}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:g,enumerable:!0,configurable:!0},subject:{value:I,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:n,enumerable:!0,configurable:!0},active:{value:C,enumerable:!0,configurable:!0},x:{value:r,enumerable:!0,configurable:!0},y:{value:o,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:s,enumerable:!0,configurable:!0},_:{value:A}})}Iz.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function nat(e){return!e.ctrlKey&&!e.button}function Cat(){return this.parentNode}function rat(e,g){return g??{x:e.x,y:e.y}}function oat(){return navigator.maxTouchPoints||"ontouchstart"in this}function QA(){var e=nat,g=Cat,I=rat,i=oat,n={},C=x0("start","drag","end"),r=0,o,a,s,A,l=0;function c(y){y.on("mousedown.drag",u).filter(i).on("touchstart.drag",m).on("touchmove.drag",f).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(y,Z){if(!(A||!e.call(this,y,Z))){var B=p(this,g.call(this,y,Z),y,Z,"mouse");B&&(hg(y.view).on("mousemove.drag",d,!0).on("mouseup.drag",h,!0),SN(y.view),aF(y),s=!1,o=y.clientX,a=y.clientY,B("start",y))}}function d(y){if(Tp(y),!s){var Z=y.clientX-o,B=y.clientY-a;s=Z*Z+B*B>l}n.mouse("drag",y)}function h(y){hg(y.view).on("mousemove.drag mouseup.drag",null),wN(y.view,s),Tp(y),n.mouse("end",y)}function m(y,Z){if(e.call(this,y,Z)){var B=y.changedTouches,G=g.call(this,y,Z),v=B.length,w,R;for(w=0;w=0&&e._call.call(null,g),e=e._next;--Hb}function EIe(){rh=(hX=NB.now())+RN,Hb=MZ=0;try{sat()}finally{Hb=0,cat(),rh=0}}function lat(){var e=NB.now(),g=e-hX;g>AGe&&(RN-=g,hX=e)}function cat(){for(var e,g=dX,I,i=1/0;g;)g._call?(i>g._time&&(i=g._time),e=g,g=g._next):(I=g._next,g._next=null,g=e?e._next=I:dX=I);zZ=e,iz(i)}function iz(e){if(!Hb){MZ&&(MZ=clearTimeout(MZ));var g=e-rh;g>24?(e<1/0&&(MZ=setTimeout(EIe,e-NB.now()-RN)),tZ&&(tZ=clearInterval(tZ))):(tZ||(hX=NB.now(),tZ=setInterval(lat,AGe)),Hb=1,sGe(EIe))}}function MIe(e,g,I){var i=new mX;return g=g==null?0:+g,i.restart(n=>{i.stop(),e(n+g)},g,I),i}var uat=x0("start","end","cancel","interrupt"),dat=[],cGe=0,zIe=1,nz=2,J1=3,PIe=4,Cz=5,O1=6;function VN(e,g,I,i,n,C){var r=e.__transition;if(!r)e.__transition={};else if(I in r)return;hat(e,I,{name:g,index:i,group:n,on:uat,tween:dat,time:C.time,delay:C.delay,duration:C.duration,ease:C.ease,timer:null,state:cGe})}function HQ(e,g){var I=fa(e,g);if(I.state>cGe)throw new Error("too late; already scheduled");return I}function TA(e,g){var I=fa(e,g);if(I.state>J1)throw new Error("too late; already running");return I}function fa(e,g){var I=e.__transition;if(!I||!(I=I[g]))throw new Error("transition not found");return I}function hat(e,g,I){var i=e.__transition,n;i[g]=I,I.timer=lGe(C,0,I.time);function C(s){I.state=zIe,I.timer.restart(r,I.delay,I.time),I.delay<=s&&r(s-I.delay)}function r(s){var A,l,c,u;if(I.state!==zIe)return a();for(A in i)if(u=i[A],u.name===I.name){if(u.state===J1)return MIe(r);u.state===PIe?(u.state=O1,u.timer.stop(),u.on.call("interrupt",e,e.__data__,u.index,u.group),delete i[A]):+Anz&&i.state=0&&(g=g.slice(0,I)),!g||g==="start"})}function Oat(e,g,I){var i,n,C=Jat(g)?HQ:TA;return function(){var r=C(this,e),o=r.on;o!==i&&(n=(i=o).copy()).on(g,I),r.on=n}}function _at(e,g){var I=this._id;return arguments.length<2?fa(this.node(),I).on.on(e):this.each(Oat(I,e,g))}function Lat(e){return function(){var g=this.parentNode;for(var I in this.__transition)if(+I!==e)return;g&&g.removeChild(this)}}function Uat(){return this.on("end.remove",Lat(this._id))}function Qat(e){var g=this._name,I=this._id;typeof e!="function"&&(e=FS(e));for(var i=this._groups,n=i.length,C=new Array(n),r=0;r()=>e;function yAt(e,{sourceEvent:g,target:I,selection:i,mode:n,dispatch:C}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:g,enumerable:!0,configurable:!0},target:{value:I,enumerable:!0,configurable:!0},selection:{value:i,enumerable:!0,configurable:!0},mode:{value:n,enumerable:!0,configurable:!0},_:{value:C}})}function ZAt(e){e.stopImmediatePropagation()}function sF(e){e.preventDefault(),e.stopImmediatePropagation()}var JIe={name:"drag"},lF={name:"space"},Dm={name:"handle"},xm={name:"center"};const{abs:OIe,max:Wn,min:Xn}=Math;function _Ie(e){return[+e[0],+e[1]]}function oz(e){return[_Ie(e[0]),_Ie(e[1])]}var _1={name:"x",handles:["w","e"].map(kB),input:function(e,g){return e==null?null:[[+e[0],g[0][1]],[+e[1],g[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}},L1={name:"y",handles:["n","s"].map(kB),input:function(e,g){return e==null?null:[[g[0][0],+e[0]],[g[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}},GAt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(kB),input:function(e){return e==null?null:oz(e)},output:function(e){return e}},MA={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},LIe={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},UIe={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},vAt={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},BAt={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function kB(e){return{type:e}}function SAt(e){return!e.ctrlKey&&!e.button}function wAt(){var e=this.ownerSVGElement||this;return e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function RAt(){return navigator.maxTouchPoints||"ontouchstart"in this}function cF(e){for(;!e.__brush;)if(!(e=e.parentNode))return;return e.__brush}function VAt(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function WAt(e){var g=e.__brush;return g?g.dim.output(g.selection):null}function WN(){return kQ(_1)}function LS(){return kQ(L1)}function NQ(){return kQ(GAt)}function kQ(e){var g=wAt,I=SAt,i=RAt,n=!0,C=x0("start","brush","end"),r=6,o;function a(m){var f=m.property("__brush",h).selectAll(".overlay").data([kB("overlay")]);f.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",MA.overlay).merge(f).each(function(){var p=cF(this).extent;hg(this).attr("x",p[0][0]).attr("y",p[0][1]).attr("width",p[1][0]-p[0][0]).attr("height",p[1][1]-p[0][1])}),m.selectAll(".selection").data([kB("selection")]).enter().append("rect").attr("class","selection").attr("cursor",MA.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var b=m.selectAll(".handle").data(e.handles,function(p){return p.type});b.exit().remove(),b.enter().append("rect").attr("class",function(p){return"handle handle--"+p.type}).attr("cursor",function(p){return MA[p.type]}),m.each(s).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",c).filter(i).on("touchstart.brush",c).on("touchmove.brush",u).on("touchend.brush touchcancel.brush",d).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}a.move=function(m,f){m.tween?m.on("start.brush",function(b){A(this,arguments).beforestart().start(b)}).on("interrupt.brush end.brush",function(b){A(this,arguments).end(b)}).tween("brush",function(){var b=this,p=b.__brush,y=A(b,arguments),Z=p.selection,B=e.input(typeof f=="function"?f.apply(this,arguments):f,p.extent),G=em(Z,B);function v(w){p.selection=w===1&&B===null?null:G(w),s.call(b),y.brush()}return Z!==null&&B!==null?v:v(1)}):m.each(function(){var b=this,p=arguments,y=b.__brush,Z=e.input(typeof f=="function"?f.apply(b,p):f,y.extent),B=A(b,p).beforestart();rz(b),y.selection=Z===null?null:Z,s.call(b),B.start().brush().end()})},a.clear=function(m){a.move(m,null)};function s(){var m=hg(this),f=cF(this).selection;f?(m.selectAll(".selection").style("display",null).attr("x",f[0][0]).attr("y",f[0][1]).attr("width",f[1][0]-f[0][0]).attr("height",f[1][1]-f[0][1]),m.selectAll(".handle").style("display",null).attr("x",function(b){return b.type[b.type.length-1]==="e"?f[1][0]-r/2:f[0][0]-r/2}).attr("y",function(b){return b.type[0]==="s"?f[1][1]-r/2:f[0][1]-r/2}).attr("width",function(b){return b.type==="n"||b.type==="s"?f[1][0]-f[0][0]+r:r}).attr("height",function(b){return b.type==="e"||b.type==="w"?f[1][1]-f[0][1]+r:r})):m.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function A(m,f,b){var p=m.__brush.emitter;return p&&(!b||!p.clean)?p:new l(m,f,b)}function l(m,f,b){this.that=m,this.args=f,this.state=m.__brush,this.active=0,this.clean=b}l.prototype={beforestart:function(){return++this.active===1&&(this.state.emitter=this,this.starting=!0),this},start:function(m,f){return this.starting?(this.starting=!1,this.emit("start",m,f)):this.emit("brush",m),this},brush:function(m,f){return this.emit("brush",m,f),this},end:function(m,f){return--this.active===0&&(delete this.state.emitter,this.emit("end",m,f)),this},emit:function(m,f,b){var p=hg(this.that).datum();C.call(m,this.that,new yAt(m,{sourceEvent:f,target:a,selection:e.output(this.state.selection),mode:b,dispatch:C}),p)}};function c(m){if(o&&!m.touches||!I.apply(this,arguments))return;var f=this,b=m.target.__data__.type,p=(n&&m.metaKey?b="overlay":b)==="selection"?JIe:n&&m.altKey?xm:Dm,y=e===L1?null:vAt[b],Z=e===_1?null:BAt[b],B=cF(f),G=B.extent,v=B.selection,w=G[0][0],R,S,X=G[0][1],W,V,H=G[1][0],Y,K,x=G[1][1],J,P,ge=0,q=0,$,j=y&&Z&&n&&m.shiftKey,te,Q,ie=Array.from(m.touches||[m],De=>{const Qe=De.identifier;return De=zg(De,f),De.point0=De.slice(),De.identifier=Qe,De});if(b==="overlay"){v&&($=!0);const De=[ie[0],ie[1]||ie[0]];B.selection=v=[[R=e===L1?w:Xn(De[0][0],De[1][0]),W=e===_1?X:Xn(De[0][1],De[1][1])],[Y=e===L1?H:Wn(De[0][0],De[1][0]),J=e===_1?x:Wn(De[0][1],De[1][1])]],ie.length>1&&We()}else R=v[0][0],W=v[0][1],Y=v[1][0],J=v[1][1];S=R,V=W,K=Y,P=J;var he=hg(f).attr("pointer-events","none"),ne=he.selectAll(".overlay").attr("cursor",MA[b]);rz(f);var be=A(f,arguments,!0).beforestart();if(m.touches)be.moved=ve,be.ended=Be;else{var pe=hg(m.view).on("mousemove.brush",ve,!0).on("mouseup.brush",Be,!0);n&&pe.on("keydown.brush",Je,!0).on("keyup.brush",Pe,!0),SN(m.view)}s.call(f),be.start(m,p.name);function ve(De){for(const Qe of De.changedTouches||[De])for(const _e of ie)_e.identifier===Qe.identifier&&(_e.cur=zg(Qe,f));if(j&&!te&&!Q&&ie.length===1){const Qe=ie[0];OIe(Qe.cur[0]-Qe[0])>OIe(Qe.cur[1]-Qe[1])?Q=!0:te=!0}for(const Qe of ie)Qe.cur&&(Qe[0]=Qe.cur[0],Qe[1]=Qe.cur[1]);$=!0,sF(De),We(De)}function We(De){const Qe=ie[0],_e=Qe.point0;var gt;switch(ge=Qe[0]-_e[0],q=Qe[1]-_e[1],p){case lF:case JIe:{y&&(ge=Wn(w-R,Xn(H-Y,ge)),S=R+ge,K=Y+ge),Z&&(q=Wn(X-W,Xn(x-J,q)),V=W+q,P=J+q);break}case Dm:{ie[1]?(y&&(S=Wn(w,Xn(H,ie[0][0])),K=Wn(w,Xn(H,ie[1][0])),y=1),Z&&(V=Wn(X,Xn(x,ie[0][1])),P=Wn(X,Xn(x,ie[1][1])),Z=1)):(y<0?(ge=Wn(w-R,Xn(H-R,ge)),S=R+ge,K=Y):y>0&&(ge=Wn(w-Y,Xn(H-Y,ge)),S=R,K=Y+ge),Z<0?(q=Wn(X-W,Xn(x-W,q)),V=W+q,P=J):Z>0&&(q=Wn(X-J,Xn(x-J,q)),V=W,P=J+q));break}case xm:{y&&(S=Wn(w,Xn(H,R-ge*y)),K=Wn(w,Xn(H,Y+ge*y))),Z&&(V=Wn(X,Xn(x,W-q*Z)),P=Wn(X,Xn(x,J+q*Z)));break}}K0&&(R=S-ge),Z<0?J=P-q:Z>0&&(W=V-q),p=lF,ne.attr("cursor",MA.selection),We());break}default:return}sF(De)}function Pe(De){switch(De.keyCode){case 16:{j&&(te=Q=j=!1,We());break}case 18:{p===xm&&(y<0?Y=K:y>0&&(R=S),Z<0?J=P:Z>0&&(W=V),p=Dm,We());break}case 32:{p===lF&&(De.altKey?(y&&(Y=K-ge*y,R=S+ge*y),Z&&(J=P-q*Z,W=V+q*Z),p=xm):(y<0?Y=K:y>0&&(R=S),Z<0?J=P:Z>0&&(W=V),p=Dm),ne.attr("cursor",MA[b]),We());break}default:return}sF(De)}}function u(m){A(this,arguments).moved(m)}function d(m){A(this,arguments).ended(m)}function h(){var m=this.__brush||{selection:null};return m.extent=oz(g.apply(this,arguments)),m.dim=e,m}return a.extent=function(m){return arguments.length?(g=typeof m=="function"?m:AF(oz(m)),a):g},a.filter=function(m){return arguments.length?(I=typeof m=="function"?m:AF(!!m),a):I},a.touchable=function(m){return arguments.length?(i=typeof m=="function"?m:AF(!!m),a):i},a.handleSize=function(m){return arguments.length?(r=+m,a):r},a.keyModifiers=function(m){return arguments.length?(n=!!m,a):n},a.on=function(){var m=C.on.apply(C,arguments);return m===C?a:m},a}const XAt=Object.freeze(Object.defineProperty({__proto__:null,brush:NQ,brushSelection:WAt,brushX:WN,brushY:LS},Symbol.toStringTag,{value:"Module"}));function YB(){return YB=Object.assign?Object.assign.bind():function(e){for(var g=1;ge.length)&&(g=e.length);for(var I=0,i=new Array(g);I0&&arguments[0]!==void 0?arguments[0]:this.active.collection;return this.refs[I].sort(zAt)}}]),e}();function zAt(e,g){var I=e.node.sortableInfo.index,i=g.node.sortableInfo.index;return I-i}function PAt(e,g,I){return e=e.slice(),e.splice(I<0?e.length+I:I,0,e.splice(g,1)[0]),e}function bGe(e,g){return Object.keys(e).reduce(function(I,i){return g.indexOf(i)===-1&&(I[i]=e[i]),I},{})}var Em={end:["touchend","touchcancel","mouseup"],move:["touchmove","mousemove"],start:["touchstart","mousedown"]},yGe=function(){if(typeof window>"u"||typeof document>"u")return"";var e=window.getComputedStyle(document.documentElement,"")||["-moz-hidden-iframe"],g=(Array.prototype.slice.call(e).join("").match(/-(moz|webkit|ms)-/)||e.OLink===""&&["","o"])[1];switch(g){case"ms":return"ms";default:return g&&g.length?g[0].toUpperCase()+g.substr(1):""}}();function cV(e,g){Object.keys(g).forEach(function(I){e.style[I]=g[I]})}function uV(e,g){e.style["".concat(yGe,"Transform")]=g==null?"":"translate3d(".concat(g.x,"px,").concat(g.y,"px,0)")}function dF(e,g){e.style["".concat(yGe,"TransitionDuration")]=g==null?"":"".concat(g,"ms")}function PZ(e,g){for(;e;){if(g(e))return e;e=e.parentNode}return null}function jIe(e,g,I){return Math.max(e,Math.min(I,g))}function ip(e){return e.substr(-2)==="px"?parseFloat(e):0}function JAt(e){var g=window.getComputedStyle(e);return{bottom:ip(g.marginBottom),left:ip(g.marginLeft),right:ip(g.marginRight),top:ip(g.marginTop)}}function FQ(e,g){var I=g.displayName||g.name;return I?"".concat(e,"(").concat(I,")"):e}function hF(e,g){var I=e.getBoundingClientRect();return{top:I.top+g.top,left:I.left+g.left}}function gZ(e){return e.touches&&e.touches.length?{x:e.touches[0].pageX,y:e.touches[0].pageY}:e.changedTouches&&e.changedTouches.length?{x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}:{x:e.pageX,y:e.pageY}}function OAt(e){return e.touches&&e.touches.length||e.changedTouches&&e.changedTouches.length}function U1(e,g){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{left:0,top:0};if(e){var i={left:I.left+e.offsetLeft,top:I.top+e.offsetTop};return e.parentNode===g?i:U1(e.parentNode,g,i)}}function _At(e,g,I){return eg?e-1:e>I&&e0&&I[r].height>0){var o=C.getContext("2d");o.drawImage(I[r],0,0)}}),i}function sz(e){var g,I,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{withRef:!1};return I=g=function(n){KQ(C,n);function C(){return US(this,C),YQ(this,KB(C).apply(this,arguments))}return QS(C,[{key:"componentDidMount",value:function(){var o=sa.findDOMNode(this);o.sortableHandle=!0}},{key:"getWrappedInstance",value:function(){return oh(i.withRef,"To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableHandle() call"),this.refs.wrappedInstance}},{key:"render",value:function(){var o=i.withRef?"wrappedInstance":null;return U.createElement(e,YB({ref:o},this.props))}}]),C}(U.Component),Ug(g,"displayName",FQ("sortableHandle",e)),I}function qIe(e){return e.sortableHandle!=null}var $At=function(){function e(g,I){US(this,e),this.container=g,this.onScrollCallback=I}return QS(e,[{key:"clear",value:function(){this.interval!=null&&(clearInterval(this.interval),this.interval=null)}},{key:"update",value:function(I){var i=this,n=I.translate,C=I.minTranslate,r=I.maxTranslate,o=I.width,a=I.height,s={x:0,y:0},A={x:1,y:1},l={x:10,y:10},c=this.container,u=c.scrollTop,d=c.scrollLeft,h=c.scrollHeight,m=c.scrollWidth,f=c.clientHeight,b=c.clientWidth,p=u===0,y=h-u-f===0,Z=d===0,B=m-d-b===0;n.y>=r.y-a/2&&!y?(s.y=1,A.y=l.y*Math.abs((r.y-a/2-n.y)/a)):n.x>=r.x-o/2&&!B?(s.x=1,A.x=l.x*Math.abs((r.x-o/2-n.x)/o)):n.y<=C.y+a/2&&!p?(s.y=-1,A.y=l.y*Math.abs((n.y-a/2-C.y)/a)):n.x<=C.x+o/2&&!Z&&(s.x=-1,A.x=l.x*Math.abs((n.x-o/2-C.x)/o)),this.interval&&(this.clear(),this.isAutoScrolling=!1),(s.x!==0||s.y!==0)&&(this.interval=setInterval(function(){i.isAutoScrolling=!0;var G={left:A.x*s.x,top:A.y*s.y};i.container.scrollTop+=G.top,i.container.scrollLeft+=G.left,i.onScrollCallback(G)},5))}}]),e}();function qAt(e){var g=e.node;return{height:g.offsetHeight,width:g.offsetWidth}}function est(e){var g=[Id.Input,Id.Textarea,Id.Select,Id.Option,Id.Button];return!!(g.indexOf(e.target.tagName)!==-1||PZ(e.target,function(I){return I.contentEditable==="true"}))}var GGe={axis:L.oneOf(["x","y","xy"]),contentWindow:L.any,disableAutoscroll:L.bool,distance:L.number,getContainer:L.func,getHelperDimensions:L.func,helperClass:L.string,helperContainer:L.oneOfType([L.func,typeof HTMLElement>"u"?L.any:L.instanceOf(HTMLElement)]),hideSortableGhost:L.bool,keyboardSortingTransitionDuration:L.number,lockAxis:L.string,lockOffset:L.oneOfType([L.number,L.string,L.arrayOf(L.oneOfType([L.number,L.string]))]),lockToContainerEdges:L.bool,onSortEnd:L.func,onSortMove:L.func,onSortOver:L.func,onSortStart:L.func,pressDelay:L.number,pressThreshold:L.number,keyCodes:L.shape({lift:L.arrayOf(L.number),drop:L.arrayOf(L.number),cancel:L.arrayOf(L.number),up:L.arrayOf(L.number),down:L.arrayOf(L.number)}),shouldCancelStart:L.func,transitionDuration:L.number,updateBeforeSortStart:L.func,useDragHandle:L.bool,useWindowAsScrollContainer:L.bool},vGe={lift:[Hu.SPACE],drop:[Hu.SPACE],cancel:[Hu.ESC],up:[Hu.UP,Hu.LEFT],down:[Hu.DOWN,Hu.RIGHT]},tst={axis:"y",disableAutoscroll:!1,distance:0,getHelperDimensions:qAt,hideSortableGhost:!0,lockOffset:"50%",lockToContainerEdges:!1,pressDelay:0,pressThreshold:5,keyCodes:vGe,shouldCancelStart:est,transitionDuration:300,useWindowAsScrollContainer:!1},gst=Object.keys(GGe);function Ist(e){oh(!(e.distance&&e.pressDelay),"Attempted to set both `pressDelay` and `distance` on SortableContainer, you may only use one or the other, not both at the same time.")}function ist(e,g){try{var I=e()}catch(i){return g(!0,i)}return I&&I.then?I.then(g.bind(null,!1),g.bind(null,!0)):g(!1,value)}function nst(e){var g,I,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{withRef:!1};return I=g=function(n){KQ(C,n);function C(r){var o;return US(this,C),o=YQ(this,KB(C).call(this,r)),Ug(yg(yg(o)),"state",{}),Ug(yg(yg(o)),"handleStart",function(a){var s=o.props,A=s.distance,l=s.shouldCancelStart;if(!(a.button===2||l(a))){o.touched=!0,o.position=gZ(a);var c=PZ(a.target,function(b){return b.sortableInfo!=null});if(c&&c.sortableInfo&&o.nodeIsChild(c)&&!o.state.sorting){var u=o.props.useDragHandle,d=c.sortableInfo,h=d.index,m=d.collection,f=d.disabled;if(f||u&&!PZ(a.target,qIe))return;o.manager.active={collection:m,index:h},!OAt(a)&&a.target.tagName===Id.Anchor&&a.preventDefault(),A||(o.props.pressDelay===0?o.handlePress(a):o.pressTimer=setTimeout(function(){return o.handlePress(a)},o.props.pressDelay))}}}),Ug(yg(yg(o)),"nodeIsChild",function(a){return a.sortableInfo.manager===o.manager}),Ug(yg(yg(o)),"handleMove",function(a){var s=o.props,A=s.distance,l=s.pressThreshold;if(!o.state.sorting&&o.touched&&!o._awaitingUpdateBeforeSortStart){var c=gZ(a),u={x:o.position.x-c.x,y:o.position.y-c.y},d=Math.abs(u.x)+Math.abs(u.y);o.delta=u,!A&&(!l||d>=l)?(clearTimeout(o.cancelTimer),o.cancelTimer=setTimeout(o.cancel,0)):A&&d>=A&&o.manager.isActive()&&o.handlePress(a)}}),Ug(yg(yg(o)),"handleEnd",function(){o.touched=!1,o.cancel()}),Ug(yg(yg(o)),"cancel",function(){var a=o.props.distance,s=o.state.sorting;s||(a||clearTimeout(o.pressTimer),o.manager.active=null)}),Ug(yg(yg(o)),"handlePress",function(a){try{var s=o.manager.getActive(),A=function(){if(s){var l=function(){var w=y.sortableInfo.index,R=JAt(y),S=QAt(o.container),X=o.scrollContainer.getBoundingClientRect(),W=d({index:w,node:y,collection:Z});if(o.node=y,o.margin=R,o.gridGap=S,o.width=W.width,o.height=W.height,o.marginOffset={x:o.margin.left+o.margin.right+o.gridGap.x,y:Math.max(o.margin.top,o.margin.bottom,o.gridGap.y)},o.boundingClientRect=y.getBoundingClientRect(),o.containerBoundingRect=X,o.index=w,o.newIndex=w,o.axis={x:u.indexOf("x")>=0,y:u.indexOf("y")>=0},o.offsetEdge=U1(y,o.container),B?o.initialOffset=gZ(uF({},a,{pageX:o.boundingClientRect.left,pageY:o.boundingClientRect.top})):o.initialOffset=gZ(a),o.initialScroll={left:o.scrollContainer.scrollLeft,top:o.scrollContainer.scrollTop},o.initialWindowScroll={left:window.pageXOffset,top:window.pageYOffset},o.helper=o.helperContainer.appendChild(jAt(y)),cV(o.helper,{boxSizing:"border-box",height:"".concat(o.height,"px"),left:"".concat(o.boundingClientRect.left-R.left,"px"),pointerEvents:"none",position:"fixed",top:"".concat(o.boundingClientRect.top-R.top,"px"),width:"".concat(o.width,"px")}),B&&o.helper.focus(),m&&(o.sortableGhost=y,cV(y,{opacity:0,visibility:"hidden"})),o.minTranslate={},o.maxTranslate={},B){var V=p?{top:0,left:0,width:o.contentWindow.innerWidth,height:o.contentWindow.innerHeight}:o.containerBoundingRect,H=V.top,Y=V.left,K=V.width,x=V.height,J=H+x,P=Y+K;o.axis.x&&(o.minTranslate.x=Y-o.boundingClientRect.left,o.maxTranslate.x=P-(o.boundingClientRect.left+o.width)),o.axis.y&&(o.minTranslate.y=H-o.boundingClientRect.top,o.maxTranslate.y=J-(o.boundingClientRect.top+o.height))}else o.axis.x&&(o.minTranslate.x=(p?0:X.left)-o.boundingClientRect.left-o.width/2,o.maxTranslate.x=(p?o.contentWindow.innerWidth:X.left+X.width)-o.boundingClientRect.left-o.width/2),o.axis.y&&(o.minTranslate.y=(p?0:X.top)-o.boundingClientRect.top-o.height/2,o.maxTranslate.y=(p?o.contentWindow.innerHeight:X.top+X.height)-o.boundingClientRect.top-o.height/2);h&&h.split(" ").forEach(function(ge){return o.helper.classList.add(ge)}),o.listenerNode=a.touches?y:o.contentWindow,B?(o.listenerNode.addEventListener("wheel",o.handleKeyEnd,!0),o.listenerNode.addEventListener("mousedown",o.handleKeyEnd,!0),o.listenerNode.addEventListener("keydown",o.handleKeyDown)):(Em.move.forEach(function(ge){return o.listenerNode.addEventListener(ge,o.handleSortMove,!1)}),Em.end.forEach(function(ge){return o.listenerNode.addEventListener(ge,o.handleSortEnd,!1)})),o.setState({sorting:!0,sortingIndex:w}),b&&b({node:y,index:w,collection:Z,isKeySorting:B,nodes:o.manager.getOrderedRefs(),helper:o.helper},a),B&&o.keyMove(0)},c=o.props,u=c.axis,d=c.getHelperDimensions,h=c.helperClass,m=c.hideSortableGhost,f=c.updateBeforeSortStart,b=c.onSortStart,p=c.useWindowAsScrollContainer,y=s.node,Z=s.collection,B=o.manager.isKeySorting,G=function(){if(typeof f=="function"){o._awaitingUpdateBeforeSortStart=!0;var v=ist(function(){var w=y.sortableInfo.index;return Promise.resolve(f({collection:Z,index:w,node:y,isKeySorting:B},a)).then(function(){})},function(w,R){if(o._awaitingUpdateBeforeSortStart=!1,w)throw R;return R});if(v&&v.then)return v.then(function(){})}}();return G&&G.then?G.then(l):l(G)}}();return Promise.resolve(A&&A.then?A.then(function(){}):void 0)}catch(l){return Promise.reject(l)}}),Ug(yg(yg(o)),"handleSortMove",function(a){var s=o.props.onSortMove;typeof a.preventDefault=="function"&&a.preventDefault(),o.updateHelperPosition(a),o.animateNodes(),o.autoscroll(),s&&s(a)}),Ug(yg(yg(o)),"handleSortEnd",function(a){var s=o.props,A=s.hideSortableGhost,l=s.onSortEnd,c=o.manager,u=c.active.collection,d=c.isKeySorting,h=o.manager.getOrderedRefs();o.listenerNode&&(d?(o.listenerNode.removeEventListener("wheel",o.handleKeyEnd,!0),o.listenerNode.removeEventListener("mousedown",o.handleKeyEnd,!0),o.listenerNode.removeEventListener("keydown",o.handleKeyDown)):(Em.move.forEach(function(y){return o.listenerNode.removeEventListener(y,o.handleSortMove)}),Em.end.forEach(function(y){return o.listenerNode.removeEventListener(y,o.handleSortEnd)}))),o.helper.parentNode.removeChild(o.helper),A&&o.sortableGhost&&cV(o.sortableGhost,{opacity:"",visibility:""});for(var m=0,f=h.length;mA)){o.prevIndex=c,o.newIndex=l;var u=_At(o.newIndex,o.prevIndex,o.index),d=s.find(function(B){var G=B.node;return G.sortableInfo.index===u}),h=d.node,m=o.containerScrollDelta,f=d.boundingClientRect||hF(h,m),b=d.translate||{x:0,y:0},p={top:f.top+b.y-m.top,left:f.left+b.x-m.left},y=cB?B/2:this.height/2,width:this.width>Z?Z/2:this.width/2},v=h&&y>this.index&&y<=m,w=h&&y=m,R={x:0,y:0},S=u[f].edgeOffset;S||(S=U1(p,this.container),u[f].edgeOffset=S,h&&(u[f].boundingClientRect=hF(p,l)));var X=f0&&u[f-1];if(X&&!X.edgeOffset&&(X.edgeOffset=U1(X.node,this.container),h&&(X.boundingClientRect=hF(X.node,l))),y===this.index){s&&(this.sortableGhost=p,cV(p,{opacity:0,visibility:"hidden"}));continue}a&&dF(p,a),this.axis.x?this.axis.y?w||ythis.containerBoundingRect.width-G.width&&X&&(R.x=X.edgeOffset.left-S.left,R.y=X.edgeOffset.top-S.top),this.newIndex===null&&(this.newIndex=y)):(v||y>this.index&&(d.left+c.left+G.width>=S.left&&d.top+c.top+G.height>=S.top||d.top+c.top+G.height>=S.top+B))&&(R.x=-(this.width+this.marginOffset.x),S.left+R.xthis.index&&d.left+c.left+G.width>=S.left?(R.x=-(this.width+this.marginOffset.x),this.newIndex=y):(w||ythis.index&&d.top+c.top+G.height>=S.top?(R.y=-(this.height+this.marginOffset.y),this.newIndex=y):(w||y1&&arguments[1]!==void 0?arguments[1]:{withRef:!1};return I=g=function(n){KQ(C,n);function C(){return US(this,C),YQ(this,KB(C).apply(this,arguments))}return QS(C,[{key:"componentDidMount",value:function(){this.register()}},{key:"componentDidUpdate",value:function(o){this.node&&(o.index!==this.props.index&&(this.node.sortableInfo.index=this.props.index),o.disabled!==this.props.disabled&&(this.node.sortableInfo.disabled=this.props.disabled)),o.collection!==this.props.collection&&(this.unregister(o.collection),this.register())}},{key:"componentWillUnmount",value:function(){this.unregister()}},{key:"register",value:function(){var o=this.props,a=o.collection,s=o.disabled,A=o.index,l=sa.findDOMNode(this);l.sortableInfo={collection:a,disabled:s,index:A,manager:this.context.manager},this.node=l,this.ref={node:l},this.context.manager.add(a,this.ref)}},{key:"unregister",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.props.collection;this.context.manager.remove(o,this.ref)}},{key:"getWrappedInstance",value:function(){return oh(i.withRef,"To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableElement() call"),this.refs.wrappedInstance}},{key:"render",value:function(){var o=i.withRef?"wrappedInstance":null;return U.createElement(e,YB({ref:o},bGe(this.props,Cst)))}}]),C}(U.Component),Ug(g,"displayName",FQ("sortableElement",e)),Ug(g,"contextTypes",{manager:L.object.isRequired}),Ug(g,"propTypes",BGe),Ug(g,"defaultProps",{collection:0}),I}const wGe=Y0(e=>e.pos).left,Ti=(e,g)=>{if(!g||!g.cumPositions||!g.cumPositions.length)return null;let I=wGe(g.cumPositions,e);const i=g.cumPositions[g.cumPositions.length-1].chr,n=g.chromLengths[i];I>0&&(I-=1);let C=Math.floor(e-g.cumPositions[I].pos),r=0;return C<0&&(r=C-1,C=1),I===g.cumPositions.length-1&&C>n&&(r=C-n,C=n),[g.cumPositions[I].chr,C,r,I]},RGe=(e,g)=>I=>I%e*g+Math.floor(I/e),rst=e=>e,VGe=(e,g,I=rst)=>e.map((i,n)=>i+g[I(n)]),ost="http://www.w3.org/2000/svg",fX=(e,g)=>{if(e.namespaceURI===ost){const I=e.getAttribute("class");return!!I&&!!I.match(new RegExp(`(\\s|^)${g}(\\s|$)`))}return e.classList?e.classList.contains(g):!!e.className.match(new RegExp(`(\\s|^)${g}(\\s|$)`))},ast="http://www.w3.org/2000/svg",Ast=(e,g)=>{if(e.namespaceURI===ast){if(!fX(e,g)){const I=e.getAttribute("class")||"";e.setAttribute("class",`${I} ${g}`)}}else e.classList?e.classList.add(g):fX(e,g)||(e.className+=` ${g}`)},sst=(e,g,I)=>{const i=document.createElement("canvas");return new Promise((n,C)=>{const r=new window.Image;r.onload=()=>{i.width=g||r.width,i.height=I||r.height;const o=i.getContext("2d");if(!o){C(new Error("Could not get canvas context"));return}o.drawImage(r,0,0),n(i)},r.onerror=()=>{C(new Error("Could not convert base64 to canvas"))},r.src=`data:image/png;base64,${e}`})},pX=(e,g,I)=>I.chrPositions[e].pos+g,WGe=e=>{if(!(e instanceof Event))throw new Error("Event must be an instance of Event");const g=new e.constructor(e.type,e);return g.sourceUid=e.sourceUid,g.forwarded=e.forwarded,g},Oc=(e,g=!1)=>{const I=e.map((r,o)=>o*(255/(e.length-1))),i=gg().domain(I).range(e),C=nC(g?255:254,-1,-1).map(i).map(r=>{const o=Sb(r);return[o.r,o.g,o.b,o.opacity*255]});return C.length<256&&C.push([255,255,255,0]),C},JZ=0,OZ=5,XGe=10,HGe=10,TGe=300,bX="move",zr="select",lz=100,yX=10,NGe=110,_Z=3e3,LZ="locationListenerPrefix",kGe=1e3,cz="http://higlass.io/api/v1",YGe=400,KGe=300,uz=["top","left","right","bottom","center","whole","gallery"],FGe=20,DGe=20,ZX=Symbol("Light theme"),gI=Symbol("Dark theme"),lst=ZX,ot={PIXI:Hpe},Vr={"multitrack-header":"_multitrack-header_1yz7l_1","multitrack-header-focus":"_multitrack-header-focus_1yz7l_2","multitrack-header-squeazed":"_multitrack-header-squeazed_1yz7l_3","multitrack-header-dark":"_multitrack-header-dark_1yz7l_20","multitrack-header-id":"_multitrack-header-id_1yz7l_30","multitrack-header-left":"_multitrack-header-left_1yz7l_39","multitrack-header-grabber":"_multitrack-header-grabber_1yz7l_44","multitrack-header-grabber-squeazed":"_multitrack-header-grabber-squeazed_1yz7l_45","multitrack-header-search":"_multitrack-header-search_1yz7l_80","multitrack-header-nav-list":"_multitrack-header-nav-list_1yz7l_102","multitrack-header-icon":"_multitrack-header-icon_1yz7l_107","multitrack-header-icon-squeazed":"_multitrack-header-icon-squeazed_1yz7l_108","mouse-tool-selection":"_mouse-tool-selection_1yz7l_136"},cst={id:"cog",paths:["M466.895 305.125c-26.863-46.527-10.708-106.152 36.076-133.244l-50.313-87.146c-14.375 8.427-31.088 13.259-48.923 13.259-53.768 0-97.354-43.873-97.354-97.995h-100.629c0.133 16.705-4.037 33.641-12.979 49.126-26.862 46.528-86.578 62.351-133.431 35.379l-50.312 87.146c14.485 8.236 27.025 20.294 35.943 35.739 26.819 46.454 10.756 105.96-35.854 133.112l50.313 87.146c14.325-8.348 30.958-13.127 48.7-13.127 53.598 0 97.072 43.596 97.35 97.479h100.627c-0.043-16.537 4.136-33.285 12.983-48.609 26.818-46.453 86.388-62.297 133.207-35.506l50.313-87.145c-14.39-8.233-26.846-20.249-35.717-35.614zM256 359.666c-57.254 0-103.668-46.412-103.668-103.667 0-57.254 46.413-103.667 103.668-103.667s103.666 46.413 103.666 103.667c-0.001 57.255-46.412 103.667-103.666 103.667z"],viewBox:"0 0 512 512"},ust={id:"cross",paths:["M507.331 411.33c-0.002-0.002-0.004-0.004-0.006-0.005l-155.322-155.325 155.322-155.325c0.002-0.002 0.004-0.003 0.006-0.005 1.672-1.673 2.881-3.627 3.656-5.708 2.123-5.688 0.912-12.341-3.662-16.915l-73.373-73.373c-4.574-4.573-11.225-5.783-16.914-3.66-2.080 0.775-4.035 1.984-5.709 3.655 0 0.002-0.002 0.003-0.004 0.005l-155.324 155.326-155.324-155.325c-0.002-0.002-0.003-0.003-0.005-0.005-1.673-1.671-3.627-2.88-5.707-3.655-5.69-2.124-12.341-0.913-16.915 3.66l-73.374 73.374c-4.574 4.574-5.784 11.226-3.661 16.914 0.776 2.080 1.985 4.036 3.656 5.708 0.002 0.001 0.003 0.003 0.005 0.005l155.325 155.324-155.325 155.326c-0.001 0.002-0.003 0.003-0.004 0.005-1.671 1.673-2.88 3.627-3.657 5.707-2.124 5.688-0.913 12.341 3.661 16.915l73.374 73.373c4.575 4.574 11.226 5.784 16.915 3.661 2.080-0.776 4.035-1.985 5.708-3.656 0.001-0.002 0.003-0.003 0.005-0.005l155.324-155.325 155.324 155.325c0.002 0.001 0.004 0.003 0.006 0.004 1.674 1.672 3.627 2.881 5.707 3.657 5.689 2.123 12.342 0.913 16.914-3.661l73.373-73.374c4.574-4.574 5.785-11.227 3.662-16.915-0.776-2.080-1.985-4.034-3.657-5.707z"],viewBox:"0 0 512 512"},dst={id:"enlarge",paths:["M512 0h-208l80 80-96 96 48 48 96-96 80 80z","M512 512v-208l-80 80-96-96-48 48 96 96-80 80z","M0 512h208l-80-80 96-96-48-48-96 96-80-80z","M0 0v208l80-80 96 96 48-48-96-96 80-80z"],viewBox:"0 0 512 512"},hst={id:"minus",paths:["M0 208v96c0 8.836 7.164 16 16 16h480c8.836 0 16-7.164 16-16v-96c0-8.836-7.164-16-16-16h-480c-8.836 0-16 7.164-16 16z"],viewBox:"0 0 512 512"},mst={id:"move",paths:["M512,260.096L405.5,161.79v49.155H301.061v-104.45h49.149L251.904,0L160.77,106.495h49.15v104.45H106.495V161.79L0,260.096l106.495,91.135v-49.149h104.45v104.45H161.79L251.904,512l98.306-106.5h-49.149V301.061H405.5v49.149L512,260.096z"],viewBox:"0 0 512 512"},fst={id:"play",paths:["M96 64l320 192-320 192z"],viewBox:"0 0 512 512"},pst={id:"plus",paths:["M496 192h-176v-176c0-8.836-7.164-16-16-16h-96c-8.836 0-16 7.164-16 16v176h-176c-8.836 0-16 7.164-16 16v96c0 8.836 7.164 16 16 16h176v176c0 8.836 7.164 16 16 16h96c8.836 0 16-7.164 16-16v-176h176c8.836 0 16-7.164 16-16v-96c0-8.836-7.164-16-16-16z"],viewBox:"0 0 512 512"},bst={id:"copy",paths:["M607.5 672v-448.5h-351v448.5h351zM607.5 160.5c34.5 0 64.5 28.5 64.5 63v448.5c0 34.5-30 64.5-64.5 64.5h-351c-34.5 0-64.5-30-64.5-64.5v-448.5c0-34.5 30-63 64.5-63h351zM511.5 31.5v64.5h-384v448.5h-63v-448.5c0-34.5 28.5-64.5 63-64.5h384z"],viewBox:"0 0 712 712"},yst={id:"select",viewBox:"0 0 16 16",paths:["M2 14h2v1H1v-3h1v2zm8 1H6v-1h4v1zm5 0h-3v-1h2v-2h1v3zm0-5h-1V6h1v4zM2 10H1V6h1v4zm13-6h-1V2h-2V1h3v3zM4 2H2v2H1V1h3v1zm6 0H6V1h4.03L10 2z"]},Zst={id:"check_square_o",viewBox:"0 0 1792 1792",paths:["M1472 930v318q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q63 0 117 25 15 7 18 23 3 17-9 29l-49 49q-10 10-23 10-3 0-9-2-23-6-45-6h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-254q0-13 9-22l64-64q10-10 23-10 6 0 12 3 20 8 20 29zm231-489l-814 814q-24 24-57 24t-57-24l-430-430q-24-24-24-57t24-57l110-110q24-24 57-24t57 24l263 263 647-647q24-24 57-24t57 24l110 110q24 24 24 57t-24 57z"]},Gst={id:"square_o",viewBox:"0 0 1792 1792",paths:["M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z"]},vst={id:"file_o",viewBox:"0 0 1792 1792",paths:["M1596 380q28 28 48 76t20 88v1152q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h896q40 0 88 20t76 48zm-444-244v376h376q-10-29-22-41l-313-313q-12-12-41-22zm384 1528v-1024h-416q-40 0-68-28t-28-68v-416h-768v1536h1280z"]},Bst={id:"chevron_right",viewBox:"0 0 1792 1792",paths:["M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"]},Sst={id:"chevron_down",viewBox:"0 0 1792 1792",paths:["M1683 808l-742 741q-19 19-45 19t-45-19l-742-741q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z"]},wst={id:"folder_o",viewBox:"0 0 1792 1792",paths:["M1600 1312v-704q0-40-28-68t-68-28h-704q-40 0-68-28t-28-68v-64q0-40-28-68t-68-28h-320q-40 0-68 28t-28 68v960q0 40 28 68t68 28h1216q40 0 68-28t28-68zm128-704v704q0 92-66 158t-158 66h-1216q-92 0-158-66t-66-158v-960q0-92 66-158t158-66h320q92 0 158 66t66 158v32h672q92 0 158 66t66 158z"]},Rst={id:"folder_open_o",viewBox:"0 0 1792 1792",paths:["M1845 931q0-35-53-35h-1088q-40 0-85.5 21.5t-71.5 52.5l-294 363q-18 24-18 40 0 35 53 35h1088q40 0 86-22t71-53l294-363q18-22 18-39zm-1141-163h768v-160q0-40-28-68t-68-28h-576q-40 0-68-28t-28-68v-64q0-40-28-68t-68-28h-320q-40 0-68 28t-28 68v853l256-315q44-53 116-87.5t140-34.5zm1269 163q0 62-46 120l-295 363q-43 53-116 87.5t-140 34.5h-1088q-92 0-158-66t-66-158v-960q0-92 66-158t158-66h320q92 0 158 66t66 158v32h544q92 0 158 66t66 158v160h192q54 0 99 24.5t67 70.5q15 32 15 68z"]},Vst=[cst,ust,dst,hst,mst,fst,pst,bst,yst,Zst,Gst,vst,wst,Rst,Bst,Sst],pa=new DOMParser,Wst='',DQ=pa.parseFromString(Wst,"text/xml").documentElement,Xst=` +`,e.getElementsByTagName("head")[0].appendChild(g)),e.body&&jZe(e.body,"react-draggable-transparent-selection")}function uCt(e){if(e)try{if(e.body&&$Ze(e.body,"react-draggable-transparent-selection"),e.selection)e.selection.empty();else{const g=(e.defaultView||window).getSelection();g&&g.type!=="Caret"&&g.removeAllRanges()}}catch{}}function jZe(e,g){e.classList?e.classList.add(g):e.className.match(new RegExp("(?:^|\\s)".concat(g,"(?!\\S)")))||(e.className+=" ".concat(g))}function $Ze(e,g){e.classList?e.classList.remove(g):e.className=e.className.replace(new RegExp("(?:^|\\s)".concat(g,"(?!\\S)"),"g"),"")}var TA={};Object.defineProperty(TA,"__esModule",{value:!0});TA.canDragX=mCt;TA.canDragY=fCt;TA.createCoreData=bCt;TA.createDraggableData=yCt;TA.getBoundPosition=dCt;TA.getControlPosition=pCt;TA.snapToGrid=hCt;var $r=HA,Ip=iI;function dCt(e,g,i){if(!e.props.bounds)return[g,i];let{bounds:I}=e.props;I=typeof I=="string"?I:ZCt(I);const n=ZQ(e);if(typeof I=="string"){const{ownerDocument:r}=n,C=r.defaultView;let o;if(I==="parent"?o=n.parentNode:o=r.querySelector(I),!(o instanceof C.HTMLElement))throw new Error('Bounds selector "'+I+'" could not find an element.');const a=o,s=C.getComputedStyle(n),A=C.getComputedStyle(a);I={left:-n.offsetLeft+(0,$r.int)(A.paddingLeft)+(0,$r.int)(s.marginLeft),top:-n.offsetTop+(0,$r.int)(A.paddingTop)+(0,$r.int)(s.marginTop),right:(0,Ip.innerWidth)(a)-(0,Ip.outerWidth)(n)-n.offsetLeft+(0,$r.int)(A.paddingRight)-(0,$r.int)(s.marginRight),bottom:(0,Ip.innerHeight)(a)-(0,Ip.outerHeight)(n)-n.offsetTop+(0,$r.int)(A.paddingBottom)-(0,$r.int)(s.marginBottom)}}return(0,$r.isNum)(I.right)&&(g=Math.min(g,I.right)),(0,$r.isNum)(I.bottom)&&(i=Math.min(i,I.bottom)),(0,$r.isNum)(I.left)&&(g=Math.max(g,I.left)),(0,$r.isNum)(I.top)&&(i=Math.max(i,I.top)),[g,i]}function hCt(e,g,i){const I=Math.round(g/e[0])*e[0],n=Math.round(i/e[1])*e[1];return[I,n]}function mCt(e){return e.props.axis==="both"||e.props.axis==="x"}function fCt(e){return e.props.axis==="both"||e.props.axis==="y"}function pCt(e,g,i){const I=typeof g=="number"?(0,Ip.getTouch)(e,g):null;if(typeof g=="number"&&!I)return null;const n=ZQ(i),r=i.props.offsetParent||n.offsetParent||n.ownerDocument.body;return(0,Ip.offsetXYFromParent)(I||e,r,i.props.scale)}function bCt(e,g,i){const I=!(0,$r.isNum)(e.lastX),n=ZQ(e);return I?{node:n,deltaX:0,deltaY:0,lastX:g,lastY:i,x:g,y:i}:{node:n,deltaX:g-e.lastX,deltaY:i-e.lastY,lastX:e.lastX,lastY:e.lastY,x:g,y:i}}function yCt(e,g){const i=e.props.scale;return{node:g.node,x:e.state.x+g.deltaX/i,y:e.state.y+g.deltaY/i,deltaX:g.deltaX/i,deltaY:g.deltaY/i,lastX:e.state.x,lastY:e.state.y}}function ZCt(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function ZQ(e){const g=e.findDOMNode();if(!g)throw new Error(": Unmounted during event!");return g}var GN={},vN={};Object.defineProperty(vN,"__esModule",{value:!0});vN.default=GCt;function GCt(){}function vCt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function vie(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function uX(e){return uX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},uX(e)}Object.defineProperty(GN,"__esModule",{value:!0});GN.default=void 0;var oF=TCt(N),br=GQ(tl),HCt=GQ(qi),Vn=iI,Zl=TA,aF=HA,eZ=GQ(vN);function GQ(e){return e&&e.__esModule?e:{default:e}}function qZe(e){if(typeof WeakMap!="function")return null;var g=new WeakMap,i=new WeakMap;return(qZe=function(I){return I?i:g})(e)}function TCt(e,g){if(!g&&e&&e.__esModule)return e;if(e===null||typeof e!="object"&&typeof e!="function")return{default:e};var i=qZe(g);if(i&&i.has(e))return i.get(e);var I={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r)){var C=n?Object.getOwnPropertyDescriptor(e,r):null;C&&(C.get||C.set)?Object.defineProperty(I,r,C):I[r]=e[r]}return I.default=e,i&&i.set(e,I),I}function _n(e,g,i){return g=NCt(g),g in e?Object.defineProperty(e,g,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[g]=i,e}function NCt(e){var g=kCt(e,"string");return typeof g=="symbol"?g:String(g)}function kCt(e,g){if(typeof e!="object"||e===null)return e;var i=e[Symbol.toPrimitive];if(i!==void 0){var I=i.call(e,g||"default");if(typeof I!="object")return I;throw new TypeError("@@toPrimitive must return a primitive value.")}return(g==="string"?String:Number)(e)}const Do={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}};let Gl=Do.mouse,BN=function(e){RCt(i,e);var g=VCt(i);function i(){var I;return vCt(this,i),I=g.apply(this,arguments),_n(BI(I),"dragging",!1),_n(BI(I),"lastX",NaN),_n(BI(I),"lastY",NaN),_n(BI(I),"touchIdentifier",null),_n(BI(I),"mounted",!1),_n(BI(I),"handleDragStart",n=>{if(I.props.onMouseDown(n),!I.props.allowAnyClick&&typeof n.button=="number"&&n.button!==0)return!1;const r=I.findDOMNode();if(!r||!r.ownerDocument||!r.ownerDocument.body)throw new Error(" not mounted on DragStart!");const{ownerDocument:C}=r;if(I.props.disabled||!(n.target instanceof C.defaultView.Node)||I.props.handle&&!(0,Vn.matchesSelectorAndParentsTo)(n.target,I.props.handle,r)||I.props.cancel&&(0,Vn.matchesSelectorAndParentsTo)(n.target,I.props.cancel,r))return;n.type==="touchstart"&&n.preventDefault();const o=(0,Vn.getTouchIdentifier)(n);I.touchIdentifier=o;const a=(0,Zl.getControlPosition)(n,o,BI(I));if(a==null)return;const{x:s,y:A}=a,l=(0,Zl.createCoreData)(BI(I),s,A);(0,eZ.default)("DraggableCore: handleDragStart: %j",l),(0,eZ.default)("calling",I.props.onStart),!(I.props.onStart(n,l)===!1||I.mounted===!1)&&(I.props.enableUserSelectHack&&(0,Vn.addUserSelectStyles)(C),I.dragging=!0,I.lastX=s,I.lastY=A,(0,Vn.addEvent)(C,Gl.move,I.handleDrag),(0,Vn.addEvent)(C,Gl.stop,I.handleDragStop))}),_n(BI(I),"handleDrag",n=>{const r=(0,Zl.getControlPosition)(n,I.touchIdentifier,BI(I));if(r==null)return;let{x:C,y:o}=r;if(Array.isArray(I.props.grid)){let A=C-I.lastX,l=o-I.lastY;if([A,l]=(0,Zl.snapToGrid)(I.props.grid,A,l),!A&&!l)return;C=I.lastX+A,o=I.lastY+l}const a=(0,Zl.createCoreData)(BI(I),C,o);if((0,eZ.default)("DraggableCore: handleDrag: %j",a),I.props.onDrag(n,a)===!1||I.mounted===!1){try{I.handleDragStop(new MouseEvent("mouseup"))}catch{const l=document.createEvent("MouseEvents");l.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),I.handleDragStop(l)}return}I.lastX=C,I.lastY=o}),_n(BI(I),"handleDragStop",n=>{if(!I.dragging)return;const r=(0,Zl.getControlPosition)(n,I.touchIdentifier,BI(I));if(r==null)return;let{x:C,y:o}=r;if(Array.isArray(I.props.grid)){let l=C-I.lastX||0,c=o-I.lastY||0;[l,c]=(0,Zl.snapToGrid)(I.props.grid,l,c),C=I.lastX+l,o=I.lastY+c}const a=(0,Zl.createCoreData)(BI(I),C,o);if(I.props.onStop(n,a)===!1||I.mounted===!1)return!1;const A=I.findDOMNode();A&&I.props.enableUserSelectHack&&(0,Vn.removeUserSelectStyles)(A.ownerDocument),(0,eZ.default)("DraggableCore: handleDragStop: %j",a),I.dragging=!1,I.lastX=NaN,I.lastY=NaN,A&&((0,eZ.default)("DraggableCore: Removing handlers"),(0,Vn.removeEvent)(A.ownerDocument,Gl.move,I.handleDrag),(0,Vn.removeEvent)(A.ownerDocument,Gl.stop,I.handleDragStop))}),_n(BI(I),"onMouseDown",n=>(Gl=Do.mouse,I.handleDragStart(n))),_n(BI(I),"onMouseUp",n=>(Gl=Do.mouse,I.handleDragStop(n))),_n(BI(I),"onTouchStart",n=>(Gl=Do.touch,I.handleDragStart(n))),_n(BI(I),"onTouchEnd",n=>(Gl=Do.touch,I.handleDragStop(n))),I}return BCt(i,[{key:"componentDidMount",value:function(){this.mounted=!0;const n=this.findDOMNode();n&&(0,Vn.addEvent)(n,Do.touch.start,this.onTouchStart,{passive:!1})}},{key:"componentWillUnmount",value:function(){this.mounted=!1;const n=this.findDOMNode();if(n){const{ownerDocument:r}=n;(0,Vn.removeEvent)(r,Do.mouse.move,this.handleDrag),(0,Vn.removeEvent)(r,Do.touch.move,this.handleDrag),(0,Vn.removeEvent)(r,Do.mouse.stop,this.handleDragStop),(0,Vn.removeEvent)(r,Do.touch.stop,this.handleDragStop),(0,Vn.removeEvent)(n,Do.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&(0,Vn.removeUserSelectStyles)(r)}}},{key:"findDOMNode",value:function(){var n,r;return(n=this.props)!==null&&n!==void 0&&n.nodeRef?(r=this.props)===null||r===void 0||(r=r.nodeRef)===null||r===void 0?void 0:r.current:HCt.default.findDOMNode(this)}},{key:"render",value:function(){return oF.cloneElement(oF.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}]),i}(oF.Component);GN.default=BN;_n(BN,"displayName","DraggableCore");_n(BN,"propTypes",{allowAnyClick:br.default.bool,children:br.default.node.isRequired,disabled:br.default.bool,enableUserSelectHack:br.default.bool,offsetParent:function(e,g){if(e[g]&&e[g].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:br.default.arrayOf(br.default.number),handle:br.default.string,cancel:br.default.string,nodeRef:br.default.object,onStart:br.default.func,onDrag:br.default.func,onStop:br.default.func,onMouseDown:br.default.func,scale:br.default.number,className:aF.dontSetMe,style:aF.dontSetMe,transform:aF.dontSetMe});_n(BN,"defaultProps",{allowAnyClick:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1});(function(e){function g(R,H){if(!(R instanceof H))throw new TypeError("Cannot call a class as a function")}function i(R,H){for(var k=0;k"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function c(R){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(k){return k.__proto__||Object.getPrototypeOf(k)},c(R)}Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"DraggableCore",{enumerable:!0,get:function(){return y.default}}),e.default=void 0;var u=v(N),d=B(tl),h=B(qi),m=B(Ort),f=iI,b=TA,p=HA,y=B(GN),Z=B(vN);function B(R){return R&&R.__esModule?R:{default:R}}function G(R){if(typeof WeakMap!="function")return null;var H=new WeakMap,k=new WeakMap;return(G=function(K){return K?k:H})(R)}function v(R,H){if(!H&&R&&R.__esModule)return R;if(R===null||typeof R!="object"&&typeof R!="function")return{default:R};var k=G(H);if(k&&k.has(R))return k.get(R);var K={},D=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var J in R)if(J!=="default"&&Object.prototype.hasOwnProperty.call(R,J)){var P=D?Object.getOwnPropertyDescriptor(R,J):null;P&&(P.get||P.set)?Object.defineProperty(K,J,P):K[J]=R[J]}return K.default=R,k&&k.set(R,K),K}function w(){return w=Object.assign?Object.assign.bind():function(R){for(var H=1;H{if((0,Z.default)("Draggable: onDragStart: %j",P),D.props.onStart(J,(0,b.createDraggableData)(A(D),P))===!1)return!1;D.setState({dragging:!0,dragged:!0})}),V(A(D),"onDrag",(J,P)=>{if(!D.state.dragging)return!1;(0,Z.default)("Draggable: onDrag: %j",P);const te=(0,b.createDraggableData)(A(D),P),q={x:te.x,y:te.y,slackX:0,slackY:0};if(D.props.bounds){const{x:j,y:ge}=q;q.x+=D.state.slackX,q.y+=D.state.slackY;const[Q,Ie]=(0,b.getBoundPosition)(A(D),q.x,q.y);q.x=Q,q.y=Ie,q.slackX=D.state.slackX+(j-q.x),q.slackY=D.state.slackY+(ge-q.y),te.x=q.x,te.y=q.y,te.deltaX=q.x-D.state.x,te.deltaY=q.y-D.state.y}if(D.props.onDrag(J,te)===!1)return!1;D.setState(q)}),V(A(D),"onDragStop",(J,P)=>{if(!D.state.dragging||D.props.onStop(J,(0,b.createDraggableData)(A(D),P))===!1)return!1;(0,Z.default)("Draggable: onDragStop: %j",P);const q={dragging:!1,slackX:0,slackY:0};if(!!D.props.position){const{x:j,y:ge}=D.props.position;q.x=j,q.y=ge}D.setState(q)}),D.state={dragging:!1,dragged:!1,x:K.position?K.position.x:K.defaultPosition.x,y:K.position?K.position.y:K.defaultPosition.y,prevPropsPosition:{...K.position},slackX:0,slackY:0,isElementSVG:!1},K.position&&!(K.onDrag||K.onStop)&&console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element."),D}return I(k,[{key:"componentDidMount",value:function(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}},{key:"componentWillUnmount",value:function(){this.setState({dragging:!1})}},{key:"findDOMNode",value:function(){var D,J;return(D=(J=this.props)===null||J===void 0||(J=J.nodeRef)===null||J===void 0?void 0:J.current)!==null&&D!==void 0?D:h.default.findDOMNode(this)}},{key:"render",value:function(){const{axis:D,bounds:J,children:P,defaultPosition:te,defaultClassName:q,defaultClassNameDragging:$,defaultClassNameDragged:j,position:ge,positionOffset:Q,scale:Ie,...he}=this.props;let ne={},be=null;const ve=!!!ge||this.state.dragging,We=ge||te,Be={x:(0,b.canDragX)(this)&&ve?this.state.x:We.x,y:(0,b.canDragY)(this)&&ve?this.state.y:We.y};this.state.isElementSVG?be=(0,f.createSVGTransform)(Be,Q):ne=(0,f.createCSSTransform)(Be,Q);const Je=(0,m.default)(P.props.className||"",q,{[$]:this.state.dragging,[j]:this.state.dragged});return u.createElement(y.default,w({},he,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),u.cloneElement(u.Children.only(P),{className:Je,style:{...P.props.style,...ne},transform:be}))}}],[{key:"getDerivedStateFromProps",value:function(D,J){let{position:P}=D,{prevPropsPosition:te}=J;return P&&(!te||P.x!==te.x||P.y!==te.y)?((0,Z.default)("Draggable: getDerivedStateFromProps %j",{position:P,prevPropsPosition:te}),{x:P.x,y:P.y,prevPropsPosition:{...P}}):null}}]),k}(u.Component);e.default=W,V(W,"displayName","Draggable"),V(W,"propTypes",{...y.default.propTypes,axis:d.default.oneOf(["both","x","y","none"]),bounds:d.default.oneOfType([d.default.shape({left:d.default.number,right:d.default.number,top:d.default.number,bottom:d.default.number}),d.default.string,d.default.oneOf([!1])]),defaultClassName:d.default.string,defaultClassNameDragging:d.default.string,defaultClassNameDragged:d.default.string,defaultPosition:d.default.shape({x:d.default.number,y:d.default.number}),positionOffset:d.default.shape({x:d.default.oneOfType([d.default.number,d.default.string]),y:d.default.oneOfType([d.default.number,d.default.string])}),position:d.default.shape({x:d.default.number,y:d.default.number}),className:p.dontSetMe,style:p.dontSetMe,transform:p.dontSetMe}),V(W,"defaultProps",{...y.default.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})})(JZe);const{default:eGe,DraggableCore:YCt}=JZe;ZN.exports=eGe;ZN.exports.default=eGe;ZN.exports.DraggableCore=YCt;var KCt=ZN.exports,vQ={};vQ.__esModule=!0;vQ.cloneElement=ECt;var FCt=DCt(N);function DCt(e){return e&&e.__esModule?e:{default:e}}function Bie(e,g){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var I=Object.getOwnPropertySymbols(e);g&&(I=I.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),i.push.apply(i,I)}return i}function Sie(e){for(var g=1;g=0)&&(i[n]=e[n]);return i}function sF(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function UCt(e,g){e.prototype=Object.create(g.prototype),e.prototype.constructor=e,e.__proto__=g}function Hp(e,g,i){return g in e?Object.defineProperty(e,g,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[g]=i,e}var BQ=function(e){UCt(g,e);function g(){for(var I,n=arguments.length,r=new Array(n),C=0;C=0)&&(i[n]=e[n]);return i}function Wie(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function tot(e,g){e.prototype=Object.create(g.prototype),e.prototype.constructor=e,e.__proto__=g}function hX(e,g,i){return g in e?Object.defineProperty(e,g,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[g]=i,e}var iGe=function(e){tot(g,e);function g(){for(var I,n=arguments.length,r=new Array(n),C=0;Cg.w||I>g.maxW)return new Error("minWidth larger than item width/maxWidth")},maxW:function(g,i){var I=g[i];if(typeof I!="number")return new Error("maxWidth not Number");if(Ig.h||I>g.maxH)return new Error("minHeight larger than item height/maxHeight")},maxH:function(g,i){var I=g[i];if(typeof I!="number")return new Error("maxHeight not Number");if(I0,m){var b=1/0,p=1/0;f.forEach(function(Z){Z.x>h.x&&(b=Math.min(b,Z.x)),Z.y>h.y&&(p=Math.min(p,Z.y))}),Number.isFinite(b)&&(h.w=b-h.x),Number.isFinite(p)&&(h.h=p-h.y)}}m||(h.w=n,h.h=r);var y={w:h.w,h:h.h,x:h.x,y:h.y,static:!0,i:I};this.props.onResize(A,l,h,y,o,a),this.setState({layout:(0,zg.compact)(A,this.compactType(),u),activeDrag:y})}},g.prototype.onResizeStop=function(I,n,r,C){var o=C.e,a=C.node,s=this.state,A=s.layout,l=s.oldResizeItem,c=this.props.cols,u=(0,zg.getLayoutItem)(A,I);this.props.onResizeStop(A,l,u,null,o,a);var d=(0,zg.compact)(A,this.compactType(),c),h=this.state.oldLayout;this.setState({activeDrag:null,layout:d,oldResizeItem:null,oldLayout:null}),this.onLayoutMaybeChanged(d,h)},g.prototype.placeholder=function(){var I=this.state.activeDrag;if(!I)return null;var n=this.props,r=n.width,C=n.cols,o=n.margin,a=n.containerPadding,s=n.rowHeight,A=n.maxRows,l=n.useCSSTransforms;return ju.default.createElement(Nie.default,{w:I.w,h:I.h,x:I.x,y:I.y,i:I.i,className:"react-grid-placeholder",containerWidth:r,cols:C,margin:o,containerPadding:a||o,maxRows:A,rowHeight:s,isDraggable:!1,isResizable:!1,useCSSTransforms:l},ju.default.createElement("div",null))},g.prototype.processGridItem=function(I){if(!(!I||!I.key)){var n=(0,zg.getLayoutItem)(this.state.layout,String(I.key));if(!n)return null;var r=this.props,C=r.width,o=r.cols,a=r.margin,s=r.containerPadding,A=r.rowHeight,l=r.maxRows,c=r.isDraggable,u=r.isResizable,d=r.useCSSTransforms,h=r.draggableCancel,m=r.draggableHandle,f=this.state.mounted,b=!!(!n.static&&c&&(n.isDraggable||n.isDraggable==null)),p=!!(!n.static&&u&&(n.isResizable||n.isResizable==null));return ju.default.createElement(Nie.default,{containerWidth:C,cols:o,margin:a,containerPadding:s||a,maxRows:l,rowHeight:A,cancel:h,handle:m,onDragStop:this.onDragStop,onDragStart:this.onDragStart,onDrag:this.onDrag,onResizeStart:this.onResizeStart,onResize:this.onResize,onResizeStop:this.onResizeStop,isDraggable:b,isResizable:p,useCSSTransforms:d&&f,usePercentages:!f,w:n.w,h:n.h,x:n.x,y:n.y,i:n.i,minH:n.minH,minW:n.minW,maxH:n.maxH,maxW:n.maxW,static:n.static},I)}},g.prototype.render=function(){var I=this,n=this.props,r=n.className,C=n.style,o=(0,hot.default)("react-grid-layout",r),a=Hie({height:this.containerHeight()},C);return ju.default.createElement("div",{className:o,style:a},ju.default.Children.map(this.props.children,function(s){return I.processGridItem(s)}),this.placeholder())},g}(ju.default.Component);wN.displayName="ReactGridLayout";wN.propTypes={className:ui.default.string,style:ui.default.object,width:ui.default.number,autoSize:ui.default.bool,cols:ui.default.number,draggableCancel:ui.default.string,draggableHandle:ui.default.string,verticalCompact:function(g){g.verticalCompact},compactType:ui.default.oneOf(["vertical","horizontal"]),layout:function(g){var i=g.layout;i!==void 0&&(0,zg.validateLayout)(i,"layout")},margin:ui.default.arrayOf(ui.default.number),containerPadding:ui.default.arrayOf(ui.default.number),rowHeight:ui.default.number,maxRows:ui.default.number,isDraggable:ui.default.bool,isResizable:ui.default.bool,preventCollision:ui.default.bool,useCSSTransforms:ui.default.bool,onLayoutChange:ui.default.func,onDragStart:ui.default.func,onDrag:ui.default.func,onDragStop:ui.default.func,onResizeStart:ui.default.func,onResize:ui.default.func,onResizeStop:ui.default.func,children:function(g,i){var I=g[i],n={};ju.default.Children.forEach(I,function(r){if(n[r.key])throw new Error('Duplicate child key "'+r.key+'" found! This will cause problems in ReactGridLayout.');n[r.key]=!0})}};wN.defaultProps={autoSize:!0,cols:12,className:"",style:{},draggableHandle:"",draggableCancel:"",containerPadding:null,rowHeight:150,maxRows:1/0,layout:[],margin:[10,10],isDraggable:!0,isResizable:!0,useCSSTransforms:!0,verticalCompact:!0,compactType:"vertical",preventCollision:!1,onLayoutChange:zg.noop,onDragStart:zg.noop,onDrag:zg.noop,onDragStop:zg.noop,onResizeStart:zg.noop,onResize:zg.noop,onResizeStop:zg.noop};var yot=function(){this.state={activeDrag:null,layout:(0,zg.synchronizeLayoutWithChildren)(this.props.layout,this.props.children,this.props.cols,this.compactType()),mounted:!1,oldDragItem:null,oldLayout:null,oldResizeItem:null}};fN.default=wN;var RQ={},rm={};rm.__esModule=!0;rm.getBreakpointFromWidth=Zot;rm.getColsFromBreakpoint=Got;rm.findOrGenerateResponsiveLayout=vot;rm.sortBreakpoints=VQ;var cV=xg;function Zot(e,g){for(var i=VQ(e),I=i[0],n=1,r=i.length;ne[C]&&(I=C)}return I}function Got(e,g){if(!g[e])throw new Error("ResponsiveReactGridLayout: `cols` entry for breakpoint "+e+" is missing!");return g[e]}function vot(e,g,i,I,n,r){if(e[i])return(0,cV.cloneLayout)(e[i]);for(var C=e[I],o=VQ(g),a=o.slice(o.indexOf(i)),s=0,A=a.length;s=0||Object.prototype.hasOwnProperty.call(e,I)&&(i[I]=e[I]);return i}function Xot(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Kie(e,g){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g&&(typeof g=="object"||typeof g=="function")?g:e}function Hot(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof g);e.prototype=Object.create(g&&g.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),g&&(Object.setPrototypeOf?Object.setPrototypeOf(e,g):e.__proto__=g)}var Fie=function(g){return Object.prototype.toString.call(g)},WQ=function(e){Hot(g,e);function g(){var i,I,n;Xot(this,g);for(var r=arguments.length,C=Array(r),o=0;o=0||Object.prototype.hasOwnProperty.call(e,I)&&(i[I]=e[I]);return i}function xot(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Die(e,g){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g&&(typeof g=="object"||typeof g=="function")?g:e}function Eot(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof g);e.prototype=Object.create(g&&g.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),g&&(Object.setPrototypeOf?Object.setPrototypeOf(e,g):e.__proto__=g)}function Mot(e){var g,i;return i=g=function(I){Eot(n,I);function n(){var r,C,o;xot(this,n);for(var a=arguments.length,s=Array(a),A=0;A"u")return null;var i=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")(),I=i.requestAnimationFrame||i.mozRequestAnimationFrame||i.webkitRequestAnimationFrame||function(A){return i.setTimeout(A,20)},n=i.cancelAnimationFrame||i.mozCancelAnimationFrame||i.webkitCancelAnimationFrame||function(A){i.clearTimeout(A)};function r(A,l){var c=Object.prototype.toString.call(A),u=c==="[object Array]"||c==="[object NodeList]"||c==="[object HTMLCollection]"||c==="[object Object]"||typeof jQuery<"u"&&A instanceof jQuery||typeof Elements<"u"&&A instanceof Elements,d=0,h=A.length;if(u)for(;d=X&&(H+=V.value),V.mode==="max"&&W<=X&&(H+=V.value),R[k]||(R[k]=""),H&&(" "+R[k]+" ").indexOf(" "+H+" ")===-1&&(R[k]+=" "+H));for(var D in K)K.hasOwnProperty(D)&&(R[K[D]]?this.element.setAttribute(K[D],R[K[D]].substr(1)):this.element.removeAttribute(K[D]))}}function c(G,v){G.elementQueriesSetupInformation||(G.elementQueriesSetupInformation=new l(G,v)),G.elementQueriesSensor||(G.elementQueriesSensor=new i(G,function(){G.elementQueriesSetupInformation.call()}))}function u(G,v,w,V){if(typeof C[G]>"u"){C[G]=[];var S=o.length;r.innerHTML+=` +`+G+" {animation: 0.1s element-queries;}",r.innerHTML+=` +`+G+" > .resize-sensor {min-width: "+S+"px;}",o.push(G)}C[G].push({mode:v,property:w,value:V})}function d(G){var v;if(document.querySelectorAll&&(v=G?G.querySelectorAll.bind(G):document.querySelectorAll.bind(document)),!v&&typeof $$<"u"&&(v=$$),!v&&typeof jQuery<"u"&&(v=jQuery),!v)throw"No document.querySelectorAll, jQuery or Mootools's $$ found.";return v}function h(G){var v=d(G);for(var w in C)if(C.hasOwnProperty(w))for(var V=v(w,G),S=0,X=V.length;Sw[P].minWidth&&(J=P);if(J||(J=S),X!==J)if(W[J])v[X].style.display="none",v[J].style.display="block",X=J;else{var te=new Image;te.onload=function(){v[J].src=V[J],v[X].style.display="none",v[J].style.display="block",W[J]=!0,X=J},te.src=V[J]}else v[J].src=V[J]}G.resizeSensorInstance=new i(G,D),D()}function f(){for(var G=d(),v=G("[data-responsive-image],[responsive-image]"),w=0,V=v.length;w img, [data-responsive-image] {overflow: hidden; padding: 0; } [responsive-image] > img, [data-responsive-image] > img {width: 100%;}",r.innerHTML+=` +@keyframes element-queries { 0% { visibility: inherit; } }`,document.getElementsByTagName("head")[0].appendChild(r),B=!0);for(var v=0,w=document.styleSheets.length;v\s{0,}<").replace(/-1?(C+=a[r]+i[o],n=!0,(i[o].search(/-->/)>-1||i[o].search(/\]>/)>-1||i[o].search(/!DOCTYPE/)>-1)&&(n=!1)):i[o].search(/-->/)>-1||i[o].search(/\]>/)>-1?(C+=i[o],n=!1):/^<\w/.exec(i[o-1])&&/^<\/\w/.exec(i[o])&&/^<[\w:\-\.\,]+/.exec(i[o-1])==/^<\/[\w:\-\.\,]+/.exec(i[o])[0].replace("/","")?(C+=i[o],n||r--):i[o].search(/<\w/)>-1&&i[o].search(/<\//)==-1&&i[o].search(/\/>/)==-1?C=n?C+=i[o]:C+=a[r++]+i[o]:i[o].search(/<\w/)>-1&&i[o].search(/<\//)>-1?C=n?C+=i[o]:C+=a[r]+i[o]:i[o].search(/<\//)>-1?C=n?C+=i[o]:C+=a[--r]+i[o]:i[o].search(/\/>/)>-1?C=n?C+=i[o]:C+=a[r]+i[o]:i[o].search(/<\?/)>-1||i[o].search(/xmlns\:/)>-1||i[o].search(/xmlns\=/)>-1?C+=a[r]+i[o]:C+=i[o];return C[0]==` +`?C.slice(1):C};il.prototype.json=function(e,i){var i=i||this.step;return typeof JSON>"u"?e:typeof e=="string"?JSON.stringify(JSON.parse(e),null,i):typeof e=="object"?JSON.stringify(e,null,i):e};il.prototype.css=function(e,g){var i=e.replace(/\s{1,}/g," ").replace(/\{/g,"{~::~").replace(/\}/g,"~::~}~::~").replace(/\;/g,";~::~").replace(/\/\*/g,"~::~/*").replace(/\*\//g,"*/~::~").replace(/~::~\s{0,}~::~/g,"~::~").split("~::~"),I=i.length,n=0,r="",C=0,o=g?VN(g):this.shift;for(C=0;C/g,"").replace(/[ \r\n\t]{1,}xmlns/g," xmlns");return i.replace(/>\s{0,}<")};il.prototype.jsonmin=function(e){return typeof JSON>"u"?e:JSON.stringify(JSON.parse(e),null,0)};il.prototype.cssmin=function(e,g){var i=g?e:e.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"");return i.replace(/\s{1,}/g," ").replace(/\{\s{1,}/g,"{").replace(/\}\s{1,}/g,"}").replace(/\;\s{1,}/g,";").replace(/\/\*\s{1,}/g,"/*").replace(/\*\/\s{1,}/g,"*/")};il.prototype.sqlmin=function(e){return e.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")")};var Lot=new il;const Uot=Or(Lot);var Qot=function(g,i){if(i=i.split(":")[0],g=+g,!g)return!1;switch(i){case"http":case"ws":return g!==80;case"https":case"wss":return g!==443;case"ftp":return g!==21;case"gopher":return g!==70;case"file":return!1}return g!==0},TQ={},jot=Object.prototype.hasOwnProperty,$ot;function xie(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function Eie(e){try{return encodeURIComponent(e)}catch{return null}}function qot(e){for(var g=/([^=?#&]+)=?([^&]*)/g,i={},I;I=g.exec(e);){var n=xie(I[1]),r=xie(I[2]);n===null||r===null||n in i||(i[n]=r)}return i}function eat(e,g){g=g||"";var i=[],I,n;typeof g!="string"&&(g="?");for(n in e)if(jot.call(e,n)){if(I=e[n],!I&&(I===null||I===$ot||isNaN(I))&&(I=""),n=Eie(n),I=Eie(I),n===null||I===null)continue;i.push(n+"="+I)}return i.length?g+i.join("&"):""}TQ.stringify=eat;TQ.parse=qot;var CGe=Qot,WN=TQ,tat=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,oGe=/[\n\r\t]/g,gat=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,aGe=/:\d+$/,iat=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,Iat=/^[a-zA-Z]:/;function NQ(e){return(e||"").toString().replace(tat,"")}var oz=[["#","hash"],["?","query"],function(g,i){return dA(i.protocol)?g.replace(/\\/g,"/"):g},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],Mie={hash:1,query:1};function AGe(e){var g;typeof window<"u"?g=window:typeof globalThis<"u"?g=globalThis:typeof self<"u"?g=self:g={};var i=g.location||{};e=e||i;var I={},n=typeof e,r;if(e.protocol==="blob:")I=new GA(unescape(e.pathname),{});else if(n==="string"){I=new GA(e,{});for(r in Mie)delete I[r]}else if(n==="object"){for(r in e)r in Mie||(I[r]=e[r]);I.slashes===void 0&&(I.slashes=gat.test(e.href))}return I}function dA(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function sGe(e,g){e=NQ(e),e=e.replace(oGe,""),g=g||{};var i=iat.exec(e),I=i[1]?i[1].toLowerCase():"",n=!!i[2],r=!!i[3],C=0,o;return n?r?(o=i[2]+i[3]+i[4],C=i[2].length+i[3].length):(o=i[2]+i[4],C=i[2].length):r?(o=i[3]+i[4],C=i[3].length):o=i[4],I==="file:"?C>=2&&(o=o.slice(2)):dA(I)?o=i[4]:I?n&&(o=o.slice(2)):C>=2&&dA(g.protocol)&&(o=i[4]),{protocol:I,slashes:n||dA(I),slashesCount:C,rest:o}}function nat(e,g){if(e==="")return g;for(var i=(g||"/").split("/").slice(0,-1).concat(e.split("/")),I=i.length,n=i[I-1],r=!1,C=0;I--;)i[I]==="."?i.splice(I,1):i[I]===".."?(i.splice(I,1),C++):C&&(I===0&&(r=!0),i.splice(I,1),C--);return r&&i.unshift(""),(n==="."||n==="..")&&i.push(""),i.join("/")}function GA(e,g,i){if(e=NQ(e),e=e.replace(oGe,""),!(this instanceof GA))return new GA(e,g,i);var I,n,r,C,o,a,s=oz.slice(),A=typeof g,l=this,c=0;for(A!=="object"&&A!=="string"&&(i=g,g=null),i&&typeof i!="function"&&(i=WN.parse),g=AGe(g),n=sGe(e||"",g),I=!n.protocol&&!n.slashes,l.slashes=n.slashes||I&&g.slashes,l.protocol=n.protocol||g.protocol||"",e=n.rest,(n.protocol==="file:"&&(n.slashesCount!==2||Iat.test(e))||!n.slashes&&(n.protocol||n.slashesCount<2||!dA(l.protocol)))&&(s[3]=[/(.*)/,"pathname"]);c{try{return new window.BroadcastChannel("pub-sub-es")}catch{return{postMessage:()=>{}}}})(),kQ=(e,g)=>g?e.toLowerCase():e,cGe=(e,{caseInsensitive:g}={})=>(i,I,n=1/0)=>{const r=kQ(i,g);return e[r]||(e[r]=[],e.__times__[r]=[]),e[r].push(I),e.__times__[r].push(+n||1/0),{event:r,handler:I}},YQ=(e,{caseInsensitive:g}={})=>(i,I)=>{typeof i=="object"&&(I=i.handler,i=i.event);const n=kQ(i,g);if(!e[n])return;const r=e[n].indexOf(I);r===-1||r>=e[n].length||(e[n].splice(r,1),e.__times__[n].splice(r,1))},zie=(e,g)=>()=>{e.forEach(i=>i(g))},uGe=(e,{isGlobal:g,caseInsensitive:i,async:I}={})=>{const n=YQ(e);return(r,C,o={})=>{const a=kQ(r,i);if(!e[a])return;const s=[...e[a]];if(s.forEach((A,l)=>{--e.__times__[a][l]<1&&n(a,A)}),I||o.async?setTimeout(zie(s,C),0):zie(s,C)(),g&&!o.isNoGlobalBroadcast)try{lGe.postMessage({event:a,news:C})}catch(A){if(A instanceof DOMException)console.warn(`Could not broadcast '${a}' globally. Payload is not clonable.`);else throw A}}},dGe=e=>()=>{Object.keys(e).filter(g=>g[0]!=="_").forEach(g=>{e[g]=void 0,e.__times__[g]=void 0,delete e[g],delete e.__times__[g]})},hGe=()=>({__times__:{}}),XN=(e={})=>{const g=e.async||!1,i=e.caseInsensitive||!1,I=e.stack||hGe();return I.__times__||(I.__times__={}),{publish:uGe(I,{async:g,caseInsensitive:i}),subscribe:cGe(I,{caseInsensitive:i}),unsubscribe:YQ(I,{caseInsensitive:i}),clear:dGe(I),stack:I}},gZ=hGe(),_G={publish:uGe(gZ,{isGlobal:!0}),subscribe:cGe(gZ),unsubscribe:YQ(gZ),clear:dGe(gZ),stack:gZ};lGe.onmessage=({data:{event:e,news:g}})=>_G.publish(e,g,{isNoGlobalBroadcast:!0});const jt={"context-menu":"_context-menu_18ock_1","context-menu-dark":"_context-menu-dark_18ock_12","context-menu-icon":"_context-menu-icon_18ock_17","context-menu-item":"_context-menu-item_18ock_27","context-menu-hr":"_context-menu-hr_18ock_38","play-icon":"_play-icon_18ock_45","context-menu-span":"_context-menu-span_18ock_52","context-menu-thumbnail":"_context-menu-thumbnail_18ock_60","context-menu-thumbnail-inline":"_context-menu-thumbnail-inline_18ock_65"};function ig(e){return N.createElement("div",{"data-menu-item-for":typeof e.children=="string"?e.children:null,className:jt["context-menu-item"],onClick:g=>e.onClick(g),onMouseEnter:g=>e.onMouseEnter(g),onMouseLeave:g=>e.onMouseLeave(g),role:"button",tabIndex:0},N.createElement("span",{className:jt["context-menu-span"]},e.children))}ig.defaultProps={onMouseEnter:()=>{},onMouseLeave:()=>{}};ig.propTypes={children:L.node.isRequired,onClick:L.func.isRequired,onMouseEnter:L.func,onMouseLeave:L.func};var Aat={value:()=>{}};function M0(){for(var e=0,g=arguments.length,i={},I;e=0&&(I=i.slice(n+1),i=i.slice(0,n)),i&&!g.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:I}})}_1.prototype=M0.prototype={constructor:_1,on:function(e,g){var i=this._,I=sat(e+"",i),n,r=-1,C=I.length;if(arguments.length<2){for(;++r0)for(var i=new Array(n),I=0,n,r;I()=>e;function az(e,{sourceEvent:g,subject:i,target:I,identifier:n,active:r,x:C,y:o,dx:a,dy:s,dispatch:A}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:g,enumerable:!0,configurable:!0},subject:{value:i,enumerable:!0,configurable:!0},target:{value:I,enumerable:!0,configurable:!0},identifier:{value:n,enumerable:!0,configurable:!0},active:{value:r,enumerable:!0,configurable:!0},x:{value:C,enumerable:!0,configurable:!0},y:{value:o,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:s,enumerable:!0,configurable:!0},_:{value:A}})}az.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function cat(e){return!e.ctrlKey&&!e.button}function uat(){return this.parentNode}function dat(e,g){return g??{x:e.x,y:e.y}}function hat(){return navigator.maxTouchPoints||"ontouchstart"in this}function jA(){var e=cat,g=uat,i=dat,I=hat,n={},r=M0("start","drag","end"),C=0,o,a,s,A,l=0;function c(y){y.on("mousedown.drag",u).filter(I).on("touchstart.drag",m).on("touchmove.drag",f).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(y,Z){if(!(A||!e.call(this,y,Z))){var B=p(this,g.call(this,y,Z),y,Z,"mouse");B&&(hg(y.view).on("mousemove.drag",d,!0).on("mouseup.drag",h,!0),HN(y.view),dF(y),s=!1,o=y.clientX,a=y.clientY,B("start",y))}}function d(y){if(Np(y),!s){var Z=y.clientX-o,B=y.clientY-a;s=Z*Z+B*B>l}n.mouse("drag",y)}function h(y){hg(y.view).on("mousemove.drag mouseup.drag",null),TN(y.view,s),Np(y),n.mouse("end",y)}function m(y,Z){if(e.call(this,y,Z)){var B=y.changedTouches,G=g.call(this,y,Z),v=B.length,w,V;for(w=0;w=0&&e._call.call(null,g),e=e._next;--Nb}function Jie(){oh=(pX=YB.now())+NN,Nb=JZ=0;try{pat()}finally{Nb=0,yat(),oh=0}}function bat(){var e=YB.now(),g=e-pX;g>mGe&&(NN-=g,pX=e)}function yat(){for(var e,g=fX,i,I=1/0;g;)g._call?(I>g._time&&(I=g._time),e=g,g=g._next):(i=g._next,g._next=null,g=e?e._next=i:fX=i);OZ=e,Az(I)}function Az(e){if(!Nb){JZ&&(JZ=clearTimeout(JZ));var g=e-oh;g>24?(e<1/0&&(JZ=setTimeout(Jie,e-YB.now()-NN)),iZ&&(iZ=clearInterval(iZ))):(iZ||(pX=YB.now(),iZ=setInterval(bat,mGe)),Nb=1,fGe(Jie))}}function Oie(e,g,i){var I=new bX;return g=g==null?0:+g,I.restart(n=>{I.stop(),e(n+g)},g,i),I}var Zat=M0("start","end","cancel","interrupt"),Gat=[],bGe=0,_ie=1,sz=2,L1=3,Lie=4,lz=5,U1=6;function kN(e,g,i,I,n,r){var C=e.__transition;if(!C)e.__transition={};else if(i in C)return;vat(e,i,{name:g,index:I,group:n,on:Zat,tween:Gat,time:r.time,delay:r.delay,duration:r.duration,ease:r.ease,timer:null,state:bGe})}function FQ(e,g){var i=ya(e,g);if(i.state>bGe)throw new Error("too late; already scheduled");return i}function NA(e,g){var i=ya(e,g);if(i.state>L1)throw new Error("too late; already running");return i}function ya(e,g){var i=e.__transition;if(!i||!(i=i[g]))throw new Error("transition not found");return i}function vat(e,g,i){var I=e.__transition,n;I[g]=i,i.timer=pGe(r,0,i.time);function r(s){i.state=_ie,i.timer.restart(C,i.delay,i.time),i.delay<=s&&C(s-i.delay)}function C(s){var A,l,c,u;if(i.state!==_ie)return a();for(A in I)if(u=I[A],u.name===i.name){if(u.state===L1)return Oie(C);u.state===Lie?(u.state=U1,u.timer.stop(),u.on.call("interrupt",e,e.__data__,u.index,u.group),delete I[A]):+Asz&&I.state=0&&(g=g.slice(0,i)),!g||g==="start"})}function eAt(e,g,i){var I,n,r=qat(g)?FQ:NA;return function(){var C=r(this,e),o=C.on;o!==I&&(n=(I=o).copy()).on(g,i),C.on=n}}function tAt(e,g){var i=this._id;return arguments.length<2?ya(this.node(),i).on.on(e):this.each(eAt(i,e,g))}function gAt(e){return function(){var g=this.parentNode;for(var i in this.__transition)if(+i!==e)return;g&&g.removeChild(this)}}function iAt(){return this.on("end.remove",gAt(this._id))}function IAt(e){var g=this._name,i=this._id;typeof e!="function"&&(e=xS(e));for(var I=this._groups,n=I.length,r=new Array(n),C=0;C()=>e;function VAt(e,{sourceEvent:g,target:i,selection:I,mode:n,dispatch:r}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:g,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},selection:{value:I,enumerable:!0,configurable:!0},mode:{value:n,enumerable:!0,configurable:!0},_:{value:r}})}function WAt(e){e.stopImmediatePropagation()}function mF(e){e.preventDefault(),e.stopImmediatePropagation()}var Uie={name:"drag"},fF={name:"space"},xm={name:"handle"},Em={name:"center"};const{abs:Qie,max:Wn,min:Xn}=Math;function jie(e){return[+e[0],+e[1]]}function uz(e){return[jie(e[0]),jie(e[1])]}var Q1={name:"x",handles:["w","e"].map(KB),input:function(e,g){return e==null?null:[[+e[0],g[0][1]],[+e[1],g[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}},j1={name:"y",handles:["n","s"].map(KB),input:function(e,g){return e==null?null:[[g[0][0],+e[0]],[g[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}},XAt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(KB),input:function(e){return e==null?null:uz(e)},output:function(e){return e}},zA={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},$ie={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},qie={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},HAt={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},TAt={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function KB(e){return{type:e}}function NAt(e){return!e.ctrlKey&&!e.button}function kAt(){var e=this.ownerSVGElement||this;return e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function YAt(){return navigator.maxTouchPoints||"ontouchstart"in this}function pF(e){for(;!e.__brush;)if(!(e=e.parentNode))return;return e.__brush}function KAt(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function FAt(e){var g=e.__brush;return g?g.dim.output(g.selection):null}function YN(){return EQ(Q1)}function QS(){return EQ(j1)}function xQ(){return EQ(XAt)}function EQ(e){var g=kAt,i=NAt,I=YAt,n=!0,r=M0("start","brush","end"),C=6,o;function a(m){var f=m.property("__brush",h).selectAll(".overlay").data([KB("overlay")]);f.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",zA.overlay).merge(f).each(function(){var p=pF(this).extent;hg(this).attr("x",p[0][0]).attr("y",p[0][1]).attr("width",p[1][0]-p[0][0]).attr("height",p[1][1]-p[0][1])}),m.selectAll(".selection").data([KB("selection")]).enter().append("rect").attr("class","selection").attr("cursor",zA.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var b=m.selectAll(".handle").data(e.handles,function(p){return p.type});b.exit().remove(),b.enter().append("rect").attr("class",function(p){return"handle handle--"+p.type}).attr("cursor",function(p){return zA[p.type]}),m.each(s).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",c).filter(I).on("touchstart.brush",c).on("touchmove.brush",u).on("touchend.brush touchcancel.brush",d).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}a.move=function(m,f){m.tween?m.on("start.brush",function(b){A(this,arguments).beforestart().start(b)}).on("interrupt.brush end.brush",function(b){A(this,arguments).end(b)}).tween("brush",function(){var b=this,p=b.__brush,y=A(b,arguments),Z=p.selection,B=e.input(typeof f=="function"?f.apply(this,arguments):f,p.extent),G=tm(Z,B);function v(w){p.selection=w===1&&B===null?null:G(w),s.call(b),y.brush()}return Z!==null&&B!==null?v:v(1)}):m.each(function(){var b=this,p=arguments,y=b.__brush,Z=e.input(typeof f=="function"?f.apply(b,p):f,y.extent),B=A(b,p).beforestart();cz(b),y.selection=Z===null?null:Z,s.call(b),B.start().brush().end()})},a.clear=function(m){a.move(m,null)};function s(){var m=hg(this),f=pF(this).selection;f?(m.selectAll(".selection").style("display",null).attr("x",f[0][0]).attr("y",f[0][1]).attr("width",f[1][0]-f[0][0]).attr("height",f[1][1]-f[0][1]),m.selectAll(".handle").style("display",null).attr("x",function(b){return b.type[b.type.length-1]==="e"?f[1][0]-C/2:f[0][0]-C/2}).attr("y",function(b){return b.type[0]==="s"?f[1][1]-C/2:f[0][1]-C/2}).attr("width",function(b){return b.type==="n"||b.type==="s"?f[1][0]-f[0][0]+C:C}).attr("height",function(b){return b.type==="e"||b.type==="w"?f[1][1]-f[0][1]+C:C})):m.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function A(m,f,b){var p=m.__brush.emitter;return p&&(!b||!p.clean)?p:new l(m,f,b)}function l(m,f,b){this.that=m,this.args=f,this.state=m.__brush,this.active=0,this.clean=b}l.prototype={beforestart:function(){return++this.active===1&&(this.state.emitter=this,this.starting=!0),this},start:function(m,f){return this.starting?(this.starting=!1,this.emit("start",m,f)):this.emit("brush",m),this},brush:function(m,f){return this.emit("brush",m,f),this},end:function(m,f){return--this.active===0&&(delete this.state.emitter,this.emit("end",m,f)),this},emit:function(m,f,b){var p=hg(this.that).datum();r.call(m,this.that,new VAt(m,{sourceEvent:f,target:a,selection:e.output(this.state.selection),mode:b,dispatch:r}),p)}};function c(m){if(o&&!m.touches||!i.apply(this,arguments))return;var f=this,b=m.target.__data__.type,p=(n&&m.metaKey?b="overlay":b)==="selection"?Uie:n&&m.altKey?Em:xm,y=e===j1?null:HAt[b],Z=e===Q1?null:TAt[b],B=pF(f),G=B.extent,v=B.selection,w=G[0][0],V,S,X=G[0][1],W,R,H=G[1][0],k,K,D=G[1][1],J,P,te=0,q=0,$,j=y&&Z&&n&&m.shiftKey,ge,Q,Ie=Array.from(m.touches||[m],De=>{const Qe=De.identifier;return De=Pg(De,f),De.point0=De.slice(),De.identifier=Qe,De});if(b==="overlay"){v&&($=!0);const De=[Ie[0],Ie[1]||Ie[0]];B.selection=v=[[V=e===j1?w:Xn(De[0][0],De[1][0]),W=e===Q1?X:Xn(De[0][1],De[1][1])],[k=e===j1?H:Wn(De[0][0],De[1][0]),J=e===Q1?D:Wn(De[0][1],De[1][1])]],Ie.length>1&&We()}else V=v[0][0],W=v[0][1],k=v[1][0],J=v[1][1];S=V,R=W,K=k,P=J;var he=hg(f).attr("pointer-events","none"),ne=he.selectAll(".overlay").attr("cursor",zA[b]);cz(f);var be=A(f,arguments,!0).beforestart();if(m.touches)be.moved=ve,be.ended=Be;else{var pe=hg(m.view).on("mousemove.brush",ve,!0).on("mouseup.brush",Be,!0);n&&pe.on("keydown.brush",Je,!0).on("keyup.brush",Pe,!0),HN(m.view)}s.call(f),be.start(m,p.name);function ve(De){for(const Qe of De.changedTouches||[De])for(const _e of Ie)_e.identifier===Qe.identifier&&(_e.cur=Pg(Qe,f));if(j&&!ge&&!Q&&Ie.length===1){const Qe=Ie[0];Qie(Qe.cur[0]-Qe[0])>Qie(Qe.cur[1]-Qe[1])?Q=!0:ge=!0}for(const Qe of Ie)Qe.cur&&(Qe[0]=Qe.cur[0],Qe[1]=Qe.cur[1]);$=!0,mF(De),We(De)}function We(De){const Qe=Ie[0],_e=Qe.point0;var gt;switch(te=Qe[0]-_e[0],q=Qe[1]-_e[1],p){case fF:case Uie:{y&&(te=Wn(w-V,Xn(H-k,te)),S=V+te,K=k+te),Z&&(q=Wn(X-W,Xn(D-J,q)),R=W+q,P=J+q);break}case xm:{Ie[1]?(y&&(S=Wn(w,Xn(H,Ie[0][0])),K=Wn(w,Xn(H,Ie[1][0])),y=1),Z&&(R=Wn(X,Xn(D,Ie[0][1])),P=Wn(X,Xn(D,Ie[1][1])),Z=1)):(y<0?(te=Wn(w-V,Xn(H-V,te)),S=V+te,K=k):y>0&&(te=Wn(w-k,Xn(H-k,te)),S=V,K=k+te),Z<0?(q=Wn(X-W,Xn(D-W,q)),R=W+q,P=J):Z>0&&(q=Wn(X-J,Xn(D-J,q)),R=W,P=J+q));break}case Em:{y&&(S=Wn(w,Xn(H,V-te*y)),K=Wn(w,Xn(H,k+te*y))),Z&&(R=Wn(X,Xn(D,W-q*Z)),P=Wn(X,Xn(D,J+q*Z)));break}}K0&&(V=S-te),Z<0?J=P-q:Z>0&&(W=R-q),p=fF,ne.attr("cursor",zA.selection),We());break}default:return}mF(De)}function Pe(De){switch(De.keyCode){case 16:{j&&(ge=Q=j=!1,We());break}case 18:{p===Em&&(y<0?k=K:y>0&&(V=S),Z<0?J=P:Z>0&&(W=R),p=xm,We());break}case 32:{p===fF&&(De.altKey?(y&&(k=K-te*y,V=S+te*y),Z&&(J=P-q*Z,W=R+q*Z),p=Em):(y<0?k=K:y>0&&(V=S),Z<0?J=P:Z>0&&(W=R),p=xm),ne.attr("cursor",zA[b]),We());break}default:return}mF(De)}}function u(m){A(this,arguments).moved(m)}function d(m){A(this,arguments).ended(m)}function h(){var m=this.__brush||{selection:null};return m.extent=uz(g.apply(this,arguments)),m.dim=e,m}return a.extent=function(m){return arguments.length?(g=typeof m=="function"?m:hF(uz(m)),a):g},a.filter=function(m){return arguments.length?(i=typeof m=="function"?m:hF(!!m),a):i},a.touchable=function(m){return arguments.length?(I=typeof m=="function"?m:hF(!!m),a):I},a.handleSize=function(m){return arguments.length?(C=+m,a):C},a.keyModifiers=function(m){return arguments.length?(n=!!m,a):n},a.on=function(){var m=r.on.apply(r,arguments);return m===r?a:m},a}const DAt=Object.freeze(Object.defineProperty({__proto__:null,brush:xQ,brushSelection:FAt,brushX:YN,brushY:QS},Symbol.toStringTag,{value:"Module"}));function FB(){return FB=Object.assign?Object.assign.bind():function(e){for(var g=1;ge.length)&&(g=e.length);for(var i=0,I=new Array(g);i0&&arguments[0]!==void 0?arguments[0]:this.active.collection;return this.refs[i].sort(jAt)}}]),e}();function jAt(e,g){var i=e.node.sortableInfo.index,I=g.node.sortableInfo.index;return i-I}function $At(e,g,i){return e=e.slice(),e.splice(i<0?e.length+i:i,0,e.splice(g,1)[0]),e}function wGe(e,g){return Object.keys(e).reduce(function(i,I){return g.indexOf(I)===-1&&(i[I]=e[I]),i},{})}var Mm={end:["touchend","touchcancel","mouseup"],move:["touchmove","mousemove"],start:["touchstart","mousedown"]},RGe=function(){if(typeof window>"u"||typeof document>"u")return"";var e=window.getComputedStyle(document.documentElement,"")||["-moz-hidden-iframe"],g=(Array.prototype.slice.call(e).join("").match(/-(moz|webkit|ms)-/)||e.OLink===""&&["","o"])[1];switch(g){case"ms":return"ms";default:return g&&g.length?g[0].toUpperCase()+g.substr(1):""}}();function dV(e,g){Object.keys(g).forEach(function(i){e.style[i]=g[i]})}function hV(e,g){e.style["".concat(RGe,"Transform")]=g==null?"":"translate3d(".concat(g.x,"px,").concat(g.y,"px,0)")}function yF(e,g){e.style["".concat(RGe,"TransitionDuration")]=g==null?"":"".concat(g,"ms")}function _Z(e,g){for(;e;){if(g(e))return e;e=e.parentNode}return null}function tIe(e,g,i){return Math.max(e,Math.min(i,g))}function np(e){return e.substr(-2)==="px"?parseFloat(e):0}function qAt(e){var g=window.getComputedStyle(e);return{bottom:np(g.marginBottom),left:np(g.marginLeft),right:np(g.marginRight),top:np(g.marginTop)}}function PQ(e,g){var i=g.displayName||g.name;return i?"".concat(e,"(").concat(i,")"):e}function ZF(e,g){var i=e.getBoundingClientRect();return{top:i.top+g.top,left:i.left+g.left}}function IZ(e){return e.touches&&e.touches.length?{x:e.touches[0].pageX,y:e.touches[0].pageY}:e.changedTouches&&e.changedTouches.length?{x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}:{x:e.pageX,y:e.pageY}}function est(e){return e.touches&&e.touches.length||e.changedTouches&&e.changedTouches.length}function $1(e,g){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{left:0,top:0};if(e){var I={left:i.left+e.offsetLeft,top:i.top+e.offsetTop};return e.parentNode===g?I:$1(e.parentNode,g,I)}}function tst(e,g,i){return eg?e-1:e>i&&e0&&i[C].height>0){var o=r.getContext("2d");o.drawImage(i[C],0,0)}}),I}function mz(e){var g,i,I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{withRef:!1};return i=g=function(n){zQ(r,n);function r(){return jS(this,r),MQ(this,DB(r).apply(this,arguments))}return $S(r,[{key:"componentDidMount",value:function(){var o=ua.findDOMNode(this);o.sortableHandle=!0}},{key:"getWrappedInstance",value:function(){return ah(I.withRef,"To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableHandle() call"),this.refs.wrappedInstance}},{key:"render",value:function(){var o=I.withRef?"wrappedInstance":null;return U.createElement(e,FB({ref:o},this.props))}}]),r}(U.Component),Qg(g,"displayName",PQ("sortableHandle",e)),i}function iIe(e){return e.sortableHandle!=null}var rst=function(){function e(g,i){jS(this,e),this.container=g,this.onScrollCallback=i}return $S(e,[{key:"clear",value:function(){this.interval!=null&&(clearInterval(this.interval),this.interval=null)}},{key:"update",value:function(i){var I=this,n=i.translate,r=i.minTranslate,C=i.maxTranslate,o=i.width,a=i.height,s={x:0,y:0},A={x:1,y:1},l={x:10,y:10},c=this.container,u=c.scrollTop,d=c.scrollLeft,h=c.scrollHeight,m=c.scrollWidth,f=c.clientHeight,b=c.clientWidth,p=u===0,y=h-u-f===0,Z=d===0,B=m-d-b===0;n.y>=C.y-a/2&&!y?(s.y=1,A.y=l.y*Math.abs((C.y-a/2-n.y)/a)):n.x>=C.x-o/2&&!B?(s.x=1,A.x=l.x*Math.abs((C.x-o/2-n.x)/o)):n.y<=r.y+a/2&&!p?(s.y=-1,A.y=l.y*Math.abs((n.y-a/2-r.y)/a)):n.x<=r.x+o/2&&!Z&&(s.x=-1,A.x=l.x*Math.abs((n.x-o/2-r.x)/o)),this.interval&&(this.clear(),this.isAutoScrolling=!1),(s.x!==0||s.y!==0)&&(this.interval=setInterval(function(){I.isAutoScrolling=!0;var G={left:A.x*s.x,top:A.y*s.y};I.container.scrollTop+=G.top,I.container.scrollLeft+=G.left,I.onScrollCallback(G)},5))}}]),e}();function Cst(e){var g=e.node;return{height:g.offsetHeight,width:g.offsetWidth}}function ost(e){var g=[Id.Input,Id.Textarea,Id.Select,Id.Option,Id.Button];return!!(g.indexOf(e.target.tagName)!==-1||_Z(e.target,function(i){return i.contentEditable==="true"}))}var WGe={axis:L.oneOf(["x","y","xy"]),contentWindow:L.any,disableAutoscroll:L.bool,distance:L.number,getContainer:L.func,getHelperDimensions:L.func,helperClass:L.string,helperContainer:L.oneOfType([L.func,typeof HTMLElement>"u"?L.any:L.instanceOf(HTMLElement)]),hideSortableGhost:L.bool,keyboardSortingTransitionDuration:L.number,lockAxis:L.string,lockOffset:L.oneOfType([L.number,L.string,L.arrayOf(L.oneOfType([L.number,L.string]))]),lockToContainerEdges:L.bool,onSortEnd:L.func,onSortMove:L.func,onSortOver:L.func,onSortStart:L.func,pressDelay:L.number,pressThreshold:L.number,keyCodes:L.shape({lift:L.arrayOf(L.number),drop:L.arrayOf(L.number),cancel:L.arrayOf(L.number),up:L.arrayOf(L.number),down:L.arrayOf(L.number)}),shouldCancelStart:L.func,transitionDuration:L.number,updateBeforeSortStart:L.func,useDragHandle:L.bool,useWindowAsScrollContainer:L.bool},XGe={lift:[Tu.SPACE],drop:[Tu.SPACE],cancel:[Tu.ESC],up:[Tu.UP,Tu.LEFT],down:[Tu.DOWN,Tu.RIGHT]},ast={axis:"y",disableAutoscroll:!1,distance:0,getHelperDimensions:Cst,hideSortableGhost:!0,lockOffset:"50%",lockToContainerEdges:!1,pressDelay:0,pressThreshold:5,keyCodes:XGe,shouldCancelStart:ost,transitionDuration:300,useWindowAsScrollContainer:!1},Ast=Object.keys(WGe);function sst(e){ah(!(e.distance&&e.pressDelay),"Attempted to set both `pressDelay` and `distance` on SortableContainer, you may only use one or the other, not both at the same time.")}function lst(e,g){try{var i=e()}catch(I){return g(!0,I)}return i&&i.then?i.then(g.bind(null,!1),g.bind(null,!0)):g(!1,value)}function cst(e){var g,i,I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{withRef:!1};return i=g=function(n){zQ(r,n);function r(C){var o;return jS(this,r),o=MQ(this,DB(r).call(this,C)),Qg(yg(yg(o)),"state",{}),Qg(yg(yg(o)),"handleStart",function(a){var s=o.props,A=s.distance,l=s.shouldCancelStart;if(!(a.button===2||l(a))){o.touched=!0,o.position=IZ(a);var c=_Z(a.target,function(b){return b.sortableInfo!=null});if(c&&c.sortableInfo&&o.nodeIsChild(c)&&!o.state.sorting){var u=o.props.useDragHandle,d=c.sortableInfo,h=d.index,m=d.collection,f=d.disabled;if(f||u&&!_Z(a.target,iIe))return;o.manager.active={collection:m,index:h},!est(a)&&a.target.tagName===Id.Anchor&&a.preventDefault(),A||(o.props.pressDelay===0?o.handlePress(a):o.pressTimer=setTimeout(function(){return o.handlePress(a)},o.props.pressDelay))}}}),Qg(yg(yg(o)),"nodeIsChild",function(a){return a.sortableInfo.manager===o.manager}),Qg(yg(yg(o)),"handleMove",function(a){var s=o.props,A=s.distance,l=s.pressThreshold;if(!o.state.sorting&&o.touched&&!o._awaitingUpdateBeforeSortStart){var c=IZ(a),u={x:o.position.x-c.x,y:o.position.y-c.y},d=Math.abs(u.x)+Math.abs(u.y);o.delta=u,!A&&(!l||d>=l)?(clearTimeout(o.cancelTimer),o.cancelTimer=setTimeout(o.cancel,0)):A&&d>=A&&o.manager.isActive()&&o.handlePress(a)}}),Qg(yg(yg(o)),"handleEnd",function(){o.touched=!1,o.cancel()}),Qg(yg(yg(o)),"cancel",function(){var a=o.props.distance,s=o.state.sorting;s||(a||clearTimeout(o.pressTimer),o.manager.active=null)}),Qg(yg(yg(o)),"handlePress",function(a){try{var s=o.manager.getActive(),A=function(){if(s){var l=function(){var w=y.sortableInfo.index,V=qAt(y),S=Ist(o.container),X=o.scrollContainer.getBoundingClientRect(),W=d({index:w,node:y,collection:Z});if(o.node=y,o.margin=V,o.gridGap=S,o.width=W.width,o.height=W.height,o.marginOffset={x:o.margin.left+o.margin.right+o.gridGap.x,y:Math.max(o.margin.top,o.margin.bottom,o.gridGap.y)},o.boundingClientRect=y.getBoundingClientRect(),o.containerBoundingRect=X,o.index=w,o.newIndex=w,o.axis={x:u.indexOf("x")>=0,y:u.indexOf("y")>=0},o.offsetEdge=$1(y,o.container),B?o.initialOffset=IZ(bF({},a,{pageX:o.boundingClientRect.left,pageY:o.boundingClientRect.top})):o.initialOffset=IZ(a),o.initialScroll={left:o.scrollContainer.scrollLeft,top:o.scrollContainer.scrollTop},o.initialWindowScroll={left:window.pageXOffset,top:window.pageYOffset},o.helper=o.helperContainer.appendChild(nst(y)),dV(o.helper,{boxSizing:"border-box",height:"".concat(o.height,"px"),left:"".concat(o.boundingClientRect.left-V.left,"px"),pointerEvents:"none",position:"fixed",top:"".concat(o.boundingClientRect.top-V.top,"px"),width:"".concat(o.width,"px")}),B&&o.helper.focus(),m&&(o.sortableGhost=y,dV(y,{opacity:0,visibility:"hidden"})),o.minTranslate={},o.maxTranslate={},B){var R=p?{top:0,left:0,width:o.contentWindow.innerWidth,height:o.contentWindow.innerHeight}:o.containerBoundingRect,H=R.top,k=R.left,K=R.width,D=R.height,J=H+D,P=k+K;o.axis.x&&(o.minTranslate.x=k-o.boundingClientRect.left,o.maxTranslate.x=P-(o.boundingClientRect.left+o.width)),o.axis.y&&(o.minTranslate.y=H-o.boundingClientRect.top,o.maxTranslate.y=J-(o.boundingClientRect.top+o.height))}else o.axis.x&&(o.minTranslate.x=(p?0:X.left)-o.boundingClientRect.left-o.width/2,o.maxTranslate.x=(p?o.contentWindow.innerWidth:X.left+X.width)-o.boundingClientRect.left-o.width/2),o.axis.y&&(o.minTranslate.y=(p?0:X.top)-o.boundingClientRect.top-o.height/2,o.maxTranslate.y=(p?o.contentWindow.innerHeight:X.top+X.height)-o.boundingClientRect.top-o.height/2);h&&h.split(" ").forEach(function(te){return o.helper.classList.add(te)}),o.listenerNode=a.touches?y:o.contentWindow,B?(o.listenerNode.addEventListener("wheel",o.handleKeyEnd,!0),o.listenerNode.addEventListener("mousedown",o.handleKeyEnd,!0),o.listenerNode.addEventListener("keydown",o.handleKeyDown)):(Mm.move.forEach(function(te){return o.listenerNode.addEventListener(te,o.handleSortMove,!1)}),Mm.end.forEach(function(te){return o.listenerNode.addEventListener(te,o.handleSortEnd,!1)})),o.setState({sorting:!0,sortingIndex:w}),b&&b({node:y,index:w,collection:Z,isKeySorting:B,nodes:o.manager.getOrderedRefs(),helper:o.helper},a),B&&o.keyMove(0)},c=o.props,u=c.axis,d=c.getHelperDimensions,h=c.helperClass,m=c.hideSortableGhost,f=c.updateBeforeSortStart,b=c.onSortStart,p=c.useWindowAsScrollContainer,y=s.node,Z=s.collection,B=o.manager.isKeySorting,G=function(){if(typeof f=="function"){o._awaitingUpdateBeforeSortStart=!0;var v=lst(function(){var w=y.sortableInfo.index;return Promise.resolve(f({collection:Z,index:w,node:y,isKeySorting:B},a)).then(function(){})},function(w,V){if(o._awaitingUpdateBeforeSortStart=!1,w)throw V;return V});if(v&&v.then)return v.then(function(){})}}();return G&&G.then?G.then(l):l(G)}}();return Promise.resolve(A&&A.then?A.then(function(){}):void 0)}catch(l){return Promise.reject(l)}}),Qg(yg(yg(o)),"handleSortMove",function(a){var s=o.props.onSortMove;typeof a.preventDefault=="function"&&a.preventDefault(),o.updateHelperPosition(a),o.animateNodes(),o.autoscroll(),s&&s(a)}),Qg(yg(yg(o)),"handleSortEnd",function(a){var s=o.props,A=s.hideSortableGhost,l=s.onSortEnd,c=o.manager,u=c.active.collection,d=c.isKeySorting,h=o.manager.getOrderedRefs();o.listenerNode&&(d?(o.listenerNode.removeEventListener("wheel",o.handleKeyEnd,!0),o.listenerNode.removeEventListener("mousedown",o.handleKeyEnd,!0),o.listenerNode.removeEventListener("keydown",o.handleKeyDown)):(Mm.move.forEach(function(y){return o.listenerNode.removeEventListener(y,o.handleSortMove)}),Mm.end.forEach(function(y){return o.listenerNode.removeEventListener(y,o.handleSortEnd)}))),o.helper.parentNode.removeChild(o.helper),A&&o.sortableGhost&&dV(o.sortableGhost,{opacity:"",visibility:""});for(var m=0,f=h.length;mA)){o.prevIndex=c,o.newIndex=l;var u=tst(o.newIndex,o.prevIndex,o.index),d=s.find(function(B){var G=B.node;return G.sortableInfo.index===u}),h=d.node,m=o.containerScrollDelta,f=d.boundingClientRect||ZF(h,m),b=d.translate||{x:0,y:0},p={top:f.top+b.y-m.top,left:f.left+b.x-m.left},y=cB?B/2:this.height/2,width:this.width>Z?Z/2:this.width/2},v=h&&y>this.index&&y<=m,w=h&&y=m,V={x:0,y:0},S=u[f].edgeOffset;S||(S=$1(p,this.container),u[f].edgeOffset=S,h&&(u[f].boundingClientRect=ZF(p,l)));var X=f0&&u[f-1];if(X&&!X.edgeOffset&&(X.edgeOffset=$1(X.node,this.container),h&&(X.boundingClientRect=ZF(X.node,l))),y===this.index){s&&(this.sortableGhost=p,dV(p,{opacity:0,visibility:"hidden"}));continue}a&&yF(p,a),this.axis.x?this.axis.y?w||ythis.containerBoundingRect.width-G.width&&X&&(V.x=X.edgeOffset.left-S.left,V.y=X.edgeOffset.top-S.top),this.newIndex===null&&(this.newIndex=y)):(v||y>this.index&&(d.left+c.left+G.width>=S.left&&d.top+c.top+G.height>=S.top||d.top+c.top+G.height>=S.top+B))&&(V.x=-(this.width+this.marginOffset.x),S.left+V.xthis.index&&d.left+c.left+G.width>=S.left?(V.x=-(this.width+this.marginOffset.x),this.newIndex=y):(w||ythis.index&&d.top+c.top+G.height>=S.top?(V.y=-(this.height+this.marginOffset.y),this.newIndex=y):(w||y1&&arguments[1]!==void 0?arguments[1]:{withRef:!1};return i=g=function(n){zQ(r,n);function r(){return jS(this,r),MQ(this,DB(r).apply(this,arguments))}return $S(r,[{key:"componentDidMount",value:function(){this.register()}},{key:"componentDidUpdate",value:function(o){this.node&&(o.index!==this.props.index&&(this.node.sortableInfo.index=this.props.index),o.disabled!==this.props.disabled&&(this.node.sortableInfo.disabled=this.props.disabled)),o.collection!==this.props.collection&&(this.unregister(o.collection),this.register())}},{key:"componentWillUnmount",value:function(){this.unregister()}},{key:"register",value:function(){var o=this.props,a=o.collection,s=o.disabled,A=o.index,l=ua.findDOMNode(this);l.sortableInfo={collection:a,disabled:s,index:A,manager:this.context.manager},this.node=l,this.ref={node:l},this.context.manager.add(a,this.ref)}},{key:"unregister",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.props.collection;this.context.manager.remove(o,this.ref)}},{key:"getWrappedInstance",value:function(){return ah(I.withRef,"To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableElement() call"),this.refs.wrappedInstance}},{key:"render",value:function(){var o=I.withRef?"wrappedInstance":null;return U.createElement(e,FB({ref:o},wGe(this.props,ust)))}}]),r}(U.Component),Qg(g,"displayName",PQ("sortableElement",e)),Qg(g,"contextTypes",{manager:L.object.isRequired}),Qg(g,"propTypes",HGe),Qg(g,"defaultProps",{collection:0}),i}const NGe=F0(e=>e.pos).left,TI=(e,g)=>{if(!g||!g.cumPositions||!g.cumPositions.length)return null;let i=NGe(g.cumPositions,e);const I=g.cumPositions[g.cumPositions.length-1].chr,n=g.chromLengths[I];i>0&&(i-=1);let r=Math.floor(e-g.cumPositions[i].pos),C=0;return r<0&&(C=r-1,r=1),i===g.cumPositions.length-1&&r>n&&(C=r-n,r=n),[g.cumPositions[i].chr,r,C,i]},kGe=(e,g)=>i=>i%e*g+Math.floor(i/e),dst=e=>e,YGe=(e,g,i=dst)=>e.map((I,n)=>I+g[i(n)]),hst="http://www.w3.org/2000/svg",yX=(e,g)=>{if(e.namespaceURI===hst){const i=e.getAttribute("class");return!!i&&!!i.match(new RegExp(`(\\s|^)${g}(\\s|$)`))}return e.classList?e.classList.contains(g):!!e.className.match(new RegExp(`(\\s|^)${g}(\\s|$)`))},mst="http://www.w3.org/2000/svg",fst=(e,g)=>{if(e.namespaceURI===mst){if(!yX(e,g)){const i=e.getAttribute("class")||"";e.setAttribute("class",`${i} ${g}`)}}else e.classList?e.classList.add(g):yX(e,g)||(e.className+=` ${g}`)},pst=(e,g,i)=>{const I=document.createElement("canvas");return new Promise((n,r)=>{const C=new window.Image;C.onload=()=>{I.width=g||C.width,I.height=i||C.height;const o=I.getContext("2d");if(!o){r(new Error("Could not get canvas context"));return}o.drawImage(C,0,0),n(I)},C.onerror=()=>{r(new Error("Could not convert base64 to canvas"))},C.src=`data:image/png;base64,${e}`})},ZX=(e,g,i)=>i.chrPositions[e].pos+g,KGe=e=>{if(!(e instanceof Event))throw new Error("Event must be an instance of Event");const g=new e.constructor(e.type,e);return g.sourceUid=e.sourceUid,g.forwarded=e.forwarded,g},_c=(e,g=!1)=>{const i=e.map((C,o)=>o*(255/(e.length-1))),I=tg().domain(i).range(e),r=nr(g?255:254,-1,-1).map(I).map(C=>{const o=Rb(C);return[o.r,o.g,o.b,o.opacity*255]});return r.length<256&&r.push([255,255,255,0]),r},LZ=0,UZ=5,FGe=10,DGe=10,xGe=300,GX="move",JC="select",fz=100,vX=10,EGe=110,QZ=3e3,jZ="locationListenerPrefix",MGe=1e3,pz="http://higlass.io/api/v1",zGe=400,PGe=300,bz=["top","left","right","bottom","center","whole","gallery"],JGe=20,OGe=20,BX=Symbol("Light theme"),ii=Symbol("Dark theme"),bst=BX,ot={PIXI:Dpe},XC={"multitrack-header":"_multitrack-header_1yz7l_1","multitrack-header-focus":"_multitrack-header-focus_1yz7l_2","multitrack-header-squeazed":"_multitrack-header-squeazed_1yz7l_3","multitrack-header-dark":"_multitrack-header-dark_1yz7l_20","multitrack-header-id":"_multitrack-header-id_1yz7l_30","multitrack-header-left":"_multitrack-header-left_1yz7l_39","multitrack-header-grabber":"_multitrack-header-grabber_1yz7l_44","multitrack-header-grabber-squeazed":"_multitrack-header-grabber-squeazed_1yz7l_45","multitrack-header-search":"_multitrack-header-search_1yz7l_80","multitrack-header-nav-list":"_multitrack-header-nav-list_1yz7l_102","multitrack-header-icon":"_multitrack-header-icon_1yz7l_107","multitrack-header-icon-squeazed":"_multitrack-header-icon-squeazed_1yz7l_108","mouse-tool-selection":"_mouse-tool-selection_1yz7l_136"},yst={id:"cog",paths:["M466.895 305.125c-26.863-46.527-10.708-106.152 36.076-133.244l-50.313-87.146c-14.375 8.427-31.088 13.259-48.923 13.259-53.768 0-97.354-43.873-97.354-97.995h-100.629c0.133 16.705-4.037 33.641-12.979 49.126-26.862 46.528-86.578 62.351-133.431 35.379l-50.312 87.146c14.485 8.236 27.025 20.294 35.943 35.739 26.819 46.454 10.756 105.96-35.854 133.112l50.313 87.146c14.325-8.348 30.958-13.127 48.7-13.127 53.598 0 97.072 43.596 97.35 97.479h100.627c-0.043-16.537 4.136-33.285 12.983-48.609 26.818-46.453 86.388-62.297 133.207-35.506l50.313-87.145c-14.39-8.233-26.846-20.249-35.717-35.614zM256 359.666c-57.254 0-103.668-46.412-103.668-103.667 0-57.254 46.413-103.667 103.668-103.667s103.666 46.413 103.666 103.667c-0.001 57.255-46.412 103.667-103.666 103.667z"],viewBox:"0 0 512 512"},Zst={id:"cross",paths:["M507.331 411.33c-0.002-0.002-0.004-0.004-0.006-0.005l-155.322-155.325 155.322-155.325c0.002-0.002 0.004-0.003 0.006-0.005 1.672-1.673 2.881-3.627 3.656-5.708 2.123-5.688 0.912-12.341-3.662-16.915l-73.373-73.373c-4.574-4.573-11.225-5.783-16.914-3.66-2.080 0.775-4.035 1.984-5.709 3.655 0 0.002-0.002 0.003-0.004 0.005l-155.324 155.326-155.324-155.325c-0.002-0.002-0.003-0.003-0.005-0.005-1.673-1.671-3.627-2.88-5.707-3.655-5.69-2.124-12.341-0.913-16.915 3.66l-73.374 73.374c-4.574 4.574-5.784 11.226-3.661 16.914 0.776 2.080 1.985 4.036 3.656 5.708 0.002 0.001 0.003 0.003 0.005 0.005l155.325 155.324-155.325 155.326c-0.001 0.002-0.003 0.003-0.004 0.005-1.671 1.673-2.88 3.627-3.657 5.707-2.124 5.688-0.913 12.341 3.661 16.915l73.374 73.373c4.575 4.574 11.226 5.784 16.915 3.661 2.080-0.776 4.035-1.985 5.708-3.656 0.001-0.002 0.003-0.003 0.005-0.005l155.324-155.325 155.324 155.325c0.002 0.001 0.004 0.003 0.006 0.004 1.674 1.672 3.627 2.881 5.707 3.657 5.689 2.123 12.342 0.913 16.914-3.661l73.373-73.374c4.574-4.574 5.785-11.227 3.662-16.915-0.776-2.080-1.985-4.034-3.657-5.707z"],viewBox:"0 0 512 512"},Gst={id:"enlarge",paths:["M512 0h-208l80 80-96 96 48 48 96-96 80 80z","M512 512v-208l-80 80-96-96-48 48 96 96-80 80z","M0 512h208l-80-80 96-96-48-48-96 96-80-80z","M0 0v208l80-80 96 96 48-48-96-96 80-80z"],viewBox:"0 0 512 512"},vst={id:"minus",paths:["M0 208v96c0 8.836 7.164 16 16 16h480c8.836 0 16-7.164 16-16v-96c0-8.836-7.164-16-16-16h-480c-8.836 0-16 7.164-16 16z"],viewBox:"0 0 512 512"},Bst={id:"move",paths:["M512,260.096L405.5,161.79v49.155H301.061v-104.45h49.149L251.904,0L160.77,106.495h49.15v104.45H106.495V161.79L0,260.096l106.495,91.135v-49.149h104.45v104.45H161.79L251.904,512l98.306-106.5h-49.149V301.061H405.5v49.149L512,260.096z"],viewBox:"0 0 512 512"},Sst={id:"play",paths:["M96 64l320 192-320 192z"],viewBox:"0 0 512 512"},wst={id:"plus",paths:["M496 192h-176v-176c0-8.836-7.164-16-16-16h-96c-8.836 0-16 7.164-16 16v176h-176c-8.836 0-16 7.164-16 16v96c0 8.836 7.164 16 16 16h176v176c0 8.836 7.164 16 16 16h96c8.836 0 16-7.164 16-16v-176h176c8.836 0 16-7.164 16-16v-96c0-8.836-7.164-16-16-16z"],viewBox:"0 0 512 512"},Rst={id:"copy",paths:["M607.5 672v-448.5h-351v448.5h351zM607.5 160.5c34.5 0 64.5 28.5 64.5 63v448.5c0 34.5-30 64.5-64.5 64.5h-351c-34.5 0-64.5-30-64.5-64.5v-448.5c0-34.5 30-63 64.5-63h351zM511.5 31.5v64.5h-384v448.5h-63v-448.5c0-34.5 28.5-64.5 63-64.5h384z"],viewBox:"0 0 712 712"},Vst={id:"select",viewBox:"0 0 16 16",paths:["M2 14h2v1H1v-3h1v2zm8 1H6v-1h4v1zm5 0h-3v-1h2v-2h1v3zm0-5h-1V6h1v4zM2 10H1V6h1v4zm13-6h-1V2h-2V1h3v3zM4 2H2v2H1V1h3v1zm6 0H6V1h4.03L10 2z"]},Wst={id:"check_square_o",viewBox:"0 0 1792 1792",paths:["M1472 930v318q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q63 0 117 25 15 7 18 23 3 17-9 29l-49 49q-10 10-23 10-3 0-9-2-23-6-45-6h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-254q0-13 9-22l64-64q10-10 23-10 6 0 12 3 20 8 20 29zm231-489l-814 814q-24 24-57 24t-57-24l-430-430q-24-24-24-57t24-57l110-110q24-24 57-24t57 24l263 263 647-647q24-24 57-24t57 24l110 110q24 24 24 57t-24 57z"]},Xst={id:"square_o",viewBox:"0 0 1792 1792",paths:["M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z"]},Hst={id:"file_o",viewBox:"0 0 1792 1792",paths:["M1596 380q28 28 48 76t20 88v1152q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h896q40 0 88 20t76 48zm-444-244v376h376q-10-29-22-41l-313-313q-12-12-41-22zm384 1528v-1024h-416q-40 0-68-28t-28-68v-416h-768v1536h1280z"]},Tst={id:"chevron_right",viewBox:"0 0 1792 1792",paths:["M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"]},Nst={id:"chevron_down",viewBox:"0 0 1792 1792",paths:["M1683 808l-742 741q-19 19-45 19t-45-19l-742-741q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z"]},kst={id:"folder_o",viewBox:"0 0 1792 1792",paths:["M1600 1312v-704q0-40-28-68t-68-28h-704q-40 0-68-28t-28-68v-64q0-40-28-68t-68-28h-320q-40 0-68 28t-28 68v960q0 40 28 68t68 28h1216q40 0 68-28t28-68zm128-704v704q0 92-66 158t-158 66h-1216q-92 0-158-66t-66-158v-960q0-92 66-158t158-66h320q92 0 158 66t66 158v32h672q92 0 158 66t66 158z"]},Yst={id:"folder_open_o",viewBox:"0 0 1792 1792",paths:["M1845 931q0-35-53-35h-1088q-40 0-85.5 21.5t-71.5 52.5l-294 363q-18 24-18 40 0 35 53 35h1088q40 0 86-22t71-53l294-363q18-22 18-39zm-1141-163h768v-160q0-40-28-68t-68-28h-576q-40 0-68-28t-28-68v-64q0-40-28-68t-68-28h-320q-40 0-68 28t-28 68v853l256-315q44-53 116-87.5t140-34.5zm1269 163q0 62-46 120l-295 363q-43 53-116 87.5t-140 34.5h-1088q-92 0-158-66t-66-158v-960q0-92 66-158t158-66h320q92 0 158 66t66 158v32h544q92 0 158 66t66 158v160h192q54 0 99 24.5t67 70.5q15 32 15 68z"]},Kst=[yst,Zst,Gst,vst,Bst,Sst,wst,Rst,Vst,Wst,Xst,Hst,kst,Yst,Tst,Nst],Za=new DOMParser,Fst='',JQ=Za.parseFromString(Fst,"text/xml").documentElement,Dst=` @@ -1643,7 +1643,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,Hst=pa.parseFromString(Xst,"text/xml").documentElement,Tst=` +`,xst=Za.parseFromString(Dst,"text/xml").documentElement,Est=` line @@ -1651,7 +1651,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,Nst=pa.parseFromString(Tst,"text/xml").documentElement,kst=` +`,Mst=Za.parseFromString(Est,"text/xml").documentElement,zst=` 2d-tiles-icon @@ -1681,7 +1681,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,eie=pa.parseFromString(kst,"text/xml").documentElement,Yst=` +`,IIe=Za.parseFromString(zst,"text/xml").documentElement,Pst=` 2d-heatmap @@ -1709,7 +1709,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,tie=pa.parseFromString(Yst,"text/xml").documentElement,xGe=` +`,nIe=Za.parseFromString(Pst,"text/xml").documentElement,_Ge=` axis-1d @@ -1719,7 +1719,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,Kst=pa.parseFromString(xGe,"text/xml").documentElement,Fst=hg(pa.parseFromString(xGe,"text/xml").documentElement).style("transform","rotate(90deg)").node(),Dst=` +`,Jst=Za.parseFromString(_Ge,"text/xml").documentElement,Ost=hg(Za.parseFromString(_Ge,"text/xml").documentElement).style("transform","rotate(90deg)").node(),_st=` gene-annotations @@ -1746,7 +1746,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,xst=pa.parseFromString(Dst,"text/xml").documentElement,EGe=` +`,Lst=Za.parseFromString(_st,"text/xml").documentElement,LGe=` 1d-tiles-icon @@ -1766,7 +1766,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,Est=pa.parseFromString(EGe,"text/xml").documentElement,Mst=hg(pa.parseFromString(EGe,"text/xml").documentElement).style("transform","rotate(90deg)").node(),zst=` +`,Ust=Za.parseFromString(LGe,"text/xml").documentElement,Qst=hg(Za.parseFromString(LGe,"text/xml").documentElement).style("transform","rotate(90deg)").node(),jst=` arrowhead-domains @@ -1786,27 +1786,27 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,IZ=pa.parseFromString(zst,"text/xml").documentElement;function MGe({theStyle:e,onClick:g}){return N.createElement("svg",{className:Vr[e],viewBox:"0 0 12 13",onClick:g,xmlns:"http://www.w3.org/2000/svg"},N.createElement("g",{fill:"none",stroke:"#6c6c6c",strokeWidth:"2"},N.createElement("path",{d:"M11.29 11.71l-4-4"}),N.createElement("circle",{cx:"5",cy:"5",r:"4"})))}MGe.propTypes={theStyle:L.string,onClick:L.func};const gie={type:"osm-tiles",datatype:["map-tiles"],local:!0,orientation:"2d",hidden:!0,name:"OSM Tiles",thumbnail:DQ,availableOptions:["minPos","maxPos","maxZoom","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","name"],defaultOptions:{minPos:-180,maxPos:180,maxZoom:19,labelPosition:"bottomRight",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0}},Iie={type:"mapbox-tiles",datatype:["map-tiles"],local:!0,orientation:"2d",hidden:!0,name:"Mapbox Tiles",thumbnail:DQ,availableOptions:["style","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","name"],defaultOptions:{style:"mapbox.streets",labelPosition:"bottomRight",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0}},ah=[gie,{...gie,type:"osm"},Iie,{...Iie,type:"mapbox"},{type:"left-axis",datatype:["axis"],local:!0,orientation:"1d-vertical",name:"Left Axis",thumbnail:Fst,availableOptions:["minWidth"],defaultOptions:{minWidth:100}},{type:"top-axis",datatype:["axis"],local:!0,orientation:"1d-horizontal",name:"Top Axis",thumbnail:Kst,defaultOptions:{}},{type:"horizontal-rule",datatype:["x-coord"],local:!0,orientation:"whole",name:"Horizontal Rule",thumbnail:null,availableOptions:["color"],defaultOptions:{color:"black"}},{type:"vertical-rule",datatype:["y-coord"],local:!0,orientation:"whole",name:"Vertical Rule",thumbnail:null,availableOptions:["color"],defaultOptions:{color:"black"}},{type:"cross-rule",datatype:["xy-coord"],local:!0,orientation:"whole",name:"Cross Rule",thumbnail:null,availableOptions:["color"],defaultOptions:{color:"black"}},{type:"simple-svg",datatype:[],local:!1,orientation:"2d",exportable:!0,availableOptions:["minWidth","minHeight"],defaultOptions:{minWidth:100,minHeight:100}},{type:"heatmap",datatype:["matrix"],local:!1,orientation:"2d",thumbnail:tie,exportable:!0,availableOptions:["backgroundColor","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundOpacity","colorRange","colorbarBackgroundColor","maxZoom","minWidth","minHeight","dataTransform","colorbarPosition","trackBorderWidth","trackBorderColor","heatmapValueScaling","showMousePosition","mousePositionColor","showTooltip","extent","zeroValueColor"],defaultOptions:{backgroundColor:"#eeeeee",labelPosition:"bottomRight",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!0,labelShowAssembly:!0,colorRange:["white","rgba(245,166,35,1.0)","rgba(208,2,27,1.0)","black"],colorbarBackgroundColor:"#ffffff",maxZoom:null,minWidth:100,minHeight:100,colorbarPosition:"topRight",trackBorderWidth:0,trackBorderColor:"black",heatmapValueScaling:"log",showMousePosition:!1,mousePositionColor:"#000000",showTooltip:!1,extent:"full",zeroValueColor:null},defaultOptionsByTheme:{[gI]:{backgroundColor:"#000000",colorRange:["black","rgba(208,2,27,1.0)","rgba(245,166,35,1.0)","white"],colorbarBackgroundColor:"#000000",labelColor:"#ffffff",labelBackgroundColor:"#000000",trackBorderColor:"#ffffff",mousePositionColor:"#ffffff"}}},{type:"linear-heatmap",aliases:["horizontal-heatmap","vertical-heatmap"],datatype:["matrix"],local:!1,orientation:"1d-horizontal",rotatable:!0,thumbnail:tie,defaultOptions:{backgroundColor:"#eeeeee",labelPosition:"bottomRight",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!0,labelShowAssembly:!0,labelColor:"black",colorRange:["white","rgba(245,166,35,1.0)","rgba(208,2,27,1.0)","black"],maxZoom:null,minWidth:100,minHeight:40,trackBorderWidth:0,trackBorderColor:"black"},availableOptions:["backgroundColor","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundOpacity","colorRange","maxZoom","minWidth","minHeight","dataTransform","oneDHeatmapFlipped","colorbarPosition","trackBorderWidth","trackBorderColor","heatmapValueScaling"]},{type:"line",aliases:["horizontal-line","vertical-line"],datatype:["vector"],local:!1,orientation:"1d-horizontal",rotatable:!0,thumbnail:Nst,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundColor","labelBackgroundOpacity","axisLabelFormatting","axisPositionHorizontal","axisMargin","lineStrokeWidth","lineStrokeColor","valueScaling","valueScaleMin","valueScaleMax","trackBorderWidth","trackBorderColor","trackType","showMousePosition","showTooltip","mousePositionColor","aggregationMode","minHeight"],defaultOptions:{labelColor:"black",labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelBackgroundColor:"white",labelShowResolution:!1,labelShowAssembly:!0,axisLabelFormatting:"scientific",axisPositionHorizontal:"right",lineStrokeColor:"blue",lineStrokeWidth:1,valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",labelTextOpacity:.4,showMousePosition:!1,minHeight:20,mousePositionColor:"#000000",showTooltip:!1},defaultOptionsByTheme:{[gI]:{labelColor:"#ffffff",labelBackgroundColor:"#000000",trackBorderColor:"#ffffff",mousePositionColor:"#ffffff"}}},{type:"1d-heatmap",aliases:["horizontal-1d-heatmap","vertical-1d-heatmap"],datatype:["vector"],local:!1,orientation:"1d-horizontal",rotatable:!0,thumbnail:Hst,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundOpacity","axisPositionHorizontal","axisMargin","colorRange","valueScaling","trackBorderWidth","trackBorderColor","trackType","showMousePosition","showTooltip","mousePositionColor","aggregationMode"],defaultOptions:{labelColor:"black",labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!1,labelShowAssembly:!0,axisPositionHorizontal:"right",colorRange:["white","rgba(245,166,35,1.0)","rgba(208,2,27,1.0)","black"],valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",labelTextOpacity:.4,showMousePosition:!1,mousePositionColor:"#000000",showTooltip:!1}},{type:"vector-heatmap",aliases:["horizontal-vector-heatmap","vertical-vector-heatmap"],datatype:["vector"],local:!1,orientation:"1d-horizontal",rotatable:!0,minHeight:1,thumbnail:null,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","valueScaling","labelTextOpacity","labelBackgroundOpacity","colorRange","trackBorderWidth","trackBorderColor","trackType","heatmapValueScaling"],defaultOptions:{labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!1,labelShowAssembly:!0,labelColor:"black",labelTextOpacity:.4,valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",heatmapValueScaling:"log"}},{type:"multivec",aliases:["horizontal-multivec","vertical-multivec"],datatype:["multivec"],local:!1,orientation:"1d-horizontal",rotatable:!0,thumbnail:null,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","minHeight","valueScaling","labelTextOpacity","labelBackgroundOpacity","colorRange","trackBorderWidth","trackBorderColor","trackType","heatmapValueScaling","selectRows","selectRowsAggregationMode","selectRowsAggregationWithRelativeHeight","selectRowsAggregationMethod","colorbarBackgroundColor","colorbarPosition","zeroValueColor"],defaultOptions:{labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!0,labelShowAssembly:!0,labelColor:"black",labelTextOpacity:.4,minHeight:100,valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",heatmapValueScaling:"log",selectRows:null,selectRowsAggregationMode:"mean",selectRowsAggregationWithRelativeHeight:!0,selectRowsAggregationMethod:"client",colorbarBackgroundColor:"#ffffff",colorbarPosition:"topRight",zeroValueColor:null},defaultOptionsByTheme:{[gI]:{colorbarBackgroundColor:"#000000"}}},{type:"point",aliases:["horizontal-point","vertical-point"],datatype:["vector"],local:!1,orientation:"1d-horizontal",rotatable:!0,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundOpacity","axisLabelFormatting","axisPositionHorizontal","axisMargin","pointColor","pointSize","valueScaling","trackBorderWidth","trackBorderColor"],defaultOptions:{labelColor:"black",labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!1,labelShowAssembly:!0,axisLabelFormatting:"scientific",axisPositionHorizontal:"right",pointColor:"red",pointSize:3,valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",labelTextOpacity:.4}},{type:"divergent-bar",aliases:["horizontal-divergent-bar","vertical-divergent-bar"],datatype:["vector"],local:!1,orientation:"1d-horizontal",rotatable:!0,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundOpacity","axisLabelFormatting","axisPositionHorizontal","axisMargin","barFillColorTop","barFillColorBottom","valueScaling","trackBorderWidth","trackBorderColor","barOpacity"],defaultOptions:{labelColor:"black",labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!1,labelShowAssembly:!0,axisPositionHorizontal:"right",axisLabelFormatting:"scientific",barFillColorBottom:"red",barFillColorTop:"green",valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",labelTextOpacity:.4,barOpacity:1}},{type:"bar",aliases:["horizontal-bar","vertical-bar"],datatype:["vector"],local:!1,orientation:"1d-horizontal",rotatable:!0,availableOptions:["align","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelShowResolution","labelShowAssembly","labelColor","labelTextOpacity","labelBackgroundOpacity","axisLabelFormatting","axisPositionHorizontal","axisMargin","barFillColor","colorRange","colorRangeGradient","valueScaling","valueScaleMin","valueScaleMax","trackBorderWidth","trackBorderColor","barOpacity","showMousePosition","showTooltip","aggregationMode","zeroLineVisible","zeroLineColor","zeroLineOpacity"],defaultOptions:{align:"bottom",labelColor:"[glyph-color]",labelPosition:"topLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,labelShowResolution:!1,labelShowAssembly:!0,axisLabelFormatting:"scientific",axisPositionHorizontal:"right",barFillColor:"darkgreen",valueScaling:"linear",trackBorderWidth:0,trackBorderColor:"black",labelTextOpacity:.4,barOpacity:1}},{type:"2d-tiles",datatype:["matrix"],local:!1,orientation:"2d",name:"2D Tile Outlines",thumbnail:eie},{type:"1d-value-interval",aliases:["horizontal-1d-value-interval","vertical-1d-value-interval"],datatype:["bed-value"],local:!1,orientation:"1d-horizontal",rotatable:!0,name:"1D Rectangles",availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundOpacity","axisPositionHorizontal","axisMargin"],defaultOptions:{labelColor:"black",labelPosition:"bottomLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,axisPositionHorizontal:"left",lineStrokeColor:"blue",valueScaling:"linear"}},{type:"stacked-interval",aliases:["top-stacked-interval","left-stacked-interval"],datatype:["stacked-interval"],local:!1,orientation:"1d-horizontal",rotatable:!0,thumbnail:"horizontal-stacked-interval.png",availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundOpacity"]},{type:"viewport-projection-vertical",datatype:["1d-projection"],local:!0,hidden:!0,projection:!0,orientation:"1d-vertical",name:"Viewport Projection",thumbnail:"viewport-projection-center.png",availableOptions:["projectionFillColor","projectionStrokeColor","strokeWidth"],defaultOptions:{projectionFillColor:"#777",projectionStrokeColor:"#777",projectionFillOpacity:.3,projectionStrokeOpacity:.7,strokeWidth:1}},{type:"viewport-projection-horizontal",datatype:["1d-projection"],local:!0,hidden:!0,projection:!0,orientation:"1d-horizontal",name:"Viewport Projection",thumbnail:"viewport-projection-center.png",availableOptions:["projectionFillColor","projectionStrokeColor","strokeWidth"],defaultOptions:{projectionFillColor:"#777",projectionStrokeColor:"#777",projectionFillOpacity:.3,projectionStrokeOpacity:.7,strokeWidth:1}},{type:"viewport-projection-center",datatype:["2d-projection"],local:!0,hidden:!0,projection:!0,orientation:"2d",name:"Viewport Projection",thumbnail:"viewport-projection-center.png",availableOptions:["projectionFillColor","projectionStrokeColor","strokeWidth"],defaultOptions:{projectionFillColor:"#777",projectionStrokeColor:"#777",projectionFillOpacity:.3,projectionStrokeOpacity:.7,strokeWidth:1}},{type:"gene-annotations",aliases:["horizontal-gene-annotations","vertical-gene-annotations"],datatype:["gene-annotation"],local:!1,defaultHeight:90,defaultWidth:90,rotatable:!0,orientation:"1d-horizontal",name:"Gene Annotations",thumbnail:xst,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundColor","labelBackgroundOpacity","minHeight","plusStrandColor","minusStrandColor","trackBorderWidth","trackBorderColor","showMousePosition","mousePositionColor","fontSize","geneAnnotationHeight","geneLabelPosition","geneStrandSpacing"],defaultOptions:{fontSize:10,labelColor:"black",labelBackgroundColor:"#ffffff",labelPosition:"hidden",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,minHeight:24,plusStrandColor:"blue",minusStrandColor:"red",trackBorderWidth:0,trackBorderColor:"black",showMousePosition:!1,mousePositionColor:"#000000",geneAnnotationHeight:16,geneLabelPosition:"outside",geneStrandSpacing:4},defaultOptionsByTheme:{[gI]:{labelColor:"#ffffff",labelBackgroundColor:"#000000",trackBorderColor:"#ffffff",mousePositionColor:"#ffffff",plusStrandColor:"#40a0ff"}}},{type:"arrowhead-domains",datatype:["arrowhead-domains"],local:!1,orientation:"2d",name:"Arrowhead Domains",thumbnail:IZ,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundOpacity","trackBorderWidth","trackBorderColor"],defaultOptions:{labelColor:"black",labelPosition:"hidden",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,trackBorderWidth:0,trackBorderColor:"black"}},{type:"linear-2d-rectangle-domains",aliases:["horizontal-2d-rectangle-domains","vertical-2d-rectangle-domains"],datatype:["2d-rectangle-domains"],local:!1,orientation:"1d-horizontal",rotatable:!0,name:"Horizontal 2D Rectangle Domains",thumbnail:IZ,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundOpacity","trackBorderWidth","trackBorderColor","rectangleDomainFillColor","rectangleDomainStrokeColor","rectangleDomainOpacity","minSquareSize"],defaultOptions:{labelColor:"black",labelPosition:"bottomLeft",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,trackBorderWidth:0,trackBorderColor:"black",rectangleDomainFillColor:"grey",rectangleDomainStrokeColor:"black",rectangleDomainOpacity:.6,minSquareSize:"none"}},{type:"2d-rectangle-domains",datatype:["2d-rectangle-domains"],local:!1,orientation:"2d",name:"2D Rectangle Domains",thumbnail:IZ,availableOptions:["flipDiagonal","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundOpacity","trackBorderWidth","trackBorderColor","rectangleDomainFillColor","rectangleDomainFillOpacity","rectangleDomainStrokeColor","rectangleDomainOpacity","minSquareSize"],defaultOptions:{flipDiagonal:"none",labelColor:"black",labelPosition:"hidden",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,trackBorderWidth:0,trackBorderColor:"black",rectangleDomainFillColor:"grey",rectangleDomainFillOpacity:.4,rectangleDomainStrokeColor:"black",rectangleDomainOpacity:.6,minSquareSize:"none"}},{type:"horizontal-1d-annotations",datatype:["nothing"],local:!1,orientation:"1d-horizontal",name:"Horizontal 1D Annotations",thumbnail:null,availableOptions:["fill","fillOpacity","stroke","strokeOpacity","strokeWidth","strokePos","regions"],defaultOptions:{fill:"red",fillOpacity:.2,stroke:"red",strokeOpacity:0,strokeWidth:1,regions:[],strokePos:[]}},{type:"vertical-1d-annotations",datatype:["nothing"],local:!1,orientation:"1d-vertical",name:"Vertical 1D Annotations",thumbnail:null,availableOptions:["fill","fillOpacity","stroke","strokeOpacity","regions"],defaultOptions:{fill:"red",fillOpacity:"0.2",stroke:"red",strokeOpacity:"0",regions:[]}},{type:"2d-annotations",datatype:["2d-annotations"],local:!1,orientation:"2d",name:"2D Annotations",thumbnail:IZ,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor","labelTextOpacity","labelBackgroundOpacity","trackBorderWidth","trackBorderColor","rectangleDomainFillColor","rectangleDomainStrokeColor","rectangleDomainOpacity","minSquareSize","isClickable","hoverColor","selectColor","exclude","trackBorderBgWidth","trackBorderBgColor","trackBorderBgAlpha"],defaultOptions:{labelColor:"black",labelPosition:"hidden",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,trackBorderWidth:0,trackBorderColor:"black",rectangleDomainFillColor:"grey",rectangleDomainStrokeColor:"black",rectangleDomainOpacity:.6,minSquareSize:"none",isClickable:!1,hoverColor:"orange",selectColor:"fuchsia",exclude:[],trackBorderBgWidth:0,trackBorderBgColor:"black",trackBorderBgAlpha:.33}},{type:"square-markers",datatype:["bedpe"],local:!1,orientation:"2d",name:"Square Markers",thumbnail:IZ,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","labelColor"],defaultOptions:{labelColor:"black",labelPosition:"hidden",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,trackBorderWidth:0,trackBorderColor:"black"}},{type:"combined",datatype:"any",local:!0,orientation:"any"},{type:"horizontal-chromosome-grid",datatype:["chromsizes"],local:!1,orientation:"1d-horizontal",name:"Chromosome Grid",chromInfoPath:"//s3.amazonaws.com/pkerp/data/hg19/chromSizes.tsv",thumbnail:null,availableOptions:["lineStrokeWidth","lineStrokeColor","showMousePosition"],defaultOptions:{lineStrokeWidth:1,lineStrokeColor:"grey",showMousePosition:!1}},{type:"vertical-chromosome-grid",datatype:["chromsizes"],local:!1,orientation:"1d-vertical",name:"Chromosome Grid",chromInfoPath:"//s3.amazonaws.com/pkerp/data/hg19/chromSizes.tsv",thumbnail:null,availableOptions:["lineStrokeWidth","lineStrokeColor","showMousePosition"],defaultOptions:{lineStrokeWidth:1,lineStrokeColor:"grey",showMousePosition:!1}},{type:"2d-chromosome-grid",datatype:["chromsizes"],local:!1,orientation:"2d",name:"Chromosome Grid",chromInfoPath:"//s3.amazonaws.com/pkerp/data/hg19/chromSizes.tsv",thumbnail:null,availableOptions:["lineStrokeWidth","lineStrokeColor"],defaultOptions:{lineStrokeWidth:1,lineStrokeColor:"grey"}},{type:"2d-chromosome-annotations",datatype:["chromsizes"],local:!0,orientation:"2d",name:"2D Chromosome Annotations",thumbnail:null,hidden:!0},{type:"2d-chromosome-labels",datatype:["chromsizes"],local:!0,orientation:"2d",name:"Pairwise Chromosome Labels",thumbnail:null},{type:"chromosome-labels",aliases:["horizontal-chromosome-labels","vertical-chromosome-labels"],datatype:["chromsizes"],orientation:"1d-horizontal",rotatable:!0,minHeight:35,defaultHeight:30,name:"Chromosome Axis",thumbnail:null,availableOptions:["color","stroke","fontSize","fontIsLeftAligned","showMousePosition","mousePositionColor","tickPositions","tickFormat","reverseOrientation"],defaultOptions:{color:"#808080",stroke:"#ffffff",fontSize:12,fontIsLeftAligned:!1,showMousePosition:!1,mousePositionColor:"#000000",reverseOrientation:!1},defaultOptionsByTheme:{[gI]:{color:"#808080",stroke:"#000000",mousePositionColor:"#ffffff"}}},{type:"vertical-1d-tiles",datatype:["1d-tiles"],local:!1,orientation:"1d-vertical",name:"Vertical 1D Tile Outlines",thumbnail:Mst},{type:"horizontal-1d-tiles",datatype:["vector","stacked-interval","gene-annotation"],local:!1,orientation:"1d-horizontal",name:"Horizontal 1D Tile Outlines",thumbnail:Est},{type:"osm-2d-tile-ids",datatype:["map-tiles"],local:!1,orientation:"2d",name:"OSM Tile Outlines",thumbnail:eie,availableOptions:["minPos","maxPos","maxZoom","labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","name"],defaultOptions:{minPos:-180,maxPos:180,maxZoom:19,labelPosition:"bottomRight",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0}},{type:"raster-tiles",datatype:["map-tiles"],local:!0,orientation:"2d",hidden:!0,name:"Raster Tiles",thumbnail:DQ,availableOptions:["labelPosition","labelLeftMargin","labelRightMargin","labelTopMargin","labelBottomMargin","name"],defaultOptions:{labelPosition:"bottomRight",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0}},{type:"image-tiles",datatype:["image-tiles"],local:!0,orientation:"2d",hidden:!0,name:"Image Tiles",thumbnail:null},{type:"bedlike",datatype:["bedlike"],aliases:["vertical-bedlike"],local:!1,orientation:"1d-horizontal",rotatable:!0,name:"BED-like track",thumbnail:null,availableOptions:["alternating","annotationHeight","annotationStyle","fillColor","fillOpacity","fontColor","fontSize","minusStrandColor","plusStrandColor","labelBottomMargin","labelColor","labelLeftMargin","labelPosition","labelRightMargin","labelTopMargin","labelTextOpacity","labelBackgroundOpacity","maxAnnotationHeight","minHeight","trackBorderWidth","trackBorderColor","valueColumn","colorEncoding","colorRange","colorEncodingRange","separatePlusMinusStrands","showTexts","axisPositionHorizontal","axisMargin"],defaultOptions:{alternating:!1,annotationStyle:"box",fillColor:"blue",fillOpacity:.3,fontSize:"10",axisPositionHorizontal:"right",labelColor:"black",labelPosition:"hidden",labelLeftMargin:0,labelRightMargin:0,labelTopMargin:0,labelBottomMargin:0,minHeight:20,maxAnnotationHeight:null,trackBorderWidth:0,trackBorderColor:"black",valueColumn:null,colorEncoding:"itemRgb",showTexts:!1,colorRange:["#000000","#652537","#bf5458","#fba273","#ffffe0"],colorEncodingRange:!1,separatePlusMinusStrands:!0,annotationHeight:16}},{type:"empty",datatype:[],orientation:"1d-horizontal",name:"Empty track",thumbnail:null,availableOptions:[],defaultOptions:{}}],xQ=e=>{const g={},I=i=>!!(i.orientation===e||e==="1d-vertical"&&i.orientation==="1d-horizontal"&&i.rotatable);return ah.filter(I).forEach(i=>{let n=i.datatype;Array.isArray(i.datatype)||(n=[n]),n.forEach(C=>{C in g||(g[C]=[]),g[C].push(i)})}),g.none=[],g},Nb=[[0,0,0,255],[35,0,0,255],[52,0,0,255],[60,0,0,255],[63,1,0,255],[64,2,0,255],[68,5,0,255],[69,6,0,255],[72,8,0,255],[74,10,0,255],[77,12,0,255],[78,14,0,255],[81,16,0,255],[83,17,0,255],[85,19,0,255],[86,20,0,255],[89,22,0,255],[91,24,0,255],[92,25,0,255],[94,26,0,255],[95,28,0,255],[98,30,0,255],[100,31,0,255],[102,33,0,255],[103,34,0,255],[105,35,0,255],[106,36,0,255],[108,38,0,255],[109,39,0,255],[111,40,0,255],[112,42,0,255],[114,43,0,255],[115,44,0,255],[117,45,0,255],[119,47,0,255],[119,47,0,255],[120,48,0,255],[122,49,0,255],[123,51,0,255],[125,52,0,255],[125,52,0,255],[126,53,0,255],[128,54,0,255],[129,56,0,255],[129,56,0,255],[131,57,0,255],[132,58,0,255],[134,59,0,255],[134,59,0,255],[136,61,0,255],[137,62,0,255],[137,62,0,255],[139,63,0,255],[139,63,0,255],[140,65,0,255],[142,66,0,255],[142,66,0,255],[143,67,0,255],[143,67,0,255],[145,68,0,255],[145,68,0,255],[146,70,0,255],[146,70,0,255],[148,71,0,255],[148,71,0,255],[149,72,0,255],[149,72,0,255],[151,73,0,255],[151,73,0,255],[153,75,0,255],[153,75,0,255],[154,76,0,255],[154,76,0,255],[154,76,0,255],[156,77,0,255],[156,77,0,255],[157,79,0,255],[157,79,0,255],[159,80,0,255],[159,80,0,255],[159,80,0,255],[160,81,0,255],[160,81,0,255],[162,82,0,255],[162,82,0,255],[163,84,0,255],[163,84,0,255],[165,85,0,255],[165,85,0,255],[166,86,0,255],[166,86,0,255],[166,86,0,255],[168,87,0,255],[168,87,0,255],[170,89,0,255],[170,89,0,255],[171,90,0,255],[171,90,0,255],[173,91,0,255],[173,91,0,255],[174,93,0,255],[174,93,0,255],[176,94,0,255],[176,94,0,255],[177,95,0,255],[177,95,0,255],[179,96,0,255],[179,96,0,255],[180,98,0,255],[182,99,0,255],[182,99,0,255],[183,100,0,255],[183,100,0,255],[185,102,0,255],[185,102,0,255],[187,103,0,255],[187,103,0,255],[188,104,0,255],[188,104,0,255],[190,105,0,255],[191,107,0,255],[191,107,0,255],[193,108,0,255],[193,108,0,255],[194,109,0,255],[196,110,0,255],[196,110,0,255],[197,112,0,255],[197,112,0,255],[199,113,0,255],[200,114,0,255],[200,114,0,255],[202,116,0,255],[202,116,0,255],[204,117,0,255],[205,118,0,255],[205,118,0,255],[207,119,0,255],[208,121,0,255],[208,121,0,255],[210,122,0,255],[211,123,0,255],[211,123,0,255],[213,124,0,255],[214,126,0,255],[214,126,0,255],[216,127,0,255],[217,128,0,255],[217,128,0,255],[219,130,0,255],[221,131,0,255],[221,131,0,255],[222,132,0,255],[224,133,0,255],[224,133,0,255],[225,135,0,255],[227,136,0,255],[227,136,0,255],[228,137,0,255],[230,138,0,255],[230,138,0,255],[231,140,0,255],[233,141,0,255],[233,141,0,255],[234,142,0,255],[236,144,0,255],[236,144,0,255],[238,145,0,255],[239,146,0,255],[241,147,0,255],[241,147,0,255],[242,149,0,255],[244,150,0,255],[244,150,0,255],[245,151,0,255],[247,153,0,255],[247,153,0,255],[248,154,0,255],[250,155,0,255],[251,156,0,255],[251,156,0,255],[253,158,0,255],[255,159,0,255],[255,159,0,255],[255,160,0,255],[255,161,0,255],[255,163,0,255],[255,163,0,255],[255,164,0,255],[255,165,0,255],[255,167,0,255],[255,167,0,255],[255,168,0,255],[255,169,0,255],[255,169,0,255],[255,170,0,255],[255,172,0,255],[255,173,0,255],[255,173,0,255],[255,174,0,255],[255,175,0,255],[255,177,0,255],[255,178,0,255],[255,179,0,255],[255,181,0,255],[255,181,0,255],[255,182,0,255],[255,183,0,255],[255,184,0,255],[255,187,7,255],[255,188,10,255],[255,189,14,255],[255,191,18,255],[255,192,21,255],[255,193,25,255],[255,195,29,255],[255,197,36,255],[255,198,40,255],[255,200,43,255],[255,202,51,255],[255,204,54,255],[255,206,61,255],[255,207,65,255],[255,210,72,255],[255,211,76,255],[255,214,83,255],[255,216,91,255],[255,219,98,255],[255,221,105,255],[255,223,109,255],[255,225,116,255],[255,228,123,255],[255,232,134,255],[255,234,142,255],[255,237,149,255],[255,239,156,255],[255,240,160,255],[255,243,167,255],[255,246,174,255],[255,248,182,255],[255,249,185,255],[255,252,193,255],[255,253,196,255],[255,255,204,255],[255,255,207,255],[255,255,211,255],[255,255,218,255],[255,255,222,255],[255,255,225,255],[255,255,229,255],[255,255,233,255],[255,255,236,255],[255,255,240,255],[255,255,244,255],[255,255,247,255],[255,255,255,0]],Qg=ah.reduce((e,g)=>{if(e[g.type]=g,g.aliases)for(const I of g.aliases)e[I]=g;return e},{}),Pst=ah.reduce((e,g)=>{for(let I=0;I{const I=xQ(g);let i=new Set(Object.values(I).flatMap(n=>n));for(const n of e){const C=new Set(n);i=new Set([...i].filter(r=>r.datatype.filter(o=>C.has(o)).length>0))}return[...i]},zGe=8,EQ=8,Jst=Object.freeze(Object.defineProperty({__proto__:null,AVAILABLE_TRACK_TYPES:GX,DATATYPE_TO_TRACK_TYPE:xQ,DEFAULT_CONTAINER_PADDING_X:XGe,DEFAULT_CONTAINER_PADDING_Y:HGe,DEFAULT_SERVER:cz,DEFAULT_TRACKS_FOR_DATATYPE:FB,DEFAULT_VIEW_MARGIN:JZ,DEFAULT_VIEW_PADDING:OZ,GLOBALS:ot,HEATED_OBJECT_MAP:Nb,LOCATION_LISTENER_PREFIX:LZ,LONG_DRAG_TIMEOUT:_Z,MAX_CLICK_DELAY:TGe,MIN_HORIZONTAL_HEIGHT:FGe,MIN_VERTICAL_WIDTH:DGe,MOUSE_TOOL_MOVE:bX,MOUSE_TOOL_SELECT:zr,NUM_PRECOMP_SUBSETS_PER_1D_TTILE:zGe,NUM_PRECOMP_SUBSETS_PER_2D_TTILE:EQ,POSITIONS_BY_DATATYPE:Pst,SHORT_DRAG_TIMEOUT:NGe,THEME_DARK:gI,THEME_DEFAULT:lst,THEME_LIGHT:ZX,TILE_FETCH_DEBOUNCE:lz,TRACKS_INFO:ah,TRACKS_INFO_BY_TYPE:Qg,TRACK_LOCATIONS:uz,VIEW_HEADER_MED_WIDTH_SEARCH_BAR:YGe,VIEW_HEADER_MIN_WIDTH_SEARCH_BAR:KGe,ZOOM_DEBOUNCE:yX,ZOOM_TRANSITION_DURATION:kGe},Symbol.toStringTag,{value:"Module"})),Kt=e=>{const g=Hi(e);return ot.PIXI.utils.rgb2hex([g.r/255,g.g/255,g.b/255])},PGe=e=>{if(e==="transparent")return[255,255,255,0];const g=Hi(e);return[g.r,g.g,g.b,255]},vX=(e,g,I)=>{const i=Ti(e,I),n=Ti(g,I);if(!i||!n)throw new Error("Couldn't convert data to genomic coordinates");return[i[0],Math.round(i[1]),n[0],Math.round(n[1])]},MQ=(e,g,I)=>{let i;const n=(...C)=>{const r=()=>{i=void 0,I||e(...C)},o=I&&!i;clearTimeout(i),i=setTimeout(r,g),o&&e(...C)};return n.cancel=()=>{clearTimeout(i),i=void 0},n},dz=e=>(e+16**6).toString(16).substr(-6),JGe=e=>{const g={};return e.forEach(I=>{g[I[0]]=I[1]}),g},Nr=e=>{const g=[];for(const I in e)e.hasOwnProperty(I)&&g.push([I,e[I]]);return g};function Wr(e){const g=[];for(const I in e)e.hasOwnProperty(I)&&g.push(I);return g}function Eg(e){const g=[];for(const I in e)e.hasOwnProperty(I)&&g.push(e[I]);return g}function JG(e,g){const I=typeof g=="string"?new Blob([g],{type:"application/octet-stream"}):g,i=window.document.createElement("a");i.href=window.URL.createObjectURL(I),i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(i.href)}const OGe=e=>{const g=["top","bottom","gallery"],I=["left","right","gallery"];return e.center=e.center||[],e.left=e.left||[],e.right=e.right||[],e.top=e.top||[],e.bottom=e.bottom||[],e.whole=e.whole||[],e.gallery=e.gallery||[],g.map(i=>e[i]).forEach(i=>i.forEach(n=>{const C=Qg[n.type],r=C&&C.defaultOptions||{},o=n.options?{...r,...n.options}:r;o.minHeight!==void 0&&n.height===void 0&&(n.height=o.minHeight),n.height===void 0&&(n.height=C&&C.defaultHeight||FGe)})),I.map(i=>e[i]).forEach(i=>i.forEach(n=>{const C=Qg[n.type],r=C&&C.defaultOptions||{},o=n.options?{...r,...n.options}:r;o.minWidth!==void 0&&n.width===void 0&&(n.width=o.minWidth),n.width===void 0&&(n.width=C&&C.defaultWidth||DGe)})),e},_Ge=e=>g=>Array.prototype.reduce.call(g,e),Ost=_Ge((e,g)=>e.concat(g)),_st=e=>g=>Array.prototype.forEach.call(g,e),BX=(e,g)=>{g.dispatchEvent(WGe(e))},Lst=(e,g)=>[pX(e[0],e[1],g),pX(e[2],e[3],g)];function Ust(e,g,I,i,n){const{chr:C,pos:r}=g,{chr:o,pos:a}=I,s=[];if(C===o){const A=C,l=Math.floor(r/i),c=Math.min(l+n,Math.ceil(a/i));s.push([A,l,c])}else{let A=n;const l=e.findIndex(([u])=>u===C),c=e.findIndex(([u])=>u===o);for(let u=l;u<=c;u++){let d,h;const[m,f]=e[u];u{if(I.length===0)return;if(I.length===1)return I[0];let i=I[0];const n=FB[e]!==void 0?FB[e][g]:void 0;return n!==void 0&&(i=I.find(C=>C.type===n)||i),i};var iie={},mF={},fF=34,iZ=10,pF=13;function LGe(e){return new Function("d","return {"+e.map(function(g,I){return JSON.stringify(g)+": d["+I+'] || ""'}).join(",")+"}")}function Qst(e,g){var I=LGe(e);return function(i,n){return g(I(i),n,e)}}function nie(e){var g=Object.create(null),I=[];return e.forEach(function(i){for(var n in i)n in g||I.push(g[n]=n)}),I}function BC(e,g){var I=e+"",i=I.length;return i9999?"+"+BC(e,6):BC(e,4)}function $st(e){var g=e.getUTCHours(),I=e.getUTCMinutes(),i=e.getUTCSeconds(),n=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":jst(e.getUTCFullYear())+"-"+BC(e.getUTCMonth()+1,2)+"-"+BC(e.getUTCDate(),2)+(n?"T"+BC(g,2)+":"+BC(I,2)+":"+BC(i,2)+"."+BC(n,3)+"Z":i?"T"+BC(g,2)+":"+BC(I,2)+":"+BC(i,2)+"Z":I||g?"T"+BC(g,2)+":"+BC(I,2)+"Z":"")}function PQ(e){var g=new RegExp('["'+e+` -\r]`),I=e.charCodeAt(0);function i(l,c){var u,d,h=n(l,function(m,f){if(u)return u(m,f-1);d=m,u=c?Qst(m,c):LGe(m)});return h.columns=d||[],h}function n(l,c){var u=[],d=l.length,h=0,m=0,f,b=d<=0,p=!1;l.charCodeAt(d-1)===iZ&&--d,l.charCodeAt(d-1)===pF&&--d;function y(){if(b)return mF;if(p)return p=!1,iie;var B,G=h,v;if(l.charCodeAt(G)===fF){for(;h++=d?b=!0:(v=l.charCodeAt(h++))===iZ?p=!0:v===pF&&(p=!0,l.charCodeAt(h)===iZ&&++h),l.slice(G+1,B-1).replace(/""/g,'"')}for(;h{const g={},i=I=>!!(I.orientation===e||e==="1d-vertical"&&I.orientation==="1d-horizontal"&&I.rotatable);return Ah.filter(i).forEach(I=>{let n=I.datatype;Array.isArray(I.datatype)||(n=[n]),n.forEach(r=>{r in g||(g[r]=[]),g[r].push(I)})}),g.none=[],g},Yb=[[0,0,0,255],[35,0,0,255],[52,0,0,255],[60,0,0,255],[63,1,0,255],[64,2,0,255],[68,5,0,255],[69,6,0,255],[72,8,0,255],[74,10,0,255],[77,12,0,255],[78,14,0,255],[81,16,0,255],[83,17,0,255],[85,19,0,255],[86,20,0,255],[89,22,0,255],[91,24,0,255],[92,25,0,255],[94,26,0,255],[95,28,0,255],[98,30,0,255],[100,31,0,255],[102,33,0,255],[103,34,0,255],[105,35,0,255],[106,36,0,255],[108,38,0,255],[109,39,0,255],[111,40,0,255],[112,42,0,255],[114,43,0,255],[115,44,0,255],[117,45,0,255],[119,47,0,255],[119,47,0,255],[120,48,0,255],[122,49,0,255],[123,51,0,255],[125,52,0,255],[125,52,0,255],[126,53,0,255],[128,54,0,255],[129,56,0,255],[129,56,0,255],[131,57,0,255],[132,58,0,255],[134,59,0,255],[134,59,0,255],[136,61,0,255],[137,62,0,255],[137,62,0,255],[139,63,0,255],[139,63,0,255],[140,65,0,255],[142,66,0,255],[142,66,0,255],[143,67,0,255],[143,67,0,255],[145,68,0,255],[145,68,0,255],[146,70,0,255],[146,70,0,255],[148,71,0,255],[148,71,0,255],[149,72,0,255],[149,72,0,255],[151,73,0,255],[151,73,0,255],[153,75,0,255],[153,75,0,255],[154,76,0,255],[154,76,0,255],[154,76,0,255],[156,77,0,255],[156,77,0,255],[157,79,0,255],[157,79,0,255],[159,80,0,255],[159,80,0,255],[159,80,0,255],[160,81,0,255],[160,81,0,255],[162,82,0,255],[162,82,0,255],[163,84,0,255],[163,84,0,255],[165,85,0,255],[165,85,0,255],[166,86,0,255],[166,86,0,255],[166,86,0,255],[168,87,0,255],[168,87,0,255],[170,89,0,255],[170,89,0,255],[171,90,0,255],[171,90,0,255],[173,91,0,255],[173,91,0,255],[174,93,0,255],[174,93,0,255],[176,94,0,255],[176,94,0,255],[177,95,0,255],[177,95,0,255],[179,96,0,255],[179,96,0,255],[180,98,0,255],[182,99,0,255],[182,99,0,255],[183,100,0,255],[183,100,0,255],[185,102,0,255],[185,102,0,255],[187,103,0,255],[187,103,0,255],[188,104,0,255],[188,104,0,255],[190,105,0,255],[191,107,0,255],[191,107,0,255],[193,108,0,255],[193,108,0,255],[194,109,0,255],[196,110,0,255],[196,110,0,255],[197,112,0,255],[197,112,0,255],[199,113,0,255],[200,114,0,255],[200,114,0,255],[202,116,0,255],[202,116,0,255],[204,117,0,255],[205,118,0,255],[205,118,0,255],[207,119,0,255],[208,121,0,255],[208,121,0,255],[210,122,0,255],[211,123,0,255],[211,123,0,255],[213,124,0,255],[214,126,0,255],[214,126,0,255],[216,127,0,255],[217,128,0,255],[217,128,0,255],[219,130,0,255],[221,131,0,255],[221,131,0,255],[222,132,0,255],[224,133,0,255],[224,133,0,255],[225,135,0,255],[227,136,0,255],[227,136,0,255],[228,137,0,255],[230,138,0,255],[230,138,0,255],[231,140,0,255],[233,141,0,255],[233,141,0,255],[234,142,0,255],[236,144,0,255],[236,144,0,255],[238,145,0,255],[239,146,0,255],[241,147,0,255],[241,147,0,255],[242,149,0,255],[244,150,0,255],[244,150,0,255],[245,151,0,255],[247,153,0,255],[247,153,0,255],[248,154,0,255],[250,155,0,255],[251,156,0,255],[251,156,0,255],[253,158,0,255],[255,159,0,255],[255,159,0,255],[255,160,0,255],[255,161,0,255],[255,163,0,255],[255,163,0,255],[255,164,0,255],[255,165,0,255],[255,167,0,255],[255,167,0,255],[255,168,0,255],[255,169,0,255],[255,169,0,255],[255,170,0,255],[255,172,0,255],[255,173,0,255],[255,173,0,255],[255,174,0,255],[255,175,0,255],[255,177,0,255],[255,178,0,255],[255,179,0,255],[255,181,0,255],[255,181,0,255],[255,182,0,255],[255,183,0,255],[255,184,0,255],[255,187,7,255],[255,188,10,255],[255,189,14,255],[255,191,18,255],[255,192,21,255],[255,193,25,255],[255,195,29,255],[255,197,36,255],[255,198,40,255],[255,200,43,255],[255,202,51,255],[255,204,54,255],[255,206,61,255],[255,207,65,255],[255,210,72,255],[255,211,76,255],[255,214,83,255],[255,216,91,255],[255,219,98,255],[255,221,105,255],[255,223,109,255],[255,225,116,255],[255,228,123,255],[255,232,134,255],[255,234,142,255],[255,237,149,255],[255,239,156,255],[255,240,160,255],[255,243,167,255],[255,246,174,255],[255,248,182,255],[255,249,185,255],[255,252,193,255],[255,253,196,255],[255,255,204,255],[255,255,207,255],[255,255,211,255],[255,255,218,255],[255,255,222,255],[255,255,225,255],[255,255,229,255],[255,255,233,255],[255,255,236,255],[255,255,240,255],[255,255,244,255],[255,255,247,255],[255,255,255,0]],jg=Ah.reduce((e,g)=>{if(e[g.type]=g,g.aliases)for(const i of g.aliases)e[i]=g;return e},{}),$st=Ah.reduce((e,g)=>{for(let i=0;i{const i=OQ(g);let I=new Set(Object.values(i).flatMap(n=>n));for(const n of e){const r=new Set(n);I=new Set([...I].filter(C=>C.datatype.filter(o=>r.has(o)).length>0))}return[...I]},QGe=8,_Q=8,qst=Object.freeze(Object.defineProperty({__proto__:null,AVAILABLE_TRACK_TYPES:SX,DATATYPE_TO_TRACK_TYPE:OQ,DEFAULT_CONTAINER_PADDING_X:FGe,DEFAULT_CONTAINER_PADDING_Y:DGe,DEFAULT_SERVER:pz,DEFAULT_TRACKS_FOR_DATATYPE:xB,DEFAULT_VIEW_MARGIN:LZ,DEFAULT_VIEW_PADDING:UZ,GLOBALS:ot,HEATED_OBJECT_MAP:Yb,LOCATION_LISTENER_PREFIX:jZ,LONG_DRAG_TIMEOUT:QZ,MAX_CLICK_DELAY:xGe,MIN_HORIZONTAL_HEIGHT:JGe,MIN_VERTICAL_WIDTH:OGe,MOUSE_TOOL_MOVE:GX,MOUSE_TOOL_SELECT:JC,NUM_PRECOMP_SUBSETS_PER_1D_TTILE:QGe,NUM_PRECOMP_SUBSETS_PER_2D_TTILE:_Q,POSITIONS_BY_DATATYPE:$st,SHORT_DRAG_TIMEOUT:EGe,THEME_DARK:ii,THEME_DEFAULT:bst,THEME_LIGHT:BX,TILE_FETCH_DEBOUNCE:fz,TRACKS_INFO:Ah,TRACKS_INFO_BY_TYPE:jg,TRACK_LOCATIONS:bz,VIEW_HEADER_MED_WIDTH_SEARCH_BAR:zGe,VIEW_HEADER_MIN_WIDTH_SEARCH_BAR:PGe,ZOOM_DEBOUNCE:vX,ZOOM_TRANSITION_DURATION:MGe},Symbol.toStringTag,{value:"Module"})),Kt=e=>{const g=HI(e);return ot.PIXI.utils.rgb2hex([g.r/255,g.g/255,g.b/255])},jGe=e=>{if(e==="transparent")return[255,255,255,0];const g=HI(e);return[g.r,g.g,g.b,255]},wX=(e,g,i)=>{const I=TI(e,i),n=TI(g,i);if(!I||!n)throw new Error("Couldn't convert data to genomic coordinates");return[I[0],Math.round(I[1]),n[0],Math.round(n[1])]},LQ=(e,g,i)=>{let I;const n=(...r)=>{const C=()=>{I=void 0,i||e(...r)},o=i&&!I;clearTimeout(I),I=setTimeout(C,g),o&&e(...r)};return n.cancel=()=>{clearTimeout(I),I=void 0},n},yz=e=>(e+16**6).toString(16).substr(-6),$Ge=e=>{const g={};return e.forEach(i=>{g[i[0]]=i[1]}),g},YC=e=>{const g=[];for(const i in e)e.hasOwnProperty(i)&&g.push([i,e[i]]);return g};function HC(e){const g=[];for(const i in e)e.hasOwnProperty(i)&&g.push(i);return g}function Mg(e){const g=[];for(const i in e)e.hasOwnProperty(i)&&g.push(e[i]);return g}function LG(e,g){const i=typeof g=="string"?new Blob([g],{type:"application/octet-stream"}):g,I=window.document.createElement("a");I.href=window.URL.createObjectURL(i),I.download=e,document.body.appendChild(I),I.click(),document.body.removeChild(I),URL.revokeObjectURL(I.href)}const qGe=e=>{const g=["top","bottom","gallery"],i=["left","right","gallery"];return e.center=e.center||[],e.left=e.left||[],e.right=e.right||[],e.top=e.top||[],e.bottom=e.bottom||[],e.whole=e.whole||[],e.gallery=e.gallery||[],g.map(I=>e[I]).forEach(I=>I.forEach(n=>{const r=jg[n.type],C=r&&r.defaultOptions||{},o=n.options?{...C,...n.options}:C;o.minHeight!==void 0&&n.height===void 0&&(n.height=o.minHeight),n.height===void 0&&(n.height=r&&r.defaultHeight||JGe)})),i.map(I=>e[I]).forEach(I=>I.forEach(n=>{const r=jg[n.type],C=r&&r.defaultOptions||{},o=n.options?{...C,...n.options}:C;o.minWidth!==void 0&&n.width===void 0&&(n.width=o.minWidth),n.width===void 0&&(n.width=r&&r.defaultWidth||OGe)})),e},eve=e=>g=>Array.prototype.reduce.call(g,e),elt=eve((e,g)=>e.concat(g)),tlt=e=>g=>Array.prototype.forEach.call(g,e),RX=(e,g)=>{g.dispatchEvent(KGe(e))},glt=(e,g)=>[ZX(e[0],e[1],g),ZX(e[2],e[3],g)];function ilt(e,g,i,I,n){const{chr:r,pos:C}=g,{chr:o,pos:a}=i,s=[];if(r===o){const A=r,l=Math.floor(C/I),c=Math.min(l+n,Math.ceil(a/I));s.push([A,l,c])}else{let A=n;const l=e.findIndex(([u])=>u===r),c=e.findIndex(([u])=>u===o);for(let u=l;u<=c;u++){let d,h;const[m,f]=e[u];u{if(i.length===0)return;if(i.length===1)return i[0];let I=i[0];const n=xB[e]!==void 0?xB[e][g]:void 0;return n!==void 0&&(I=i.find(r=>r.type===n)||I),I};var oIe={},GF={},vF=34,rZ=10,BF=13;function tve(e){return new Function("d","return {"+e.map(function(g,i){return JSON.stringify(g)+": d["+i+'] || ""'}).join(",")+"}")}function Ilt(e,g){var i=tve(e);return function(I,n){return g(i(I),n,e)}}function aIe(e){var g=Object.create(null),i=[];return e.forEach(function(I){for(var n in I)n in g||i.push(g[n]=n)}),i}function Sr(e,g){var i=e+"",I=i.length;return I9999?"+"+Sr(e,6):Sr(e,4)}function rlt(e){var g=e.getUTCHours(),i=e.getUTCMinutes(),I=e.getUTCSeconds(),n=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":nlt(e.getUTCFullYear())+"-"+Sr(e.getUTCMonth()+1,2)+"-"+Sr(e.getUTCDate(),2)+(n?"T"+Sr(g,2)+":"+Sr(i,2)+":"+Sr(I,2)+"."+Sr(n,3)+"Z":I?"T"+Sr(g,2)+":"+Sr(i,2)+":"+Sr(I,2)+"Z":i||g?"T"+Sr(g,2)+":"+Sr(i,2)+"Z":"")}function QQ(e){var g=new RegExp('["'+e+` +\r]`),i=e.charCodeAt(0);function I(l,c){var u,d,h=n(l,function(m,f){if(u)return u(m,f-1);d=m,u=c?Ilt(m,c):tve(m)});return h.columns=d||[],h}function n(l,c){var u=[],d=l.length,h=0,m=0,f,b=d<=0,p=!1;l.charCodeAt(d-1)===rZ&&--d,l.charCodeAt(d-1)===BF&&--d;function y(){if(b)return GF;if(p)return p=!1,oIe;var B,G=h,v;if(l.charCodeAt(G)===vF){for(;h++=d?b=!0:(v=l.charCodeAt(h++))===rZ?p=!0:v===BF&&(p=!0,l.charCodeAt(h)===rZ&&++h),l.slice(G+1,B-1).replace(/""/g,'"')}for(;hSX[e]?Promise.resolve(SX[e]):g(e),hlt=e=>{if(e.length===0)return null;const g=JQ(e);return HN(g)},mlt=e=>fetch(e,{credentials:"same-origin"}).then(g=>g.text()).then(g=>hlt(g)).catch(g=>{console.error("Could not retrieve or parse chrom info.",g)}),flt=(e,g,I)=>g(e,I).then(i=>(SX[e]=i,SX[e])),plt=e=>flt(e,dlt,mlt),OQ={get:plt};function blt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Cie(e,g){for(var I=0;Ithis.pubSub.publish(I,i)}},{key:"unregister",value:function(I,i){!this.registeredEls[I]&&this.registeredEls[I]!==i||(this.registeredEls[I].removeEventListener(I,this.registeredEls[I].__handler__),this.registeredEls[I]=void 0,delete this.registeredEls[I])}},{key:"register",value:function(I,i,n=!1){!i||this.registeredEls[I]===i||(this.registeredEls[I]&&this.unregister(this.registeredEls[I]),this.registeredEls[I]=i,this.registeredEls[I].__handler__=this.getEventHandler(I),this.registeredEls[I].addEventListener(I,this.registeredEls[I].__handler__,{capture:n,passive:!1}))}}]),e}();const UGe=e=>new vlt(e);let rie=!1;const Blt=()=>{if(rie)return;const[e,g]=tve(),I="102117110099116105111110040041123115101108102046099111110115111108101046108111103040039",i="072",n="105",C="071",r="108097115115",o="032118",a="058032104116116112058047047104105103108097115115046105111039041125",s=[String.fromCharCode(...I.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...i.match(/.{1,3}/g).map(G=>+G)),String.fromCharCode(...n.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...C.match(/.{1,3}/g).map(G=>+G)),String.fromCharCode(...r.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...o.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...g.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...a.match(/.{1,3}/g).map(G=>+G)).toLowerCase()].join(""),A="085082076",l="066076079066",c="087111114107101114",u="099114101097116101079098106101099116085082076",d="114101118111107101079098106101099116085082076",h=G=>G.charAt(0).toUpperCase()+G.slice(1),m=G=>G.slice(0,6)+G.charAt(6).toUpperCase()+G.slice(7,12)+G.slice(12).toUpperCase(),f=e[String.fromCharCode(...A.match(/.{1,3}/g).map(G=>+G))],b=e[h(String.fromCharCode(...l.match(/.{1,3}/g).map(G=>+G)).toLowerCase())],p=e[h(String.fromCharCode(...c.match(/.{1,3}/g).map(G=>+G)).toLowerCase())],y=m(String.fromCharCode(...u.match(/.{1,3}/g).map(G=>+G)).toLowerCase()),Z=m(String.fromCharCode(...d.match(/.{1,3}/g).map(G=>+G)).toLowerCase()),B=f[y](new b([`(${s})()`],{type:"application/javascript"}));new p(B),f[Z](B),rie=!0},QGe={listen:Blt};function Slt(e,g,I,i,n,C,r){let o,a;if(n){const h=t4(n);o=h,a=(m,f)=>h(f.map(b=>e[b*g[1]+m]))??0}let s,A,l,c,u,d;for(l=0;l{const w=l(v);return Number.isNaN(w)?254:Math.max(0,Math.min(254,Math.floor(w)))},B=(v,w)=>{b=255,!(r&&Math.floor(v/p)v%p)&&!Number.isNaN(+w)&&(b=Z(w+n)),(b<0||b>255)&&console.warn("out of bounds rgbIdx:",b," (should be 0 <= rgbIdx <= 255)"),s&&!Number.isNaN(+w)&&+w==0?f=s:f=C[b],y[v*4]=f[0],y[v*4+1]=f[1],y[v*4+2]=f[2],y[v*4+3]=f[3]};let G;try{if(c&&a)Slt(g,a,B,c,u,d,h);else for(let v=0;v+a).filter(a=>!Number.isNaN(a));if(i[C].tilePos=o,i[C].tilesetUid=r[0],"dense"in i[C]){const a=i[C].dense,s=Vlt(a);let A;if(i[C].dtype==="float16"){const c=new Uint16Array(s);A=Wlt(c)}else A=new Float32Array(s);const l=o.length===2?new e4(A):new WX(A);i[C].dense=A,i[C].denseDataExtrema=l,i[C].minNonZero=l.minNonZeroInTile,i[C].maxNonZero=l.maxNonZeroInTile}}return i}function Xlt(e,g,I,i,n,C){const r={"content-type":"application/json"};i&&(r.Authorization=i),fetch(e,{credentials:"same-origin",headers:r,...C&&Object.keys(C).length>0?{method:"POST",body:JSON.stringify(C)}:{}}).then(o=>o.json()).then(o=>{n(_Q(o,g,I))}).catch(o=>console.warn("err:",o))}const oie=15,wX=lg.nice();let DB=0,kb=null;const Hlt=(e,g,I)=>{let i,n=[],C={},r=0;const o=u=>{const d=C[u.id];d&&n[d]?n[d].ids=n[d].ids.concat(u.ids):(C[u.id]=n.length,n.push(u))},a=()=>{i=null,n=[],C={}},s=(u,...d)=>{e({sessionId:wX,requests:n},...d),a()},A=(u,...d)=>{const h=()=>{r>0&&(s(u,...d),r=0)};clearTimeout(i),i=setTimeout(h,I)};A.cancel=()=>{clearTimeout(i),a()},A.immediate=()=>{e({sessionId:wX,requests:n})};let l=!1;return(u,...d)=>{o(u),l?r++:(s(u,...d),A(u,...d),l=!0,r=0,setTimeout(()=>{l=!1},g))}},xB=e=>{kb=e},Tlt=()=>kb;function Nlt(e,g){const I=e.requests,i=[],n={},C={};for(const o of I){n[o.server]||(n[o.server]={},C[o.server]=[]);for(const a of o.ids)if(n[o.server][a]=!0,o.options){const s=a.indexOf("."),A=a.substring(0,s),l=a.substring(s+1),c=C[o.server].find(u=>u.tilesetUid===A);c?c.tileIds.push(l):C[o.server].push({tilesetUid:A,tileIds:[l],options:o.options})}}const r=Object.keys(n);for(const o of r){const a=Object.keys(n[o]),s=C[o];for(let A=0;A`d=${h}`).join("&"),u=`${o}/tiles/?${c}&s=${wX}`,d=new Promise((h,m)=>{g.publish("requestSent",u);const f={};f.outUrl=u,f.server=o,f.theseTileIds=l,f.authHeader=kb,Xlt(f.outUrl,f.server,f.theseTileIds,f.authHeader,h,s),g.publish("requestReceived",u)});i.push(d)}}Promise.all(i).then(o=>{const a={};for(const s of o){const A=Object.keys(s);for(const l of A)a[`${s[l].server}/${l}`]=s[l]}for(const s of I){const A={},{server:l}=s;for(const c of s.ids)A[c]=a[`${l}/${c}`];s.done(A)}})}const klt=Hlt(Nlt,lz,lz),Ylt=(e,g)=>{const I=e.map(o=>+o).sort((o,a)=>a-o),i=g.range()[1]-g.range()[0],C=I.map(o=>(g.domain()[1]-g.domain()[0])/o).map(o=>o/i),r=C.filter(o=>o<1);return r.length===0?0:C.indexOf(r[r.length-1])},Klt=(e,g)=>{if(e.resolutions)return e.resolutions.map(o=>+o).sort((o,a)=>a-o)[g];const I=e.max_width,i=+e.bins_per_dimension;return I/(2**g*i)},Flt=(e,g,I,i)=>{const n=e.range()[1]-e.range()[0],C=Math.max((I-g)/(e.domain()[1]-e.domain()[0]),1),o=Math.max(0,Math.ceil(Math.log(n/384)/Math.LN2));let a=Math.round(Math.log(C)/Math.LN2)+o,s=0;return i&&(s=Math.floor(Math.log(256)/Math.log(2)-Math.log(i)/Math.log(2))),a+=s,a};function Dlt(e,g,I,i,n){let C=null;const r=e.bins_per_dimension||256;e.resolutions?C=e.resolutions[i]*r:C=g/2**i;const o=Math.floor((n-I)/C),a=Math.floor(r*(n-o*C)/C);return[o,a]}const xlt=(e,g,I,i,n,C)=>{const r=Math.min(e,n),o=C/2**r,a=1e-7;return nC(Math.max(0,Math.floor((g.domain()[0]-I)/o)),Math.min(2**r,Math.ceil((g.domain()[1]-I-a)/o)))},Elt=(e,g,I)=>e.resolutions?e.resolutions.map(n=>+n).sort((n,C)=>C-n)[g]*I:e.max_width/2**g,Mlt=(e,g,I,i,n)=>{const o=e*(n||256),a=20;i||(i=Number.MAX_VALUE);const s=Math.max(0,Math.floor((g.domain()[0]-I)/o)),A=Math.ceil(Math.min(i,g.domain()[1]-I-1e-7)/o);let l=nC(s,A);return l.length>a&&(console.warn(`Too many visible tiles: ${l.length} truncating to ${a}`),l=l.slice(0,a)),l},zlt=(e,g,I,i,n,C,r,o,a,s)=>{const{tileData:A}=e;if(!A.dense){C(null);return}if(e.mirrored&&!e.isMirrored&&e.tileData.tilePos.length>0&&e.tileData.tilePos[0]===e.tileData.tilePos[1]){e.tileData.dense=e.tileData.dense.slice();const c=Math.floor(Math.sqrt(e.tileData.dense.length));for(let u=0;u{if(!r.ok)throw Error(r.statusText);return r[I]()}).then(r=>(g(void 0,r),r)).catch(r=>(console.error(`Could not fetch ${e}`,r),g(r,void 0),r)).finally(()=>{i.publish("requestReceived",e),DB-=1})}function Plt(e,g,I){return jGe(e,g,"text",I)}async function $Ge(e,g,I){return e.indexOf("hg19")>=0&&await $Q(1),jGe(e,g,"json",I)}const Jlt=(e,g,I,i,n)=>{const C=`${TN(e)}/tileset_info/?d=${g}&s=${wX}`;n.publish("requestSent",C),$Ge(C,(r,o)=>{n.publish("requestReceived",C),r?i?i(`Error retrieving tilesetInfo from: ${e}`):console.warn("Error retrieving: ",C):I(o)},n)},vt={calculateResolution:Klt,calculateTileAndPosInTile:Dlt,calculateTiles:xlt,calculateTilesFromResolution:Mlt,calculateTileWidth:Elt,calculateZoomLevel:Flt,calculateZoomLevelFromResolutions:Ylt,fetchTilesDebounced:klt,json:$Ge,text:Plt,tileDataToPixData:zlt,trackInfo:Jlt},Olt=Object.freeze(Object.defineProperty({__proto__:null,ElementResizeListener:QGe,get authHeader(){return kb},chromInfo:OQ,createDomEvent:UGe,getTileProxyAuthHeader:Tlt,get requestsInFlight(){return DB},setTileProxyAuthHeader:xB,tileProxy:vt,tileResponseToData:_Q},Symbol.toStringTag,{value:"Module"})),qGe=e=>(QGe.listen(),[e.clientWidth,e.clientHeight]),gr=(e,g)=>{let I=null;const i=n=>(n.uid===g&&(I=n),n.type.substr(0,8)==="combined"&&n.contents.forEach(i),null);return Object.keys(e).map(n=>e[n]).filter(n=>n.filter).reduce((n,C)=>n.concat(C),[]).forEach(i),I},_lt=(e,g,I)=>{const n=e.state.views[g];if(!n)return null;let C=null;const r=a=>(a.uid===I&&(C=a),a.type.substr(0,8)==="combined"&&a.contents.forEach(r),null),o=n.tracks;return Object.keys(o).map(a=>o[a]).filter(a=>a.filter).reduce((a,s)=>a.concat(s),[]).forEach(r),C},UZ=(e,g,I)=>{const i=g?e[g]:Object.values(e)[0];if(!i){console.warn(g?`Could't find view with id "${g}"`:"No views available.");return}let n=i.trackRenderer.trackDefObjects[I];return n?n=n.trackObject:Object.values(i.trackRenderer.trackDefObjects).map(C=>C.trackObject).filter(C=>C.childTracks).forEach(C=>{C.createdTracks[I]&&(n=C.createdTracks[I])}),n};function Q1(e){return e.type==="combined"}function Llt(e){return"deltaY"in e&&"deltaMode"in e}function eve(e){return e!==null&&typeof e=="object"}function Ult(e){return eve(e)&&"max_width"in e}function Qlt(e){return eve(e)&&"resolutions"in e}const LQ=(e,g,I=!0,i=null)=>e.forEach(n=>{I&&Q1(n)&&LQ(n.contents,g,I,i),g(n,i)}),Is=(e,g,I=!0)=>{const i=[];for(const[n,C]of Object.entries(e))LQ(C,g,I,n),i.push(...C);return i},OG=(e,g)=>{let I=null;return Is(e,(i,n)=>{i.uid===g&&(I=n)}),I},UQ=e=>g=>Array.prototype.map.call(g,e),tve=()=>[window,UQ(e=>e.charCodeAt(0))("1.13.3").map(e=>e<=999?`00${e}`.slice(-3):e).join("")],gve=(e,g=1,I=100,i=0,n=0,C=0,r=100)=>{const o=document.createElement("canvas");o.width=g,o.height=I;const a=o.getContext("2d");if(!a)throw new Error("Could not get canvas context");const s=a.createLinearGradient(i,n,C,r);return e.forEach(A=>{s.addColorStop(A.from,A.color)}),a.fillStyle=s,a.fillRect(0,0,g,I),o},Ive=(e,g)=>{let I=e;for(;I&&I!==g&&I.tagName!=="HTML";)I=I.parentNode;return I===g},ive=e=>parseInt(e.replace(/^#/,""),16),nve=()=>{};function jlt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function aie(e,g){for(var I=0;I{this.createdTracks[I[C].uid]=n});for(let n=0;n{if(C.add(a.uid),a.uid in this.createdTracks)n.push(this.createdTracks[a.uid]);else{const s=i(a);s.setPosition(this.position),s.setDimensions(this.dimensions),n.push(s),s.zoomed(this._xScale,this._yScale),this.createdTracks[a.uid]=s}}),this.childTracks=n;const r=new Set(Object.keys(this.createdTracks));return[...new Set([...r].filter(a=>!C.has(a)))].forEach(a=>{this.createdTracks[a].remove(),delete this.createdTracks[a]}),this}},{key:"setPosition",value:function(I){this.position=I;for(let i=0;in.minValue).map(n=>n.minValue()).filter(n=>n);return Math.min(...i)}for(const i of this.childTracks)i.minValue&&i.minValue(I)}},{key:"maxValue",value:function(I){if(arguments.length===0){const i=this.childTracks.filter(n=>n.maxValue).map(n=>n.maxValue()).filter(n=>n);return Math.max(...i)}for(const i of this.childTracks)i.maxValue&&i.maxValue(I)}},{key:"respondsToPosition",value:function(I,i){return I>=this.position[0]&&I<=this.dimensions[0]+this.position[0]&&i>=this.position[1]&&i<=this.dimensions[1]+this.position[1]}},{key:"stopHover",value:function(){for(const I of this.childTracks)I.stopHover&&I.stopHover()}},{key:"getMouseOverHtml",value:function(I,i){let n="";for(const C of this.childTracks)if(C.getMouseOverHtml){const r=C.getMouseOverHtml(I,i);r&&r.length&&(n+=r,n+="

")}return n}}]),e}();const Cve=(e,g)=>g===e?!0:g instanceof QQ?Object.keys(g.createdTracks).map(I=>g.createdTracks[I]).some(I=>Cve(e,I)):!1,jQ=(e,g,I,i,n,C,r=!1)=>r?e>=I&&e<=i||g>=n&&g<=C:e>=I&&e<=i&&g>=n&&g<=C,tct=e=>Math.log(Math.tan((e+Math.PI/2)/2)),gct=(e,g)=>{let I=e*Math.PI/180;return I=tct(I),2**g*(Math.PI-I)/(2*Math.PI)},XN=e=>UQ(g=>e[g])(Object.keys(e)),Ict=e=>XN(e).map(g=>g.chromInfoPath).forEach(g=>OQ.get(g)),ict=(e,g)=>2**g*(e+180)/360,hz=(e,g)=>e>g?e:g,Aie=1e-7;function mz(e){let g=Number.MIN_SAFE_INTEGER;for(let I=0;I-Aie||i>g&&(g=i)}return g}const rve=(e,g)=>e-sie||i(e%g+g)%g,ove=(e,g)=>{const I=+g;if(!Number.isNaN(I))if(e.dimension===1)for(let n=0;nVX[e]?Promise.resolve(VX[e]):g(e),vlt=e=>{if(e.length===0)return null;const g=jQ(e);return FN(g)},Blt=e=>fetch(e,{credentials:"same-origin"}).then(g=>g.text()).then(g=>vlt(g)).catch(g=>{console.error("Could not retrieve or parse chrom info.",g)}),Slt=(e,g,i)=>g(e,i).then(I=>(VX[e]=I,VX[e])),wlt=e=>Slt(e,Glt,Blt),$Q={get:wlt};function Rlt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function AIe(e,g){for(var i=0;ithis.pubSub.publish(i,I)}},{key:"unregister",value:function(i,I){!this.registeredEls[i]&&this.registeredEls[i]!==I||(this.registeredEls[i].removeEventListener(i,this.registeredEls[i].__handler__),this.registeredEls[i]=void 0,delete this.registeredEls[i])}},{key:"register",value:function(i,I,n=!1){!I||this.registeredEls[i]===I||(this.registeredEls[i]&&this.unregister(this.registeredEls[i]),this.registeredEls[i]=I,this.registeredEls[i].__handler__=this.getEventHandler(i),this.registeredEls[i].addEventListener(i,this.registeredEls[i].__handler__,{capture:n,passive:!1}))}}]),e}();const gve=e=>new Hlt(e);let sIe=!1;const Tlt=()=>{if(sIe)return;const[e,g]=ove(),i="102117110099116105111110040041123115101108102046099111110115111108101046108111103040039",I="072",n="105",r="071",C="108097115115",o="032118",a="058032104116116112058047047104105103108097115115046105111039041125",s=[String.fromCharCode(...i.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...I.match(/.{1,3}/g).map(G=>+G)),String.fromCharCode(...n.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...r.match(/.{1,3}/g).map(G=>+G)),String.fromCharCode(...C.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...o.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...g.match(/.{1,3}/g).map(G=>+G)).toLowerCase(),String.fromCharCode(...a.match(/.{1,3}/g).map(G=>+G)).toLowerCase()].join(""),A="085082076",l="066076079066",c="087111114107101114",u="099114101097116101079098106101099116085082076",d="114101118111107101079098106101099116085082076",h=G=>G.charAt(0).toUpperCase()+G.slice(1),m=G=>G.slice(0,6)+G.charAt(6).toUpperCase()+G.slice(7,12)+G.slice(12).toUpperCase(),f=e[String.fromCharCode(...A.match(/.{1,3}/g).map(G=>+G))],b=e[h(String.fromCharCode(...l.match(/.{1,3}/g).map(G=>+G)).toLowerCase())],p=e[h(String.fromCharCode(...c.match(/.{1,3}/g).map(G=>+G)).toLowerCase())],y=m(String.fromCharCode(...u.match(/.{1,3}/g).map(G=>+G)).toLowerCase()),Z=m(String.fromCharCode(...d.match(/.{1,3}/g).map(G=>+G)).toLowerCase()),B=f[y](new b([`(${s})()`],{type:"application/javascript"}));new p(B),f[Z](B),sIe=!0},ive={listen:Tlt};function Nlt(e,g,i,I,n,r,C){let o,a;if(n){const h=C4(n);o=h,a=(m,f)=>h(f.map(b=>e[b*g[1]+m]))??0}let s,A,l,c,u,d;for(l=0;l{const w=l(v);return Number.isNaN(w)?254:Math.max(0,Math.min(254,Math.floor(w)))},B=(v,w)=>{b=255,!(C&&Math.floor(v/p)v%p)&&!Number.isNaN(+w)&&(b=Z(w+n)),(b<0||b>255)&&console.warn("out of bounds rgbIdx:",b," (should be 0 <= rgbIdx <= 255)"),s&&!Number.isNaN(+w)&&+w==0?f=s:f=r[b],y[v*4]=f[0],y[v*4+1]=f[1],y[v*4+2]=f[2],y[v*4+3]=f[3]};let G;try{if(c&&a)Nlt(g,a,B,c,u,d,h);else for(let v=0;v+a).filter(a=>!Number.isNaN(a));if(I[r].tilePos=o,I[r].tilesetUid=C[0],"dense"in I[r]){const a=I[r].dense,s=Klt(a);let A;if(I[r].dtype==="float16"){const c=new Uint16Array(s);A=Flt(c)}else A=new Float32Array(s);const l=o.length===2?new r4(A):new TX(A);I[r].dense=A,I[r].denseDataExtrema=l,I[r].minNonZero=l.minNonZeroInTile,I[r].maxNonZero=l.maxNonZeroInTile}}return I}function Dlt(e,g,i,I,n,r){const C={"content-type":"application/json"};I&&(C.Authorization=I),fetch(e,{credentials:"same-origin",headers:C,...r&&Object.keys(r).length>0?{method:"POST",body:JSON.stringify(r)}:{}}).then(o=>o.json()).then(o=>{n(qQ(o,g,i))}).catch(o=>console.warn("err:",o))}const lIe=15,WX=cg.nice();let EB=0,Kb=null;const xlt=(e,g,i)=>{let I,n=[],r={},C=0;const o=u=>{const d=r[u.id];d&&n[d]?n[d].ids=n[d].ids.concat(u.ids):(r[u.id]=n.length,n.push(u))},a=()=>{I=null,n=[],r={}},s=(u,...d)=>{e({sessionId:WX,requests:n},...d),a()},A=(u,...d)=>{const h=()=>{C>0&&(s(u,...d),C=0)};clearTimeout(I),I=setTimeout(h,i)};A.cancel=()=>{clearTimeout(I),a()},A.immediate=()=>{e({sessionId:WX,requests:n})};let l=!1;return(u,...d)=>{o(u),l?C++:(s(u,...d),A(u,...d),l=!0,C=0,setTimeout(()=>{l=!1},g))}},MB=e=>{Kb=e},Elt=()=>Kb;function Mlt(e,g){const i=e.requests,I=[],n={},r={};for(const o of i){n[o.server]||(n[o.server]={},r[o.server]=[]);for(const a of o.ids)if(n[o.server][a]=!0,o.options){const s=a.indexOf("."),A=a.substring(0,s),l=a.substring(s+1),c=r[o.server].find(u=>u.tilesetUid===A);c?c.tileIds.push(l):r[o.server].push({tilesetUid:A,tileIds:[l],options:o.options})}}const C=Object.keys(n);for(const o of C){const a=Object.keys(n[o]),s=r[o];for(let A=0;A`d=${h}`).join("&"),u=`${o}/tiles/?${c}&s=${WX}`,d=new Promise((h,m)=>{g.publish("requestSent",u);const f={};f.outUrl=u,f.server=o,f.theseTileIds=l,f.authHeader=Kb,Dlt(f.outUrl,f.server,f.theseTileIds,f.authHeader,h,s),g.publish("requestReceived",u)});I.push(d)}}Promise.all(I).then(o=>{const a={};for(const s of o){const A=Object.keys(s);for(const l of A)a[`${s[l].server}/${l}`]=s[l]}for(const s of i){const A={},{server:l}=s;for(const c of s.ids)A[c]=a[`${l}/${c}`];s.done(A)}})}const zlt=xlt(Mlt,fz,fz),Plt=(e,g)=>{const i=e.map(o=>+o).sort((o,a)=>a-o),I=g.range()[1]-g.range()[0],r=i.map(o=>(g.domain()[1]-g.domain()[0])/o).map(o=>o/I),C=r.filter(o=>o<1);return C.length===0?0:r.indexOf(C[C.length-1])},Jlt=(e,g)=>{if(e.resolutions)return e.resolutions.map(o=>+o).sort((o,a)=>a-o)[g];const i=e.max_width,I=+e.bins_per_dimension;return i/(2**g*I)},Olt=(e,g,i,I)=>{const n=e.range()[1]-e.range()[0],r=Math.max((i-g)/(e.domain()[1]-e.domain()[0]),1),o=Math.max(0,Math.ceil(Math.log(n/384)/Math.LN2));let a=Math.round(Math.log(r)/Math.LN2)+o,s=0;return I&&(s=Math.floor(Math.log(256)/Math.log(2)-Math.log(I)/Math.log(2))),a+=s,a};function _lt(e,g,i,I,n){let r=null;const C=e.bins_per_dimension||256;e.resolutions?r=e.resolutions[I]*C:r=g/2**I;const o=Math.floor((n-i)/r),a=Math.floor(C*(n-o*r)/r);return[o,a]}const Llt=(e,g,i,I,n,r)=>{const C=Math.min(e,n),o=r/2**C,a=1e-7;return nr(Math.max(0,Math.floor((g.domain()[0]-i)/o)),Math.min(2**C,Math.ceil((g.domain()[1]-i-a)/o)))},Ult=(e,g,i)=>e.resolutions?e.resolutions.map(n=>+n).sort((n,r)=>r-n)[g]*i:e.max_width/2**g,Qlt=(e,g,i,I,n)=>{const o=e*(n||256),a=20;I||(I=Number.MAX_VALUE);const s=Math.max(0,Math.floor((g.domain()[0]-i)/o)),A=Math.ceil(Math.min(I,g.domain()[1]-i-1e-7)/o);let l=nr(s,A);return l.length>a&&(console.warn(`Too many visible tiles: ${l.length} truncating to ${a}`),l=l.slice(0,a)),l},jlt=(e,g,i,I,n,r,C,o,a,s)=>{const{tileData:A}=e;if(!A.dense){r(null);return}if(e.mirrored&&!e.isMirrored&&e.tileData.tilePos.length>0&&e.tileData.tilePos[0]===e.tileData.tilePos[1]){e.tileData.dense=e.tileData.dense.slice();const c=Math.floor(Math.sqrt(e.tileData.dense.length));for(let u=0;u{if(!C.ok)throw Error(C.statusText);return C[i]()}).then(C=>(g(void 0,C),C)).catch(C=>(console.error(`Could not fetch ${e}`,C),g(C,void 0),C)).finally(()=>{I.publish("requestReceived",e),EB-=1})}function $lt(e,g,i){return Ive(e,g,"text",i)}async function nve(e,g,i){return e.indexOf("hg19")>=0&&await I4(1),Ive(e,g,"json",i)}const qlt=(e,g,i,I,n)=>{const r=`${DN(e)}/tileset_info/?d=${g}&s=${WX}`;n.publish("requestSent",r),nve(r,(C,o)=>{n.publish("requestReceived",r),C?I?I(`Error retrieving tilesetInfo from: ${e}`):console.warn("Error retrieving: ",r):i(o)},n)},vt={calculateResolution:Jlt,calculateTileAndPosInTile:_lt,calculateTiles:Llt,calculateTilesFromResolution:Qlt,calculateTileWidth:Ult,calculateZoomLevel:Olt,calculateZoomLevelFromResolutions:Plt,fetchTilesDebounced:zlt,json:nve,text:$lt,tileDataToPixData:jlt,trackInfo:qlt},ect=Object.freeze(Object.defineProperty({__proto__:null,ElementResizeListener:ive,get authHeader(){return Kb},chromInfo:$Q,createDomEvent:gve,getTileProxyAuthHeader:Elt,get requestsInFlight(){return EB},setTileProxyAuthHeader:MB,tileProxy:vt,tileResponseToData:qQ},Symbol.toStringTag,{value:"Module"})),rve=e=>(ive.listen(),[e.clientWidth,e.clientHeight]),nC=(e,g)=>{let i=null;const I=n=>(n.uid===g&&(i=n),n.type.substr(0,8)==="combined"&&n.contents.forEach(I),null);return Object.keys(e).map(n=>e[n]).filter(n=>n.filter).reduce((n,r)=>n.concat(r),[]).forEach(I),i},tct=(e,g,i)=>{const n=e.state.views[g];if(!n)return null;let r=null;const C=a=>(a.uid===i&&(r=a),a.type.substr(0,8)==="combined"&&a.contents.forEach(C),null),o=n.tracks;return Object.keys(o).map(a=>o[a]).filter(a=>a.filter).reduce((a,s)=>a.concat(s),[]).forEach(C),r},$Z=(e,g,i)=>{const I=g?e[g]:Object.values(e)[0];if(!I){console.warn(g?`Could't find view with id "${g}"`:"No views available.");return}let n=I.trackRenderer.trackDefObjects[i];return n?n=n.trackObject:Object.values(I.trackRenderer.trackDefObjects).map(r=>r.trackObject).filter(r=>r.childTracks).forEach(r=>{r.createdTracks[i]&&(n=r.createdTracks[i])}),n};function q1(e){return e.type==="combined"}function gct(e){return"deltaY"in e&&"deltaMode"in e}function Cve(e){return e!==null&&typeof e=="object"}function ict(e){return Cve(e)&&"max_width"in e}function Ict(e){return Cve(e)&&"resolutions"in e}const e4=(e,g,i=!0,I=null)=>e.forEach(n=>{i&&q1(n)&&e4(n.contents,g,i,I),g(n,I)}),Is=(e,g,i=!0)=>{const I=[];for(const[n,r]of Object.entries(e))e4(r,g,i,n),I.push(...r);return I},UG=(e,g)=>{let i=null;return Is(e,(I,n)=>{I.uid===g&&(i=n)}),i},t4=e=>g=>Array.prototype.map.call(g,e),ove=()=>[window,t4(e=>e.charCodeAt(0))("1.13.3").map(e=>e<=999?`00${e}`.slice(-3):e).join("")],ave=(e,g=1,i=100,I=0,n=0,r=0,C=100)=>{const o=document.createElement("canvas");o.width=g,o.height=i;const a=o.getContext("2d");if(!a)throw new Error("Could not get canvas context");const s=a.createLinearGradient(I,n,r,C);return e.forEach(A=>{s.addColorStop(A.from,A.color)}),a.fillStyle=s,a.fillRect(0,0,g,i),o},Ave=(e,g)=>{let i=e;for(;i&&i!==g&&i.tagName!=="HTML";)i=i.parentNode;return i===g},sve=e=>parseInt(e.replace(/^#/,""),16),lve=()=>{};function nct(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cIe(e,g){for(var i=0;i{this.createdTracks[i[r].uid]=n});for(let n=0;n{if(r.add(a.uid),a.uid in this.createdTracks)n.push(this.createdTracks[a.uid]);else{const s=I(a);s.setPosition(this.position),s.setDimensions(this.dimensions),n.push(s),s.zoomed(this._xScale,this._yScale),this.createdTracks[a.uid]=s}}),this.childTracks=n;const C=new Set(Object.keys(this.createdTracks));return[...new Set([...C].filter(a=>!r.has(a)))].forEach(a=>{this.createdTracks[a].remove(),delete this.createdTracks[a]}),this}},{key:"setPosition",value:function(i){this.position=i;for(let I=0;In.minValue).map(n=>n.minValue()).filter(n=>n);return Math.min(...I)}for(const I of this.childTracks)I.minValue&&I.minValue(i)}},{key:"maxValue",value:function(i){if(arguments.length===0){const I=this.childTracks.filter(n=>n.maxValue).map(n=>n.maxValue()).filter(n=>n);return Math.max(...I)}for(const I of this.childTracks)I.maxValue&&I.maxValue(i)}},{key:"respondsToPosition",value:function(i,I){return i>=this.position[0]&&i<=this.dimensions[0]+this.position[0]&&I>=this.position[1]&&I<=this.dimensions[1]+this.position[1]}},{key:"stopHover",value:function(){for(const i of this.childTracks)i.stopHover&&i.stopHover()}},{key:"getMouseOverHtml",value:function(i,I){let n="";for(const r of this.childTracks)if(r.getMouseOverHtml){const C=r.getMouseOverHtml(i,I);C&&C.length&&(n+=C,n+="
")}return n}}]),e}();const cve=(e,g)=>g===e?!0:g instanceof g4?Object.keys(g.createdTracks).map(i=>g.createdTracks[i]).some(i=>cve(e,i)):!1,i4=(e,g,i,I,n,r,C=!1)=>C?e>=i&&e<=I||g>=n&&g<=r:e>=i&&e<=I&&g>=n&&g<=r,act=e=>Math.log(Math.tan((e+Math.PI/2)/2)),Act=(e,g)=>{let i=e*Math.PI/180;return i=act(i),2**g*(Math.PI-i)/(2*Math.PI)},KN=e=>t4(g=>e[g])(Object.keys(e)),sct=e=>KN(e).map(g=>g.chromInfoPath).forEach(g=>$Q.get(g)),lct=(e,g)=>2**g*(e+180)/360,Zz=(e,g)=>e>g?e:g,uIe=1e-7;function Gz(e){let g=Number.MIN_SAFE_INTEGER;for(let i=0;i-uIe||I>g&&(g=I)}return g}const uve=(e,g)=>e-dIe||I(e%g+g)%g,dve=(e,g)=>{const i=+g;if(!Number.isNaN(i))if(e.dimension===1)for(let n=0;n * @license MIT - */var oct=function(e){return e!=null&&(ave(e)||act(e)||!!e._isBuffer)};function ave(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function act(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&ave(e.slice(0,0))}var Act=rct,sct=oct,lct=typeof Float64Array<"u";function cct(e,g){return e[0]-g[0]}function uct(){var e=this.stride,g=new Array(e.length),I;for(I=0;IMath.abs(this.stride[1]))?[1,0]:[0,1]}})"):g===3&&n.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):n.push("ORDER})")),n.push("proto.set=function "+I+"_set("+r.join(",")+",v){"),i?n.push("return this.data.set("+o+",v)}"):n.push("return this.data["+o+"]=v}"),n.push("proto.get=function "+I+"_get("+r.join(",")+"){"),i?n.push("return this.data.get("+o+")}"):n.push("return this.data["+o+"]}"),n.push("proto.index=function "+I+"_index(",r.join(),"){return "+o+"}"),n.push("proto.hi=function "+I+"_hi("+r.join(",")+"){return new "+I+"(this.data,"+C.map(function(m){return["(typeof i",m,"!=='number'||i",m,"<0)?this.shape[",m,"]:i",m,"|0"].join("")}).join(",")+","+C.map(function(m){return"this.stride["+m+"]"}).join(",")+",this.offset)}");var A=C.map(function(m){return"a"+m+"=this.shape["+m+"]"}),l=C.map(function(m){return"c"+m+"=this.stride["+m+"]"});n.push("proto.lo=function "+I+"_lo("+r.join(",")+"){var b=this.offset,d=0,"+A.join(",")+","+l.join(","));for(var c=0;c=0){d=i"+c+"|0;b+=c"+c+"*d;a"+c+"-=d}");n.push("return new "+I+"(this.data,"+C.map(function(m){return"a"+m}).join(",")+","+C.map(function(m){return"c"+m}).join(",")+",b)}"),n.push("proto.step=function "+I+"_step("+r.join(",")+"){var "+C.map(function(m){return"a"+m+"=this.shape["+m+"]"}).join(",")+","+C.map(function(m){return"b"+m+"=this.stride["+m+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(var c=0;c=0){c=(c+this.stride["+c+"]*i"+c+")|0}else{a.push(this.shape["+c+"]);b.push(this.stride["+c+"])}");n.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),n.push("return function construct_"+I+"(data,shape,stride,offset){return new "+I+"(data,"+C.map(function(m){return"shape["+m+"]"}).join(",")+","+C.map(function(m){return"stride["+m+"]"}).join(",")+",offset)}");var h=new Function("CTOR_LIST","ORDER",n.join(` -`));return h(RX[e],uct)}function hct(e){if(sct(e))return"buffer";if(lct)switch(Object.prototype.toString.call(e)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped";case"[object BigInt64Array]":return"bigint64";case"[object BigUint64Array]":return"biguint64"}return Array.isArray(e)?"array":"generic"}var RX={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};function mct(e,g,I,i){if(e===void 0){var s=RX.array[0];return s([])}else typeof e=="number"&&(e=[e]);g===void 0&&(g=[e.length]);var n=g.length;if(I===void 0){I=new Array(n);for(var C=n-1,r=1;C>=0;--C)I[C]=r,r*=g[C]}if(i===void 0){i=0;for(var C=0;C{const g=e.shape.reduce((i,n)=>i*n,1),I=new Array(g);if(e.dimension===1){let i=0;for(let n=0;ne.shape.length===1?e:Np(Ave(e)),lve=e=>{const g=e.split("."),I=g.slice(1).join("").length;return+g.join("")/10**I},jS=(e,g)=>e||g;function HN(e){const g=[],I={},i={};let n=0;for(let C=0;C{const g=document.createElement("g"),I=document.createElement("text");return e.anchor.x===0?I.setAttribute("text-anchor","start"):e.anchor.x===1?I.setAttribute("text-anchor","end"):I.setAttribute("text-anchor","middle"),I.setAttribute("font-family",e.style.fontFamily),I.setAttribute("font-size",e.style.fontSize),g.setAttribute("transform",`scale(${e.scale.x},1)`),I.setAttribute("fill",e.style.fill),I.innerHTML=e.text,g.appendChild(I),g.setAttribute("transform",`translate(${e.x},${e.y})scale(${e.scale.x},1)`),g},pct=e=>{try{const g=e.split(".");return I=>{let i=I;return g.forEach(n=>{i=i[n]}),i}}catch{return}},bct=(e,g,I,i,n,C,r=0,o=0,a)=>{const s=C?n:i,A=C?i:n,l=C?o:r,c=C?r:o,u=Math.max(0,+s[0]||0),d=Math.max(0,+s[1]||0),h=Math.max(0,+A[0]||0),m=Math.max(0,+A[1]||0);let f=[];ArrayBuffer.isView(a)||console.warn("Not supported yet");try{const b=new a.constructor(a.length);let p=0+c;for(let Z=h;Z[i.chrPositions[e].pos+ +g,i.chrPositions[e].pos+ +I],Zct="http://www.w3.org/2000/svg",Gct=(e,g)=>{const I=new RegExp(`(\\s|^)${g}(\\s|$)`);if(e.namespaceURI===Zct){const i=e.getAttribute("class")||"";e.setAttribute("class",i.replace(I," "))}else e.classList?e.classList.remove(g):fX(e,g)&&(e.className=e.className.replace(I," "))},kp=(e,g)=>{e.select(".selection").attr("fill",null).attr("fill-opacity",null).attr("stroke",null).classed(g,!0)},bF=e=>{const g=e.toString(16);return g.length===1?`0${g}`:g},vct=(e,g,I)=>`#${bF(e)}${bF(g)}${bF(I)}`,Si=(e,g)=>{const I=e.invert((e.range()[0]+e.range()[1])/2),i=g.invert((g.range()[0]+g.range()[1])/2),n=e.invert(1)-e.invert(0);return[I,i,n]},cve=(e,g,I)=>{if(I===null||!e||!g)return;const i=e.domain()[0],n=e.domain()[1],C=g.domain()[0],r=g.domain()[1];return[...vX(i,n,I),...vX(C,r,I)]},Bct=11184810,Sct=1,wct=(e,g,I,i,n,C,r,o,a)=>{e.publish("app.animateOnMouseMove",!0);const s=I.mousePositionColor?ive(I.mousePositionColor):Bct,A=I.mousePositionAlpha||Sct,l=new ot.PIXI.Graphics,c=()=>{l.clear()},u=(h,m,f)=>{if(f||c(),l.lineStyle(1,s,A),m){const b=o?n()[0]:0;l.moveTo(0,h),l.lineTo(C()[0]+b,h)}else{const b=o?n()[1]:0;l.moveTo(h,0),l.lineTo(h,C()[1]+b)}},d=h=>{if(h.noHoveredTracks)return c(),l;let m,f;h.isFromVerticalTrack?(m=h.dataY,f=h.dataY):(m=h.dataX,f=h.isFrom2dTrack?h.dataY:h.dataX);const b=o?n():[0,0],p=r()?i()[0](f)+b[1]:i()[0](m)+b[0];return u(p),o&&u(i()[1](f)+b[1],!0,!0),l};return g.push(e.subscribe("app.mouseMove",d)),g.push(e.subscribe("app.mouseLeave",c)),g.push(e.subscribe("blur",c)),a&&g.push(PG.subscribe("higlass.mouseMove",d)),l},Ah=(e,g=!1,I=!1)=>{const i=g?e.pMasked:e.pForeground||e.pMain;if(!i)throw new Error("setupShowMousePosition: No scene found. Please make sure to call this method after the scene has been initialized.");const n=()=>[e.xScale(),e.yScale()],C=wct(e.pubSub,e.pubSubs,e.options,n,e.getPosition.bind(e),e.getDimensions.bind(e),e.getProp("flipText"),g,I);return i.addChild(C),()=>{i.removeChild(C)}},Rct=e=>g=>Array.prototype.some.call(g,e),$l=(e,g)=>e+g,uve=(e,g,I,i,n,C)=>{const r=document.createElement("line");return r.setAttribute("x1",e),r.setAttribute("x2",I),r.setAttribute("y1",g),r.setAttribute("y2",i),n&&r.setAttribute("stroke-width",n),C&&r.setAttribute("stroke",C),r},dve=(e,g,I)=>{let i,n=0;const C=()=>{i=void 0},r=(...s)=>{const A=()=>{n>0&&(e(...s),n=0)};clearTimeout(i),i=setTimeout(A,I)};r.cancel=()=>{clearTimeout(i),C()},r.immediate=(...s)=>{e(...s)};let o=!1;return(s,...A)=>{o?n++:(e(...A),r(...A),o=!0,n=0,setTimeout(()=>{o=!1},g))}},Vct=(e,g=256,I=256)=>{const i=document.createElement("canvas");i.width=g,i.height=I;const n=i.getContext("2d");if(!n)throw new Error("Could not get canvas context");n.fillStyle="transparent",n.fillRect(0,0,i.width,i.height);const C=new ImageData(e,i.width,i.height);return n.putImageData(C,0,0),i},$Q=e=>new Promise(g=>{setTimeout(g,e)}),Wct=e=>{if(!e.tracks)return 0;let g=0;return e.tracks.top&&(g+=e.tracks.top.map(I=>I.height).reduce((I,i)=>I+i,0)),e.tracks.center&&(g+=e.tracks.center.map(I=>I.height).reduce((I,i)=>I+i,0)),e.tracks.bottom&&(g+=e.tracks.bottom.map(I=>I.height).reduce((I,i)=>I+i,0)),g},$o=()=>{},TN=e=>(e||"").replace(/\/$/,""),qQ=(e,g,I=0,i=1e-6)=>n=>{let C=255;return n>i&&(C=Math.max(0,Math.min(255,Math.floor(e(n+I))))),g[C]},j1=e=>{let g=[];for(let I=0;Ig[0]?e.left?bz(e.left,g):lie(e,"left",g):e.right?bz(e.right,g):lie(e,"right",g)}Ps.prototype.add=function(g){if(!this.root){this.root=new hve(g[0],g[1]),this.root.max=g[1];return}bz(this.root,g)};function mve(e,g){if(!g)return!1;if(g.interval[0]<=e&&g.interval[1]>=e)return!0;let I=!1,i;return["left","right"].forEach(n=>{i=g[n],i&&i.max>e&&(I=I||mve(e,i))}),I}Ps.prototype.contains=function(g){return mve(g,this.root)};function Xct(e,g){return e[0]===g[0]&&e[1]===g[1]||e[0]g[0]||e[0]g[1]||g[0]e[0]||g[0]e[1]}function fve(e,g){if(!g)return!1;if(Xct(g.interval,e))return!0;let I=!1,i;return["left","right"].forEach(n=>{i=g[n],i&&i.max>=e[0]&&(I=I||fve(e,i))}),I}Ps.prototype.intersects=function(g){return fve(g,this.root)};function yz(e){return e?1+Math.max(yz(e.left),yz(e.right)):0}Ps.prototype.height=function(){return yz(this.root)};Ps.prototype.findMax=function(g){const I=[g];let i,n=-1/0,C;for(;I.length;)i=I.pop(),i.left&&I.push(i.left),i.right&&I.push(i.right),i.interval[1]>n&&(n=i.interval[1],C=i);return C};Ps.prototype._removeHelper=function(g,I){if(I)if(I.interval[0]===g[0]&&I.interval[1]===g[1]){if(I.left&&I.right){let n=I.left;for(;n.left;)n=n.left;const C=n.interval;n.interval=I.interval,I.interval=C,this._removeHelper(n.interval,I)}else{let n="left";I.right&&(n="right");const C=I.parentNode;C?(C.left===I?C.left=I[n]:C.right=I[n],I[n]&&(I[n].parentNode=C)):(this.root=I[n],this.root&&(this.root.parentNode=null))}const i=I.parentNode;if(i){let n=this.findMax(i);const C=n.interval[1];for(;n;)n.max===I.interval[1]?(n.max=C,n=n.parentNode):n=!1}}else this._removeHelper(g,I.left),this._removeHelper(g,I.right)};Ps.prototype.remove=function(g){return this._removeHelper(g,this.root)};function VX(e){e.sort((i,n)=>n.to-n.from-(i.to-i.from));const g=[[]],I=[new Ps];for(let i=0;i=o?this.minNonZero(this.data,i,n):(io*this.subsetSize&&(C=Math.min(C,this.minNonZero(this.data,o*this.subsetSize,n))),C)}},{key:"getMaxNonZeroInSubset",value:function(I){const i=I[0],n=I[1];let C=Number.MIN_SAFE_INTEGER;if(i===0&&n===this.tileSize)return this.maxNonZeroInTile;const r=Math.ceil(i/this.subsetSize),o=Math.floor((n-1)/this.subsetSize);return r>=o?this.maxNonZero(this.data,i,n):(io*this.subsetSize&&(C=Math.max(C,this.maxNonZero(this.data,o*this.subsetSize,n))),C)}},{key:"computeSubsetNonZeroMinimums",value:function(){const I=[];for(let i=0;i-this.epsilon||r-this.epsilon||r>n&&(n=r))}I.push(n)}return I}},{key:"getMinNonZeroInTile",value:function(){return Math.min(...this.subsetMinimums)}},{key:"getMaxNonZeroInTile",value:function(){return Math.max(...this.subsetMaximums)}},{key:"minNonZero",value:function(I,i,n){let C=Number.MAX_SAFE_INTEGER;for(let r=i;r-this.epsilon||o-this.epsilon||o>C&&(C=o)}return C}}]),e}();function Yct(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uie(e,g){for(var I=0;I-this.epsilon||A-this.epsilon||A>o&&(o=A)}return o}},{key:"mirrorPrecomputedExtrema",value:function(){for(let I=1;I{let g;switch(e&&e.toLowerCase()){case"mean":g=P3;break;case"sum":g=vye;break;case"variance":g=K7;break;case"deviation":g=F7;break;default:g=P3,console.warn("Encountered an unsupported selectedRowsAggregationMode option.")}return g},EB=(e,g)=>e.reduce((I,i)=>I+(Array.isArray(i)&&g?i.length:1),0),E0=e=>{switch(e.type){case"heatmap":case"horizontal-1d-heatmap":case"horizontal-bar":case"horizontal-line":case"horizontal-point":case"vertical-1d-heatmap":case"vertical-bar":case"vertical-line":case"vertical-point":case"horizontal-1d-tiles":case"vertical-1d-tiles":case"2d-tiles":case"horizontal-gene-annotations":case"vertical-gene-annotations":case"horizontal-heatmap":case"vertical-heatmap":case"osm-tiles":case"mapbox-tiles":case"horizontal-multivec":return!0;case"combined":return e.contents.map(I=>E0(I)).reduce(jS,!1);default:return!1}},g4=(e,g,I)=>{let i=g,n=I;return I||(n=g,i=Object.values(e.state.views)[0].uid),e.tiledPlots[i].trackRenderer.getTrackObject(n)},pve=(e,g)=>e.tiledPlots[g].trackRenderer,xct=(e,g)=>e.tiledPlots[g];var I4={},die=Object.prototype.toString,bve=function(g){var I=die.call(g),i=I==="[object Arguments]";return i||(i=I!=="[object Array]"&&g!==null&&typeof g=="object"&&typeof g.length=="number"&&g.length>=0&&die.call(g.callee)==="[object Function]"),i},yF,hie;function Ect(){if(hie)return yF;hie=1;var e;if(!Object.keys){var g=Object.prototype.hasOwnProperty,I=Object.prototype.toString,i=bve,n=Object.prototype.propertyIsEnumerable,C=!n.call({toString:null},"toString"),r=n.call(function(){},"prototype"),o=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=function(c){var u=c.constructor;return u&&u.prototype===c},s={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},A=function(){if(typeof window>"u")return!1;for(var c in window)try{if(!s["$"+c]&&g.call(window,c)&&window[c]!==null&&typeof window[c]=="object")try{a(window[c])}catch{return!0}}catch{return!0}return!1}(),l=function(c){if(typeof window>"u"||!A)return a(c);try{return a(c)}catch{return!1}};e=function(u){var d=u!==null&&typeof u=="object",h=I.call(u)==="[object Function]",m=i(u),f=d&&I.call(u)==="[object String]",b=[];if(!d&&!h&&!m)throw new TypeError("Object.keys called on a non-object");var p=r&&h;if(f&&u.length>0&&!g.call(u,0))for(var y=0;y0)for(var Z=0;Z"u"||!Pi?Zg:Pi(Uint8Array),kd={"%AggregateError%":typeof AggregateError>"u"?Zg:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?Zg:ArrayBuffer,"%ArrayIteratorPrototype%":Mm&&Pi?Pi([][Symbol.iterator]()):Zg,"%AsyncFromSyncIteratorPrototype%":Zg,"%AsyncFunction%":ff,"%AsyncGenerator%":ff,"%AsyncGeneratorFunction%":ff,"%AsyncIteratorPrototype%":ff,"%Atomics%":typeof Atomics>"u"?Zg:Atomics,"%BigInt%":typeof BigInt>"u"?Zg:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?Zg:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?Zg:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?Zg:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?Zg:Float32Array,"%Float64Array%":typeof Float64Array>"u"?Zg:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?Zg:FinalizationRegistry,"%Function%":vve,"%GeneratorFunction%":ff,"%Int8Array%":typeof Int8Array>"u"?Zg:Int8Array,"%Int16Array%":typeof Int16Array>"u"?Zg:Int16Array,"%Int32Array%":typeof Int32Array>"u"?Zg:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Mm&&Pi?Pi(Pi([][Symbol.iterator]())):Zg,"%JSON%":typeof JSON=="object"?JSON:Zg,"%Map%":typeof Map>"u"?Zg:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Mm||!Pi?Zg:Pi(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?Zg:Promise,"%Proxy%":typeof Proxy>"u"?Zg:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?Zg:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?Zg:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Mm||!Pi?Zg:Pi(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?Zg:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Mm&&Pi?Pi(""[Symbol.iterator]()):Zg,"%Symbol%":Mm?Symbol:Zg,"%SyntaxError%":Yb,"%ThrowTypeError%":Iut,"%TypedArray%":nut,"%TypeError%":Yp,"%Uint8Array%":typeof Uint8Array>"u"?Zg:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?Zg:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?Zg:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?Zg:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?Zg:WeakMap,"%WeakRef%":typeof WeakRef>"u"?Zg:WeakRef,"%WeakSet%":typeof WeakSet>"u"?Zg:WeakSet};if(Pi)try{null.error}catch(e){var Cut=Pi(Pi(e));kd["%Error.prototype%"]=Cut}var rut=function e(g){var I;if(g==="%AsyncFunction%")I=ZF("async function () {}");else if(g==="%GeneratorFunction%")I=ZF("function* () {}");else if(g==="%AsyncGeneratorFunction%")I=ZF("async function* () {}");else if(g==="%AsyncGenerator%"){var i=e("%AsyncGeneratorFunction%");i&&(I=i.prototype)}else if(g==="%AsyncIteratorPrototype%"){var n=e("%AsyncGenerator%");n&&Pi&&(I=Pi(n.prototype))}return kd[g]=I,I},Zie={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},$S=n4,XX=Il,out=$S.call(Function.call,Array.prototype.concat),aut=$S.call(Function.apply,Array.prototype.splice),Gie=$S.call(Function.call,String.prototype.replace),HX=$S.call(Function.call,String.prototype.slice),Aut=$S.call(Function.call,RegExp.prototype.exec),sut=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,lut=/\\(\\)?/g,cut=function(g){var I=HX(g,0,1),i=HX(g,-1);if(I==="%"&&i!=="%")throw new Yb("invalid intrinsic syntax, expected closing `%`");if(i==="%"&&I!=="%")throw new Yb("invalid intrinsic syntax, expected opening `%`");var n=[];return Gie(g,sut,function(C,r,o,a){n[n.length]=o?Gie(a,lut,"$1"):r||C}),n},uut=function(g,I){var i=g,n;if(XX(Zie,i)&&(n=Zie[i],i="%"+n[0]+"%"),XX(kd,i)){var C=kd[i];if(C===ff&&(C=rut(i)),typeof C>"u"&&!I)throw new Yp("intrinsic "+g+" exists, but is not available. Please file an issue!");return{alias:n,name:i,value:C}}throw new Yb("intrinsic "+g+" does not exist!")},Hg=function(g,I){if(typeof g!="string"||g.length===0)throw new Yp("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof I!="boolean")throw new Yp('"allowMissing" argument must be a boolean');if(Aut(/^%?[^%]*%?$/,g)===null)throw new Yb("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var i=cut(g),n=i.length>0?i[0]:"",C=uut("%"+n+"%",I),r=C.name,o=C.value,a=!1,s=C.alias;s&&(n=s[0],aut(i,out([0,1],s)));for(var A=1,l=!0;A=i.length){var h=Nd(o,c);l=!!h,l&&"get"in h&&!("originalValue"in h.get)?o=h.get:o=o[c]}else l=XX(o,c),o=o[c];l&&!a&&(kd[r]=o)}}return o},dut=Hg,Zz=dut("%Object.defineProperty%",!0),Gz=function(){if(Zz)try{return Zz({},"a",{value:1}),!0}catch{return!1}return!1};Gz.hasArrayLengthDefineBug=function(){if(!Gz())return null;try{return Zz([],"length",{value:1}).length!==1}catch{return!0}};var NN=Gz,hut=Hg,q1=hut("%Object.getOwnPropertyDescriptor%",!0);if(q1)try{q1([],"length")}catch{q1=null}var C4=q1,mut=NN(),r4=Hg,_G=mut&&r4("%Object.defineProperty%",!0);if(_G)try{_G({},"a",{value:1})}catch{_G=!1}var fut=r4("%SyntaxError%"),zm=r4("%TypeError%"),vie=C4,Bve=function(g,I,i){if(!g||typeof g!="object"&&typeof g!="function")throw new zm("`obj` must be an object or a function`");if(typeof I!="string"&&typeof I!="symbol")throw new zm("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new zm("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new zm("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new zm("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new zm("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,C=arguments.length>4?arguments[4]:null,r=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,a=!!vie&&vie(g,I);if(_G)_G(g,I,{configurable:r===null&&a?a.configurable:!r,enumerable:n===null&&a?a.enumerable:!n,value:i,writable:C===null&&a?a.writable:!C});else if(o||!n&&!C&&!r)g[I]=i;else throw new fut("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},put=yve,but=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",yut=Object.prototype.toString,Zut=Array.prototype.concat,Bie=Bve,Gut=function(e){return typeof e=="function"&&yut.call(e)==="[object Function]"},Sve=NN(),vut=function(e,g,I,i){if(g in e){if(i===!0){if(e[g]===I)return}else if(!Gut(i)||!i())return}Sve?Bie(e,g,I,!0):Bie(e,g,I)},wve=function(e,g){var I=arguments.length>2?arguments[2]:{},i=put(g);but&&(i=Zut.call(i,Object.getOwnPropertySymbols(g)));for(var n=0;n4294967295||Sut(I)!==I)throw new Rie("`length` must be a positive 32-bit integer");var i=arguments.length>2&&!!arguments[2],n=!0,C=!0;if("length"in g&&wie){var r=wie(g,"length");r&&!r.configurable&&(n=!1),r&&!r.writable&&(C=!1)}return(n||C||!i)&&(But?Sie(g,"length",I,!0,!0):Sie(g,"length",I)),g};(function(e){var g=n4,I=Hg,i=wut,n=I("%TypeError%"),C=I("%Function.prototype.apply%"),r=I("%Function.prototype.call%"),o=I("%Reflect.apply%",!0)||g.call(r,C),a=I("%Object.defineProperty%",!0),s=I("%Math.max%");if(a)try{a({},"a",{value:1})}catch{a=null}e.exports=function(c){if(typeof c!="function")throw new n("a function is required");var u=o(g,r,arguments);return i(u,1+s(0,c.length-(arguments.length-1)),!0)};var A=function(){return o(g,C,arguments)};a?a(e.exports,"apply",{value:A}):e.exports.apply=A})(Rve);var il=Rve.exports,Wve=Hg,Xve=il,Rut=Xve(Wve("String.prototype.indexOf")),hC=function(g,I){var i=Wve(g,!!I);return typeof i=="function"&&Rut(g,".prototype.")>-1?Xve(i):i},Vut=yve,Hve=i4(),Tve=hC,Vie=Object,Wut=Tve("Array.prototype.push"),Wie=Tve("Object.prototype.propertyIsEnumerable"),Xut=Hve?Object.getOwnPropertySymbols:null,Nve=function(g,I){if(g==null)throw new TypeError("target must be an object");var i=Vie(g);if(arguments.length===1)return i;for(var n=1;n= 0");if(A>r)throw new I("length is greater than (2**32 - 1)");var l=arguments.length>1?arguments[1]:g,c=[];if(l!==g){if(!a)throw new i("ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]");a(c,l)}return A!==0&&(c.length=A),c},SF}const Put={},Jut=Object.freeze(Object.defineProperty({__proto__:null,default:Put},Symbol.toStringTag,{value:"Module"})),Out=qs(Jut);var a4=typeof Map=="function"&&Map.prototype,wF=Object.getOwnPropertyDescriptor&&a4?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,TX=a4&&wF&&typeof wF.get=="function"?wF.get:null,Tie=a4&&Map.prototype.forEach,A4=typeof Set=="function"&&Set.prototype,RF=Object.getOwnPropertyDescriptor&&A4?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,NX=A4&&RF&&typeof RF.get=="function"?RF.get:null,Nie=A4&&Set.prototype.forEach,_ut=typeof WeakMap=="function"&&WeakMap.prototype,LG=_ut?WeakMap.prototype.has:null,Lut=typeof WeakSet=="function"&&WeakSet.prototype,UG=Lut?WeakSet.prototype.has:null,Uut=typeof WeakRef=="function"&&WeakRef.prototype,kie=Uut?WeakRef.prototype.deref:null,Qut=Boolean.prototype.valueOf,jut=Object.prototype.toString,$ut=Function.prototype.toString,qut=String.prototype.match,s4=String.prototype.slice,dc=String.prototype.replace,edt=String.prototype.toUpperCase,Yie=String.prototype.toLowerCase,Dve=RegExp.prototype.test,Kie=Array.prototype.concat,Da=Array.prototype.join,tdt=Array.prototype.slice,Fie=Math.floor,vz=typeof BigInt=="function"?BigInt.prototype.valueOf:null,VF=Object.getOwnPropertySymbols,Bz=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,Kb=typeof Symbol=="function"&&typeof Symbol.iterator=="object",xn=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Kb||"symbol")?Symbol.toStringTag:null,xve=Object.prototype.propertyIsEnumerable,Die=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function xie(e,g){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||Dve.call(/e/,g))return g;var I=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var i=e<0?-Fie(-e):Fie(e);if(i!==e){var n=String(i),C=s4.call(g,n.length+1);return dc.call(n,I,"$&_")+"."+dc.call(dc.call(C,/([0-9]{3})/g,"$&_"),/_$/,"")}}return dc.call(g,I,"$&_")}var Sz=Out,Eie=Sz.custom,Mie=zve(Eie)?Eie:null,Eve=function e(g,I,i,n){var C=I||{};if(Pl(C,"quoteStyle")&&C.quoteStyle!=="single"&&C.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Pl(C,"maxStringLength")&&(typeof C.maxStringLength=="number"?C.maxStringLength<0&&C.maxStringLength!==1/0:C.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var r=Pl(C,"customInspect")?C.customInspect:!0;if(typeof r!="boolean"&&r!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Pl(C,"indent")&&C.indent!==null&&C.indent!==" "&&!(parseInt(C.indent,10)===C.indent&&C.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Pl(C,"numericSeparator")&&typeof C.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var o=C.numericSeparator;if(typeof g>"u")return"undefined";if(g===null)return"null";if(typeof g=="boolean")return g?"true":"false";if(typeof g=="string")return Jve(g,C);if(typeof g=="number"){if(g===0)return 1/0/g>0?"0":"-0";var a=String(g);return o?xie(g,a):a}if(typeof g=="bigint"){var s=String(g)+"n";return o?xie(g,s):s}var A=typeof C.depth>"u"?5:C.depth;if(typeof i>"u"&&(i=0),i>=A&&A>0&&typeof g=="object")return wz(g)?"[Array]":"[Object]";var l=pdt(C,i);if(typeof n>"u")n=[];else if(Pve(n,g)>=0)return"[Circular]";function c(W,V,H){if(V&&(n=tdt.call(n),n.push(V)),H){var Y={depth:C.depth};return Pl(C,"quoteStyle")&&(Y.quoteStyle=C.quoteStyle),e(W,Y,i+1,n)}return e(W,C,i+1,n)}if(typeof g=="function"&&!zie(g)){var u=Adt(g),d=dV(g,c);return"[Function"+(u?": "+u:" (anonymous)")+"]"+(d.length>0?" { "+Da.call(d,", ")+" }":"")}if(zve(g)){var h=Kb?dc.call(String(g),/^(Symbol\(.*\))_[^)]*$/,"$1"):Bz.call(g);return typeof g=="object"&&!Kb?nZ(h):h}if(hdt(g)){for(var m="<"+Yie.call(String(g.nodeName)),f=g.attributes||[],b=0;b",m}if(wz(g)){if(g.length===0)return"[]";var p=dV(g,c);return l&&!fdt(p)?"["+Rz(p,l)+"]":"[ "+Da.call(p,", ")+" ]"}if(idt(g)){var y=dV(g,c);return!("cause"in Error.prototype)&&"cause"in g&&!xve.call(g,"cause")?"{ ["+String(g)+"] "+Da.call(Kie.call("[cause]: "+c(g.cause),y),", ")+" }":y.length===0?"["+String(g)+"]":"{ ["+String(g)+"] "+Da.call(y,", ")+" }"}if(typeof g=="object"&&r){if(Mie&&typeof g[Mie]=="function"&&Sz)return Sz(g,{depth:A-i});if(r!=="symbol"&&typeof g.inspect=="function")return g.inspect()}if(sdt(g)){var Z=[];return Tie&&Tie.call(g,function(W,V){Z.push(c(V,g,!0)+" => "+c(W,g))}),Pie("Map",TX.call(g),Z,l)}if(udt(g)){var B=[];return Nie&&Nie.call(g,function(W){B.push(c(W,g))}),Pie("Set",NX.call(g),B,l)}if(ldt(g))return WF("WeakMap");if(ddt(g))return WF("WeakSet");if(cdt(g))return WF("WeakRef");if(Cdt(g))return nZ(c(Number(g)));if(odt(g))return nZ(c(vz.call(g)));if(rdt(g))return nZ(Qut.call(g));if(ndt(g))return nZ(c(String(g)));if(typeof window<"u"&&g===window)return"{ [object Window] }";if(g===globalThis)return"{ [object globalThis] }";if(!Idt(g)&&!zie(g)){var G=dV(g,c),v=Die?Die(g)===Object.prototype:g instanceof Object||g.constructor===Object,w=g instanceof Object?"":"null prototype",R=!v&&xn&&Object(g)===g&&xn in g?s4.call(ou(g),8,-1):w?"Object":"",S=v||typeof g.constructor!="function"?"":g.constructor.name?g.constructor.name+" ":"",X=S+(R||w?"["+Da.call(Kie.call([],R||[],w||[]),": ")+"] ":"");return G.length===0?X+"{}":l?X+"{"+Rz(G,l)+"}":X+"{ "+Da.call(G,", ")+" }"}return String(g)};function Mve(e,g,I){var i=(I.quoteStyle||g)==="double"?'"':"'";return i+e+i}function gdt(e){return dc.call(String(e),/"/g,""")}function wz(e){return ou(e)==="[object Array]"&&(!xn||!(typeof e=="object"&&xn in e))}function Idt(e){return ou(e)==="[object Date]"&&(!xn||!(typeof e=="object"&&xn in e))}function zie(e){return ou(e)==="[object RegExp]"&&(!xn||!(typeof e=="object"&&xn in e))}function idt(e){return ou(e)==="[object Error]"&&(!xn||!(typeof e=="object"&&xn in e))}function ndt(e){return ou(e)==="[object String]"&&(!xn||!(typeof e=="object"&&xn in e))}function Cdt(e){return ou(e)==="[object Number]"&&(!xn||!(typeof e=="object"&&xn in e))}function rdt(e){return ou(e)==="[object Boolean]"&&(!xn||!(typeof e=="object"&&xn in e))}function zve(e){if(Kb)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!Bz)return!1;try{return Bz.call(e),!0}catch{}return!1}function odt(e){if(!e||typeof e!="object"||!vz)return!1;try{return vz.call(e),!0}catch{}return!1}var adt=Object.prototype.hasOwnProperty||function(e){return e in this};function Pl(e,g){return adt.call(e,g)}function ou(e){return jut.call(e)}function Adt(e){if(e.name)return e.name;var g=qut.call($ut.call(e),/^function\s*([\w$]+)/);return g?g[1]:null}function Pve(e,g){if(e.indexOf)return e.indexOf(g);for(var I=0,i=e.length;Ig.maxStringLength){var I=e.length-g.maxStringLength,i="... "+I+" more character"+(I>1?"s":"");return Jve(s4.call(e,0,g.maxStringLength),g)+i}var n=dc.call(dc.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,mdt);return Mve(n,"single",g)}function mdt(e){var g=e.charCodeAt(0),I={8:"b",9:"t",10:"n",12:"f",13:"r"}[g];return I?"\\"+I:"\\x"+(g<16?"0":"")+edt.call(g.toString(16))}function nZ(e){return"Object("+e+")"}function WF(e){return e+" { ? }"}function Pie(e,g,I,i){var n=i?Rz(I,i):Da.call(I,", ");return e+" ("+g+") {"+n+"}"}function fdt(e){for(var g=0;g=0)return!1;return!0}function pdt(e,g){var I;if(e.indent===" ")I=" ";else if(typeof e.indent=="number"&&e.indent>0)I=Da.call(Array(e.indent+1)," ");else return null;return{base:I,prev:Da.call(Array(g+1),I)}}function Rz(e,g){if(e.length===0)return"";var I=` -`+g.prev+g.base;return I+Da.call(e,","+I)+` -`+g.prev}function dV(e,g){var I=wz(e),i=[];if(I){i.length=e.length;for(var n=0;n"u")return"Undefined";if(typeof g=="function"||typeof g=="object")return"Object";if(typeof g=="number")return"Number";if(typeof g=="boolean")return"Boolean";if(typeof g=="string")return"String"}),HF}var TF,_ie;function bn(){if(_ie)return TF;_ie=1;var e=bdt();return TF=function(I){return typeof I=="symbol"?"Symbol":typeof I=="bigint"?"BigInt":e(I)},TF}var ydt=Hg,Lie=ydt("%TypeError%"),Zdt=Eve,Gdt=au(),vdt=bn(),qS=function(g,I){if(vdt(g)!=="Object")throw new Lie("Assertion failed: Type(O) is not Object");if(!Gdt(I))throw new Lie("Assertion failed: IsPropertyKey(P) is not true, got "+Zdt(I));return g[I]},NF,Uie;function Ove(){if(Uie)return NF;Uie=1;var e=Hg,g=e("%Array%"),I=!g.isArray&&hC("Object.prototype.toString");return NF=g.isArray||function(n){return I(n)==="[object Array]"},NF}var kF,Qie;function l4(){return Qie||(Qie=1,kF=Ove()),kF}var hV={exports:{}},YF,jie;function Bdt(){return jie||(jie=1,YF=Hg),YF}var KF,$ie;function c4(){if($ie)return KF;$ie=1;var e=Hg,g=Il,I=e("%TypeError%");return KF=function(n,C){if(n.Type(C)!=="Object")return!1;var r={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var o in C)if(g(C,o)&&!r[o])return!1;if(n.IsDataDescriptor(C)&&n.IsAccessorDescriptor(C))throw new I("Property Descriptors may not be both accessor and data descriptors");return!0},KF}var FF,qie;function _ve(){if(qie)return FF;qie=1;var e=NN,g=Hg,I=e()&&g("%Object.defineProperty%",!0),i=e.hasArrayLengthDefineBug(),n=i&&Ove(),C=hC,r=C("Object.prototype.propertyIsEnumerable");return FF=function(a,s,A,l,c,u){if(!I){if(!a(u)||!u["[[Configurable]]"]||!u["[[Writable]]"]||c in l&&r(l,c)!==!!u["[[Enumerable]]"])return!1;var d=u["[[Value]]"];return l[c]=d,s(l[c],d)}return i&&c==="length"&&"[[Value]]"in u&&n(l)&&l.length!==u["[[Value]]"]?(l.length=u["[[Value]]"],l.length===u["[[Value]]"]):(I(l,c,A(u)),!0)},FF}var DF,ene;function Sdt(){if(ene)return DF;ene=1;var e=Il;return DF=function(I){return e(I,"[[StartIndex]]")&&e(I,"[[EndIndex]]")&&I["[[StartIndex]]"]>=0&&I["[[EndIndex]]"]>=I["[[StartIndex]]"]&&String(parseInt(I["[[StartIndex]]"],10))===String(I["[[StartIndex]]"])&&String(parseInt(I["[[EndIndex]]"],10))===String(I["[[EndIndex]]"])},DF}var xF,tne;function YN(){if(tne)return xF;tne=1;var e=Hg,g=e("%TypeError%"),I=e("%SyntaxError%"),i=Il,n=o4(),C=Sdt(),r={"Property Descriptor":function(a){var s={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};if(!a)return!1;for(var A in a)if(i(a,A)&&!s[A])return!1;var l=i(a,"[[Value]]"),c=i(a,"[[Get]]")||i(a,"[[Set]]");if(l&&c)throw new g("Property Descriptors may not be both accessor and data descriptors");return!0},"Match Record":C,"Iterator Record":function(a){return i(a,"[[Iterator]]")&&i(a,"[[NextMethod]]")&&i(a,"[[Done]]")},"PromiseCapability Record":function(a){return!!a&&i(a,"[[Resolve]]")&&typeof a["[[Resolve]]"]=="function"&&i(a,"[[Reject]]")&&typeof a["[[Reject]]"]=="function"&&i(a,"[[Promise]]")&&a["[[Promise]]"]&&typeof a["[[Promise]]"].then=="function"},"AsyncGeneratorRequest Record":function(a){return!!a&&i(a,"[[Completion]]")&&i(a,"[[Capability]]")&&r["PromiseCapability Record"](a["[[Capability]]"])},"RegExp Record":function(a){return a&&i(a,"[[IgnoreCase]]")&&typeof a["[[IgnoreCase]]"]=="boolean"&&i(a,"[[Multiline]]")&&typeof a["[[Multiline]]"]=="boolean"&&i(a,"[[DotAll]]")&&typeof a["[[DotAll]]"]=="boolean"&&i(a,"[[Unicode]]")&&typeof a["[[Unicode]]"]=="boolean"&&i(a,"[[CapturingGroupsCount]]")&&typeof a["[[CapturingGroupsCount]]"]=="number"&&n(a["[[CapturingGroupsCount]]"])&&a["[[CapturingGroupsCount]]"]>=0}};return xF=function(a,s,A,l){var c=r[s];if(typeof c!="function")throw new I("unknown record type: "+s);if(a(l)!=="Object"||!c(l))throw new g(A+" must be a "+s)},xF}var EF,gne;function wdt(){return gne||(gne=1,EF=function(g){if(typeof g>"u")return g;var I={};return"[[Value]]"in g&&(I.value=g["[[Value]]"]),"[[Writable]]"in g&&(I.writable=!!g["[[Writable]]"]),"[[Get]]"in g&&(I.get=g["[[Get]]"]),"[[Set]]"in g&&(I.set=g["[[Set]]"]),"[[Enumerable]]"in g&&(I.enumerable=!!g["[[Enumerable]]"]),"[[Configurable]]"in g&&(I.configurable=!!g["[[Configurable]]"]),I}),EF}var MF,Ine;function Lve(){if(Ine)return MF;Ine=1;var e=YN(),g=wdt(),I=bn();return MF=function(n){return typeof n<"u"&&e(I,"Property Descriptor","Desc",n),g(n)},MF}var zF,ine;function KN(){if(ine)return zF;ine=1;var e=Il,g=bn(),I=YN();return zF=function(n){return!(typeof n>"u"||(I(g,"Property Descriptor","Desc",n),!e(n,"[[Get]]")&&!e(n,"[[Set]]")))},zF}var PF,nne;function FN(){if(nne)return PF;nne=1;var e=Il,g=bn(),I=YN();return PF=function(n){return!(typeof n>"u"||(I(g,"Property Descriptor","Desc",n),!e(n,"[[Value]]")&&!e(n,"[[Writable]]")))},PF}var JF,Cne;function u4(){if(Cne)return JF;Cne=1;var e=kN;return JF=function(I,i){return I===i?I===0?1/I===1/i:!0:e(I)&&e(i)},JF}var Uve=function(g){return!!g},Qve=Function.prototype.toString,np=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,Vz,eW;if(typeof np=="function"&&typeof Object.defineProperty=="function")try{Vz=Object.defineProperty({},"length",{get:function(){throw eW}}),eW={},np(function(){throw 42},null,Vz)}catch(e){e!==eW&&(np=null)}else np=null;var Rdt=/^\s*class\b/,Wz=function(g){try{var I=Qve.call(g);return Rdt.test(I)}catch{return!1}},OF=function(g){try{return Wz(g)?!1:(Qve.call(g),!0)}catch{return!1}},tW=Object.prototype.toString,Vdt="[object Object]",Wdt="[object Function]",Xdt="[object GeneratorFunction]",Hdt="[object HTMLAllCollection]",Tdt="[object HTML document.all class]",Ndt="[object HTMLCollection]",kdt=typeof Symbol=="function"&&!!Symbol.toStringTag,Ydt=!(0 in[,]),Xz=function(){return!1};if(typeof document=="object"){var Kdt=document.all;tW.call(Kdt)===tW.call(document.all)&&(Xz=function(g){if((Ydt||!g)&&(typeof g>"u"||typeof g=="object"))try{var I=tW.call(g);return(I===Hdt||I===Tdt||I===Ndt||I===Vdt)&&g("")==null}catch{}return!1})}var d4=np?function(g){if(Xz(g))return!0;if(!g||typeof g!="function"&&typeof g!="object")return!1;try{np(g,null,Vz)}catch(I){if(I!==eW)return!1}return!Wz(g)&&OF(g)}:function(g){if(Xz(g))return!0;if(!g||typeof g!="function"&&typeof g!="object")return!1;if(kdt)return OF(g);if(Wz(g))return!1;var I=tW.call(g);return I!==Wdt&&I!==Xdt&&!/^\[object HTML/.test(I)?!1:OF(g)},h4=d4,_F,rne;function jve(){if(rne)return _F;rne=1;var e=Il,g=Hg,I=g("%TypeError%"),i=bn(),n=Uve,C=h4;return _F=function(o){if(i(o)!=="Object")throw new I("ToPropertyDescriptor requires an object");var a={};if(e(o,"enumerable")&&(a["[[Enumerable]]"]=n(o.enumerable)),e(o,"configurable")&&(a["[[Configurable]]"]=n(o.configurable)),e(o,"value")&&(a["[[Value]]"]=o.value),e(o,"writable")&&(a["[[Writable]]"]=n(o.writable)),e(o,"get")){var s=o.get;if(typeof s<"u"&&!C(s))throw new I("getter must be a function");a["[[Get]]"]=s}if(e(o,"set")){var A=o.set;if(typeof A<"u"&&!C(A))throw new I("setter must be a function");a["[[Set]]"]=A}if((e(a,"[[Get]]")||e(a,"[[Set]]"))&&(e(a,"[[Value]]")||e(a,"[[Writable]]")))throw new I("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return a},_F}var LF,one;function Fdt(){if(one)return LF;one=1;var e=Hg,g=e("%TypeError%"),I=c4(),i=_ve(),n=Lve(),C=KN(),r=FN(),o=au(),a=u4(),s=jve(),A=bn();return LF=function(c,u,d){if(A(c)!=="Object")throw new g("Assertion failed: Type(O) is not Object");if(!o(u))throw new g("Assertion failed: IsPropertyKey(P) is not true");var h=I({Type:A,IsDataDescriptor:r,IsAccessorDescriptor:C},d)?d:s(d);if(!I({Type:A,IsDataDescriptor:r,IsAccessorDescriptor:C},h))throw new g("Assertion failed: Desc is not a valid Property Descriptor");return i(r,a,n,c,u,h)},LF}var ane;function Ddt(){if(ane)return hV.exports;ane=1;var e=Bdt(),g=e("%Reflect.construct%",!0),I=Fdt();try{I({},"",{"[[Get]]":function(){}})}catch{I=null}if(I&&g){var i={},n={};I(n,"length",{"[[Get]]":function(){throw i},"[[Enumerable]]":!0}),hV.exports=function(r){try{g(r,n)}catch(o){return o===i}}}else hV.exports=function(r){return typeof r=="function"&&!!r.prototype};return hV.exports}var $ve=Hg,Ane=$ve("%Symbol.species%",!0),sne=$ve("%TypeError%"),lne=zut(),cne=qS,xdt=l4(),Edt=Ddt(),Mdt=bn(),zdt=o4(),qve=function(g,I){if(!zdt(I)||I<0)throw new sne("Assertion failed: length must be an integer >= 0");var i=xdt(g);if(!i)return lne(I);var n=cne(g,"constructor");if(Ane&&Mdt(n)==="Object"&&(n=cne(n,Ane),n===null&&(n=void 0)),typeof n>"u")return lne(I);if(!Edt(n))throw new sne("C must be a constructor");return new n(I)},eBe=Number.MAX_SAFE_INTEGER||9007199254740991,UF,une;function tBe(){if(une)return UF;une=1;var e=Hg,g=hC,I=e("%TypeError%"),i=l4(),n=e("%Reflect.apply%",!0)||g("Function.prototype.apply");return UF=function(r,o){var a=arguments.length>2?arguments[2]:[];if(!i(a))throw new I("Assertion failed: optional `argumentsList`, if provided, must be a List");return n(r,o,a)},UF}var QF,dne;function gBe(){return dne||(dne=1,QF=function(g){return g===null||typeof g!="function"&&typeof g!="object"}),QF}var jF,hne;function Pdt(){if(hne)return jF;hne=1;var e=Hg,g=e("%Object.preventExtensions%",!0),I=e("%Object.isExtensible%",!0),i=gBe();return jF=g?function(C){return!i(C)&&I(C)}:function(C){return!i(C)},jF}var $F,mne;function Jdt(){return mne||(mne=1,$F=function(g,I){return!!I&&typeof I=="object"&&"[[Enumerable]]"in I&&"[[Configurable]]"in I&&(g.IsAccessorDescriptor(I)||g.IsDataDescriptor(I))}),$F}var qF,fne;function Odt(){if(fne)return qF;fne=1;var e=YN(),g=KN(),I=FN(),i=bn();return qF=function(C){return typeof C>"u"?!1:(e(i,"Property Descriptor","Desc",C),!g(C)&&!I(C))},qF}var eD,pne;function _dt(){if(pne)return eD;pne=1;var e=Hg,g=e("%TypeError%"),I=_ve(),i=Jdt(),n=c4(),C=Lve(),r=KN(),o=FN(),a=Odt(),s=au(),A=u4(),l=bn();return eD=function(u,d,h,m,f){var b=l(u);if(b!=="Undefined"&&b!=="Object")throw new g("Assertion failed: O must be undefined or an Object");if(!s(d))throw new g("Assertion failed: P must be a Property Key");if(l(h)!=="Boolean")throw new g("Assertion failed: extensible must be a Boolean");if(!n({Type:l,IsDataDescriptor:o,IsAccessorDescriptor:r},m))throw new g("Assertion failed: Desc must be a Property Descriptor");if(l(f)!=="Undefined"&&!n({Type:l,IsDataDescriptor:o,IsAccessorDescriptor:r},f))throw new g("Assertion failed: current must be a Property Descriptor, or undefined");if(l(f)==="Undefined")return h?b==="Undefined"?!0:r(m)?I(o,A,C,u,d,m):I(o,A,C,u,d,{"[[Configurable]]":!!m["[[Configurable]]"],"[[Enumerable]]":!!m["[[Enumerable]]"],"[[Value]]":m["[[Value]]"],"[[Writable]]":!!m["[[Writable]]"]}):!1;if(!i({IsAccessorDescriptor:r,IsDataDescriptor:o},f))throw new g("`current`, when present, must be a fully populated and valid Property Descriptor");if(!f["[[Configurable]]"]){if("[[Configurable]]"in m&&m["[[Configurable]]"]||"[[Enumerable]]"in m&&!A(m["[[Enumerable]]"],f["[[Enumerable]]"])||!a(m)&&!A(r(m),r(f)))return!1;if(r(f)){if("[[Get]]"in m&&!A(m["[[Get]]"],f["[[Get]]"])||"[[Set]]"in m&&!A(m["[[Set]]"],f["[[Set]]"]))return!1}else if(!f["[[Writable]]"]&&("[[Writable]]"in m&&m["[[Writable]]"]||"[[Value]]"in m&&!A(m["[[Value]]"],f["[[Value]]"])))return!1}if(b!=="Undefined"){var p,y;return o(f)&&r(m)?(p=("[[Configurable]]"in m?m:f)["[[Configurable]]"],y=("[[Enumerable]]"in m?m:f)["[[Enumerable]]"],I(o,A,C,u,d,{"[[Configurable]]":!!p,"[[Enumerable]]":!!y,"[[Get]]":("[[Get]]"in m?m:f)["[[Get]]"],"[[Set]]":("[[Set]]"in m?m:f)["[[Set]]"]})):r(f)&&o(m)?(p=("[[Configurable]]"in m?m:f)["[[Configurable]]"],y=("[[Enumerable]]"in m?m:f)["[[Enumerable]]"],I(o,A,C,u,d,{"[[Configurable]]":!!p,"[[Enumerable]]":!!y,"[[Value]]":("[[Value]]"in m?m:f)["[[Value]]"],"[[Writable]]":!!("[[Writable]]"in m?m:f)["[[Writable]]"]})):I(o,A,C,u,d,m)}return!0},eD}var tD,bne;function Ldt(){if(bne)return tD;bne=1;var e=Hg,g=C4,I=e("%SyntaxError%"),i=e("%TypeError%"),n=c4(),C=KN(),r=FN(),o=Pdt(),a=au(),s=jve(),A=u4(),l=bn(),c=_dt();return tD=function(d,h,m){if(l(d)!=="Object")throw new i("Assertion failed: O must be an Object");if(!a(h))throw new i("Assertion failed: P must be a Property Key");if(!n({Type:l,IsDataDescriptor:r,IsAccessorDescriptor:C},m))throw new i("Assertion failed: Desc must be a Property Descriptor");if(!g){if(C(m))throw new I("This environment does not support accessor property descriptors.");var f=!(h in d)&&m["[[Writable]]"]&&m["[[Enumerable]]"]&&m["[[Configurable]]"]&&"[[Value]]"in m,b=h in d&&(!("[[Configurable]]"in m)||m["[[Configurable]]"])&&(!("[[Enumerable]]"in m)||m["[[Enumerable]]"])&&(!("[[Writable]]"in m)||m["[[Writable]]"])&&"[[Value]]"in m;if(f||b)return d[h]=m["[[Value]]"],A(d[h],m["[[Value]]"]);throw new I("This environment does not support defining non-writable, non-enumerable, or non-configurable properties")}var p=g(d,h),y=p&&s(p),Z=o(d);return c(d,h,Z,m,y)},tD}var gD,yne;function Udt(){if(yne)return gD;yne=1;var e=Hg,g=e("%TypeError%"),I=au(),i=Ldt(),n=bn();return gD=function(r,o,a){if(n(r)!=="Object")throw new g("Assertion failed: Type(O) is not Object");if(!I(o))throw new g("Assertion failed: IsPropertyKey(P) is not true");var s={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Value]]":a,"[[Writable]]":!0};return i(r,o,s)},gD}var ID,Zne;function IBe(){if(Zne)return ID;Zne=1;var e=Hg,g=e("%TypeError%"),I=Udt(),i=au(),n=bn();return ID=function(r,o,a){if(n(r)!=="Object")throw new g("Assertion failed: Type(O) is not Object");if(!i(o))throw new g("Assertion failed: IsPropertyKey(P) is not true");var s=I(r,o,a);if(!s)throw new g("unable to create data property")},ID}var iD,Gne;function iBe(){if(Gne)return iD;Gne=1;var e=Hg,g=e("%TypeError%"),I=au(),i=bn();return iD=function(C,r){if(i(C)!=="Object")throw new g("Assertion failed: `O` must be an Object");if(!I(r))throw new g("Assertion failed: `P` must be a Property Key");return r in C},iD}var nD,vne;function Qdt(){return vne||(vne=1,nD=function(g){return g===null||typeof g!="function"&&typeof g!="object"}),nD}var jdt=i4,ew=function(){return jdt()&&!!Symbol.toStringTag},CD,Bne;function $dt(){if(Bne)return CD;Bne=1;var e=Date.prototype.getDay,g=function(r){try{return e.call(r),!0}catch{return!1}},I=Object.prototype.toString,i="[object Date]",n=ew();return CD=function(r){return typeof r!="object"||r===null?!1:n?g(r):I.call(r)===i},CD}var mV={exports:{}},Sne;function qdt(){if(Sne)return mV.exports;Sne=1;var e=Object.prototype.toString,g=Zve();if(g){var I=Symbol.prototype.toString,i=/^Symbol\(.*\)$/,n=function(r){return typeof r.valueOf()!="symbol"?!1:i.test(I.call(r))};mV.exports=function(r){if(typeof r=="symbol")return!0;if(e.call(r)!=="[object Symbol]")return!1;try{return n(r)}catch{return!1}}}else mV.exports=function(r){return!1};return mV.exports}var rD,wne;function eht(){if(wne)return rD;wne=1;var e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol",g=Qdt(),I=d4,i=$dt(),n=qdt(),C=function(a,s){if(typeof a>"u"||a===null)throw new TypeError("Cannot call method on "+a);if(typeof s!="string"||s!=="number"&&s!=="string")throw new TypeError('hint must be "string" or "number"');var A=s==="string"?["toString","valueOf"]:["valueOf","toString"],l,c,u;for(u=0;u1&&(arguments[1]===String?s="string":arguments[1]===Number&&(s="number"));var A;if(e&&(Symbol.toPrimitive?A=r(a,Symbol.toPrimitive):n(a)&&(A=Symbol.prototype.valueOf)),typeof A<"u"){var l=A.call(a,s);if(g(l))return l;throw new TypeError("unable to convert exotic object to primitive")}return s==="default"&&(i(a)||n(a))&&(s="string"),C(a,s==="default"?"number":s)},rD}var oD,Rne;function tht(){if(Rne)return oD;Rne=1;var e=eht();return oD=function(I){return arguments.length>1?e(I,arguments[1]):e(I)},oD}var Hz=hC,nBe=ew(),CBe,rBe,Tz,Nz;if(nBe){CBe=Hz("Object.prototype.hasOwnProperty"),rBe=Hz("RegExp.prototype.exec"),Tz={};var aD=function(){throw Tz};Nz={toString:aD,valueOf:aD},typeof Symbol.toPrimitive=="symbol"&&(Nz[Symbol.toPrimitive]=aD)}var ght=Hz("Object.prototype.toString"),Iht=Object.getOwnPropertyDescriptor,iht="[object RegExp]",oBe=nBe?function(g){if(!g||typeof g!="object")return!1;var I=Iht(g,"lastIndex"),i=I&&CBe(I,"value");if(!i)return!1;try{rBe(g,Nz)}catch(n){return n===Tz}}:function(g){return!g||typeof g!="object"&&typeof g!="function"?!1:ght(g)===iht},AD,Vne;function nht(){if(Vne)return AD;Vne=1;var e=hC,g=Hg,I=oBe,i=e("RegExp.prototype.exec"),n=g("%TypeError%");return AD=function(r){if(!I(r))throw new n("`regex` must be a RegExp");return function(a){return i(r,a)!==null}},AD}var Cht=Hg,rht=Cht("%TypeError%"),oht=function(g,I){if(g==null)throw new rht(I||"Cannot call method on "+g);return g},z0=oht,aBe=Hg,aht=aBe("%String%"),Aht=aBe("%TypeError%"),m4=function(g){if(typeof g=="symbol")throw new Aht("Cannot convert a Symbol value to a string");return aht(g)},sht=z0,lht=m4,cht=hC,Wne=cht("String.prototype.replace"),ABe=/^\s$/.test("᠎"),uht=ABe?/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/:/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,dht=ABe?/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/:/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/,sBe=function(){var g=lht(sht(this));return Wne(Wne(g,uht,""),dht,"")},hht=sBe,Xne="​",Pm="᠎",lBe=function(){return String.prototype.trim&&Xne.trim()===Xne&&Pm.trim()===Pm&&("_"+Pm).trim()==="_"+Pm&&(Pm+"_").trim()===Pm+"_"?String.prototype.trim:hht},mht=Mn,fht=lBe,pht=function(){var g=fht();return mht(String.prototype,{trim:g},{trim:function(){return String.prototype.trim!==g}}),g},bht=il,yht=Mn,Zht=z0,Ght=sBe,cBe=lBe,vht=pht,Bht=bht(cBe()),uBe=function(g){return Zht(g),Bht(g)};yht(uBe,{getPolyfill:cBe,implementation:Ght,shim:vht});var dBe=uBe,sD,Hne;function Sht(){if(Hne)return sD;Hne=1;var e=Hg,g=e("%Number%"),I=e("%RegExp%"),i=e("%TypeError%"),n=e("%parseInt%"),C=hC,r=nht(),o=C("String.prototype.slice"),a=r(/^0b[01]+$/i),s=r(/^0o[0-7]+$/i),A=r(/^[-+]0x[0-9a-f]+$/i),l=["…","​","￾"].join(""),c=new I("["+l+"]","g"),u=r(c),d=dBe,h=bn();return sD=function m(f){if(h(f)!=="String")throw new i("Assertion failed: `argument` is not a String");if(a(f))return g(n(o(f,2),2));if(s(f))return g(n(o(f,2),8));if(u(f)||A(f))return NaN;var b=d(f);return b!==f?m(b):g(f)},sD}var hBe=Hg,Tne=hBe("%TypeError%"),Nne=hBe("%Number%"),wht=gBe(),Rht=tht(),Vht=Sht(),Wht=function(g){var I=wht(g)?g:Rht(g,Nne);if(typeof I=="symbol")throw new Tne("Cannot convert a Symbol value to a number");if(typeof I=="bigint")throw new Tne("Conversion from 'BigInt' to 'number' is not allowed.");return typeof I=="string"?Vht(I):Nne(I)},Xht=bn(),Hht=Math.floor,Tht=function(g){return Xht(g)==="BigInt"?g:Hht(g)},Nht=Hg,kne=Tht,kht=Nht("%TypeError%"),Yht=function(g){if(typeof g!="number"&&typeof g!="bigint")throw new kht("argument must be a Number or a BigInt");var I=g<0?-kne(-g):kne(g);return I===0?0:I},Kht=Wht,Fht=Yht,Dht=kN,xht=Fve,mBe=function(g){var I=Kht(g);return Dht(I)||I===0?0:xht(I)?Fht(I):I},Yne=eBe,Eht=mBe,fBe=function(g){var I=Eht(g);return I<=0?0:I>Yne?Yne:I},lD,Kne;function pBe(){if(Kne)return lD;Kne=1;var e=Hg,g=e("%TypeError%"),I=qS,i=fBe,n=bn();return lD=function(r){if(n(r)!=="Object")throw new g("Assertion failed: `obj` must be an Object");return i(I(r,"length"))},lD}var Mht=Hg,Fne=Mht("%TypeError%"),zht=eBe,Pht=tBe(),Jht=IBe(),Oht=qS,_ht=iBe(),Lht=l4(),Uht=pBe(),Dne=m4,Qht=function e(g,I,i,n,C){var r;arguments.length>5&&(r=arguments[5]);for(var o=n,a=0;a0&&(c=Lht(l)),c){var u=Uht(l);o=e(g,l,u,o,C-1)}else{if(o>=zht)throw new Fne("index too large");Jht(g,Dne(o),l),o+=1}}a+=1}return o},jht=Hg,$ht=jht("%Object%"),qht=z0,bBe=function(g){return qht(g),$ht(g)},emt=qve,tmt=Qht,gmt=qS,Imt=mBe,imt=fBe,nmt=bBe,yBe=function(){var g=nmt(this),I=imt(gmt(g,"length")),i=1;arguments.length>0&&typeof arguments[0]<"u"&&(i=Imt(arguments[0]));var n=emt(g,0);return tmt(n,g,I,0,i),n},Cmt=yBe,ZBe=function(){return Array.prototype.flat||Cmt},cD,xne;function rmt(){if(xne)return cD;xne=1;var e=Il,g=typeof Symbol=="function"&&typeof Symbol.unscopables=="symbol",I=g&&Array.prototype[Symbol.unscopables],i=TypeError;return cD=function(C){if(typeof C!="string"||!C)throw new i("method must be a non-empty string");if(!e(Array.prototype,C))throw new i("method must be on Array.prototype");g&&(I[C]=!0)},cD}var uD,Ene;function omt(){if(Ene)return uD;Ene=1;var e=Mn,g=rmt(),I=ZBe;return uD=function(){var n=I();return e(Array.prototype,{flat:n},{flat:function(){return Array.prototype.flat!==n}}),g("flat"),n},uD}var amt=Mn,Amt=il,smt=yBe,GBe=ZBe,lmt=GBe(),cmt=omt(),vBe=Amt(lmt);amt(vBe,{getPolyfill:GBe,implementation:smt,shim:cmt});var tw=vBe,Mne={}.hasOwnProperty,dD=Function.prototype.call,P0=dD.bind?dD.bind(Mne):function(e,g){return dD.call(Mne,e,g)},gw={},kz={exports:{}},zne=function(e){return e!==e},BBe=function(g,I){return g===0&&I===0?1/g===1/I:!!(g===I||zne(g)&&zne(I))},umt=BBe,SBe=function(){return typeof Object.is=="function"?Object.is:umt},dmt=SBe,hmt=Mn,mmt=function(){var g=dmt();return hmt(Object,{is:g},{is:function(){return Object.is!==g}}),g},fmt=Mn,pmt=il,bmt=BBe,wBe=SBe,ymt=mmt,RBe=pmt(wBe(),Object);fmt(RBe,{getPolyfill:wBe,implementation:bmt,shim:ymt});var f4=RBe;(function(e,g){Object.defineProperty(g,"__esModule",{value:!0}),g.default=r;var I=n(f4),i=n(P0);function n(o){return o&&o.__esModule?o:{default:o}}function C(o){"@babel/helpers - typeof";return C=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},C(o)}function r(o,a){if((0,I.default)(o,a))return!0;if(!o||!a||C(o)!=="object"||C(a)!=="object")return!1;var s=Object.keys(o),A=Object.keys(a);if(s.length!==A.length)return!1;s.sort(),A.sort();for(var l=0;l"u"||typeof g=="object"))try{var I=hD(g);return(I===Omt||I===Jmt)&&g("")==null}catch{}return!1})}var EBe=function(){if(xBe(this)||!Mmt(this)&&!KBe(this))throw new TypeError("Function.prototype.name sham getter called on non-function");if(xmt&&Dmt(this,"name"))return this.name;if(this===_mt)return"";var g=FBe(this),I=DBe(g,zmt),i=I&&I[1];return i},Umt=EBe,MBe=function(){return Umt},Qmt=Mn.supportsDescriptors,jmt=YBe(),$mt=MBe,Jne=Object.defineProperty,qmt=TypeError,eft=function(){var g=$mt();if(jmt)return g;if(!Qmt)throw new qmt("Shimming Function.prototype.name support requires ES5 property descriptor support.");var I=Function.prototype;return Jne(I,"name",{configurable:!0,enumerable:!1,get:function(){var i=g.call(this);return this!==I&&Jne(this,"name",{configurable:!0,enumerable:!1,value:i,writable:!1}),i}}),g},tft=Mn,gft=il,zBe=EBe,Ift=MBe,ift=eft,PBe=gft(zBe);tft(PBe,{getPolyfill:Ift,implementation:zBe,shim:ift});var b4=PBe,JBe={},OBe={};Object.defineProperty(OBe,"__esModule",{value:!0});var DN={},J0={},kX=$e&&$e.__assign||function(){return kX=Object.assign||function(e){for(var g,I=1,i=arguments.length;I0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"childNodes",{get:function(){return this.children},set:function(I){this.children=I},enumerable:!1,configurable:!0}),g}(y4);ug.NodeWithChildren=EN;var QBe=function(e){Au(g,e);function g(){var I=e!==null&&e.apply(this,arguments)||this;return I.type=xC.ElementType.CDATA,I}return Object.defineProperty(g.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),g}(EN);ug.CDATA=QBe;var jBe=function(e){Au(g,e);function g(){var I=e!==null&&e.apply(this,arguments)||this;return I.type=xC.ElementType.Root,I}return Object.defineProperty(g.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),g}(EN);ug.Document=jBe;var $Be=function(e){Au(g,e);function g(I,i,n,C){n===void 0&&(n=[]),C===void 0&&(C=I==="script"?xC.ElementType.Script:I==="style"?xC.ElementType.Style:xC.ElementType.Tag);var r=e.call(this,n)||this;return r.name=I,r.attribs=i,r.type=C,r}return Object.defineProperty(g.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"tagName",{get:function(){return this.name},set:function(I){this.name=I},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"attributes",{get:function(){var I=this;return Object.keys(this.attribs).map(function(i){var n,C;return{name:i,value:I.attribs[i],namespace:(n=I["x-attribsNamespace"])===null||n===void 0?void 0:n[i],prefix:(C=I["x-attribsPrefix"])===null||C===void 0?void 0:C[i]}})},enumerable:!1,configurable:!0}),g}(EN);ug.Element=$Be;function qBe(e){return(0,xC.isTag)(e)}ug.isTag=qBe;function eSe(e){return e.type===xC.ElementType.CDATA}ug.isCDATA=eSe;function tSe(e){return e.type===xC.ElementType.Text}ug.isText=tSe;function gSe(e){return e.type===xC.ElementType.Comment}ug.isComment=gSe;function ISe(e){return e.type===xC.ElementType.Directive}ug.isDirective=ISe;function iSe(e){return e.type===xC.ElementType.Root}ug.isDocument=iSe;function rft(e){return Object.prototype.hasOwnProperty.call(e,"children")}ug.hasChildren=rft;function Z4(e,g){g===void 0&&(g=!1);var I;if(tSe(e))I=new _Be(e.data);else if(gSe(e))I=new LBe(e.data);else if(qBe(e)){var i=g?mD(e.children):[],n=new $Be(e.name,jG({},e.attribs),i);i.forEach(function(a){return a.parent=n}),e.namespace!=null&&(n.namespace=e.namespace),e["x-attribsNamespace"]&&(n["x-attribsNamespace"]=jG({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(n["x-attribsPrefix"]=jG({},e["x-attribsPrefix"])),I=n}else if(eSe(e)){var i=g?mD(e.children):[],C=new QBe(i);i.forEach(function(s){return s.parent=C}),I=C}else if(iSe(e)){var i=g?mD(e.children):[],r=new jBe(i);i.forEach(function(s){return s.parent=r}),e["x-mode"]&&(r["x-mode"]=e["x-mode"]),I=r}else if(ISe(e)){var o=new UBe(e.name,e.data);e["x-name"]!=null&&(o["x-name"]=e["x-name"],o["x-publicId"]=e["x-publicId"],o["x-systemId"]=e["x-systemId"]),I=o}else throw new Error("Not implemented yet: ".concat(e.type));return I.startIndex=e.startIndex,I.endIndex=e.endIndex,e.sourceCodeLocation!=null&&(I.sourceCodeLocation=e.sourceCodeLocation),I}ug.cloneNode=Z4;function mD(e){for(var g=e.map(function(i){return Z4(i,!0)}),I=1;I䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(function(e){return e.charCodeAt(0)}));var v4={};Object.defineProperty(v4,"__esModule",{value:!0});v4.default=new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(function(e){return e.charCodeAt(0)}));var Yz={};(function(e){var g;Object.defineProperty(e,"__esModule",{value:!0}),e.replaceCodePoint=e.fromCodePoint=void 0;var I=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);e.fromCodePoint=(g=String.fromCodePoint)!==null&&g!==void 0?g:function(C){var r="";return C>65535&&(C-=65536,r+=String.fromCharCode(C>>>10&1023|55296),C=56320|C&1023),r+=String.fromCharCode(C),r};function i(C){var r;return C>=55296&&C<=57343||C>1114111?65533:(r=I.get(C))!==null&&r!==void 0?r:C}e.replaceCodePoint=i;function n(C){return(0,e.fromCodePoint)(i(C))}e.default=n})(Yz);(function(e){var g=$e&&$e.__createBinding||(Object.create?function(S,X,W,V){V===void 0&&(V=W);var H=Object.getOwnPropertyDescriptor(X,W);(!H||("get"in H?!X.__esModule:H.writable||H.configurable))&&(H={enumerable:!0,get:function(){return X[W]}}),Object.defineProperty(S,V,H)}:function(S,X,W,V){V===void 0&&(V=W),S[V]=X[W]}),I=$e&&$e.__setModuleDefault||(Object.create?function(S,X){Object.defineProperty(S,"default",{enumerable:!0,value:X})}:function(S,X){S.default=X}),i=$e&&$e.__importStar||function(S){if(S&&S.__esModule)return S;var X={};if(S!=null)for(var W in S)W!=="default"&&Object.prototype.hasOwnProperty.call(S,W)&&g(X,S,W);return I(X,S),X},n=$e&&$e.__importDefault||function(S){return S&&S.__esModule?S:{default:S}};Object.defineProperty(e,"__esModule",{value:!0}),e.decodeXML=e.decodeHTMLStrict=e.decodeHTMLAttribute=e.decodeHTML=e.determineBranch=e.EntityDecoder=e.DecodingMode=e.BinTrieFlags=e.fromCodePoint=e.replaceCodePoint=e.decodeCodePoint=e.xmlDecodeTree=e.htmlDecodeTree=void 0;var C=n(G4);e.htmlDecodeTree=C.default;var r=n(v4);e.xmlDecodeTree=r.default;var o=i(Yz);e.decodeCodePoint=o.default;var a=Yz;Object.defineProperty(e,"replaceCodePoint",{enumerable:!0,get:function(){return a.replaceCodePoint}}),Object.defineProperty(e,"fromCodePoint",{enumerable:!0,get:function(){return a.fromCodePoint}});var s;(function(S){S[S.NUM=35]="NUM",S[S.SEMI=59]="SEMI",S[S.EQUALS=61]="EQUALS",S[S.ZERO=48]="ZERO",S[S.NINE=57]="NINE",S[S.LOWER_A=97]="LOWER_A",S[S.LOWER_F=102]="LOWER_F",S[S.LOWER_X=120]="LOWER_X",S[S.LOWER_Z=122]="LOWER_Z",S[S.UPPER_A=65]="UPPER_A",S[S.UPPER_F=70]="UPPER_F",S[S.UPPER_Z=90]="UPPER_Z"})(s||(s={}));var A=32,l;(function(S){S[S.VALUE_LENGTH=49152]="VALUE_LENGTH",S[S.BRANCH_LENGTH=16256]="BRANCH_LENGTH",S[S.JUMP_TABLE=127]="JUMP_TABLE"})(l=e.BinTrieFlags||(e.BinTrieFlags={}));function c(S){return S>=s.ZERO&&S<=s.NINE}function u(S){return S>=s.UPPER_A&&S<=s.UPPER_F||S>=s.LOWER_A&&S<=s.LOWER_F}function d(S){return S>=s.UPPER_A&&S<=s.UPPER_Z||S>=s.LOWER_A&&S<=s.LOWER_Z||c(S)}function h(S){return S===s.EQUALS||d(S)}var m;(function(S){S[S.EntityStart=0]="EntityStart",S[S.NumericStart=1]="NumericStart",S[S.NumericDecimal=2]="NumericDecimal",S[S.NumericHex=3]="NumericHex",S[S.NamedEntity=4]="NamedEntity"})(m||(m={}));var f;(function(S){S[S.Legacy=0]="Legacy",S[S.Strict=1]="Strict",S[S.Attribute=2]="Attribute"})(f=e.DecodingMode||(e.DecodingMode={}));var b=function(){function S(X,W,V){this.decodeTree=X,this.emitCodePoint=W,this.errors=V,this.state=m.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=f.Strict}return S.prototype.startEntity=function(X){this.decodeMode=X,this.state=m.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},S.prototype.write=function(X,W){switch(this.state){case m.EntityStart:return X.charCodeAt(W)===s.NUM?(this.state=m.NumericStart,this.consumed+=1,this.stateNumericStart(X,W+1)):(this.state=m.NamedEntity,this.stateNamedEntity(X,W));case m.NumericStart:return this.stateNumericStart(X,W);case m.NumericDecimal:return this.stateNumericDecimal(X,W);case m.NumericHex:return this.stateNumericHex(X,W);case m.NamedEntity:return this.stateNamedEntity(X,W)}},S.prototype.stateNumericStart=function(X,W){return W>=X.length?-1:(X.charCodeAt(W)|A)===s.LOWER_X?(this.state=m.NumericHex,this.consumed+=1,this.stateNumericHex(X,W+1)):(this.state=m.NumericDecimal,this.stateNumericDecimal(X,W))},S.prototype.addToNumericResult=function(X,W,V,H){if(W!==V){var Y=V-W;this.result=this.result*Math.pow(H,Y)+parseInt(X.substr(W,Y),H),this.consumed+=Y}},S.prototype.stateNumericHex=function(X,W){for(var V=W;W>14;W>14,Y!==0){if(K===s.SEMI)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);this.decodeMode!==f.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1},S.prototype.emitNotTerminatedNamedEntity=function(){var X,W=this,V=W.result,H=W.decodeTree,Y=(H[V]&l.VALUE_LENGTH)>>14;return this.emitNamedEntityData(V,Y,this.consumed),(X=this.errors)===null||X===void 0||X.missingSemicolonAfterCharacterReference(),this.consumed},S.prototype.emitNamedEntityData=function(X,W,V){var H=this.decodeTree;return this.emitCodePoint(W===1?H[X]&~l.VALUE_LENGTH:H[X+1],V),W===3&&this.emitCodePoint(H[X+2],V),V},S.prototype.end=function(){var X;switch(this.state){case m.NamedEntity:return this.result!==0&&(this.decodeMode!==f.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case m.NumericDecimal:return this.emitNumericEntity(0,2);case m.NumericHex:return this.emitNumericEntity(0,3);case m.NumericStart:return(X=this.errors)===null||X===void 0||X.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case m.EntityStart:return 0}},S}();e.EntityDecoder=b;function p(S){var X="",W=new b(S,function(V){return X+=(0,o.fromCodePoint)(V)});return function(H,Y){for(var K=0,x=0;(x=H.indexOf("&",x))>=0;){X+=H.slice(K,x),W.startEntity(Y);var J=W.write(H,x+1);if(J<0){K=x+W.end();break}K=x+J,x=J===0?K+1:K}var P=X+H.slice(K);return X="",P}}function y(S,X,W,V){var H=(X&l.BRANCH_LENGTH)>>7,Y=X&l.JUMP_TABLE;if(H===0)return Y!==0&&V===Y?W:-1;if(Y){var K=V-Y;return K<0||K>=H?-1:S[W+K]-1}for(var x=W,J=x+H-1;x<=J;){var P=x+J>>>1,ge=S[P];if(geV)J=P-1;else return S[P+H]}return-1}e.determineBranch=y;var Z=p(C.default),B=p(r.default);function G(S,X){return X===void 0&&(X=f.Legacy),Z(S,X)}e.decodeHTML=G;function v(S){return Z(S,f.Attribute)}e.decodeHTMLAttribute=v;function w(S){return Z(S,f.Strict)}e.decodeHTMLStrict=w;function R(S){return B(S,f.Strict)}e.decodeXML=R})(sh);var lh={},B4={};Object.defineProperty(B4,"__esModule",{value:!0});function fV(e){for(var g=1;g$\x80-\uFFFF]/g;var g=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);e.getCodePoint=String.prototype.codePointAt!=null?function(n,C){return n.codePointAt(C)}:function(n,C){return(n.charCodeAt(C)&64512)===55296?(n.charCodeAt(C)-55296)*1024+n.charCodeAt(C+1)-56320+65536:n.charCodeAt(C)};function I(n){for(var C="",r=0,o;(o=e.xmlReplacer.exec(n))!==null;){var a=o.index,s=n.charCodeAt(a),A=g.get(s);A!==void 0?(C+=n.substring(r,a)+A,r=a+1):(C+="".concat(n.substring(r,a),"&#x").concat((0,e.getCodePoint)(n,a).toString(16),";"),r=e.xmlReplacer.lastIndex+=+((s&64512)===55296))}return C+n.substr(r)}e.encodeXML=I,e.escape=I;function i(n,C){return function(o){for(var a,s=0,A="";a=n.exec(o);)s!==a.index&&(A+=o.substring(s,a.index)),A+=C.get(a[0].charCodeAt(0)),s=a.index+1;return A+o.substring(s)}}e.escapeUTF8=i(/[&<>'"]/g,g),e.escapeAttribute=i(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),e.escapeText=i(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))})(Fb);var oft=$e&&$e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(lh,"__esModule",{value:!0});lh.encodeNonAsciiHTML=lh.encodeHTML=void 0;var aft=oft(B4),CSe=Fb,Aft=/[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;function sft(e){return rSe(Aft,e)}lh.encodeHTML=sft;function lft(e){return rSe(CSe.xmlReplacer,e)}lh.encodeNonAsciiHTML=lft;function rSe(e,g){for(var I="",i=0,n;(n=e.exec(g))!==null;){var C=n.index;I+=g.substring(i,C);var r=g.charCodeAt(C),o=aft.default.get(r);if(typeof o=="object"){if(C+10&&(i+=MN(e.children,g)),(g.xmlMode||!_ne.has(e.name))&&(i+=""))),i}function Gft(e){return"<".concat(e.data,">")}function vft(e,g){var I,i=e.data||"";return((I=g.encodeEntities)!==null&&I!==void 0?I:g.decodeEntities)!==!1&&!(!g.xmlMode&&e.parent&&hft.has(e.parent.name))&&(i=g.xmlMode||g.encodeEntities!=="utf8"?(0,YX.encodeXML)(i):(0,YX.escapeText)(i)),i}function Bft(e){return"")}function Sft(e){return"")}var wft=$e&&$e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(nr,"__esModule",{value:!0});nr.innerText=nr.textContent=nr.getText=nr.getInnerHTML=nr.getOuterHTML=void 0;var dA=En,Rft=wft(_0),Vft=O0;function aSe(e,g){return(0,Rft.default)(e,g)}nr.getOuterHTML=aSe;function Wft(e,g){return(0,dA.hasChildren)(e)?e.children.map(function(I){return aSe(I,g)}).join(""):""}nr.getInnerHTML=Wft;function gW(e){return Array.isArray(e)?e.map(gW).join(""):(0,dA.isTag)(e)?e.name==="br"?` -`:gW(e.children):(0,dA.isCDATA)(e)?gW(e.children):(0,dA.isText)(e)?e.data:""}nr.getText=gW;function Kz(e){return Array.isArray(e)?e.map(Kz).join(""):(0,dA.hasChildren)(e)&&!(0,dA.isComment)(e)?Kz(e.children):(0,dA.isText)(e)?e.data:""}nr.textContent=Kz;function Fz(e){return Array.isArray(e)?e.map(Fz).join(""):(0,dA.hasChildren)(e)&&(e.type===Vft.ElementType.Tag||(0,dA.isCDATA)(e))?Fz(e.children):(0,dA.isText)(e)?e.data:""}nr.innerText=Fz;var _i={};Object.defineProperty(_i,"__esModule",{value:!0});_i.prevElementSibling=_i.nextElementSibling=_i.getName=_i.hasAttrib=_i.getAttributeValue=_i.getSiblings=_i.getParent=_i.getChildren=void 0;var S4=En;function ASe(e){return(0,S4.hasChildren)(e)?e.children:[]}_i.getChildren=ASe;function sSe(e){return e.parent||null}_i.getParent=sSe;function Xft(e){var g,I,i=sSe(e);if(i!=null)return ASe(i);for(var n=[e],C=e.prev,r=e.next;C!=null;)n.unshift(C),g=C,C=g.prev;for(;r!=null;)n.push(r),I=r,r=I.next;return n}_i.getSiblings=Xft;function Hft(e,g){var I;return(I=e.attribs)===null||I===void 0?void 0:I[g]}_i.getAttributeValue=Hft;function Tft(e,g){return e.attribs!=null&&Object.prototype.hasOwnProperty.call(e.attribs,g)&&e.attribs[g]!=null}_i.hasAttrib=Tft;function Nft(e){return e.name}_i.getName=Nft;function kft(e){for(var g,I=e.next;I!==null&&!(0,S4.isTag)(I);)g=I,I=g.next;return I}_i.nextElementSibling=kft;function Yft(e){for(var g,I=e.prev;I!==null&&!(0,S4.isTag)(I);)g=I,I=g.prev;return I}_i.prevElementSibling=Yft;var XC={};Object.defineProperty(XC,"__esModule",{value:!0});XC.prepend=XC.prependChild=XC.append=XC.appendChild=XC.replaceElement=XC.removeElement=void 0;function Iw(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var g=e.parent.children,I=g.lastIndexOf(e);I>=0&&g.splice(I,1)}e.next=null,e.prev=null,e.parent=null}XC.removeElement=Iw;function Kft(e,g){var I=g.prev=e.prev;I&&(I.next=g);var i=g.next=e.next;i&&(i.prev=g);var n=g.parent=e.parent;if(n){var C=n.children;C[C.lastIndexOf(e)]=g,e.parent=null}}XC.replaceElement=Kft;function Fft(e,g){if(Iw(g),g.next=null,g.parent=e,e.children.push(g)>1){var I=e.children[e.children.length-2];I.next=g,g.prev=I}else g.prev=null}XC.appendChild=Fft;function Dft(e,g){Iw(g);var I=e.parent,i=e.next;if(g.next=i,g.prev=e,e.next=g,g.parent=I,i){if(i.prev=g,I){var n=I.children;n.splice(n.lastIndexOf(i),0,g)}}else I&&I.children.push(g)}XC.append=Dft;function xft(e,g){if(Iw(g),g.parent=e,g.prev=null,e.children.unshift(g)!==1){var I=e.children[1];I.prev=g,g.next=I}else g.next=null}XC.prependChild=xft;function Eft(e,g){Iw(g);var I=e.parent;if(I){var i=I.children;i.splice(i.indexOf(e),0,g)}e.prev&&(e.prev.next=g),g.parent=I,g.prev=e.prev,g.next=e,e.prev=g}XC.prepend=Eft;var Un={};Object.defineProperty(Un,"__esModule",{value:!0});Un.findAll=Un.existsOne=Un.findOne=Un.findOneChild=Un.find=Un.filter=void 0;var zN=En;function Mft(e,g,I,i){return I===void 0&&(I=!0),i===void 0&&(i=1/0),lSe(e,Array.isArray(g)?g:[g],I,i)}Un.filter=Mft;function lSe(e,g,I,i){for(var n=[],C=[g],r=[0];;){if(r[0]>=C[0].length){if(r.length===1)return n;C.shift(),r.shift();continue}var o=C[0][r[0]++];if(e(o)&&(n.push(o),--i<=0))return n;I&&(0,zN.hasChildren)(o)&&o.children.length>0&&(r.unshift(0),C.unshift(o.children))}}Un.find=lSe;function zft(e,g){return g.find(e)}Un.findOneChild=zft;function cSe(e,g,I){I===void 0&&(I=!0);for(var i=null,n=0;n0&&(i=cSe(e,C.children,!0));else continue}return i}Un.findOne=cSe;function uSe(e,g){return g.some(function(I){return(0,zN.isTag)(I)&&(e(I)||uSe(e,I.children))})}Un.existsOne=uSe;function Pft(e,g){for(var I=[],i=[g],n=[0];;){if(n[0]>=i[0].length){if(i.length===1)return I;i.shift(),n.shift();continue}var C=i[0][n[0]++];(0,zN.isTag)(C)&&(e(C)&&I.push(C),C.children.length>0&&(n.unshift(0),i.unshift(C.children)))}}Un.findAll=Pft;var Cr={};Object.defineProperty(Cr,"__esModule",{value:!0});Cr.getElementsByTagType=Cr.getElementsByTagName=Cr.getElementById=Cr.getElements=Cr.testElement=void 0;var id=En,PN=Un,KX={tag_name:function(e){return typeof e=="function"?function(g){return(0,id.isTag)(g)&&e(g.name)}:e==="*"?id.isTag:function(g){return(0,id.isTag)(g)&&g.name===e}},tag_type:function(e){return typeof e=="function"?function(g){return e(g.type)}:function(g){return g.type===e}},tag_contains:function(e){return typeof e=="function"?function(g){return(0,id.isText)(g)&&e(g.data)}:function(g){return(0,id.isText)(g)&&g.data===e}}};function dSe(e,g){return typeof g=="function"?function(I){return(0,id.isTag)(I)&&g(I.attribs[e])}:function(I){return(0,id.isTag)(I)&&I.attribs[e]===g}}function Jft(e,g){return function(I){return e(I)||g(I)}}function hSe(e){var g=Object.keys(e).map(function(I){var i=e[I];return Object.prototype.hasOwnProperty.call(KX,I)?KX[I](i):dSe(I,i)});return g.length===0?null:g.reduce(Jft)}function Oft(e,g){var I=hSe(e);return I?I(g):!0}Cr.testElement=Oft;function _ft(e,g,I,i){i===void 0&&(i=1/0);var n=hSe(e);return n?(0,PN.filter)(n,g,I,i):[]}Cr.getElements=_ft;function Lft(e,g,I){return I===void 0&&(I=!0),Array.isArray(g)||(g=[g]),(0,PN.findOne)(dSe("id",e),g,I)}Cr.getElementById=Lft;function Uft(e,g,I,i){return I===void 0&&(I=!0),i===void 0&&(i=1/0),(0,PN.filter)(KX.tag_name(e),g,I,i)}Cr.getElementsByTagName=Uft;function Qft(e,g,I,i){return I===void 0&&(I=!0),i===void 0&&(i=1/0),(0,PN.filter)(KX.tag_type(e),g,I,i)}Cr.getElementsByTagType=Qft;var mSe={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.uniqueSort=e.compareDocumentPosition=e.DocumentPosition=e.removeSubsets=void 0;var g=En;function I(r){for(var o=r.length;--o>=0;){var a=r[o];if(o>0&&r.lastIndexOf(a,o-1)>=0){r.splice(o,1);continue}for(var s=a.parent;s;s=s.parent)if(r.includes(s)){r.splice(o,1);break}}return r}e.removeSubsets=I;var i;(function(r){r[r.DISCONNECTED=1]="DISCONNECTED",r[r.PRECEDING=2]="PRECEDING",r[r.FOLLOWING=4]="FOLLOWING",r[r.CONTAINS=8]="CONTAINS",r[r.CONTAINED_BY=16]="CONTAINED_BY"})(i=e.DocumentPosition||(e.DocumentPosition={}));function n(r,o){var a=[],s=[];if(r===o)return 0;for(var A=(0,g.hasChildren)(r)?r:r.parent;A;)a.unshift(A),A=A.parent;for(A=(0,g.hasChildren)(o)?o:o.parent;A;)s.unshift(A),A=A.parent;for(var l=Math.min(a.length,s.length),c=0;cd.indexOf(m)?u===o?i.FOLLOWING|i.CONTAINED_BY:i.FOLLOWING:u===r?i.PRECEDING|i.CONTAINS:i.PRECEDING}e.compareDocumentPosition=n;function C(r){return r=r.filter(function(o,a,s){return!s.includes(o,a+1)}),r.sort(function(o,a){var s=n(o,a);return s&i.PRECEDING?-1:s&i.FOLLOWING?1:0}),r}e.uniqueSort=C})(mSe);var JN={};Object.defineProperty(JN,"__esModule",{value:!0});JN.getFeed=void 0;var jft=nr,iw=Cr;function $ft(e){var g=FX(Ipt,e);return g?g.name==="feed"?qft(g):ept(g):null}JN.getFeed=$ft;function qft(e){var g,I=e.children,i={type:"atom",items:(0,iw.getElementsByTagName)("entry",I).map(function(r){var o,a=r.children,s={media:fSe(a)};RC(s,"id","id",a),RC(s,"title","title",a);var A=(o=FX("link",a))===null||o===void 0?void 0:o.attribs.href;A&&(s.link=A);var l=hc("summary",a)||hc("content",a);l&&(s.description=l);var c=hc("updated",a);return c&&(s.pubDate=new Date(c)),s})};RC(i,"id","id",I),RC(i,"title","title",I);var n=(g=FX("link",I))===null||g===void 0?void 0:g.attribs.href;n&&(i.link=n),RC(i,"description","subtitle",I);var C=hc("updated",I);return C&&(i.updated=new Date(C)),RC(i,"author","email",I,!0),i}function ept(e){var g,I,i=(I=(g=FX("channel",e.children))===null||g===void 0?void 0:g.children)!==null&&I!==void 0?I:[],n={type:e.name.substr(0,3),id:"",items:(0,iw.getElementsByTagName)("item",e.children).map(function(r){var o=r.children,a={media:fSe(o)};RC(a,"id","guid",o),RC(a,"title","title",o),RC(a,"link","link",o),RC(a,"description","description",o);var s=hc("pubDate",o)||hc("dc:date",o);return s&&(a.pubDate=new Date(s)),a})};RC(n,"title","title",i),RC(n,"link","link",i),RC(n,"description","description",i);var C=hc("lastBuildDate",i);return C&&(n.updated=new Date(C)),RC(n,"author","managingEditor",i,!0),n}var tpt=["url","type","lang"],gpt=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function fSe(e){return(0,iw.getElementsByTagName)("media:content",e).map(function(g){for(var I=g.attribs,i={medium:I.medium,isDefault:!!I.isDefault},n=0,C=tpt;nA.length-3)return!1;var c=A.charCodeAt(l+1);return(c>=a.LowerA&&c<=a.LowerZ||c>=a.UpperA&&c<=a.UpperZ||c===a.Exclamation)&&A.includes(">",l+2)}e.isHtml=s})(su);Object.defineProperty(hi,"__esModule",{value:!0});hi.toggleClass=hi.removeClass=hi.addClass=hi.hasClass=hi.removeAttr=hi.val=hi.data=hi.prop=hi.attr=void 0;var bSe=ai,Pg=su,Une=ra,Kp=Object.prototype.hasOwnProperty,zB=/\s+/,fD="data-",Qne={null:null,true:!0,false:!1},w4=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,hpt=/^{[^]*}$|^\[[^]*]$/;function DX(e,g,I){var i;if(!(!e||!(0,Pg.isTag)(e))){if((i=e.attribs)!==null&&i!==void 0||(e.attribs={}),!g)return e.attribs;if(Kp.call(e.attribs,g))return!I&&w4.test(g)?g:e.attribs[g];if(e.name==="option"&&g==="value")return(0,bSe.text)(e.children);if(e.name==="input"&&(e.attribs.type==="radio"||e.attribs.type==="checkbox")&&g==="value")return"on"}}function Fp(e,g,I){I===null?ySe(e,g):e.attribs[g]="".concat(I)}function mpt(e,g){if(typeof e=="object"||g!==void 0){if(typeof g=="function"){if(typeof e!="string")throw new Error("Bad combination of arguments.");return(0,Pg.domEach)(this,function(I,i){(0,Pg.isTag)(I)&&Fp(I,e,g.call(I,i,I.attribs[e]))})}return(0,Pg.domEach)(this,function(I){(0,Pg.isTag)(I)&&(typeof e=="object"?Object.keys(e).forEach(function(i){var n=e[i];Fp(I,i,n)}):Fp(I,e,g))})}return arguments.length>1?this:DX(this[0],e,this.options.xmlMode)}hi.attr=mpt;function jne(e,g,I){return g in e?e[g]:!I&&w4.test(g)?DX(e,g,!1)!==void 0:DX(e,g,I)}function pD(e,g,I,i){g in e?e[g]=I:Fp(e,g,!i&&w4.test(g)?I?"":null:"".concat(I))}function fpt(e,g){var I=this,i;if(typeof e=="string"&&g===void 0){var n=this[0];if(!n||!(0,Pg.isTag)(n))return;switch(e){case"style":{var C=this.css(),r=Object.keys(C);return r.forEach(function(a,s){C[s]=a}),C.length=r.length,C}case"tagName":case"nodeName":return n.name.toUpperCase();case"href":case"src":{var o=(i=n.attribs)===null||i===void 0?void 0:i[e];return typeof URL<"u"&&(e==="href"&&(n.tagName==="a"||n.name==="link")||e==="src"&&(n.tagName==="img"||n.tagName==="iframe"||n.tagName==="audio"||n.tagName==="video"||n.tagName==="source"))&&o!==void 0&&this.options.baseURI?new URL(o,this.options.baseURI).href:o}case"innerText":return(0,Une.innerText)(n);case"textContent":return(0,Une.textContent)(n);case"outerHTML":return this.clone().wrap("").parent().html();case"innerHTML":return this.html();default:return jne(n,e,this.options.xmlMode)}}if(typeof e=="object"||g!==void 0){if(typeof g=="function"){if(typeof e=="object")throw new Error("Bad combination of arguments.");return(0,Pg.domEach)(this,function(a,s){(0,Pg.isTag)(a)&&pD(a,e,g.call(a,s,jne(a,e,I.options.xmlMode)),I.options.xmlMode)})}return(0,Pg.domEach)(this,function(a){(0,Pg.isTag)(a)&&(typeof e=="object"?Object.keys(e).forEach(function(s){var A=e[s];pD(a,s,A,I.options.xmlMode)}):pD(a,e,g,I.options.xmlMode))})}}hi.prop=fpt;function $ne(e,g,I){var i,n=e;(i=n.data)!==null&&i!==void 0||(n.data={}),typeof g=="object"?Object.assign(n.data,g):typeof g=="string"&&I!==void 0&&(n.data[g]=I)}function qne(e,g){var I,i,n;g==null?(I=Object.keys(e.attribs).filter(function(a){return a.startsWith(fD)}),i=I.map(function(a){return(0,Pg.camelCase)(a.slice(fD.length))})):(I=[fD+(0,Pg.cssCase)(g)],i=[g]);for(var C=0;C-1;){var n=i+e.length;if((i===0||zB.test(I[i-1]))&&(n===I.length||zB.test(I[n])))return!0}return!1})}hi.hasClass=Zpt;function ZSe(e){if(typeof e=="function")return(0,Pg.domEach)(this,function(s,A){if((0,Pg.isTag)(s)){var l=s.attribs.class||"";ZSe.call([s],e.call(s,A,l))}});if(!e||typeof e!="string")return this;for(var g=e.split(zB),I=this.length,i=0;i=0&&(C.splice(a,1),r=!0,o--)}r&&(n.attribs.class=C.join(" "))}})}hi.removeClass=GSe;function vSe(e,g){if(typeof e=="function")return(0,Pg.domEach)(this,function(l,c){(0,Pg.isTag)(l)&&vSe.call([l],e.call(l,c,l.attribs.class||"",g),g)});if(!e||typeof e!="string")return this;for(var I=e.split(zB),i=I.length,n=typeof g=="boolean"?g?1:-1:0,C=this.length,r=0;r=0&&A<0?a.push(I[s]):n<=0&&A>=0&&a.splice(A,1)}o.attribs.class=a.join(" ")}}return this}hi.toggleClass=vSe;var Vt={},BSe={},Gg;(function(e){e.Attribute="attribute",e.Pseudo="pseudo",e.PseudoElement="pseudo-element",e.Tag="tag",e.Universal="universal",e.Adjacent="adjacent",e.Child="child",e.Descendant="descendant",e.Parent="parent",e.Sibling="sibling",e.ColumnCombinator="column-combinator"})(Gg||(Gg={}));const Gpt={Unknown:null,QuirksMode:"quirks",IgnoreCase:!0,CaseSensitive:!1};var VI;(function(e){e.Any="any",e.Element="element",e.End="end",e.Equals="equals",e.Exists="exists",e.Hyphen="hyphen",e.Not="not",e.Start="start"})(VI||(VI={}));const eCe=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/,vpt=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,Bpt=new Map([[126,VI.Element],[94,VI.Start],[36,VI.End],[42,VI.Any],[33,VI.Not],[124,VI.Hyphen]]),Spt=new Set(["has","not","matches","is","where","host","host-context"]);function SSe(e){switch(e.type){case Gg.Adjacent:case Gg.Child:case Gg.Descendant:case Gg.Parent:case Gg.Sibling:case Gg.ColumnCombinator:return!0;default:return!1}}const wpt=new Set(["contains","icontains"]);function Rpt(e,g,I){const i=parseInt(g,16)-65536;return i!==i||I?g:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,i&1023|56320)}function CZ(e){return e.replace(vpt,Rpt)}function bD(e){return e===39||e===34}function tCe(e){return e===32||e===9||e===10||e===12||e===13}function Vpt(e){const g=[],I=wSe(g,`${e}`,0);if(I0&&I0&&SSe(i[i.length-1]))throw new Error("Did not expect successive traversals.")}function s(c){if(i.length>0&&i[i.length-1].type===Gg.Descendant){i[i.length-1].type=c;return}a(),i.push({type:c})}function A(c,u){i.push({type:Gg.Attribute,name:c,action:u,value:n(1),namespace:null,ignoreCase:"quirks"})}function l(){if(i.length&&i[i.length-1].type===Gg.Descendant&&i.pop(),i.length===0)throw new Error("Empty sub-selector");e.push(i)}if(C(0),g.length===I)return I;e:for(;Ie.charCodeAt(0))),gCe=new Set(VSe.map(e=>e.charCodeAt(0))),rp=new Set([...VSe,"~","^","$","*","+","!","|",":","[","]"," ","."].map(e=>e.charCodeAt(0)));function WSe(e){return e.map(g=>g.map(Xpt).join("")).join(", ")}function Xpt(e,g,I){switch(e.type){case Gg.Child:return g===0?"> ":" > ";case Gg.Parent:return g===0?"< ":" < ";case Gg.Sibling:return g===0?"~ ":" ~ ";case Gg.Adjacent:return g===0?"+ ":" + ";case Gg.Descendant:return" ";case Gg.ColumnCombinator:return g===0?"|| ":" || ";case Gg.Universal:return e.namespace==="*"&&g+10?i+e.slice(I):e}const Tpt=Object.freeze(Object.defineProperty({__proto__:null,get AttributeAction(){return VI},IgnoreCaseMode:Gpt,get SelectorType(){return Gg},isTraversal:SSe,parse:Vpt,stringify:WSe},Symbol.toStringTag,{value:"Module"})),nw=qs(Tpt);var xz={},om={trueFunc:function(){return!0},falseFunc:function(){return!1}},Tc={},L0={};Object.defineProperty(L0,"__esModule",{value:!0});L0.isTraversal=void 0;var Ir=nw,HSe=new Map([[Ir.SelectorType.Universal,50],[Ir.SelectorType.Tag,30],[Ir.SelectorType.Attribute,1],[Ir.SelectorType.Pseudo,0]]);function Npt(e){return!HSe.has(e.type)}L0.isTraversal=Npt;var kpt=new Map([[Ir.AttributeAction.Exists,10],[Ir.AttributeAction.Equals,8],[Ir.AttributeAction.Not,7],[Ir.AttributeAction.Start,6],[Ir.AttributeAction.End,6],[Ir.AttributeAction.Any,5]]);function Ypt(e){for(var g=e.map(TSe),I=1;I=0&&i>=1)):e.type===Ir.SelectorType.Pseudo&&(e.data?e.name==="has"||e.name==="contains"?i=0:Array.isArray(e.data)?(i=Math.min.apply(Math,e.data.map(function(n){return Math.min.apply(Math,n.map(TSe))})),i<0&&(i=0)):i=2:i=3),i}var _N={},LN={},Kpt=$e&&$e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(LN,"__esModule",{value:!0});LN.attributeRules=void 0;var pV=Kpt(om),Fpt=/[-[\]{}()*+?.,\\^$|#\s]/g;function iCe(e){return e.replace(Fpt,"\\$&")}var Dpt=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function Tu(e,g){return typeof e.ignoreCase=="boolean"?e.ignoreCase:e.ignoreCase==="quirks"?!!g.quirksMode:!g.xmlMode&&Dpt.has(e.name)}LN.attributeRules={equals:function(e,g,I){var i=I.adapter,n=g.name,C=g.value;return Tu(g,I)?(C=C.toLowerCase(),function(r){var o=i.getAttributeValue(r,n);return o!=null&&o.length===C.length&&o.toLowerCase()===C&&e(r)}):function(r){return i.getAttributeValue(r,n)===C&&e(r)}},hyphen:function(e,g,I){var i=I.adapter,n=g.name,C=g.value,r=C.length;return Tu(g,I)?(C=C.toLowerCase(),function(a){var s=i.getAttributeValue(a,n);return s!=null&&(s.length===r||s.charAt(r)==="-")&&s.substr(0,r).toLowerCase()===C&&e(a)}):function(a){var s=i.getAttributeValue(a,n);return s!=null&&(s.length===r||s.charAt(r)==="-")&&s.substr(0,r)===C&&e(a)}},element:function(e,g,I){var i=I.adapter,n=g.name,C=g.value;if(/\s/.test(C))return pV.default.falseFunc;var r=new RegExp("(?:^|\\s)".concat(iCe(C),"(?:$|\\s)"),Tu(g,I)?"i":"");return function(a){var s=i.getAttributeValue(a,n);return s!=null&&s.length>=C.length&&r.test(s)&&e(a)}},exists:function(e,g,I){var i=g.name,n=I.adapter;return function(C){return n.hasAttrib(C,i)&&e(C)}},start:function(e,g,I){var i=I.adapter,n=g.name,C=g.value,r=C.length;return r===0?pV.default.falseFunc:Tu(g,I)?(C=C.toLowerCase(),function(o){var a=i.getAttributeValue(o,n);return a!=null&&a.length>=r&&a.substr(0,r).toLowerCase()===C&&e(o)}):function(o){var a;return!!(!((a=i.getAttributeValue(o,n))===null||a===void 0)&&a.startsWith(C))&&e(o)}},end:function(e,g,I){var i=I.adapter,n=g.name,C=g.value,r=-C.length;return r===0?pV.default.falseFunc:Tu(g,I)?(C=C.toLowerCase(),function(o){var a;return((a=i.getAttributeValue(o,n))===null||a===void 0?void 0:a.substr(r).toLowerCase())===C&&e(o)}):function(o){var a;return!!(!((a=i.getAttributeValue(o,n))===null||a===void 0)&&a.endsWith(C))&&e(o)}},any:function(e,g,I){var i=I.adapter,n=g.name,C=g.value;if(C==="")return pV.default.falseFunc;if(Tu(g,I)){var r=new RegExp(iCe(C),"i");return function(a){var s=i.getAttributeValue(a,n);return s!=null&&s.length>=C.length&&r.test(s)&&e(a)}}return function(o){var a;return!!(!((a=i.getAttributeValue(o,n))===null||a===void 0)&&a.includes(C))&&e(o)}},not:function(e,g,I){var i=I.adapter,n=g.name,C=g.value;return C===""?function(r){return!!i.getAttributeValue(r,n)&&e(r)}:Tu(g,I)?(C=C.toLowerCase(),function(r){var o=i.getAttributeValue(r,n);return(o==null||o.length!==C.length||o.toLowerCase()!==C)&&e(r)}):function(r){return i.getAttributeValue(r,n)!==C&&e(r)}}};var R4={},NSe={},kSe={},UN={};Object.defineProperty(UN,"__esModule",{value:!0});UN.parse=void 0;var xpt=new Set([9,10,12,13,32]),nCe="0".charCodeAt(0),Ept="9".charCodeAt(0);function Mpt(e){if(e=e.trim().toLowerCase(),e==="even")return[2,0];if(e==="odd")return[2,1];var g=0,I=0,i=C(),n=r();if(g=nCe&&e.charCodeAt(g)<=Ept;)s=s*10+(e.charCodeAt(g)-nCe),g++;return g===a?null:s}function o(){for(;g=I};var i=Math.abs(g),n=(I%i+i)%i;return g>1?function(C){return C>=I&&C%i===n}:function(C){return C<=I&&C%i===n}}xb.compile=Ppt;function Jpt(e){var g=e[0],I=e[1]-1,i=0;if(g<0){var n=-g,C=(I%n+n)%n;return function(){var r=C+n*i++;return r>I?null:r}}return g===0?I<0?function(){return null}:function(){return i++===0?I:null}:(I<0&&(I+=g*Math.ceil(-I/g)),function(){return g*i+++I})}xb.generate=Jpt;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.sequence=e.generate=e.compile=e.parse=void 0;var g=UN;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return g.parse}});var I=xb;Object.defineProperty(e,"compile",{enumerable:!0,get:function(){return I.compile}}),Object.defineProperty(e,"generate",{enumerable:!0,get:function(){return I.generate}});function i(C){return(0,I.compile)((0,g.parse)(C))}e.default=i;function n(C){return(0,I.generate)((0,g.parse)(C))}e.sequence=n})(kSe);(function(e){var g=$e&&$e.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(e,"__esModule",{value:!0}),e.filters=void 0;var I=g(kSe),i=g(om);function n(r,o){return function(a){var s=o.getParent(a);return s!=null&&o.isTag(s)&&r(a)}}e.filters={contains:function(r,o,a){var s=a.adapter;return function(l){return r(l)&&s.getText(l).includes(o)}},icontains:function(r,o,a){var s=a.adapter,A=o.toLowerCase();return function(c){return r(c)&&s.getText(c).toLowerCase().includes(A)}},"nth-child":function(r,o,a){var s=a.adapter,A=a.equals,l=(0,I.default)(o);return l===i.default.falseFunc?i.default.falseFunc:l===i.default.trueFunc?n(r,s):function(u){for(var d=s.getSiblings(u),h=0,m=0;m=0&&!A(u,d[m]);m--)s.isTag(d[m])&&h++;return l(h)&&r(u)}},"nth-of-type":function(r,o,a){var s=a.adapter,A=a.equals,l=(0,I.default)(o);return l===i.default.falseFunc?i.default.falseFunc:l===i.default.trueFunc?n(r,s):function(u){for(var d=s.getSiblings(u),h=0,m=0;m=0;m--){var f=d[m];if(A(u,f))break;s.isTag(f)&&s.getName(f)===s.getName(u)&&h++}return l(h)&&r(u)}},root:function(r,o,a){var s=a.adapter;return function(A){var l=s.getParent(A);return(l==null||!s.isTag(l))&&r(A)}},scope:function(r,o,a,s){var A=a.equals;return!s||s.length===0?e.filters.root(r,o,a):s.length===1?function(l){return A(s[0],l)&&r(l)}:function(l){return s.includes(l)&&r(l)}},hover:C("isHovered"),visited:C("isVisited"),active:C("isActive")};function C(r){return function(a,s,A){var l=A.adapter,c=l[r];return typeof c!="function"?i.default.falseFunc:function(d){return c(d)&&a(d)}}}})(NSe);var Eb={};Object.defineProperty(Eb,"__esModule",{value:!0});Eb.verifyPseudoArgs=Eb.pseudos=void 0;Eb.pseudos={empty:function(e,g){var I=g.adapter;return!I.getChildren(e).some(function(i){return I.isTag(i)||I.getText(i)!==""})},"first-child":function(e,g){var I=g.adapter,i=g.equals;if(I.prevElementSibling)return I.prevElementSibling(e)==null;var n=I.getSiblings(e).find(function(C){return I.isTag(C)});return n!=null&&i(e,n)},"last-child":function(e,g){for(var I=g.adapter,i=g.equals,n=I.getSiblings(e),C=n.length-1;C>=0;C--){if(i(e,n[C]))return!0;if(I.isTag(n[C]))break}return!1},"first-of-type":function(e,g){for(var I=g.adapter,i=g.equals,n=I.getSiblings(e),C=I.getName(e),r=0;r=0;r--){var o=n[r];if(i(e,o))return!0;if(I.isTag(o)&&I.getName(o)===C)break}return!1},"only-of-type":function(e,g){var I=g.adapter,i=g.equals,n=I.getName(e);return I.getSiblings(e).every(function(C){return i(e,C)||!I.isTag(C)||I.getName(C)!==n})},"only-child":function(e,g){var I=g.adapter,i=g.equals;return I.getSiblings(e).every(function(n){return i(e,n)||!I.isTag(n)})}};function Opt(e,g,I,i){if(I===null){if(e.length>i)throw new Error("Pseudo-class :".concat(g," requires an argument"))}else if(e.length===i)throw new Error("Pseudo-class :".concat(g," doesn't have any arguments"))}Eb.verifyPseudoArgs=Opt;var QN={};Object.defineProperty(QN,"__esModule",{value:!0});QN.aliases=void 0;QN.aliases={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:`:is( + */var hct=function(e){return e!=null&&(hve(e)||mct(e)||!!e._isBuffer)};function hve(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function mct(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&hve(e.slice(0,0))}var fct=dct,pct=hct,bct=typeof Float64Array<"u";function yct(e,g){return e[0]-g[0]}function Zct(){var e=this.stride,g=new Array(e.length),i;for(i=0;iMath.abs(this.stride[1]))?[1,0]:[0,1]}})"):g===3&&n.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):n.push("ORDER})")),n.push("proto.set=function "+i+"_set("+C.join(",")+",v){"),I?n.push("return this.data.set("+o+",v)}"):n.push("return this.data["+o+"]=v}"),n.push("proto.get=function "+i+"_get("+C.join(",")+"){"),I?n.push("return this.data.get("+o+")}"):n.push("return this.data["+o+"]}"),n.push("proto.index=function "+i+"_index(",C.join(),"){return "+o+"}"),n.push("proto.hi=function "+i+"_hi("+C.join(",")+"){return new "+i+"(this.data,"+r.map(function(m){return["(typeof i",m,"!=='number'||i",m,"<0)?this.shape[",m,"]:i",m,"|0"].join("")}).join(",")+","+r.map(function(m){return"this.stride["+m+"]"}).join(",")+",this.offset)}");var A=r.map(function(m){return"a"+m+"=this.shape["+m+"]"}),l=r.map(function(m){return"c"+m+"=this.stride["+m+"]"});n.push("proto.lo=function "+i+"_lo("+C.join(",")+"){var b=this.offset,d=0,"+A.join(",")+","+l.join(","));for(var c=0;c=0){d=i"+c+"|0;b+=c"+c+"*d;a"+c+"-=d}");n.push("return new "+i+"(this.data,"+r.map(function(m){return"a"+m}).join(",")+","+r.map(function(m){return"c"+m}).join(",")+",b)}"),n.push("proto.step=function "+i+"_step("+C.join(",")+"){var "+r.map(function(m){return"a"+m+"=this.shape["+m+"]"}).join(",")+","+r.map(function(m){return"b"+m+"=this.stride["+m+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(var c=0;c=0){c=(c+this.stride["+c+"]*i"+c+")|0}else{a.push(this.shape["+c+"]);b.push(this.stride["+c+"])}");n.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),n.push("return function construct_"+i+"(data,shape,stride,offset){return new "+i+"(data,"+r.map(function(m){return"shape["+m+"]"}).join(",")+","+r.map(function(m){return"stride["+m+"]"}).join(",")+",offset)}");var h=new Function("CTOR_LIST","ORDER",n.join(` +`));return h(XX[e],Zct)}function vct(e){if(pct(e))return"buffer";if(bct)switch(Object.prototype.toString.call(e)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped";case"[object BigInt64Array]":return"bigint64";case"[object BigUint64Array]":return"biguint64"}return Array.isArray(e)?"array":"generic"}var XX={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};function Bct(e,g,i,I){if(e===void 0){var s=XX.array[0];return s([])}else typeof e=="number"&&(e=[e]);g===void 0&&(g=[e.length]);var n=g.length;if(i===void 0){i=new Array(n);for(var r=n-1,C=1;r>=0;--r)i[r]=C,C*=g[r]}if(I===void 0){I=0;for(var r=0;r{const g=e.shape.reduce((I,n)=>I*n,1),i=new Array(g);if(e.dimension===1){let I=0;for(let n=0;ne.shape.length===1?e:kp(mve(e)),pve=e=>{const g=e.split("."),i=g.slice(1).join("").length;return+g.join("")/10**i},qS=(e,g)=>e||g;function FN(e){const g=[],i={},I={};let n=0;for(let r=0;r{const g=document.createElement("g"),i=document.createElement("text");return e.anchor.x===0?i.setAttribute("text-anchor","start"):e.anchor.x===1?i.setAttribute("text-anchor","end"):i.setAttribute("text-anchor","middle"),i.setAttribute("font-family",e.style.fontFamily),i.setAttribute("font-size",e.style.fontSize),g.setAttribute("transform",`scale(${e.scale.x},1)`),i.setAttribute("fill",e.style.fill),i.innerHTML=e.text,g.appendChild(i),g.setAttribute("transform",`translate(${e.x},${e.y})scale(${e.scale.x},1)`),g},wct=e=>{try{const g=e.split(".");return i=>{let I=i;return g.forEach(n=>{I=I[n]}),I}}catch{return}},Rct=(e,g,i,I,n,r,C=0,o=0,a)=>{const s=r?n:I,A=r?I:n,l=r?o:C,c=r?C:o,u=Math.max(0,+s[0]||0),d=Math.max(0,+s[1]||0),h=Math.max(0,+A[0]||0),m=Math.max(0,+A[1]||0);let f=[];ArrayBuffer.isView(a)||console.warn("Not supported yet");try{const b=new a.constructor(a.length);let p=0+c;for(let Z=h;Z[I.chrPositions[e].pos+ +g,I.chrPositions[e].pos+ +i],Wct="http://www.w3.org/2000/svg",Xct=(e,g)=>{const i=new RegExp(`(\\s|^)${g}(\\s|$)`);if(e.namespaceURI===Wct){const I=e.getAttribute("class")||"";e.setAttribute("class",I.replace(i," "))}else e.classList?e.classList.remove(g):yX(e,g)&&(e.className=e.className.replace(i," "))},Yp=(e,g)=>{e.select(".selection").attr("fill",null).attr("fill-opacity",null).attr("stroke",null).classed(g,!0)},SF=e=>{const g=e.toString(16);return g.length===1?`0${g}`:g},Hct=(e,g,i)=>`#${SF(e)}${SF(g)}${SF(i)}`,SI=(e,g)=>{const i=e.invert((e.range()[0]+e.range()[1])/2),I=g.invert((g.range()[0]+g.range()[1])/2),n=e.invert(1)-e.invert(0);return[i,I,n]},bve=(e,g,i)=>{if(i===null||!e||!g)return;const I=e.domain()[0],n=e.domain()[1],r=g.domain()[0],C=g.domain()[1];return[...wX(I,n,i),...wX(r,C,i)]},Tct=11184810,Nct=1,kct=(e,g,i,I,n,r,C,o,a)=>{e.publish("app.animateOnMouseMove",!0);const s=i.mousePositionColor?sve(i.mousePositionColor):Tct,A=i.mousePositionAlpha||Nct,l=new ot.PIXI.Graphics,c=()=>{l.clear()},u=(h,m,f)=>{if(f||c(),l.lineStyle(1,s,A),m){const b=o?n()[0]:0;l.moveTo(0,h),l.lineTo(r()[0]+b,h)}else{const b=o?n()[1]:0;l.moveTo(h,0),l.lineTo(h,r()[1]+b)}},d=h=>{if(h.noHoveredTracks)return c(),l;let m,f;h.isFromVerticalTrack?(m=h.dataY,f=h.dataY):(m=h.dataX,f=h.isFrom2dTrack?h.dataY:h.dataX);const b=o?n():[0,0],p=C()?I()[0](f)+b[1]:I()[0](m)+b[0];return u(p),o&&u(I()[1](f)+b[1],!0,!0),l};return g.push(e.subscribe("app.mouseMove",d)),g.push(e.subscribe("app.mouseLeave",c)),g.push(e.subscribe("blur",c)),a&&g.push(_G.subscribe("higlass.mouseMove",d)),l},sh=(e,g=!1,i=!1)=>{const I=g?e.pMasked:e.pForeground||e.pMain;if(!I)throw new Error("setupShowMousePosition: No scene found. Please make sure to call this method after the scene has been initialized.");const n=()=>[e.xScale(),e.yScale()],r=kct(e.pubSub,e.pubSubs,e.options,n,e.getPosition.bind(e),e.getDimensions.bind(e),e.getProp("flipText"),g,i);return I.addChild(r),()=>{I.removeChild(r)}},Yct=e=>g=>Array.prototype.some.call(g,e),ql=(e,g)=>e+g,yve=(e,g,i,I,n,r)=>{const C=document.createElement("line");return C.setAttribute("x1",e),C.setAttribute("x2",i),C.setAttribute("y1",g),C.setAttribute("y2",I),n&&C.setAttribute("stroke-width",n),r&&C.setAttribute("stroke",r),C},Zve=(e,g,i)=>{let I,n=0;const r=()=>{I=void 0},C=(...s)=>{const A=()=>{n>0&&(e(...s),n=0)};clearTimeout(I),I=setTimeout(A,i)};C.cancel=()=>{clearTimeout(I),r()},C.immediate=(...s)=>{e(...s)};let o=!1;return(s,...A)=>{o?n++:(e(...A),C(...A),o=!0,n=0,setTimeout(()=>{o=!1},g))}},Kct=(e,g=256,i=256)=>{const I=document.createElement("canvas");I.width=g,I.height=i;const n=I.getContext("2d");if(!n)throw new Error("Could not get canvas context");n.fillStyle="transparent",n.fillRect(0,0,I.width,I.height);const r=new ImageData(e,I.width,I.height);return n.putImageData(r,0,0),I},I4=e=>new Promise(g=>{setTimeout(g,e)}),Fct=e=>{if(!e.tracks)return 0;let g=0;return e.tracks.top&&(g+=e.tracks.top.map(i=>i.height).reduce((i,I)=>i+I,0)),e.tracks.center&&(g+=e.tracks.center.map(i=>i.height).reduce((i,I)=>i+I,0)),e.tracks.bottom&&(g+=e.tracks.bottom.map(i=>i.height).reduce((i,I)=>i+I,0)),g},ta=()=>{},DN=e=>(e||"").replace(/\/$/,""),n4=(e,g,i=0,I=1e-6)=>n=>{let r=255;return n>I&&(r=Math.max(0,Math.min(255,Math.floor(e(n+i))))),g[r]},eW=e=>{let g=[];for(let i=0;ig[0]?e.left?Sz(e.left,g):hIe(e,"left",g):e.right?Sz(e.right,g):hIe(e,"right",g)}Js.prototype.add=function(g){if(!this.root){this.root=new Gve(g[0],g[1]),this.root.max=g[1];return}Sz(this.root,g)};function vve(e,g){if(!g)return!1;if(g.interval[0]<=e&&g.interval[1]>=e)return!0;let i=!1,I;return["left","right"].forEach(n=>{I=g[n],I&&I.max>e&&(i=i||vve(e,I))}),i}Js.prototype.contains=function(g){return vve(g,this.root)};function Dct(e,g){return e[0]===g[0]&&e[1]===g[1]||e[0]g[0]||e[0]g[1]||g[0]e[0]||g[0]e[1]}function Bve(e,g){if(!g)return!1;if(Dct(g.interval,e))return!0;let i=!1,I;return["left","right"].forEach(n=>{I=g[n],I&&I.max>=e[0]&&(i=i||Bve(e,I))}),i}Js.prototype.intersects=function(g){return Bve(g,this.root)};function wz(e){return e?1+Math.max(wz(e.left),wz(e.right)):0}Js.prototype.height=function(){return wz(this.root)};Js.prototype.findMax=function(g){const i=[g];let I,n=-1/0,r;for(;i.length;)I=i.pop(),I.left&&i.push(I.left),I.right&&i.push(I.right),I.interval[1]>n&&(n=I.interval[1],r=I);return r};Js.prototype._removeHelper=function(g,i){if(i)if(i.interval[0]===g[0]&&i.interval[1]===g[1]){if(i.left&&i.right){let n=i.left;for(;n.left;)n=n.left;const r=n.interval;n.interval=i.interval,i.interval=r,this._removeHelper(n.interval,i)}else{let n="left";i.right&&(n="right");const r=i.parentNode;r?(r.left===i?r.left=i[n]:r.right=i[n],i[n]&&(i[n].parentNode=r)):(this.root=i[n],this.root&&(this.root.parentNode=null))}const I=i.parentNode;if(I){let n=this.findMax(I);const r=n.interval[1];for(;n;)n.max===i.interval[1]?(n.max=r,n=n.parentNode):n=!1}}else this._removeHelper(g,i.left),this._removeHelper(g,i.right)};Js.prototype.remove=function(g){return this._removeHelper(g,this.root)};function HX(e){e.sort((I,n)=>n.to-n.from-(I.to-I.from));const g=[[]],i=[new Js];for(let I=0;I=o?this.minNonZero(this.data,I,n):(Io*this.subsetSize&&(r=Math.min(r,this.minNonZero(this.data,o*this.subsetSize,n))),r)}},{key:"getMaxNonZeroInSubset",value:function(i){const I=i[0],n=i[1];let r=Number.MIN_SAFE_INTEGER;if(I===0&&n===this.tileSize)return this.maxNonZeroInTile;const C=Math.ceil(I/this.subsetSize),o=Math.floor((n-1)/this.subsetSize);return C>=o?this.maxNonZero(this.data,I,n):(Io*this.subsetSize&&(r=Math.max(r,this.maxNonZero(this.data,o*this.subsetSize,n))),r)}},{key:"computeSubsetNonZeroMinimums",value:function(){const i=[];for(let I=0;I-this.epsilon||C-this.epsilon||C>n&&(n=C))}i.push(n)}return i}},{key:"getMinNonZeroInTile",value:function(){return Math.min(...this.subsetMinimums)}},{key:"getMaxNonZeroInTile",value:function(){return Math.max(...this.subsetMaximums)}},{key:"minNonZero",value:function(i,I,n){let r=Number.MAX_SAFE_INTEGER;for(let C=I;C-this.epsilon||o-this.epsilon||o>r&&(r=o)}return r}}]),e}();function Pct(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function fIe(e,g){for(var i=0;i-this.epsilon||A-this.epsilon||A>o&&(o=A)}return o}},{key:"mirrorPrecomputedExtrema",value:function(){for(let i=1;i{let g;switch(e&&e.toLowerCase()){case"mean":g=Q3;break;case"sum":g=Xye;break;case"variance":g=z7;break;case"deviation":g=P7;break;default:g=Q3,console.warn("Encountered an unsupported selectedRowsAggregationMode option.")}return g},zB=(e,g)=>e.reduce((i,I)=>i+(Array.isArray(I)&&g?I.length:1),0),z0=e=>{switch(e.type){case"heatmap":case"horizontal-1d-heatmap":case"horizontal-bar":case"horizontal-line":case"horizontal-point":case"vertical-1d-heatmap":case"vertical-bar":case"vertical-line":case"vertical-point":case"horizontal-1d-tiles":case"vertical-1d-tiles":case"2d-tiles":case"horizontal-gene-annotations":case"vertical-gene-annotations":case"horizontal-heatmap":case"vertical-heatmap":case"osm-tiles":case"mapbox-tiles":case"horizontal-multivec":return!0;case"combined":return e.contents.map(i=>z0(i)).reduce(qS,!1);default:return!1}},o4=(e,g,i)=>{let I=g,n=i;return i||(n=g,I=Object.values(e.state.views)[0].uid),e.tiledPlots[I].trackRenderer.getTrackObject(n)},Sve=(e,g)=>e.tiledPlots[g].trackRenderer,Lct=(e,g)=>e.tiledPlots[g];var a4={},pIe=Object.prototype.toString,wve=function(g){var i=pIe.call(g),I=i==="[object Arguments]";return I||(I=i!=="[object Array]"&&g!==null&&typeof g=="object"&&typeof g.length=="number"&&g.length>=0&&pIe.call(g.callee)==="[object Function]"),I},wF,bIe;function Uct(){if(bIe)return wF;bIe=1;var e;if(!Object.keys){var g=Object.prototype.hasOwnProperty,i=Object.prototype.toString,I=wve,n=Object.prototype.propertyIsEnumerable,r=!n.call({toString:null},"toString"),C=n.call(function(){},"prototype"),o=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=function(c){var u=c.constructor;return u&&u.prototype===c},s={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},A=function(){if(typeof window>"u")return!1;for(var c in window)try{if(!s["$"+c]&&g.call(window,c)&&window[c]!==null&&typeof window[c]=="object")try{a(window[c])}catch{return!0}}catch{return!0}return!1}(),l=function(c){if(typeof window>"u"||!A)return a(c);try{return a(c)}catch{return!1}};e=function(u){var d=u!==null&&typeof u=="object",h=i.call(u)==="[object Function]",m=I(u),f=d&&i.call(u)==="[object String]",b=[];if(!d&&!h&&!m)throw new TypeError("Object.keys called on a non-object");var p=C&&h;if(f&&u.length>0&&!g.call(u,0))for(var y=0;y0)for(var Z=0;Z"u"||!PI?Zg:PI(Uint8Array),Yd={"%AggregateError%":typeof AggregateError>"u"?Zg:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?Zg:ArrayBuffer,"%ArrayIteratorPrototype%":zm&&PI?PI([][Symbol.iterator]()):Zg,"%AsyncFromSyncIteratorPrototype%":Zg,"%AsyncFunction%":pf,"%AsyncGenerator%":pf,"%AsyncGeneratorFunction%":pf,"%AsyncIteratorPrototype%":pf,"%Atomics%":typeof Atomics>"u"?Zg:Atomics,"%BigInt%":typeof BigInt>"u"?Zg:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?Zg:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?Zg:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?Zg:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?Zg:Float32Array,"%Float64Array%":typeof Float64Array>"u"?Zg:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?Zg:FinalizationRegistry,"%Function%":Xve,"%GeneratorFunction%":pf,"%Int8Array%":typeof Int8Array>"u"?Zg:Int8Array,"%Int16Array%":typeof Int16Array>"u"?Zg:Int16Array,"%Int32Array%":typeof Int32Array>"u"?Zg:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":zm&&PI?PI(PI([][Symbol.iterator]())):Zg,"%JSON%":typeof JSON=="object"?JSON:Zg,"%Map%":typeof Map>"u"?Zg:Map,"%MapIteratorPrototype%":typeof Map>"u"||!zm||!PI?Zg:PI(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?Zg:Promise,"%Proxy%":typeof Proxy>"u"?Zg:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?Zg:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?Zg:Set,"%SetIteratorPrototype%":typeof Set>"u"||!zm||!PI?Zg:PI(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?Zg:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":zm&&PI?PI(""[Symbol.iterator]()):Zg,"%Symbol%":zm?Symbol:Zg,"%SyntaxError%":Fb,"%ThrowTypeError%":sut,"%TypedArray%":cut,"%TypeError%":Kp,"%Uint8Array%":typeof Uint8Array>"u"?Zg:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?Zg:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?Zg:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?Zg:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?Zg:WeakMap,"%WeakRef%":typeof WeakRef>"u"?Zg:WeakRef,"%WeakSet%":typeof WeakSet>"u"?Zg:WeakSet};if(PI)try{null.error}catch(e){var uut=PI(PI(e));Yd["%Error.prototype%"]=uut}var dut=function e(g){var i;if(g==="%AsyncFunction%")i=RF("async function () {}");else if(g==="%GeneratorFunction%")i=RF("function* () {}");else if(g==="%AsyncGeneratorFunction%")i=RF("async function* () {}");else if(g==="%AsyncGenerator%"){var I=e("%AsyncGeneratorFunction%");I&&(i=I.prototype)}else if(g==="%AsyncIteratorPrototype%"){var n=e("%AsyncGenerator%");n&&PI&&(i=PI(n.prototype))}return Yd[g]=i,i},SIe={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},ew=s4,NX=Il,hut=ew.call(Function.call,Array.prototype.concat),mut=ew.call(Function.apply,Array.prototype.splice),wIe=ew.call(Function.call,String.prototype.replace),kX=ew.call(Function.call,String.prototype.slice),fut=ew.call(Function.call,RegExp.prototype.exec),put=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,but=/\\(\\)?/g,yut=function(g){var i=kX(g,0,1),I=kX(g,-1);if(i==="%"&&I!=="%")throw new Fb("invalid intrinsic syntax, expected closing `%`");if(I==="%"&&i!=="%")throw new Fb("invalid intrinsic syntax, expected opening `%`");var n=[];return wIe(g,put,function(r,C,o,a){n[n.length]=o?wIe(a,but,"$1"):C||r}),n},Zut=function(g,i){var I=g,n;if(NX(SIe,I)&&(n=SIe[I],I="%"+n[0]+"%"),NX(Yd,I)){var r=Yd[I];if(r===pf&&(r=dut(I)),typeof r>"u"&&!i)throw new Kp("intrinsic "+g+" exists, but is not available. Please file an issue!");return{alias:n,name:I,value:r}}throw new Fb("intrinsic "+g+" does not exist!")},Hg=function(g,i){if(typeof g!="string"||g.length===0)throw new Kp("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof i!="boolean")throw new Kp('"allowMissing" argument must be a boolean');if(fut(/^%?[^%]*%?$/,g)===null)throw new Fb("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var I=yut(g),n=I.length>0?I[0]:"",r=Zut("%"+n+"%",i),C=r.name,o=r.value,a=!1,s=r.alias;s&&(n=s[0],mut(I,hut([0,1],s)));for(var A=1,l=!0;A=I.length){var h=kd(o,c);l=!!h,l&&"get"in h&&!("originalValue"in h.get)?o=h.get:o=o[c]}else l=NX(o,c),o=o[c];l&&!a&&(Yd[C]=o)}}return o},Gut=Hg,Rz=Gut("%Object.defineProperty%",!0),Vz=function(){if(Rz)try{return Rz({},"a",{value:1}),!0}catch{return!1}return!1};Vz.hasArrayLengthDefineBug=function(){if(!Vz())return null;try{return Rz([],"length",{value:1}).length!==1}catch{return!0}};var xN=Vz,vut=Hg,gW=vut("%Object.getOwnPropertyDescriptor%",!0);if(gW)try{gW([],"length")}catch{gW=null}var l4=gW,But=xN(),c4=Hg,QG=But&&c4("%Object.defineProperty%",!0);if(QG)try{QG({},"a",{value:1})}catch{QG=!1}var Sut=c4("%SyntaxError%"),Pm=c4("%TypeError%"),RIe=l4,Hve=function(g,i,I){if(!g||typeof g!="object"&&typeof g!="function")throw new Pm("`obj` must be an object or a function`");if(typeof i!="string"&&typeof i!="symbol")throw new Pm("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new Pm("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new Pm("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new Pm("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new Pm("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,r=arguments.length>4?arguments[4]:null,C=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,a=!!RIe&&RIe(g,i);if(QG)QG(g,i,{configurable:C===null&&a?a.configurable:!C,enumerable:n===null&&a?a.enumerable:!n,value:I,writable:r===null&&a?a.writable:!r});else if(o||!n&&!r&&!C)g[i]=I;else throw new Sut("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},wut=Rve,Rut=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",Vut=Object.prototype.toString,Wut=Array.prototype.concat,VIe=Hve,Xut=function(e){return typeof e=="function"&&Vut.call(e)==="[object Function]"},Tve=xN(),Hut=function(e,g,i,I){if(g in e){if(I===!0){if(e[g]===i)return}else if(!Xut(I)||!I())return}Tve?VIe(e,g,i,!0):VIe(e,g,i)},Nve=function(e,g){var i=arguments.length>2?arguments[2]:{},I=wut(g);Rut&&(I=Wut.call(I,Object.getOwnPropertySymbols(g)));for(var n=0;n4294967295||Nut(i)!==i)throw new HIe("`length` must be a positive 32-bit integer");var I=arguments.length>2&&!!arguments[2],n=!0,r=!0;if("length"in g&&XIe){var C=XIe(g,"length");C&&!C.configurable&&(n=!1),C&&!C.writable&&(r=!1)}return(n||r||!I)&&(Tut?WIe(g,"length",i,!0,!0):WIe(g,"length",i)),g};(function(e){var g=s4,i=Hg,I=kut,n=i("%TypeError%"),r=i("%Function.prototype.apply%"),C=i("%Function.prototype.call%"),o=i("%Reflect.apply%",!0)||g.call(C,r),a=i("%Object.defineProperty%",!0),s=i("%Math.max%");if(a)try{a({},"a",{value:1})}catch{a=null}e.exports=function(c){if(typeof c!="function")throw new n("a function is required");var u=o(g,C,arguments);return I(u,1+s(0,c.length-(arguments.length-1)),!0)};var A=function(){return o(g,r,arguments)};a?a(e.exports,"apply",{value:A}):e.exports.apply=A})(kve);var nl=kve.exports,Kve=Hg,Fve=nl,Yut=Fve(Kve("String.prototype.indexOf")),mr=function(g,i){var I=Kve(g,!!i);return typeof I=="function"&&Yut(g,".prototype.")>-1?Fve(I):I},Kut=Rve,Dve=A4(),xve=mr,TIe=Object,Fut=xve("Array.prototype.push"),NIe=xve("Object.prototype.propertyIsEnumerable"),Dut=Dve?Object.getOwnPropertySymbols:null,Eve=function(g,i){if(g==null)throw new TypeError("target must be an object");var I=TIe(g);if(arguments.length===1)return I;for(var n=1;n= 0");if(A>C)throw new i("length is greater than (2**32 - 1)");var l=arguments.length>1?arguments[1]:g,c=[];if(l!==g){if(!a)throw new I("ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]");a(c,l)}return A!==0&&(c.length=A),c},HF}const $ut={},qut=Object.freeze(Object.defineProperty({__proto__:null,default:$ut},Symbol.toStringTag,{value:"Module"})),edt=el(qut);var d4=typeof Map=="function"&&Map.prototype,TF=Object.getOwnPropertyDescriptor&&d4?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,YX=d4&&TF&&typeof TF.get=="function"?TF.get:null,KIe=d4&&Map.prototype.forEach,h4=typeof Set=="function"&&Set.prototype,NF=Object.getOwnPropertyDescriptor&&h4?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,KX=h4&&NF&&typeof NF.get=="function"?NF.get:null,FIe=h4&&Set.prototype.forEach,tdt=typeof WeakMap=="function"&&WeakMap.prototype,jG=tdt?WeakMap.prototype.has:null,gdt=typeof WeakSet=="function"&&WeakSet.prototype,$G=gdt?WeakSet.prototype.has:null,idt=typeof WeakRef=="function"&&WeakRef.prototype,DIe=idt?WeakRef.prototype.deref:null,Idt=Boolean.prototype.valueOf,ndt=Object.prototype.toString,rdt=Function.prototype.toString,Cdt=String.prototype.match,m4=String.prototype.slice,hc=String.prototype.replace,odt=String.prototype.toUpperCase,xIe=String.prototype.toLowerCase,Ove=RegExp.prototype.test,EIe=Array.prototype.concat,Ea=Array.prototype.join,adt=Array.prototype.slice,MIe=Math.floor,Wz=typeof BigInt=="function"?BigInt.prototype.valueOf:null,kF=Object.getOwnPropertySymbols,Xz=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,Db=typeof Symbol=="function"&&typeof Symbol.iterator=="object",xn=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Db||"symbol")?Symbol.toStringTag:null,_ve=Object.prototype.propertyIsEnumerable,zIe=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function PIe(e,g){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||Ove.call(/e/,g))return g;var i=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var I=e<0?-MIe(-e):MIe(e);if(I!==e){var n=String(I),r=m4.call(g,n.length+1);return hc.call(n,i,"$&_")+"."+hc.call(hc.call(r,/([0-9]{3})/g,"$&_"),/_$/,"")}}return hc.call(g,i,"$&_")}var Hz=edt,JIe=Hz.custom,OIe=Qve(JIe)?JIe:null,Lve=function e(g,i,I,n){var r=i||{};if(Jl(r,"quoteStyle")&&r.quoteStyle!=="single"&&r.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Jl(r,"maxStringLength")&&(typeof r.maxStringLength=="number"?r.maxStringLength<0&&r.maxStringLength!==1/0:r.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var C=Jl(r,"customInspect")?r.customInspect:!0;if(typeof C!="boolean"&&C!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Jl(r,"indent")&&r.indent!==null&&r.indent!==" "&&!(parseInt(r.indent,10)===r.indent&&r.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Jl(r,"numericSeparator")&&typeof r.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var o=r.numericSeparator;if(typeof g>"u")return"undefined";if(g===null)return"null";if(typeof g=="boolean")return g?"true":"false";if(typeof g=="string")return $ve(g,r);if(typeof g=="number"){if(g===0)return 1/0/g>0?"0":"-0";var a=String(g);return o?PIe(g,a):a}if(typeof g=="bigint"){var s=String(g)+"n";return o?PIe(g,s):s}var A=typeof r.depth>"u"?5:r.depth;if(typeof I>"u"&&(I=0),I>=A&&A>0&&typeof g=="object")return Tz(g)?"[Array]":"[Object]";var l=wdt(r,I);if(typeof n>"u")n=[];else if(jve(n,g)>=0)return"[Circular]";function c(W,R,H){if(R&&(n=adt.call(n),n.push(R)),H){var k={depth:r.depth};return Jl(r,"quoteStyle")&&(k.quoteStyle=r.quoteStyle),e(W,k,I+1,n)}return e(W,r,I+1,n)}if(typeof g=="function"&&!_Ie(g)){var u=fdt(g),d=mV(g,c);return"[Function"+(u?": "+u:" (anonymous)")+"]"+(d.length>0?" { "+Ea.call(d,", ")+" }":"")}if(Qve(g)){var h=Db?hc.call(String(g),/^(Symbol\(.*\))_[^)]*$/,"$1"):Xz.call(g);return typeof g=="object"&&!Db?CZ(h):h}if(vdt(g)){for(var m="<"+xIe.call(String(g.nodeName)),f=g.attributes||[],b=0;b",m}if(Tz(g)){if(g.length===0)return"[]";var p=mV(g,c);return l&&!Sdt(p)?"["+Nz(p,l)+"]":"[ "+Ea.call(p,", ")+" ]"}if(ldt(g)){var y=mV(g,c);return!("cause"in Error.prototype)&&"cause"in g&&!_ve.call(g,"cause")?"{ ["+String(g)+"] "+Ea.call(EIe.call("[cause]: "+c(g.cause),y),", ")+" }":y.length===0?"["+String(g)+"]":"{ ["+String(g)+"] "+Ea.call(y,", ")+" }"}if(typeof g=="object"&&C){if(OIe&&typeof g[OIe]=="function"&&Hz)return Hz(g,{depth:A-I});if(C!=="symbol"&&typeof g.inspect=="function")return g.inspect()}if(pdt(g)){var Z=[];return KIe&&KIe.call(g,function(W,R){Z.push(c(R,g,!0)+" => "+c(W,g))}),LIe("Map",YX.call(g),Z,l)}if(Zdt(g)){var B=[];return FIe&&FIe.call(g,function(W){B.push(c(W,g))}),LIe("Set",KX.call(g),B,l)}if(bdt(g))return YF("WeakMap");if(Gdt(g))return YF("WeakSet");if(ydt(g))return YF("WeakRef");if(udt(g))return CZ(c(Number(g)));if(hdt(g))return CZ(c(Wz.call(g)));if(ddt(g))return CZ(Idt.call(g));if(cdt(g))return CZ(c(String(g)));if(typeof window<"u"&&g===window)return"{ [object Window] }";if(g===globalThis)return"{ [object globalThis] }";if(!sdt(g)&&!_Ie(g)){var G=mV(g,c),v=zIe?zIe(g)===Object.prototype:g instanceof Object||g.constructor===Object,w=g instanceof Object?"":"null prototype",V=!v&&xn&&Object(g)===g&&xn in g?m4.call(au(g),8,-1):w?"Object":"",S=v||typeof g.constructor!="function"?"":g.constructor.name?g.constructor.name+" ":"",X=S+(V||w?"["+Ea.call(EIe.call([],V||[],w||[]),": ")+"] ":"");return G.length===0?X+"{}":l?X+"{"+Nz(G,l)+"}":X+"{ "+Ea.call(G,", ")+" }"}return String(g)};function Uve(e,g,i){var I=(i.quoteStyle||g)==="double"?'"':"'";return I+e+I}function Adt(e){return hc.call(String(e),/"/g,""")}function Tz(e){return au(e)==="[object Array]"&&(!xn||!(typeof e=="object"&&xn in e))}function sdt(e){return au(e)==="[object Date]"&&(!xn||!(typeof e=="object"&&xn in e))}function _Ie(e){return au(e)==="[object RegExp]"&&(!xn||!(typeof e=="object"&&xn in e))}function ldt(e){return au(e)==="[object Error]"&&(!xn||!(typeof e=="object"&&xn in e))}function cdt(e){return au(e)==="[object String]"&&(!xn||!(typeof e=="object"&&xn in e))}function udt(e){return au(e)==="[object Number]"&&(!xn||!(typeof e=="object"&&xn in e))}function ddt(e){return au(e)==="[object Boolean]"&&(!xn||!(typeof e=="object"&&xn in e))}function Qve(e){if(Db)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!Xz)return!1;try{return Xz.call(e),!0}catch{}return!1}function hdt(e){if(!e||typeof e!="object"||!Wz)return!1;try{return Wz.call(e),!0}catch{}return!1}var mdt=Object.prototype.hasOwnProperty||function(e){return e in this};function Jl(e,g){return mdt.call(e,g)}function au(e){return ndt.call(e)}function fdt(e){if(e.name)return e.name;var g=Cdt.call(rdt.call(e),/^function\s*([\w$]+)/);return g?g[1]:null}function jve(e,g){if(e.indexOf)return e.indexOf(g);for(var i=0,I=e.length;ig.maxStringLength){var i=e.length-g.maxStringLength,I="... "+i+" more character"+(i>1?"s":"");return $ve(m4.call(e,0,g.maxStringLength),g)+I}var n=hc.call(hc.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Bdt);return Uve(n,"single",g)}function Bdt(e){var g=e.charCodeAt(0),i={8:"b",9:"t",10:"n",12:"f",13:"r"}[g];return i?"\\"+i:"\\x"+(g<16?"0":"")+odt.call(g.toString(16))}function CZ(e){return"Object("+e+")"}function YF(e){return e+" { ? }"}function LIe(e,g,i,I){var n=I?Nz(i,I):Ea.call(i,", ");return e+" ("+g+") {"+n+"}"}function Sdt(e){for(var g=0;g=0)return!1;return!0}function wdt(e,g){var i;if(e.indent===" ")i=" ";else if(typeof e.indent=="number"&&e.indent>0)i=Ea.call(Array(e.indent+1)," ");else return null;return{base:i,prev:Ea.call(Array(g+1),i)}}function Nz(e,g){if(e.length===0)return"";var i=` +`+g.prev+g.base;return i+Ea.call(e,","+i)+` +`+g.prev}function mV(e,g){var i=Tz(e),I=[];if(i){I.length=e.length;for(var n=0;n"u")return"Undefined";if(typeof g=="function"||typeof g=="object")return"Object";if(typeof g=="number")return"Number";if(typeof g=="boolean")return"Boolean";if(typeof g=="string")return"String"}),FF}var DF,jIe;function bn(){if(jIe)return DF;jIe=1;var e=Rdt();return DF=function(i){return typeof i=="symbol"?"Symbol":typeof i=="bigint"?"BigInt":e(i)},DF}var Vdt=Hg,$Ie=Vdt("%TypeError%"),Wdt=Lve,Xdt=Au(),Hdt=bn(),tw=function(g,i){if(Hdt(g)!=="Object")throw new $Ie("Assertion failed: Type(O) is not Object");if(!Xdt(i))throw new $Ie("Assertion failed: IsPropertyKey(P) is not true, got "+Wdt(i));return g[i]},xF,qIe;function qve(){if(qIe)return xF;qIe=1;var e=Hg,g=e("%Array%"),i=!g.isArray&&mr("Object.prototype.toString");return xF=g.isArray||function(n){return i(n)==="[object Array]"},xF}var EF,ene;function f4(){return ene||(ene=1,EF=qve()),EF}var fV={exports:{}},MF,tne;function Tdt(){return tne||(tne=1,MF=Hg),MF}var zF,gne;function p4(){if(gne)return zF;gne=1;var e=Hg,g=Il,i=e("%TypeError%");return zF=function(n,r){if(n.Type(r)!=="Object")return!1;var C={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var o in r)if(g(r,o)&&!C[o])return!1;if(n.IsDataDescriptor(r)&&n.IsAccessorDescriptor(r))throw new i("Property Descriptors may not be both accessor and data descriptors");return!0},zF}var PF,ine;function eBe(){if(ine)return PF;ine=1;var e=xN,g=Hg,i=e()&&g("%Object.defineProperty%",!0),I=e.hasArrayLengthDefineBug(),n=I&&qve(),r=mr,C=r("Object.prototype.propertyIsEnumerable");return PF=function(a,s,A,l,c,u){if(!i){if(!a(u)||!u["[[Configurable]]"]||!u["[[Writable]]"]||c in l&&C(l,c)!==!!u["[[Enumerable]]"])return!1;var d=u["[[Value]]"];return l[c]=d,s(l[c],d)}return I&&c==="length"&&"[[Value]]"in u&&n(l)&&l.length!==u["[[Value]]"]?(l.length=u["[[Value]]"],l.length===u["[[Value]]"]):(i(l,c,A(u)),!0)},PF}var JF,Ine;function Ndt(){if(Ine)return JF;Ine=1;var e=Il;return JF=function(i){return e(i,"[[StartIndex]]")&&e(i,"[[EndIndex]]")&&i["[[StartIndex]]"]>=0&&i["[[EndIndex]]"]>=i["[[StartIndex]]"]&&String(parseInt(i["[[StartIndex]]"],10))===String(i["[[StartIndex]]"])&&String(parseInt(i["[[EndIndex]]"],10))===String(i["[[EndIndex]]"])},JF}var OF,nne;function MN(){if(nne)return OF;nne=1;var e=Hg,g=e("%TypeError%"),i=e("%SyntaxError%"),I=Il,n=u4(),r=Ndt(),C={"Property Descriptor":function(a){var s={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};if(!a)return!1;for(var A in a)if(I(a,A)&&!s[A])return!1;var l=I(a,"[[Value]]"),c=I(a,"[[Get]]")||I(a,"[[Set]]");if(l&&c)throw new g("Property Descriptors may not be both accessor and data descriptors");return!0},"Match Record":r,"Iterator Record":function(a){return I(a,"[[Iterator]]")&&I(a,"[[NextMethod]]")&&I(a,"[[Done]]")},"PromiseCapability Record":function(a){return!!a&&I(a,"[[Resolve]]")&&typeof a["[[Resolve]]"]=="function"&&I(a,"[[Reject]]")&&typeof a["[[Reject]]"]=="function"&&I(a,"[[Promise]]")&&a["[[Promise]]"]&&typeof a["[[Promise]]"].then=="function"},"AsyncGeneratorRequest Record":function(a){return!!a&&I(a,"[[Completion]]")&&I(a,"[[Capability]]")&&C["PromiseCapability Record"](a["[[Capability]]"])},"RegExp Record":function(a){return a&&I(a,"[[IgnoreCase]]")&&typeof a["[[IgnoreCase]]"]=="boolean"&&I(a,"[[Multiline]]")&&typeof a["[[Multiline]]"]=="boolean"&&I(a,"[[DotAll]]")&&typeof a["[[DotAll]]"]=="boolean"&&I(a,"[[Unicode]]")&&typeof a["[[Unicode]]"]=="boolean"&&I(a,"[[CapturingGroupsCount]]")&&typeof a["[[CapturingGroupsCount]]"]=="number"&&n(a["[[CapturingGroupsCount]]"])&&a["[[CapturingGroupsCount]]"]>=0}};return OF=function(a,s,A,l){var c=C[s];if(typeof c!="function")throw new i("unknown record type: "+s);if(a(l)!=="Object"||!c(l))throw new g(A+" must be a "+s)},OF}var _F,rne;function kdt(){return rne||(rne=1,_F=function(g){if(typeof g>"u")return g;var i={};return"[[Value]]"in g&&(i.value=g["[[Value]]"]),"[[Writable]]"in g&&(i.writable=!!g["[[Writable]]"]),"[[Get]]"in g&&(i.get=g["[[Get]]"]),"[[Set]]"in g&&(i.set=g["[[Set]]"]),"[[Enumerable]]"in g&&(i.enumerable=!!g["[[Enumerable]]"]),"[[Configurable]]"in g&&(i.configurable=!!g["[[Configurable]]"]),i}),_F}var LF,Cne;function tBe(){if(Cne)return LF;Cne=1;var e=MN(),g=kdt(),i=bn();return LF=function(n){return typeof n<"u"&&e(i,"Property Descriptor","Desc",n),g(n)},LF}var UF,one;function zN(){if(one)return UF;one=1;var e=Il,g=bn(),i=MN();return UF=function(n){return!(typeof n>"u"||(i(g,"Property Descriptor","Desc",n),!e(n,"[[Get]]")&&!e(n,"[[Set]]")))},UF}var QF,ane;function PN(){if(ane)return QF;ane=1;var e=Il,g=bn(),i=MN();return QF=function(n){return!(typeof n>"u"||(i(g,"Property Descriptor","Desc",n),!e(n,"[[Value]]")&&!e(n,"[[Writable]]")))},QF}var jF,Ane;function b4(){if(Ane)return jF;Ane=1;var e=EN;return jF=function(i,I){return i===I?i===0?1/i===1/I:!0:e(i)&&e(I)},jF}var gBe=function(g){return!!g},iBe=Function.prototype.toString,rp=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,kz,iW;if(typeof rp=="function"&&typeof Object.defineProperty=="function")try{kz=Object.defineProperty({},"length",{get:function(){throw iW}}),iW={},rp(function(){throw 42},null,kz)}catch(e){e!==iW&&(rp=null)}else rp=null;var Ydt=/^\s*class\b/,Yz=function(g){try{var i=iBe.call(g);return Ydt.test(i)}catch{return!1}},$F=function(g){try{return Yz(g)?!1:(iBe.call(g),!0)}catch{return!1}},IW=Object.prototype.toString,Kdt="[object Object]",Fdt="[object Function]",Ddt="[object GeneratorFunction]",xdt="[object HTMLAllCollection]",Edt="[object HTML document.all class]",Mdt="[object HTMLCollection]",zdt=typeof Symbol=="function"&&!!Symbol.toStringTag,Pdt=!(0 in[,]),Kz=function(){return!1};if(typeof document=="object"){var Jdt=document.all;IW.call(Jdt)===IW.call(document.all)&&(Kz=function(g){if((Pdt||!g)&&(typeof g>"u"||typeof g=="object"))try{var i=IW.call(g);return(i===xdt||i===Edt||i===Mdt||i===Kdt)&&g("")==null}catch{}return!1})}var y4=rp?function(g){if(Kz(g))return!0;if(!g||typeof g!="function"&&typeof g!="object")return!1;try{rp(g,null,kz)}catch(i){if(i!==iW)return!1}return!Yz(g)&&$F(g)}:function(g){if(Kz(g))return!0;if(!g||typeof g!="function"&&typeof g!="object")return!1;if(zdt)return $F(g);if(Yz(g))return!1;var i=IW.call(g);return i!==Fdt&&i!==Ddt&&!/^\[object HTML/.test(i)?!1:$F(g)},Z4=y4,qF,sne;function IBe(){if(sne)return qF;sne=1;var e=Il,g=Hg,i=g("%TypeError%"),I=bn(),n=gBe,r=Z4;return qF=function(o){if(I(o)!=="Object")throw new i("ToPropertyDescriptor requires an object");var a={};if(e(o,"enumerable")&&(a["[[Enumerable]]"]=n(o.enumerable)),e(o,"configurable")&&(a["[[Configurable]]"]=n(o.configurable)),e(o,"value")&&(a["[[Value]]"]=o.value),e(o,"writable")&&(a["[[Writable]]"]=n(o.writable)),e(o,"get")){var s=o.get;if(typeof s<"u"&&!r(s))throw new i("getter must be a function");a["[[Get]]"]=s}if(e(o,"set")){var A=o.set;if(typeof A<"u"&&!r(A))throw new i("setter must be a function");a["[[Set]]"]=A}if((e(a,"[[Get]]")||e(a,"[[Set]]"))&&(e(a,"[[Value]]")||e(a,"[[Writable]]")))throw new i("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return a},qF}var eD,lne;function Odt(){if(lne)return eD;lne=1;var e=Hg,g=e("%TypeError%"),i=p4(),I=eBe(),n=tBe(),r=zN(),C=PN(),o=Au(),a=b4(),s=IBe(),A=bn();return eD=function(c,u,d){if(A(c)!=="Object")throw new g("Assertion failed: Type(O) is not Object");if(!o(u))throw new g("Assertion failed: IsPropertyKey(P) is not true");var h=i({Type:A,IsDataDescriptor:C,IsAccessorDescriptor:r},d)?d:s(d);if(!i({Type:A,IsDataDescriptor:C,IsAccessorDescriptor:r},h))throw new g("Assertion failed: Desc is not a valid Property Descriptor");return I(C,a,n,c,u,h)},eD}var cne;function _dt(){if(cne)return fV.exports;cne=1;var e=Tdt(),g=e("%Reflect.construct%",!0),i=Odt();try{i({},"",{"[[Get]]":function(){}})}catch{i=null}if(i&&g){var I={},n={};i(n,"length",{"[[Get]]":function(){throw I},"[[Enumerable]]":!0}),fV.exports=function(C){try{g(C,n)}catch(o){return o===I}}}else fV.exports=function(C){return typeof C=="function"&&!!C.prototype};return fV.exports}var nBe=Hg,une=nBe("%Symbol.species%",!0),dne=nBe("%TypeError%"),hne=jut(),mne=tw,Ldt=f4(),Udt=_dt(),Qdt=bn(),jdt=u4(),rBe=function(g,i){if(!jdt(i)||i<0)throw new dne("Assertion failed: length must be an integer >= 0");var I=Ldt(g);if(!I)return hne(i);var n=mne(g,"constructor");if(une&&Qdt(n)==="Object"&&(n=mne(n,une),n===null&&(n=void 0)),typeof n>"u")return hne(i);if(!Udt(n))throw new dne("C must be a constructor");return new n(i)},CBe=Number.MAX_SAFE_INTEGER||9007199254740991,tD,fne;function oBe(){if(fne)return tD;fne=1;var e=Hg,g=mr,i=e("%TypeError%"),I=f4(),n=e("%Reflect.apply%",!0)||g("Function.prototype.apply");return tD=function(C,o){var a=arguments.length>2?arguments[2]:[];if(!I(a))throw new i("Assertion failed: optional `argumentsList`, if provided, must be a List");return n(C,o,a)},tD}var gD,pne;function aBe(){return pne||(pne=1,gD=function(g){return g===null||typeof g!="function"&&typeof g!="object"}),gD}var iD,bne;function $dt(){if(bne)return iD;bne=1;var e=Hg,g=e("%Object.preventExtensions%",!0),i=e("%Object.isExtensible%",!0),I=aBe();return iD=g?function(r){return!I(r)&&i(r)}:function(r){return!I(r)},iD}var ID,yne;function qdt(){return yne||(yne=1,ID=function(g,i){return!!i&&typeof i=="object"&&"[[Enumerable]]"in i&&"[[Configurable]]"in i&&(g.IsAccessorDescriptor(i)||g.IsDataDescriptor(i))}),ID}var nD,Zne;function eht(){if(Zne)return nD;Zne=1;var e=MN(),g=zN(),i=PN(),I=bn();return nD=function(r){return typeof r>"u"?!1:(e(I,"Property Descriptor","Desc",r),!g(r)&&!i(r))},nD}var rD,Gne;function tht(){if(Gne)return rD;Gne=1;var e=Hg,g=e("%TypeError%"),i=eBe(),I=qdt(),n=p4(),r=tBe(),C=zN(),o=PN(),a=eht(),s=Au(),A=b4(),l=bn();return rD=function(u,d,h,m,f){var b=l(u);if(b!=="Undefined"&&b!=="Object")throw new g("Assertion failed: O must be undefined or an Object");if(!s(d))throw new g("Assertion failed: P must be a Property Key");if(l(h)!=="Boolean")throw new g("Assertion failed: extensible must be a Boolean");if(!n({Type:l,IsDataDescriptor:o,IsAccessorDescriptor:C},m))throw new g("Assertion failed: Desc must be a Property Descriptor");if(l(f)!=="Undefined"&&!n({Type:l,IsDataDescriptor:o,IsAccessorDescriptor:C},f))throw new g("Assertion failed: current must be a Property Descriptor, or undefined");if(l(f)==="Undefined")return h?b==="Undefined"?!0:C(m)?i(o,A,r,u,d,m):i(o,A,r,u,d,{"[[Configurable]]":!!m["[[Configurable]]"],"[[Enumerable]]":!!m["[[Enumerable]]"],"[[Value]]":m["[[Value]]"],"[[Writable]]":!!m["[[Writable]]"]}):!1;if(!I({IsAccessorDescriptor:C,IsDataDescriptor:o},f))throw new g("`current`, when present, must be a fully populated and valid Property Descriptor");if(!f["[[Configurable]]"]){if("[[Configurable]]"in m&&m["[[Configurable]]"]||"[[Enumerable]]"in m&&!A(m["[[Enumerable]]"],f["[[Enumerable]]"])||!a(m)&&!A(C(m),C(f)))return!1;if(C(f)){if("[[Get]]"in m&&!A(m["[[Get]]"],f["[[Get]]"])||"[[Set]]"in m&&!A(m["[[Set]]"],f["[[Set]]"]))return!1}else if(!f["[[Writable]]"]&&("[[Writable]]"in m&&m["[[Writable]]"]||"[[Value]]"in m&&!A(m["[[Value]]"],f["[[Value]]"])))return!1}if(b!=="Undefined"){var p,y;return o(f)&&C(m)?(p=("[[Configurable]]"in m?m:f)["[[Configurable]]"],y=("[[Enumerable]]"in m?m:f)["[[Enumerable]]"],i(o,A,r,u,d,{"[[Configurable]]":!!p,"[[Enumerable]]":!!y,"[[Get]]":("[[Get]]"in m?m:f)["[[Get]]"],"[[Set]]":("[[Set]]"in m?m:f)["[[Set]]"]})):C(f)&&o(m)?(p=("[[Configurable]]"in m?m:f)["[[Configurable]]"],y=("[[Enumerable]]"in m?m:f)["[[Enumerable]]"],i(o,A,r,u,d,{"[[Configurable]]":!!p,"[[Enumerable]]":!!y,"[[Value]]":("[[Value]]"in m?m:f)["[[Value]]"],"[[Writable]]":!!("[[Writable]]"in m?m:f)["[[Writable]]"]})):i(o,A,r,u,d,m)}return!0},rD}var CD,vne;function ght(){if(vne)return CD;vne=1;var e=Hg,g=l4,i=e("%SyntaxError%"),I=e("%TypeError%"),n=p4(),r=zN(),C=PN(),o=$dt(),a=Au(),s=IBe(),A=b4(),l=bn(),c=tht();return CD=function(d,h,m){if(l(d)!=="Object")throw new I("Assertion failed: O must be an Object");if(!a(h))throw new I("Assertion failed: P must be a Property Key");if(!n({Type:l,IsDataDescriptor:C,IsAccessorDescriptor:r},m))throw new I("Assertion failed: Desc must be a Property Descriptor");if(!g){if(r(m))throw new i("This environment does not support accessor property descriptors.");var f=!(h in d)&&m["[[Writable]]"]&&m["[[Enumerable]]"]&&m["[[Configurable]]"]&&"[[Value]]"in m,b=h in d&&(!("[[Configurable]]"in m)||m["[[Configurable]]"])&&(!("[[Enumerable]]"in m)||m["[[Enumerable]]"])&&(!("[[Writable]]"in m)||m["[[Writable]]"])&&"[[Value]]"in m;if(f||b)return d[h]=m["[[Value]]"],A(d[h],m["[[Value]]"]);throw new i("This environment does not support defining non-writable, non-enumerable, or non-configurable properties")}var p=g(d,h),y=p&&s(p),Z=o(d);return c(d,h,Z,m,y)},CD}var oD,Bne;function iht(){if(Bne)return oD;Bne=1;var e=Hg,g=e("%TypeError%"),i=Au(),I=ght(),n=bn();return oD=function(C,o,a){if(n(C)!=="Object")throw new g("Assertion failed: Type(O) is not Object");if(!i(o))throw new g("Assertion failed: IsPropertyKey(P) is not true");var s={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Value]]":a,"[[Writable]]":!0};return I(C,o,s)},oD}var aD,Sne;function ABe(){if(Sne)return aD;Sne=1;var e=Hg,g=e("%TypeError%"),i=iht(),I=Au(),n=bn();return aD=function(C,o,a){if(n(C)!=="Object")throw new g("Assertion failed: Type(O) is not Object");if(!I(o))throw new g("Assertion failed: IsPropertyKey(P) is not true");var s=i(C,o,a);if(!s)throw new g("unable to create data property")},aD}var AD,wne;function sBe(){if(wne)return AD;wne=1;var e=Hg,g=e("%TypeError%"),i=Au(),I=bn();return AD=function(r,C){if(I(r)!=="Object")throw new g("Assertion failed: `O` must be an Object");if(!i(C))throw new g("Assertion failed: `P` must be a Property Key");return C in r},AD}var sD,Rne;function Iht(){return Rne||(Rne=1,sD=function(g){return g===null||typeof g!="function"&&typeof g!="object"}),sD}var nht=A4,gw=function(){return nht()&&!!Symbol.toStringTag},lD,Vne;function rht(){if(Vne)return lD;Vne=1;var e=Date.prototype.getDay,g=function(C){try{return e.call(C),!0}catch{return!1}},i=Object.prototype.toString,I="[object Date]",n=gw();return lD=function(C){return typeof C!="object"||C===null?!1:n?g(C):i.call(C)===I},lD}var pV={exports:{}},Wne;function Cht(){if(Wne)return pV.exports;Wne=1;var e=Object.prototype.toString,g=Vve();if(g){var i=Symbol.prototype.toString,I=/^Symbol\(.*\)$/,n=function(C){return typeof C.valueOf()!="symbol"?!1:I.test(i.call(C))};pV.exports=function(C){if(typeof C=="symbol")return!0;if(e.call(C)!=="[object Symbol]")return!1;try{return n(C)}catch{return!1}}}else pV.exports=function(C){return!1};return pV.exports}var cD,Xne;function oht(){if(Xne)return cD;Xne=1;var e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol",g=Iht(),i=y4,I=rht(),n=Cht(),r=function(a,s){if(typeof a>"u"||a===null)throw new TypeError("Cannot call method on "+a);if(typeof s!="string"||s!=="number"&&s!=="string")throw new TypeError('hint must be "string" or "number"');var A=s==="string"?["toString","valueOf"]:["valueOf","toString"],l,c,u;for(u=0;u1&&(arguments[1]===String?s="string":arguments[1]===Number&&(s="number"));var A;if(e&&(Symbol.toPrimitive?A=C(a,Symbol.toPrimitive):n(a)&&(A=Symbol.prototype.valueOf)),typeof A<"u"){var l=A.call(a,s);if(g(l))return l;throw new TypeError("unable to convert exotic object to primitive")}return s==="default"&&(I(a)||n(a))&&(s="string"),r(a,s==="default"?"number":s)},cD}var uD,Hne;function aht(){if(Hne)return uD;Hne=1;var e=oht();return uD=function(i){return arguments.length>1?e(i,arguments[1]):e(i)},uD}var Fz=mr,lBe=gw(),cBe,uBe,Dz,xz;if(lBe){cBe=Fz("Object.prototype.hasOwnProperty"),uBe=Fz("RegExp.prototype.exec"),Dz={};var dD=function(){throw Dz};xz={toString:dD,valueOf:dD},typeof Symbol.toPrimitive=="symbol"&&(xz[Symbol.toPrimitive]=dD)}var Aht=Fz("Object.prototype.toString"),sht=Object.getOwnPropertyDescriptor,lht="[object RegExp]",dBe=lBe?function(g){if(!g||typeof g!="object")return!1;var i=sht(g,"lastIndex"),I=i&&cBe(i,"value");if(!I)return!1;try{uBe(g,xz)}catch(n){return n===Dz}}:function(g){return!g||typeof g!="object"&&typeof g!="function"?!1:Aht(g)===lht},hD,Tne;function cht(){if(Tne)return hD;Tne=1;var e=mr,g=Hg,i=dBe,I=e("RegExp.prototype.exec"),n=g("%TypeError%");return hD=function(C){if(!i(C))throw new n("`regex` must be a RegExp");return function(a){return I(C,a)!==null}},hD}var uht=Hg,dht=uht("%TypeError%"),hht=function(g,i){if(g==null)throw new dht(i||"Cannot call method on "+g);return g},J0=hht,hBe=Hg,mht=hBe("%String%"),fht=hBe("%TypeError%"),G4=function(g){if(typeof g=="symbol")throw new fht("Cannot convert a Symbol value to a string");return mht(g)},pht=J0,bht=G4,yht=mr,Nne=yht("String.prototype.replace"),mBe=/^\s$/.test("᠎"),Zht=mBe?/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/:/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,Ght=mBe?/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/:/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/,fBe=function(){var g=bht(pht(this));return Nne(Nne(g,Zht,""),Ght,"")},vht=fBe,kne="​",Jm="᠎",pBe=function(){return String.prototype.trim&&kne.trim()===kne&&Jm.trim()===Jm&&("_"+Jm).trim()==="_"+Jm&&(Jm+"_").trim()===Jm+"_"?String.prototype.trim:vht},Bht=Mn,Sht=pBe,wht=function(){var g=Sht();return Bht(String.prototype,{trim:g},{trim:function(){return String.prototype.trim!==g}}),g},Rht=nl,Vht=Mn,Wht=J0,Xht=fBe,bBe=pBe,Hht=wht,Tht=Rht(bBe()),yBe=function(g){return Wht(g),Tht(g)};Vht(yBe,{getPolyfill:bBe,implementation:Xht,shim:Hht});var ZBe=yBe,mD,Yne;function Nht(){if(Yne)return mD;Yne=1;var e=Hg,g=e("%Number%"),i=e("%RegExp%"),I=e("%TypeError%"),n=e("%parseInt%"),r=mr,C=cht(),o=r("String.prototype.slice"),a=C(/^0b[01]+$/i),s=C(/^0o[0-7]+$/i),A=C(/^[-+]0x[0-9a-f]+$/i),l=["…","​","￾"].join(""),c=new i("["+l+"]","g"),u=C(c),d=ZBe,h=bn();return mD=function m(f){if(h(f)!=="String")throw new I("Assertion failed: `argument` is not a String");if(a(f))return g(n(o(f,2),2));if(s(f))return g(n(o(f,2),8));if(u(f)||A(f))return NaN;var b=d(f);return b!==f?m(b):g(f)},mD}var GBe=Hg,Kne=GBe("%TypeError%"),Fne=GBe("%Number%"),kht=aBe(),Yht=aht(),Kht=Nht(),Fht=function(g){var i=kht(g)?g:Yht(g,Fne);if(typeof i=="symbol")throw new Kne("Cannot convert a Symbol value to a number");if(typeof i=="bigint")throw new Kne("Conversion from 'BigInt' to 'number' is not allowed.");return typeof i=="string"?Kht(i):Fne(i)},Dht=bn(),xht=Math.floor,Eht=function(g){return Dht(g)==="BigInt"?g:xht(g)},Mht=Hg,Dne=Eht,zht=Mht("%TypeError%"),Pht=function(g){if(typeof g!="number"&&typeof g!="bigint")throw new zht("argument must be a Number or a BigInt");var i=g<0?-Dne(-g):Dne(g);return i===0?0:i},Jht=Fht,Oht=Pht,_ht=EN,Lht=Jve,vBe=function(g){var i=Jht(g);return _ht(i)||i===0?0:Lht(i)?Oht(i):i},xne=CBe,Uht=vBe,BBe=function(g){var i=Uht(g);return i<=0?0:i>xne?xne:i},fD,Ene;function SBe(){if(Ene)return fD;Ene=1;var e=Hg,g=e("%TypeError%"),i=tw,I=BBe,n=bn();return fD=function(C){if(n(C)!=="Object")throw new g("Assertion failed: `obj` must be an Object");return I(i(C,"length"))},fD}var Qht=Hg,Mne=Qht("%TypeError%"),jht=CBe,$ht=oBe(),qht=ABe(),emt=tw,tmt=sBe(),gmt=f4(),imt=SBe(),zne=G4,Imt=function e(g,i,I,n,r){var C;arguments.length>5&&(C=arguments[5]);for(var o=n,a=0;a0&&(c=gmt(l)),c){var u=imt(l);o=e(g,l,u,o,r-1)}else{if(o>=jht)throw new Mne("index too large");qht(g,zne(o),l),o+=1}}a+=1}return o},nmt=Hg,rmt=nmt("%Object%"),Cmt=J0,wBe=function(g){return Cmt(g),rmt(g)},omt=rBe,amt=Imt,Amt=tw,smt=vBe,lmt=BBe,cmt=wBe,RBe=function(){var g=cmt(this),i=lmt(Amt(g,"length")),I=1;arguments.length>0&&typeof arguments[0]<"u"&&(I=smt(arguments[0]));var n=omt(g,0);return amt(n,g,i,0,I),n},umt=RBe,VBe=function(){return Array.prototype.flat||umt},pD,Pne;function dmt(){if(Pne)return pD;Pne=1;var e=Il,g=typeof Symbol=="function"&&typeof Symbol.unscopables=="symbol",i=g&&Array.prototype[Symbol.unscopables],I=TypeError;return pD=function(r){if(typeof r!="string"||!r)throw new I("method must be a non-empty string");if(!e(Array.prototype,r))throw new I("method must be on Array.prototype");g&&(i[r]=!0)},pD}var bD,Jne;function hmt(){if(Jne)return bD;Jne=1;var e=Mn,g=dmt(),i=VBe;return bD=function(){var n=i();return e(Array.prototype,{flat:n},{flat:function(){return Array.prototype.flat!==n}}),g("flat"),n},bD}var mmt=Mn,fmt=nl,pmt=RBe,WBe=VBe,bmt=WBe(),ymt=hmt(),XBe=fmt(bmt);mmt(XBe,{getPolyfill:WBe,implementation:pmt,shim:ymt});var iw=XBe,One={}.hasOwnProperty,yD=Function.prototype.call,O0=yD.bind?yD.bind(One):function(e,g){return yD.call(One,e,g)},Iw={},Ez={exports:{}},_ne=function(e){return e!==e},HBe=function(g,i){return g===0&&i===0?1/g===1/i:!!(g===i||_ne(g)&&_ne(i))},Zmt=HBe,TBe=function(){return typeof Object.is=="function"?Object.is:Zmt},Gmt=TBe,vmt=Mn,Bmt=function(){var g=Gmt();return vmt(Object,{is:g},{is:function(){return Object.is!==g}}),g},Smt=Mn,wmt=nl,Rmt=HBe,NBe=TBe,Vmt=Bmt,kBe=wmt(NBe(),Object);Smt(kBe,{getPolyfill:NBe,implementation:Rmt,shim:Vmt});var v4=kBe;(function(e,g){Object.defineProperty(g,"__esModule",{value:!0}),g.default=C;var i=n(v4),I=n(O0);function n(o){return o&&o.__esModule?o:{default:o}}function r(o){"@babel/helpers - typeof";return r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(o)}function C(o,a){if((0,i.default)(o,a))return!0;if(!o||!a||r(o)!=="object"||r(a)!=="object")return!1;var s=Object.keys(o),A=Object.keys(a);if(s.length!==A.length)return!1;s.sort(),A.sort();for(var l=0;l"u"||typeof g=="object"))try{var i=ZD(g);return(i===eft||i===qmt)&&g("")==null}catch{}return!1})}var LBe=function(){if(_Be(this)||!Qmt(this)&&!PBe(this))throw new TypeError("Function.prototype.name sham getter called on non-function");if(Lmt&&_mt(this,"name"))return this.name;if(this===tft)return"";var g=JBe(this),i=OBe(g,jmt),I=i&&i[1];return I},ift=LBe,UBe=function(){return ift},Ift=Mn.supportsDescriptors,nft=zBe(),rft=UBe,Une=Object.defineProperty,Cft=TypeError,oft=function(){var g=rft();if(nft)return g;if(!Ift)throw new Cft("Shimming Function.prototype.name support requires ES5 property descriptor support.");var i=Function.prototype;return Une(i,"name",{configurable:!0,enumerable:!1,get:function(){var I=g.call(this);return this!==i&&Une(this,"name",{configurable:!0,enumerable:!1,value:I,writable:!1}),I}}),g},aft=Mn,Aft=nl,QBe=LBe,sft=UBe,lft=oft,jBe=Aft(QBe);aft(jBe,{getPolyfill:sft,implementation:QBe,shim:lft});var S4=jBe,$Be={},qBe={};Object.defineProperty(qBe,"__esModule",{value:!0});var JN={},_0={},FX=$e&&$e.__assign||function(){return FX=Object.assign||function(e){for(var g,i=1,I=arguments.length;i0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"childNodes",{get:function(){return this.children},set:function(i){this.children=i},enumerable:!1,configurable:!0}),g}(w4);dg.NodeWithChildren=_N;var iSe=function(e){su(g,e);function g(){var i=e!==null&&e.apply(this,arguments)||this;return i.type=Mr.ElementType.CDATA,i}return Object.defineProperty(g.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),g}(_N);dg.CDATA=iSe;var ISe=function(e){su(g,e);function g(){var i=e!==null&&e.apply(this,arguments)||this;return i.type=Mr.ElementType.Root,i}return Object.defineProperty(g.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),g}(_N);dg.Document=ISe;var nSe=function(e){su(g,e);function g(i,I,n,r){n===void 0&&(n=[]),r===void 0&&(r=i==="script"?Mr.ElementType.Script:i==="style"?Mr.ElementType.Style:Mr.ElementType.Tag);var C=e.call(this,n)||this;return C.name=i,C.attribs=I,C.type=r,C}return Object.defineProperty(g.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"tagName",{get:function(){return this.name},set:function(i){this.name=i},enumerable:!1,configurable:!0}),Object.defineProperty(g.prototype,"attributes",{get:function(){var i=this;return Object.keys(this.attribs).map(function(I){var n,r;return{name:I,value:i.attribs[I],namespace:(n=i["x-attribsNamespace"])===null||n===void 0?void 0:n[I],prefix:(r=i["x-attribsPrefix"])===null||r===void 0?void 0:r[I]}})},enumerable:!1,configurable:!0}),g}(_N);dg.Element=nSe;function rSe(e){return(0,Mr.isTag)(e)}dg.isTag=rSe;function CSe(e){return e.type===Mr.ElementType.CDATA}dg.isCDATA=CSe;function oSe(e){return e.type===Mr.ElementType.Text}dg.isText=oSe;function aSe(e){return e.type===Mr.ElementType.Comment}dg.isComment=aSe;function ASe(e){return e.type===Mr.ElementType.Directive}dg.isDirective=ASe;function sSe(e){return e.type===Mr.ElementType.Root}dg.isDocument=sSe;function dft(e){return Object.prototype.hasOwnProperty.call(e,"children")}dg.hasChildren=dft;function R4(e,g){g===void 0&&(g=!1);var i;if(oSe(e))i=new eSe(e.data);else if(aSe(e))i=new tSe(e.data);else if(rSe(e)){var I=g?GD(e.children):[],n=new nSe(e.name,ev({},e.attribs),I);I.forEach(function(a){return a.parent=n}),e.namespace!=null&&(n.namespace=e.namespace),e["x-attribsNamespace"]&&(n["x-attribsNamespace"]=ev({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(n["x-attribsPrefix"]=ev({},e["x-attribsPrefix"])),i=n}else if(CSe(e)){var I=g?GD(e.children):[],r=new iSe(I);I.forEach(function(s){return s.parent=r}),i=r}else if(sSe(e)){var I=g?GD(e.children):[],C=new ISe(I);I.forEach(function(s){return s.parent=C}),e["x-mode"]&&(C["x-mode"]=e["x-mode"]),i=C}else if(ASe(e)){var o=new gSe(e.name,e.data);e["x-name"]!=null&&(o["x-name"]=e["x-name"],o["x-publicId"]=e["x-publicId"],o["x-systemId"]=e["x-systemId"]),i=o}else throw new Error("Not implemented yet: ".concat(e.type));return i.startIndex=e.startIndex,i.endIndex=e.endIndex,e.sourceCodeLocation!=null&&(i.sourceCodeLocation=e.sourceCodeLocation),i}dg.cloneNode=R4;function GD(e){for(var g=e.map(function(I){return R4(I,!0)}),i=1;i䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(function(e){return e.charCodeAt(0)}));var W4={};Object.defineProperty(W4,"__esModule",{value:!0});W4.default=new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(function(e){return e.charCodeAt(0)}));var Mz={};(function(e){var g;Object.defineProperty(e,"__esModule",{value:!0}),e.replaceCodePoint=e.fromCodePoint=void 0;var i=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);e.fromCodePoint=(g=String.fromCodePoint)!==null&&g!==void 0?g:function(r){var C="";return r>65535&&(r-=65536,C+=String.fromCharCode(r>>>10&1023|55296),r=56320|r&1023),C+=String.fromCharCode(r),C};function I(r){var C;return r>=55296&&r<=57343||r>1114111?65533:(C=i.get(r))!==null&&C!==void 0?C:r}e.replaceCodePoint=I;function n(r){return(0,e.fromCodePoint)(I(r))}e.default=n})(Mz);(function(e){var g=$e&&$e.__createBinding||(Object.create?function(S,X,W,R){R===void 0&&(R=W);var H=Object.getOwnPropertyDescriptor(X,W);(!H||("get"in H?!X.__esModule:H.writable||H.configurable))&&(H={enumerable:!0,get:function(){return X[W]}}),Object.defineProperty(S,R,H)}:function(S,X,W,R){R===void 0&&(R=W),S[R]=X[W]}),i=$e&&$e.__setModuleDefault||(Object.create?function(S,X){Object.defineProperty(S,"default",{enumerable:!0,value:X})}:function(S,X){S.default=X}),I=$e&&$e.__importStar||function(S){if(S&&S.__esModule)return S;var X={};if(S!=null)for(var W in S)W!=="default"&&Object.prototype.hasOwnProperty.call(S,W)&&g(X,S,W);return i(X,S),X},n=$e&&$e.__importDefault||function(S){return S&&S.__esModule?S:{default:S}};Object.defineProperty(e,"__esModule",{value:!0}),e.decodeXML=e.decodeHTMLStrict=e.decodeHTMLAttribute=e.decodeHTML=e.determineBranch=e.EntityDecoder=e.DecodingMode=e.BinTrieFlags=e.fromCodePoint=e.replaceCodePoint=e.decodeCodePoint=e.xmlDecodeTree=e.htmlDecodeTree=void 0;var r=n(V4);e.htmlDecodeTree=r.default;var C=n(W4);e.xmlDecodeTree=C.default;var o=I(Mz);e.decodeCodePoint=o.default;var a=Mz;Object.defineProperty(e,"replaceCodePoint",{enumerable:!0,get:function(){return a.replaceCodePoint}}),Object.defineProperty(e,"fromCodePoint",{enumerable:!0,get:function(){return a.fromCodePoint}});var s;(function(S){S[S.NUM=35]="NUM",S[S.SEMI=59]="SEMI",S[S.EQUALS=61]="EQUALS",S[S.ZERO=48]="ZERO",S[S.NINE=57]="NINE",S[S.LOWER_A=97]="LOWER_A",S[S.LOWER_F=102]="LOWER_F",S[S.LOWER_X=120]="LOWER_X",S[S.LOWER_Z=122]="LOWER_Z",S[S.UPPER_A=65]="UPPER_A",S[S.UPPER_F=70]="UPPER_F",S[S.UPPER_Z=90]="UPPER_Z"})(s||(s={}));var A=32,l;(function(S){S[S.VALUE_LENGTH=49152]="VALUE_LENGTH",S[S.BRANCH_LENGTH=16256]="BRANCH_LENGTH",S[S.JUMP_TABLE=127]="JUMP_TABLE"})(l=e.BinTrieFlags||(e.BinTrieFlags={}));function c(S){return S>=s.ZERO&&S<=s.NINE}function u(S){return S>=s.UPPER_A&&S<=s.UPPER_F||S>=s.LOWER_A&&S<=s.LOWER_F}function d(S){return S>=s.UPPER_A&&S<=s.UPPER_Z||S>=s.LOWER_A&&S<=s.LOWER_Z||c(S)}function h(S){return S===s.EQUALS||d(S)}var m;(function(S){S[S.EntityStart=0]="EntityStart",S[S.NumericStart=1]="NumericStart",S[S.NumericDecimal=2]="NumericDecimal",S[S.NumericHex=3]="NumericHex",S[S.NamedEntity=4]="NamedEntity"})(m||(m={}));var f;(function(S){S[S.Legacy=0]="Legacy",S[S.Strict=1]="Strict",S[S.Attribute=2]="Attribute"})(f=e.DecodingMode||(e.DecodingMode={}));var b=function(){function S(X,W,R){this.decodeTree=X,this.emitCodePoint=W,this.errors=R,this.state=m.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=f.Strict}return S.prototype.startEntity=function(X){this.decodeMode=X,this.state=m.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},S.prototype.write=function(X,W){switch(this.state){case m.EntityStart:return X.charCodeAt(W)===s.NUM?(this.state=m.NumericStart,this.consumed+=1,this.stateNumericStart(X,W+1)):(this.state=m.NamedEntity,this.stateNamedEntity(X,W));case m.NumericStart:return this.stateNumericStart(X,W);case m.NumericDecimal:return this.stateNumericDecimal(X,W);case m.NumericHex:return this.stateNumericHex(X,W);case m.NamedEntity:return this.stateNamedEntity(X,W)}},S.prototype.stateNumericStart=function(X,W){return W>=X.length?-1:(X.charCodeAt(W)|A)===s.LOWER_X?(this.state=m.NumericHex,this.consumed+=1,this.stateNumericHex(X,W+1)):(this.state=m.NumericDecimal,this.stateNumericDecimal(X,W))},S.prototype.addToNumericResult=function(X,W,R,H){if(W!==R){var k=R-W;this.result=this.result*Math.pow(H,k)+parseInt(X.substr(W,k),H),this.consumed+=k}},S.prototype.stateNumericHex=function(X,W){for(var R=W;W>14;W>14,k!==0){if(K===s.SEMI)return this.emitNamedEntityData(this.treeIndex,k,this.consumed+this.excess);this.decodeMode!==f.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1},S.prototype.emitNotTerminatedNamedEntity=function(){var X,W=this,R=W.result,H=W.decodeTree,k=(H[R]&l.VALUE_LENGTH)>>14;return this.emitNamedEntityData(R,k,this.consumed),(X=this.errors)===null||X===void 0||X.missingSemicolonAfterCharacterReference(),this.consumed},S.prototype.emitNamedEntityData=function(X,W,R){var H=this.decodeTree;return this.emitCodePoint(W===1?H[X]&~l.VALUE_LENGTH:H[X+1],R),W===3&&this.emitCodePoint(H[X+2],R),R},S.prototype.end=function(){var X;switch(this.state){case m.NamedEntity:return this.result!==0&&(this.decodeMode!==f.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case m.NumericDecimal:return this.emitNumericEntity(0,2);case m.NumericHex:return this.emitNumericEntity(0,3);case m.NumericStart:return(X=this.errors)===null||X===void 0||X.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case m.EntityStart:return 0}},S}();e.EntityDecoder=b;function p(S){var X="",W=new b(S,function(R){return X+=(0,o.fromCodePoint)(R)});return function(H,k){for(var K=0,D=0;(D=H.indexOf("&",D))>=0;){X+=H.slice(K,D),W.startEntity(k);var J=W.write(H,D+1);if(J<0){K=D+W.end();break}K=D+J,D=J===0?K+1:K}var P=X+H.slice(K);return X="",P}}function y(S,X,W,R){var H=(X&l.BRANCH_LENGTH)>>7,k=X&l.JUMP_TABLE;if(H===0)return k!==0&&R===k?W:-1;if(k){var K=R-k;return K<0||K>=H?-1:S[W+K]-1}for(var D=W,J=D+H-1;D<=J;){var P=D+J>>>1,te=S[P];if(teR)J=P-1;else return S[P+H]}return-1}e.determineBranch=y;var Z=p(r.default),B=p(C.default);function G(S,X){return X===void 0&&(X=f.Legacy),Z(S,X)}e.decodeHTML=G;function v(S){return Z(S,f.Attribute)}e.decodeHTMLAttribute=v;function w(S){return Z(S,f.Strict)}e.decodeHTMLStrict=w;function V(S){return B(S,f.Strict)}e.decodeXML=V})(lh);var ch={},X4={};Object.defineProperty(X4,"__esModule",{value:!0});function bV(e){for(var g=1;g$\x80-\uFFFF]/g;var g=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);e.getCodePoint=String.prototype.codePointAt!=null?function(n,r){return n.codePointAt(r)}:function(n,r){return(n.charCodeAt(r)&64512)===55296?(n.charCodeAt(r)-55296)*1024+n.charCodeAt(r+1)-56320+65536:n.charCodeAt(r)};function i(n){for(var r="",C=0,o;(o=e.xmlReplacer.exec(n))!==null;){var a=o.index,s=n.charCodeAt(a),A=g.get(s);A!==void 0?(r+=n.substring(C,a)+A,C=a+1):(r+="".concat(n.substring(C,a),"&#x").concat((0,e.getCodePoint)(n,a).toString(16),";"),C=e.xmlReplacer.lastIndex+=+((s&64512)===55296))}return r+n.substr(C)}e.encodeXML=i,e.escape=i;function I(n,r){return function(o){for(var a,s=0,A="";a=n.exec(o);)s!==a.index&&(A+=o.substring(s,a.index)),A+=r.get(a[0].charCodeAt(0)),s=a.index+1;return A+o.substring(s)}}e.escapeUTF8=I(/[&<>'"]/g,g),e.escapeAttribute=I(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),e.escapeText=I(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))})(xb);var hft=$e&&$e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ch,"__esModule",{value:!0});ch.encodeNonAsciiHTML=ch.encodeHTML=void 0;var mft=hft(X4),cSe=xb,fft=/[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;function pft(e){return uSe(fft,e)}ch.encodeHTML=pft;function bft(e){return uSe(cSe.xmlReplacer,e)}ch.encodeNonAsciiHTML=bft;function uSe(e,g){for(var i="",I=0,n;(n=e.exec(g))!==null;){var r=n.index;i+=g.substring(I,r);var C=g.charCodeAt(r),o=mft.default.get(C);if(typeof o=="object"){if(r+10&&(I+=LN(e.children,g)),(g.xmlMode||!jne.has(e.name))&&(I+=""))),I}function Xft(e){return"<".concat(e.data,">")}function Hft(e,g){var i,I=e.data||"";return((i=g.encodeEntities)!==null&&i!==void 0?i:g.decodeEntities)!==!1&&!(!g.xmlMode&&e.parent&&vft.has(e.parent.name))&&(I=g.xmlMode||g.encodeEntities!=="utf8"?(0,DX.encodeXML)(I):(0,DX.escapeText)(I)),I}function Tft(e){return"")}function Nft(e){return"")}var kft=$e&&$e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(oC,"__esModule",{value:!0});oC.innerText=oC.textContent=oC.getText=oC.getInnerHTML=oC.getOuterHTML=void 0;var hA=En,Yft=kft(U0),Kft=L0;function hSe(e,g){return(0,Yft.default)(e,g)}oC.getOuterHTML=hSe;function Fft(e,g){return(0,hA.hasChildren)(e)?e.children.map(function(i){return hSe(i,g)}).join(""):""}oC.getInnerHTML=Fft;function nW(e){return Array.isArray(e)?e.map(nW).join(""):(0,hA.isTag)(e)?e.name==="br"?` +`:nW(e.children):(0,hA.isCDATA)(e)?nW(e.children):(0,hA.isText)(e)?e.data:""}oC.getText=nW;function zz(e){return Array.isArray(e)?e.map(zz).join(""):(0,hA.hasChildren)(e)&&!(0,hA.isComment)(e)?zz(e.children):(0,hA.isText)(e)?e.data:""}oC.textContent=zz;function Pz(e){return Array.isArray(e)?e.map(Pz).join(""):(0,hA.hasChildren)(e)&&(e.type===Kft.ElementType.Tag||(0,hA.isCDATA)(e))?Pz(e.children):(0,hA.isText)(e)?e.data:""}oC.innerText=Pz;var _I={};Object.defineProperty(_I,"__esModule",{value:!0});_I.prevElementSibling=_I.nextElementSibling=_I.getName=_I.hasAttrib=_I.getAttributeValue=_I.getSiblings=_I.getParent=_I.getChildren=void 0;var H4=En;function mSe(e){return(0,H4.hasChildren)(e)?e.children:[]}_I.getChildren=mSe;function fSe(e){return e.parent||null}_I.getParent=fSe;function Dft(e){var g,i,I=fSe(e);if(I!=null)return mSe(I);for(var n=[e],r=e.prev,C=e.next;r!=null;)n.unshift(r),g=r,r=g.prev;for(;C!=null;)n.push(C),i=C,C=i.next;return n}_I.getSiblings=Dft;function xft(e,g){var i;return(i=e.attribs)===null||i===void 0?void 0:i[g]}_I.getAttributeValue=xft;function Eft(e,g){return e.attribs!=null&&Object.prototype.hasOwnProperty.call(e.attribs,g)&&e.attribs[g]!=null}_I.hasAttrib=Eft;function Mft(e){return e.name}_I.getName=Mft;function zft(e){for(var g,i=e.next;i!==null&&!(0,H4.isTag)(i);)g=i,i=g.next;return i}_I.nextElementSibling=zft;function Pft(e){for(var g,i=e.prev;i!==null&&!(0,H4.isTag)(i);)g=i,i=g.prev;return i}_I.prevElementSibling=Pft;var Hr={};Object.defineProperty(Hr,"__esModule",{value:!0});Hr.prepend=Hr.prependChild=Hr.append=Hr.appendChild=Hr.replaceElement=Hr.removeElement=void 0;function nw(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var g=e.parent.children,i=g.lastIndexOf(e);i>=0&&g.splice(i,1)}e.next=null,e.prev=null,e.parent=null}Hr.removeElement=nw;function Jft(e,g){var i=g.prev=e.prev;i&&(i.next=g);var I=g.next=e.next;I&&(I.prev=g);var n=g.parent=e.parent;if(n){var r=n.children;r[r.lastIndexOf(e)]=g,e.parent=null}}Hr.replaceElement=Jft;function Oft(e,g){if(nw(g),g.next=null,g.parent=e,e.children.push(g)>1){var i=e.children[e.children.length-2];i.next=g,g.prev=i}else g.prev=null}Hr.appendChild=Oft;function _ft(e,g){nw(g);var i=e.parent,I=e.next;if(g.next=I,g.prev=e,e.next=g,g.parent=i,I){if(I.prev=g,i){var n=i.children;n.splice(n.lastIndexOf(I),0,g)}}else i&&i.children.push(g)}Hr.append=_ft;function Lft(e,g){if(nw(g),g.parent=e,g.prev=null,e.children.unshift(g)!==1){var i=e.children[1];i.prev=g,g.next=i}else g.next=null}Hr.prependChild=Lft;function Uft(e,g){nw(g);var i=e.parent;if(i){var I=i.children;I.splice(I.indexOf(e),0,g)}e.prev&&(e.prev.next=g),g.parent=i,g.prev=e.prev,g.next=e,e.prev=g}Hr.prepend=Uft;var Un={};Object.defineProperty(Un,"__esModule",{value:!0});Un.findAll=Un.existsOne=Un.findOne=Un.findOneChild=Un.find=Un.filter=void 0;var UN=En;function Qft(e,g,i,I){return i===void 0&&(i=!0),I===void 0&&(I=1/0),pSe(e,Array.isArray(g)?g:[g],i,I)}Un.filter=Qft;function pSe(e,g,i,I){for(var n=[],r=[g],C=[0];;){if(C[0]>=r[0].length){if(C.length===1)return n;r.shift(),C.shift();continue}var o=r[0][C[0]++];if(e(o)&&(n.push(o),--I<=0))return n;i&&(0,UN.hasChildren)(o)&&o.children.length>0&&(C.unshift(0),r.unshift(o.children))}}Un.find=pSe;function jft(e,g){return g.find(e)}Un.findOneChild=jft;function bSe(e,g,i){i===void 0&&(i=!0);for(var I=null,n=0;n0&&(I=bSe(e,r.children,!0));else continue}return I}Un.findOne=bSe;function ySe(e,g){return g.some(function(i){return(0,UN.isTag)(i)&&(e(i)||ySe(e,i.children))})}Un.existsOne=ySe;function $ft(e,g){for(var i=[],I=[g],n=[0];;){if(n[0]>=I[0].length){if(I.length===1)return i;I.shift(),n.shift();continue}var r=I[0][n[0]++];(0,UN.isTag)(r)&&(e(r)&&i.push(r),r.children.length>0&&(n.unshift(0),I.unshift(r.children)))}}Un.findAll=$ft;var aC={};Object.defineProperty(aC,"__esModule",{value:!0});aC.getElementsByTagType=aC.getElementsByTagName=aC.getElementById=aC.getElements=aC.testElement=void 0;var nd=En,QN=Un,xX={tag_name:function(e){return typeof e=="function"?function(g){return(0,nd.isTag)(g)&&e(g.name)}:e==="*"?nd.isTag:function(g){return(0,nd.isTag)(g)&&g.name===e}},tag_type:function(e){return typeof e=="function"?function(g){return e(g.type)}:function(g){return g.type===e}},tag_contains:function(e){return typeof e=="function"?function(g){return(0,nd.isText)(g)&&e(g.data)}:function(g){return(0,nd.isText)(g)&&g.data===e}}};function ZSe(e,g){return typeof g=="function"?function(i){return(0,nd.isTag)(i)&&g(i.attribs[e])}:function(i){return(0,nd.isTag)(i)&&i.attribs[e]===g}}function qft(e,g){return function(i){return e(i)||g(i)}}function GSe(e){var g=Object.keys(e).map(function(i){var I=e[i];return Object.prototype.hasOwnProperty.call(xX,i)?xX[i](I):ZSe(i,I)});return g.length===0?null:g.reduce(qft)}function ept(e,g){var i=GSe(e);return i?i(g):!0}aC.testElement=ept;function tpt(e,g,i,I){I===void 0&&(I=1/0);var n=GSe(e);return n?(0,QN.filter)(n,g,i,I):[]}aC.getElements=tpt;function gpt(e,g,i){return i===void 0&&(i=!0),Array.isArray(g)||(g=[g]),(0,QN.findOne)(ZSe("id",e),g,i)}aC.getElementById=gpt;function ipt(e,g,i,I){return i===void 0&&(i=!0),I===void 0&&(I=1/0),(0,QN.filter)(xX.tag_name(e),g,i,I)}aC.getElementsByTagName=ipt;function Ipt(e,g,i,I){return i===void 0&&(i=!0),I===void 0&&(I=1/0),(0,QN.filter)(xX.tag_type(e),g,i,I)}aC.getElementsByTagType=Ipt;var vSe={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.uniqueSort=e.compareDocumentPosition=e.DocumentPosition=e.removeSubsets=void 0;var g=En;function i(C){for(var o=C.length;--o>=0;){var a=C[o];if(o>0&&C.lastIndexOf(a,o-1)>=0){C.splice(o,1);continue}for(var s=a.parent;s;s=s.parent)if(C.includes(s)){C.splice(o,1);break}}return C}e.removeSubsets=i;var I;(function(C){C[C.DISCONNECTED=1]="DISCONNECTED",C[C.PRECEDING=2]="PRECEDING",C[C.FOLLOWING=4]="FOLLOWING",C[C.CONTAINS=8]="CONTAINS",C[C.CONTAINED_BY=16]="CONTAINED_BY"})(I=e.DocumentPosition||(e.DocumentPosition={}));function n(C,o){var a=[],s=[];if(C===o)return 0;for(var A=(0,g.hasChildren)(C)?C:C.parent;A;)a.unshift(A),A=A.parent;for(A=(0,g.hasChildren)(o)?o:o.parent;A;)s.unshift(A),A=A.parent;for(var l=Math.min(a.length,s.length),c=0;cd.indexOf(m)?u===o?I.FOLLOWING|I.CONTAINED_BY:I.FOLLOWING:u===C?I.PRECEDING|I.CONTAINS:I.PRECEDING}e.compareDocumentPosition=n;function r(C){return C=C.filter(function(o,a,s){return!s.includes(o,a+1)}),C.sort(function(o,a){var s=n(o,a);return s&I.PRECEDING?-1:s&I.FOLLOWING?1:0}),C}e.uniqueSort=r})(vSe);var jN={};Object.defineProperty(jN,"__esModule",{value:!0});jN.getFeed=void 0;var npt=oC,rw=aC;function rpt(e){var g=EX(spt,e);return g?g.name==="feed"?Cpt(g):opt(g):null}jN.getFeed=rpt;function Cpt(e){var g,i=e.children,I={type:"atom",items:(0,rw.getElementsByTagName)("entry",i).map(function(C){var o,a=C.children,s={media:BSe(a)};Vr(s,"id","id",a),Vr(s,"title","title",a);var A=(o=EX("link",a))===null||o===void 0?void 0:o.attribs.href;A&&(s.link=A);var l=mc("summary",a)||mc("content",a);l&&(s.description=l);var c=mc("updated",a);return c&&(s.pubDate=new Date(c)),s})};Vr(I,"id","id",i),Vr(I,"title","title",i);var n=(g=EX("link",i))===null||g===void 0?void 0:g.attribs.href;n&&(I.link=n),Vr(I,"description","subtitle",i);var r=mc("updated",i);return r&&(I.updated=new Date(r)),Vr(I,"author","email",i,!0),I}function opt(e){var g,i,I=(i=(g=EX("channel",e.children))===null||g===void 0?void 0:g.children)!==null&&i!==void 0?i:[],n={type:e.name.substr(0,3),id:"",items:(0,rw.getElementsByTagName)("item",e.children).map(function(C){var o=C.children,a={media:BSe(o)};Vr(a,"id","guid",o),Vr(a,"title","title",o),Vr(a,"link","link",o),Vr(a,"description","description",o);var s=mc("pubDate",o)||mc("dc:date",o);return s&&(a.pubDate=new Date(s)),a})};Vr(n,"title","title",I),Vr(n,"link","link",I),Vr(n,"description","description",I);var r=mc("lastBuildDate",I);return r&&(n.updated=new Date(r)),Vr(n,"author","managingEditor",I,!0),n}var apt=["url","type","lang"],Apt=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function BSe(e){return(0,rw.getElementsByTagName)("media:content",e).map(function(g){for(var i=g.attribs,I={medium:i.medium,isDefault:!!i.isDefault},n=0,r=apt;nA.length-3)return!1;var c=A.charCodeAt(l+1);return(c>=a.LowerA&&c<=a.LowerZ||c>=a.UpperA&&c<=a.UpperZ||c===a.Exclamation)&&A.includes(">",l+2)}e.isHtml=s})(lu);Object.defineProperty(mI,"__esModule",{value:!0});mI.toggleClass=mI.removeClass=mI.addClass=mI.hasClass=mI.removeAttr=mI.val=mI.data=mI.prop=mI.attr=void 0;var wSe=sI,Jg=lu,qne=Aa,Fp=Object.prototype.hasOwnProperty,JB=/\s+/,vD="data-",ere={null:null,true:!0,false:!1},T4=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,vpt=/^{[^]*}$|^\[[^]*]$/;function MX(e,g,i){var I;if(!(!e||!(0,Jg.isTag)(e))){if((I=e.attribs)!==null&&I!==void 0||(e.attribs={}),!g)return e.attribs;if(Fp.call(e.attribs,g))return!i&&T4.test(g)?g:e.attribs[g];if(e.name==="option"&&g==="value")return(0,wSe.text)(e.children);if(e.name==="input"&&(e.attribs.type==="radio"||e.attribs.type==="checkbox")&&g==="value")return"on"}}function Dp(e,g,i){i===null?RSe(e,g):e.attribs[g]="".concat(i)}function Bpt(e,g){if(typeof e=="object"||g!==void 0){if(typeof g=="function"){if(typeof e!="string")throw new Error("Bad combination of arguments.");return(0,Jg.domEach)(this,function(i,I){(0,Jg.isTag)(i)&&Dp(i,e,g.call(i,I,i.attribs[e]))})}return(0,Jg.domEach)(this,function(i){(0,Jg.isTag)(i)&&(typeof e=="object"?Object.keys(e).forEach(function(I){var n=e[I];Dp(i,I,n)}):Dp(i,e,g))})}return arguments.length>1?this:MX(this[0],e,this.options.xmlMode)}mI.attr=Bpt;function tre(e,g,i){return g in e?e[g]:!i&&T4.test(g)?MX(e,g,!1)!==void 0:MX(e,g,i)}function BD(e,g,i,I){g in e?e[g]=i:Dp(e,g,!I&&T4.test(g)?i?"":null:"".concat(i))}function Spt(e,g){var i=this,I;if(typeof e=="string"&&g===void 0){var n=this[0];if(!n||!(0,Jg.isTag)(n))return;switch(e){case"style":{var r=this.css(),C=Object.keys(r);return C.forEach(function(a,s){r[s]=a}),r.length=C.length,r}case"tagName":case"nodeName":return n.name.toUpperCase();case"href":case"src":{var o=(I=n.attribs)===null||I===void 0?void 0:I[e];return typeof URL<"u"&&(e==="href"&&(n.tagName==="a"||n.name==="link")||e==="src"&&(n.tagName==="img"||n.tagName==="iframe"||n.tagName==="audio"||n.tagName==="video"||n.tagName==="source"))&&o!==void 0&&this.options.baseURI?new URL(o,this.options.baseURI).href:o}case"innerText":return(0,qne.innerText)(n);case"textContent":return(0,qne.textContent)(n);case"outerHTML":return this.clone().wrap("").parent().html();case"innerHTML":return this.html();default:return tre(n,e,this.options.xmlMode)}}if(typeof e=="object"||g!==void 0){if(typeof g=="function"){if(typeof e=="object")throw new Error("Bad combination of arguments.");return(0,Jg.domEach)(this,function(a,s){(0,Jg.isTag)(a)&&BD(a,e,g.call(a,s,tre(a,e,i.options.xmlMode)),i.options.xmlMode)})}return(0,Jg.domEach)(this,function(a){(0,Jg.isTag)(a)&&(typeof e=="object"?Object.keys(e).forEach(function(s){var A=e[s];BD(a,s,A,i.options.xmlMode)}):BD(a,e,g,i.options.xmlMode))})}}mI.prop=Spt;function gre(e,g,i){var I,n=e;(I=n.data)!==null&&I!==void 0||(n.data={}),typeof g=="object"?Object.assign(n.data,g):typeof g=="string"&&i!==void 0&&(n.data[g]=i)}function ire(e,g){var i,I,n;g==null?(i=Object.keys(e.attribs).filter(function(a){return a.startsWith(vD)}),I=i.map(function(a){return(0,Jg.camelCase)(a.slice(vD.length))})):(i=[vD+(0,Jg.cssCase)(g)],I=[g]);for(var r=0;r-1;){var n=I+e.length;if((I===0||JB.test(i[I-1]))&&(n===i.length||JB.test(i[n])))return!0}return!1})}mI.hasClass=Wpt;function VSe(e){if(typeof e=="function")return(0,Jg.domEach)(this,function(s,A){if((0,Jg.isTag)(s)){var l=s.attribs.class||"";VSe.call([s],e.call(s,A,l))}});if(!e||typeof e!="string")return this;for(var g=e.split(JB),i=this.length,I=0;I=0&&(r.splice(a,1),C=!0,o--)}C&&(n.attribs.class=r.join(" "))}})}mI.removeClass=WSe;function XSe(e,g){if(typeof e=="function")return(0,Jg.domEach)(this,function(l,c){(0,Jg.isTag)(l)&&XSe.call([l],e.call(l,c,l.attribs.class||"",g),g)});if(!e||typeof e!="string")return this;for(var i=e.split(JB),I=i.length,n=typeof g=="boolean"?g?1:-1:0,r=this.length,C=0;C=0&&A<0?a.push(i[s]):n<=0&&A>=0&&a.splice(A,1)}o.attribs.class=a.join(" ")}}return this}mI.toggleClass=XSe;var Vt={},HSe={},Gg;(function(e){e.Attribute="attribute",e.Pseudo="pseudo",e.PseudoElement="pseudo-element",e.Tag="tag",e.Universal="universal",e.Adjacent="adjacent",e.Child="child",e.Descendant="descendant",e.Parent="parent",e.Sibling="sibling",e.ColumnCombinator="column-combinator"})(Gg||(Gg={}));const Xpt={Unknown:null,QuirksMode:"quirks",IgnoreCase:!0,CaseSensitive:!1};var Xi;(function(e){e.Any="any",e.Element="element",e.End="end",e.Equals="equals",e.Exists="exists",e.Hyphen="hyphen",e.Not="not",e.Start="start"})(Xi||(Xi={}));const Ire=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/,Hpt=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,Tpt=new Map([[126,Xi.Element],[94,Xi.Start],[36,Xi.End],[42,Xi.Any],[33,Xi.Not],[124,Xi.Hyphen]]),Npt=new Set(["has","not","matches","is","where","host","host-context"]);function TSe(e){switch(e.type){case Gg.Adjacent:case Gg.Child:case Gg.Descendant:case Gg.Parent:case Gg.Sibling:case Gg.ColumnCombinator:return!0;default:return!1}}const kpt=new Set(["contains","icontains"]);function Ypt(e,g,i){const I=parseInt(g,16)-65536;return I!==I||i?g:I<0?String.fromCharCode(I+65536):String.fromCharCode(I>>10|55296,I&1023|56320)}function oZ(e){return e.replace(Hpt,Ypt)}function SD(e){return e===39||e===34}function nre(e){return e===32||e===9||e===10||e===12||e===13}function Kpt(e){const g=[],i=NSe(g,`${e}`,0);if(i0&&i0&&TSe(I[I.length-1]))throw new Error("Did not expect successive traversals.")}function s(c){if(I.length>0&&I[I.length-1].type===Gg.Descendant){I[I.length-1].type=c;return}a(),I.push({type:c})}function A(c,u){I.push({type:Gg.Attribute,name:c,action:u,value:n(1),namespace:null,ignoreCase:"quirks"})}function l(){if(I.length&&I[I.length-1].type===Gg.Descendant&&I.pop(),I.length===0)throw new Error("Empty sub-selector");e.push(I)}if(r(0),g.length===i)return i;e:for(;ie.charCodeAt(0))),rre=new Set(YSe.map(e=>e.charCodeAt(0))),op=new Set([...YSe,"~","^","$","*","+","!","|",":","[","]"," ","."].map(e=>e.charCodeAt(0)));function KSe(e){return e.map(g=>g.map(Dpt).join("")).join(", ")}function Dpt(e,g,i){switch(e.type){case Gg.Child:return g===0?"> ":" > ";case Gg.Parent:return g===0?"< ":" < ";case Gg.Sibling:return g===0?"~ ":" ~ ";case Gg.Adjacent:return g===0?"+ ":" + ";case Gg.Descendant:return" ";case Gg.ColumnCombinator:return g===0?"|| ":" || ";case Gg.Universal:return e.namespace==="*"&&g+10?I+e.slice(i):e}const Ept=Object.freeze(Object.defineProperty({__proto__:null,get AttributeAction(){return Xi},IgnoreCaseMode:Xpt,get SelectorType(){return Gg},isTraversal:TSe,parse:Kpt,stringify:KSe},Symbol.toStringTag,{value:"Module"})),Cw=el(Ept);var Oz={},am={trueFunc:function(){return!0},falseFunc:function(){return!1}},Nc={},Q0={};Object.defineProperty(Q0,"__esModule",{value:!0});Q0.isTraversal=void 0;var rC=Cw,DSe=new Map([[rC.SelectorType.Universal,50],[rC.SelectorType.Tag,30],[rC.SelectorType.Attribute,1],[rC.SelectorType.Pseudo,0]]);function Mpt(e){return!DSe.has(e.type)}Q0.isTraversal=Mpt;var zpt=new Map([[rC.AttributeAction.Exists,10],[rC.AttributeAction.Equals,8],[rC.AttributeAction.Not,7],[rC.AttributeAction.Start,6],[rC.AttributeAction.End,6],[rC.AttributeAction.Any,5]]);function Ppt(e){for(var g=e.map(xSe),i=1;i=0&&I>=1)):e.type===rC.SelectorType.Pseudo&&(e.data?e.name==="has"||e.name==="contains"?I=0:Array.isArray(e.data)?(I=Math.min.apply(Math,e.data.map(function(n){return Math.min.apply(Math,n.map(xSe))})),I<0&&(I=0)):I=2:I=3),I}var qN={},ek={},Jpt=$e&&$e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ek,"__esModule",{value:!0});ek.attributeRules=void 0;var yV=Jpt(am),Opt=/[-[\]{}()*+?.,\\^$|#\s]/g;function ore(e){return e.replace(Opt,"\\$&")}var _pt=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function Nu(e,g){return typeof e.ignoreCase=="boolean"?e.ignoreCase:e.ignoreCase==="quirks"?!!g.quirksMode:!g.xmlMode&&_pt.has(e.name)}ek.attributeRules={equals:function(e,g,i){var I=i.adapter,n=g.name,r=g.value;return Nu(g,i)?(r=r.toLowerCase(),function(C){var o=I.getAttributeValue(C,n);return o!=null&&o.length===r.length&&o.toLowerCase()===r&&e(C)}):function(C){return I.getAttributeValue(C,n)===r&&e(C)}},hyphen:function(e,g,i){var I=i.adapter,n=g.name,r=g.value,C=r.length;return Nu(g,i)?(r=r.toLowerCase(),function(a){var s=I.getAttributeValue(a,n);return s!=null&&(s.length===C||s.charAt(C)==="-")&&s.substr(0,C).toLowerCase()===r&&e(a)}):function(a){var s=I.getAttributeValue(a,n);return s!=null&&(s.length===C||s.charAt(C)==="-")&&s.substr(0,C)===r&&e(a)}},element:function(e,g,i){var I=i.adapter,n=g.name,r=g.value;if(/\s/.test(r))return yV.default.falseFunc;var C=new RegExp("(?:^|\\s)".concat(ore(r),"(?:$|\\s)"),Nu(g,i)?"i":"");return function(a){var s=I.getAttributeValue(a,n);return s!=null&&s.length>=r.length&&C.test(s)&&e(a)}},exists:function(e,g,i){var I=g.name,n=i.adapter;return function(r){return n.hasAttrib(r,I)&&e(r)}},start:function(e,g,i){var I=i.adapter,n=g.name,r=g.value,C=r.length;return C===0?yV.default.falseFunc:Nu(g,i)?(r=r.toLowerCase(),function(o){var a=I.getAttributeValue(o,n);return a!=null&&a.length>=C&&a.substr(0,C).toLowerCase()===r&&e(o)}):function(o){var a;return!!(!((a=I.getAttributeValue(o,n))===null||a===void 0)&&a.startsWith(r))&&e(o)}},end:function(e,g,i){var I=i.adapter,n=g.name,r=g.value,C=-r.length;return C===0?yV.default.falseFunc:Nu(g,i)?(r=r.toLowerCase(),function(o){var a;return((a=I.getAttributeValue(o,n))===null||a===void 0?void 0:a.substr(C).toLowerCase())===r&&e(o)}):function(o){var a;return!!(!((a=I.getAttributeValue(o,n))===null||a===void 0)&&a.endsWith(r))&&e(o)}},any:function(e,g,i){var I=i.adapter,n=g.name,r=g.value;if(r==="")return yV.default.falseFunc;if(Nu(g,i)){var C=new RegExp(ore(r),"i");return function(a){var s=I.getAttributeValue(a,n);return s!=null&&s.length>=r.length&&C.test(s)&&e(a)}}return function(o){var a;return!!(!((a=I.getAttributeValue(o,n))===null||a===void 0)&&a.includes(r))&&e(o)}},not:function(e,g,i){var I=i.adapter,n=g.name,r=g.value;return r===""?function(C){return!!I.getAttributeValue(C,n)&&e(C)}:Nu(g,i)?(r=r.toLowerCase(),function(C){var o=I.getAttributeValue(C,n);return(o==null||o.length!==r.length||o.toLowerCase()!==r)&&e(C)}):function(C){return I.getAttributeValue(C,n)!==r&&e(C)}}};var N4={},ESe={},MSe={},tk={};Object.defineProperty(tk,"__esModule",{value:!0});tk.parse=void 0;var Lpt=new Set([9,10,12,13,32]),are="0".charCodeAt(0),Upt="9".charCodeAt(0);function Qpt(e){if(e=e.trim().toLowerCase(),e==="even")return[2,0];if(e==="odd")return[2,1];var g=0,i=0,I=r(),n=C();if(g=are&&e.charCodeAt(g)<=Upt;)s=s*10+(e.charCodeAt(g)-are),g++;return g===a?null:s}function o(){for(;g=i};var I=Math.abs(g),n=(i%I+I)%I;return g>1?function(r){return r>=i&&r%I===n}:function(r){return r<=i&&r%I===n}}Mb.compile=$pt;function qpt(e){var g=e[0],i=e[1]-1,I=0;if(g<0){var n=-g,r=(i%n+n)%n;return function(){var C=r+n*I++;return C>i?null:C}}return g===0?i<0?function(){return null}:function(){return I++===0?i:null}:(i<0&&(i+=g*Math.ceil(-i/g)),function(){return g*I+++i})}Mb.generate=qpt;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.sequence=e.generate=e.compile=e.parse=void 0;var g=tk;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return g.parse}});var i=Mb;Object.defineProperty(e,"compile",{enumerable:!0,get:function(){return i.compile}}),Object.defineProperty(e,"generate",{enumerable:!0,get:function(){return i.generate}});function I(r){return(0,i.compile)((0,g.parse)(r))}e.default=I;function n(r){return(0,i.generate)((0,g.parse)(r))}e.sequence=n})(MSe);(function(e){var g=$e&&$e.__importDefault||function(C){return C&&C.__esModule?C:{default:C}};Object.defineProperty(e,"__esModule",{value:!0}),e.filters=void 0;var i=g(MSe),I=g(am);function n(C,o){return function(a){var s=o.getParent(a);return s!=null&&o.isTag(s)&&C(a)}}e.filters={contains:function(C,o,a){var s=a.adapter;return function(l){return C(l)&&s.getText(l).includes(o)}},icontains:function(C,o,a){var s=a.adapter,A=o.toLowerCase();return function(c){return C(c)&&s.getText(c).toLowerCase().includes(A)}},"nth-child":function(C,o,a){var s=a.adapter,A=a.equals,l=(0,i.default)(o);return l===I.default.falseFunc?I.default.falseFunc:l===I.default.trueFunc?n(C,s):function(u){for(var d=s.getSiblings(u),h=0,m=0;m=0&&!A(u,d[m]);m--)s.isTag(d[m])&&h++;return l(h)&&C(u)}},"nth-of-type":function(C,o,a){var s=a.adapter,A=a.equals,l=(0,i.default)(o);return l===I.default.falseFunc?I.default.falseFunc:l===I.default.trueFunc?n(C,s):function(u){for(var d=s.getSiblings(u),h=0,m=0;m=0;m--){var f=d[m];if(A(u,f))break;s.isTag(f)&&s.getName(f)===s.getName(u)&&h++}return l(h)&&C(u)}},root:function(C,o,a){var s=a.adapter;return function(A){var l=s.getParent(A);return(l==null||!s.isTag(l))&&C(A)}},scope:function(C,o,a,s){var A=a.equals;return!s||s.length===0?e.filters.root(C,o,a):s.length===1?function(l){return A(s[0],l)&&C(l)}:function(l){return s.includes(l)&&C(l)}},hover:r("isHovered"),visited:r("isVisited"),active:r("isActive")};function r(C){return function(a,s,A){var l=A.adapter,c=l[C];return typeof c!="function"?I.default.falseFunc:function(d){return c(d)&&a(d)}}}})(ESe);var zb={};Object.defineProperty(zb,"__esModule",{value:!0});zb.verifyPseudoArgs=zb.pseudos=void 0;zb.pseudos={empty:function(e,g){var i=g.adapter;return!i.getChildren(e).some(function(I){return i.isTag(I)||i.getText(I)!==""})},"first-child":function(e,g){var i=g.adapter,I=g.equals;if(i.prevElementSibling)return i.prevElementSibling(e)==null;var n=i.getSiblings(e).find(function(r){return i.isTag(r)});return n!=null&&I(e,n)},"last-child":function(e,g){for(var i=g.adapter,I=g.equals,n=i.getSiblings(e),r=n.length-1;r>=0;r--){if(I(e,n[r]))return!0;if(i.isTag(n[r]))break}return!1},"first-of-type":function(e,g){for(var i=g.adapter,I=g.equals,n=i.getSiblings(e),r=i.getName(e),C=0;C=0;C--){var o=n[C];if(I(e,o))return!0;if(i.isTag(o)&&i.getName(o)===r)break}return!1},"only-of-type":function(e,g){var i=g.adapter,I=g.equals,n=i.getName(e);return i.getSiblings(e).every(function(r){return I(e,r)||!i.isTag(r)||i.getName(r)!==n})},"only-child":function(e,g){var i=g.adapter,I=g.equals;return i.getSiblings(e).every(function(n){return I(e,n)||!i.isTag(n)})}};function ebt(e,g,i,I){if(i===null){if(e.length>I)throw new Error("Pseudo-class :".concat(g," requires an argument"))}else if(e.length===I)throw new Error("Pseudo-class :".concat(g," doesn't have any arguments"))}zb.verifyPseudoArgs=ebt;var gk={};Object.defineProperty(gk,"__esModule",{value:!0});gk.aliases=void 0;gk.aliases={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:`:is( :is(button, input, select, textarea, optgroup, option)[disabled], optgroup[disabled] > option, fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *) - )`,enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"};var jN={};(function(e){var g=$e&&$e.__spreadArray||function(s,A,l){if(l||arguments.length===2)for(var c=0,u=A.length,d;c"u")return function(A){for(var l=A;l=yD(l,C);)if(e(l))return!0;return!1};var a=new WeakSet;return function(A){for(var l=A;l=yD(l,C);)if(!a.has(l)){if(C.isTag(l)&&e(l))return!0;a.add(l)}return!1}}case"_flexibleDescendant":return function(A){var l=A;do if(e(l))return!0;while(l=yD(l,C));return!1};case yo.SelectorType.Parent:return function(A){return C.getChildren(A).some(function(l){return C.isTag(l)&&e(l)})};case yo.SelectorType.Child:return function(A){var l=C.getParent(A);return l!=null&&C.isTag(l)&&e(l)};case yo.SelectorType.Sibling:return function(A){for(var l=C.getSiblings(A),c=0;c0&&(0,Ez.isTraversal)(o[0])&&o[0].type!==ms.SelectorType.Descendant))if(n&&!o.some(FSe))o.unshift(gbt);else continue;o.unshift(ibt)}}function V4(e,g,I){var i;e.forEach(Ez.default),I=(i=g.context)!==null&&i!==void 0?i:I;var n=Array.isArray(I),C=I&&(Array.isArray(I)?I:[I]);if(g.relativeSelector!==!1)nbt(e,g,C);else if(e.some(function(a){return a.length>0&&(0,Ez.isTraversal)(a[0])}))throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");var r=!1,o=e.map(function(a){if(a.length>=2){var s=a[0],A=a[1];s.type!==ms.SelectorType.Pseudo||s.name!=="scope"||(n&&A.type===ms.SelectorType.Descendant?a[1]=Ibt:(A.type===ms.SelectorType.Adjacent||A.type===ms.SelectorType.Sibling)&&(r=!0))}return Cbt(a,g,C)}).reduce(rbt,mc.default.falseFunc);return o.shouldTestNextSiblings=r,o}Tc.compileToken=V4;function Cbt(e,g,I){var i;return e.reduce(function(n,C){return n===mc.default.falseFunc?mc.default.falseFunc:(0,ebt.compileGeneralSelector)(n,C,g,I,V4)},(i=g.rootFunc)!==null&&i!==void 0?i:mc.default.trueFunc)}function rbt(e,g){return g===mc.default.falseFunc||e===mc.default.trueFunc?e:e===mc.default.falseFunc||g===mc.default.trueFunc?g:function(i){return e(i)||g(i)}}(function(e){var g=$e&&$e.__createBinding||(Object.create?function(b,p,y,Z){Z===void 0&&(Z=y);var B=Object.getOwnPropertyDescriptor(p,y);(!B||("get"in B?!p.__esModule:B.writable||B.configurable))&&(B={enumerable:!0,get:function(){return p[y]}}),Object.defineProperty(b,Z,B)}:function(b,p,y,Z){Z===void 0&&(Z=y),b[Z]=p[y]}),I=$e&&$e.__setModuleDefault||(Object.create?function(b,p){Object.defineProperty(b,"default",{enumerable:!0,value:p})}:function(b,p){b.default=p}),i=$e&&$e.__importStar||function(b){if(b&&b.__esModule)return b;var p={};if(b!=null)for(var y in b)y!=="default"&&Object.prototype.hasOwnProperty.call(b,y)&&g(p,b,y);return I(p,b),p},n=$e&&$e.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};Object.defineProperty(e,"__esModule",{value:!0}),e.aliases=e.pseudos=e.filters=e.is=e.selectOne=e.selectAll=e.prepareContext=e._compileToken=e._compileUnsafe=e.compile=void 0;var C=i(ra),r=n(om),o=Tc,a=jN,s=function(b,p){return b===p},A={adapter:C,equals:s};function l(b){var p,y,Z,B,G=b??A;return(p=G.adapter)!==null&&p!==void 0||(G.adapter=C),(y=G.equals)!==null&&y!==void 0||(G.equals=(B=(Z=G.adapter)===null||Z===void 0?void 0:Z.equals)!==null&&B!==void 0?B:s),G}function c(b){return function(y,Z,B){var G=l(Z);return b(y,G,B)}}e.compile=c(o.compile),e._compileUnsafe=c(o.compileUnsafe),e._compileToken=c(o.compileToken);function u(b){return function(y,Z,B){var G=l(B);typeof y!="function"&&(y=(0,o.compileUnsafe)(y,G,Z));var v=d(Z,G.adapter,y.shouldTestNextSiblings);return b(y,v,G)}}function d(b,p,y){return y===void 0&&(y=!1),y&&(b=h(b,p)),Array.isArray(b)?p.removeSubsets(b):p.getChildren(b)}e.prepareContext=d;function h(b,p){for(var y=Array.isArray(b)?b.slice(0):[b],Z=y.length,B=0;B=0?r+1:1/0:0;case"lt":return isFinite(r)?r>=0?Math.min(r,C):1/0:0;case"gt":return isFinite(r)?1/0:0;case"odd":return 2*C;case"even":return 2*C-1;case"last":case"not":return 1/0}}e.getLimit=I})(W4);Object.defineProperty(Mb,"__esModule",{value:!0});Mb.groupSelectors=Mb.getDocumentRoot=void 0;var obt=W4;function abt(e){for(;e.parent;)e=e.parent;return e}Mb.getDocumentRoot=abt;function Abt(e){for(var g=[],I=[],i=0,n=e;i0&&R.some((0,o._compileToken)(V,X))||H.some(function(Y){return y(Y,R,X).length>0})}e.some=m;function f(R,S,X,W){var V=typeof X=="string"?parseInt(X,10):NaN;switch(R){case"first":case"lt":return S;case"last":return S.length>0?[S[S.length-1]]:S;case"nth":case"eq":return isFinite(V)&&Math.abs(V)1&&r.length>1?I.reduce(function(o,a){return a(o)},r):r)}}}var Cw=X4(function(e,g){for(var I,i=[],n=0;n0})}Vt.has=vbt;function Bbt(){return this.length>1?this._make(this[0]):this}Vt.first=Bbt;function Sbt(){return this.length>0?this._make(this[this.length-1]):this}Vt.last=Sbt;function wbt(e){var g;return e=+e,e===0&&this.length<=1?this:(e<0&&(e=this.length+e),this._make((g=this[e])!==null&&g!==void 0?g:[]))}Vt.eq=wbt;function Rbt(e){return e==null?this.toArray():this[e<0?this.length+e:e]}Vt.get=Rbt;function Vbt(){return Array.prototype.slice.call(this)}Vt.toArray=Vbt;function Wbt(e){var g,I;return e==null?(g=this.parent().children(),I=this[0]):typeof e=="string"?(g=this._make(e),I=this[0]):(g=this,I=(0,ua.isCheerio)(e)?e[0]:e),Array.prototype.indexOf.call(g,I)}Vt.index=Wbt;function Xbt(e,g){return this._make(Array.prototype.slice.call(this,e,g))}Vt.slice=Xbt;function Hbt(){var e;return(e=this.prevObject)!==null&&e!==void 0?e:this._make([])}Vt.end=Hbt;function Tbt(e,g){var I=this._make(e,g),i=(0,GA.uniqueSort)(Mz(Mz([],this.get(),!0),I.get(),!0));return this._make(i)}Vt.add=Tbt;function Nbt(e){return this.prevObject?this.add(e?this.prevObject.filter(e):this.prevObject):this}Vt.addBack=Nbt;var Cg={},ch={};Object.defineProperty(ch,"__esModule",{value:!0});ch.update=ch.getParse=void 0;var kbt=ra,rCe=En;function Ybt(e){return function(I,i,n,C){if(typeof Buffer<"u"&&Buffer.isBuffer(I)&&(I=I.toString()),typeof I=="string")return e(I,i,n,C);var r=I;if(!Array.isArray(r)&&(0,rCe.isDocument)(r))return r;var o=new rCe.Document([]);return DSe(r,o),o}}ch.getParse=Ybt;function DSe(e,g){var I=Array.isArray(e)?e:[e];g?g.children=I:g=null;for(var i=0;i=e.length?null:e[g+I],A=0;A-1&&(c.children.splice(d,1),n===c&&g>d&&o[0]--)}l.parent=n,l.prev&&(l.prev.next=(C=l.next)!==null&&C!==void 0?C:null),l.next&&(l.next.prev=(r=l.prev)!==null&&r!==void 0?r:null),l.prev=A===0?a:i[A-1],l.next=A===i.length-1?s:i[A+1]}return a&&(a.next=i[0]),s&&(s.prev=i[i.length-1]),e.splice.apply(e,o)}function xbt(e){var g=(0,Ki.isCheerio)(e)?e:this._make(e);return g.append(this),this}Cg.appendTo=xbt;function Ebt(e){var g=(0,Ki.isCheerio)(e)?e:this._make(e);return g.prepend(this),this}Cg.prependTo=Ebt;Cg.append=xSe(function(e,g,I){lu(g,g.length,0,e,I)});Cg.prepend=xSe(function(e,g,I){lu(g,0,0,e,I)});function ESe(e){return function(g){for(var I=this.length-1,i=this.parents().last(),n=0;n0&&I!==void 0&&(g[I]+=";".concat(o))}else I=C.slice(0,r).trim(),g[I]=C.slice(r+1).trim()}return g}var Pb={};Object.defineProperty(Pb,"__esModule",{value:!0});Pb.serializeArray=Pb.serialize=void 0;var i0t=su,aCe="input,select,textarea,keygen",n0t=/%20/g,ACe=/\r?\n/g;function C0t(){var e=this.serializeArray(),g=e.map(function(I){return"".concat(encodeURIComponent(I.name),"=").concat(encodeURIComponent(I.value))});return g.join("&").replace(n0t,"+")}Pb.serialize=C0t;function r0t(){var e=this;return this.map(function(g,I){var i=e._make(I);return(0,i0t.isTag)(I)&&I.name==="form"?i.find(aCe).toArray():i.filter(aCe).toArray()}).filter('[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map(function(g,I){var i,n=e._make(I),C=n.attr("name"),r=(i=n.val())!==null&&i!==void 0?i:"";return Array.isArray(r)?r.map(function(o){return{name:C,value:o.replace(ACe,`\r -`)}}):{name:C,value:r.replace(ACe,`\r -`)}}).toArray()}Pb.serializeArray=r0t;var o0t=$e&&$e.__createBinding||(Object.create?function(e,g,I,i){i===void 0&&(i=I);var n=Object.getOwnPropertyDescriptor(g,I);(!n||("get"in n?!g.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return g[I]}}),Object.defineProperty(e,i,n)}:function(e,g,I,i){i===void 0&&(i=I),e[i]=g[I]}),a0t=$e&&$e.__setModuleDefault||(Object.create?function(e,g){Object.defineProperty(e,"default",{enumerable:!0,value:g})}:function(e,g){e.default=g}),ow=$e&&$e.__importStar||function(e){if(e&&e.__esModule)return e;var g={};if(e!=null)for(var I in e)I!=="default"&&Object.prototype.hasOwnProperty.call(e,I)&&o0t(g,e,I);return a0t(g,e),g};Object.defineProperty(ON,"__esModule",{value:!0});ON.Cheerio=void 0;var A0t=ow(hi),s0t=ow(Vt),l0t=ow(Cg),c0t=ow(qN),u0t=ow(Pb),aw=function(){function e(g,I,i){if(this.length=0,this.options=i,this._root=I,g){for(var n=0;n=55296&&o<=57343}e.isSurrogate=I;function i(o){return o>=56320&&o<=57343}e.isSurrogatePair=i;function n(o,a){return(o-55296)*1024+9216+a}e.getSurrogatePairCodePoint=n;function C(o){return o!==32&&o!==10&&o!==13&&o!==9&&o!==12&&o>=1&&o<=31||o>=127&&o<=159}e.isControlCodePoint=C;function r(o){return o>=64976&&o<=65007||g.has(o)}e.isUndefinedCodePoint=r})(tk);var Aw={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ERR=void 0,function(g){g.controlCharacterInInputStream="control-character-in-input-stream",g.noncharacterInInputStream="noncharacter-in-input-stream",g.surrogateInInputStream="surrogate-in-input-stream",g.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",g.endTagWithAttributes="end-tag-with-attributes",g.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",g.unexpectedSolidusInTag="unexpected-solidus-in-tag",g.unexpectedNullCharacter="unexpected-null-character",g.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",g.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",g.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",g.missingEndTagName="missing-end-tag-name",g.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",g.unknownNamedCharacterReference="unknown-named-character-reference",g.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",g.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",g.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",g.eofBeforeTagName="eof-before-tag-name",g.eofInTag="eof-in-tag",g.missingAttributeValue="missing-attribute-value",g.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",g.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",g.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",g.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",g.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",g.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",g.missingDoctypePublicIdentifier="missing-doctype-public-identifier",g.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",g.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",g.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",g.cdataInHtmlContent="cdata-in-html-content",g.incorrectlyOpenedComment="incorrectly-opened-comment",g.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",g.eofInDoctype="eof-in-doctype",g.nestedComment="nested-comment",g.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",g.eofInComment="eof-in-comment",g.incorrectlyClosedComment="incorrectly-closed-comment",g.eofInCdata="eof-in-cdata",g.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",g.nullCharacterReference="null-character-reference",g.surrogateCharacterReference="surrogate-character-reference",g.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",g.controlCharacterReference="control-character-reference",g.noncharacterCharacterReference="noncharacter-character-reference",g.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",g.missingDoctypeName="missing-doctype-name",g.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",g.duplicateAttribute="duplicate-attribute",g.nonConformingDoctype="non-conforming-doctype",g.missingDoctype="missing-doctype",g.misplacedDoctype="misplaced-doctype",g.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",g.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",g.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",g.openElementsLeftAfterEof="open-elements-left-after-eof",g.abandonedHeadElementChild="abandoned-head-element-child",g.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",g.nestedNoscriptInHead="nested-noscript-in-head",g.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(e.ERR||(e.ERR={}))})(Aw);function Z0t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function sCe(e,g){for(var I=0;Ithis.bufferWaterline}},{key:"dropParsedChunk",value:function(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}},{key:"write",value:function(I,i){this.html.length>0?this.html+=I:this.html=I,this.endOfChunkHit=!1,this.lastChunkWritten=i}},{key:"insertHtmlAtCurrentPos",value:function(I){this.html=this.html.substring(0,this.pos+1)+I+this.html.substring(this.pos+1),this.endOfChunkHit=!1}},{key:"startsWith",value:function(I,i){if(this.pos+I.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(i)return this.html.startsWith(I,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,Jn.CODE_POINTS.EOF;const n=this.html.charCodeAt(i);return n===Jn.CODE_POINTS.CARRIAGE_RETURN?Jn.CODE_POINTS.LINE_FEED:n}},{key:"advance",value:function(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,Jn.CODE_POINTS.EOF;let I=this.html.charCodeAt(this.pos);return I===Jn.CODE_POINTS.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,Jn.CODE_POINTS.LINE_FEED):I===Jn.CODE_POINTS.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,(0,Jn.isSurrogate)(I)&&(I=this._processSurrogate(I)),this.handler.onParseError===null||I>31&&I<127||I===Jn.CODE_POINTS.LINE_FEED||I===Jn.CODE_POINTS.CARRIAGE_RETURN||I>159&&I<64976||this._checkForProblematicCharacters(I),I)}},{key:"_checkForProblematicCharacters",value:function(I){(0,Jn.isControlCodePoint)(I)?this._err(GD.ERR.controlCharacterInInputStream):(0,Jn.isUndefinedCodePoint)(I)&&this._err(GD.ERR.noncharacterInInputStream)}},{key:"retreat",value:function(I){for(this.pos-=I;this.pos=0;n--)if(I.attrs[n].name===i)return I.attrs[n].value;return null}e.getTokenAttr=g})(gk);var nl={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasUnescapedText=e.isNumberedHeader=e.SPECIAL_ELEMENTS=e.getTagID=e.TAG_ID=e.TAG_NAMES=e.DOCUMENT_MODE=e.ATTRS=e.NS=void 0;var g;(function(A){A.HTML="http://www.w3.org/1999/xhtml",A.MATHML="http://www.w3.org/1998/Math/MathML",A.SVG="http://www.w3.org/2000/svg",A.XLINK="http://www.w3.org/1999/xlink",A.XML="http://www.w3.org/XML/1998/namespace",A.XMLNS="http://www.w3.org/2000/xmlns/"})(g=e.NS||(e.NS={})),function(A){A.TYPE="type",A.ACTION="action",A.ENCODING="encoding",A.PROMPT="prompt",A.NAME="name",A.COLOR="color",A.FACE="face",A.SIZE="size"}(e.ATTRS||(e.ATTRS={})),function(A){A.NO_QUIRKS="no-quirks",A.QUIRKS="quirks",A.LIMITED_QUIRKS="limited-quirks"}(e.DOCUMENT_MODE||(e.DOCUMENT_MODE={}));var I;(function(A){A.A="a",A.ADDRESS="address",A.ANNOTATION_XML="annotation-xml",A.APPLET="applet",A.AREA="area",A.ARTICLE="article",A.ASIDE="aside",A.B="b",A.BASE="base",A.BASEFONT="basefont",A.BGSOUND="bgsound",A.BIG="big",A.BLOCKQUOTE="blockquote",A.BODY="body",A.BR="br",A.BUTTON="button",A.CAPTION="caption",A.CENTER="center",A.CODE="code",A.COL="col",A.COLGROUP="colgroup",A.DD="dd",A.DESC="desc",A.DETAILS="details",A.DIALOG="dialog",A.DIR="dir",A.DIV="div",A.DL="dl",A.DT="dt",A.EM="em",A.EMBED="embed",A.FIELDSET="fieldset",A.FIGCAPTION="figcaption",A.FIGURE="figure",A.FONT="font",A.FOOTER="footer",A.FOREIGN_OBJECT="foreignObject",A.FORM="form",A.FRAME="frame",A.FRAMESET="frameset",A.H1="h1",A.H2="h2",A.H3="h3",A.H4="h4",A.H5="h5",A.H6="h6",A.HEAD="head",A.HEADER="header",A.HGROUP="hgroup",A.HR="hr",A.HTML="html",A.I="i",A.IMG="img",A.IMAGE="image",A.INPUT="input",A.IFRAME="iframe",A.KEYGEN="keygen",A.LABEL="label",A.LI="li",A.LINK="link",A.LISTING="listing",A.MAIN="main",A.MALIGNMARK="malignmark",A.MARQUEE="marquee",A.MATH="math",A.MENU="menu",A.META="meta",A.MGLYPH="mglyph",A.MI="mi",A.MO="mo",A.MN="mn",A.MS="ms",A.MTEXT="mtext",A.NAV="nav",A.NOBR="nobr",A.NOFRAMES="noframes",A.NOEMBED="noembed",A.NOSCRIPT="noscript",A.OBJECT="object",A.OL="ol",A.OPTGROUP="optgroup",A.OPTION="option",A.P="p",A.PARAM="param",A.PLAINTEXT="plaintext",A.PRE="pre",A.RB="rb",A.RP="rp",A.RT="rt",A.RTC="rtc",A.RUBY="ruby",A.S="s",A.SCRIPT="script",A.SECTION="section",A.SELECT="select",A.SOURCE="source",A.SMALL="small",A.SPAN="span",A.STRIKE="strike",A.STRONG="strong",A.STYLE="style",A.SUB="sub",A.SUMMARY="summary",A.SUP="sup",A.TABLE="table",A.TBODY="tbody",A.TEMPLATE="template",A.TEXTAREA="textarea",A.TFOOT="tfoot",A.TD="td",A.TH="th",A.THEAD="thead",A.TITLE="title",A.TR="tr",A.TRACK="track",A.TT="tt",A.U="u",A.UL="ul",A.SVG="svg",A.VAR="var",A.WBR="wbr",A.XMP="xmp"})(I=e.TAG_NAMES||(e.TAG_NAMES={}));var i;(function(A){A[A.UNKNOWN=0]="UNKNOWN",A[A.A=1]="A",A[A.ADDRESS=2]="ADDRESS",A[A.ANNOTATION_XML=3]="ANNOTATION_XML",A[A.APPLET=4]="APPLET",A[A.AREA=5]="AREA",A[A.ARTICLE=6]="ARTICLE",A[A.ASIDE=7]="ASIDE",A[A.B=8]="B",A[A.BASE=9]="BASE",A[A.BASEFONT=10]="BASEFONT",A[A.BGSOUND=11]="BGSOUND",A[A.BIG=12]="BIG",A[A.BLOCKQUOTE=13]="BLOCKQUOTE",A[A.BODY=14]="BODY",A[A.BR=15]="BR",A[A.BUTTON=16]="BUTTON",A[A.CAPTION=17]="CAPTION",A[A.CENTER=18]="CENTER",A[A.CODE=19]="CODE",A[A.COL=20]="COL",A[A.COLGROUP=21]="COLGROUP",A[A.DD=22]="DD",A[A.DESC=23]="DESC",A[A.DETAILS=24]="DETAILS",A[A.DIALOG=25]="DIALOG",A[A.DIR=26]="DIR",A[A.DIV=27]="DIV",A[A.DL=28]="DL",A[A.DT=29]="DT",A[A.EM=30]="EM",A[A.EMBED=31]="EMBED",A[A.FIELDSET=32]="FIELDSET",A[A.FIGCAPTION=33]="FIGCAPTION",A[A.FIGURE=34]="FIGURE",A[A.FONT=35]="FONT",A[A.FOOTER=36]="FOOTER",A[A.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",A[A.FORM=38]="FORM",A[A.FRAME=39]="FRAME",A[A.FRAMESET=40]="FRAMESET",A[A.H1=41]="H1",A[A.H2=42]="H2",A[A.H3=43]="H3",A[A.H4=44]="H4",A[A.H5=45]="H5",A[A.H6=46]="H6",A[A.HEAD=47]="HEAD",A[A.HEADER=48]="HEADER",A[A.HGROUP=49]="HGROUP",A[A.HR=50]="HR",A[A.HTML=51]="HTML",A[A.I=52]="I",A[A.IMG=53]="IMG",A[A.IMAGE=54]="IMAGE",A[A.INPUT=55]="INPUT",A[A.IFRAME=56]="IFRAME",A[A.KEYGEN=57]="KEYGEN",A[A.LABEL=58]="LABEL",A[A.LI=59]="LI",A[A.LINK=60]="LINK",A[A.LISTING=61]="LISTING",A[A.MAIN=62]="MAIN",A[A.MALIGNMARK=63]="MALIGNMARK",A[A.MARQUEE=64]="MARQUEE",A[A.MATH=65]="MATH",A[A.MENU=66]="MENU",A[A.META=67]="META",A[A.MGLYPH=68]="MGLYPH",A[A.MI=69]="MI",A[A.MO=70]="MO",A[A.MN=71]="MN",A[A.MS=72]="MS",A[A.MTEXT=73]="MTEXT",A[A.NAV=74]="NAV",A[A.NOBR=75]="NOBR",A[A.NOFRAMES=76]="NOFRAMES",A[A.NOEMBED=77]="NOEMBED",A[A.NOSCRIPT=78]="NOSCRIPT",A[A.OBJECT=79]="OBJECT",A[A.OL=80]="OL",A[A.OPTGROUP=81]="OPTGROUP",A[A.OPTION=82]="OPTION",A[A.P=83]="P",A[A.PARAM=84]="PARAM",A[A.PLAINTEXT=85]="PLAINTEXT",A[A.PRE=86]="PRE",A[A.RB=87]="RB",A[A.RP=88]="RP",A[A.RT=89]="RT",A[A.RTC=90]="RTC",A[A.RUBY=91]="RUBY",A[A.S=92]="S",A[A.SCRIPT=93]="SCRIPT",A[A.SECTION=94]="SECTION",A[A.SELECT=95]="SELECT",A[A.SOURCE=96]="SOURCE",A[A.SMALL=97]="SMALL",A[A.SPAN=98]="SPAN",A[A.STRIKE=99]="STRIKE",A[A.STRONG=100]="STRONG",A[A.STYLE=101]="STYLE",A[A.SUB=102]="SUB",A[A.SUMMARY=103]="SUMMARY",A[A.SUP=104]="SUP",A[A.TABLE=105]="TABLE",A[A.TBODY=106]="TBODY",A[A.TEMPLATE=107]="TEMPLATE",A[A.TEXTAREA=108]="TEXTAREA",A[A.TFOOT=109]="TFOOT",A[A.TD=110]="TD",A[A.TH=111]="TH",A[A.THEAD=112]="THEAD",A[A.TITLE=113]="TITLE",A[A.TR=114]="TR",A[A.TRACK=115]="TRACK",A[A.TT=116]="TT",A[A.U=117]="U",A[A.UL=118]="UL",A[A.SVG=119]="SVG",A[A.VAR=120]="VAR",A[A.WBR=121]="WBR",A[A.XMP=122]="XMP"})(i=e.TAG_ID||(e.TAG_ID={}));const n=new Map([[I.A,i.A],[I.ADDRESS,i.ADDRESS],[I.ANNOTATION_XML,i.ANNOTATION_XML],[I.APPLET,i.APPLET],[I.AREA,i.AREA],[I.ARTICLE,i.ARTICLE],[I.ASIDE,i.ASIDE],[I.B,i.B],[I.BASE,i.BASE],[I.BASEFONT,i.BASEFONT],[I.BGSOUND,i.BGSOUND],[I.BIG,i.BIG],[I.BLOCKQUOTE,i.BLOCKQUOTE],[I.BODY,i.BODY],[I.BR,i.BR],[I.BUTTON,i.BUTTON],[I.CAPTION,i.CAPTION],[I.CENTER,i.CENTER],[I.CODE,i.CODE],[I.COL,i.COL],[I.COLGROUP,i.COLGROUP],[I.DD,i.DD],[I.DESC,i.DESC],[I.DETAILS,i.DETAILS],[I.DIALOG,i.DIALOG],[I.DIR,i.DIR],[I.DIV,i.DIV],[I.DL,i.DL],[I.DT,i.DT],[I.EM,i.EM],[I.EMBED,i.EMBED],[I.FIELDSET,i.FIELDSET],[I.FIGCAPTION,i.FIGCAPTION],[I.FIGURE,i.FIGURE],[I.FONT,i.FONT],[I.FOOTER,i.FOOTER],[I.FOREIGN_OBJECT,i.FOREIGN_OBJECT],[I.FORM,i.FORM],[I.FRAME,i.FRAME],[I.FRAMESET,i.FRAMESET],[I.H1,i.H1],[I.H2,i.H2],[I.H3,i.H3],[I.H4,i.H4],[I.H5,i.H5],[I.H6,i.H6],[I.HEAD,i.HEAD],[I.HEADER,i.HEADER],[I.HGROUP,i.HGROUP],[I.HR,i.HR],[I.HTML,i.HTML],[I.I,i.I],[I.IMG,i.IMG],[I.IMAGE,i.IMAGE],[I.INPUT,i.INPUT],[I.IFRAME,i.IFRAME],[I.KEYGEN,i.KEYGEN],[I.LABEL,i.LABEL],[I.LI,i.LI],[I.LINK,i.LINK],[I.LISTING,i.LISTING],[I.MAIN,i.MAIN],[I.MALIGNMARK,i.MALIGNMARK],[I.MARQUEE,i.MARQUEE],[I.MATH,i.MATH],[I.MENU,i.MENU],[I.META,i.META],[I.MGLYPH,i.MGLYPH],[I.MI,i.MI],[I.MO,i.MO],[I.MN,i.MN],[I.MS,i.MS],[I.MTEXT,i.MTEXT],[I.NAV,i.NAV],[I.NOBR,i.NOBR],[I.NOFRAMES,i.NOFRAMES],[I.NOEMBED,i.NOEMBED],[I.NOSCRIPT,i.NOSCRIPT],[I.OBJECT,i.OBJECT],[I.OL,i.OL],[I.OPTGROUP,i.OPTGROUP],[I.OPTION,i.OPTION],[I.P,i.P],[I.PARAM,i.PARAM],[I.PLAINTEXT,i.PLAINTEXT],[I.PRE,i.PRE],[I.RB,i.RB],[I.RP,i.RP],[I.RT,i.RT],[I.RTC,i.RTC],[I.RUBY,i.RUBY],[I.S,i.S],[I.SCRIPT,i.SCRIPT],[I.SECTION,i.SECTION],[I.SELECT,i.SELECT],[I.SOURCE,i.SOURCE],[I.SMALL,i.SMALL],[I.SPAN,i.SPAN],[I.STRIKE,i.STRIKE],[I.STRONG,i.STRONG],[I.STYLE,i.STYLE],[I.SUB,i.SUB],[I.SUMMARY,i.SUMMARY],[I.SUP,i.SUP],[I.TABLE,i.TABLE],[I.TBODY,i.TBODY],[I.TEMPLATE,i.TEMPLATE],[I.TEXTAREA,i.TEXTAREA],[I.TFOOT,i.TFOOT],[I.TD,i.TD],[I.TH,i.TH],[I.THEAD,i.THEAD],[I.TITLE,i.TITLE],[I.TR,i.TR],[I.TRACK,i.TRACK],[I.TT,i.TT],[I.U,i.U],[I.UL,i.UL],[I.SVG,i.SVG],[I.VAR,i.VAR],[I.WBR,i.WBR],[I.XMP,i.XMP]]);function C(A){var l;return(l=n.get(A))!==null&&l!==void 0?l:i.UNKNOWN}e.getTagID=C;const r=i;e.SPECIAL_ELEMENTS={[g.HTML]:new Set([r.ADDRESS,r.APPLET,r.AREA,r.ARTICLE,r.ASIDE,r.BASE,r.BASEFONT,r.BGSOUND,r.BLOCKQUOTE,r.BODY,r.BR,r.BUTTON,r.CAPTION,r.CENTER,r.COL,r.COLGROUP,r.DD,r.DETAILS,r.DIR,r.DIV,r.DL,r.DT,r.EMBED,r.FIELDSET,r.FIGCAPTION,r.FIGURE,r.FOOTER,r.FORM,r.FRAME,r.FRAMESET,r.H1,r.H2,r.H3,r.H4,r.H5,r.H6,r.HEAD,r.HEADER,r.HGROUP,r.HR,r.HTML,r.IFRAME,r.IMG,r.INPUT,r.LI,r.LINK,r.LISTING,r.MAIN,r.MARQUEE,r.MENU,r.META,r.NAV,r.NOEMBED,r.NOFRAMES,r.NOSCRIPT,r.OBJECT,r.OL,r.P,r.PARAM,r.PLAINTEXT,r.PRE,r.SCRIPT,r.SECTION,r.SELECT,r.SOURCE,r.STYLE,r.SUMMARY,r.TABLE,r.TBODY,r.TD,r.TEMPLATE,r.TEXTAREA,r.TFOOT,r.TH,r.THEAD,r.TITLE,r.TR,r.TRACK,r.UL,r.WBR,r.XMP]),[g.MATHML]:new Set([r.MI,r.MO,r.MN,r.MS,r.MTEXT,r.ANNOTATION_XML]),[g.SVG]:new Set([r.TITLE,r.FOREIGN_OBJECT,r.DESC]),[g.XLINK]:new Set,[g.XML]:new Set,[g.XMLNS]:new Set};function o(A){return A===r.H1||A===r.H2||A===r.H3||A===r.H4||A===r.H5||A===r.H6}e.isNumberedHeader=o;const a=new Set([I.STYLE,I.SCRIPT,I.XMP,I.IFRAME,I.NOEMBED,I.NOFRAMES,I.PLAINTEXT]);function s(A,l){return a.has(A)||l&&A===I.NOSCRIPT}e.hasUnescapedText=s})(nl);function R0t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function lCe(e,g){for(var I=0;I=Ae.CODE_POINTS.DIGIT_0&&e<=Ae.CODE_POINTS.DIGIT_9}function QZ(e){return e>=Ae.CODE_POINTS.LATIN_CAPITAL_A&&e<=Ae.CODE_POINTS.LATIN_CAPITAL_Z}function N0t(e){return e>=Ae.CODE_POINTS.LATIN_SMALL_A&&e<=Ae.CODE_POINTS.LATIN_SMALL_Z}function Hl(e){return N0t(e)||QZ(e)}function Pz(e){return Hl(e)||$G(e)}function OSe(e){return e>=Ae.CODE_POINTS.LATIN_CAPITAL_A&&e<=Ae.CODE_POINTS.LATIN_CAPITAL_F}function _Se(e){return e>=Ae.CODE_POINTS.LATIN_SMALL_A&&e<=Ae.CODE_POINTS.LATIN_SMALL_F}function k0t(e){return $G(e)||OSe(e)||_Se(e)}function bV(e){return e+32}function LSe(e){return e===Ae.CODE_POINTS.SPACE||e===Ae.CODE_POINTS.LINE_FEED||e===Ae.CODE_POINTS.TABULATION||e===Ae.CODE_POINTS.FORM_FEED}function Y0t(e){return e===Ae.CODE_POINTS.EQUALS_SIGN||Pz(e)}function cCe(e){return LSe(e)||e===Ae.CODE_POINTS.SOLIDUS||e===Ae.CODE_POINTS.GREATER_THAN_SIGN}let K0t=function(){function e(g,I){R0t(this,e),this.options=g,this.handler=I,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Ze.DATA,this.returnState=Ze.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new H0t.Preprocessor(I),this.currentLocation=this.getCurrentLocation(-1)}return V0t(e,[{key:"_err",value:function(I){var i,n;(n=(i=this.handler).onParseError)===null||n===void 0||n.call(i,this.preprocessor.getError(I))}},{key:"getCurrentLocation",value:function(I){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-I,startOffset:this.preprocessor.offset-I,endLine:-1,endCol:-1,endOffset:-1}:null}},{key:"_runParsingLoop",value:function(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const I=this._consume();this._ensureHibernation()||this._callState(I)}this.inLoop=!1}}},{key:"pause",value:function(){this.paused=!0}},{key:"resume",value:function(I){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||I==null||I())}},{key:"write",value:function(I,i,n){this.active=!0,this.preprocessor.write(I,i),this._runParsingLoop(),this.paused||n==null||n()}},{key:"insertHtmlAtCurrentPos",value:function(I){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(I),this._runParsingLoop()}},{key:"_ensureHibernation",value:function(){return this.preprocessor.endOfChunkHit?(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0):!1}},{key:"_consume",value:function(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}},{key:"_unconsume",value:function(I){this.consumedAfterSnapshot-=I,this.preprocessor.retreat(I)}},{key:"_reconsumeInState",value:function(I,i){this.state=I,this._callState(i)}},{key:"_advanceBy",value:function(I){this.consumedAfterSnapshot+=I;for(let i=0;i0&&this._err(qe.ERR.endTagWithAttributes),I.selfClosing&&this._err(qe.ERR.endTagWithTrailingSolidus),this.handler.onEndTag(I)),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentComment",value:function(I){this.prepareToken(I),this.handler.onComment(I),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentDoctype",value:function(I){this.prepareToken(I),this.handler.onDoctype(I),this.preprocessor.dropParsedChunk()}},{key:"_emitCurrentCharacterToken",value:function(I){if(this.currentCharacterToken){switch(I&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=I.startLine,this.currentCharacterToken.location.endCol=I.startCol,this.currentCharacterToken.location.endOffset=I.startOffset),this.currentCharacterToken.type){case bC.TokenType.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case bC.TokenType.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case bC.TokenType.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}},{key:"_emitEOFToken",value:function(){const I=this.getCurrentLocation(0);I&&(I.endLine=I.startLine,I.endCol=I.startCol,I.endOffset=I.startOffset),this._emitCurrentCharacterToken(I),this.handler.onEof({type:bC.TokenType.EOF,location:I}),this.active=!1}},{key:"_appendCharToCurrentCharacterToken",value:function(I,i){if(this.currentCharacterToken)if(this.currentCharacterToken.type!==I)this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();else{this.currentCharacterToken.chars+=i;return}this._createCharacterToken(I,i)}},{key:"_emitCodePoint",value:function(I){const i=LSe(I)?bC.TokenType.WHITESPACE_CHARACTER:I===Ae.CODE_POINTS.NULL?bC.TokenType.NULL_CHARACTER:bC.TokenType.CHARACTER;this._appendCharToCurrentCharacterToken(i,String.fromCodePoint(I))}},{key:"_emitChars",value:function(I){this._appendCharToCurrentCharacterToken(bC.TokenType.CHARACTER,I)}},{key:"_matchNamedCharacterReference",value:function(I){let i=null,n=0,C=!1;for(let r=0,o=Wa.htmlDecodeTree[0];r>=0&&(r=(0,Wa.determineBranch)(Wa.htmlDecodeTree,o,r+1,I),!(r<0));I=this._consume()){n+=1,o=Wa.htmlDecodeTree[r];const a=o&Wa.BinTrieFlags.VALUE_LENGTH;if(a){const s=(a>>14)-1;if(I!==Ae.CODE_POINTS.SEMICOLON&&this._isCharacterReferenceInAttribute()&&Y0t(this.preprocessor.peek(1))?(i=[Ae.CODE_POINTS.AMPERSAND],r+=s):(i=s===0?[Wa.htmlDecodeTree[r]&~Wa.BinTrieFlags.VALUE_LENGTH]:s===1?[Wa.htmlDecodeTree[++r]]:[Wa.htmlDecodeTree[++r],Wa.htmlDecodeTree[++r]],n=0,C=I!==Ae.CODE_POINTS.SEMICOLON),s===0){this._consume();break}}}return this._unconsume(n),C&&!this.preprocessor.endOfChunkHit&&this._err(qe.ERR.missingSemicolonAfterCharacterReference),this._unconsume(1),i}},{key:"_isCharacterReferenceInAttribute",value:function(){return this.returnState===Ze.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Ze.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Ze.ATTRIBUTE_VALUE_UNQUOTED}},{key:"_flushCodePointConsumedAsCharacterReference",value:function(I){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(I):this._emitCodePoint(I)}},{key:"_callState",value:function(I){switch(this.state){case Ze.DATA:{this._stateData(I);break}case Ze.RCDATA:{this._stateRcdata(I);break}case Ze.RAWTEXT:{this._stateRawtext(I);break}case Ze.SCRIPT_DATA:{this._stateScriptData(I);break}case Ze.PLAINTEXT:{this._statePlaintext(I);break}case Ze.TAG_OPEN:{this._stateTagOpen(I);break}case Ze.END_TAG_OPEN:{this._stateEndTagOpen(I);break}case Ze.TAG_NAME:{this._stateTagName(I);break}case Ze.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(I);break}case Ze.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(I);break}case Ze.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(I);break}case Ze.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(I);break}case Ze.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(I);break}case Ze.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(I);break}case Ze.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(I);break}case Ze.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(I);break}case Ze.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(I);break}case Ze.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(I);break}case Ze.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(I);break}case Ze.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(I);break}case Ze.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(I);break}case Ze.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(I);break}case Ze.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(I);break}case Ze.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(I);break}case Ze.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(I);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(I);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(I);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(I);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(I);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(I);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(I);break}case Ze.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(I);break}case Ze.ATTRIBUTE_NAME:{this._stateAttributeName(I);break}case Ze.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(I);break}case Ze.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(I);break}case Ze.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(I);break}case Ze.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(I);break}case Ze.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(I);break}case Ze.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(I);break}case Ze.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(I);break}case Ze.BOGUS_COMMENT:{this._stateBogusComment(I);break}case Ze.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(I);break}case Ze.COMMENT_START:{this._stateCommentStart(I);break}case Ze.COMMENT_START_DASH:{this._stateCommentStartDash(I);break}case Ze.COMMENT:{this._stateComment(I);break}case Ze.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(I);break}case Ze.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(I);break}case Ze.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(I);break}case Ze.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(I);break}case Ze.COMMENT_END_DASH:{this._stateCommentEndDash(I);break}case Ze.COMMENT_END:{this._stateCommentEnd(I);break}case Ze.COMMENT_END_BANG:{this._stateCommentEndBang(I);break}case Ze.DOCTYPE:{this._stateDoctype(I);break}case Ze.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(I);break}case Ze.DOCTYPE_NAME:{this._stateDoctypeName(I);break}case Ze.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(I);break}case Ze.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(I);break}case Ze.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(I);break}case Ze.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(I);break}case Ze.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(I);break}case Ze.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(I);break}case Ze.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(I);break}case Ze.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(I);break}case Ze.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(I);break}case Ze.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(I);break}case Ze.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(I);break}case Ze.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(I);break}case Ze.BOGUS_DOCTYPE:{this._stateBogusDoctype(I);break}case Ze.CDATA_SECTION:{this._stateCdataSection(I);break}case Ze.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(I);break}case Ze.CDATA_SECTION_END:{this._stateCdataSectionEnd(I);break}case Ze.CHARACTER_REFERENCE:{this._stateCharacterReference(I);break}case Ze.NAMED_CHARACTER_REFERENCE:{this._stateNamedCharacterReference(I);break}case Ze.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(I);break}case Ze.NUMERIC_CHARACTER_REFERENCE:{this._stateNumericCharacterReference(I);break}case Ze.HEXADEMICAL_CHARACTER_REFERENCE_START:{this._stateHexademicalCharacterReferenceStart(I);break}case Ze.HEXADEMICAL_CHARACTER_REFERENCE:{this._stateHexademicalCharacterReference(I);break}case Ze.DECIMAL_CHARACTER_REFERENCE:{this._stateDecimalCharacterReference(I);break}case Ze.NUMERIC_CHARACTER_REFERENCE_END:{this._stateNumericCharacterReferenceEnd(I);break}default:throw new Error("Unknown state")}}},{key:"_stateData",value:function(I){switch(I){case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.TAG_OPEN;break}case Ae.CODE_POINTS.AMPERSAND:{this.returnState=Ze.DATA,this.state=Ze.CHARACTER_REFERENCE;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitCodePoint(I);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateRcdata",value:function(I){switch(I){case Ae.CODE_POINTS.AMPERSAND:{this.returnState=Ze.RCDATA,this.state=Ze.CHARACTER_REFERENCE;break}case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.RCDATA_LESS_THAN_SIGN;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateRawtext",value:function(I){switch(I){case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.RAWTEXT_LESS_THAN_SIGN;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateScriptData",value:function(I){switch(I){case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.SCRIPT_DATA_LESS_THAN_SIGN;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_statePlaintext",value:function(I){switch(I){case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateTagOpen",value:function(I){if(Hl(I))this._createStartTagToken(),this.state=Ze.TAG_NAME,this._stateTagName(I);else switch(I){case Ae.CODE_POINTS.EXCLAMATION_MARK:{this.state=Ze.MARKUP_DECLARATION_OPEN;break}case Ae.CODE_POINTS.SOLIDUS:{this.state=Ze.END_TAG_OPEN;break}case Ae.CODE_POINTS.QUESTION_MARK:{this._err(qe.ERR.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Ze.BOGUS_COMMENT,this._stateBogusComment(I);break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(qe.ERR.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Ze.DATA,this._stateData(I)}}},{key:"_stateEndTagOpen",value:function(I){if(Hl(I))this._createEndTagToken(),this.state=Ze.TAG_NAME,this._stateTagName(I);else switch(I){case Ae.CODE_POINTS.GREATER_THAN_SIGN:{this._err(qe.ERR.missingEndTagName),this.state=Ze.DATA;break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofBeforeTagName),this._emitChars("");break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this.state=Ze.SCRIPT_DATA_ESCAPED,this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ze.SCRIPT_DATA_ESCAPED,this._emitCodePoint(I)}}},{key:"_stateScriptDataEscapedLessThanSign",value:function(I){I===Ae.CODE_POINTS.SOLIDUS?this.state=Ze.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Hl(I)?(this._emitChars("<"),this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(I)):(this._emitChars("<"),this.state=Ze.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(I))}},{key:"_stateScriptDataEscapedEndTagOpen",value:function(I){Hl(I)?(this.state=Ze.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(I)):(this._emitChars("");break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(I)}}},{key:"_stateScriptDataDoubleEscapedLessThanSign",value:function(I){I===Ae.CODE_POINTS.SOLIDUS?(this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(I))}},{key:"_stateScriptDataDoubleEscapeEnd",value:function(I){if(this.preprocessor.startsWith(Ae.SEQUENCES.SCRIPT,!1)&&cCe(this.preprocessor.peek(Ae.SEQUENCES.SCRIPT.length))){this._emitCodePoint(I);for(let i=0;i1114111)this._err(qe.ERR.characterReferenceOutsideUnicodeRange),this.charRefCode=Ae.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,Ae.isSurrogate)(this.charRefCode))this._err(qe.ERR.surrogateCharacterReference),this.charRefCode=Ae.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,Ae.isUndefinedCodePoint)(this.charRefCode))this._err(qe.ERR.noncharacterCharacterReference);else if((0,Ae.isControlCodePoint)(this.charRefCode)||this.charRefCode===Ae.CODE_POINTS.CARRIAGE_RETURN){this._err(qe.ERR.controlCharacterReference);const i=T0t.get(this.charRefCode);i!==void 0&&(this.charRefCode=i)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,I)}}]),e}();uh.Tokenizer=K0t;var Ik={};function F0t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uCe(e,g){for(var I=0;I0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(I,!0)}},{key:"replace",value:function(I,i){const n=this._indexOf(I);this.items[n]=i,n===this.stackTop&&(this.current=i)}},{key:"insertAfter",value:function(I,i,n){const C=this._indexOf(I)+1;this.items.splice(C,0,i),this.tagIDs.splice(C,0,n),this.stackTop++,C===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,C===this.stackTop)}},{key:"popUntilTagNamePopped",value:function(I){let i=this.stackTop+1;do i=this.tagIDs.lastIndexOf(I,i-1);while(i>0&&this.treeAdapter.getNamespaceURI(this.items[i])!==it.NS.HTML);this.shortenToLength(i<0?0:i)}},{key:"shortenToLength",value:function(I){for(;this.stackTop>=I;){const i=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(i,this.stackTop=0;n--)if(I.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===i)return n;return-1}},{key:"clearBackTo",value:function(I,i){const n=this._indexOfTagNames(I,i);this.shortenToLength(n+1)}},{key:"clearBackToTableContext",value:function(){this.clearBackTo(J0t,it.NS.HTML)}},{key:"clearBackToTableBodyContext",value:function(){this.clearBackTo(P0t,it.NS.HTML)}},{key:"clearBackToTableRowContext",value:function(){this.clearBackTo(z0t,it.NS.HTML)}},{key:"remove",value:function(I){const i=this._indexOf(I);i>=0&&(i===this.stackTop?this.pop():(this.items.splice(i,1),this.tagIDs.splice(i,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(I,!1)))}},{key:"tryPeekProperlyNestedBodyElement",value:function(){return this.stackTop>=1&&this.tagIDs[1]===it.TAG_ID.BODY?this.items[1]:null}},{key:"contains",value:function(I){return this._indexOf(I)>-1}},{key:"getCommonAncestor",value:function(I){const i=this._indexOf(I)-1;return i>=0?this.items[i]:null}},{key:"isRootHtmlElementCurrent",value:function(){return this.stackTop===0&&this.tagIDs[0]===it.TAG_ID.HTML}},{key:"hasInScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i],C=this.treeAdapter.getNamespaceURI(this.items[i]);if(n===I&&C===it.NS.HTML)return!0;if(yV.get(n)===C)return!1}return!0}},{key:"hasNumberedHeaderInScope",value:function(){for(let I=this.stackTop;I>=0;I--){const i=this.tagIDs[I],n=this.treeAdapter.getNamespaceURI(this.items[I]);if((0,it.isNumberedHeader)(i)&&n===it.NS.HTML)return!0;if(yV.get(i)===n)return!1}return!0}},{key:"hasInListItemScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i],C=this.treeAdapter.getNamespaceURI(this.items[i]);if(n===I&&C===it.NS.HTML)return!0;if((n===it.TAG_ID.UL||n===it.TAG_ID.OL)&&C===it.NS.HTML||yV.get(n)===C)return!1}return!0}},{key:"hasInButtonScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i],C=this.treeAdapter.getNamespaceURI(this.items[i]);if(n===I&&C===it.NS.HTML)return!0;if(n===it.TAG_ID.BUTTON&&C===it.NS.HTML||yV.get(n)===C)return!1}return!0}},{key:"hasInTableScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i];if(this.treeAdapter.getNamespaceURI(this.items[i])===it.NS.HTML){if(n===I)return!0;if(n===it.TAG_ID.TABLE||n===it.TAG_ID.TEMPLATE||n===it.TAG_ID.HTML)return!1}}return!0}},{key:"hasTableBodyContextInTableScope",value:function(){for(let I=this.stackTop;I>=0;I--){const i=this.tagIDs[I];if(this.treeAdapter.getNamespaceURI(this.items[I])===it.NS.HTML){if(i===it.TAG_ID.TBODY||i===it.TAG_ID.THEAD||i===it.TAG_ID.TFOOT)return!0;if(i===it.TAG_ID.TABLE||i===it.TAG_ID.HTML)return!1}}return!0}},{key:"hasInSelectScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i];if(this.treeAdapter.getNamespaceURI(this.items[i])===it.NS.HTML){if(n===I)return!0;if(n!==it.TAG_ID.OPTION&&n!==it.TAG_ID.OPTGROUP)return!1}}return!0}},{key:"generateImpliedEndTags",value:function(){for(;USe.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsThoroughly",value:function(){for(;dCe.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsWithExclusion",value:function(I){for(;this.currentTagId!==I&&dCe.has(this.currentTagId);)this.pop()}}]),e}();Ik.OpenElementStack=_0t;var QSe={};(function(e){function g(A,l){if(!(A instanceof l))throw new TypeError("Cannot call a class as a function")}function I(A,l){for(var c=0;c[f.name,f.value]));let m=0;for(let f=0;fh.get(p.name)===p.value)&&(m+=1,m>=r&&this.entries.splice(b.idx,1))}}},{key:"insertMarker",value:function(){this.entries.unshift(a)}},{key:"pushElement",value:function(c,u){this._ensureNoahArkCondition(c),this.entries.unshift({type:o.Element,element:c,token:u})}},{key:"insertElementAfterBookmark",value:function(c,u){const d=this.entries.indexOf(this.bookmark);this.entries.splice(d,0,{type:o.Element,element:c,token:u})}},{key:"removeEntry",value:function(c){const u=this.entries.indexOf(c);u>=0&&this.entries.splice(u,1)}},{key:"clearToLastMarker",value:function(){const c=this.entries.indexOf(a);c>=0?this.entries.splice(0,c+1):this.entries.length=0}},{key:"getElementEntryInScopeWithTagName",value:function(c){const u=this.entries.find(d=>d.type===o.Marker||this.treeAdapter.getTagName(d.element)===c);return u&&u.type===o.Element?u:null}},{key:"getElementEntry",value:function(c){return this.entries.find(u=>u.type===o.Element&&u.element===c)}}]),A}();e.FormattingElementList=s})(QSe);var ik={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.defaultTreeAdapter=void 0;const g=nl;function I(i){return{nodeName:"#text",value:i,parentNode:null}}e.defaultTreeAdapter={createDocument(){return{nodeName:"#document",mode:g.DOCUMENT_MODE.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(i,n,C){return{nodeName:i,tagName:i,attrs:C,namespaceURI:n,childNodes:[],parentNode:null}},createCommentNode(i){return{nodeName:"#comment",data:i,parentNode:null}},appendChild(i,n){i.childNodes.push(n),n.parentNode=i},insertBefore(i,n,C){const r=i.childNodes.indexOf(C);i.childNodes.splice(r,0,n),n.parentNode=i},setTemplateContent(i,n){i.content=n},getTemplateContent(i){return i.content},setDocumentType(i,n,C,r){const o=i.childNodes.find(a=>a.nodeName==="#documentType");if(o)o.name=n,o.publicId=C,o.systemId=r;else{const a={nodeName:"#documentType",name:n,publicId:C,systemId:r,parentNode:null};e.defaultTreeAdapter.appendChild(i,a)}},setDocumentMode(i,n){i.mode=n},getDocumentMode(i){return i.mode},detachNode(i){if(i.parentNode){const n=i.parentNode.childNodes.indexOf(i);i.parentNode.childNodes.splice(n,1),i.parentNode=null}},insertText(i,n){if(i.childNodes.length>0){const C=i.childNodes[i.childNodes.length-1];if(e.defaultTreeAdapter.isTextNode(C)){C.value+=n;return}}e.defaultTreeAdapter.appendChild(i,I(n))},insertTextBefore(i,n,C){const r=i.childNodes[i.childNodes.indexOf(C)-1];r&&e.defaultTreeAdapter.isTextNode(r)?r.value+=n:e.defaultTreeAdapter.insertBefore(i,I(n),C)},adoptAttributes(i,n){const C=new Set(i.attrs.map(r=>r.name));for(let r=0;re.startsWith(I))}function q0t(e){return e.name===jSe&&e.publicId===null&&(e.systemId===null||e.systemId===L0t)}Ob.isConforming=q0t;function eyt(e){if(e.name!==jSe)return Jm.DOCUMENT_MODE.QUIRKS;const{systemId:g}=e;if(g&&g.toLowerCase()===U0t)return Jm.DOCUMENT_MODE.QUIRKS;let{publicId:I}=e;if(I!==null){if(I=I.toLowerCase(),j0t.has(I))return Jm.DOCUMENT_MODE.QUIRKS;let i=g===null?Q0t:$Se;if(hCe(I,i))return Jm.DOCUMENT_MODE.QUIRKS;if(i=g===null?qSe:$0t,hCe(I,i))return Jm.DOCUMENT_MODE.LIMITED_QUIRKS}return Jm.DOCUMENT_MODE.NO_QUIRKS}Ob.getDocumentMode=eyt;var k4={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isIntegrationPoint=e.adjustTokenSVGTagName=e.adjustTokenXMLAttrs=e.adjustTokenSVGAttrs=e.adjustTokenMathMLAttrs=e.causesExit=e.SVG_TAG_NAMES_ADJUSTMENT_MAP=void 0;const g=nl,I={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},i="definitionurl",n="definitionURL",C=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(m=>[m.toLowerCase(),m])),r=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:g.NS.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:g.NS.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:g.NS.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:g.NS.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:g.NS.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:g.NS.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:g.NS.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:g.NS.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:g.NS.XML}],["xml:space",{prefix:"xml",name:"space",namespace:g.NS.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:g.NS.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:g.NS.XMLNS}]]);e.SVG_TAG_NAMES_ADJUSTMENT_MAP=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(m=>[m.toLowerCase(),m]));const o=new Set([g.TAG_ID.B,g.TAG_ID.BIG,g.TAG_ID.BLOCKQUOTE,g.TAG_ID.BODY,g.TAG_ID.BR,g.TAG_ID.CENTER,g.TAG_ID.CODE,g.TAG_ID.DD,g.TAG_ID.DIV,g.TAG_ID.DL,g.TAG_ID.DT,g.TAG_ID.EM,g.TAG_ID.EMBED,g.TAG_ID.H1,g.TAG_ID.H2,g.TAG_ID.H3,g.TAG_ID.H4,g.TAG_ID.H5,g.TAG_ID.H6,g.TAG_ID.HEAD,g.TAG_ID.HR,g.TAG_ID.I,g.TAG_ID.IMG,g.TAG_ID.LI,g.TAG_ID.LISTING,g.TAG_ID.MENU,g.TAG_ID.META,g.TAG_ID.NOBR,g.TAG_ID.OL,g.TAG_ID.P,g.TAG_ID.PRE,g.TAG_ID.RUBY,g.TAG_ID.S,g.TAG_ID.SMALL,g.TAG_ID.SPAN,g.TAG_ID.STRONG,g.TAG_ID.STRIKE,g.TAG_ID.SUB,g.TAG_ID.SUP,g.TAG_ID.TABLE,g.TAG_ID.TT,g.TAG_ID.U,g.TAG_ID.UL,g.TAG_ID.VAR]);function a(m){const f=m.tagID;return f===g.TAG_ID.FONT&&m.attrs.some(({name:p})=>p===g.ATTRS.COLOR||p===g.ATTRS.SIZE||p===g.ATTRS.FACE)||o.has(f)}e.causesExit=a;function s(m){for(let f=0;f0&&this._setContextModes(I,i)}},{key:"onItemPop",value:function(I,i){var n,C;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(I,this.currentToken),(C=(n=this.treeAdapter).onItemPop)===null||C===void 0||C.call(n,I,this.openElements.current),i){let r,o;this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,o=this.fragmentContextID):{current:r,currentTagId:o}=this.openElements,this._setContextModes(r,o)}}},{key:"_setContextModes",value:function(I,i){const n=I===this.document||this.treeAdapter.getNamespaceURI(I)===M.NS.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(i,I)}},{key:"_switchToTextParsing",value:function(I,i){this._insertElement(I,M.NS.HTML),this.tokenizer.state=i,this.originalInsertionMode=this.insertionMode,this.insertionMode=Te.TEXT}},{key:"switchToPlaintextParsing",value:function(){this.insertionMode=Te.TEXT,this.originalInsertionMode=Te.IN_BODY,this.tokenizer.state=Qn.TokenizerMode.PLAINTEXT}},{key:"_getAdjustedCurrentElement",value:function(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}},{key:"_findFormInFragmentContext",value:function(){let I=this.fragmentContext;for(;I;){if(this.treeAdapter.getTagName(I)===M.TAG_NAMES.FORM){this.formElement=I;break}I=this.treeAdapter.getParentNode(I)}}},{key:"_initTokenizerForFragmentParsing",value:function(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==M.NS.HTML))switch(this.fragmentContextID){case M.TAG_ID.TITLE:case M.TAG_ID.TEXTAREA:{this.tokenizer.state=Qn.TokenizerMode.RCDATA;break}case M.TAG_ID.STYLE:case M.TAG_ID.XMP:case M.TAG_ID.IFRAME:case M.TAG_ID.NOEMBED:case M.TAG_ID.NOFRAMES:case M.TAG_ID.NOSCRIPT:{this.tokenizer.state=Qn.TokenizerMode.RAWTEXT;break}case M.TAG_ID.SCRIPT:{this.tokenizer.state=Qn.TokenizerMode.SCRIPT_DATA;break}case M.TAG_ID.PLAINTEXT:{this.tokenizer.state=Qn.TokenizerMode.PLAINTEXT;break}}}},{key:"_setDocumentType",value:function(I){const i=I.name||"",n=I.publicId||"",C=I.systemId||"";if(this.treeAdapter.setDocumentType(this.document,i,n,C),I.location){const o=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));o&&this.treeAdapter.setNodeSourceCodeLocation(o,I.location)}}},{key:"_attachElementToTree",value:function(I,i){if(this.options.sourceCodeLocationInfo){const n=i&&Object.assign(Object.assign({},i),{startTag:i});this.treeAdapter.setNodeSourceCodeLocation(I,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(I);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n,I)}}},{key:"_appendElement",value:function(I,i){const n=this.treeAdapter.createElement(I.tagName,i,I.attrs);this._attachElementToTree(n,I.location)}},{key:"_insertElement",value:function(I,i){const n=this.treeAdapter.createElement(I.tagName,i,I.attrs);this._attachElementToTree(n,I.location),this.openElements.push(n,I.tagID)}},{key:"_insertFakeElement",value:function(I,i){const n=this.treeAdapter.createElement(I,M.NS.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,i)}},{key:"_insertTemplate",value:function(I){const i=this.treeAdapter.createElement(I.tagName,M.NS.HTML,I.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(i,n),this._attachElementToTree(i,I.location),this.openElements.push(i,I.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}},{key:"_insertFakeRootElement",value:function(){const I=this.treeAdapter.createElement(M.TAG_NAMES.HTML,M.NS.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(I,null),this.treeAdapter.appendChild(this.openElements.current,I),this.openElements.push(I,M.TAG_ID.HTML)}},{key:"_appendCommentNode",value:function(I,i){const n=this.treeAdapter.createCommentNode(I.data);this.treeAdapter.appendChild(i,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,I.location)}},{key:"_insertCharacters",value:function(I){let i,n;if(this._shouldFosterParentOnInsertion()?({parent:i,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(i,I.chars,n):this.treeAdapter.insertText(i,I.chars)):(i=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(i,I.chars)),!I.location)return;const C=this.treeAdapter.getChildNodes(i),r=n?C.lastIndexOf(n):C.length,o=C[r-1];if(this.treeAdapter.getNodeSourceCodeLocation(o)){const{endLine:s,endCol:A,endOffset:l}=I.location;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:s,endCol:A,endOffset:l})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,I.location)}},{key:"_adoptNodes",value:function(I,i){for(let n=this.treeAdapter.getFirstChild(I);n;n=this.treeAdapter.getFirstChild(I))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(i,n)}},{key:"_setEndLocation",value:function(I,i){if(this.treeAdapter.getNodeSourceCodeLocation(I)&&i.location){const n=i.location,C=this.treeAdapter.getTagName(I),r=i.type===Ri.TokenType.END_TAG&&C===i.tagName?{endTag:Object.assign({},n),endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(I,r)}}},{key:"shouldProcessStartTagTokenInForeignContent",value:function(I){if(!this.currentNotInHTML)return!1;let i,n;return this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,n=this.fragmentContextID):{current:i,currentTagId:n}=this.openElements,I.tagID===M.TAG_ID.SVG&&this.treeAdapter.getTagName(i)===M.TAG_NAMES.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(i)===M.NS.MATHML?!1:this.tokenizer.inForeignNode||(I.tagID===M.TAG_ID.MGLYPH||I.tagID===M.TAG_ID.MALIGNMARK)&&!this._isIntegrationPoint(n,i,M.NS.HTML)}},{key:"_processToken",value:function(I){switch(I.type){case Ri.TokenType.CHARACTER:{this.onCharacter(I);break}case Ri.TokenType.NULL_CHARACTER:{this.onNullCharacter(I);break}case Ri.TokenType.COMMENT:{this.onComment(I);break}case Ri.TokenType.DOCTYPE:{this.onDoctype(I);break}case Ri.TokenType.START_TAG:{this._processStartTag(I);break}case Ri.TokenType.END_TAG:{this.onEndTag(I);break}case Ri.TokenType.EOF:{this.onEof(I);break}case Ri.TokenType.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(I);break}}}},{key:"_isIntegrationPoint",value:function(I,i,n){const C=this.treeAdapter.getNamespaceURI(i),r=this.treeAdapter.getAttrList(i);return _a.isIntegrationPoint(I,C,r,n)}},{key:"_reconstructActiveFormattingElements",value:function(){const I=this.activeFormattingElements.entries.length;if(I){const i=this.activeFormattingElements.entries.findIndex(C=>C.type===fCe.EntryType.Marker||this.openElements.contains(C.element)),n=i<0?I-1:i-1;for(let C=n;C>=0;C--){const r=this.activeFormattingElements.entries[C];this._insertElement(r.token,this.treeAdapter.getNamespaceURI(r.element)),r.element=this.openElements.current}}}},{key:"_closeTableCell",value:function(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Te.IN_ROW}},{key:"_closePElement",value:function(){this.openElements.generateImpliedEndTagsWithExclusion(M.TAG_ID.P),this.openElements.popUntilTagNamePopped(M.TAG_ID.P)}},{key:"_resetInsertionMode",value:function(){for(let I=this.openElements.stackTop;I>=0;I--)switch(I===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[I]){case M.TAG_ID.TR:{this.insertionMode=Te.IN_ROW;return}case M.TAG_ID.TBODY:case M.TAG_ID.THEAD:case M.TAG_ID.TFOOT:{this.insertionMode=Te.IN_TABLE_BODY;return}case M.TAG_ID.CAPTION:{this.insertionMode=Te.IN_CAPTION;return}case M.TAG_ID.COLGROUP:{this.insertionMode=Te.IN_COLUMN_GROUP;return}case M.TAG_ID.TABLE:{this.insertionMode=Te.IN_TABLE;return}case M.TAG_ID.BODY:{this.insertionMode=Te.IN_BODY;return}case M.TAG_ID.FRAMESET:{this.insertionMode=Te.IN_FRAMESET;return}case M.TAG_ID.SELECT:{this._resetInsertionModeForSelect(I);return}case M.TAG_ID.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case M.TAG_ID.HTML:{this.insertionMode=this.headElement?Te.AFTER_HEAD:Te.BEFORE_HEAD;return}case M.TAG_ID.TD:case M.TAG_ID.TH:{if(I>0){this.insertionMode=Te.IN_CELL;return}break}case M.TAG_ID.HEAD:{if(I>0){this.insertionMode=Te.IN_HEAD;return}break}}this.insertionMode=Te.IN_BODY}},{key:"_resetInsertionModeForSelect",value:function(I){if(I>0)for(let i=I-1;i>0;i--){const n=this.openElements.tagIDs[i];if(n===M.TAG_ID.TEMPLATE)break;if(n===M.TAG_ID.TABLE){this.insertionMode=Te.IN_SELECT_IN_TABLE;return}}this.insertionMode=Te.IN_SELECT}},{key:"_isElementCausesFosterParenting",value:function(I){return twe.has(I)}},{key:"_shouldFosterParentOnInsertion",value:function(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}},{key:"_findFosterParentingLocation",value:function(){for(let I=this.openElements.stackTop;I>=0;I--){const i=this.openElements.items[I];switch(this.openElements.tagIDs[I]){case M.TAG_ID.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(i)===M.NS.HTML)return{parent:this.treeAdapter.getTemplateContent(i),beforeElement:null};break}case M.TAG_ID.TABLE:{const n=this.treeAdapter.getParentNode(i);return n?{parent:n,beforeElement:i}:{parent:this.openElements.items[I-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}},{key:"_fosterParentElement",value:function(I){const i=this._findFosterParentingLocation();i.beforeElement?this.treeAdapter.insertBefore(i.parent,I,i.beforeElement):this.treeAdapter.appendChild(i.parent,I)}},{key:"_isSpecialElement",value:function(I,i){const n=this.treeAdapter.getNamespaceURI(I);return M.SPECIAL_ELEMENTS[n].has(i)}},{key:"onCharacter",value:function(I){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){EZt(this,I);return}switch(this.insertionMode){case Te.INITIAL:{oZ(this,I);break}case Te.BEFORE_HTML:{qG(this,I);break}case Te.BEFORE_HEAD:{ev(this,I);break}case Te.IN_HEAD:{tv(this,I);break}case Te.IN_HEAD_NO_SCRIPT:{gv(this,I);break}case Te.AFTER_HEAD:{Iv(this,I);break}case Te.IN_BODY:case Te.IN_CAPTION:case Te.IN_CELL:case Te.IN_TEMPLATE:{Iwe(this,I);break}case Te.TEXT:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:{this._insertCharacters(I);break}case Te.IN_TABLE:case Te.IN_TABLE_BODY:case Te.IN_ROW:{BD(this,I);break}case Te.IN_TABLE_TEXT:{awe(this,I);break}case Te.IN_COLUMN_GROUP:{EX(this,I);break}case Te.AFTER_BODY:{MX(this,I);break}case Te.AFTER_AFTER_BODY:{IW(this,I);break}}}},{key:"onNullCharacter",value:function(I){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){xZt(this,I);return}switch(this.insertionMode){case Te.INITIAL:{oZ(this,I);break}case Te.BEFORE_HTML:{qG(this,I);break}case Te.BEFORE_HEAD:{ev(this,I);break}case Te.IN_HEAD:{tv(this,I);break}case Te.IN_HEAD_NO_SCRIPT:{gv(this,I);break}case Te.AFTER_HEAD:{Iv(this,I);break}case Te.TEXT:{this._insertCharacters(I);break}case Te.IN_TABLE:case Te.IN_TABLE_BODY:case Te.IN_ROW:{BD(this,I);break}case Te.IN_COLUMN_GROUP:{EX(this,I);break}case Te.AFTER_BODY:{MX(this,I);break}case Te.AFTER_AFTER_BODY:{IW(this,I);break}}}},{key:"onComment",value:function(I){if(this.skipNextNewLine=!1,this.currentNotInHTML){Jz(this,I);return}switch(this.insertionMode){case Te.INITIAL:case Te.BEFORE_HTML:case Te.BEFORE_HEAD:case Te.IN_HEAD:case Te.IN_HEAD_NO_SCRIPT:case Te.AFTER_HEAD:case Te.IN_BODY:case Te.IN_TABLE:case Te.IN_CAPTION:case Te.IN_COLUMN_GROUP:case Te.IN_TABLE_BODY:case Te.IN_ROW:case Te.IN_CELL:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:case Te.IN_TEMPLATE:case Te.IN_FRAMESET:case Te.AFTER_FRAMESET:{Jz(this,I);break}case Te.IN_TABLE_TEXT:{aZ(this,I);break}case Te.AFTER_BODY:{fyt(this,I);break}case Te.AFTER_AFTER_BODY:case Te.AFTER_AFTER_FRAMESET:{pyt(this,I);break}}}},{key:"onDoctype",value:function(I){switch(this.skipNextNewLine=!1,this.insertionMode){case Te.INITIAL:{byt(this,I);break}case Te.BEFORE_HEAD:case Te.IN_HEAD:case Te.IN_HEAD_NO_SCRIPT:case Te.AFTER_HEAD:{this._err(I,mn.ERR.misplacedDoctype);break}case Te.IN_TABLE_TEXT:{aZ(this,I);break}}}},{key:"onStartTag",value:function(I){this.skipNextNewLine=!1,this.currentToken=I,this._processStartTag(I),I.selfClosing&&!I.ackSelfClosing&&this._err(I,mn.ERR.nonVoidHtmlElementStartTagWithTrailingSolidus)}},{key:"_processStartTag",value:function(I){this.shouldProcessStartTagTokenInForeignContent(I)?MZt(this,I):this._startTagOutsideForeignContent(I)}},{key:"_startTagOutsideForeignContent",value:function(I){switch(this.insertionMode){case Te.INITIAL:{oZ(this,I);break}case Te.BEFORE_HTML:{yyt(this,I);break}case Te.BEFORE_HEAD:{Gyt(this,I);break}case Te.IN_HEAD:{ba(this,I);break}case Te.IN_HEAD_NO_SCRIPT:{Syt(this,I);break}case Te.AFTER_HEAD:{Ryt(this,I);break}case Te.IN_BODY:{zn(this,I);break}case Te.IN_TABLE:{_b(this,I);break}case Te.IN_TABLE_TEXT:{aZ(this,I);break}case Te.IN_CAPTION:{vZt(this,I);break}case Te.IN_COLUMN_GROUP:{F4(this,I);break}case Te.IN_TABLE_BODY:{rk(this,I);break}case Te.IN_ROW:{ok(this,I);break}case Te.IN_CELL:{wZt(this,I);break}case Te.IN_SELECT:{lwe(this,I);break}case Te.IN_SELECT_IN_TABLE:{VZt(this,I);break}case Te.IN_TEMPLATE:{XZt(this,I);break}case Te.AFTER_BODY:{TZt(this,I);break}case Te.IN_FRAMESET:{NZt(this,I);break}case Te.AFTER_FRAMESET:{YZt(this,I);break}case Te.AFTER_AFTER_BODY:{FZt(this,I);break}case Te.AFTER_AFTER_FRAMESET:{DZt(this,I);break}}}},{key:"onEndTag",value:function(I){this.skipNextNewLine=!1,this.currentToken=I,this.currentNotInHTML?zZt(this,I):this._endTagOutsideForeignContent(I)}},{key:"_endTagOutsideForeignContent",value:function(I){switch(this.insertionMode){case Te.INITIAL:{oZ(this,I);break}case Te.BEFORE_HTML:{Zyt(this,I);break}case Te.BEFORE_HEAD:{vyt(this,I);break}case Te.IN_HEAD:{Byt(this,I);break}case Te.IN_HEAD_NO_SCRIPT:{wyt(this,I);break}case Te.AFTER_HEAD:{Vyt(this,I);break}case Te.IN_BODY:{Ck(this,I);break}case Te.TEXT:{uZt(this,I);break}case Te.IN_TABLE:{JB(this,I);break}case Te.IN_TABLE_TEXT:{aZ(this,I);break}case Te.IN_CAPTION:{BZt(this,I);break}case Te.IN_COLUMN_GROUP:{SZt(this,I);break}case Te.IN_TABLE_BODY:{Oz(this,I);break}case Te.IN_ROW:{swe(this,I);break}case Te.IN_CELL:{RZt(this,I);break}case Te.IN_SELECT:{cwe(this,I);break}case Te.IN_SELECT_IN_TABLE:{WZt(this,I);break}case Te.IN_TEMPLATE:{HZt(this,I);break}case Te.AFTER_BODY:{dwe(this,I);break}case Te.IN_FRAMESET:{kZt(this,I);break}case Te.AFTER_FRAMESET:{KZt(this,I);break}case Te.AFTER_AFTER_BODY:{IW(this,I);break}}}},{key:"onEof",value:function(I){switch(this.insertionMode){case Te.INITIAL:{oZ(this,I);break}case Te.BEFORE_HTML:{qG(this,I);break}case Te.BEFORE_HEAD:{ev(this,I);break}case Te.IN_HEAD:{tv(this,I);break}case Te.IN_HEAD_NO_SCRIPT:{gv(this,I);break}case Te.AFTER_HEAD:{Iv(this,I);break}case Te.IN_BODY:case Te.IN_TABLE:case Te.IN_CAPTION:case Te.IN_COLUMN_GROUP:case Te.IN_TABLE_BODY:case Te.IN_ROW:case Te.IN_CELL:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:{rwe(this,I);break}case Te.TEXT:{dZt(this,I);break}case Te.IN_TABLE_TEXT:{aZ(this,I);break}case Te.IN_TEMPLATE:{uwe(this,I);break}case Te.AFTER_BODY:case Te.IN_FRAMESET:case Te.AFTER_FRAMESET:case Te.AFTER_AFTER_BODY:case Te.AFTER_AFTER_FRAMESET:{K4(this,I);break}}}},{key:"onWhitespaceCharacter",value:function(I){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,I.chars.charCodeAt(0)===ewe.CODE_POINTS.LINE_FEED)){if(I.chars.length===1)return;I.chars=I.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(I);return}switch(this.insertionMode){case Te.IN_HEAD:case Te.IN_HEAD_NO_SCRIPT:case Te.AFTER_HEAD:case Te.TEXT:case Te.IN_COLUMN_GROUP:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:case Te.IN_FRAMESET:case Te.AFTER_FRAMESET:{this._insertCharacters(I);break}case Te.IN_BODY:case Te.IN_CAPTION:case Te.IN_CELL:case Te.IN_TEMPLATE:case Te.AFTER_BODY:case Te.AFTER_AFTER_BODY:case Te.AFTER_AFTER_FRAMESET:{gwe(this,I);break}case Te.IN_TABLE:case Te.IN_TABLE_BODY:case Te.IN_ROW:{BD(this,I);break}case Te.IN_TABLE_TEXT:{owe(this,I);break}}}}],[{key:"parse",value:function(I,i){const n=new this(i);return n.tokenizer.write(I,!0),n.document}},{key:"getFragmentParser",value:function(I,i){const n=Object.assign(Object.assign({},bCe),i);I??(I=n.treeAdapter.createElement(M.TAG_NAMES.TEMPLATE,M.NS.HTML,[]));const C=n.treeAdapter.createElement("documentmock",M.NS.HTML,[]),r=new this(n,C,I);return r.fragmentContextID===M.TAG_ID.TEMPLATE&&r.tmplInsertionModeStack.unshift(Te.IN_TEMPLATE),r._initTokenizerForFragmentParsing(),r._insertFakeRootElement(),r._resetInsertionMode(),r._findFormInFragmentContext(),r}}]),e}();PB.Parser=syt;function lyt(e,g){let I=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.tagName);return I?e.openElements.contains(I.element)?e.openElements.hasInScope(g.tagID)||(I=null):(e.activeFormattingElements.removeEntry(I),I=null):Cwe(e,g),I}function cyt(e,g){let I=null,i=e.openElements.stackTop;for(;i>=0;i--){const n=e.openElements.items[i];if(n===g.element)break;e._isSpecialElement(n,e.openElements.tagIDs[i])&&(I=n)}return I||(e.openElements.shortenToLength(i<0?0:i),e.activeFormattingElements.removeEntry(g)),I}function uyt(e,g,I){let i=g,n=e.openElements.getCommonAncestor(g);for(let C=0,r=n;r!==I;C++,r=n){n=e.openElements.getCommonAncestor(r);const o=e.activeFormattingElements.getElementEntry(r),a=o&&C>=ayt;!o||a?(a&&e.activeFormattingElements.removeEntry(o),e.openElements.remove(r)):(r=dyt(e,o),i===g&&(e.activeFormattingElements.bookmark=o),e.treeAdapter.detachNode(i),e.treeAdapter.appendChild(r,i),i=r)}return i}function dyt(e,g){const I=e.treeAdapter.getNamespaceURI(g.element),i=e.treeAdapter.createElement(g.token.tagName,I,g.token.attrs);return e.openElements.replace(g.element,i),g.element=i,i}function hyt(e,g,I){const i=e.treeAdapter.getTagName(g),n=(0,M.getTagID)(i);if(e._isElementCausesFosterParenting(n))e._fosterParentElement(I);else{const C=e.treeAdapter.getNamespaceURI(g);n===M.TAG_ID.TEMPLATE&&C===M.NS.HTML&&(g=e.treeAdapter.getTemplateContent(g)),e.treeAdapter.appendChild(g,I)}}function myt(e,g,I){const i=e.treeAdapter.getNamespaceURI(I.element),{token:n}=I,C=e.treeAdapter.createElement(n.tagName,i,n.attrs);e._adoptNodes(g,C),e.treeAdapter.appendChild(g,C),e.activeFormattingElements.insertElementAfterBookmark(C,n),e.activeFormattingElements.removeEntry(I),e.openElements.remove(I.element),e.openElements.insertAfter(g,C,n.tagID)}function Y4(e,g){for(let I=0;I=I;i--)e._setEndLocation(e.openElements.items[i],g);if(!e.fragmentContext&&e.openElements.stackTop>=0){const i=e.openElements.items[0],n=e.treeAdapter.getNodeSourceCodeLocation(i);if(n&&!n.endTag&&(e._setEndLocation(i,g),e.openElements.stackTop>=1)){const C=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(C);r&&!r.endTag&&e._setEndLocation(C,g)}}}}function byt(e,g){e._setDocumentType(g);const I=g.forceQuirks?M.DOCUMENT_MODE.QUIRKS:pCe.getDocumentMode(g);pCe.isConforming(g)||e._err(g,mn.ERR.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,I),e.insertionMode=Te.BEFORE_HTML}function oZ(e,g){e._err(g,mn.ERR.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,M.DOCUMENT_MODE.QUIRKS),e.insertionMode=Te.BEFORE_HTML,e._processToken(g)}function yyt(e,g){g.tagID===M.TAG_ID.HTML?(e._insertElement(g,M.NS.HTML),e.insertionMode=Te.BEFORE_HEAD):qG(e,g)}function Zyt(e,g){const I=g.tagID;(I===M.TAG_ID.HTML||I===M.TAG_ID.HEAD||I===M.TAG_ID.BODY||I===M.TAG_ID.BR)&&qG(e,g)}function qG(e,g){e._insertFakeRootElement(),e.insertionMode=Te.BEFORE_HEAD,e._processToken(g)}function Gyt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.HEAD:{e._insertElement(g,M.NS.HTML),e.headElement=e.openElements.current,e.insertionMode=Te.IN_HEAD;break}default:ev(e,g)}}function vyt(e,g){const I=g.tagID;I===M.TAG_ID.HEAD||I===M.TAG_ID.BODY||I===M.TAG_ID.HTML||I===M.TAG_ID.BR?ev(e,g):e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}function ev(e,g){e._insertFakeElement(M.TAG_NAMES.HEAD,M.TAG_ID.HEAD),e.headElement=e.openElements.current,e.insertionMode=Te.IN_HEAD,e._processToken(g)}function ba(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.BASE:case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.LINK:case M.TAG_ID.META:{e._appendElement(g,M.NS.HTML),g.ackSelfClosing=!0;break}case M.TAG_ID.TITLE:{e._switchToTextParsing(g,Qn.TokenizerMode.RCDATA);break}case M.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT):(e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_HEAD_NO_SCRIPT);break}case M.TAG_ID.NOFRAMES:case M.TAG_ID.STYLE:{e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT);break}case M.TAG_ID.SCRIPT:{e._switchToTextParsing(g,Qn.TokenizerMode.SCRIPT_DATA);break}case M.TAG_ID.TEMPLATE:{e._insertTemplate(g),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Te.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Te.IN_TEMPLATE);break}case M.TAG_ID.HEAD:{e._err(g,mn.ERR.misplacedStartTagForHeadElement);break}default:tv(e,g)}}function Byt(e,g){switch(g.tagID){case M.TAG_ID.HEAD:{e.openElements.pop(),e.insertionMode=Te.AFTER_HEAD;break}case M.TAG_ID.BODY:case M.TAG_ID.BR:case M.TAG_ID.HTML:{tv(e,g);break}case M.TAG_ID.TEMPLATE:{am(e,g);break}default:e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}}function am(e,g){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==M.TAG_ID.TEMPLATE&&e._err(g,mn.ERR.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(M.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}function tv(e,g){e.openElements.pop(),e.insertionMode=Te.AFTER_HEAD,e._processToken(g)}function Syt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.HEAD:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.NOFRAMES:case M.TAG_ID.STYLE:{ba(e,g);break}case M.TAG_ID.NOSCRIPT:{e._err(g,mn.ERR.nestedNoscriptInHead);break}default:gv(e,g)}}function wyt(e,g){switch(g.tagID){case M.TAG_ID.NOSCRIPT:{e.openElements.pop(),e.insertionMode=Te.IN_HEAD;break}case M.TAG_ID.BR:{gv(e,g);break}default:e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}}function gv(e,g){const I=g.type===Ri.TokenType.EOF?mn.ERR.openElementsLeftAfterEof:mn.ERR.disallowedContentInNoscriptInHead;e._err(g,I),e.openElements.pop(),e.insertionMode=Te.IN_HEAD,e._processToken(g)}function Ryt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.BODY:{e._insertElement(g,M.NS.HTML),e.framesetOk=!1,e.insertionMode=Te.IN_BODY;break}case M.TAG_ID.FRAMESET:{e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_FRAMESET;break}case M.TAG_ID.BASE:case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.NOFRAMES:case M.TAG_ID.SCRIPT:case M.TAG_ID.STYLE:case M.TAG_ID.TEMPLATE:case M.TAG_ID.TITLE:{e._err(g,mn.ERR.abandonedHeadElementChild),e.openElements.push(e.headElement,M.TAG_ID.HEAD),ba(e,g),e.openElements.remove(e.headElement);break}case M.TAG_ID.HEAD:{e._err(g,mn.ERR.misplacedStartTagForHeadElement);break}default:Iv(e,g)}}function Vyt(e,g){switch(g.tagID){case M.TAG_ID.BODY:case M.TAG_ID.HTML:case M.TAG_ID.BR:{Iv(e,g);break}case M.TAG_ID.TEMPLATE:{am(e,g);break}default:e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}}function Iv(e,g){e._insertFakeElement(M.TAG_NAMES.BODY,M.TAG_ID.BODY),e.insertionMode=Te.IN_BODY,nk(e,g)}function nk(e,g){switch(g.type){case Ri.TokenType.CHARACTER:{Iwe(e,g);break}case Ri.TokenType.WHITESPACE_CHARACTER:{gwe(e,g);break}case Ri.TokenType.COMMENT:{Jz(e,g);break}case Ri.TokenType.START_TAG:{zn(e,g);break}case Ri.TokenType.END_TAG:{Ck(e,g);break}case Ri.TokenType.EOF:{rwe(e,g);break}}}function gwe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g)}function Iwe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g),e.framesetOk=!1}function Wyt(e,g){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],g.attrs)}function Xyt(e,g){const I=e.openElements.tryPeekProperlyNestedBodyElement();I&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(I,g.attrs))}function Hyt(e,g){const I=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&I&&(e.treeAdapter.detachNode(I),e.openElements.popAllUpToHtmlElement(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_FRAMESET)}function Tyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML)}function Nyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),(0,M.isNumberedHeader)(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(g,M.NS.HTML)}function kyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Yyt(e,g){const I=e.openElements.tmplCount>0;(!e.formElement||I)&&(e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),I||(e.formElement=e.openElements.current))}function Kyt(e,g){e.framesetOk=!1;const I=g.tagID;for(let i=e.openElements.stackTop;i>=0;i--){const n=e.openElements.tagIDs[i];if(I===M.TAG_ID.LI&&n===M.TAG_ID.LI||(I===M.TAG_ID.DD||I===M.TAG_ID.DT)&&(n===M.TAG_ID.DD||n===M.TAG_ID.DT)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n);break}if(n!==M.TAG_ID.ADDRESS&&n!==M.TAG_ID.DIV&&n!==M.TAG_ID.P&&e._isSpecialElement(e.openElements.items[i],n))break}e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML)}function Fyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),e.tokenizer.state=Qn.TokenizerMode.PLAINTEXT}function Dyt(e,g){e.openElements.hasInScope(M.TAG_ID.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(M.TAG_ID.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.framesetOk=!1}function xyt(e,g){const I=e.activeFormattingElements.getElementEntryInScopeWithTagName(M.TAG_NAMES.A);I&&(Y4(e,g),e.openElements.remove(I.element),e.activeFormattingElements.removeEntry(I)),e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function Eyt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function Myt(e,g){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(M.TAG_ID.NOBR)&&(Y4(e,g),e._reconstructActiveFormattingElements()),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function zyt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Pyt(e,g){e.treeAdapter.getDocumentMode(e.document)!==M.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),e.framesetOk=!1,e.insertionMode=Te.IN_TABLE}function iwe(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,M.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function nwe(e){const g=(0,Ri.getTokenAttr)(e,M.ATTRS.TYPE);return g!=null&&g.toLowerCase()===ryt}function Jyt(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,M.NS.HTML),nwe(g)||(e.framesetOk=!1),g.ackSelfClosing=!0}function Oyt(e,g){e._appendElement(g,M.NS.HTML),g.ackSelfClosing=!0}function _yt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._appendElement(g,M.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function Lyt(e,g){g.tagName=M.TAG_NAMES.IMG,g.tagID=M.TAG_ID.IMG,iwe(e,g)}function Uyt(e,g){e._insertElement(g,M.NS.HTML),e.skipNextNewLine=!0,e.tokenizer.state=Qn.TokenizerMode.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Te.TEXT}function Qyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT)}function jyt(e,g){e.framesetOk=!1,e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT)}function yCe(e,g){e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT)}function $yt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Te.IN_TABLE||e.insertionMode===Te.IN_CAPTION||e.insertionMode===Te.IN_TABLE_BODY||e.insertionMode===Te.IN_ROW||e.insertionMode===Te.IN_CELL?Te.IN_SELECT_IN_TABLE:Te.IN_SELECT}function qyt(e,g){e.openElements.currentTagId===M.TAG_ID.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML)}function eZt(e,g){e.openElements.hasInScope(M.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(g,M.NS.HTML)}function tZt(e,g){e.openElements.hasInScope(M.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(M.TAG_ID.RTC),e._insertElement(g,M.NS.HTML)}function gZt(e,g){e._reconstructActiveFormattingElements(),_a.adjustTokenMathMLAttrs(g),_a.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,M.NS.MATHML):e._insertElement(g,M.NS.MATHML),g.ackSelfClosing=!0}function IZt(e,g){e._reconstructActiveFormattingElements(),_a.adjustTokenSVGAttrs(g),_a.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,M.NS.SVG):e._insertElement(g,M.NS.SVG),g.ackSelfClosing=!0}function ZCe(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML)}function zn(e,g){switch(g.tagID){case M.TAG_ID.I:case M.TAG_ID.S:case M.TAG_ID.B:case M.TAG_ID.U:case M.TAG_ID.EM:case M.TAG_ID.TT:case M.TAG_ID.BIG:case M.TAG_ID.CODE:case M.TAG_ID.FONT:case M.TAG_ID.SMALL:case M.TAG_ID.STRIKE:case M.TAG_ID.STRONG:{Eyt(e,g);break}case M.TAG_ID.A:{xyt(e,g);break}case M.TAG_ID.H1:case M.TAG_ID.H2:case M.TAG_ID.H3:case M.TAG_ID.H4:case M.TAG_ID.H5:case M.TAG_ID.H6:{Nyt(e,g);break}case M.TAG_ID.P:case M.TAG_ID.DL:case M.TAG_ID.OL:case M.TAG_ID.UL:case M.TAG_ID.DIV:case M.TAG_ID.DIR:case M.TAG_ID.NAV:case M.TAG_ID.MAIN:case M.TAG_ID.MENU:case M.TAG_ID.ASIDE:case M.TAG_ID.CENTER:case M.TAG_ID.FIGURE:case M.TAG_ID.FOOTER:case M.TAG_ID.HEADER:case M.TAG_ID.HGROUP:case M.TAG_ID.DIALOG:case M.TAG_ID.DETAILS:case M.TAG_ID.ADDRESS:case M.TAG_ID.ARTICLE:case M.TAG_ID.SECTION:case M.TAG_ID.SUMMARY:case M.TAG_ID.FIELDSET:case M.TAG_ID.BLOCKQUOTE:case M.TAG_ID.FIGCAPTION:{Tyt(e,g);break}case M.TAG_ID.LI:case M.TAG_ID.DD:case M.TAG_ID.DT:{Kyt(e,g);break}case M.TAG_ID.BR:case M.TAG_ID.IMG:case M.TAG_ID.WBR:case M.TAG_ID.AREA:case M.TAG_ID.EMBED:case M.TAG_ID.KEYGEN:{iwe(e,g);break}case M.TAG_ID.HR:{_yt(e,g);break}case M.TAG_ID.RB:case M.TAG_ID.RTC:{eZt(e,g);break}case M.TAG_ID.RT:case M.TAG_ID.RP:{tZt(e,g);break}case M.TAG_ID.PRE:case M.TAG_ID.LISTING:{kyt(e,g);break}case M.TAG_ID.XMP:{Qyt(e,g);break}case M.TAG_ID.SVG:{IZt(e,g);break}case M.TAG_ID.HTML:{Wyt(e,g);break}case M.TAG_ID.BASE:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.STYLE:case M.TAG_ID.TITLE:case M.TAG_ID.SCRIPT:case M.TAG_ID.BGSOUND:case M.TAG_ID.BASEFONT:case M.TAG_ID.TEMPLATE:{ba(e,g);break}case M.TAG_ID.BODY:{Xyt(e,g);break}case M.TAG_ID.FORM:{Yyt(e,g);break}case M.TAG_ID.NOBR:{Myt(e,g);break}case M.TAG_ID.MATH:{gZt(e,g);break}case M.TAG_ID.TABLE:{Pyt(e,g);break}case M.TAG_ID.INPUT:{Jyt(e,g);break}case M.TAG_ID.PARAM:case M.TAG_ID.TRACK:case M.TAG_ID.SOURCE:{Oyt(e,g);break}case M.TAG_ID.IMAGE:{Lyt(e,g);break}case M.TAG_ID.BUTTON:{Dyt(e,g);break}case M.TAG_ID.APPLET:case M.TAG_ID.OBJECT:case M.TAG_ID.MARQUEE:{zyt(e,g);break}case M.TAG_ID.IFRAME:{jyt(e,g);break}case M.TAG_ID.SELECT:{$yt(e,g);break}case M.TAG_ID.OPTION:case M.TAG_ID.OPTGROUP:{qyt(e,g);break}case M.TAG_ID.NOEMBED:{yCe(e,g);break}case M.TAG_ID.FRAMESET:{Hyt(e,g);break}case M.TAG_ID.TEXTAREA:{Uyt(e,g);break}case M.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?yCe(e,g):ZCe(e,g);break}case M.TAG_ID.PLAINTEXT:{Fyt(e,g);break}case M.TAG_ID.COL:case M.TAG_ID.TH:case M.TAG_ID.TD:case M.TAG_ID.TR:case M.TAG_ID.HEAD:case M.TAG_ID.FRAME:case M.TAG_ID.TBODY:case M.TAG_ID.TFOOT:case M.TAG_ID.THEAD:case M.TAG_ID.CAPTION:case M.TAG_ID.COLGROUP:break;default:ZCe(e,g)}}function iZt(e,g){if(e.openElements.hasInScope(M.TAG_ID.BODY)&&(e.insertionMode=Te.AFTER_BODY,e.options.sourceCodeLocationInfo)){const I=e.openElements.tryPeekProperlyNestedBodyElement();I&&e._setEndLocation(I,g)}}function nZt(e,g){e.openElements.hasInScope(M.TAG_ID.BODY)&&(e.insertionMode=Te.AFTER_BODY,dwe(e,g))}function CZt(e,g){const I=g.tagID;e.openElements.hasInScope(I)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(I))}function rZt(e){const g=e.openElements.tmplCount>0,{formElement:I}=e;g||(e.formElement=null),(I||g)&&e.openElements.hasInScope(M.TAG_ID.FORM)&&(e.openElements.generateImpliedEndTags(),g?e.openElements.popUntilTagNamePopped(M.TAG_ID.FORM):I&&e.openElements.remove(I))}function oZt(e){e.openElements.hasInButtonScope(M.TAG_ID.P)||e._insertFakeElement(M.TAG_NAMES.P,M.TAG_ID.P),e._closePElement()}function aZt(e){e.openElements.hasInListItemScope(M.TAG_ID.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(M.TAG_ID.LI),e.openElements.popUntilTagNamePopped(M.TAG_ID.LI))}function AZt(e,g){const I=g.tagID;e.openElements.hasInScope(I)&&(e.openElements.generateImpliedEndTagsWithExclusion(I),e.openElements.popUntilTagNamePopped(I))}function sZt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function lZt(e,g){const I=g.tagID;e.openElements.hasInScope(I)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(I),e.activeFormattingElements.clearToLastMarker())}function cZt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(M.TAG_NAMES.BR,M.TAG_ID.BR),e.openElements.pop(),e.framesetOk=!1}function Cwe(e,g){const I=g.tagName,i=g.tagID;for(let n=e.openElements.stackTop;n>0;n--){const C=e.openElements.items[n],r=e.openElements.tagIDs[n];if(i===r&&(i!==M.TAG_ID.UNKNOWN||e.treeAdapter.getTagName(C)===I)){e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.stackTop>=n&&e.openElements.shortenToLength(n);break}if(e._isSpecialElement(C,r))break}}function Ck(e,g){switch(g.tagID){case M.TAG_ID.A:case M.TAG_ID.B:case M.TAG_ID.I:case M.TAG_ID.S:case M.TAG_ID.U:case M.TAG_ID.EM:case M.TAG_ID.TT:case M.TAG_ID.BIG:case M.TAG_ID.CODE:case M.TAG_ID.FONT:case M.TAG_ID.NOBR:case M.TAG_ID.SMALL:case M.TAG_ID.STRIKE:case M.TAG_ID.STRONG:{Y4(e,g);break}case M.TAG_ID.P:{oZt(e);break}case M.TAG_ID.DL:case M.TAG_ID.UL:case M.TAG_ID.OL:case M.TAG_ID.DIR:case M.TAG_ID.DIV:case M.TAG_ID.NAV:case M.TAG_ID.PRE:case M.TAG_ID.MAIN:case M.TAG_ID.MENU:case M.TAG_ID.ASIDE:case M.TAG_ID.BUTTON:case M.TAG_ID.CENTER:case M.TAG_ID.FIGURE:case M.TAG_ID.FOOTER:case M.TAG_ID.HEADER:case M.TAG_ID.HGROUP:case M.TAG_ID.DIALOG:case M.TAG_ID.ADDRESS:case M.TAG_ID.ARTICLE:case M.TAG_ID.DETAILS:case M.TAG_ID.SECTION:case M.TAG_ID.SUMMARY:case M.TAG_ID.LISTING:case M.TAG_ID.FIELDSET:case M.TAG_ID.BLOCKQUOTE:case M.TAG_ID.FIGCAPTION:{CZt(e,g);break}case M.TAG_ID.LI:{aZt(e);break}case M.TAG_ID.DD:case M.TAG_ID.DT:{AZt(e,g);break}case M.TAG_ID.H1:case M.TAG_ID.H2:case M.TAG_ID.H3:case M.TAG_ID.H4:case M.TAG_ID.H5:case M.TAG_ID.H6:{sZt(e);break}case M.TAG_ID.BR:{cZt(e);break}case M.TAG_ID.BODY:{iZt(e,g);break}case M.TAG_ID.HTML:{nZt(e,g);break}case M.TAG_ID.FORM:{rZt(e);break}case M.TAG_ID.APPLET:case M.TAG_ID.OBJECT:case M.TAG_ID.MARQUEE:{lZt(e,g);break}case M.TAG_ID.TEMPLATE:{am(e,g);break}default:Cwe(e,g)}}function rwe(e,g){e.tmplInsertionModeStack.length>0?uwe(e,g):K4(e,g)}function uZt(e,g){var I;g.tagID===M.TAG_ID.SCRIPT&&((I=e.scriptHandler)===null||I===void 0||I.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function dZt(e,g){e._err(g,mn.ERR.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(g)}function BD(e,g){if(twe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Te.IN_TABLE_TEXT,g.type){case Ri.TokenType.CHARACTER:{awe(e,g);break}case Ri.TokenType.WHITESPACE_CHARACTER:{owe(e,g);break}}else sw(e,g)}function hZt(e,g){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_CAPTION}function mZt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_COLUMN_GROUP}function fZt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(M.TAG_NAMES.COLGROUP,M.TAG_ID.COLGROUP),e.insertionMode=Te.IN_COLUMN_GROUP,F4(e,g)}function pZt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_TABLE_BODY}function bZt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(M.TAG_NAMES.TBODY,M.TAG_ID.TBODY),e.insertionMode=Te.IN_TABLE_BODY,rk(e,g)}function yZt(e,g){e.openElements.hasInTableScope(M.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.TABLE),e._resetInsertionMode(),e._processStartTag(g))}function ZZt(e,g){nwe(g)?e._appendElement(g,M.NS.HTML):sw(e,g),g.ackSelfClosing=!0}function GZt(e,g){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(g,M.NS.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function _b(e,g){switch(g.tagID){case M.TAG_ID.TD:case M.TAG_ID.TH:case M.TAG_ID.TR:{bZt(e,g);break}case M.TAG_ID.STYLE:case M.TAG_ID.SCRIPT:case M.TAG_ID.TEMPLATE:{ba(e,g);break}case M.TAG_ID.COL:{fZt(e,g);break}case M.TAG_ID.FORM:{GZt(e,g);break}case M.TAG_ID.TABLE:{yZt(e,g);break}case M.TAG_ID.TBODY:case M.TAG_ID.TFOOT:case M.TAG_ID.THEAD:{pZt(e,g);break}case M.TAG_ID.INPUT:{ZZt(e,g);break}case M.TAG_ID.CAPTION:{hZt(e,g);break}case M.TAG_ID.COLGROUP:{mZt(e,g);break}default:sw(e,g)}}function JB(e,g){switch(g.tagID){case M.TAG_ID.TABLE:{e.openElements.hasInTableScope(M.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.TABLE),e._resetInsertionMode());break}case M.TAG_ID.TEMPLATE:{am(e,g);break}case M.TAG_ID.BODY:case M.TAG_ID.CAPTION:case M.TAG_ID.COL:case M.TAG_ID.COLGROUP:case M.TAG_ID.HTML:case M.TAG_ID.TBODY:case M.TAG_ID.TD:case M.TAG_ID.TFOOT:case M.TAG_ID.TH:case M.TAG_ID.THEAD:case M.TAG_ID.TR:break;default:sw(e,g)}}function sw(e,g){const I=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,nk(e,g),e.fosterParentingEnabled=I}function owe(e,g){e.pendingCharacterTokens.push(g)}function awe(e,g){e.pendingCharacterTokens.push(g),e.hasNonWhitespacePendingCharacterToken=!0}function aZ(e,g){let I=0;if(e.hasNonWhitespacePendingCharacterToken)for(;I0&&e.openElements.currentTagId===M.TAG_ID.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===M.TAG_ID.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===M.TAG_ID.OPTGROUP&&e.openElements.pop();break}case M.TAG_ID.OPTION:{e.openElements.currentTagId===M.TAG_ID.OPTION&&e.openElements.pop();break}case M.TAG_ID.SELECT:{e.openElements.hasInSelectScope(M.TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.SELECT),e._resetInsertionMode());break}case M.TAG_ID.TEMPLATE:{am(e,g);break}}}function VZt(e,g){const I=g.tagID;I===M.TAG_ID.CAPTION||I===M.TAG_ID.TABLE||I===M.TAG_ID.TBODY||I===M.TAG_ID.TFOOT||I===M.TAG_ID.THEAD||I===M.TAG_ID.TR||I===M.TAG_ID.TD||I===M.TAG_ID.TH?(e.openElements.popUntilTagNamePopped(M.TAG_ID.SELECT),e._resetInsertionMode(),e._processStartTag(g)):lwe(e,g)}function WZt(e,g){const I=g.tagID;I===M.TAG_ID.CAPTION||I===M.TAG_ID.TABLE||I===M.TAG_ID.TBODY||I===M.TAG_ID.TFOOT||I===M.TAG_ID.THEAD||I===M.TAG_ID.TR||I===M.TAG_ID.TD||I===M.TAG_ID.TH?e.openElements.hasInTableScope(I)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.SELECT),e._resetInsertionMode(),e.onEndTag(g)):cwe(e,g)}function XZt(e,g){switch(g.tagID){case M.TAG_ID.BASE:case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.NOFRAMES:case M.TAG_ID.SCRIPT:case M.TAG_ID.STYLE:case M.TAG_ID.TEMPLATE:case M.TAG_ID.TITLE:{ba(e,g);break}case M.TAG_ID.CAPTION:case M.TAG_ID.COLGROUP:case M.TAG_ID.TBODY:case M.TAG_ID.TFOOT:case M.TAG_ID.THEAD:{e.tmplInsertionModeStack[0]=Te.IN_TABLE,e.insertionMode=Te.IN_TABLE,_b(e,g);break}case M.TAG_ID.COL:{e.tmplInsertionModeStack[0]=Te.IN_COLUMN_GROUP,e.insertionMode=Te.IN_COLUMN_GROUP,F4(e,g);break}case M.TAG_ID.TR:{e.tmplInsertionModeStack[0]=Te.IN_TABLE_BODY,e.insertionMode=Te.IN_TABLE_BODY,rk(e,g);break}case M.TAG_ID.TD:case M.TAG_ID.TH:{e.tmplInsertionModeStack[0]=Te.IN_ROW,e.insertionMode=Te.IN_ROW,ok(e,g);break}default:e.tmplInsertionModeStack[0]=Te.IN_BODY,e.insertionMode=Te.IN_BODY,zn(e,g)}}function HZt(e,g){g.tagID===M.TAG_ID.TEMPLATE&&am(e,g)}function uwe(e,g){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(M.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(g)):K4(e,g)}function TZt(e,g){g.tagID===M.TAG_ID.HTML?zn(e,g):MX(e,g)}function dwe(e,g){var I;if(g.tagID===M.TAG_ID.HTML){if(e.fragmentContext||(e.insertionMode=Te.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===M.TAG_ID.HTML){e._setEndLocation(e.openElements.items[0],g);const i=e.openElements.items[1];i&&!(!((I=e.treeAdapter.getNodeSourceCodeLocation(i))===null||I===void 0)&&I.endTag)&&e._setEndLocation(i,g)}}else MX(e,g)}function MX(e,g){e.insertionMode=Te.IN_BODY,nk(e,g)}function NZt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.FRAMESET:{e._insertElement(g,M.NS.HTML);break}case M.TAG_ID.FRAME:{e._appendElement(g,M.NS.HTML),g.ackSelfClosing=!0;break}case M.TAG_ID.NOFRAMES:{ba(e,g);break}}}function kZt(e,g){g.tagID===M.TAG_ID.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==M.TAG_ID.FRAMESET&&(e.insertionMode=Te.AFTER_FRAMESET))}function YZt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.NOFRAMES:{ba(e,g);break}}}function KZt(e,g){g.tagID===M.TAG_ID.HTML&&(e.insertionMode=Te.AFTER_AFTER_FRAMESET)}function FZt(e,g){g.tagID===M.TAG_ID.HTML?zn(e,g):IW(e,g)}function IW(e,g){e.insertionMode=Te.IN_BODY,nk(e,g)}function DZt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.NOFRAMES:{ba(e,g);break}}}function xZt(e,g){g.chars=ewe.REPLACEMENT_CHARACTER,e._insertCharacters(g)}function EZt(e,g){e._insertCharacters(g),e.framesetOk=!1}function hwe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==M.NS.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function MZt(e,g){if(_a.causesExit(g))hwe(e),e._startTagOutsideForeignContent(g);else{const I=e._getAdjustedCurrentElement(),i=e.treeAdapter.getNamespaceURI(I);i===M.NS.MATHML?_a.adjustTokenMathMLAttrs(g):i===M.NS.SVG&&(_a.adjustTokenSVGTagName(g),_a.adjustTokenSVGAttrs(g)),_a.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,i):e._insertElement(g,i),g.ackSelfClosing=!0}}function zZt(e,g){if(g.tagID===M.TAG_ID.P||g.tagID===M.TAG_ID.BR){hwe(e),e._endTagOutsideForeignContent(g);return}for(let I=e.openElements.stackTop;I>0;I--){const i=e.openElements.items[I];if(e.treeAdapter.getNamespaceURI(i)===M.NS.HTML){e._endTagOutsideForeignContent(g);break}const n=e.treeAdapter.getTagName(i);if(n.toLowerCase()===g.tagName){g.tagName=n,e.openElements.shortenToLength(I);break}}}var Lb={};Object.defineProperty(Lb,"__esModule",{value:!0});Lb.serializeOuter=Lb.serialize=void 0;const CI=nl,mwe=Fb,PZt=ik,JZt=new Set([CI.TAG_NAMES.AREA,CI.TAG_NAMES.BASE,CI.TAG_NAMES.BASEFONT,CI.TAG_NAMES.BGSOUND,CI.TAG_NAMES.BR,CI.TAG_NAMES.COL,CI.TAG_NAMES.EMBED,CI.TAG_NAMES.FRAME,CI.TAG_NAMES.HR,CI.TAG_NAMES.IMG,CI.TAG_NAMES.INPUT,CI.TAG_NAMES.KEYGEN,CI.TAG_NAMES.LINK,CI.TAG_NAMES.META,CI.TAG_NAMES.PARAM,CI.TAG_NAMES.SOURCE,CI.TAG_NAMES.TRACK,CI.TAG_NAMES.WBR]);function fwe(e,g){return g.treeAdapter.isElementNode(e)&&g.treeAdapter.getNamespaceURI(e)===CI.NS.HTML&&JZt.has(g.treeAdapter.getTagName(e))}const pwe={treeAdapter:PZt.defaultTreeAdapter,scriptingEnabled:!0};function OZt(e,g){const I=Object.assign(Object.assign({},pwe),g);return fwe(e,I)?"":bwe(e,I)}Lb.serialize=OZt;function _Zt(e,g){const I=Object.assign(Object.assign({},pwe),g);return ywe(e,I)}Lb.serializeOuter=_Zt;function bwe(e,g){let I="";const i=g.treeAdapter.isElementNode(e)&&g.treeAdapter.getTagName(e)===CI.TAG_NAMES.TEMPLATE&&g.treeAdapter.getNamespaceURI(e)===CI.NS.HTML?g.treeAdapter.getTemplateContent(e):e,n=g.treeAdapter.getChildNodes(i);if(n)for(const C of n)I+=ywe(C,g);return I}function ywe(e,g){return g.treeAdapter.isElementNode(e)?LZt(e,g):g.treeAdapter.isTextNode(e)?QZt(e,g):g.treeAdapter.isCommentNode(e)?jZt(e,g):g.treeAdapter.isDocumentTypeNode(e)?$Zt(e,g):""}function LZt(e,g){const I=g.treeAdapter.getTagName(e);return`<${I}${UZt(e,g)}>${fwe(e,g)?"":`${bwe(e,g)}`}`}function UZt(e,{treeAdapter:g}){let I="";for(const i of g.getAttrList(e)){if(I+=" ",!i.namespace)I+=i.name;else switch(i.namespace){case CI.NS.XML:{I+=`xml:${i.name}`;break}case CI.NS.XMLNS:{i.name!=="xmlns"&&(I+="xmlns:"),I+=i.name;break}case CI.NS.XLINK:{I+=`xlink:${i.name}`;break}default:I+=`${i.prefix}:${i.name}`}I+=`="${(0,mwe.escapeAttribute)(i.value)}"`}return I}function QZt(e,g){const{treeAdapter:I}=g,i=I.getTextNodeContent(e),n=I.getParentNode(e),C=n&&I.isElementNode(n)&&I.getTagName(n);return C&&I.getNamespaceURI(n)===CI.NS.HTML&&(0,CI.hasUnescapedText)(C,g.scriptingEnabled)?i:(0,mwe.escapeText)(i)}function jZt(e,{treeAdapter:g}){return``}function $Zt(e,{treeAdapter:g}){return``}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseFragment=e.parse=e.TokenizerMode=e.Tokenizer=e.Token=e.html=e.foreignContent=e.ErrorCodes=e.serializeOuter=e.serialize=e.Parser=e.defaultTreeAdapter=void 0;const g=PB;var I=ik;Object.defineProperty(e,"defaultTreeAdapter",{enumerable:!0,get:function(){return I.defaultTreeAdapter}});var i=PB;Object.defineProperty(e,"Parser",{enumerable:!0,get:function(){return i.Parser}});var n=Lb;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return n.serialize}}),Object.defineProperty(e,"serializeOuter",{enumerable:!0,get:function(){return n.serializeOuter}});var C=Aw;Object.defineProperty(e,"ErrorCodes",{enumerable:!0,get:function(){return C.ERR}}),e.foreignContent=k4,e.html=nl,e.Token=gk;var r=uh;Object.defineProperty(e,"Tokenizer",{enumerable:!0,get:function(){return r.Tokenizer}}),Object.defineProperty(e,"TokenizerMode",{enumerable:!0,get:function(){return r.TokenizerMode}});function o(s,A){return g.Parser.parse(s,A)}e.parse=o;function a(s,A,l){typeof s=="string"&&(l=A,A=s,s=null);const c=g.Parser.getFragmentParser(s,l);return c.tokenizer.write(A,!0),c.getFragment()}e.parseFragment=a})(JSe);var Zwe={},Gwe={},OB={},dh={},ak={},Ak={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isUndefinedCodePoint=e.isControlCodePoint=e.getSurrogatePairCodePoint=e.isSurrogatePair=e.isSurrogate=e.SEQUENCES=e.CODE_POINTS=e.REPLACEMENT_CHARACTER=void 0;const g=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]);e.REPLACEMENT_CHARACTER="�",function(o){o[o.EOF=-1]="EOF",o[o.NULL=0]="NULL",o[o.TABULATION=9]="TABULATION",o[o.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",o[o.LINE_FEED=10]="LINE_FEED",o[o.FORM_FEED=12]="FORM_FEED",o[o.SPACE=32]="SPACE",o[o.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",o[o.QUOTATION_MARK=34]="QUOTATION_MARK",o[o.NUMBER_SIGN=35]="NUMBER_SIGN",o[o.AMPERSAND=38]="AMPERSAND",o[o.APOSTROPHE=39]="APOSTROPHE",o[o.HYPHEN_MINUS=45]="HYPHEN_MINUS",o[o.SOLIDUS=47]="SOLIDUS",o[o.DIGIT_0=48]="DIGIT_0",o[o.DIGIT_9=57]="DIGIT_9",o[o.SEMICOLON=59]="SEMICOLON",o[o.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",o[o.EQUALS_SIGN=61]="EQUALS_SIGN",o[o.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",o[o.QUESTION_MARK=63]="QUESTION_MARK",o[o.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",o[o.LATIN_CAPITAL_F=70]="LATIN_CAPITAL_F",o[o.LATIN_CAPITAL_X=88]="LATIN_CAPITAL_X",o[o.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",o[o.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",o[o.GRAVE_ACCENT=96]="GRAVE_ACCENT",o[o.LATIN_SMALL_A=97]="LATIN_SMALL_A",o[o.LATIN_SMALL_F=102]="LATIN_SMALL_F",o[o.LATIN_SMALL_X=120]="LATIN_SMALL_X",o[o.LATIN_SMALL_Z=122]="LATIN_SMALL_Z",o[o.REPLACEMENT_CHARACTER=65533]="REPLACEMENT_CHARACTER"}(e.CODE_POINTS||(e.CODE_POINTS={})),e.SEQUENCES={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function I(o){return o>=55296&&o<=57343}e.isSurrogate=I;function i(o){return o>=56320&&o<=57343}e.isSurrogatePair=i;function n(o,a){return(o-55296)*1024+9216+a}e.getSurrogatePairCodePoint=n;function C(o){return o!==32&&o!==10&&o!==13&&o!==9&&o!==12&&o>=1&&o<=31||o>=127&&o<=159}e.isControlCodePoint=C;function r(o){return o>=64976&&o<=65007||g.has(o)}e.isUndefinedCodePoint=r})(Ak);var lw={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ERR=void 0,function(g){g.controlCharacterInInputStream="control-character-in-input-stream",g.noncharacterInInputStream="noncharacter-in-input-stream",g.surrogateInInputStream="surrogate-in-input-stream",g.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",g.endTagWithAttributes="end-tag-with-attributes",g.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",g.unexpectedSolidusInTag="unexpected-solidus-in-tag",g.unexpectedNullCharacter="unexpected-null-character",g.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",g.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",g.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",g.missingEndTagName="missing-end-tag-name",g.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",g.unknownNamedCharacterReference="unknown-named-character-reference",g.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",g.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",g.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",g.eofBeforeTagName="eof-before-tag-name",g.eofInTag="eof-in-tag",g.missingAttributeValue="missing-attribute-value",g.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",g.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",g.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",g.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",g.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",g.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",g.missingDoctypePublicIdentifier="missing-doctype-public-identifier",g.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",g.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",g.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",g.cdataInHtmlContent="cdata-in-html-content",g.incorrectlyOpenedComment="incorrectly-opened-comment",g.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",g.eofInDoctype="eof-in-doctype",g.nestedComment="nested-comment",g.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",g.eofInComment="eof-in-comment",g.incorrectlyClosedComment="incorrectly-closed-comment",g.eofInCdata="eof-in-cdata",g.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",g.nullCharacterReference="null-character-reference",g.surrogateCharacterReference="surrogate-character-reference",g.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",g.controlCharacterReference="control-character-reference",g.noncharacterCharacterReference="noncharacter-character-reference",g.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",g.missingDoctypeName="missing-doctype-name",g.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",g.duplicateAttribute="duplicate-attribute",g.nonConformingDoctype="non-conforming-doctype",g.missingDoctype="missing-doctype",g.misplacedDoctype="misplaced-doctype",g.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",g.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",g.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",g.openElementsLeftAfterEof="open-elements-left-after-eof",g.abandonedHeadElementChild="abandoned-head-element-child",g.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",g.nestedNoscriptInHead="nested-noscript-in-head",g.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(e.ERR||(e.ERR={}))})(lw);function qZt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function GCe(e,g){for(var I=0;Ithis.bufferWaterline}},{key:"dropParsedChunk",value:function(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}},{key:"write",value:function(I,i){this.html.length>0?this.html+=I:this.html=I,this.endOfChunkHit=!1,this.lastChunkWritten=i}},{key:"insertHtmlAtCurrentPos",value:function(I){this.html=this.html.substring(0,this.pos+1)+I+this.html.substring(this.pos+1),this.endOfChunkHit=!1}},{key:"startsWith",value:function(I,i){if(this.pos+I.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(i)return this.html.startsWith(I,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,On.CODE_POINTS.EOF;const n=this.html.charCodeAt(i);return n===On.CODE_POINTS.CARRIAGE_RETURN?On.CODE_POINTS.LINE_FEED:n}},{key:"advance",value:function(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,On.CODE_POINTS.EOF;let I=this.html.charCodeAt(this.pos);return I===On.CODE_POINTS.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,On.CODE_POINTS.LINE_FEED):I===On.CODE_POINTS.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,(0,On.isSurrogate)(I)&&(I=this._processSurrogate(I)),this.handler.onParseError===null||I>31&&I<127||I===On.CODE_POINTS.LINE_FEED||I===On.CODE_POINTS.CARRIAGE_RETURN||I>159&&I<64976||this._checkForProblematicCharacters(I),I)}},{key:"_checkForProblematicCharacters",value:function(I){(0,On.isControlCodePoint)(I)?this._err(SD.ERR.controlCharacterInInputStream):(0,On.isUndefinedCodePoint)(I)&&this._err(SD.ERR.noncharacterInInputStream)}},{key:"retreat",value:function(I){for(this.pos-=I;this.pos=0;n--)if(I.attrs[n].name===i)return I.attrs[n].value;return null}e.getTokenAttr=g})(sk);var Cl={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasUnescapedText=e.isNumberedHeader=e.SPECIAL_ELEMENTS=e.getTagID=e.TAG_ID=e.TAG_NAMES=e.DOCUMENT_MODE=e.ATTRS=e.NS=void 0;var g;(function(A){A.HTML="http://www.w3.org/1999/xhtml",A.MATHML="http://www.w3.org/1998/Math/MathML",A.SVG="http://www.w3.org/2000/svg",A.XLINK="http://www.w3.org/1999/xlink",A.XML="http://www.w3.org/XML/1998/namespace",A.XMLNS="http://www.w3.org/2000/xmlns/"})(g=e.NS||(e.NS={})),function(A){A.TYPE="type",A.ACTION="action",A.ENCODING="encoding",A.PROMPT="prompt",A.NAME="name",A.COLOR="color",A.FACE="face",A.SIZE="size"}(e.ATTRS||(e.ATTRS={})),function(A){A.NO_QUIRKS="no-quirks",A.QUIRKS="quirks",A.LIMITED_QUIRKS="limited-quirks"}(e.DOCUMENT_MODE||(e.DOCUMENT_MODE={}));var I;(function(A){A.A="a",A.ADDRESS="address",A.ANNOTATION_XML="annotation-xml",A.APPLET="applet",A.AREA="area",A.ARTICLE="article",A.ASIDE="aside",A.B="b",A.BASE="base",A.BASEFONT="basefont",A.BGSOUND="bgsound",A.BIG="big",A.BLOCKQUOTE="blockquote",A.BODY="body",A.BR="br",A.BUTTON="button",A.CAPTION="caption",A.CENTER="center",A.CODE="code",A.COL="col",A.COLGROUP="colgroup",A.DD="dd",A.DESC="desc",A.DETAILS="details",A.DIALOG="dialog",A.DIR="dir",A.DIV="div",A.DL="dl",A.DT="dt",A.EM="em",A.EMBED="embed",A.FIELDSET="fieldset",A.FIGCAPTION="figcaption",A.FIGURE="figure",A.FONT="font",A.FOOTER="footer",A.FOREIGN_OBJECT="foreignObject",A.FORM="form",A.FRAME="frame",A.FRAMESET="frameset",A.H1="h1",A.H2="h2",A.H3="h3",A.H4="h4",A.H5="h5",A.H6="h6",A.HEAD="head",A.HEADER="header",A.HGROUP="hgroup",A.HR="hr",A.HTML="html",A.I="i",A.IMG="img",A.IMAGE="image",A.INPUT="input",A.IFRAME="iframe",A.KEYGEN="keygen",A.LABEL="label",A.LI="li",A.LINK="link",A.LISTING="listing",A.MAIN="main",A.MALIGNMARK="malignmark",A.MARQUEE="marquee",A.MATH="math",A.MENU="menu",A.META="meta",A.MGLYPH="mglyph",A.MI="mi",A.MO="mo",A.MN="mn",A.MS="ms",A.MTEXT="mtext",A.NAV="nav",A.NOBR="nobr",A.NOFRAMES="noframes",A.NOEMBED="noembed",A.NOSCRIPT="noscript",A.OBJECT="object",A.OL="ol",A.OPTGROUP="optgroup",A.OPTION="option",A.P="p",A.PARAM="param",A.PLAINTEXT="plaintext",A.PRE="pre",A.RB="rb",A.RP="rp",A.RT="rt",A.RTC="rtc",A.RUBY="ruby",A.S="s",A.SCRIPT="script",A.SECTION="section",A.SELECT="select",A.SOURCE="source",A.SMALL="small",A.SPAN="span",A.STRIKE="strike",A.STRONG="strong",A.STYLE="style",A.SUB="sub",A.SUMMARY="summary",A.SUP="sup",A.TABLE="table",A.TBODY="tbody",A.TEMPLATE="template",A.TEXTAREA="textarea",A.TFOOT="tfoot",A.TD="td",A.TH="th",A.THEAD="thead",A.TITLE="title",A.TR="tr",A.TRACK="track",A.TT="tt",A.U="u",A.UL="ul",A.SVG="svg",A.VAR="var",A.WBR="wbr",A.XMP="xmp"})(I=e.TAG_NAMES||(e.TAG_NAMES={}));var i;(function(A){A[A.UNKNOWN=0]="UNKNOWN",A[A.A=1]="A",A[A.ADDRESS=2]="ADDRESS",A[A.ANNOTATION_XML=3]="ANNOTATION_XML",A[A.APPLET=4]="APPLET",A[A.AREA=5]="AREA",A[A.ARTICLE=6]="ARTICLE",A[A.ASIDE=7]="ASIDE",A[A.B=8]="B",A[A.BASE=9]="BASE",A[A.BASEFONT=10]="BASEFONT",A[A.BGSOUND=11]="BGSOUND",A[A.BIG=12]="BIG",A[A.BLOCKQUOTE=13]="BLOCKQUOTE",A[A.BODY=14]="BODY",A[A.BR=15]="BR",A[A.BUTTON=16]="BUTTON",A[A.CAPTION=17]="CAPTION",A[A.CENTER=18]="CENTER",A[A.CODE=19]="CODE",A[A.COL=20]="COL",A[A.COLGROUP=21]="COLGROUP",A[A.DD=22]="DD",A[A.DESC=23]="DESC",A[A.DETAILS=24]="DETAILS",A[A.DIALOG=25]="DIALOG",A[A.DIR=26]="DIR",A[A.DIV=27]="DIV",A[A.DL=28]="DL",A[A.DT=29]="DT",A[A.EM=30]="EM",A[A.EMBED=31]="EMBED",A[A.FIELDSET=32]="FIELDSET",A[A.FIGCAPTION=33]="FIGCAPTION",A[A.FIGURE=34]="FIGURE",A[A.FONT=35]="FONT",A[A.FOOTER=36]="FOOTER",A[A.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",A[A.FORM=38]="FORM",A[A.FRAME=39]="FRAME",A[A.FRAMESET=40]="FRAMESET",A[A.H1=41]="H1",A[A.H2=42]="H2",A[A.H3=43]="H3",A[A.H4=44]="H4",A[A.H5=45]="H5",A[A.H6=46]="H6",A[A.HEAD=47]="HEAD",A[A.HEADER=48]="HEADER",A[A.HGROUP=49]="HGROUP",A[A.HR=50]="HR",A[A.HTML=51]="HTML",A[A.I=52]="I",A[A.IMG=53]="IMG",A[A.IMAGE=54]="IMAGE",A[A.INPUT=55]="INPUT",A[A.IFRAME=56]="IFRAME",A[A.KEYGEN=57]="KEYGEN",A[A.LABEL=58]="LABEL",A[A.LI=59]="LI",A[A.LINK=60]="LINK",A[A.LISTING=61]="LISTING",A[A.MAIN=62]="MAIN",A[A.MALIGNMARK=63]="MALIGNMARK",A[A.MARQUEE=64]="MARQUEE",A[A.MATH=65]="MATH",A[A.MENU=66]="MENU",A[A.META=67]="META",A[A.MGLYPH=68]="MGLYPH",A[A.MI=69]="MI",A[A.MO=70]="MO",A[A.MN=71]="MN",A[A.MS=72]="MS",A[A.MTEXT=73]="MTEXT",A[A.NAV=74]="NAV",A[A.NOBR=75]="NOBR",A[A.NOFRAMES=76]="NOFRAMES",A[A.NOEMBED=77]="NOEMBED",A[A.NOSCRIPT=78]="NOSCRIPT",A[A.OBJECT=79]="OBJECT",A[A.OL=80]="OL",A[A.OPTGROUP=81]="OPTGROUP",A[A.OPTION=82]="OPTION",A[A.P=83]="P",A[A.PARAM=84]="PARAM",A[A.PLAINTEXT=85]="PLAINTEXT",A[A.PRE=86]="PRE",A[A.RB=87]="RB",A[A.RP=88]="RP",A[A.RT=89]="RT",A[A.RTC=90]="RTC",A[A.RUBY=91]="RUBY",A[A.S=92]="S",A[A.SCRIPT=93]="SCRIPT",A[A.SECTION=94]="SECTION",A[A.SELECT=95]="SELECT",A[A.SOURCE=96]="SOURCE",A[A.SMALL=97]="SMALL",A[A.SPAN=98]="SPAN",A[A.STRIKE=99]="STRIKE",A[A.STRONG=100]="STRONG",A[A.STYLE=101]="STYLE",A[A.SUB=102]="SUB",A[A.SUMMARY=103]="SUMMARY",A[A.SUP=104]="SUP",A[A.TABLE=105]="TABLE",A[A.TBODY=106]="TBODY",A[A.TEMPLATE=107]="TEMPLATE",A[A.TEXTAREA=108]="TEXTAREA",A[A.TFOOT=109]="TFOOT",A[A.TD=110]="TD",A[A.TH=111]="TH",A[A.THEAD=112]="THEAD",A[A.TITLE=113]="TITLE",A[A.TR=114]="TR",A[A.TRACK=115]="TRACK",A[A.TT=116]="TT",A[A.U=117]="U",A[A.UL=118]="UL",A[A.SVG=119]="SVG",A[A.VAR=120]="VAR",A[A.WBR=121]="WBR",A[A.XMP=122]="XMP"})(i=e.TAG_ID||(e.TAG_ID={}));const n=new Map([[I.A,i.A],[I.ADDRESS,i.ADDRESS],[I.ANNOTATION_XML,i.ANNOTATION_XML],[I.APPLET,i.APPLET],[I.AREA,i.AREA],[I.ARTICLE,i.ARTICLE],[I.ASIDE,i.ASIDE],[I.B,i.B],[I.BASE,i.BASE],[I.BASEFONT,i.BASEFONT],[I.BGSOUND,i.BGSOUND],[I.BIG,i.BIG],[I.BLOCKQUOTE,i.BLOCKQUOTE],[I.BODY,i.BODY],[I.BR,i.BR],[I.BUTTON,i.BUTTON],[I.CAPTION,i.CAPTION],[I.CENTER,i.CENTER],[I.CODE,i.CODE],[I.COL,i.COL],[I.COLGROUP,i.COLGROUP],[I.DD,i.DD],[I.DESC,i.DESC],[I.DETAILS,i.DETAILS],[I.DIALOG,i.DIALOG],[I.DIR,i.DIR],[I.DIV,i.DIV],[I.DL,i.DL],[I.DT,i.DT],[I.EM,i.EM],[I.EMBED,i.EMBED],[I.FIELDSET,i.FIELDSET],[I.FIGCAPTION,i.FIGCAPTION],[I.FIGURE,i.FIGURE],[I.FONT,i.FONT],[I.FOOTER,i.FOOTER],[I.FOREIGN_OBJECT,i.FOREIGN_OBJECT],[I.FORM,i.FORM],[I.FRAME,i.FRAME],[I.FRAMESET,i.FRAMESET],[I.H1,i.H1],[I.H2,i.H2],[I.H3,i.H3],[I.H4,i.H4],[I.H5,i.H5],[I.H6,i.H6],[I.HEAD,i.HEAD],[I.HEADER,i.HEADER],[I.HGROUP,i.HGROUP],[I.HR,i.HR],[I.HTML,i.HTML],[I.I,i.I],[I.IMG,i.IMG],[I.IMAGE,i.IMAGE],[I.INPUT,i.INPUT],[I.IFRAME,i.IFRAME],[I.KEYGEN,i.KEYGEN],[I.LABEL,i.LABEL],[I.LI,i.LI],[I.LINK,i.LINK],[I.LISTING,i.LISTING],[I.MAIN,i.MAIN],[I.MALIGNMARK,i.MALIGNMARK],[I.MARQUEE,i.MARQUEE],[I.MATH,i.MATH],[I.MENU,i.MENU],[I.META,i.META],[I.MGLYPH,i.MGLYPH],[I.MI,i.MI],[I.MO,i.MO],[I.MN,i.MN],[I.MS,i.MS],[I.MTEXT,i.MTEXT],[I.NAV,i.NAV],[I.NOBR,i.NOBR],[I.NOFRAMES,i.NOFRAMES],[I.NOEMBED,i.NOEMBED],[I.NOSCRIPT,i.NOSCRIPT],[I.OBJECT,i.OBJECT],[I.OL,i.OL],[I.OPTGROUP,i.OPTGROUP],[I.OPTION,i.OPTION],[I.P,i.P],[I.PARAM,i.PARAM],[I.PLAINTEXT,i.PLAINTEXT],[I.PRE,i.PRE],[I.RB,i.RB],[I.RP,i.RP],[I.RT,i.RT],[I.RTC,i.RTC],[I.RUBY,i.RUBY],[I.S,i.S],[I.SCRIPT,i.SCRIPT],[I.SECTION,i.SECTION],[I.SELECT,i.SELECT],[I.SOURCE,i.SOURCE],[I.SMALL,i.SMALL],[I.SPAN,i.SPAN],[I.STRIKE,i.STRIKE],[I.STRONG,i.STRONG],[I.STYLE,i.STYLE],[I.SUB,i.SUB],[I.SUMMARY,i.SUMMARY],[I.SUP,i.SUP],[I.TABLE,i.TABLE],[I.TBODY,i.TBODY],[I.TEMPLATE,i.TEMPLATE],[I.TEXTAREA,i.TEXTAREA],[I.TFOOT,i.TFOOT],[I.TD,i.TD],[I.TH,i.TH],[I.THEAD,i.THEAD],[I.TITLE,i.TITLE],[I.TR,i.TR],[I.TRACK,i.TRACK],[I.TT,i.TT],[I.U,i.U],[I.UL,i.UL],[I.SVG,i.SVG],[I.VAR,i.VAR],[I.WBR,i.WBR],[I.XMP,i.XMP]]);function C(A){var l;return(l=n.get(A))!==null&&l!==void 0?l:i.UNKNOWN}e.getTagID=C;const r=i;e.SPECIAL_ELEMENTS={[g.HTML]:new Set([r.ADDRESS,r.APPLET,r.AREA,r.ARTICLE,r.ASIDE,r.BASE,r.BASEFONT,r.BGSOUND,r.BLOCKQUOTE,r.BODY,r.BR,r.BUTTON,r.CAPTION,r.CENTER,r.COL,r.COLGROUP,r.DD,r.DETAILS,r.DIR,r.DIV,r.DL,r.DT,r.EMBED,r.FIELDSET,r.FIGCAPTION,r.FIGURE,r.FOOTER,r.FORM,r.FRAME,r.FRAMESET,r.H1,r.H2,r.H3,r.H4,r.H5,r.H6,r.HEAD,r.HEADER,r.HGROUP,r.HR,r.HTML,r.IFRAME,r.IMG,r.INPUT,r.LI,r.LINK,r.LISTING,r.MAIN,r.MARQUEE,r.MENU,r.META,r.NAV,r.NOEMBED,r.NOFRAMES,r.NOSCRIPT,r.OBJECT,r.OL,r.P,r.PARAM,r.PLAINTEXT,r.PRE,r.SCRIPT,r.SECTION,r.SELECT,r.SOURCE,r.STYLE,r.SUMMARY,r.TABLE,r.TBODY,r.TD,r.TEMPLATE,r.TEXTAREA,r.TFOOT,r.TH,r.THEAD,r.TITLE,r.TR,r.TRACK,r.UL,r.WBR,r.XMP]),[g.MATHML]:new Set([r.MI,r.MO,r.MN,r.MS,r.MTEXT,r.ANNOTATION_XML]),[g.SVG]:new Set([r.TITLE,r.FOREIGN_OBJECT,r.DESC]),[g.XLINK]:new Set,[g.XML]:new Set,[g.XMLNS]:new Set};function o(A){return A===r.H1||A===r.H2||A===r.H3||A===r.H4||A===r.H5||A===r.H6}e.isNumberedHeader=o;const a=new Set([I.STYLE,I.SCRIPT,I.XMP,I.IFRAME,I.NOEMBED,I.NOFRAMES,I.PLAINTEXT]);function s(A,l){return a.has(A)||l&&A===I.NOSCRIPT}e.hasUnescapedText=s})(Cl);function nGt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function vCe(e,g){for(var I=0;I=se.CODE_POINTS.DIGIT_0&&e<=se.CODE_POINTS.DIGIT_9}function jZ(e){return e>=se.CODE_POINTS.LATIN_CAPITAL_A&&e<=se.CODE_POINTS.LATIN_CAPITAL_Z}function sGt(e){return e>=se.CODE_POINTS.LATIN_SMALL_A&&e<=se.CODE_POINTS.LATIN_SMALL_Z}function Tl(e){return sGt(e)||jZ(e)}function _z(e){return Tl(e)||iv(e)}function vwe(e){return e>=se.CODE_POINTS.LATIN_CAPITAL_A&&e<=se.CODE_POINTS.LATIN_CAPITAL_F}function Bwe(e){return e>=se.CODE_POINTS.LATIN_SMALL_A&&e<=se.CODE_POINTS.LATIN_SMALL_F}function lGt(e){return iv(e)||vwe(e)||Bwe(e)}function ZV(e){return e+32}function Swe(e){return e===se.CODE_POINTS.SPACE||e===se.CODE_POINTS.LINE_FEED||e===se.CODE_POINTS.TABULATION||e===se.CODE_POINTS.FORM_FEED}function cGt(e){return e===se.CODE_POINTS.EQUALS_SIGN||_z(e)}function BCe(e){return Swe(e)||e===se.CODE_POINTS.SOLIDUS||e===se.CODE_POINTS.GREATER_THAN_SIGN}let uGt=function(){function e(g,I){nGt(this,e),this.options=g,this.handler=I,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Ge.DATA,this.returnState=Ge.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new aGt.Preprocessor(I),this.currentLocation=this.getCurrentLocation(-1)}return CGt(e,[{key:"_err",value:function(I){var i,n;(n=(i=this.handler).onParseError)===null||n===void 0||n.call(i,this.preprocessor.getError(I))}},{key:"getCurrentLocation",value:function(I){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-I,startOffset:this.preprocessor.offset-I,endLine:-1,endCol:-1,endOffset:-1}:null}},{key:"_runParsingLoop",value:function(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const I=this._consume();this._ensureHibernation()||this._callState(I)}this.inLoop=!1}}},{key:"pause",value:function(){this.paused=!0}},{key:"resume",value:function(I){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||I==null||I())}},{key:"write",value:function(I,i,n){this.active=!0,this.preprocessor.write(I,i),this._runParsingLoop(),this.paused||n==null||n()}},{key:"insertHtmlAtCurrentPos",value:function(I){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(I),this._runParsingLoop()}},{key:"_ensureHibernation",value:function(){return this.preprocessor.endOfChunkHit?(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0):!1}},{key:"_consume",value:function(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}},{key:"_unconsume",value:function(I){this.consumedAfterSnapshot-=I,this.preprocessor.retreat(I)}},{key:"_reconsumeInState",value:function(I,i){this.state=I,this._callState(i)}},{key:"_advanceBy",value:function(I){this.consumedAfterSnapshot+=I;for(let i=0;i0&&this._err(et.ERR.endTagWithAttributes),I.selfClosing&&this._err(et.ERR.endTagWithTrailingSolidus),this.handler.onEndTag(I)),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentComment",value:function(I){this.prepareToken(I),this.handler.onComment(I),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentDoctype",value:function(I){this.prepareToken(I),this.handler.onDoctype(I),this.preprocessor.dropParsedChunk()}},{key:"_emitCurrentCharacterToken",value:function(I){if(this.currentCharacterToken){switch(I&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=I.startLine,this.currentCharacterToken.location.endCol=I.startCol,this.currentCharacterToken.location.endOffset=I.startOffset),this.currentCharacterToken.type){case yC.TokenType.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case yC.TokenType.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case yC.TokenType.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}},{key:"_emitEOFToken",value:function(){const I=this.getCurrentLocation(0);I&&(I.endLine=I.startLine,I.endCol=I.startCol,I.endOffset=I.startOffset),this._emitCurrentCharacterToken(I),this.handler.onEof({type:yC.TokenType.EOF,location:I}),this.active=!1}},{key:"_appendCharToCurrentCharacterToken",value:function(I,i){if(this.currentCharacterToken)if(this.currentCharacterToken.type!==I)this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();else{this.currentCharacterToken.chars+=i;return}this._createCharacterToken(I,i)}},{key:"_emitCodePoint",value:function(I){const i=Swe(I)?yC.TokenType.WHITESPACE_CHARACTER:I===se.CODE_POINTS.NULL?yC.TokenType.NULL_CHARACTER:yC.TokenType.CHARACTER;this._appendCharToCurrentCharacterToken(i,String.fromCodePoint(I))}},{key:"_emitChars",value:function(I){this._appendCharToCurrentCharacterToken(yC.TokenType.CHARACTER,I)}},{key:"_matchNamedCharacterReference",value:function(I){let i=null,n=0,C=!1;for(let r=0,o=Xa.htmlDecodeTree[0];r>=0&&(r=(0,Xa.determineBranch)(Xa.htmlDecodeTree,o,r+1,I),!(r<0));I=this._consume()){n+=1,o=Xa.htmlDecodeTree[r];const a=o&Xa.BinTrieFlags.VALUE_LENGTH;if(a){const s=(a>>14)-1;if(I!==se.CODE_POINTS.SEMICOLON&&this._isCharacterReferenceInAttribute()&&cGt(this.preprocessor.peek(1))?(i=[se.CODE_POINTS.AMPERSAND],r+=s):(i=s===0?[Xa.htmlDecodeTree[r]&~Xa.BinTrieFlags.VALUE_LENGTH]:s===1?[Xa.htmlDecodeTree[++r]]:[Xa.htmlDecodeTree[++r],Xa.htmlDecodeTree[++r]],n=0,C=I!==se.CODE_POINTS.SEMICOLON),s===0){this._consume();break}}}return this._unconsume(n),C&&!this.preprocessor.endOfChunkHit&&this._err(et.ERR.missingSemicolonAfterCharacterReference),this._unconsume(1),i}},{key:"_isCharacterReferenceInAttribute",value:function(){return this.returnState===Ge.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Ge.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Ge.ATTRIBUTE_VALUE_UNQUOTED}},{key:"_flushCodePointConsumedAsCharacterReference",value:function(I){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(I):this._emitCodePoint(I)}},{key:"_callState",value:function(I){switch(this.state){case Ge.DATA:{this._stateData(I);break}case Ge.RCDATA:{this._stateRcdata(I);break}case Ge.RAWTEXT:{this._stateRawtext(I);break}case Ge.SCRIPT_DATA:{this._stateScriptData(I);break}case Ge.PLAINTEXT:{this._statePlaintext(I);break}case Ge.TAG_OPEN:{this._stateTagOpen(I);break}case Ge.END_TAG_OPEN:{this._stateEndTagOpen(I);break}case Ge.TAG_NAME:{this._stateTagName(I);break}case Ge.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(I);break}case Ge.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(I);break}case Ge.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(I);break}case Ge.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(I);break}case Ge.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(I);break}case Ge.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(I);break}case Ge.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(I);break}case Ge.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(I);break}case Ge.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(I);break}case Ge.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(I);break}case Ge.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(I);break}case Ge.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(I);break}case Ge.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(I);break}case Ge.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(I);break}case Ge.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(I);break}case Ge.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(I);break}case Ge.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(I);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(I);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(I);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(I);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(I);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(I);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(I);break}case Ge.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(I);break}case Ge.ATTRIBUTE_NAME:{this._stateAttributeName(I);break}case Ge.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(I);break}case Ge.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(I);break}case Ge.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(I);break}case Ge.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(I);break}case Ge.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(I);break}case Ge.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(I);break}case Ge.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(I);break}case Ge.BOGUS_COMMENT:{this._stateBogusComment(I);break}case Ge.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(I);break}case Ge.COMMENT_START:{this._stateCommentStart(I);break}case Ge.COMMENT_START_DASH:{this._stateCommentStartDash(I);break}case Ge.COMMENT:{this._stateComment(I);break}case Ge.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(I);break}case Ge.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(I);break}case Ge.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(I);break}case Ge.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(I);break}case Ge.COMMENT_END_DASH:{this._stateCommentEndDash(I);break}case Ge.COMMENT_END:{this._stateCommentEnd(I);break}case Ge.COMMENT_END_BANG:{this._stateCommentEndBang(I);break}case Ge.DOCTYPE:{this._stateDoctype(I);break}case Ge.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(I);break}case Ge.DOCTYPE_NAME:{this._stateDoctypeName(I);break}case Ge.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(I);break}case Ge.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(I);break}case Ge.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(I);break}case Ge.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(I);break}case Ge.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(I);break}case Ge.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(I);break}case Ge.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(I);break}case Ge.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(I);break}case Ge.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(I);break}case Ge.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(I);break}case Ge.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(I);break}case Ge.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(I);break}case Ge.BOGUS_DOCTYPE:{this._stateBogusDoctype(I);break}case Ge.CDATA_SECTION:{this._stateCdataSection(I);break}case Ge.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(I);break}case Ge.CDATA_SECTION_END:{this._stateCdataSectionEnd(I);break}case Ge.CHARACTER_REFERENCE:{this._stateCharacterReference(I);break}case Ge.NAMED_CHARACTER_REFERENCE:{this._stateNamedCharacterReference(I);break}case Ge.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(I);break}case Ge.NUMERIC_CHARACTER_REFERENCE:{this._stateNumericCharacterReference(I);break}case Ge.HEXADEMICAL_CHARACTER_REFERENCE_START:{this._stateHexademicalCharacterReferenceStart(I);break}case Ge.HEXADEMICAL_CHARACTER_REFERENCE:{this._stateHexademicalCharacterReference(I);break}case Ge.DECIMAL_CHARACTER_REFERENCE:{this._stateDecimalCharacterReference(I);break}case Ge.NUMERIC_CHARACTER_REFERENCE_END:{this._stateNumericCharacterReferenceEnd(I);break}default:throw new Error("Unknown state")}}},{key:"_stateData",value:function(I){switch(I){case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.TAG_OPEN;break}case se.CODE_POINTS.AMPERSAND:{this.returnState=Ge.DATA,this.state=Ge.CHARACTER_REFERENCE;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitCodePoint(I);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateRcdata",value:function(I){switch(I){case se.CODE_POINTS.AMPERSAND:{this.returnState=Ge.RCDATA,this.state=Ge.CHARACTER_REFERENCE;break}case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.RCDATA_LESS_THAN_SIGN;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateRawtext",value:function(I){switch(I){case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.RAWTEXT_LESS_THAN_SIGN;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateScriptData",value:function(I){switch(I){case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.SCRIPT_DATA_LESS_THAN_SIGN;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_statePlaintext",value:function(I){switch(I){case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(I)}}},{key:"_stateTagOpen",value:function(I){if(Tl(I))this._createStartTagToken(),this.state=Ge.TAG_NAME,this._stateTagName(I);else switch(I){case se.CODE_POINTS.EXCLAMATION_MARK:{this.state=Ge.MARKUP_DECLARATION_OPEN;break}case se.CODE_POINTS.SOLIDUS:{this.state=Ge.END_TAG_OPEN;break}case se.CODE_POINTS.QUESTION_MARK:{this._err(et.ERR.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Ge.BOGUS_COMMENT,this._stateBogusComment(I);break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(et.ERR.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Ge.DATA,this._stateData(I)}}},{key:"_stateEndTagOpen",value:function(I){if(Tl(I))this._createEndTagToken(),this.state=Ge.TAG_NAME,this._stateTagName(I);else switch(I){case se.CODE_POINTS.GREATER_THAN_SIGN:{this._err(et.ERR.missingEndTagName),this.state=Ge.DATA;break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofBeforeTagName),this._emitChars("");break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this.state=Ge.SCRIPT_DATA_ESCAPED,this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ge.SCRIPT_DATA_ESCAPED,this._emitCodePoint(I)}}},{key:"_stateScriptDataEscapedLessThanSign",value:function(I){I===se.CODE_POINTS.SOLIDUS?this.state=Ge.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Tl(I)?(this._emitChars("<"),this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(I)):(this._emitChars("<"),this.state=Ge.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(I))}},{key:"_stateScriptDataEscapedEndTagOpen",value:function(I){Tl(I)?(this.state=Ge.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(I)):(this._emitChars("");break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(I)}}},{key:"_stateScriptDataDoubleEscapedLessThanSign",value:function(I){I===se.CODE_POINTS.SOLIDUS?(this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(I))}},{key:"_stateScriptDataDoubleEscapeEnd",value:function(I){if(this.preprocessor.startsWith(se.SEQUENCES.SCRIPT,!1)&&BCe(this.preprocessor.peek(se.SEQUENCES.SCRIPT.length))){this._emitCodePoint(I);for(let i=0;i1114111)this._err(et.ERR.characterReferenceOutsideUnicodeRange),this.charRefCode=se.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,se.isSurrogate)(this.charRefCode))this._err(et.ERR.surrogateCharacterReference),this.charRefCode=se.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,se.isUndefinedCodePoint)(this.charRefCode))this._err(et.ERR.noncharacterCharacterReference);else if((0,se.isControlCodePoint)(this.charRefCode)||this.charRefCode===se.CODE_POINTS.CARRIAGE_RETURN){this._err(et.ERR.controlCharacterReference);const i=AGt.get(this.charRefCode);i!==void 0&&(this.charRefCode=i)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,I)}}]),e}();dh.Tokenizer=uGt;var lk={};function dGt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function SCe(e,g){for(var I=0;I0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(I,!0)}},{key:"replace",value:function(I,i){const n=this._indexOf(I);this.items[n]=i,n===this.stackTop&&(this.current=i)}},{key:"insertAfter",value:function(I,i,n){const C=this._indexOf(I)+1;this.items.splice(C,0,i),this.tagIDs.splice(C,0,n),this.stackTop++,C===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,C===this.stackTop)}},{key:"popUntilTagNamePopped",value:function(I){let i=this.stackTop+1;do i=this.tagIDs.lastIndexOf(I,i-1);while(i>0&&this.treeAdapter.getNamespaceURI(this.items[i])!==nt.NS.HTML);this.shortenToLength(i<0?0:i)}},{key:"shortenToLength",value:function(I){for(;this.stackTop>=I;){const i=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(i,this.stackTop=0;n--)if(I.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===i)return n;return-1}},{key:"clearBackTo",value:function(I,i){const n=this._indexOfTagNames(I,i);this.shortenToLength(n+1)}},{key:"clearBackToTableContext",value:function(){this.clearBackTo(ZGt,nt.NS.HTML)}},{key:"clearBackToTableBodyContext",value:function(){this.clearBackTo(yGt,nt.NS.HTML)}},{key:"clearBackToTableRowContext",value:function(){this.clearBackTo(bGt,nt.NS.HTML)}},{key:"remove",value:function(I){const i=this._indexOf(I);i>=0&&(i===this.stackTop?this.pop():(this.items.splice(i,1),this.tagIDs.splice(i,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(I,!1)))}},{key:"tryPeekProperlyNestedBodyElement",value:function(){return this.stackTop>=1&&this.tagIDs[1]===nt.TAG_ID.BODY?this.items[1]:null}},{key:"contains",value:function(I){return this._indexOf(I)>-1}},{key:"getCommonAncestor",value:function(I){const i=this._indexOf(I)-1;return i>=0?this.items[i]:null}},{key:"isRootHtmlElementCurrent",value:function(){return this.stackTop===0&&this.tagIDs[0]===nt.TAG_ID.HTML}},{key:"hasInScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i],C=this.treeAdapter.getNamespaceURI(this.items[i]);if(n===I&&C===nt.NS.HTML)return!0;if(GV.get(n)===C)return!1}return!0}},{key:"hasNumberedHeaderInScope",value:function(){for(let I=this.stackTop;I>=0;I--){const i=this.tagIDs[I],n=this.treeAdapter.getNamespaceURI(this.items[I]);if((0,nt.isNumberedHeader)(i)&&n===nt.NS.HTML)return!0;if(GV.get(i)===n)return!1}return!0}},{key:"hasInListItemScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i],C=this.treeAdapter.getNamespaceURI(this.items[i]);if(n===I&&C===nt.NS.HTML)return!0;if((n===nt.TAG_ID.UL||n===nt.TAG_ID.OL)&&C===nt.NS.HTML||GV.get(n)===C)return!1}return!0}},{key:"hasInButtonScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i],C=this.treeAdapter.getNamespaceURI(this.items[i]);if(n===I&&C===nt.NS.HTML)return!0;if(n===nt.TAG_ID.BUTTON&&C===nt.NS.HTML||GV.get(n)===C)return!1}return!0}},{key:"hasInTableScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i];if(this.treeAdapter.getNamespaceURI(this.items[i])===nt.NS.HTML){if(n===I)return!0;if(n===nt.TAG_ID.TABLE||n===nt.TAG_ID.TEMPLATE||n===nt.TAG_ID.HTML)return!1}}return!0}},{key:"hasTableBodyContextInTableScope",value:function(){for(let I=this.stackTop;I>=0;I--){const i=this.tagIDs[I];if(this.treeAdapter.getNamespaceURI(this.items[I])===nt.NS.HTML){if(i===nt.TAG_ID.TBODY||i===nt.TAG_ID.THEAD||i===nt.TAG_ID.TFOOT)return!0;if(i===nt.TAG_ID.TABLE||i===nt.TAG_ID.HTML)return!1}}return!0}},{key:"hasInSelectScope",value:function(I){for(let i=this.stackTop;i>=0;i--){const n=this.tagIDs[i];if(this.treeAdapter.getNamespaceURI(this.items[i])===nt.NS.HTML){if(n===I)return!0;if(n!==nt.TAG_ID.OPTION&&n!==nt.TAG_ID.OPTGROUP)return!1}}return!0}},{key:"generateImpliedEndTags",value:function(){for(;wwe.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsThoroughly",value:function(){for(;wCe.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsWithExclusion",value:function(I){for(;this.currentTagId!==I&&wCe.has(this.currentTagId);)this.pop()}}]),e}();lk.OpenElementStack=vGt;var Rwe={};(function(e){function g(A,l){if(!(A instanceof l))throw new TypeError("Cannot call a class as a function")}function I(A,l){for(var c=0;c[f.name,f.value]));let m=0;for(let f=0;fh.get(p.name)===p.value)&&(m+=1,m>=r&&this.entries.splice(b.idx,1))}}},{key:"insertMarker",value:function(){this.entries.unshift(a)}},{key:"pushElement",value:function(c,u){this._ensureNoahArkCondition(c),this.entries.unshift({type:o.Element,element:c,token:u})}},{key:"insertElementAfterBookmark",value:function(c,u){const d=this.entries.indexOf(this.bookmark);this.entries.splice(d,0,{type:o.Element,element:c,token:u})}},{key:"removeEntry",value:function(c){const u=this.entries.indexOf(c);u>=0&&this.entries.splice(u,1)}},{key:"clearToLastMarker",value:function(){const c=this.entries.indexOf(a);c>=0?this.entries.splice(0,c+1):this.entries.length=0}},{key:"getElementEntryInScopeWithTagName",value:function(c){const u=this.entries.find(d=>d.type===o.Marker||this.treeAdapter.getTagName(d.element)===c);return u&&u.type===o.Element?u:null}},{key:"getElementEntry",value:function(c){return this.entries.find(u=>u.type===o.Element&&u.element===c)}}]),A}();e.FormattingElementList=s})(Rwe);var ck={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.defaultTreeAdapter=void 0;const g=Cl;function I(i){return{nodeName:"#text",value:i,parentNode:null}}e.defaultTreeAdapter={createDocument(){return{nodeName:"#document",mode:g.DOCUMENT_MODE.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(i,n,C){return{nodeName:i,tagName:i,attrs:C,namespaceURI:n,childNodes:[],parentNode:null}},createCommentNode(i){return{nodeName:"#comment",data:i,parentNode:null}},appendChild(i,n){i.childNodes.push(n),n.parentNode=i},insertBefore(i,n,C){const r=i.childNodes.indexOf(C);i.childNodes.splice(r,0,n),n.parentNode=i},setTemplateContent(i,n){i.content=n},getTemplateContent(i){return i.content},setDocumentType(i,n,C,r){const o=i.childNodes.find(a=>a.nodeName==="#documentType");if(o)o.name=n,o.publicId=C,o.systemId=r;else{const a={nodeName:"#documentType",name:n,publicId:C,systemId:r,parentNode:null};e.defaultTreeAdapter.appendChild(i,a)}},setDocumentMode(i,n){i.mode=n},getDocumentMode(i){return i.mode},detachNode(i){if(i.parentNode){const n=i.parentNode.childNodes.indexOf(i);i.parentNode.childNodes.splice(n,1),i.parentNode=null}},insertText(i,n){if(i.childNodes.length>0){const C=i.childNodes[i.childNodes.length-1];if(e.defaultTreeAdapter.isTextNode(C)){C.value+=n;return}}e.defaultTreeAdapter.appendChild(i,I(n))},insertTextBefore(i,n,C){const r=i.childNodes[i.childNodes.indexOf(C)-1];r&&e.defaultTreeAdapter.isTextNode(r)?r.value+=n:e.defaultTreeAdapter.insertBefore(i,I(n),C)},adoptAttributes(i,n){const C=new Set(i.attrs.map(r=>r.name));for(let r=0;re.startsWith(I))}function WGt(e){return e.name===Vwe&&e.publicId===null&&(e.systemId===null||e.systemId===BGt)}Ub.isConforming=WGt;function XGt(e){if(e.name!==Vwe)return Om.DOCUMENT_MODE.QUIRKS;const{systemId:g}=e;if(g&&g.toLowerCase()===SGt)return Om.DOCUMENT_MODE.QUIRKS;let{publicId:I}=e;if(I!==null){if(I=I.toLowerCase(),RGt.has(I))return Om.DOCUMENT_MODE.QUIRKS;let i=g===null?wGt:Wwe;if(RCe(I,i))return Om.DOCUMENT_MODE.QUIRKS;if(i=g===null?Xwe:VGt,RCe(I,i))return Om.DOCUMENT_MODE.LIMITED_QUIRKS}return Om.DOCUMENT_MODE.NO_QUIRKS}Ub.getDocumentMode=XGt;var D4={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isIntegrationPoint=e.adjustTokenSVGTagName=e.adjustTokenXMLAttrs=e.adjustTokenSVGAttrs=e.adjustTokenMathMLAttrs=e.causesExit=e.SVG_TAG_NAMES_ADJUSTMENT_MAP=void 0;const g=Cl,I={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},i="definitionurl",n="definitionURL",C=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(m=>[m.toLowerCase(),m])),r=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:g.NS.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:g.NS.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:g.NS.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:g.NS.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:g.NS.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:g.NS.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:g.NS.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:g.NS.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:g.NS.XML}],["xml:space",{prefix:"xml",name:"space",namespace:g.NS.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:g.NS.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:g.NS.XMLNS}]]);e.SVG_TAG_NAMES_ADJUSTMENT_MAP=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(m=>[m.toLowerCase(),m]));const o=new Set([g.TAG_ID.B,g.TAG_ID.BIG,g.TAG_ID.BLOCKQUOTE,g.TAG_ID.BODY,g.TAG_ID.BR,g.TAG_ID.CENTER,g.TAG_ID.CODE,g.TAG_ID.DD,g.TAG_ID.DIV,g.TAG_ID.DL,g.TAG_ID.DT,g.TAG_ID.EM,g.TAG_ID.EMBED,g.TAG_ID.H1,g.TAG_ID.H2,g.TAG_ID.H3,g.TAG_ID.H4,g.TAG_ID.H5,g.TAG_ID.H6,g.TAG_ID.HEAD,g.TAG_ID.HR,g.TAG_ID.I,g.TAG_ID.IMG,g.TAG_ID.LI,g.TAG_ID.LISTING,g.TAG_ID.MENU,g.TAG_ID.META,g.TAG_ID.NOBR,g.TAG_ID.OL,g.TAG_ID.P,g.TAG_ID.PRE,g.TAG_ID.RUBY,g.TAG_ID.S,g.TAG_ID.SMALL,g.TAG_ID.SPAN,g.TAG_ID.STRONG,g.TAG_ID.STRIKE,g.TAG_ID.SUB,g.TAG_ID.SUP,g.TAG_ID.TABLE,g.TAG_ID.TT,g.TAG_ID.U,g.TAG_ID.UL,g.TAG_ID.VAR]);function a(m){const f=m.tagID;return f===g.TAG_ID.FONT&&m.attrs.some(({name:p})=>p===g.ATTRS.COLOR||p===g.ATTRS.SIZE||p===g.ATTRS.FACE)||o.has(f)}e.causesExit=a;function s(m){for(let f=0;f0&&this._setContextModes(I,i)}},{key:"onItemPop",value:function(I,i){var n,C;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(I,this.currentToken),(C=(n=this.treeAdapter).onItemPop)===null||C===void 0||C.call(n,I,this.openElements.current),i){let r,o;this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,o=this.fragmentContextID):{current:r,currentTagId:o}=this.openElements,this._setContextModes(r,o)}}},{key:"_setContextModes",value:function(I,i){const n=I===this.document||this.treeAdapter.getNamespaceURI(I)===z.NS.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(i,I)}},{key:"_switchToTextParsing",value:function(I,i){this._insertElement(I,z.NS.HTML),this.tokenizer.state=i,this.originalInsertionMode=this.insertionMode,this.insertionMode=Ne.TEXT}},{key:"switchToPlaintextParsing",value:function(){this.insertionMode=Ne.TEXT,this.originalInsertionMode=Ne.IN_BODY,this.tokenizer.state=jn.TokenizerMode.PLAINTEXT}},{key:"_getAdjustedCurrentElement",value:function(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}},{key:"_findFormInFragmentContext",value:function(){let I=this.fragmentContext;for(;I;){if(this.treeAdapter.getTagName(I)===z.TAG_NAMES.FORM){this.formElement=I;break}I=this.treeAdapter.getParentNode(I)}}},{key:"_initTokenizerForFragmentParsing",value:function(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==z.NS.HTML))switch(this.fragmentContextID){case z.TAG_ID.TITLE:case z.TAG_ID.TEXTAREA:{this.tokenizer.state=jn.TokenizerMode.RCDATA;break}case z.TAG_ID.STYLE:case z.TAG_ID.XMP:case z.TAG_ID.IFRAME:case z.TAG_ID.NOEMBED:case z.TAG_ID.NOFRAMES:case z.TAG_ID.NOSCRIPT:{this.tokenizer.state=jn.TokenizerMode.RAWTEXT;break}case z.TAG_ID.SCRIPT:{this.tokenizer.state=jn.TokenizerMode.SCRIPT_DATA;break}case z.TAG_ID.PLAINTEXT:{this.tokenizer.state=jn.TokenizerMode.PLAINTEXT;break}}}},{key:"_setDocumentType",value:function(I){const i=I.name||"",n=I.publicId||"",C=I.systemId||"";if(this.treeAdapter.setDocumentType(this.document,i,n,C),I.location){const o=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));o&&this.treeAdapter.setNodeSourceCodeLocation(o,I.location)}}},{key:"_attachElementToTree",value:function(I,i){if(this.options.sourceCodeLocationInfo){const n=i&&Object.assign(Object.assign({},i),{startTag:i});this.treeAdapter.setNodeSourceCodeLocation(I,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(I);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n,I)}}},{key:"_appendElement",value:function(I,i){const n=this.treeAdapter.createElement(I.tagName,i,I.attrs);this._attachElementToTree(n,I.location)}},{key:"_insertElement",value:function(I,i){const n=this.treeAdapter.createElement(I.tagName,i,I.attrs);this._attachElementToTree(n,I.location),this.openElements.push(n,I.tagID)}},{key:"_insertFakeElement",value:function(I,i){const n=this.treeAdapter.createElement(I,z.NS.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,i)}},{key:"_insertTemplate",value:function(I){const i=this.treeAdapter.createElement(I.tagName,z.NS.HTML,I.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(i,n),this._attachElementToTree(i,I.location),this.openElements.push(i,I.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}},{key:"_insertFakeRootElement",value:function(){const I=this.treeAdapter.createElement(z.TAG_NAMES.HTML,z.NS.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(I,null),this.treeAdapter.appendChild(this.openElements.current,I),this.openElements.push(I,z.TAG_ID.HTML)}},{key:"_appendCommentNode",value:function(I,i){const n=this.treeAdapter.createCommentNode(I.data);this.treeAdapter.appendChild(i,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,I.location)}},{key:"_insertCharacters",value:function(I){let i,n;if(this._shouldFosterParentOnInsertion()?({parent:i,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(i,I.chars,n):this.treeAdapter.insertText(i,I.chars)):(i=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(i,I.chars)),!I.location)return;const C=this.treeAdapter.getChildNodes(i),r=n?C.lastIndexOf(n):C.length,o=C[r-1];if(this.treeAdapter.getNodeSourceCodeLocation(o)){const{endLine:s,endCol:A,endOffset:l}=I.location;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:s,endCol:A,endOffset:l})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,I.location)}},{key:"_adoptNodes",value:function(I,i){for(let n=this.treeAdapter.getFirstChild(I);n;n=this.treeAdapter.getFirstChild(I))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(i,n)}},{key:"_setEndLocation",value:function(I,i){if(this.treeAdapter.getNodeSourceCodeLocation(I)&&i.location){const n=i.location,C=this.treeAdapter.getTagName(I),r=i.type===Vi.TokenType.END_TAG&&C===i.tagName?{endTag:Object.assign({},n),endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(I,r)}}},{key:"shouldProcessStartTagTokenInForeignContent",value:function(I){if(!this.currentNotInHTML)return!1;let i,n;return this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,n=this.fragmentContextID):{current:i,currentTagId:n}=this.openElements,I.tagID===z.TAG_ID.SVG&&this.treeAdapter.getTagName(i)===z.TAG_NAMES.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(i)===z.NS.MATHML?!1:this.tokenizer.inForeignNode||(I.tagID===z.TAG_ID.MGLYPH||I.tagID===z.TAG_ID.MALIGNMARK)&&!this._isIntegrationPoint(n,i,z.NS.HTML)}},{key:"_processToken",value:function(I){switch(I.type){case Vi.TokenType.CHARACTER:{this.onCharacter(I);break}case Vi.TokenType.NULL_CHARACTER:{this.onNullCharacter(I);break}case Vi.TokenType.COMMENT:{this.onComment(I);break}case Vi.TokenType.DOCTYPE:{this.onDoctype(I);break}case Vi.TokenType.START_TAG:{this._processStartTag(I);break}case Vi.TokenType.END_TAG:{this.onEndTag(I);break}case Vi.TokenType.EOF:{this.onEof(I);break}case Vi.TokenType.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(I);break}}}},{key:"_isIntegrationPoint",value:function(I,i,n){const C=this.treeAdapter.getNamespaceURI(i),r=this.treeAdapter.getAttrList(i);return La.isIntegrationPoint(I,C,r,n)}},{key:"_reconstructActiveFormattingElements",value:function(){const I=this.activeFormattingElements.entries.length;if(I){const i=this.activeFormattingElements.entries.findIndex(C=>C.type===WCe.EntryType.Marker||this.openElements.contains(C.element)),n=i<0?I-1:i-1;for(let C=n;C>=0;C--){const r=this.activeFormattingElements.entries[C];this._insertElement(r.token,this.treeAdapter.getNamespaceURI(r.element)),r.element=this.openElements.current}}}},{key:"_closeTableCell",value:function(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Ne.IN_ROW}},{key:"_closePElement",value:function(){this.openElements.generateImpliedEndTagsWithExclusion(z.TAG_ID.P),this.openElements.popUntilTagNamePopped(z.TAG_ID.P)}},{key:"_resetInsertionMode",value:function(){for(let I=this.openElements.stackTop;I>=0;I--)switch(I===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[I]){case z.TAG_ID.TR:{this.insertionMode=Ne.IN_ROW;return}case z.TAG_ID.TBODY:case z.TAG_ID.THEAD:case z.TAG_ID.TFOOT:{this.insertionMode=Ne.IN_TABLE_BODY;return}case z.TAG_ID.CAPTION:{this.insertionMode=Ne.IN_CAPTION;return}case z.TAG_ID.COLGROUP:{this.insertionMode=Ne.IN_COLUMN_GROUP;return}case z.TAG_ID.TABLE:{this.insertionMode=Ne.IN_TABLE;return}case z.TAG_ID.BODY:{this.insertionMode=Ne.IN_BODY;return}case z.TAG_ID.FRAMESET:{this.insertionMode=Ne.IN_FRAMESET;return}case z.TAG_ID.SELECT:{this._resetInsertionModeForSelect(I);return}case z.TAG_ID.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case z.TAG_ID.HTML:{this.insertionMode=this.headElement?Ne.AFTER_HEAD:Ne.BEFORE_HEAD;return}case z.TAG_ID.TD:case z.TAG_ID.TH:{if(I>0){this.insertionMode=Ne.IN_CELL;return}break}case z.TAG_ID.HEAD:{if(I>0){this.insertionMode=Ne.IN_HEAD;return}break}}this.insertionMode=Ne.IN_BODY}},{key:"_resetInsertionModeForSelect",value:function(I){if(I>0)for(let i=I-1;i>0;i--){const n=this.openElements.tagIDs[i];if(n===z.TAG_ID.TEMPLATE)break;if(n===z.TAG_ID.TABLE){this.insertionMode=Ne.IN_SELECT_IN_TABLE;return}}this.insertionMode=Ne.IN_SELECT}},{key:"_isElementCausesFosterParenting",value:function(I){return Twe.has(I)}},{key:"_shouldFosterParentOnInsertion",value:function(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}},{key:"_findFosterParentingLocation",value:function(){for(let I=this.openElements.stackTop;I>=0;I--){const i=this.openElements.items[I];switch(this.openElements.tagIDs[I]){case z.TAG_ID.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(i)===z.NS.HTML)return{parent:this.treeAdapter.getTemplateContent(i),beforeElement:null};break}case z.TAG_ID.TABLE:{const n=this.treeAdapter.getParentNode(i);return n?{parent:n,beforeElement:i}:{parent:this.openElements.items[I-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}},{key:"_fosterParentElement",value:function(I){const i=this._findFosterParentingLocation();i.beforeElement?this.treeAdapter.insertBefore(i.parent,I,i.beforeElement):this.treeAdapter.appendChild(i.parent,I)}},{key:"_isSpecialElement",value:function(I,i){const n=this.treeAdapter.getNamespaceURI(I);return z.SPECIAL_ELEMENTS[n].has(i)}},{key:"onCharacter",value:function(I){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){fBt(this,I);return}switch(this.insertionMode){case Ne.INITIAL:{AZ(this,I);break}case Ne.BEFORE_HTML:{nv(this,I);break}case Ne.BEFORE_HEAD:{Cv(this,I);break}case Ne.IN_HEAD:{rv(this,I);break}case Ne.IN_HEAD_NO_SCRIPT:{ov(this,I);break}case Ne.AFTER_HEAD:{av(this,I);break}case Ne.IN_BODY:case Ne.IN_CAPTION:case Ne.IN_CELL:case Ne.IN_TEMPLATE:{kwe(this,I);break}case Ne.TEXT:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:{this._insertCharacters(I);break}case Ne.IN_TABLE:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:{RD(this,I);break}case Ne.IN_TABLE_TEXT:{Ewe(this,I);break}case Ne.IN_COLUMN_GROUP:{zX(this,I);break}case Ne.AFTER_BODY:{PX(this,I);break}case Ne.AFTER_AFTER_BODY:{iW(this,I);break}}}},{key:"onNullCharacter",value:function(I){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){mBt(this,I);return}switch(this.insertionMode){case Ne.INITIAL:{AZ(this,I);break}case Ne.BEFORE_HTML:{nv(this,I);break}case Ne.BEFORE_HEAD:{Cv(this,I);break}case Ne.IN_HEAD:{rv(this,I);break}case Ne.IN_HEAD_NO_SCRIPT:{ov(this,I);break}case Ne.AFTER_HEAD:{av(this,I);break}case Ne.TEXT:{this._insertCharacters(I);break}case Ne.IN_TABLE:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:{RD(this,I);break}case Ne.IN_COLUMN_GROUP:{zX(this,I);break}case Ne.AFTER_BODY:{PX(this,I);break}case Ne.AFTER_AFTER_BODY:{iW(this,I);break}}}},{key:"onComment",value:function(I){if(this.skipNextNewLine=!1,this.currentNotInHTML){Lz(this,I);return}switch(this.insertionMode){case Ne.INITIAL:case Ne.BEFORE_HTML:case Ne.BEFORE_HEAD:case Ne.IN_HEAD:case Ne.IN_HEAD_NO_SCRIPT:case Ne.AFTER_HEAD:case Ne.IN_BODY:case Ne.IN_TABLE:case Ne.IN_CAPTION:case Ne.IN_COLUMN_GROUP:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:case Ne.IN_CELL:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:case Ne.IN_TEMPLATE:case Ne.IN_FRAMESET:case Ne.AFTER_FRAMESET:{Lz(this,I);break}case Ne.IN_TABLE_TEXT:{sZ(this,I);break}case Ne.AFTER_BODY:{UGt(this,I);break}case Ne.AFTER_AFTER_BODY:case Ne.AFTER_AFTER_FRAMESET:{QGt(this,I);break}}}},{key:"onDoctype",value:function(I){switch(this.skipNextNewLine=!1,this.insertionMode){case Ne.INITIAL:{jGt(this,I);break}case Ne.BEFORE_HEAD:case Ne.IN_HEAD:case Ne.IN_HEAD_NO_SCRIPT:case Ne.AFTER_HEAD:{this._err(I,fn.ERR.misplacedDoctype);break}case Ne.IN_TABLE_TEXT:{sZ(this,I);break}}}},{key:"onStartTag",value:function(I){this.skipNextNewLine=!1,this.currentToken=I,this._processStartTag(I),I.selfClosing&&!I.ackSelfClosing&&this._err(I,fn.ERR.nonVoidHtmlElementStartTagWithTrailingSolidus)}},{key:"_processStartTag",value:function(I){this.shouldProcessStartTagTokenInForeignContent(I)?pBt(this,I):this._startTagOutsideForeignContent(I)}},{key:"_startTagOutsideForeignContent",value:function(I){switch(this.insertionMode){case Ne.INITIAL:{AZ(this,I);break}case Ne.BEFORE_HTML:{$Gt(this,I);break}case Ne.BEFORE_HEAD:{evt(this,I);break}case Ne.IN_HEAD:{ya(this,I);break}case Ne.IN_HEAD_NO_SCRIPT:{Ivt(this,I);break}case Ne.AFTER_HEAD:{nvt(this,I);break}case Ne.IN_BODY:{Pn(this,I);break}case Ne.IN_TABLE:{Qb(this,I);break}case Ne.IN_TABLE_TEXT:{sZ(this,I);break}case Ne.IN_CAPTION:{tBt(this,I);break}case Ne.IN_COLUMN_GROUP:{M4(this,I);break}case Ne.IN_TABLE_BODY:{hk(this,I);break}case Ne.IN_ROW:{mk(this,I);break}case Ne.IN_CELL:{iBt(this,I);break}case Ne.IN_SELECT:{Pwe(this,I);break}case Ne.IN_SELECT_IN_TABLE:{CBt(this,I);break}case Ne.IN_TEMPLATE:{oBt(this,I);break}case Ne.AFTER_BODY:{ABt(this,I);break}case Ne.IN_FRAMESET:{sBt(this,I);break}case Ne.AFTER_FRAMESET:{cBt(this,I);break}case Ne.AFTER_AFTER_BODY:{dBt(this,I);break}case Ne.AFTER_AFTER_FRAMESET:{hBt(this,I);break}}}},{key:"onEndTag",value:function(I){this.skipNextNewLine=!1,this.currentToken=I,this.currentNotInHTML?bBt(this,I):this._endTagOutsideForeignContent(I)}},{key:"_endTagOutsideForeignContent",value:function(I){switch(this.insertionMode){case Ne.INITIAL:{AZ(this,I);break}case Ne.BEFORE_HTML:{qGt(this,I);break}case Ne.BEFORE_HEAD:{tvt(this,I);break}case Ne.IN_HEAD:{gvt(this,I);break}case Ne.IN_HEAD_NO_SCRIPT:{ivt(this,I);break}case Ne.AFTER_HEAD:{Cvt(this,I);break}case Ne.IN_BODY:{dk(this,I);break}case Ne.TEXT:{Jvt(this,I);break}case Ne.IN_TABLE:{_B(this,I);break}case Ne.IN_TABLE_TEXT:{sZ(this,I);break}case Ne.IN_CAPTION:{gBt(this,I);break}case Ne.IN_COLUMN_GROUP:{IBt(this,I);break}case Ne.IN_TABLE_BODY:{Uz(this,I);break}case Ne.IN_ROW:{zwe(this,I);break}case Ne.IN_CELL:{nBt(this,I);break}case Ne.IN_SELECT:{Jwe(this,I);break}case Ne.IN_SELECT_IN_TABLE:{rBt(this,I);break}case Ne.IN_TEMPLATE:{aBt(this,I);break}case Ne.AFTER_BODY:{_we(this,I);break}case Ne.IN_FRAMESET:{lBt(this,I);break}case Ne.AFTER_FRAMESET:{uBt(this,I);break}case Ne.AFTER_AFTER_BODY:{iW(this,I);break}}}},{key:"onEof",value:function(I){switch(this.insertionMode){case Ne.INITIAL:{AZ(this,I);break}case Ne.BEFORE_HTML:{nv(this,I);break}case Ne.BEFORE_HEAD:{Cv(this,I);break}case Ne.IN_HEAD:{rv(this,I);break}case Ne.IN_HEAD_NO_SCRIPT:{ov(this,I);break}case Ne.AFTER_HEAD:{av(this,I);break}case Ne.IN_BODY:case Ne.IN_TABLE:case Ne.IN_CAPTION:case Ne.IN_COLUMN_GROUP:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:case Ne.IN_CELL:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:{Dwe(this,I);break}case Ne.TEXT:{Ovt(this,I);break}case Ne.IN_TABLE_TEXT:{sZ(this,I);break}case Ne.IN_TEMPLATE:{Owe(this,I);break}case Ne.AFTER_BODY:case Ne.IN_FRAMESET:case Ne.AFTER_FRAMESET:case Ne.AFTER_AFTER_BODY:case Ne.AFTER_AFTER_FRAMESET:{E4(this,I);break}}}},{key:"onWhitespaceCharacter",value:function(I){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,I.chars.charCodeAt(0)===Hwe.CODE_POINTS.LINE_FEED)){if(I.chars.length===1)return;I.chars=I.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(I);return}switch(this.insertionMode){case Ne.IN_HEAD:case Ne.IN_HEAD_NO_SCRIPT:case Ne.AFTER_HEAD:case Ne.TEXT:case Ne.IN_COLUMN_GROUP:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:case Ne.IN_FRAMESET:case Ne.AFTER_FRAMESET:{this._insertCharacters(I);break}case Ne.IN_BODY:case Ne.IN_CAPTION:case Ne.IN_CELL:case Ne.IN_TEMPLATE:case Ne.AFTER_BODY:case Ne.AFTER_AFTER_BODY:case Ne.AFTER_AFTER_FRAMESET:{Nwe(this,I);break}case Ne.IN_TABLE:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:{RD(this,I);break}case Ne.IN_TABLE_TEXT:{xwe(this,I);break}}}}],[{key:"parse",value:function(I,i){const n=new this(i);return n.tokenizer.write(I,!0),n.document}},{key:"getFragmentParser",value:function(I,i){const n=Object.assign(Object.assign({},HCe),i);I??(I=n.treeAdapter.createElement(z.TAG_NAMES.TEMPLATE,z.NS.HTML,[]));const C=n.treeAdapter.createElement("documentmock",z.NS.HTML,[]),r=new this(n,C,I);return r.fragmentContextID===z.TAG_ID.TEMPLATE&&r.tmplInsertionModeStack.unshift(Ne.IN_TEMPLATE),r._initTokenizerForFragmentParsing(),r._insertFakeRootElement(),r._resetInsertionMode(),r._findFormInFragmentContext(),r}}]),e}();OB.Parser=MGt;function zGt(e,g){let I=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.tagName);return I?e.openElements.contains(I.element)?e.openElements.hasInScope(g.tagID)||(I=null):(e.activeFormattingElements.removeEntry(I),I=null):Fwe(e,g),I}function PGt(e,g){let I=null,i=e.openElements.stackTop;for(;i>=0;i--){const n=e.openElements.items[i];if(n===g.element)break;e._isSpecialElement(n,e.openElements.tagIDs[i])&&(I=n)}return I||(e.openElements.shortenToLength(i<0?0:i),e.activeFormattingElements.removeEntry(g)),I}function JGt(e,g,I){let i=g,n=e.openElements.getCommonAncestor(g);for(let C=0,r=n;r!==I;C++,r=n){n=e.openElements.getCommonAncestor(r);const o=e.activeFormattingElements.getElementEntry(r),a=o&&C>=xGt;!o||a?(a&&e.activeFormattingElements.removeEntry(o),e.openElements.remove(r)):(r=OGt(e,o),i===g&&(e.activeFormattingElements.bookmark=o),e.treeAdapter.detachNode(i),e.treeAdapter.appendChild(r,i),i=r)}return i}function OGt(e,g){const I=e.treeAdapter.getNamespaceURI(g.element),i=e.treeAdapter.createElement(g.token.tagName,I,g.token.attrs);return e.openElements.replace(g.element,i),g.element=i,i}function _Gt(e,g,I){const i=e.treeAdapter.getTagName(g),n=(0,z.getTagID)(i);if(e._isElementCausesFosterParenting(n))e._fosterParentElement(I);else{const C=e.treeAdapter.getNamespaceURI(g);n===z.TAG_ID.TEMPLATE&&C===z.NS.HTML&&(g=e.treeAdapter.getTemplateContent(g)),e.treeAdapter.appendChild(g,I)}}function LGt(e,g,I){const i=e.treeAdapter.getNamespaceURI(I.element),{token:n}=I,C=e.treeAdapter.createElement(n.tagName,i,n.attrs);e._adoptNodes(g,C),e.treeAdapter.appendChild(g,C),e.activeFormattingElements.insertElementAfterBookmark(C,n),e.activeFormattingElements.removeEntry(I),e.openElements.remove(I.element),e.openElements.insertAfter(g,C,n.tagID)}function x4(e,g){for(let I=0;I=I;i--)e._setEndLocation(e.openElements.items[i],g);if(!e.fragmentContext&&e.openElements.stackTop>=0){const i=e.openElements.items[0],n=e.treeAdapter.getNodeSourceCodeLocation(i);if(n&&!n.endTag&&(e._setEndLocation(i,g),e.openElements.stackTop>=1)){const C=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(C);r&&!r.endTag&&e._setEndLocation(C,g)}}}}function jGt(e,g){e._setDocumentType(g);const I=g.forceQuirks?z.DOCUMENT_MODE.QUIRKS:XCe.getDocumentMode(g);XCe.isConforming(g)||e._err(g,fn.ERR.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,I),e.insertionMode=Ne.BEFORE_HTML}function AZ(e,g){e._err(g,fn.ERR.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,z.DOCUMENT_MODE.QUIRKS),e.insertionMode=Ne.BEFORE_HTML,e._processToken(g)}function $Gt(e,g){g.tagID===z.TAG_ID.HTML?(e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.BEFORE_HEAD):nv(e,g)}function qGt(e,g){const I=g.tagID;(I===z.TAG_ID.HTML||I===z.TAG_ID.HEAD||I===z.TAG_ID.BODY||I===z.TAG_ID.BR)&&nv(e,g)}function nv(e,g){e._insertFakeRootElement(),e.insertionMode=Ne.BEFORE_HEAD,e._processToken(g)}function evt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.HEAD:{e._insertElement(g,z.NS.HTML),e.headElement=e.openElements.current,e.insertionMode=Ne.IN_HEAD;break}default:Cv(e,g)}}function tvt(e,g){const I=g.tagID;I===z.TAG_ID.HEAD||I===z.TAG_ID.BODY||I===z.TAG_ID.HTML||I===z.TAG_ID.BR?Cv(e,g):e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}function Cv(e,g){e._insertFakeElement(z.TAG_NAMES.HEAD,z.TAG_ID.HEAD),e.headElement=e.openElements.current,e.insertionMode=Ne.IN_HEAD,e._processToken(g)}function ya(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.BASE:case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.LINK:case z.TAG_ID.META:{e._appendElement(g,z.NS.HTML),g.ackSelfClosing=!0;break}case z.TAG_ID.TITLE:{e._switchToTextParsing(g,jn.TokenizerMode.RCDATA);break}case z.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT):(e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_HEAD_NO_SCRIPT);break}case z.TAG_ID.NOFRAMES:case z.TAG_ID.STYLE:{e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT);break}case z.TAG_ID.SCRIPT:{e._switchToTextParsing(g,jn.TokenizerMode.SCRIPT_DATA);break}case z.TAG_ID.TEMPLATE:{e._insertTemplate(g),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Ne.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Ne.IN_TEMPLATE);break}case z.TAG_ID.HEAD:{e._err(g,fn.ERR.misplacedStartTagForHeadElement);break}default:rv(e,g)}}function gvt(e,g){switch(g.tagID){case z.TAG_ID.HEAD:{e.openElements.pop(),e.insertionMode=Ne.AFTER_HEAD;break}case z.TAG_ID.BODY:case z.TAG_ID.BR:case z.TAG_ID.HTML:{rv(e,g);break}case z.TAG_ID.TEMPLATE:{Am(e,g);break}default:e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}}function Am(e,g){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==z.TAG_ID.TEMPLATE&&e._err(g,fn.ERR.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(z.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}function rv(e,g){e.openElements.pop(),e.insertionMode=Ne.AFTER_HEAD,e._processToken(g)}function Ivt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.HEAD:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.NOFRAMES:case z.TAG_ID.STYLE:{ya(e,g);break}case z.TAG_ID.NOSCRIPT:{e._err(g,fn.ERR.nestedNoscriptInHead);break}default:ov(e,g)}}function ivt(e,g){switch(g.tagID){case z.TAG_ID.NOSCRIPT:{e.openElements.pop(),e.insertionMode=Ne.IN_HEAD;break}case z.TAG_ID.BR:{ov(e,g);break}default:e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}}function ov(e,g){const I=g.type===Vi.TokenType.EOF?fn.ERR.openElementsLeftAfterEof:fn.ERR.disallowedContentInNoscriptInHead;e._err(g,I),e.openElements.pop(),e.insertionMode=Ne.IN_HEAD,e._processToken(g)}function nvt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.BODY:{e._insertElement(g,z.NS.HTML),e.framesetOk=!1,e.insertionMode=Ne.IN_BODY;break}case z.TAG_ID.FRAMESET:{e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_FRAMESET;break}case z.TAG_ID.BASE:case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.NOFRAMES:case z.TAG_ID.SCRIPT:case z.TAG_ID.STYLE:case z.TAG_ID.TEMPLATE:case z.TAG_ID.TITLE:{e._err(g,fn.ERR.abandonedHeadElementChild),e.openElements.push(e.headElement,z.TAG_ID.HEAD),ya(e,g),e.openElements.remove(e.headElement);break}case z.TAG_ID.HEAD:{e._err(g,fn.ERR.misplacedStartTagForHeadElement);break}default:av(e,g)}}function Cvt(e,g){switch(g.tagID){case z.TAG_ID.BODY:case z.TAG_ID.HTML:case z.TAG_ID.BR:{av(e,g);break}case z.TAG_ID.TEMPLATE:{Am(e,g);break}default:e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}}function av(e,g){e._insertFakeElement(z.TAG_NAMES.BODY,z.TAG_ID.BODY),e.insertionMode=Ne.IN_BODY,uk(e,g)}function uk(e,g){switch(g.type){case Vi.TokenType.CHARACTER:{kwe(e,g);break}case Vi.TokenType.WHITESPACE_CHARACTER:{Nwe(e,g);break}case Vi.TokenType.COMMENT:{Lz(e,g);break}case Vi.TokenType.START_TAG:{Pn(e,g);break}case Vi.TokenType.END_TAG:{dk(e,g);break}case Vi.TokenType.EOF:{Dwe(e,g);break}}}function Nwe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g)}function kwe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g),e.framesetOk=!1}function rvt(e,g){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],g.attrs)}function ovt(e,g){const I=e.openElements.tryPeekProperlyNestedBodyElement();I&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(I,g.attrs))}function avt(e,g){const I=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&I&&(e.treeAdapter.detachNode(I),e.openElements.popAllUpToHtmlElement(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_FRAMESET)}function Avt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML)}function svt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),(0,z.isNumberedHeader)(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(g,z.NS.HTML)}function lvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function cvt(e,g){const I=e.openElements.tmplCount>0;(!e.formElement||I)&&(e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),I||(e.formElement=e.openElements.current))}function uvt(e,g){e.framesetOk=!1;const I=g.tagID;for(let i=e.openElements.stackTop;i>=0;i--){const n=e.openElements.tagIDs[i];if(I===z.TAG_ID.LI&&n===z.TAG_ID.LI||(I===z.TAG_ID.DD||I===z.TAG_ID.DT)&&(n===z.TAG_ID.DD||n===z.TAG_ID.DT)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n);break}if(n!==z.TAG_ID.ADDRESS&&n!==z.TAG_ID.DIV&&n!==z.TAG_ID.P&&e._isSpecialElement(e.openElements.items[i],n))break}e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML)}function dvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),e.tokenizer.state=jn.TokenizerMode.PLAINTEXT}function hvt(e,g){e.openElements.hasInScope(z.TAG_ID.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(z.TAG_ID.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.framesetOk=!1}function mvt(e,g){const I=e.activeFormattingElements.getElementEntryInScopeWithTagName(z.TAG_NAMES.A);I&&(x4(e,g),e.openElements.remove(I.element),e.activeFormattingElements.removeEntry(I)),e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function fvt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function pvt(e,g){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(z.TAG_ID.NOBR)&&(x4(e,g),e._reconstructActiveFormattingElements()),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function bvt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function yvt(e,g){e.treeAdapter.getDocumentMode(e.document)!==z.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),e.framesetOk=!1,e.insertionMode=Ne.IN_TABLE}function Ywe(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,z.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function Kwe(e){const g=(0,Vi.getTokenAttr)(e,z.ATTRS.TYPE);return g!=null&&g.toLowerCase()===FGt}function Zvt(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,z.NS.HTML),Kwe(g)||(e.framesetOk=!1),g.ackSelfClosing=!0}function Gvt(e,g){e._appendElement(g,z.NS.HTML),g.ackSelfClosing=!0}function vvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._appendElement(g,z.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function Bvt(e,g){g.tagName=z.TAG_NAMES.IMG,g.tagID=z.TAG_ID.IMG,Ywe(e,g)}function Svt(e,g){e._insertElement(g,z.NS.HTML),e.skipNextNewLine=!0,e.tokenizer.state=jn.TokenizerMode.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Ne.TEXT}function wvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT)}function Rvt(e,g){e.framesetOk=!1,e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT)}function TCe(e,g){e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT)}function Vvt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Ne.IN_TABLE||e.insertionMode===Ne.IN_CAPTION||e.insertionMode===Ne.IN_TABLE_BODY||e.insertionMode===Ne.IN_ROW||e.insertionMode===Ne.IN_CELL?Ne.IN_SELECT_IN_TABLE:Ne.IN_SELECT}function Wvt(e,g){e.openElements.currentTagId===z.TAG_ID.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML)}function Xvt(e,g){e.openElements.hasInScope(z.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(g,z.NS.HTML)}function Hvt(e,g){e.openElements.hasInScope(z.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(z.TAG_ID.RTC),e._insertElement(g,z.NS.HTML)}function Tvt(e,g){e._reconstructActiveFormattingElements(),La.adjustTokenMathMLAttrs(g),La.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,z.NS.MATHML):e._insertElement(g,z.NS.MATHML),g.ackSelfClosing=!0}function Nvt(e,g){e._reconstructActiveFormattingElements(),La.adjustTokenSVGAttrs(g),La.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,z.NS.SVG):e._insertElement(g,z.NS.SVG),g.ackSelfClosing=!0}function NCe(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML)}function Pn(e,g){switch(g.tagID){case z.TAG_ID.I:case z.TAG_ID.S:case z.TAG_ID.B:case z.TAG_ID.U:case z.TAG_ID.EM:case z.TAG_ID.TT:case z.TAG_ID.BIG:case z.TAG_ID.CODE:case z.TAG_ID.FONT:case z.TAG_ID.SMALL:case z.TAG_ID.STRIKE:case z.TAG_ID.STRONG:{fvt(e,g);break}case z.TAG_ID.A:{mvt(e,g);break}case z.TAG_ID.H1:case z.TAG_ID.H2:case z.TAG_ID.H3:case z.TAG_ID.H4:case z.TAG_ID.H5:case z.TAG_ID.H6:{svt(e,g);break}case z.TAG_ID.P:case z.TAG_ID.DL:case z.TAG_ID.OL:case z.TAG_ID.UL:case z.TAG_ID.DIV:case z.TAG_ID.DIR:case z.TAG_ID.NAV:case z.TAG_ID.MAIN:case z.TAG_ID.MENU:case z.TAG_ID.ASIDE:case z.TAG_ID.CENTER:case z.TAG_ID.FIGURE:case z.TAG_ID.FOOTER:case z.TAG_ID.HEADER:case z.TAG_ID.HGROUP:case z.TAG_ID.DIALOG:case z.TAG_ID.DETAILS:case z.TAG_ID.ADDRESS:case z.TAG_ID.ARTICLE:case z.TAG_ID.SECTION:case z.TAG_ID.SUMMARY:case z.TAG_ID.FIELDSET:case z.TAG_ID.BLOCKQUOTE:case z.TAG_ID.FIGCAPTION:{Avt(e,g);break}case z.TAG_ID.LI:case z.TAG_ID.DD:case z.TAG_ID.DT:{uvt(e,g);break}case z.TAG_ID.BR:case z.TAG_ID.IMG:case z.TAG_ID.WBR:case z.TAG_ID.AREA:case z.TAG_ID.EMBED:case z.TAG_ID.KEYGEN:{Ywe(e,g);break}case z.TAG_ID.HR:{vvt(e,g);break}case z.TAG_ID.RB:case z.TAG_ID.RTC:{Xvt(e,g);break}case z.TAG_ID.RT:case z.TAG_ID.RP:{Hvt(e,g);break}case z.TAG_ID.PRE:case z.TAG_ID.LISTING:{lvt(e,g);break}case z.TAG_ID.XMP:{wvt(e,g);break}case z.TAG_ID.SVG:{Nvt(e,g);break}case z.TAG_ID.HTML:{rvt(e,g);break}case z.TAG_ID.BASE:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.STYLE:case z.TAG_ID.TITLE:case z.TAG_ID.SCRIPT:case z.TAG_ID.BGSOUND:case z.TAG_ID.BASEFONT:case z.TAG_ID.TEMPLATE:{ya(e,g);break}case z.TAG_ID.BODY:{ovt(e,g);break}case z.TAG_ID.FORM:{cvt(e,g);break}case z.TAG_ID.NOBR:{pvt(e,g);break}case z.TAG_ID.MATH:{Tvt(e,g);break}case z.TAG_ID.TABLE:{yvt(e,g);break}case z.TAG_ID.INPUT:{Zvt(e,g);break}case z.TAG_ID.PARAM:case z.TAG_ID.TRACK:case z.TAG_ID.SOURCE:{Gvt(e,g);break}case z.TAG_ID.IMAGE:{Bvt(e,g);break}case z.TAG_ID.BUTTON:{hvt(e,g);break}case z.TAG_ID.APPLET:case z.TAG_ID.OBJECT:case z.TAG_ID.MARQUEE:{bvt(e,g);break}case z.TAG_ID.IFRAME:{Rvt(e,g);break}case z.TAG_ID.SELECT:{Vvt(e,g);break}case z.TAG_ID.OPTION:case z.TAG_ID.OPTGROUP:{Wvt(e,g);break}case z.TAG_ID.NOEMBED:{TCe(e,g);break}case z.TAG_ID.FRAMESET:{avt(e,g);break}case z.TAG_ID.TEXTAREA:{Svt(e,g);break}case z.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?TCe(e,g):NCe(e,g);break}case z.TAG_ID.PLAINTEXT:{dvt(e,g);break}case z.TAG_ID.COL:case z.TAG_ID.TH:case z.TAG_ID.TD:case z.TAG_ID.TR:case z.TAG_ID.HEAD:case z.TAG_ID.FRAME:case z.TAG_ID.TBODY:case z.TAG_ID.TFOOT:case z.TAG_ID.THEAD:case z.TAG_ID.CAPTION:case z.TAG_ID.COLGROUP:break;default:NCe(e,g)}}function kvt(e,g){if(e.openElements.hasInScope(z.TAG_ID.BODY)&&(e.insertionMode=Ne.AFTER_BODY,e.options.sourceCodeLocationInfo)){const I=e.openElements.tryPeekProperlyNestedBodyElement();I&&e._setEndLocation(I,g)}}function Yvt(e,g){e.openElements.hasInScope(z.TAG_ID.BODY)&&(e.insertionMode=Ne.AFTER_BODY,_we(e,g))}function Kvt(e,g){const I=g.tagID;e.openElements.hasInScope(I)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(I))}function Fvt(e){const g=e.openElements.tmplCount>0,{formElement:I}=e;g||(e.formElement=null),(I||g)&&e.openElements.hasInScope(z.TAG_ID.FORM)&&(e.openElements.generateImpliedEndTags(),g?e.openElements.popUntilTagNamePopped(z.TAG_ID.FORM):I&&e.openElements.remove(I))}function Dvt(e){e.openElements.hasInButtonScope(z.TAG_ID.P)||e._insertFakeElement(z.TAG_NAMES.P,z.TAG_ID.P),e._closePElement()}function xvt(e){e.openElements.hasInListItemScope(z.TAG_ID.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(z.TAG_ID.LI),e.openElements.popUntilTagNamePopped(z.TAG_ID.LI))}function Evt(e,g){const I=g.tagID;e.openElements.hasInScope(I)&&(e.openElements.generateImpliedEndTagsWithExclusion(I),e.openElements.popUntilTagNamePopped(I))}function Mvt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function zvt(e,g){const I=g.tagID;e.openElements.hasInScope(I)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(I),e.activeFormattingElements.clearToLastMarker())}function Pvt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(z.TAG_NAMES.BR,z.TAG_ID.BR),e.openElements.pop(),e.framesetOk=!1}function Fwe(e,g){const I=g.tagName,i=g.tagID;for(let n=e.openElements.stackTop;n>0;n--){const C=e.openElements.items[n],r=e.openElements.tagIDs[n];if(i===r&&(i!==z.TAG_ID.UNKNOWN||e.treeAdapter.getTagName(C)===I)){e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.stackTop>=n&&e.openElements.shortenToLength(n);break}if(e._isSpecialElement(C,r))break}}function dk(e,g){switch(g.tagID){case z.TAG_ID.A:case z.TAG_ID.B:case z.TAG_ID.I:case z.TAG_ID.S:case z.TAG_ID.U:case z.TAG_ID.EM:case z.TAG_ID.TT:case z.TAG_ID.BIG:case z.TAG_ID.CODE:case z.TAG_ID.FONT:case z.TAG_ID.NOBR:case z.TAG_ID.SMALL:case z.TAG_ID.STRIKE:case z.TAG_ID.STRONG:{x4(e,g);break}case z.TAG_ID.P:{Dvt(e);break}case z.TAG_ID.DL:case z.TAG_ID.UL:case z.TAG_ID.OL:case z.TAG_ID.DIR:case z.TAG_ID.DIV:case z.TAG_ID.NAV:case z.TAG_ID.PRE:case z.TAG_ID.MAIN:case z.TAG_ID.MENU:case z.TAG_ID.ASIDE:case z.TAG_ID.BUTTON:case z.TAG_ID.CENTER:case z.TAG_ID.FIGURE:case z.TAG_ID.FOOTER:case z.TAG_ID.HEADER:case z.TAG_ID.HGROUP:case z.TAG_ID.DIALOG:case z.TAG_ID.ADDRESS:case z.TAG_ID.ARTICLE:case z.TAG_ID.DETAILS:case z.TAG_ID.SECTION:case z.TAG_ID.SUMMARY:case z.TAG_ID.LISTING:case z.TAG_ID.FIELDSET:case z.TAG_ID.BLOCKQUOTE:case z.TAG_ID.FIGCAPTION:{Kvt(e,g);break}case z.TAG_ID.LI:{xvt(e);break}case z.TAG_ID.DD:case z.TAG_ID.DT:{Evt(e,g);break}case z.TAG_ID.H1:case z.TAG_ID.H2:case z.TAG_ID.H3:case z.TAG_ID.H4:case z.TAG_ID.H5:case z.TAG_ID.H6:{Mvt(e);break}case z.TAG_ID.BR:{Pvt(e);break}case z.TAG_ID.BODY:{kvt(e,g);break}case z.TAG_ID.HTML:{Yvt(e,g);break}case z.TAG_ID.FORM:{Fvt(e);break}case z.TAG_ID.APPLET:case z.TAG_ID.OBJECT:case z.TAG_ID.MARQUEE:{zvt(e,g);break}case z.TAG_ID.TEMPLATE:{Am(e,g);break}default:Fwe(e,g)}}function Dwe(e,g){e.tmplInsertionModeStack.length>0?Owe(e,g):E4(e,g)}function Jvt(e,g){var I;g.tagID===z.TAG_ID.SCRIPT&&((I=e.scriptHandler)===null||I===void 0||I.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function Ovt(e,g){e._err(g,fn.ERR.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(g)}function RD(e,g){if(Twe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Ne.IN_TABLE_TEXT,g.type){case Vi.TokenType.CHARACTER:{Ewe(e,g);break}case Vi.TokenType.WHITESPACE_CHARACTER:{xwe(e,g);break}}else cw(e,g)}function _vt(e,g){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_CAPTION}function Lvt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_COLUMN_GROUP}function Uvt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(z.TAG_NAMES.COLGROUP,z.TAG_ID.COLGROUP),e.insertionMode=Ne.IN_COLUMN_GROUP,M4(e,g)}function Qvt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_TABLE_BODY}function jvt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(z.TAG_NAMES.TBODY,z.TAG_ID.TBODY),e.insertionMode=Ne.IN_TABLE_BODY,hk(e,g)}function $vt(e,g){e.openElements.hasInTableScope(z.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.TABLE),e._resetInsertionMode(),e._processStartTag(g))}function qvt(e,g){Kwe(g)?e._appendElement(g,z.NS.HTML):cw(e,g),g.ackSelfClosing=!0}function eBt(e,g){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(g,z.NS.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Qb(e,g){switch(g.tagID){case z.TAG_ID.TD:case z.TAG_ID.TH:case z.TAG_ID.TR:{jvt(e,g);break}case z.TAG_ID.STYLE:case z.TAG_ID.SCRIPT:case z.TAG_ID.TEMPLATE:{ya(e,g);break}case z.TAG_ID.COL:{Uvt(e,g);break}case z.TAG_ID.FORM:{eBt(e,g);break}case z.TAG_ID.TABLE:{$vt(e,g);break}case z.TAG_ID.TBODY:case z.TAG_ID.TFOOT:case z.TAG_ID.THEAD:{Qvt(e,g);break}case z.TAG_ID.INPUT:{qvt(e,g);break}case z.TAG_ID.CAPTION:{_vt(e,g);break}case z.TAG_ID.COLGROUP:{Lvt(e,g);break}default:cw(e,g)}}function _B(e,g){switch(g.tagID){case z.TAG_ID.TABLE:{e.openElements.hasInTableScope(z.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.TABLE),e._resetInsertionMode());break}case z.TAG_ID.TEMPLATE:{Am(e,g);break}case z.TAG_ID.BODY:case z.TAG_ID.CAPTION:case z.TAG_ID.COL:case z.TAG_ID.COLGROUP:case z.TAG_ID.HTML:case z.TAG_ID.TBODY:case z.TAG_ID.TD:case z.TAG_ID.TFOOT:case z.TAG_ID.TH:case z.TAG_ID.THEAD:case z.TAG_ID.TR:break;default:cw(e,g)}}function cw(e,g){const I=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,uk(e,g),e.fosterParentingEnabled=I}function xwe(e,g){e.pendingCharacterTokens.push(g)}function Ewe(e,g){e.pendingCharacterTokens.push(g),e.hasNonWhitespacePendingCharacterToken=!0}function sZ(e,g){let I=0;if(e.hasNonWhitespacePendingCharacterToken)for(;I0&&e.openElements.currentTagId===z.TAG_ID.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===z.TAG_ID.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===z.TAG_ID.OPTGROUP&&e.openElements.pop();break}case z.TAG_ID.OPTION:{e.openElements.currentTagId===z.TAG_ID.OPTION&&e.openElements.pop();break}case z.TAG_ID.SELECT:{e.openElements.hasInSelectScope(z.TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.SELECT),e._resetInsertionMode());break}case z.TAG_ID.TEMPLATE:{Am(e,g);break}}}function CBt(e,g){const I=g.tagID;I===z.TAG_ID.CAPTION||I===z.TAG_ID.TABLE||I===z.TAG_ID.TBODY||I===z.TAG_ID.TFOOT||I===z.TAG_ID.THEAD||I===z.TAG_ID.TR||I===z.TAG_ID.TD||I===z.TAG_ID.TH?(e.openElements.popUntilTagNamePopped(z.TAG_ID.SELECT),e._resetInsertionMode(),e._processStartTag(g)):Pwe(e,g)}function rBt(e,g){const I=g.tagID;I===z.TAG_ID.CAPTION||I===z.TAG_ID.TABLE||I===z.TAG_ID.TBODY||I===z.TAG_ID.TFOOT||I===z.TAG_ID.THEAD||I===z.TAG_ID.TR||I===z.TAG_ID.TD||I===z.TAG_ID.TH?e.openElements.hasInTableScope(I)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.SELECT),e._resetInsertionMode(),e.onEndTag(g)):Jwe(e,g)}function oBt(e,g){switch(g.tagID){case z.TAG_ID.BASE:case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.NOFRAMES:case z.TAG_ID.SCRIPT:case z.TAG_ID.STYLE:case z.TAG_ID.TEMPLATE:case z.TAG_ID.TITLE:{ya(e,g);break}case z.TAG_ID.CAPTION:case z.TAG_ID.COLGROUP:case z.TAG_ID.TBODY:case z.TAG_ID.TFOOT:case z.TAG_ID.THEAD:{e.tmplInsertionModeStack[0]=Ne.IN_TABLE,e.insertionMode=Ne.IN_TABLE,Qb(e,g);break}case z.TAG_ID.COL:{e.tmplInsertionModeStack[0]=Ne.IN_COLUMN_GROUP,e.insertionMode=Ne.IN_COLUMN_GROUP,M4(e,g);break}case z.TAG_ID.TR:{e.tmplInsertionModeStack[0]=Ne.IN_TABLE_BODY,e.insertionMode=Ne.IN_TABLE_BODY,hk(e,g);break}case z.TAG_ID.TD:case z.TAG_ID.TH:{e.tmplInsertionModeStack[0]=Ne.IN_ROW,e.insertionMode=Ne.IN_ROW,mk(e,g);break}default:e.tmplInsertionModeStack[0]=Ne.IN_BODY,e.insertionMode=Ne.IN_BODY,Pn(e,g)}}function aBt(e,g){g.tagID===z.TAG_ID.TEMPLATE&&Am(e,g)}function Owe(e,g){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(z.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(g)):E4(e,g)}function ABt(e,g){g.tagID===z.TAG_ID.HTML?Pn(e,g):PX(e,g)}function _we(e,g){var I;if(g.tagID===z.TAG_ID.HTML){if(e.fragmentContext||(e.insertionMode=Ne.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===z.TAG_ID.HTML){e._setEndLocation(e.openElements.items[0],g);const i=e.openElements.items[1];i&&!(!((I=e.treeAdapter.getNodeSourceCodeLocation(i))===null||I===void 0)&&I.endTag)&&e._setEndLocation(i,g)}}else PX(e,g)}function PX(e,g){e.insertionMode=Ne.IN_BODY,uk(e,g)}function sBt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.FRAMESET:{e._insertElement(g,z.NS.HTML);break}case z.TAG_ID.FRAME:{e._appendElement(g,z.NS.HTML),g.ackSelfClosing=!0;break}case z.TAG_ID.NOFRAMES:{ya(e,g);break}}}function lBt(e,g){g.tagID===z.TAG_ID.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==z.TAG_ID.FRAMESET&&(e.insertionMode=Ne.AFTER_FRAMESET))}function cBt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.NOFRAMES:{ya(e,g);break}}}function uBt(e,g){g.tagID===z.TAG_ID.HTML&&(e.insertionMode=Ne.AFTER_AFTER_FRAMESET)}function dBt(e,g){g.tagID===z.TAG_ID.HTML?Pn(e,g):iW(e,g)}function iW(e,g){e.insertionMode=Ne.IN_BODY,uk(e,g)}function hBt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.NOFRAMES:{ya(e,g);break}}}function mBt(e,g){g.chars=Hwe.REPLACEMENT_CHARACTER,e._insertCharacters(g)}function fBt(e,g){e._insertCharacters(g),e.framesetOk=!1}function Lwe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==z.NS.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function pBt(e,g){if(La.causesExit(g))Lwe(e),e._startTagOutsideForeignContent(g);else{const I=e._getAdjustedCurrentElement(),i=e.treeAdapter.getNamespaceURI(I);i===z.NS.MATHML?La.adjustTokenMathMLAttrs(g):i===z.NS.SVG&&(La.adjustTokenSVGTagName(g),La.adjustTokenSVGAttrs(g)),La.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,i):e._insertElement(g,i),g.ackSelfClosing=!0}}function bBt(e,g){if(g.tagID===z.TAG_ID.P||g.tagID===z.TAG_ID.BR){Lwe(e),e._endTagOutsideForeignContent(g);return}for(let I=e.openElements.stackTop;I>0;I--){const i=e.openElements.items[I];if(e.treeAdapter.getNamespaceURI(i)===z.NS.HTML){e._endTagOutsideForeignContent(g);break}const n=e.treeAdapter.getTagName(i);if(n.toLowerCase()===g.tagName){g.tagName=n,e.openElements.shortenToLength(I);break}}}var jb={};Object.defineProperty(jb,"__esModule",{value:!0});jb.serializeOuter=jb.serialize=void 0;const rI=Cl,Uwe=Fb,yBt=ck,ZBt=new Set([rI.TAG_NAMES.AREA,rI.TAG_NAMES.BASE,rI.TAG_NAMES.BASEFONT,rI.TAG_NAMES.BGSOUND,rI.TAG_NAMES.BR,rI.TAG_NAMES.COL,rI.TAG_NAMES.EMBED,rI.TAG_NAMES.FRAME,rI.TAG_NAMES.HR,rI.TAG_NAMES.IMG,rI.TAG_NAMES.INPUT,rI.TAG_NAMES.KEYGEN,rI.TAG_NAMES.LINK,rI.TAG_NAMES.META,rI.TAG_NAMES.PARAM,rI.TAG_NAMES.SOURCE,rI.TAG_NAMES.TRACK,rI.TAG_NAMES.WBR]);function Qwe(e,g){return g.treeAdapter.isElementNode(e)&&g.treeAdapter.getNamespaceURI(e)===rI.NS.HTML&&ZBt.has(g.treeAdapter.getTagName(e))}const jwe={treeAdapter:yBt.defaultTreeAdapter,scriptingEnabled:!0};function GBt(e,g){const I=Object.assign(Object.assign({},jwe),g);return Qwe(e,I)?"":$we(e,I)}jb.serialize=GBt;function vBt(e,g){const I=Object.assign(Object.assign({},jwe),g);return qwe(e,I)}jb.serializeOuter=vBt;function $we(e,g){let I="";const i=g.treeAdapter.isElementNode(e)&&g.treeAdapter.getTagName(e)===rI.TAG_NAMES.TEMPLATE&&g.treeAdapter.getNamespaceURI(e)===rI.NS.HTML?g.treeAdapter.getTemplateContent(e):e,n=g.treeAdapter.getChildNodes(i);if(n)for(const C of n)I+=qwe(C,g);return I}function qwe(e,g){return g.treeAdapter.isElementNode(e)?BBt(e,g):g.treeAdapter.isTextNode(e)?wBt(e,g):g.treeAdapter.isCommentNode(e)?RBt(e,g):g.treeAdapter.isDocumentTypeNode(e)?VBt(e,g):""}function BBt(e,g){const I=g.treeAdapter.getTagName(e);return`<${I}${SBt(e,g)}>${Qwe(e,g)?"":`${$we(e,g)}`}`}function SBt(e,{treeAdapter:g}){let I="";for(const i of g.getAttrList(e)){if(I+=" ",!i.namespace)I+=i.name;else switch(i.namespace){case rI.NS.XML:{I+=`xml:${i.name}`;break}case rI.NS.XMLNS:{i.name!=="xmlns"&&(I+="xmlns:"),I+=i.name;break}case rI.NS.XLINK:{I+=`xlink:${i.name}`;break}default:I+=`${i.prefix}:${i.name}`}I+=`="${(0,Uwe.escapeAttribute)(i.value)}"`}return I}function wBt(e,g){const{treeAdapter:I}=g,i=I.getTextNodeContent(e),n=I.getParentNode(e),C=n&&I.isElementNode(n)&&I.getTagName(n);return C&&I.getNamespaceURI(n)===rI.NS.HTML&&(0,rI.hasUnescapedText)(C,g.scriptingEnabled)?i:(0,Uwe.escapeText)(i)}function RBt(e,{treeAdapter:g}){return``}function VBt(e,{treeAdapter:g}){return``}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseFragment=e.parse=e.TokenizerMode=e.Tokenizer=e.Token=e.html=e.foreignContent=e.ErrorCodes=e.serializeOuter=e.serialize=e.Parser=e.defaultTreeAdapter=void 0;const g=OB;var I=ck;Object.defineProperty(e,"defaultTreeAdapter",{enumerable:!0,get:function(){return I.defaultTreeAdapter}});var i=OB;Object.defineProperty(e,"Parser",{enumerable:!0,get:function(){return i.Parser}});var n=jb;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return n.serialize}}),Object.defineProperty(e,"serializeOuter",{enumerable:!0,get:function(){return n.serializeOuter}});var C=lw;Object.defineProperty(e,"ErrorCodes",{enumerable:!0,get:function(){return C.ERR}}),e.foreignContent=D4,e.html=Cl,e.Token=sk;var r=dh;Object.defineProperty(e,"Tokenizer",{enumerable:!0,get:function(){return r.Tokenizer}}),Object.defineProperty(e,"TokenizerMode",{enumerable:!0,get:function(){return r.TokenizerMode}});function o(s,A){return g.Parser.parse(s,A)}e.parse=o;function a(s,A,l){typeof s=="string"&&(l=A,A=s,s=null);const c=g.Parser.getFragmentParser(s,l);return c.tokenizer.write(A,!0),c.getFragment()}e.parseFragment=a})(Gwe);(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.adapter=e.serializeDoctypeContent=void 0;const g=Gwe,I=En;function i(r){return new I.Text(r)}function n(r){const o=r.includes('"')?"'":'"';return o+r+o}function C(r,o,a){let s="!DOCTYPE ";return r&&(s+=r),o?s+=` PUBLIC ${n(o)}`:a&&(s+=" SYSTEM"),a&&(s+=` ${n(a)}`),s}e.serializeDoctypeContent=C,e.adapter={isCommentNode:I.isComment,isElementNode:I.isTag,isTextNode:I.isText,createDocument(){const r=new I.Document([]);return r["x-mode"]=g.html.DOCUMENT_MODE.NO_QUIRKS,r},createDocumentFragment(){return new I.Document([])},createElement(r,o,a){const s=Object.create(null),A=Object.create(null),l=Object.create(null);for(let u=0;u(0,I.isDirective)(c)&&c.name==="!doctype");l?l.data=A??null:(l=new I.ProcessingInstruction("!doctype",A),e.adapter.appendChild(r,l)),l["x-name"]=o??void 0,l["x-publicId"]=a??void 0,l["x-systemId"]=s??void 0},setDocumentMode(r,o){r["x-mode"]=o},getDocumentMode(r){return r["x-mode"]},detachNode(r){if(r.parent){const o=r.parent.children.indexOf(r),{prev:a,next:s}=r;r.prev=null,r.next=null,a&&(a.next=s),s&&(s.prev=a),r.parent.children.splice(o,1),r.parent=null}},insertText(r,o){const a=r.children[r.children.length-1];a&&(0,I.isText)(a)?a.data+=o:e.adapter.appendChild(r,i(o))},insertTextBefore(r,o,a){const s=r.children[r.children.indexOf(a)-1];s&&(0,I.isText)(s)?s.data+=o:e.adapter.insertBefore(r,i(o),a)},adoptAttributes(r,o){for(let a=0;a"u"&&(r.attribs[s]=o[a].value,r["x-attribsNamespace"][s]=o[a].namespace,r["x-attribsPrefix"][s]=o[a].prefix)}},getFirstChild(r){return r.children[0]},getChildNodes(r){return r.children},getParentNode(r){return r.parent},getAttrList(r){return r.attributes},getTagName(r){return r.name},getNamespaceURI(r){return r.namespace},getTextNodeContent(r){return r.data},getCommentNodeContent(r){return r.data},getDocumentTypeNodeName(r){var o;return(o=r["x-name"])!==null&&o!==void 0?o:""},getDocumentTypeNodePublicId(r){var o;return(o=r["x-publicId"])!==null&&o!==void 0?o:""},getDocumentTypeNodeSystemId(r){var o;return(o=r["x-systemId"])!==null&&o!==void 0?o:""},isDocumentTypeNode(r){return(0,I.isDirective)(r)&&r.name==="!doctype"},setNodeSourceCodeLocation(r,o){o&&(r.startIndex=o.startOffset,r.endIndex=o.endOffset),r.sourceCodeLocation=o},getNodeSourceCodeLocation(r){return r.sourceCodeLocation},updateNodeSourceCodeLocation(r,o){o.endOffset!=null&&(r.endIndex=o.endOffset),r.sourceCodeLocation=Object.assign(Object.assign({},r.sourceCodeLocation),o)}}})(Zwe);var WBt=$e&&$e.__spreadArray||function(e,g,I){if(I||arguments.length===2)for(var i=0,n=g.length,C;i=I.Zero&&c<=I.Nine}function o(c){return c>=I.LowerA&&c<=I.LowerZ||c>=I.UpperA&&c<=I.UpperZ}function a(c){return c>=I.UpperA&&c<=I.UpperF||c>=I.LowerA&&c<=I.LowerF}var s;(function(c){c[c.NoValue=0]="NoValue",c[c.Unquoted=1]="Unquoted",c[c.Single=2]="Single",c[c.Double=3]="Double"})(s=e.QuoteType||(e.QuoteType={}));var A={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])},l=function(){function c(u,d){var h=u.xmlMode,m=h===void 0?!1:h,f=u.decodeEntities,b=f===void 0?!0:f;this.cbs=d,this.state=i.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=i.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=m,this.decodeEntities=b,this.entityTrie=m?g.xmlDecodeTree:g.htmlDecodeTree}return c.prototype.reset=function(){this.state=i.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=i.Text,this.currentSequence=void 0,this.running=!0,this.offset=0},c.prototype.write=function(u){this.offset+=this.buffer.length,this.buffer=u,this.parse()},c.prototype.end=function(){this.running&&this.finish()},c.prototype.pause=function(){this.running=!1},c.prototype.resume=function(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=i.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&u===I.Amp&&(this.state=i.BeforeEntity)},c.prototype.stateSpecialStartSequence=function(u){var d=this.sequenceIndex===this.currentSequence.length,h=d?C(u):(u|32)===this.currentSequence[this.sequenceIndex];if(!h)this.isSpecial=!1;else if(!d){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=i.InTagName,this.stateInTagName(u)},c.prototype.stateInSpecialTag=function(u){if(this.sequenceIndex===this.currentSequence.length){if(u===I.Gt||n(u)){var d=this.index-this.currentSequence.length;if(this.sectionStart>14)-1;if(!this.allowLegacyEntity()&&u!==I.Semi)this.trieIndex+=h;else{var m=this.index-this.entityExcess+1;m>this.sectionStart&&this.emitPartial(this.sectionStart,m),this.entityResult=this.trieIndex,this.trieIndex+=h,this.entityExcess=0,this.sectionStart=this.index+1,h===0&&this.emitNamedEntity()}}},c.prototype.emitNamedEntity=function(){if(this.state=this.baseState,this.entityResult!==0){var u=(this.entityTrie[this.entityResult]&g.BinTrieFlags.VALUE_LENGTH)>>14;switch(u){case 1:{this.emitCodePoint(this.entityTrie[this.entityResult]&~g.BinTrieFlags.VALUE_LENGTH);break}case 2:{this.emitCodePoint(this.entityTrie[this.entityResult+1]);break}case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}}},c.prototype.stateBeforeNumericEntity=function(u){(u|32)===I.LowerX?(this.entityExcess++,this.state=i.InHexEntity):(this.state=i.InNumericEntity,this.stateInNumericEntity(u))},c.prototype.emitNumericEntity=function(u){var d=this.index-this.entityExcess-1,h=d+2+ +(this.state===i.InHexEntity);h!==this.index&&(d>this.sectionStart&&this.emitPartial(this.sectionStart,d),this.sectionStart=this.index+Number(u),this.emitCodePoint((0,g.replaceCodePoint)(this.entityResult))),this.state=this.baseState},c.prototype.stateInNumericEntity=function(u){u===I.Semi?this.emitNumericEntity(!0):r(u)?(this.entityResult=this.entityResult*10+(u-I.Zero),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)},c.prototype.stateInHexEntity=function(u){u===I.Semi?this.emitNumericEntity(!0):r(u)?(this.entityResult=this.entityResult*16+(u-I.Zero),this.entityExcess++):a(u)?(this.entityResult=this.entityResult*16+((u|32)-I.LowerA+10),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)},c.prototype.allowLegacyEntity=function(){return!this.xmlMode&&(this.baseState===i.Text||this.baseState===i.InSpecialTag)},c.prototype.cleanup=function(){this.running&&this.sectionStart!==this.index&&(this.state===i.Text||this.state===i.InSpecialTag&&this.sequenceIndex===0?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):(this.state===i.InAttributeValueDq||this.state===i.InAttributeValueSq||this.state===i.InAttributeValueNq)&&(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))},c.prototype.shouldContinue=function(){return this.index0&&r.has(this.stack[this.stack.length-1]);){var o=this.stack.pop();(i=(I=this.cbs).onclosetag)===null||i===void 0||i.call(I,o,!0)}this.isVoidElement(g)||(this.stack.push(g),DCe.has(g)?this.foreignContext.push(!0):xCe.has(g)&&this.foreignContext.push(!1)),(C=(n=this.cbs).onopentagname)===null||C===void 0||C.call(n,g),this.cbs.onopentag&&(this.attribs={})},e.prototype.endOpenTag=function(g){var I,i;this.startIndex=this.openTagStart,this.attribs&&((i=(I=this.cbs).onopentag)===null||i===void 0||i.call(I,this.tagname,this.attribs,g),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""},e.prototype.onopentagend=function(g){this.endIndex=g,this.endOpenTag(!1),this.startIndex=g+1},e.prototype.onclosetag=function(g,I){var i,n,C,r,o,a;this.endIndex=I;var s=this.getSlice(g,I);if(this.lowerCaseTagNames&&(s=s.toLowerCase()),(DCe.has(s)||xCe.has(s))&&this.foreignContext.pop(),this.isVoidElement(s))!this.options.xmlMode&&s==="br"&&((n=(i=this.cbs).onopentagname)===null||n===void 0||n.call(i,"br"),(r=(C=this.cbs).onopentag)===null||r===void 0||r.call(C,"br",{},!0),(a=(o=this.cbs).onclosetag)===null||a===void 0||a.call(o,"br",!1));else{var A=this.stack.lastIndexOf(s);if(A!==-1)if(this.cbs.onclosetag)for(var l=this.stack.length-A;l--;)this.cbs.onclosetag(this.stack.pop(),l!==0);else this.stack.length=A;else!this.options.xmlMode&&s==="p"&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=I+1},e.prototype.onselfclosingtag=function(g){this.endIndex=g,this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?(this.closeCurrentTag(!1),this.startIndex=g+1):this.onopentagend(g)},e.prototype.closeCurrentTag=function(g){var I,i,n=this.tagname;this.endOpenTag(g),this.stack[this.stack.length-1]===n&&((i=(I=this.cbs).onclosetag)===null||i===void 0||i.call(I,n,!g),this.stack.pop())},e.prototype.onattribname=function(g,I){this.startIndex=g;var i=this.getSlice(g,I);this.attribname=this.lowerCaseAttributeNames?i.toLowerCase():i},e.prototype.onattribdata=function(g,I){this.attribvalue+=this.getSlice(g,I)},e.prototype.onattribentity=function(g){this.attribvalue+=(0,kCe.fromCodePoint)(g)},e.prototype.onattribend=function(g,I){var i,n;this.endIndex=I,(n=(i=this.cbs).onattribute)===null||n===void 0||n.call(i,this.attribname,this.attribvalue,g===vV.QuoteType.Double?'"':g===vV.QuoteType.Single?"'":g===vV.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""},e.prototype.getInstructionName=function(g){var I=g.search(xBt),i=I<0?g:g.substr(0,I);return this.lowerCaseTagNames&&(i=i.toLowerCase()),i},e.prototype.ondeclaration=function(g,I){this.endIndex=I;var i=this.getSlice(g,I);if(this.cbs.onprocessinginstruction){var n=this.getInstructionName(i);this.cbs.onprocessinginstruction("!".concat(n),"!".concat(i))}this.startIndex=I+1},e.prototype.onprocessinginstruction=function(g,I){this.endIndex=I;var i=this.getSlice(g,I);if(this.cbs.onprocessinginstruction){var n=this.getInstructionName(i);this.cbs.onprocessinginstruction("?".concat(n),"?".concat(i))}this.startIndex=I+1},e.prototype.oncomment=function(g,I,i){var n,C,r,o;this.endIndex=I,(C=(n=this.cbs).oncomment)===null||C===void 0||C.call(n,this.getSlice(g,I-i)),(o=(r=this.cbs).oncommentend)===null||o===void 0||o.call(r),this.startIndex=I+1},e.prototype.oncdata=function(g,I,i){var n,C,r,o,a,s,A,l,c,u;this.endIndex=I;var d=this.getSlice(g,I-i);this.options.xmlMode||this.options.recognizeCDATA?((C=(n=this.cbs).oncdatastart)===null||C===void 0||C.call(n),(o=(r=this.cbs).ontext)===null||o===void 0||o.call(r,d),(s=(a=this.cbs).oncdataend)===null||s===void 0||s.call(a)):((l=(A=this.cbs).oncomment)===null||l===void 0||l.call(A,"[CDATA[".concat(d,"]]")),(u=(c=this.cbs).oncommentend)===null||u===void 0||u.call(c)),this.startIndex=I+1},e.prototype.onend=function(){var g,I;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(var i=this.stack.length;i>0;this.cbs.onclosetag(this.stack[--i],!0));}(I=(g=this.cbs).onend)===null||I===void 0||I.call(g)},e.prototype.reset=function(){var g,I,i,n;(I=(g=this.cbs).onreset)===null||I===void 0||I.call(g),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,(n=(i=this.cbs).onparserinit)===null||n===void 0||n.call(i,this),this.buffers.length=0,this.bufferOffset=0,this.writeIndex=0,this.ended=!1},e.prototype.parseComplete=function(g){this.reset(),this.end(g)},e.prototype.getSlice=function(g,I){for(;g-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();for(var i=this.buffers[0].slice(g-this.bufferOffset,I-this.bufferOffset);I-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),i+=this.buffers[0].slice(0,I-this.bufferOffset);return i},e.prototype.shiftBuffer=function(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()},e.prototype.write=function(g){var I,i;if(this.ended){(i=(I=this.cbs).onerror)===null||i===void 0||i.call(I,new Error(".write() after done!"));return}this.buffers.push(g),this.tokenizer.running&&(this.tokenizer.write(g),this.writeIndex++)},e.prototype.end=function(g){var I,i;if(this.ended){(i=(I=this.cbs).onerror)===null||i===void 0||i.call(I,new Error(".end() after done!"));return}g&&this.write(g),this.ended=!0,this.tokenizer.end()},e.prototype.pause=function(){this.tokenizer.pause()},e.prototype.resume=function(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"};var ik={};(function(e){var g=$e&&$e.__spreadArray||function(s,A,l){if(l||arguments.length===2)for(var c=0,u=A.length,d;c"u")return function(A){for(var l=A;l=wD(l,r);)if(e(l))return!0;return!1};var a=new WeakSet;return function(A){for(var l=A;l=wD(l,r);)if(!a.has(l)){if(r.isTag(l)&&e(l))return!0;a.add(l)}return!1}}case"_flexibleDescendant":return function(A){var l=A;do if(e(l))return!0;while(l=wD(l,r));return!1};case vo.SelectorType.Parent:return function(A){return r.getChildren(A).some(function(l){return r.isTag(l)&&e(l)})};case vo.SelectorType.Child:return function(A){var l=r.getParent(A);return l!=null&&r.isTag(l)&&e(l)};case vo.SelectorType.Sibling:return function(A){for(var l=r.getSiblings(A),c=0;c0&&(0,_z.isTraversal)(o[0])&&o[0].type!==fs.SelectorType.Descendant))if(n&&!o.some(JSe))o.unshift(Abt);else continue;o.unshift(lbt)}}function k4(e,g,i){var I;e.forEach(_z.default),i=(I=g.context)!==null&&I!==void 0?I:i;var n=Array.isArray(i),r=i&&(Array.isArray(i)?i:[i]);if(g.relativeSelector!==!1)cbt(e,g,r);else if(e.some(function(a){return a.length>0&&(0,_z.isTraversal)(a[0])}))throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");var C=!1,o=e.map(function(a){if(a.length>=2){var s=a[0],A=a[1];s.type!==fs.SelectorType.Pseudo||s.name!=="scope"||(n&&A.type===fs.SelectorType.Descendant?a[1]=sbt:(A.type===fs.SelectorType.Adjacent||A.type===fs.SelectorType.Sibling)&&(C=!0))}return ubt(a,g,r)}).reduce(dbt,fc.default.falseFunc);return o.shouldTestNextSiblings=C,o}Nc.compileToken=k4;function ubt(e,g,i){var I;return e.reduce(function(n,r){return n===fc.default.falseFunc?fc.default.falseFunc:(0,obt.compileGeneralSelector)(n,r,g,i,k4)},(I=g.rootFunc)!==null&&I!==void 0?I:fc.default.trueFunc)}function dbt(e,g){return g===fc.default.falseFunc||e===fc.default.trueFunc?e:e===fc.default.falseFunc||g===fc.default.trueFunc?g:function(I){return e(I)||g(I)}}(function(e){var g=$e&&$e.__createBinding||(Object.create?function(b,p,y,Z){Z===void 0&&(Z=y);var B=Object.getOwnPropertyDescriptor(p,y);(!B||("get"in B?!p.__esModule:B.writable||B.configurable))&&(B={enumerable:!0,get:function(){return p[y]}}),Object.defineProperty(b,Z,B)}:function(b,p,y,Z){Z===void 0&&(Z=y),b[Z]=p[y]}),i=$e&&$e.__setModuleDefault||(Object.create?function(b,p){Object.defineProperty(b,"default",{enumerable:!0,value:p})}:function(b,p){b.default=p}),I=$e&&$e.__importStar||function(b){if(b&&b.__esModule)return b;var p={};if(b!=null)for(var y in b)y!=="default"&&Object.prototype.hasOwnProperty.call(b,y)&&g(p,b,y);return i(p,b),p},n=$e&&$e.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};Object.defineProperty(e,"__esModule",{value:!0}),e.aliases=e.pseudos=e.filters=e.is=e.selectOne=e.selectAll=e.prepareContext=e._compileToken=e._compileUnsafe=e.compile=void 0;var r=I(Aa),C=n(am),o=Nc,a=ik,s=function(b,p){return b===p},A={adapter:r,equals:s};function l(b){var p,y,Z,B,G=b??A;return(p=G.adapter)!==null&&p!==void 0||(G.adapter=r),(y=G.equals)!==null&&y!==void 0||(G.equals=(B=(Z=G.adapter)===null||Z===void 0?void 0:Z.equals)!==null&&B!==void 0?B:s),G}function c(b){return function(y,Z,B){var G=l(Z);return b(y,G,B)}}e.compile=c(o.compile),e._compileUnsafe=c(o.compileUnsafe),e._compileToken=c(o.compileToken);function u(b){return function(y,Z,B){var G=l(B);typeof y!="function"&&(y=(0,o.compileUnsafe)(y,G,Z));var v=d(Z,G.adapter,y.shouldTestNextSiblings);return b(y,v,G)}}function d(b,p,y){return y===void 0&&(y=!1),y&&(b=h(b,p)),Array.isArray(b)?p.removeSubsets(b):p.getChildren(b)}e.prepareContext=d;function h(b,p){for(var y=Array.isArray(b)?b.slice(0):[b],Z=y.length,B=0;B=0?C+1:1/0:0;case"lt":return isFinite(C)?C>=0?Math.min(C,r):1/0:0;case"gt":return isFinite(C)?1/0:0;case"odd":return 2*r;case"even":return 2*r-1;case"last":case"not":return 1/0}}e.getLimit=i})(Y4);Object.defineProperty(Pb,"__esModule",{value:!0});Pb.groupSelectors=Pb.getDocumentRoot=void 0;var hbt=Y4;function mbt(e){for(;e.parent;)e=e.parent;return e}Pb.getDocumentRoot=mbt;function fbt(e){for(var g=[],i=[],I=0,n=e;I0&&V.some((0,o._compileToken)(R,X))||H.some(function(k){return y(k,V,X).length>0})}e.some=m;function f(V,S,X,W){var R=typeof X=="string"?parseInt(X,10):NaN;switch(V){case"first":case"lt":return S;case"last":return S.length>0?[S[S.length-1]]:S;case"nth":case"eq":return isFinite(R)&&Math.abs(R)1&&C.length>1?i.reduce(function(o,a){return a(o)},C):C)}}}var ow=K4(function(e,g){for(var i,I=[],n=0;n0})}Vt.has=Hbt;function Tbt(){return this.length>1?this._make(this[0]):this}Vt.first=Tbt;function Nbt(){return this.length>0?this._make(this[this.length-1]):this}Vt.last=Nbt;function kbt(e){var g;return e=+e,e===0&&this.length<=1?this:(e<0&&(e=this.length+e),this._make((g=this[e])!==null&&g!==void 0?g:[]))}Vt.eq=kbt;function Ybt(e){return e==null?this.toArray():this[e<0?this.length+e:e]}Vt.get=Ybt;function Kbt(){return Array.prototype.slice.call(this)}Vt.toArray=Kbt;function Fbt(e){var g,i;return e==null?(g=this.parent().children(),i=this[0]):typeof e=="string"?(g=this._make(e),i=this[0]):(g=this,i=(0,ma.isCheerio)(e)?e[0]:e),Array.prototype.indexOf.call(g,i)}Vt.index=Fbt;function Dbt(e,g){return this._make(Array.prototype.slice.call(this,e,g))}Vt.slice=Dbt;function xbt(){var e;return(e=this.prevObject)!==null&&e!==void 0?e:this._make([])}Vt.end=xbt;function Ebt(e,g){var i=this._make(e,g),I=(0,vA.uniqueSort)(Lz(Lz([],this.get(),!0),i.get(),!0));return this._make(I)}Vt.add=Ebt;function Mbt(e){return this.prevObject?this.add(e?this.prevObject.filter(e):this.prevObject):this}Vt.addBack=Mbt;var ng={},uh={};Object.defineProperty(uh,"__esModule",{value:!0});uh.update=uh.getParse=void 0;var zbt=Aa,sre=En;function Pbt(e){return function(i,I,n,r){if(typeof Buffer<"u"&&Buffer.isBuffer(i)&&(i=i.toString()),typeof i=="string")return e(i,I,n,r);var C=i;if(!Array.isArray(C)&&(0,sre.isDocument)(C))return C;var o=new sre.Document([]);return OSe(C,o),o}}uh.getParse=Pbt;function OSe(e,g){var i=Array.isArray(e)?e:[e];g?g.children=i:g=null;for(var I=0;I=e.length?null:e[g+i],A=0;A-1&&(c.children.splice(d,1),n===c&&g>d&&o[0]--)}l.parent=n,l.prev&&(l.prev.next=(r=l.next)!==null&&r!==void 0?r:null),l.next&&(l.next.prev=(C=l.prev)!==null&&C!==void 0?C:null),l.prev=A===0?a:I[A-1],l.next=A===I.length-1?s:I[A+1]}return a&&(a.next=I[0]),s&&(s.prev=I[I.length-1]),e.splice.apply(e,o)}function Lbt(e){var g=(0,KI.isCheerio)(e)?e:this._make(e);return g.append(this),this}ng.appendTo=Lbt;function Ubt(e){var g=(0,KI.isCheerio)(e)?e:this._make(e);return g.prepend(this),this}ng.prependTo=Ubt;ng.append=_Se(function(e,g,i){cu(g,g.length,0,e,i)});ng.prepend=_Se(function(e,g,i){cu(g,0,0,e,i)});function LSe(e){return function(g){for(var i=this.length-1,I=this.parents().last(),n=0;n0&&i!==void 0&&(g[i]+=";".concat(o))}else i=r.slice(0,C).trim(),g[i]=r.slice(C+1).trim()}return g}var Ob={};Object.defineProperty(Ob,"__esModule",{value:!0});Ob.serializeArray=Ob.serialize=void 0;var l0t=lu,cre="input,select,textarea,keygen",c0t=/%20/g,ure=/\r?\n/g;function u0t(){var e=this.serializeArray(),g=e.map(function(i){return"".concat(encodeURIComponent(i.name),"=").concat(encodeURIComponent(i.value))});return g.join("&").replace(c0t,"+")}Ob.serialize=u0t;function d0t(){var e=this;return this.map(function(g,i){var I=e._make(i);return(0,l0t.isTag)(i)&&i.name==="form"?I.find(cre).toArray():I.filter(cre).toArray()}).filter('[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map(function(g,i){var I,n=e._make(i),r=n.attr("name"),C=(I=n.val())!==null&&I!==void 0?I:"";return Array.isArray(C)?C.map(function(o){return{name:r,value:o.replace(ure,`\r +`)}}):{name:r,value:C.replace(ure,`\r +`)}}).toArray()}Ob.serializeArray=d0t;var h0t=$e&&$e.__createBinding||(Object.create?function(e,g,i,I){I===void 0&&(I=i);var n=Object.getOwnPropertyDescriptor(g,i);(!n||("get"in n?!g.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return g[i]}}),Object.defineProperty(e,I,n)}:function(e,g,i,I){I===void 0&&(I=i),e[I]=g[i]}),m0t=$e&&$e.__setModuleDefault||(Object.create?function(e,g){Object.defineProperty(e,"default",{enumerable:!0,value:g})}:function(e,g){e.default=g}),Aw=$e&&$e.__importStar||function(e){if(e&&e.__esModule)return e;var g={};if(e!=null)for(var i in e)i!=="default"&&Object.prototype.hasOwnProperty.call(e,i)&&h0t(g,e,i);return m0t(g,e),g};Object.defineProperty($N,"__esModule",{value:!0});$N.Cheerio=void 0;var f0t=Aw(mI),p0t=Aw(Vt),b0t=Aw(ng),y0t=Aw(nk),Z0t=Aw(Ob),sw=function(){function e(g,i,I){if(this.length=0,this.options=I,this._root=i,g){for(var n=0;n=55296&&o<=57343}e.isSurrogate=i;function I(o){return o>=56320&&o<=57343}e.isSurrogatePair=I;function n(o,a){return(o-55296)*1024+9216+a}e.getSurrogatePairCodePoint=n;function r(o){return o!==32&&o!==10&&o!==13&&o!==9&&o!==12&&o>=1&&o<=31||o>=127&&o<=159}e.isControlCodePoint=r;function C(o){return o>=64976&&o<=65007||g.has(o)}e.isUndefinedCodePoint=C})(Ck);var lw={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ERR=void 0,function(g){g.controlCharacterInInputStream="control-character-in-input-stream",g.noncharacterInInputStream="noncharacter-in-input-stream",g.surrogateInInputStream="surrogate-in-input-stream",g.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",g.endTagWithAttributes="end-tag-with-attributes",g.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",g.unexpectedSolidusInTag="unexpected-solidus-in-tag",g.unexpectedNullCharacter="unexpected-null-character",g.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",g.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",g.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",g.missingEndTagName="missing-end-tag-name",g.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",g.unknownNamedCharacterReference="unknown-named-character-reference",g.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",g.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",g.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",g.eofBeforeTagName="eof-before-tag-name",g.eofInTag="eof-in-tag",g.missingAttributeValue="missing-attribute-value",g.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",g.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",g.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",g.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",g.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",g.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",g.missingDoctypePublicIdentifier="missing-doctype-public-identifier",g.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",g.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",g.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",g.cdataInHtmlContent="cdata-in-html-content",g.incorrectlyOpenedComment="incorrectly-opened-comment",g.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",g.eofInDoctype="eof-in-doctype",g.nestedComment="nested-comment",g.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",g.eofInComment="eof-in-comment",g.incorrectlyClosedComment="incorrectly-closed-comment",g.eofInCdata="eof-in-cdata",g.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",g.nullCharacterReference="null-character-reference",g.surrogateCharacterReference="surrogate-character-reference",g.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",g.controlCharacterReference="control-character-reference",g.noncharacterCharacterReference="noncharacter-character-reference",g.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",g.missingDoctypeName="missing-doctype-name",g.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",g.duplicateAttribute="duplicate-attribute",g.nonConformingDoctype="non-conforming-doctype",g.missingDoctype="missing-doctype",g.misplacedDoctype="misplaced-doctype",g.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",g.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",g.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",g.openElementsLeftAfterEof="open-elements-left-after-eof",g.abandonedHeadElementChild="abandoned-head-element-child",g.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",g.nestedNoscriptInHead="nested-noscript-in-head",g.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(e.ERR||(e.ERR={}))})(lw);function W0t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function dre(e,g){for(var i=0;ithis.bufferWaterline}},{key:"dropParsedChunk",value:function(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}},{key:"write",value:function(i,I){this.html.length>0?this.html+=i:this.html=i,this.endOfChunkHit=!1,this.lastChunkWritten=I}},{key:"insertHtmlAtCurrentPos",value:function(i){this.html=this.html.substring(0,this.pos+1)+i+this.html.substring(this.pos+1),this.endOfChunkHit=!1}},{key:"startsWith",value:function(i,I){if(this.pos+i.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(I)return this.html.startsWith(i,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,Jn.CODE_POINTS.EOF;const n=this.html.charCodeAt(I);return n===Jn.CODE_POINTS.CARRIAGE_RETURN?Jn.CODE_POINTS.LINE_FEED:n}},{key:"advance",value:function(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,Jn.CODE_POINTS.EOF;let i=this.html.charCodeAt(this.pos);return i===Jn.CODE_POINTS.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,Jn.CODE_POINTS.LINE_FEED):i===Jn.CODE_POINTS.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,(0,Jn.isSurrogate)(i)&&(i=this._processSurrogate(i)),this.handler.onParseError===null||i>31&&i<127||i===Jn.CODE_POINTS.LINE_FEED||i===Jn.CODE_POINTS.CARRIAGE_RETURN||i>159&&i<64976||this._checkForProblematicCharacters(i),i)}},{key:"_checkForProblematicCharacters",value:function(i){(0,Jn.isControlCodePoint)(i)?this._err(VD.ERR.controlCharacterInInputStream):(0,Jn.isUndefinedCodePoint)(i)&&this._err(VD.ERR.noncharacterInInputStream)}},{key:"retreat",value:function(i){for(this.pos-=i;this.pos=0;n--)if(i.attrs[n].name===I)return i.attrs[n].value;return null}e.getTokenAttr=g})(ok);var rl={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasUnescapedText=e.isNumberedHeader=e.SPECIAL_ELEMENTS=e.getTagID=e.TAG_ID=e.TAG_NAMES=e.DOCUMENT_MODE=e.ATTRS=e.NS=void 0;var g;(function(A){A.HTML="http://www.w3.org/1999/xhtml",A.MATHML="http://www.w3.org/1998/Math/MathML",A.SVG="http://www.w3.org/2000/svg",A.XLINK="http://www.w3.org/1999/xlink",A.XML="http://www.w3.org/XML/1998/namespace",A.XMLNS="http://www.w3.org/2000/xmlns/"})(g=e.NS||(e.NS={})),function(A){A.TYPE="type",A.ACTION="action",A.ENCODING="encoding",A.PROMPT="prompt",A.NAME="name",A.COLOR="color",A.FACE="face",A.SIZE="size"}(e.ATTRS||(e.ATTRS={})),function(A){A.NO_QUIRKS="no-quirks",A.QUIRKS="quirks",A.LIMITED_QUIRKS="limited-quirks"}(e.DOCUMENT_MODE||(e.DOCUMENT_MODE={}));var i;(function(A){A.A="a",A.ADDRESS="address",A.ANNOTATION_XML="annotation-xml",A.APPLET="applet",A.AREA="area",A.ARTICLE="article",A.ASIDE="aside",A.B="b",A.BASE="base",A.BASEFONT="basefont",A.BGSOUND="bgsound",A.BIG="big",A.BLOCKQUOTE="blockquote",A.BODY="body",A.BR="br",A.BUTTON="button",A.CAPTION="caption",A.CENTER="center",A.CODE="code",A.COL="col",A.COLGROUP="colgroup",A.DD="dd",A.DESC="desc",A.DETAILS="details",A.DIALOG="dialog",A.DIR="dir",A.DIV="div",A.DL="dl",A.DT="dt",A.EM="em",A.EMBED="embed",A.FIELDSET="fieldset",A.FIGCAPTION="figcaption",A.FIGURE="figure",A.FONT="font",A.FOOTER="footer",A.FOREIGN_OBJECT="foreignObject",A.FORM="form",A.FRAME="frame",A.FRAMESET="frameset",A.H1="h1",A.H2="h2",A.H3="h3",A.H4="h4",A.H5="h5",A.H6="h6",A.HEAD="head",A.HEADER="header",A.HGROUP="hgroup",A.HR="hr",A.HTML="html",A.I="i",A.IMG="img",A.IMAGE="image",A.INPUT="input",A.IFRAME="iframe",A.KEYGEN="keygen",A.LABEL="label",A.LI="li",A.LINK="link",A.LISTING="listing",A.MAIN="main",A.MALIGNMARK="malignmark",A.MARQUEE="marquee",A.MATH="math",A.MENU="menu",A.META="meta",A.MGLYPH="mglyph",A.MI="mi",A.MO="mo",A.MN="mn",A.MS="ms",A.MTEXT="mtext",A.NAV="nav",A.NOBR="nobr",A.NOFRAMES="noframes",A.NOEMBED="noembed",A.NOSCRIPT="noscript",A.OBJECT="object",A.OL="ol",A.OPTGROUP="optgroup",A.OPTION="option",A.P="p",A.PARAM="param",A.PLAINTEXT="plaintext",A.PRE="pre",A.RB="rb",A.RP="rp",A.RT="rt",A.RTC="rtc",A.RUBY="ruby",A.S="s",A.SCRIPT="script",A.SECTION="section",A.SELECT="select",A.SOURCE="source",A.SMALL="small",A.SPAN="span",A.STRIKE="strike",A.STRONG="strong",A.STYLE="style",A.SUB="sub",A.SUMMARY="summary",A.SUP="sup",A.TABLE="table",A.TBODY="tbody",A.TEMPLATE="template",A.TEXTAREA="textarea",A.TFOOT="tfoot",A.TD="td",A.TH="th",A.THEAD="thead",A.TITLE="title",A.TR="tr",A.TRACK="track",A.TT="tt",A.U="u",A.UL="ul",A.SVG="svg",A.VAR="var",A.WBR="wbr",A.XMP="xmp"})(i=e.TAG_NAMES||(e.TAG_NAMES={}));var I;(function(A){A[A.UNKNOWN=0]="UNKNOWN",A[A.A=1]="A",A[A.ADDRESS=2]="ADDRESS",A[A.ANNOTATION_XML=3]="ANNOTATION_XML",A[A.APPLET=4]="APPLET",A[A.AREA=5]="AREA",A[A.ARTICLE=6]="ARTICLE",A[A.ASIDE=7]="ASIDE",A[A.B=8]="B",A[A.BASE=9]="BASE",A[A.BASEFONT=10]="BASEFONT",A[A.BGSOUND=11]="BGSOUND",A[A.BIG=12]="BIG",A[A.BLOCKQUOTE=13]="BLOCKQUOTE",A[A.BODY=14]="BODY",A[A.BR=15]="BR",A[A.BUTTON=16]="BUTTON",A[A.CAPTION=17]="CAPTION",A[A.CENTER=18]="CENTER",A[A.CODE=19]="CODE",A[A.COL=20]="COL",A[A.COLGROUP=21]="COLGROUP",A[A.DD=22]="DD",A[A.DESC=23]="DESC",A[A.DETAILS=24]="DETAILS",A[A.DIALOG=25]="DIALOG",A[A.DIR=26]="DIR",A[A.DIV=27]="DIV",A[A.DL=28]="DL",A[A.DT=29]="DT",A[A.EM=30]="EM",A[A.EMBED=31]="EMBED",A[A.FIELDSET=32]="FIELDSET",A[A.FIGCAPTION=33]="FIGCAPTION",A[A.FIGURE=34]="FIGURE",A[A.FONT=35]="FONT",A[A.FOOTER=36]="FOOTER",A[A.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",A[A.FORM=38]="FORM",A[A.FRAME=39]="FRAME",A[A.FRAMESET=40]="FRAMESET",A[A.H1=41]="H1",A[A.H2=42]="H2",A[A.H3=43]="H3",A[A.H4=44]="H4",A[A.H5=45]="H5",A[A.H6=46]="H6",A[A.HEAD=47]="HEAD",A[A.HEADER=48]="HEADER",A[A.HGROUP=49]="HGROUP",A[A.HR=50]="HR",A[A.HTML=51]="HTML",A[A.I=52]="I",A[A.IMG=53]="IMG",A[A.IMAGE=54]="IMAGE",A[A.INPUT=55]="INPUT",A[A.IFRAME=56]="IFRAME",A[A.KEYGEN=57]="KEYGEN",A[A.LABEL=58]="LABEL",A[A.LI=59]="LI",A[A.LINK=60]="LINK",A[A.LISTING=61]="LISTING",A[A.MAIN=62]="MAIN",A[A.MALIGNMARK=63]="MALIGNMARK",A[A.MARQUEE=64]="MARQUEE",A[A.MATH=65]="MATH",A[A.MENU=66]="MENU",A[A.META=67]="META",A[A.MGLYPH=68]="MGLYPH",A[A.MI=69]="MI",A[A.MO=70]="MO",A[A.MN=71]="MN",A[A.MS=72]="MS",A[A.MTEXT=73]="MTEXT",A[A.NAV=74]="NAV",A[A.NOBR=75]="NOBR",A[A.NOFRAMES=76]="NOFRAMES",A[A.NOEMBED=77]="NOEMBED",A[A.NOSCRIPT=78]="NOSCRIPT",A[A.OBJECT=79]="OBJECT",A[A.OL=80]="OL",A[A.OPTGROUP=81]="OPTGROUP",A[A.OPTION=82]="OPTION",A[A.P=83]="P",A[A.PARAM=84]="PARAM",A[A.PLAINTEXT=85]="PLAINTEXT",A[A.PRE=86]="PRE",A[A.RB=87]="RB",A[A.RP=88]="RP",A[A.RT=89]="RT",A[A.RTC=90]="RTC",A[A.RUBY=91]="RUBY",A[A.S=92]="S",A[A.SCRIPT=93]="SCRIPT",A[A.SECTION=94]="SECTION",A[A.SELECT=95]="SELECT",A[A.SOURCE=96]="SOURCE",A[A.SMALL=97]="SMALL",A[A.SPAN=98]="SPAN",A[A.STRIKE=99]="STRIKE",A[A.STRONG=100]="STRONG",A[A.STYLE=101]="STYLE",A[A.SUB=102]="SUB",A[A.SUMMARY=103]="SUMMARY",A[A.SUP=104]="SUP",A[A.TABLE=105]="TABLE",A[A.TBODY=106]="TBODY",A[A.TEMPLATE=107]="TEMPLATE",A[A.TEXTAREA=108]="TEXTAREA",A[A.TFOOT=109]="TFOOT",A[A.TD=110]="TD",A[A.TH=111]="TH",A[A.THEAD=112]="THEAD",A[A.TITLE=113]="TITLE",A[A.TR=114]="TR",A[A.TRACK=115]="TRACK",A[A.TT=116]="TT",A[A.U=117]="U",A[A.UL=118]="UL",A[A.SVG=119]="SVG",A[A.VAR=120]="VAR",A[A.WBR=121]="WBR",A[A.XMP=122]="XMP"})(I=e.TAG_ID||(e.TAG_ID={}));const n=new Map([[i.A,I.A],[i.ADDRESS,I.ADDRESS],[i.ANNOTATION_XML,I.ANNOTATION_XML],[i.APPLET,I.APPLET],[i.AREA,I.AREA],[i.ARTICLE,I.ARTICLE],[i.ASIDE,I.ASIDE],[i.B,I.B],[i.BASE,I.BASE],[i.BASEFONT,I.BASEFONT],[i.BGSOUND,I.BGSOUND],[i.BIG,I.BIG],[i.BLOCKQUOTE,I.BLOCKQUOTE],[i.BODY,I.BODY],[i.BR,I.BR],[i.BUTTON,I.BUTTON],[i.CAPTION,I.CAPTION],[i.CENTER,I.CENTER],[i.CODE,I.CODE],[i.COL,I.COL],[i.COLGROUP,I.COLGROUP],[i.DD,I.DD],[i.DESC,I.DESC],[i.DETAILS,I.DETAILS],[i.DIALOG,I.DIALOG],[i.DIR,I.DIR],[i.DIV,I.DIV],[i.DL,I.DL],[i.DT,I.DT],[i.EM,I.EM],[i.EMBED,I.EMBED],[i.FIELDSET,I.FIELDSET],[i.FIGCAPTION,I.FIGCAPTION],[i.FIGURE,I.FIGURE],[i.FONT,I.FONT],[i.FOOTER,I.FOOTER],[i.FOREIGN_OBJECT,I.FOREIGN_OBJECT],[i.FORM,I.FORM],[i.FRAME,I.FRAME],[i.FRAMESET,I.FRAMESET],[i.H1,I.H1],[i.H2,I.H2],[i.H3,I.H3],[i.H4,I.H4],[i.H5,I.H5],[i.H6,I.H6],[i.HEAD,I.HEAD],[i.HEADER,I.HEADER],[i.HGROUP,I.HGROUP],[i.HR,I.HR],[i.HTML,I.HTML],[i.I,I.I],[i.IMG,I.IMG],[i.IMAGE,I.IMAGE],[i.INPUT,I.INPUT],[i.IFRAME,I.IFRAME],[i.KEYGEN,I.KEYGEN],[i.LABEL,I.LABEL],[i.LI,I.LI],[i.LINK,I.LINK],[i.LISTING,I.LISTING],[i.MAIN,I.MAIN],[i.MALIGNMARK,I.MALIGNMARK],[i.MARQUEE,I.MARQUEE],[i.MATH,I.MATH],[i.MENU,I.MENU],[i.META,I.META],[i.MGLYPH,I.MGLYPH],[i.MI,I.MI],[i.MO,I.MO],[i.MN,I.MN],[i.MS,I.MS],[i.MTEXT,I.MTEXT],[i.NAV,I.NAV],[i.NOBR,I.NOBR],[i.NOFRAMES,I.NOFRAMES],[i.NOEMBED,I.NOEMBED],[i.NOSCRIPT,I.NOSCRIPT],[i.OBJECT,I.OBJECT],[i.OL,I.OL],[i.OPTGROUP,I.OPTGROUP],[i.OPTION,I.OPTION],[i.P,I.P],[i.PARAM,I.PARAM],[i.PLAINTEXT,I.PLAINTEXT],[i.PRE,I.PRE],[i.RB,I.RB],[i.RP,I.RP],[i.RT,I.RT],[i.RTC,I.RTC],[i.RUBY,I.RUBY],[i.S,I.S],[i.SCRIPT,I.SCRIPT],[i.SECTION,I.SECTION],[i.SELECT,I.SELECT],[i.SOURCE,I.SOURCE],[i.SMALL,I.SMALL],[i.SPAN,I.SPAN],[i.STRIKE,I.STRIKE],[i.STRONG,I.STRONG],[i.STYLE,I.STYLE],[i.SUB,I.SUB],[i.SUMMARY,I.SUMMARY],[i.SUP,I.SUP],[i.TABLE,I.TABLE],[i.TBODY,I.TBODY],[i.TEMPLATE,I.TEMPLATE],[i.TEXTAREA,I.TEXTAREA],[i.TFOOT,I.TFOOT],[i.TD,I.TD],[i.TH,I.TH],[i.THEAD,I.THEAD],[i.TITLE,I.TITLE],[i.TR,I.TR],[i.TRACK,I.TRACK],[i.TT,I.TT],[i.U,I.U],[i.UL,I.UL],[i.SVG,I.SVG],[i.VAR,I.VAR],[i.WBR,I.WBR],[i.XMP,I.XMP]]);function r(A){var l;return(l=n.get(A))!==null&&l!==void 0?l:I.UNKNOWN}e.getTagID=r;const C=I;e.SPECIAL_ELEMENTS={[g.HTML]:new Set([C.ADDRESS,C.APPLET,C.AREA,C.ARTICLE,C.ASIDE,C.BASE,C.BASEFONT,C.BGSOUND,C.BLOCKQUOTE,C.BODY,C.BR,C.BUTTON,C.CAPTION,C.CENTER,C.COL,C.COLGROUP,C.DD,C.DETAILS,C.DIR,C.DIV,C.DL,C.DT,C.EMBED,C.FIELDSET,C.FIGCAPTION,C.FIGURE,C.FOOTER,C.FORM,C.FRAME,C.FRAMESET,C.H1,C.H2,C.H3,C.H4,C.H5,C.H6,C.HEAD,C.HEADER,C.HGROUP,C.HR,C.HTML,C.IFRAME,C.IMG,C.INPUT,C.LI,C.LINK,C.LISTING,C.MAIN,C.MARQUEE,C.MENU,C.META,C.NAV,C.NOEMBED,C.NOFRAMES,C.NOSCRIPT,C.OBJECT,C.OL,C.P,C.PARAM,C.PLAINTEXT,C.PRE,C.SCRIPT,C.SECTION,C.SELECT,C.SOURCE,C.STYLE,C.SUMMARY,C.TABLE,C.TBODY,C.TD,C.TEMPLATE,C.TEXTAREA,C.TFOOT,C.TH,C.THEAD,C.TITLE,C.TR,C.TRACK,C.UL,C.WBR,C.XMP]),[g.MATHML]:new Set([C.MI,C.MO,C.MN,C.MS,C.MTEXT,C.ANNOTATION_XML]),[g.SVG]:new Set([C.TITLE,C.FOREIGN_OBJECT,C.DESC]),[g.XLINK]:new Set,[g.XML]:new Set,[g.XMLNS]:new Set};function o(A){return A===C.H1||A===C.H2||A===C.H3||A===C.H4||A===C.H5||A===C.H6}e.isNumberedHeader=o;const a=new Set([i.STYLE,i.SCRIPT,i.XMP,i.IFRAME,i.NOEMBED,i.NOFRAMES,i.PLAINTEXT]);function s(A,l){return a.has(A)||l&&A===i.NOSCRIPT}e.hasUnescapedText=s})(rl);function Y0t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hre(e,g){for(var i=0;i=Ae.CODE_POINTS.DIGIT_0&&e<=Ae.CODE_POINTS.DIGIT_9}function qZ(e){return e>=Ae.CODE_POINTS.LATIN_CAPITAL_A&&e<=Ae.CODE_POINTS.LATIN_CAPITAL_Z}function M0t(e){return e>=Ae.CODE_POINTS.LATIN_SMALL_A&&e<=Ae.CODE_POINTS.LATIN_SMALL_Z}function Tl(e){return M0t(e)||qZ(e)}function Qz(e){return Tl(e)||tv(e)}function qSe(e){return e>=Ae.CODE_POINTS.LATIN_CAPITAL_A&&e<=Ae.CODE_POINTS.LATIN_CAPITAL_F}function ewe(e){return e>=Ae.CODE_POINTS.LATIN_SMALL_A&&e<=Ae.CODE_POINTS.LATIN_SMALL_F}function z0t(e){return tv(e)||qSe(e)||ewe(e)}function ZV(e){return e+32}function twe(e){return e===Ae.CODE_POINTS.SPACE||e===Ae.CODE_POINTS.LINE_FEED||e===Ae.CODE_POINTS.TABULATION||e===Ae.CODE_POINTS.FORM_FEED}function P0t(e){return e===Ae.CODE_POINTS.EQUALS_SIGN||Qz(e)}function mre(e){return twe(e)||e===Ae.CODE_POINTS.SOLIDUS||e===Ae.CODE_POINTS.GREATER_THAN_SIGN}let J0t=function(){function e(g,i){Y0t(this,e),this.options=g,this.handler=i,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Ze.DATA,this.returnState=Ze.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new x0t.Preprocessor(i),this.currentLocation=this.getCurrentLocation(-1)}return K0t(e,[{key:"_err",value:function(i){var I,n;(n=(I=this.handler).onParseError)===null||n===void 0||n.call(I,this.preprocessor.getError(i))}},{key:"getCurrentLocation",value:function(i){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-i,startOffset:this.preprocessor.offset-i,endLine:-1,endCol:-1,endOffset:-1}:null}},{key:"_runParsingLoop",value:function(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const i=this._consume();this._ensureHibernation()||this._callState(i)}this.inLoop=!1}}},{key:"pause",value:function(){this.paused=!0}},{key:"resume",value:function(i){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||i==null||i())}},{key:"write",value:function(i,I,n){this.active=!0,this.preprocessor.write(i,I),this._runParsingLoop(),this.paused||n==null||n()}},{key:"insertHtmlAtCurrentPos",value:function(i){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(i),this._runParsingLoop()}},{key:"_ensureHibernation",value:function(){return this.preprocessor.endOfChunkHit?(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0):!1}},{key:"_consume",value:function(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}},{key:"_unconsume",value:function(i){this.consumedAfterSnapshot-=i,this.preprocessor.retreat(i)}},{key:"_reconsumeInState",value:function(i,I){this.state=i,this._callState(I)}},{key:"_advanceBy",value:function(i){this.consumedAfterSnapshot+=i;for(let I=0;I0&&this._err(qe.ERR.endTagWithAttributes),i.selfClosing&&this._err(qe.ERR.endTagWithTrailingSolidus),this.handler.onEndTag(i)),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentComment",value:function(i){this.prepareToken(i),this.handler.onComment(i),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentDoctype",value:function(i){this.prepareToken(i),this.handler.onDoctype(i),this.preprocessor.dropParsedChunk()}},{key:"_emitCurrentCharacterToken",value:function(i){if(this.currentCharacterToken){switch(i&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=i.startLine,this.currentCharacterToken.location.endCol=i.startCol,this.currentCharacterToken.location.endOffset=i.startOffset),this.currentCharacterToken.type){case yr.TokenType.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case yr.TokenType.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case yr.TokenType.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}},{key:"_emitEOFToken",value:function(){const i=this.getCurrentLocation(0);i&&(i.endLine=i.startLine,i.endCol=i.startCol,i.endOffset=i.startOffset),this._emitCurrentCharacterToken(i),this.handler.onEof({type:yr.TokenType.EOF,location:i}),this.active=!1}},{key:"_appendCharToCurrentCharacterToken",value:function(i,I){if(this.currentCharacterToken)if(this.currentCharacterToken.type!==i)this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();else{this.currentCharacterToken.chars+=I;return}this._createCharacterToken(i,I)}},{key:"_emitCodePoint",value:function(i){const I=twe(i)?yr.TokenType.WHITESPACE_CHARACTER:i===Ae.CODE_POINTS.NULL?yr.TokenType.NULL_CHARACTER:yr.TokenType.CHARACTER;this._appendCharToCurrentCharacterToken(I,String.fromCodePoint(i))}},{key:"_emitChars",value:function(i){this._appendCharToCurrentCharacterToken(yr.TokenType.CHARACTER,i)}},{key:"_matchNamedCharacterReference",value:function(i){let I=null,n=0,r=!1;for(let C=0,o=Ha.htmlDecodeTree[0];C>=0&&(C=(0,Ha.determineBranch)(Ha.htmlDecodeTree,o,C+1,i),!(C<0));i=this._consume()){n+=1,o=Ha.htmlDecodeTree[C];const a=o&Ha.BinTrieFlags.VALUE_LENGTH;if(a){const s=(a>>14)-1;if(i!==Ae.CODE_POINTS.SEMICOLON&&this._isCharacterReferenceInAttribute()&&P0t(this.preprocessor.peek(1))?(I=[Ae.CODE_POINTS.AMPERSAND],C+=s):(I=s===0?[Ha.htmlDecodeTree[C]&~Ha.BinTrieFlags.VALUE_LENGTH]:s===1?[Ha.htmlDecodeTree[++C]]:[Ha.htmlDecodeTree[++C],Ha.htmlDecodeTree[++C]],n=0,r=i!==Ae.CODE_POINTS.SEMICOLON),s===0){this._consume();break}}}return this._unconsume(n),r&&!this.preprocessor.endOfChunkHit&&this._err(qe.ERR.missingSemicolonAfterCharacterReference),this._unconsume(1),I}},{key:"_isCharacterReferenceInAttribute",value:function(){return this.returnState===Ze.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Ze.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Ze.ATTRIBUTE_VALUE_UNQUOTED}},{key:"_flushCodePointConsumedAsCharacterReference",value:function(i){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(i):this._emitCodePoint(i)}},{key:"_callState",value:function(i){switch(this.state){case Ze.DATA:{this._stateData(i);break}case Ze.RCDATA:{this._stateRcdata(i);break}case Ze.RAWTEXT:{this._stateRawtext(i);break}case Ze.SCRIPT_DATA:{this._stateScriptData(i);break}case Ze.PLAINTEXT:{this._statePlaintext(i);break}case Ze.TAG_OPEN:{this._stateTagOpen(i);break}case Ze.END_TAG_OPEN:{this._stateEndTagOpen(i);break}case Ze.TAG_NAME:{this._stateTagName(i);break}case Ze.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(i);break}case Ze.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(i);break}case Ze.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(i);break}case Ze.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(i);break}case Ze.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(i);break}case Ze.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(i);break}case Ze.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(i);break}case Ze.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(i);break}case Ze.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(i);break}case Ze.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(i);break}case Ze.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(i);break}case Ze.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(i);break}case Ze.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(i);break}case Ze.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(i);break}case Ze.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(i);break}case Ze.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(i);break}case Ze.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(i);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(i);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(i);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(i);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(i);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(i);break}case Ze.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(i);break}case Ze.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(i);break}case Ze.ATTRIBUTE_NAME:{this._stateAttributeName(i);break}case Ze.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(i);break}case Ze.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(i);break}case Ze.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(i);break}case Ze.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(i);break}case Ze.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(i);break}case Ze.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(i);break}case Ze.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(i);break}case Ze.BOGUS_COMMENT:{this._stateBogusComment(i);break}case Ze.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(i);break}case Ze.COMMENT_START:{this._stateCommentStart(i);break}case Ze.COMMENT_START_DASH:{this._stateCommentStartDash(i);break}case Ze.COMMENT:{this._stateComment(i);break}case Ze.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(i);break}case Ze.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(i);break}case Ze.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(i);break}case Ze.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(i);break}case Ze.COMMENT_END_DASH:{this._stateCommentEndDash(i);break}case Ze.COMMENT_END:{this._stateCommentEnd(i);break}case Ze.COMMENT_END_BANG:{this._stateCommentEndBang(i);break}case Ze.DOCTYPE:{this._stateDoctype(i);break}case Ze.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(i);break}case Ze.DOCTYPE_NAME:{this._stateDoctypeName(i);break}case Ze.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(i);break}case Ze.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(i);break}case Ze.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(i);break}case Ze.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(i);break}case Ze.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(i);break}case Ze.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(i);break}case Ze.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(i);break}case Ze.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(i);break}case Ze.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(i);break}case Ze.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(i);break}case Ze.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(i);break}case Ze.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(i);break}case Ze.BOGUS_DOCTYPE:{this._stateBogusDoctype(i);break}case Ze.CDATA_SECTION:{this._stateCdataSection(i);break}case Ze.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(i);break}case Ze.CDATA_SECTION_END:{this._stateCdataSectionEnd(i);break}case Ze.CHARACTER_REFERENCE:{this._stateCharacterReference(i);break}case Ze.NAMED_CHARACTER_REFERENCE:{this._stateNamedCharacterReference(i);break}case Ze.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(i);break}case Ze.NUMERIC_CHARACTER_REFERENCE:{this._stateNumericCharacterReference(i);break}case Ze.HEXADEMICAL_CHARACTER_REFERENCE_START:{this._stateHexademicalCharacterReferenceStart(i);break}case Ze.HEXADEMICAL_CHARACTER_REFERENCE:{this._stateHexademicalCharacterReference(i);break}case Ze.DECIMAL_CHARACTER_REFERENCE:{this._stateDecimalCharacterReference(i);break}case Ze.NUMERIC_CHARACTER_REFERENCE_END:{this._stateNumericCharacterReferenceEnd(i);break}default:throw new Error("Unknown state")}}},{key:"_stateData",value:function(i){switch(i){case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.TAG_OPEN;break}case Ae.CODE_POINTS.AMPERSAND:{this.returnState=Ze.DATA,this.state=Ze.CHARACTER_REFERENCE;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitCodePoint(i);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateRcdata",value:function(i){switch(i){case Ae.CODE_POINTS.AMPERSAND:{this.returnState=Ze.RCDATA,this.state=Ze.CHARACTER_REFERENCE;break}case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.RCDATA_LESS_THAN_SIGN;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateRawtext",value:function(i){switch(i){case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.RAWTEXT_LESS_THAN_SIGN;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateScriptData",value:function(i){switch(i){case Ae.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ze.SCRIPT_DATA_LESS_THAN_SIGN;break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_statePlaintext",value:function(i){switch(i){case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateTagOpen",value:function(i){if(Tl(i))this._createStartTagToken(),this.state=Ze.TAG_NAME,this._stateTagName(i);else switch(i){case Ae.CODE_POINTS.EXCLAMATION_MARK:{this.state=Ze.MARKUP_DECLARATION_OPEN;break}case Ae.CODE_POINTS.SOLIDUS:{this.state=Ze.END_TAG_OPEN;break}case Ae.CODE_POINTS.QUESTION_MARK:{this._err(qe.ERR.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Ze.BOGUS_COMMENT,this._stateBogusComment(i);break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(qe.ERR.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Ze.DATA,this._stateData(i)}}},{key:"_stateEndTagOpen",value:function(i){if(Tl(i))this._createEndTagToken(),this.state=Ze.TAG_NAME,this._stateTagName(i);else switch(i){case Ae.CODE_POINTS.GREATER_THAN_SIGN:{this._err(qe.ERR.missingEndTagName),this.state=Ze.DATA;break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofBeforeTagName),this._emitChars("");break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this.state=Ze.SCRIPT_DATA_ESCAPED,this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ze.SCRIPT_DATA_ESCAPED,this._emitCodePoint(i)}}},{key:"_stateScriptDataEscapedLessThanSign",value:function(i){i===Ae.CODE_POINTS.SOLIDUS?this.state=Ze.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Tl(i)?(this._emitChars("<"),this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(i)):(this._emitChars("<"),this.state=Ze.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(i))}},{key:"_stateScriptDataEscapedEndTagOpen",value:function(i){Tl(i)?(this.state=Ze.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(i)):(this._emitChars("");break}case Ae.CODE_POINTS.NULL:{this._err(qe.ERR.unexpectedNullCharacter),this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Ae.REPLACEMENT_CHARACTER);break}case Ae.CODE_POINTS.EOF:{this._err(qe.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(i)}}},{key:"_stateScriptDataDoubleEscapedLessThanSign",value:function(i){i===Ae.CODE_POINTS.SOLIDUS?(this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Ze.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(i))}},{key:"_stateScriptDataDoubleEscapeEnd",value:function(i){if(this.preprocessor.startsWith(Ae.SEQUENCES.SCRIPT,!1)&&mre(this.preprocessor.peek(Ae.SEQUENCES.SCRIPT.length))){this._emitCodePoint(i);for(let I=0;I1114111)this._err(qe.ERR.characterReferenceOutsideUnicodeRange),this.charRefCode=Ae.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,Ae.isSurrogate)(this.charRefCode))this._err(qe.ERR.surrogateCharacterReference),this.charRefCode=Ae.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,Ae.isUndefinedCodePoint)(this.charRefCode))this._err(qe.ERR.noncharacterCharacterReference);else if((0,Ae.isControlCodePoint)(this.charRefCode)||this.charRefCode===Ae.CODE_POINTS.CARRIAGE_RETURN){this._err(qe.ERR.controlCharacterReference);const I=E0t.get(this.charRefCode);I!==void 0&&(this.charRefCode=I)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,i)}}]),e}();dh.Tokenizer=J0t;var ak={};function O0t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function fre(e,g){for(var i=0;i0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(i,!0)}},{key:"replace",value:function(i,I){const n=this._indexOf(i);this.items[n]=I,n===this.stackTop&&(this.current=I)}},{key:"insertAfter",value:function(i,I,n){const r=this._indexOf(i)+1;this.items.splice(r,0,I),this.tagIDs.splice(r,0,n),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}},{key:"popUntilTagNamePopped",value:function(i){let I=this.stackTop+1;do I=this.tagIDs.lastIndexOf(i,I-1);while(I>0&&this.treeAdapter.getNamespaceURI(this.items[I])!==It.NS.HTML);this.shortenToLength(I<0?0:I)}},{key:"shortenToLength",value:function(i){for(;this.stackTop>=i;){const I=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(I,this.stackTop=0;n--)if(i.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===I)return n;return-1}},{key:"clearBackTo",value:function(i,I){const n=this._indexOfTagNames(i,I);this.shortenToLength(n+1)}},{key:"clearBackToTableContext",value:function(){this.clearBackTo(q0t,It.NS.HTML)}},{key:"clearBackToTableBodyContext",value:function(){this.clearBackTo($0t,It.NS.HTML)}},{key:"clearBackToTableRowContext",value:function(){this.clearBackTo(j0t,It.NS.HTML)}},{key:"remove",value:function(i){const I=this._indexOf(i);I>=0&&(I===this.stackTop?this.pop():(this.items.splice(I,1),this.tagIDs.splice(I,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(i,!1)))}},{key:"tryPeekProperlyNestedBodyElement",value:function(){return this.stackTop>=1&&this.tagIDs[1]===It.TAG_ID.BODY?this.items[1]:null}},{key:"contains",value:function(i){return this._indexOf(i)>-1}},{key:"getCommonAncestor",value:function(i){const I=this._indexOf(i)-1;return I>=0?this.items[I]:null}},{key:"isRootHtmlElementCurrent",value:function(){return this.stackTop===0&&this.tagIDs[0]===It.TAG_ID.HTML}},{key:"hasInScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I],r=this.treeAdapter.getNamespaceURI(this.items[I]);if(n===i&&r===It.NS.HTML)return!0;if(GV.get(n)===r)return!1}return!0}},{key:"hasNumberedHeaderInScope",value:function(){for(let i=this.stackTop;i>=0;i--){const I=this.tagIDs[i],n=this.treeAdapter.getNamespaceURI(this.items[i]);if((0,It.isNumberedHeader)(I)&&n===It.NS.HTML)return!0;if(GV.get(I)===n)return!1}return!0}},{key:"hasInListItemScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I],r=this.treeAdapter.getNamespaceURI(this.items[I]);if(n===i&&r===It.NS.HTML)return!0;if((n===It.TAG_ID.UL||n===It.TAG_ID.OL)&&r===It.NS.HTML||GV.get(n)===r)return!1}return!0}},{key:"hasInButtonScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I],r=this.treeAdapter.getNamespaceURI(this.items[I]);if(n===i&&r===It.NS.HTML)return!0;if(n===It.TAG_ID.BUTTON&&r===It.NS.HTML||GV.get(n)===r)return!1}return!0}},{key:"hasInTableScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I];if(this.treeAdapter.getNamespaceURI(this.items[I])===It.NS.HTML){if(n===i)return!0;if(n===It.TAG_ID.TABLE||n===It.TAG_ID.TEMPLATE||n===It.TAG_ID.HTML)return!1}}return!0}},{key:"hasTableBodyContextInTableScope",value:function(){for(let i=this.stackTop;i>=0;i--){const I=this.tagIDs[i];if(this.treeAdapter.getNamespaceURI(this.items[i])===It.NS.HTML){if(I===It.TAG_ID.TBODY||I===It.TAG_ID.THEAD||I===It.TAG_ID.TFOOT)return!0;if(I===It.TAG_ID.TABLE||I===It.TAG_ID.HTML)return!1}}return!0}},{key:"hasInSelectScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I];if(this.treeAdapter.getNamespaceURI(this.items[I])===It.NS.HTML){if(n===i)return!0;if(n!==It.TAG_ID.OPTION&&n!==It.TAG_ID.OPTGROUP)return!1}}return!0}},{key:"generateImpliedEndTags",value:function(){for(;gwe.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsThoroughly",value:function(){for(;pre.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsWithExclusion",value:function(i){for(;this.currentTagId!==i&&pre.has(this.currentTagId);)this.pop()}}]),e}();ak.OpenElementStack=tyt;var iwe={};(function(e){function g(A,l){if(!(A instanceof l))throw new TypeError("Cannot call a class as a function")}function i(A,l){for(var c=0;c[f.name,f.value]));let m=0;for(let f=0;fh.get(p.name)===p.value)&&(m+=1,m>=C&&this.entries.splice(b.idx,1))}}},{key:"insertMarker",value:function(){this.entries.unshift(a)}},{key:"pushElement",value:function(c,u){this._ensureNoahArkCondition(c),this.entries.unshift({type:o.Element,element:c,token:u})}},{key:"insertElementAfterBookmark",value:function(c,u){const d=this.entries.indexOf(this.bookmark);this.entries.splice(d,0,{type:o.Element,element:c,token:u})}},{key:"removeEntry",value:function(c){const u=this.entries.indexOf(c);u>=0&&this.entries.splice(u,1)}},{key:"clearToLastMarker",value:function(){const c=this.entries.indexOf(a);c>=0?this.entries.splice(0,c+1):this.entries.length=0}},{key:"getElementEntryInScopeWithTagName",value:function(c){const u=this.entries.find(d=>d.type===o.Marker||this.treeAdapter.getTagName(d.element)===c);return u&&u.type===o.Element?u:null}},{key:"getElementEntry",value:function(c){return this.entries.find(u=>u.type===o.Element&&u.element===c)}}]),A}();e.FormattingElementList=s})(iwe);var Ak={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.defaultTreeAdapter=void 0;const g=rl;function i(I){return{nodeName:"#text",value:I,parentNode:null}}e.defaultTreeAdapter={createDocument(){return{nodeName:"#document",mode:g.DOCUMENT_MODE.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(I,n,r){return{nodeName:I,tagName:I,attrs:r,namespaceURI:n,childNodes:[],parentNode:null}},createCommentNode(I){return{nodeName:"#comment",data:I,parentNode:null}},appendChild(I,n){I.childNodes.push(n),n.parentNode=I},insertBefore(I,n,r){const C=I.childNodes.indexOf(r);I.childNodes.splice(C,0,n),n.parentNode=I},setTemplateContent(I,n){I.content=n},getTemplateContent(I){return I.content},setDocumentType(I,n,r,C){const o=I.childNodes.find(a=>a.nodeName==="#documentType");if(o)o.name=n,o.publicId=r,o.systemId=C;else{const a={nodeName:"#documentType",name:n,publicId:r,systemId:C,parentNode:null};e.defaultTreeAdapter.appendChild(I,a)}},setDocumentMode(I,n){I.mode=n},getDocumentMode(I){return I.mode},detachNode(I){if(I.parentNode){const n=I.parentNode.childNodes.indexOf(I);I.parentNode.childNodes.splice(n,1),I.parentNode=null}},insertText(I,n){if(I.childNodes.length>0){const r=I.childNodes[I.childNodes.length-1];if(e.defaultTreeAdapter.isTextNode(r)){r.value+=n;return}}e.defaultTreeAdapter.appendChild(I,i(n))},insertTextBefore(I,n,r){const C=I.childNodes[I.childNodes.indexOf(r)-1];C&&e.defaultTreeAdapter.isTextNode(C)?C.value+=n:e.defaultTreeAdapter.insertBefore(I,i(n),r)},adoptAttributes(I,n){const r=new Set(I.attrs.map(C=>C.name));for(let C=0;Ce.startsWith(i))}function Cyt(e){return e.name===Iwe&&e.publicId===null&&(e.systemId===null||e.systemId===gyt)}Lb.isConforming=Cyt;function oyt(e){if(e.name!==Iwe)return Om.DOCUMENT_MODE.QUIRKS;const{systemId:g}=e;if(g&&g.toLowerCase()===iyt)return Om.DOCUMENT_MODE.QUIRKS;let{publicId:i}=e;if(i!==null){if(i=i.toLowerCase(),nyt.has(i))return Om.DOCUMENT_MODE.QUIRKS;let I=g===null?Iyt:nwe;if(bre(i,I))return Om.DOCUMENT_MODE.QUIRKS;if(I=g===null?rwe:ryt,bre(i,I))return Om.DOCUMENT_MODE.LIMITED_QUIRKS}return Om.DOCUMENT_MODE.NO_QUIRKS}Lb.getDocumentMode=oyt;var E4={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isIntegrationPoint=e.adjustTokenSVGTagName=e.adjustTokenXMLAttrs=e.adjustTokenSVGAttrs=e.adjustTokenMathMLAttrs=e.causesExit=e.SVG_TAG_NAMES_ADJUSTMENT_MAP=void 0;const g=rl,i={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},I="definitionurl",n="definitionURL",r=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(m=>[m.toLowerCase(),m])),C=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:g.NS.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:g.NS.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:g.NS.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:g.NS.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:g.NS.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:g.NS.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:g.NS.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:g.NS.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:g.NS.XML}],["xml:space",{prefix:"xml",name:"space",namespace:g.NS.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:g.NS.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:g.NS.XMLNS}]]);e.SVG_TAG_NAMES_ADJUSTMENT_MAP=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(m=>[m.toLowerCase(),m]));const o=new Set([g.TAG_ID.B,g.TAG_ID.BIG,g.TAG_ID.BLOCKQUOTE,g.TAG_ID.BODY,g.TAG_ID.BR,g.TAG_ID.CENTER,g.TAG_ID.CODE,g.TAG_ID.DD,g.TAG_ID.DIV,g.TAG_ID.DL,g.TAG_ID.DT,g.TAG_ID.EM,g.TAG_ID.EMBED,g.TAG_ID.H1,g.TAG_ID.H2,g.TAG_ID.H3,g.TAG_ID.H4,g.TAG_ID.H5,g.TAG_ID.H6,g.TAG_ID.HEAD,g.TAG_ID.HR,g.TAG_ID.I,g.TAG_ID.IMG,g.TAG_ID.LI,g.TAG_ID.LISTING,g.TAG_ID.MENU,g.TAG_ID.META,g.TAG_ID.NOBR,g.TAG_ID.OL,g.TAG_ID.P,g.TAG_ID.PRE,g.TAG_ID.RUBY,g.TAG_ID.S,g.TAG_ID.SMALL,g.TAG_ID.SPAN,g.TAG_ID.STRONG,g.TAG_ID.STRIKE,g.TAG_ID.SUB,g.TAG_ID.SUP,g.TAG_ID.TABLE,g.TAG_ID.TT,g.TAG_ID.U,g.TAG_ID.UL,g.TAG_ID.VAR]);function a(m){const f=m.tagID;return f===g.TAG_ID.FONT&&m.attrs.some(({name:p})=>p===g.ATTRS.COLOR||p===g.ATTRS.SIZE||p===g.ATTRS.FACE)||o.has(f)}e.causesExit=a;function s(m){for(let f=0;f0&&this._setContextModes(i,I)}},{key:"onItemPop",value:function(i,I){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(i,this.currentToken),(r=(n=this.treeAdapter).onItemPop)===null||r===void 0||r.call(n,i,this.openElements.current),I){let C,o;this.openElements.stackTop===0&&this.fragmentContext?(C=this.fragmentContext,o=this.fragmentContextID):{current:C,currentTagId:o}=this.openElements,this._setContextModes(C,o)}}},{key:"_setContextModes",value:function(i,I){const n=i===this.document||this.treeAdapter.getNamespaceURI(i)===M.NS.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(I,i)}},{key:"_switchToTextParsing",value:function(i,I){this._insertElement(i,M.NS.HTML),this.tokenizer.state=I,this.originalInsertionMode=this.insertionMode,this.insertionMode=Te.TEXT}},{key:"switchToPlaintextParsing",value:function(){this.insertionMode=Te.TEXT,this.originalInsertionMode=Te.IN_BODY,this.tokenizer.state=Qn.TokenizerMode.PLAINTEXT}},{key:"_getAdjustedCurrentElement",value:function(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}},{key:"_findFormInFragmentContext",value:function(){let i=this.fragmentContext;for(;i;){if(this.treeAdapter.getTagName(i)===M.TAG_NAMES.FORM){this.formElement=i;break}i=this.treeAdapter.getParentNode(i)}}},{key:"_initTokenizerForFragmentParsing",value:function(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==M.NS.HTML))switch(this.fragmentContextID){case M.TAG_ID.TITLE:case M.TAG_ID.TEXTAREA:{this.tokenizer.state=Qn.TokenizerMode.RCDATA;break}case M.TAG_ID.STYLE:case M.TAG_ID.XMP:case M.TAG_ID.IFRAME:case M.TAG_ID.NOEMBED:case M.TAG_ID.NOFRAMES:case M.TAG_ID.NOSCRIPT:{this.tokenizer.state=Qn.TokenizerMode.RAWTEXT;break}case M.TAG_ID.SCRIPT:{this.tokenizer.state=Qn.TokenizerMode.SCRIPT_DATA;break}case M.TAG_ID.PLAINTEXT:{this.tokenizer.state=Qn.TokenizerMode.PLAINTEXT;break}}}},{key:"_setDocumentType",value:function(i){const I=i.name||"",n=i.publicId||"",r=i.systemId||"";if(this.treeAdapter.setDocumentType(this.document,I,n,r),i.location){const o=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));o&&this.treeAdapter.setNodeSourceCodeLocation(o,i.location)}}},{key:"_attachElementToTree",value:function(i,I){if(this.options.sourceCodeLocationInfo){const n=I&&Object.assign(Object.assign({},I),{startTag:I});this.treeAdapter.setNodeSourceCodeLocation(i,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(i);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n,i)}}},{key:"_appendElement",value:function(i,I){const n=this.treeAdapter.createElement(i.tagName,I,i.attrs);this._attachElementToTree(n,i.location)}},{key:"_insertElement",value:function(i,I){const n=this.treeAdapter.createElement(i.tagName,I,i.attrs);this._attachElementToTree(n,i.location),this.openElements.push(n,i.tagID)}},{key:"_insertFakeElement",value:function(i,I){const n=this.treeAdapter.createElement(i,M.NS.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,I)}},{key:"_insertTemplate",value:function(i){const I=this.treeAdapter.createElement(i.tagName,M.NS.HTML,i.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(I,n),this._attachElementToTree(I,i.location),this.openElements.push(I,i.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}},{key:"_insertFakeRootElement",value:function(){const i=this.treeAdapter.createElement(M.TAG_NAMES.HTML,M.NS.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(i,null),this.treeAdapter.appendChild(this.openElements.current,i),this.openElements.push(i,M.TAG_ID.HTML)}},{key:"_appendCommentNode",value:function(i,I){const n=this.treeAdapter.createCommentNode(i.data);this.treeAdapter.appendChild(I,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,i.location)}},{key:"_insertCharacters",value:function(i){let I,n;if(this._shouldFosterParentOnInsertion()?({parent:I,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(I,i.chars,n):this.treeAdapter.insertText(I,i.chars)):(I=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(I,i.chars)),!i.location)return;const r=this.treeAdapter.getChildNodes(I),C=n?r.lastIndexOf(n):r.length,o=r[C-1];if(this.treeAdapter.getNodeSourceCodeLocation(o)){const{endLine:s,endCol:A,endOffset:l}=i.location;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:s,endCol:A,endOffset:l})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,i.location)}},{key:"_adoptNodes",value:function(i,I){for(let n=this.treeAdapter.getFirstChild(i);n;n=this.treeAdapter.getFirstChild(i))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(I,n)}},{key:"_setEndLocation",value:function(i,I){if(this.treeAdapter.getNodeSourceCodeLocation(i)&&I.location){const n=I.location,r=this.treeAdapter.getTagName(i),C=I.type===RI.TokenType.END_TAG&&r===I.tagName?{endTag:Object.assign({},n),endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(i,C)}}},{key:"shouldProcessStartTagTokenInForeignContent",value:function(i){if(!this.currentNotInHTML)return!1;let I,n;return this.openElements.stackTop===0&&this.fragmentContext?(I=this.fragmentContext,n=this.fragmentContextID):{current:I,currentTagId:n}=this.openElements,i.tagID===M.TAG_ID.SVG&&this.treeAdapter.getTagName(I)===M.TAG_NAMES.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(I)===M.NS.MATHML?!1:this.tokenizer.inForeignNode||(i.tagID===M.TAG_ID.MGLYPH||i.tagID===M.TAG_ID.MALIGNMARK)&&!this._isIntegrationPoint(n,I,M.NS.HTML)}},{key:"_processToken",value:function(i){switch(i.type){case RI.TokenType.CHARACTER:{this.onCharacter(i);break}case RI.TokenType.NULL_CHARACTER:{this.onNullCharacter(i);break}case RI.TokenType.COMMENT:{this.onComment(i);break}case RI.TokenType.DOCTYPE:{this.onDoctype(i);break}case RI.TokenType.START_TAG:{this._processStartTag(i);break}case RI.TokenType.END_TAG:{this.onEndTag(i);break}case RI.TokenType.EOF:{this.onEof(i);break}case RI.TokenType.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(i);break}}}},{key:"_isIntegrationPoint",value:function(i,I,n){const r=this.treeAdapter.getNamespaceURI(I),C=this.treeAdapter.getAttrList(I);return Ua.isIntegrationPoint(i,r,C,n)}},{key:"_reconstructActiveFormattingElements",value:function(){const i=this.activeFormattingElements.entries.length;if(i){const I=this.activeFormattingElements.entries.findIndex(r=>r.type===Zre.EntryType.Marker||this.openElements.contains(r.element)),n=I<0?i-1:I-1;for(let r=n;r>=0;r--){const C=this.activeFormattingElements.entries[r];this._insertElement(C.token,this.treeAdapter.getNamespaceURI(C.element)),C.element=this.openElements.current}}}},{key:"_closeTableCell",value:function(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Te.IN_ROW}},{key:"_closePElement",value:function(){this.openElements.generateImpliedEndTagsWithExclusion(M.TAG_ID.P),this.openElements.popUntilTagNamePopped(M.TAG_ID.P)}},{key:"_resetInsertionMode",value:function(){for(let i=this.openElements.stackTop;i>=0;i--)switch(i===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[i]){case M.TAG_ID.TR:{this.insertionMode=Te.IN_ROW;return}case M.TAG_ID.TBODY:case M.TAG_ID.THEAD:case M.TAG_ID.TFOOT:{this.insertionMode=Te.IN_TABLE_BODY;return}case M.TAG_ID.CAPTION:{this.insertionMode=Te.IN_CAPTION;return}case M.TAG_ID.COLGROUP:{this.insertionMode=Te.IN_COLUMN_GROUP;return}case M.TAG_ID.TABLE:{this.insertionMode=Te.IN_TABLE;return}case M.TAG_ID.BODY:{this.insertionMode=Te.IN_BODY;return}case M.TAG_ID.FRAMESET:{this.insertionMode=Te.IN_FRAMESET;return}case M.TAG_ID.SELECT:{this._resetInsertionModeForSelect(i);return}case M.TAG_ID.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case M.TAG_ID.HTML:{this.insertionMode=this.headElement?Te.AFTER_HEAD:Te.BEFORE_HEAD;return}case M.TAG_ID.TD:case M.TAG_ID.TH:{if(i>0){this.insertionMode=Te.IN_CELL;return}break}case M.TAG_ID.HEAD:{if(i>0){this.insertionMode=Te.IN_HEAD;return}break}}this.insertionMode=Te.IN_BODY}},{key:"_resetInsertionModeForSelect",value:function(i){if(i>0)for(let I=i-1;I>0;I--){const n=this.openElements.tagIDs[I];if(n===M.TAG_ID.TEMPLATE)break;if(n===M.TAG_ID.TABLE){this.insertionMode=Te.IN_SELECT_IN_TABLE;return}}this.insertionMode=Te.IN_SELECT}},{key:"_isElementCausesFosterParenting",value:function(i){return owe.has(i)}},{key:"_shouldFosterParentOnInsertion",value:function(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}},{key:"_findFosterParentingLocation",value:function(){for(let i=this.openElements.stackTop;i>=0;i--){const I=this.openElements.items[i];switch(this.openElements.tagIDs[i]){case M.TAG_ID.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(I)===M.NS.HTML)return{parent:this.treeAdapter.getTemplateContent(I),beforeElement:null};break}case M.TAG_ID.TABLE:{const n=this.treeAdapter.getParentNode(I);return n?{parent:n,beforeElement:I}:{parent:this.openElements.items[i-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}},{key:"_fosterParentElement",value:function(i){const I=this._findFosterParentingLocation();I.beforeElement?this.treeAdapter.insertBefore(I.parent,i,I.beforeElement):this.treeAdapter.appendChild(I.parent,i)}},{key:"_isSpecialElement",value:function(i,I){const n=this.treeAdapter.getNamespaceURI(i);return M.SPECIAL_ELEMENTS[n].has(I)}},{key:"onCharacter",value:function(i){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){UZt(this,i);return}switch(this.insertionMode){case Te.INITIAL:{AZ(this,i);break}case Te.BEFORE_HTML:{gv(this,i);break}case Te.BEFORE_HEAD:{iv(this,i);break}case Te.IN_HEAD:{Iv(this,i);break}case Te.IN_HEAD_NO_SCRIPT:{nv(this,i);break}case Te.AFTER_HEAD:{rv(this,i);break}case Te.IN_BODY:case Te.IN_CAPTION:case Te.IN_CELL:case Te.IN_TEMPLATE:{Awe(this,i);break}case Te.TEXT:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:{this._insertCharacters(i);break}case Te.IN_TABLE:case Te.IN_TABLE_BODY:case Te.IN_ROW:{XD(this,i);break}case Te.IN_TABLE_TEXT:{hwe(this,i);break}case Te.IN_COLUMN_GROUP:{PX(this,i);break}case Te.AFTER_BODY:{JX(this,i);break}case Te.AFTER_AFTER_BODY:{rW(this,i);break}}}},{key:"onNullCharacter",value:function(i){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){LZt(this,i);return}switch(this.insertionMode){case Te.INITIAL:{AZ(this,i);break}case Te.BEFORE_HTML:{gv(this,i);break}case Te.BEFORE_HEAD:{iv(this,i);break}case Te.IN_HEAD:{Iv(this,i);break}case Te.IN_HEAD_NO_SCRIPT:{nv(this,i);break}case Te.AFTER_HEAD:{rv(this,i);break}case Te.TEXT:{this._insertCharacters(i);break}case Te.IN_TABLE:case Te.IN_TABLE_BODY:case Te.IN_ROW:{XD(this,i);break}case Te.IN_COLUMN_GROUP:{PX(this,i);break}case Te.AFTER_BODY:{JX(this,i);break}case Te.AFTER_AFTER_BODY:{rW(this,i);break}}}},{key:"onComment",value:function(i){if(this.skipNextNewLine=!1,this.currentNotInHTML){jz(this,i);return}switch(this.insertionMode){case Te.INITIAL:case Te.BEFORE_HTML:case Te.BEFORE_HEAD:case Te.IN_HEAD:case Te.IN_HEAD_NO_SCRIPT:case Te.AFTER_HEAD:case Te.IN_BODY:case Te.IN_TABLE:case Te.IN_CAPTION:case Te.IN_COLUMN_GROUP:case Te.IN_TABLE_BODY:case Te.IN_ROW:case Te.IN_CELL:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:case Te.IN_TEMPLATE:case Te.IN_FRAMESET:case Te.AFTER_FRAMESET:{jz(this,i);break}case Te.IN_TABLE_TEXT:{sZ(this,i);break}case Te.AFTER_BODY:{Syt(this,i);break}case Te.AFTER_AFTER_BODY:case Te.AFTER_AFTER_FRAMESET:{wyt(this,i);break}}}},{key:"onDoctype",value:function(i){switch(this.skipNextNewLine=!1,this.insertionMode){case Te.INITIAL:{Ryt(this,i);break}case Te.BEFORE_HEAD:case Te.IN_HEAD:case Te.IN_HEAD_NO_SCRIPT:case Te.AFTER_HEAD:{this._err(i,mn.ERR.misplacedDoctype);break}case Te.IN_TABLE_TEXT:{sZ(this,i);break}}}},{key:"onStartTag",value:function(i){this.skipNextNewLine=!1,this.currentToken=i,this._processStartTag(i),i.selfClosing&&!i.ackSelfClosing&&this._err(i,mn.ERR.nonVoidHtmlElementStartTagWithTrailingSolidus)}},{key:"_processStartTag",value:function(i){this.shouldProcessStartTagTokenInForeignContent(i)?QZt(this,i):this._startTagOutsideForeignContent(i)}},{key:"_startTagOutsideForeignContent",value:function(i){switch(this.insertionMode){case Te.INITIAL:{AZ(this,i);break}case Te.BEFORE_HTML:{Vyt(this,i);break}case Te.BEFORE_HEAD:{Xyt(this,i);break}case Te.IN_HEAD:{Ga(this,i);break}case Te.IN_HEAD_NO_SCRIPT:{Nyt(this,i);break}case Te.AFTER_HEAD:{Yyt(this,i);break}case Te.IN_BODY:{zn(this,i);break}case Te.IN_TABLE:{Ub(this,i);break}case Te.IN_TABLE_TEXT:{sZ(this,i);break}case Te.IN_CAPTION:{HZt(this,i);break}case Te.IN_COLUMN_GROUP:{P4(this,i);break}case Te.IN_TABLE_BODY:{ck(this,i);break}case Te.IN_ROW:{uk(this,i);break}case Te.IN_CELL:{kZt(this,i);break}case Te.IN_SELECT:{pwe(this,i);break}case Te.IN_SELECT_IN_TABLE:{KZt(this,i);break}case Te.IN_TEMPLATE:{DZt(this,i);break}case Te.AFTER_BODY:{EZt(this,i);break}case Te.IN_FRAMESET:{MZt(this,i);break}case Te.AFTER_FRAMESET:{PZt(this,i);break}case Te.AFTER_AFTER_BODY:{OZt(this,i);break}case Te.AFTER_AFTER_FRAMESET:{_Zt(this,i);break}}}},{key:"onEndTag",value:function(i){this.skipNextNewLine=!1,this.currentToken=i,this.currentNotInHTML?jZt(this,i):this._endTagOutsideForeignContent(i)}},{key:"_endTagOutsideForeignContent",value:function(i){switch(this.insertionMode){case Te.INITIAL:{AZ(this,i);break}case Te.BEFORE_HTML:{Wyt(this,i);break}case Te.BEFORE_HEAD:{Hyt(this,i);break}case Te.IN_HEAD:{Tyt(this,i);break}case Te.IN_HEAD_NO_SCRIPT:{kyt(this,i);break}case Te.AFTER_HEAD:{Kyt(this,i);break}case Te.IN_BODY:{lk(this,i);break}case Te.TEXT:{ZZt(this,i);break}case Te.IN_TABLE:{_B(this,i);break}case Te.IN_TABLE_TEXT:{sZ(this,i);break}case Te.IN_CAPTION:{TZt(this,i);break}case Te.IN_COLUMN_GROUP:{NZt(this,i);break}case Te.IN_TABLE_BODY:{$z(this,i);break}case Te.IN_ROW:{fwe(this,i);break}case Te.IN_CELL:{YZt(this,i);break}case Te.IN_SELECT:{bwe(this,i);break}case Te.IN_SELECT_IN_TABLE:{FZt(this,i);break}case Te.IN_TEMPLATE:{xZt(this,i);break}case Te.AFTER_BODY:{Zwe(this,i);break}case Te.IN_FRAMESET:{zZt(this,i);break}case Te.AFTER_FRAMESET:{JZt(this,i);break}case Te.AFTER_AFTER_BODY:{rW(this,i);break}}}},{key:"onEof",value:function(i){switch(this.insertionMode){case Te.INITIAL:{AZ(this,i);break}case Te.BEFORE_HTML:{gv(this,i);break}case Te.BEFORE_HEAD:{iv(this,i);break}case Te.IN_HEAD:{Iv(this,i);break}case Te.IN_HEAD_NO_SCRIPT:{nv(this,i);break}case Te.AFTER_HEAD:{rv(this,i);break}case Te.IN_BODY:case Te.IN_TABLE:case Te.IN_CAPTION:case Te.IN_COLUMN_GROUP:case Te.IN_TABLE_BODY:case Te.IN_ROW:case Te.IN_CELL:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:{uwe(this,i);break}case Te.TEXT:{GZt(this,i);break}case Te.IN_TABLE_TEXT:{sZ(this,i);break}case Te.IN_TEMPLATE:{ywe(this,i);break}case Te.AFTER_BODY:case Te.IN_FRAMESET:case Te.AFTER_FRAMESET:case Te.AFTER_AFTER_BODY:case Te.AFTER_AFTER_FRAMESET:{z4(this,i);break}}}},{key:"onWhitespaceCharacter",value:function(i){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,i.chars.charCodeAt(0)===Cwe.CODE_POINTS.LINE_FEED)){if(i.chars.length===1)return;i.chars=i.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(i);return}switch(this.insertionMode){case Te.IN_HEAD:case Te.IN_HEAD_NO_SCRIPT:case Te.AFTER_HEAD:case Te.TEXT:case Te.IN_COLUMN_GROUP:case Te.IN_SELECT:case Te.IN_SELECT_IN_TABLE:case Te.IN_FRAMESET:case Te.AFTER_FRAMESET:{this._insertCharacters(i);break}case Te.IN_BODY:case Te.IN_CAPTION:case Te.IN_CELL:case Te.IN_TEMPLATE:case Te.AFTER_BODY:case Te.AFTER_AFTER_BODY:case Te.AFTER_AFTER_FRAMESET:{awe(this,i);break}case Te.IN_TABLE:case Te.IN_TABLE_BODY:case Te.IN_ROW:{XD(this,i);break}case Te.IN_TABLE_TEXT:{dwe(this,i);break}}}}],[{key:"parse",value:function(i,I){const n=new this(I);return n.tokenizer.write(i,!0),n.document}},{key:"getFragmentParser",value:function(i,I){const n=Object.assign(Object.assign({},vre),I);i??(i=n.treeAdapter.createElement(M.TAG_NAMES.TEMPLATE,M.NS.HTML,[]));const r=n.treeAdapter.createElement("documentmock",M.NS.HTML,[]),C=new this(n,r,i);return C.fragmentContextID===M.TAG_ID.TEMPLATE&&C.tmplInsertionModeStack.unshift(Te.IN_TEMPLATE),C._initTokenizerForFragmentParsing(),C._insertFakeRootElement(),C._resetInsertionMode(),C._findFormInFragmentContext(),C}}]),e}();OB.Parser=pyt;function byt(e,g){let i=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.tagName);return i?e.openElements.contains(i.element)?e.openElements.hasInScope(g.tagID)||(i=null):(e.activeFormattingElements.removeEntry(i),i=null):cwe(e,g),i}function yyt(e,g){let i=null,I=e.openElements.stackTop;for(;I>=0;I--){const n=e.openElements.items[I];if(n===g.element)break;e._isSpecialElement(n,e.openElements.tagIDs[I])&&(i=n)}return i||(e.openElements.shortenToLength(I<0?0:I),e.activeFormattingElements.removeEntry(g)),i}function Zyt(e,g,i){let I=g,n=e.openElements.getCommonAncestor(g);for(let r=0,C=n;C!==i;r++,C=n){n=e.openElements.getCommonAncestor(C);const o=e.activeFormattingElements.getElementEntry(C),a=o&&r>=myt;!o||a?(a&&e.activeFormattingElements.removeEntry(o),e.openElements.remove(C)):(C=Gyt(e,o),I===g&&(e.activeFormattingElements.bookmark=o),e.treeAdapter.detachNode(I),e.treeAdapter.appendChild(C,I),I=C)}return I}function Gyt(e,g){const i=e.treeAdapter.getNamespaceURI(g.element),I=e.treeAdapter.createElement(g.token.tagName,i,g.token.attrs);return e.openElements.replace(g.element,I),g.element=I,I}function vyt(e,g,i){const I=e.treeAdapter.getTagName(g),n=(0,M.getTagID)(I);if(e._isElementCausesFosterParenting(n))e._fosterParentElement(i);else{const r=e.treeAdapter.getNamespaceURI(g);n===M.TAG_ID.TEMPLATE&&r===M.NS.HTML&&(g=e.treeAdapter.getTemplateContent(g)),e.treeAdapter.appendChild(g,i)}}function Byt(e,g,i){const I=e.treeAdapter.getNamespaceURI(i.element),{token:n}=i,r=e.treeAdapter.createElement(n.tagName,I,n.attrs);e._adoptNodes(g,r),e.treeAdapter.appendChild(g,r),e.activeFormattingElements.insertElementAfterBookmark(r,n),e.activeFormattingElements.removeEntry(i),e.openElements.remove(i.element),e.openElements.insertAfter(g,r,n.tagID)}function M4(e,g){for(let i=0;i=i;I--)e._setEndLocation(e.openElements.items[I],g);if(!e.fragmentContext&&e.openElements.stackTop>=0){const I=e.openElements.items[0],n=e.treeAdapter.getNodeSourceCodeLocation(I);if(n&&!n.endTag&&(e._setEndLocation(I,g),e.openElements.stackTop>=1)){const r=e.openElements.items[1],C=e.treeAdapter.getNodeSourceCodeLocation(r);C&&!C.endTag&&e._setEndLocation(r,g)}}}}function Ryt(e,g){e._setDocumentType(g);const i=g.forceQuirks?M.DOCUMENT_MODE.QUIRKS:Gre.getDocumentMode(g);Gre.isConforming(g)||e._err(g,mn.ERR.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,i),e.insertionMode=Te.BEFORE_HTML}function AZ(e,g){e._err(g,mn.ERR.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,M.DOCUMENT_MODE.QUIRKS),e.insertionMode=Te.BEFORE_HTML,e._processToken(g)}function Vyt(e,g){g.tagID===M.TAG_ID.HTML?(e._insertElement(g,M.NS.HTML),e.insertionMode=Te.BEFORE_HEAD):gv(e,g)}function Wyt(e,g){const i=g.tagID;(i===M.TAG_ID.HTML||i===M.TAG_ID.HEAD||i===M.TAG_ID.BODY||i===M.TAG_ID.BR)&&gv(e,g)}function gv(e,g){e._insertFakeRootElement(),e.insertionMode=Te.BEFORE_HEAD,e._processToken(g)}function Xyt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.HEAD:{e._insertElement(g,M.NS.HTML),e.headElement=e.openElements.current,e.insertionMode=Te.IN_HEAD;break}default:iv(e,g)}}function Hyt(e,g){const i=g.tagID;i===M.TAG_ID.HEAD||i===M.TAG_ID.BODY||i===M.TAG_ID.HTML||i===M.TAG_ID.BR?iv(e,g):e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}function iv(e,g){e._insertFakeElement(M.TAG_NAMES.HEAD,M.TAG_ID.HEAD),e.headElement=e.openElements.current,e.insertionMode=Te.IN_HEAD,e._processToken(g)}function Ga(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.BASE:case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.LINK:case M.TAG_ID.META:{e._appendElement(g,M.NS.HTML),g.ackSelfClosing=!0;break}case M.TAG_ID.TITLE:{e._switchToTextParsing(g,Qn.TokenizerMode.RCDATA);break}case M.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT):(e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_HEAD_NO_SCRIPT);break}case M.TAG_ID.NOFRAMES:case M.TAG_ID.STYLE:{e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT);break}case M.TAG_ID.SCRIPT:{e._switchToTextParsing(g,Qn.TokenizerMode.SCRIPT_DATA);break}case M.TAG_ID.TEMPLATE:{e._insertTemplate(g),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Te.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Te.IN_TEMPLATE);break}case M.TAG_ID.HEAD:{e._err(g,mn.ERR.misplacedStartTagForHeadElement);break}default:Iv(e,g)}}function Tyt(e,g){switch(g.tagID){case M.TAG_ID.HEAD:{e.openElements.pop(),e.insertionMode=Te.AFTER_HEAD;break}case M.TAG_ID.BODY:case M.TAG_ID.BR:case M.TAG_ID.HTML:{Iv(e,g);break}case M.TAG_ID.TEMPLATE:{Am(e,g);break}default:e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}}function Am(e,g){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==M.TAG_ID.TEMPLATE&&e._err(g,mn.ERR.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(M.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}function Iv(e,g){e.openElements.pop(),e.insertionMode=Te.AFTER_HEAD,e._processToken(g)}function Nyt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.HEAD:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.NOFRAMES:case M.TAG_ID.STYLE:{Ga(e,g);break}case M.TAG_ID.NOSCRIPT:{e._err(g,mn.ERR.nestedNoscriptInHead);break}default:nv(e,g)}}function kyt(e,g){switch(g.tagID){case M.TAG_ID.NOSCRIPT:{e.openElements.pop(),e.insertionMode=Te.IN_HEAD;break}case M.TAG_ID.BR:{nv(e,g);break}default:e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}}function nv(e,g){const i=g.type===RI.TokenType.EOF?mn.ERR.openElementsLeftAfterEof:mn.ERR.disallowedContentInNoscriptInHead;e._err(g,i),e.openElements.pop(),e.insertionMode=Te.IN_HEAD,e._processToken(g)}function Yyt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.BODY:{e._insertElement(g,M.NS.HTML),e.framesetOk=!1,e.insertionMode=Te.IN_BODY;break}case M.TAG_ID.FRAMESET:{e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_FRAMESET;break}case M.TAG_ID.BASE:case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.NOFRAMES:case M.TAG_ID.SCRIPT:case M.TAG_ID.STYLE:case M.TAG_ID.TEMPLATE:case M.TAG_ID.TITLE:{e._err(g,mn.ERR.abandonedHeadElementChild),e.openElements.push(e.headElement,M.TAG_ID.HEAD),Ga(e,g),e.openElements.remove(e.headElement);break}case M.TAG_ID.HEAD:{e._err(g,mn.ERR.misplacedStartTagForHeadElement);break}default:rv(e,g)}}function Kyt(e,g){switch(g.tagID){case M.TAG_ID.BODY:case M.TAG_ID.HTML:case M.TAG_ID.BR:{rv(e,g);break}case M.TAG_ID.TEMPLATE:{Am(e,g);break}default:e._err(g,mn.ERR.endTagWithoutMatchingOpenElement)}}function rv(e,g){e._insertFakeElement(M.TAG_NAMES.BODY,M.TAG_ID.BODY),e.insertionMode=Te.IN_BODY,sk(e,g)}function sk(e,g){switch(g.type){case RI.TokenType.CHARACTER:{Awe(e,g);break}case RI.TokenType.WHITESPACE_CHARACTER:{awe(e,g);break}case RI.TokenType.COMMENT:{jz(e,g);break}case RI.TokenType.START_TAG:{zn(e,g);break}case RI.TokenType.END_TAG:{lk(e,g);break}case RI.TokenType.EOF:{uwe(e,g);break}}}function awe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g)}function Awe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g),e.framesetOk=!1}function Fyt(e,g){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],g.attrs)}function Dyt(e,g){const i=e.openElements.tryPeekProperlyNestedBodyElement();i&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(i,g.attrs))}function xyt(e,g){const i=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&i&&(e.treeAdapter.detachNode(i),e.openElements.popAllUpToHtmlElement(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_FRAMESET)}function Eyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML)}function Myt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),(0,M.isNumberedHeader)(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(g,M.NS.HTML)}function zyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Pyt(e,g){const i=e.openElements.tmplCount>0;(!e.formElement||i)&&(e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),i||(e.formElement=e.openElements.current))}function Jyt(e,g){e.framesetOk=!1;const i=g.tagID;for(let I=e.openElements.stackTop;I>=0;I--){const n=e.openElements.tagIDs[I];if(i===M.TAG_ID.LI&&n===M.TAG_ID.LI||(i===M.TAG_ID.DD||i===M.TAG_ID.DT)&&(n===M.TAG_ID.DD||n===M.TAG_ID.DT)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n);break}if(n!==M.TAG_ID.ADDRESS&&n!==M.TAG_ID.DIV&&n!==M.TAG_ID.P&&e._isSpecialElement(e.openElements.items[I],n))break}e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML)}function Oyt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),e.tokenizer.state=Qn.TokenizerMode.PLAINTEXT}function _yt(e,g){e.openElements.hasInScope(M.TAG_ID.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(M.TAG_ID.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.framesetOk=!1}function Lyt(e,g){const i=e.activeFormattingElements.getElementEntryInScopeWithTagName(M.TAG_NAMES.A);i&&(M4(e,g),e.openElements.remove(i.element),e.activeFormattingElements.removeEntry(i)),e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function Uyt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function Qyt(e,g){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(M.TAG_ID.NOBR)&&(M4(e,g),e._reconstructActiveFormattingElements()),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function jyt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function $yt(e,g){e.treeAdapter.getDocumentMode(e.document)!==M.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._insertElement(g,M.NS.HTML),e.framesetOk=!1,e.insertionMode=Te.IN_TABLE}function swe(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,M.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function lwe(e){const g=(0,RI.getTokenAttr)(e,M.ATTRS.TYPE);return g!=null&&g.toLowerCase()===dyt}function qyt(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,M.NS.HTML),lwe(g)||(e.framesetOk=!1),g.ackSelfClosing=!0}function eZt(e,g){e._appendElement(g,M.NS.HTML),g.ackSelfClosing=!0}function tZt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._appendElement(g,M.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function gZt(e,g){g.tagName=M.TAG_NAMES.IMG,g.tagID=M.TAG_ID.IMG,swe(e,g)}function iZt(e,g){e._insertElement(g,M.NS.HTML),e.skipNextNewLine=!0,e.tokenizer.state=Qn.TokenizerMode.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Te.TEXT}function IZt(e,g){e.openElements.hasInButtonScope(M.TAG_ID.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT)}function nZt(e,g){e.framesetOk=!1,e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT)}function Bre(e,g){e._switchToTextParsing(g,Qn.TokenizerMode.RAWTEXT)}function rZt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Te.IN_TABLE||e.insertionMode===Te.IN_CAPTION||e.insertionMode===Te.IN_TABLE_BODY||e.insertionMode===Te.IN_ROW||e.insertionMode===Te.IN_CELL?Te.IN_SELECT_IN_TABLE:Te.IN_SELECT}function CZt(e,g){e.openElements.currentTagId===M.TAG_ID.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML)}function oZt(e,g){e.openElements.hasInScope(M.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(g,M.NS.HTML)}function aZt(e,g){e.openElements.hasInScope(M.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(M.TAG_ID.RTC),e._insertElement(g,M.NS.HTML)}function AZt(e,g){e._reconstructActiveFormattingElements(),Ua.adjustTokenMathMLAttrs(g),Ua.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,M.NS.MATHML):e._insertElement(g,M.NS.MATHML),g.ackSelfClosing=!0}function sZt(e,g){e._reconstructActiveFormattingElements(),Ua.adjustTokenSVGAttrs(g),Ua.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,M.NS.SVG):e._insertElement(g,M.NS.SVG),g.ackSelfClosing=!0}function Sre(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,M.NS.HTML)}function zn(e,g){switch(g.tagID){case M.TAG_ID.I:case M.TAG_ID.S:case M.TAG_ID.B:case M.TAG_ID.U:case M.TAG_ID.EM:case M.TAG_ID.TT:case M.TAG_ID.BIG:case M.TAG_ID.CODE:case M.TAG_ID.FONT:case M.TAG_ID.SMALL:case M.TAG_ID.STRIKE:case M.TAG_ID.STRONG:{Uyt(e,g);break}case M.TAG_ID.A:{Lyt(e,g);break}case M.TAG_ID.H1:case M.TAG_ID.H2:case M.TAG_ID.H3:case M.TAG_ID.H4:case M.TAG_ID.H5:case M.TAG_ID.H6:{Myt(e,g);break}case M.TAG_ID.P:case M.TAG_ID.DL:case M.TAG_ID.OL:case M.TAG_ID.UL:case M.TAG_ID.DIV:case M.TAG_ID.DIR:case M.TAG_ID.NAV:case M.TAG_ID.MAIN:case M.TAG_ID.MENU:case M.TAG_ID.ASIDE:case M.TAG_ID.CENTER:case M.TAG_ID.FIGURE:case M.TAG_ID.FOOTER:case M.TAG_ID.HEADER:case M.TAG_ID.HGROUP:case M.TAG_ID.DIALOG:case M.TAG_ID.DETAILS:case M.TAG_ID.ADDRESS:case M.TAG_ID.ARTICLE:case M.TAG_ID.SECTION:case M.TAG_ID.SUMMARY:case M.TAG_ID.FIELDSET:case M.TAG_ID.BLOCKQUOTE:case M.TAG_ID.FIGCAPTION:{Eyt(e,g);break}case M.TAG_ID.LI:case M.TAG_ID.DD:case M.TAG_ID.DT:{Jyt(e,g);break}case M.TAG_ID.BR:case M.TAG_ID.IMG:case M.TAG_ID.WBR:case M.TAG_ID.AREA:case M.TAG_ID.EMBED:case M.TAG_ID.KEYGEN:{swe(e,g);break}case M.TAG_ID.HR:{tZt(e,g);break}case M.TAG_ID.RB:case M.TAG_ID.RTC:{oZt(e,g);break}case M.TAG_ID.RT:case M.TAG_ID.RP:{aZt(e,g);break}case M.TAG_ID.PRE:case M.TAG_ID.LISTING:{zyt(e,g);break}case M.TAG_ID.XMP:{IZt(e,g);break}case M.TAG_ID.SVG:{sZt(e,g);break}case M.TAG_ID.HTML:{Fyt(e,g);break}case M.TAG_ID.BASE:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.STYLE:case M.TAG_ID.TITLE:case M.TAG_ID.SCRIPT:case M.TAG_ID.BGSOUND:case M.TAG_ID.BASEFONT:case M.TAG_ID.TEMPLATE:{Ga(e,g);break}case M.TAG_ID.BODY:{Dyt(e,g);break}case M.TAG_ID.FORM:{Pyt(e,g);break}case M.TAG_ID.NOBR:{Qyt(e,g);break}case M.TAG_ID.MATH:{AZt(e,g);break}case M.TAG_ID.TABLE:{$yt(e,g);break}case M.TAG_ID.INPUT:{qyt(e,g);break}case M.TAG_ID.PARAM:case M.TAG_ID.TRACK:case M.TAG_ID.SOURCE:{eZt(e,g);break}case M.TAG_ID.IMAGE:{gZt(e,g);break}case M.TAG_ID.BUTTON:{_yt(e,g);break}case M.TAG_ID.APPLET:case M.TAG_ID.OBJECT:case M.TAG_ID.MARQUEE:{jyt(e,g);break}case M.TAG_ID.IFRAME:{nZt(e,g);break}case M.TAG_ID.SELECT:{rZt(e,g);break}case M.TAG_ID.OPTION:case M.TAG_ID.OPTGROUP:{CZt(e,g);break}case M.TAG_ID.NOEMBED:{Bre(e,g);break}case M.TAG_ID.FRAMESET:{xyt(e,g);break}case M.TAG_ID.TEXTAREA:{iZt(e,g);break}case M.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?Bre(e,g):Sre(e,g);break}case M.TAG_ID.PLAINTEXT:{Oyt(e,g);break}case M.TAG_ID.COL:case M.TAG_ID.TH:case M.TAG_ID.TD:case M.TAG_ID.TR:case M.TAG_ID.HEAD:case M.TAG_ID.FRAME:case M.TAG_ID.TBODY:case M.TAG_ID.TFOOT:case M.TAG_ID.THEAD:case M.TAG_ID.CAPTION:case M.TAG_ID.COLGROUP:break;default:Sre(e,g)}}function lZt(e,g){if(e.openElements.hasInScope(M.TAG_ID.BODY)&&(e.insertionMode=Te.AFTER_BODY,e.options.sourceCodeLocationInfo)){const i=e.openElements.tryPeekProperlyNestedBodyElement();i&&e._setEndLocation(i,g)}}function cZt(e,g){e.openElements.hasInScope(M.TAG_ID.BODY)&&(e.insertionMode=Te.AFTER_BODY,Zwe(e,g))}function uZt(e,g){const i=g.tagID;e.openElements.hasInScope(i)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i))}function dZt(e){const g=e.openElements.tmplCount>0,{formElement:i}=e;g||(e.formElement=null),(i||g)&&e.openElements.hasInScope(M.TAG_ID.FORM)&&(e.openElements.generateImpliedEndTags(),g?e.openElements.popUntilTagNamePopped(M.TAG_ID.FORM):i&&e.openElements.remove(i))}function hZt(e){e.openElements.hasInButtonScope(M.TAG_ID.P)||e._insertFakeElement(M.TAG_NAMES.P,M.TAG_ID.P),e._closePElement()}function mZt(e){e.openElements.hasInListItemScope(M.TAG_ID.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(M.TAG_ID.LI),e.openElements.popUntilTagNamePopped(M.TAG_ID.LI))}function fZt(e,g){const i=g.tagID;e.openElements.hasInScope(i)&&(e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.popUntilTagNamePopped(i))}function pZt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function bZt(e,g){const i=g.tagID;e.openElements.hasInScope(i)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i),e.activeFormattingElements.clearToLastMarker())}function yZt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(M.TAG_NAMES.BR,M.TAG_ID.BR),e.openElements.pop(),e.framesetOk=!1}function cwe(e,g){const i=g.tagName,I=g.tagID;for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n],C=e.openElements.tagIDs[n];if(I===C&&(I!==M.TAG_ID.UNKNOWN||e.treeAdapter.getTagName(r)===i)){e.openElements.generateImpliedEndTagsWithExclusion(I),e.openElements.stackTop>=n&&e.openElements.shortenToLength(n);break}if(e._isSpecialElement(r,C))break}}function lk(e,g){switch(g.tagID){case M.TAG_ID.A:case M.TAG_ID.B:case M.TAG_ID.I:case M.TAG_ID.S:case M.TAG_ID.U:case M.TAG_ID.EM:case M.TAG_ID.TT:case M.TAG_ID.BIG:case M.TAG_ID.CODE:case M.TAG_ID.FONT:case M.TAG_ID.NOBR:case M.TAG_ID.SMALL:case M.TAG_ID.STRIKE:case M.TAG_ID.STRONG:{M4(e,g);break}case M.TAG_ID.P:{hZt(e);break}case M.TAG_ID.DL:case M.TAG_ID.UL:case M.TAG_ID.OL:case M.TAG_ID.DIR:case M.TAG_ID.DIV:case M.TAG_ID.NAV:case M.TAG_ID.PRE:case M.TAG_ID.MAIN:case M.TAG_ID.MENU:case M.TAG_ID.ASIDE:case M.TAG_ID.BUTTON:case M.TAG_ID.CENTER:case M.TAG_ID.FIGURE:case M.TAG_ID.FOOTER:case M.TAG_ID.HEADER:case M.TAG_ID.HGROUP:case M.TAG_ID.DIALOG:case M.TAG_ID.ADDRESS:case M.TAG_ID.ARTICLE:case M.TAG_ID.DETAILS:case M.TAG_ID.SECTION:case M.TAG_ID.SUMMARY:case M.TAG_ID.LISTING:case M.TAG_ID.FIELDSET:case M.TAG_ID.BLOCKQUOTE:case M.TAG_ID.FIGCAPTION:{uZt(e,g);break}case M.TAG_ID.LI:{mZt(e);break}case M.TAG_ID.DD:case M.TAG_ID.DT:{fZt(e,g);break}case M.TAG_ID.H1:case M.TAG_ID.H2:case M.TAG_ID.H3:case M.TAG_ID.H4:case M.TAG_ID.H5:case M.TAG_ID.H6:{pZt(e);break}case M.TAG_ID.BR:{yZt(e);break}case M.TAG_ID.BODY:{lZt(e,g);break}case M.TAG_ID.HTML:{cZt(e,g);break}case M.TAG_ID.FORM:{dZt(e);break}case M.TAG_ID.APPLET:case M.TAG_ID.OBJECT:case M.TAG_ID.MARQUEE:{bZt(e,g);break}case M.TAG_ID.TEMPLATE:{Am(e,g);break}default:cwe(e,g)}}function uwe(e,g){e.tmplInsertionModeStack.length>0?ywe(e,g):z4(e,g)}function ZZt(e,g){var i;g.tagID===M.TAG_ID.SCRIPT&&((i=e.scriptHandler)===null||i===void 0||i.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function GZt(e,g){e._err(g,mn.ERR.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(g)}function XD(e,g){if(owe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Te.IN_TABLE_TEXT,g.type){case RI.TokenType.CHARACTER:{hwe(e,g);break}case RI.TokenType.WHITESPACE_CHARACTER:{dwe(e,g);break}}else cw(e,g)}function vZt(e,g){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_CAPTION}function BZt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_COLUMN_GROUP}function SZt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(M.TAG_NAMES.COLGROUP,M.TAG_ID.COLGROUP),e.insertionMode=Te.IN_COLUMN_GROUP,P4(e,g)}function wZt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,M.NS.HTML),e.insertionMode=Te.IN_TABLE_BODY}function RZt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(M.TAG_NAMES.TBODY,M.TAG_ID.TBODY),e.insertionMode=Te.IN_TABLE_BODY,ck(e,g)}function VZt(e,g){e.openElements.hasInTableScope(M.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.TABLE),e._resetInsertionMode(),e._processStartTag(g))}function WZt(e,g){lwe(g)?e._appendElement(g,M.NS.HTML):cw(e,g),g.ackSelfClosing=!0}function XZt(e,g){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(g,M.NS.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Ub(e,g){switch(g.tagID){case M.TAG_ID.TD:case M.TAG_ID.TH:case M.TAG_ID.TR:{RZt(e,g);break}case M.TAG_ID.STYLE:case M.TAG_ID.SCRIPT:case M.TAG_ID.TEMPLATE:{Ga(e,g);break}case M.TAG_ID.COL:{SZt(e,g);break}case M.TAG_ID.FORM:{XZt(e,g);break}case M.TAG_ID.TABLE:{VZt(e,g);break}case M.TAG_ID.TBODY:case M.TAG_ID.TFOOT:case M.TAG_ID.THEAD:{wZt(e,g);break}case M.TAG_ID.INPUT:{WZt(e,g);break}case M.TAG_ID.CAPTION:{vZt(e,g);break}case M.TAG_ID.COLGROUP:{BZt(e,g);break}default:cw(e,g)}}function _B(e,g){switch(g.tagID){case M.TAG_ID.TABLE:{e.openElements.hasInTableScope(M.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.TABLE),e._resetInsertionMode());break}case M.TAG_ID.TEMPLATE:{Am(e,g);break}case M.TAG_ID.BODY:case M.TAG_ID.CAPTION:case M.TAG_ID.COL:case M.TAG_ID.COLGROUP:case M.TAG_ID.HTML:case M.TAG_ID.TBODY:case M.TAG_ID.TD:case M.TAG_ID.TFOOT:case M.TAG_ID.TH:case M.TAG_ID.THEAD:case M.TAG_ID.TR:break;default:cw(e,g)}}function cw(e,g){const i=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,sk(e,g),e.fosterParentingEnabled=i}function dwe(e,g){e.pendingCharacterTokens.push(g)}function hwe(e,g){e.pendingCharacterTokens.push(g),e.hasNonWhitespacePendingCharacterToken=!0}function sZ(e,g){let i=0;if(e.hasNonWhitespacePendingCharacterToken)for(;i0&&e.openElements.currentTagId===M.TAG_ID.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===M.TAG_ID.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===M.TAG_ID.OPTGROUP&&e.openElements.pop();break}case M.TAG_ID.OPTION:{e.openElements.currentTagId===M.TAG_ID.OPTION&&e.openElements.pop();break}case M.TAG_ID.SELECT:{e.openElements.hasInSelectScope(M.TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.SELECT),e._resetInsertionMode());break}case M.TAG_ID.TEMPLATE:{Am(e,g);break}}}function KZt(e,g){const i=g.tagID;i===M.TAG_ID.CAPTION||i===M.TAG_ID.TABLE||i===M.TAG_ID.TBODY||i===M.TAG_ID.TFOOT||i===M.TAG_ID.THEAD||i===M.TAG_ID.TR||i===M.TAG_ID.TD||i===M.TAG_ID.TH?(e.openElements.popUntilTagNamePopped(M.TAG_ID.SELECT),e._resetInsertionMode(),e._processStartTag(g)):pwe(e,g)}function FZt(e,g){const i=g.tagID;i===M.TAG_ID.CAPTION||i===M.TAG_ID.TABLE||i===M.TAG_ID.TBODY||i===M.TAG_ID.TFOOT||i===M.TAG_ID.THEAD||i===M.TAG_ID.TR||i===M.TAG_ID.TD||i===M.TAG_ID.TH?e.openElements.hasInTableScope(i)&&(e.openElements.popUntilTagNamePopped(M.TAG_ID.SELECT),e._resetInsertionMode(),e.onEndTag(g)):bwe(e,g)}function DZt(e,g){switch(g.tagID){case M.TAG_ID.BASE:case M.TAG_ID.BASEFONT:case M.TAG_ID.BGSOUND:case M.TAG_ID.LINK:case M.TAG_ID.META:case M.TAG_ID.NOFRAMES:case M.TAG_ID.SCRIPT:case M.TAG_ID.STYLE:case M.TAG_ID.TEMPLATE:case M.TAG_ID.TITLE:{Ga(e,g);break}case M.TAG_ID.CAPTION:case M.TAG_ID.COLGROUP:case M.TAG_ID.TBODY:case M.TAG_ID.TFOOT:case M.TAG_ID.THEAD:{e.tmplInsertionModeStack[0]=Te.IN_TABLE,e.insertionMode=Te.IN_TABLE,Ub(e,g);break}case M.TAG_ID.COL:{e.tmplInsertionModeStack[0]=Te.IN_COLUMN_GROUP,e.insertionMode=Te.IN_COLUMN_GROUP,P4(e,g);break}case M.TAG_ID.TR:{e.tmplInsertionModeStack[0]=Te.IN_TABLE_BODY,e.insertionMode=Te.IN_TABLE_BODY,ck(e,g);break}case M.TAG_ID.TD:case M.TAG_ID.TH:{e.tmplInsertionModeStack[0]=Te.IN_ROW,e.insertionMode=Te.IN_ROW,uk(e,g);break}default:e.tmplInsertionModeStack[0]=Te.IN_BODY,e.insertionMode=Te.IN_BODY,zn(e,g)}}function xZt(e,g){g.tagID===M.TAG_ID.TEMPLATE&&Am(e,g)}function ywe(e,g){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(M.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(g)):z4(e,g)}function EZt(e,g){g.tagID===M.TAG_ID.HTML?zn(e,g):JX(e,g)}function Zwe(e,g){var i;if(g.tagID===M.TAG_ID.HTML){if(e.fragmentContext||(e.insertionMode=Te.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===M.TAG_ID.HTML){e._setEndLocation(e.openElements.items[0],g);const I=e.openElements.items[1];I&&!(!((i=e.treeAdapter.getNodeSourceCodeLocation(I))===null||i===void 0)&&i.endTag)&&e._setEndLocation(I,g)}}else JX(e,g)}function JX(e,g){e.insertionMode=Te.IN_BODY,sk(e,g)}function MZt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.FRAMESET:{e._insertElement(g,M.NS.HTML);break}case M.TAG_ID.FRAME:{e._appendElement(g,M.NS.HTML),g.ackSelfClosing=!0;break}case M.TAG_ID.NOFRAMES:{Ga(e,g);break}}}function zZt(e,g){g.tagID===M.TAG_ID.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==M.TAG_ID.FRAMESET&&(e.insertionMode=Te.AFTER_FRAMESET))}function PZt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.NOFRAMES:{Ga(e,g);break}}}function JZt(e,g){g.tagID===M.TAG_ID.HTML&&(e.insertionMode=Te.AFTER_AFTER_FRAMESET)}function OZt(e,g){g.tagID===M.TAG_ID.HTML?zn(e,g):rW(e,g)}function rW(e,g){e.insertionMode=Te.IN_BODY,sk(e,g)}function _Zt(e,g){switch(g.tagID){case M.TAG_ID.HTML:{zn(e,g);break}case M.TAG_ID.NOFRAMES:{Ga(e,g);break}}}function LZt(e,g){g.chars=Cwe.REPLACEMENT_CHARACTER,e._insertCharacters(g)}function UZt(e,g){e._insertCharacters(g),e.framesetOk=!1}function Gwe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==M.NS.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function QZt(e,g){if(Ua.causesExit(g))Gwe(e),e._startTagOutsideForeignContent(g);else{const i=e._getAdjustedCurrentElement(),I=e.treeAdapter.getNamespaceURI(i);I===M.NS.MATHML?Ua.adjustTokenMathMLAttrs(g):I===M.NS.SVG&&(Ua.adjustTokenSVGTagName(g),Ua.adjustTokenSVGAttrs(g)),Ua.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,I):e._insertElement(g,I),g.ackSelfClosing=!0}}function jZt(e,g){if(g.tagID===M.TAG_ID.P||g.tagID===M.TAG_ID.BR){Gwe(e),e._endTagOutsideForeignContent(g);return}for(let i=e.openElements.stackTop;i>0;i--){const I=e.openElements.items[i];if(e.treeAdapter.getNamespaceURI(I)===M.NS.HTML){e._endTagOutsideForeignContent(g);break}const n=e.treeAdapter.getTagName(I);if(n.toLowerCase()===g.tagName){g.tagName=n,e.openElements.shortenToLength(i);break}}}var Qb={};Object.defineProperty(Qb,"__esModule",{value:!0});Qb.serializeOuter=Qb.serialize=void 0;const Ci=rl,vwe=xb,$Zt=Ak,qZt=new Set([Ci.TAG_NAMES.AREA,Ci.TAG_NAMES.BASE,Ci.TAG_NAMES.BASEFONT,Ci.TAG_NAMES.BGSOUND,Ci.TAG_NAMES.BR,Ci.TAG_NAMES.COL,Ci.TAG_NAMES.EMBED,Ci.TAG_NAMES.FRAME,Ci.TAG_NAMES.HR,Ci.TAG_NAMES.IMG,Ci.TAG_NAMES.INPUT,Ci.TAG_NAMES.KEYGEN,Ci.TAG_NAMES.LINK,Ci.TAG_NAMES.META,Ci.TAG_NAMES.PARAM,Ci.TAG_NAMES.SOURCE,Ci.TAG_NAMES.TRACK,Ci.TAG_NAMES.WBR]);function Bwe(e,g){return g.treeAdapter.isElementNode(e)&&g.treeAdapter.getNamespaceURI(e)===Ci.NS.HTML&&qZt.has(g.treeAdapter.getTagName(e))}const Swe={treeAdapter:$Zt.defaultTreeAdapter,scriptingEnabled:!0};function eGt(e,g){const i=Object.assign(Object.assign({},Swe),g);return Bwe(e,i)?"":wwe(e,i)}Qb.serialize=eGt;function tGt(e,g){const i=Object.assign(Object.assign({},Swe),g);return Rwe(e,i)}Qb.serializeOuter=tGt;function wwe(e,g){let i="";const I=g.treeAdapter.isElementNode(e)&&g.treeAdapter.getTagName(e)===Ci.TAG_NAMES.TEMPLATE&&g.treeAdapter.getNamespaceURI(e)===Ci.NS.HTML?g.treeAdapter.getTemplateContent(e):e,n=g.treeAdapter.getChildNodes(I);if(n)for(const r of n)i+=Rwe(r,g);return i}function Rwe(e,g){return g.treeAdapter.isElementNode(e)?gGt(e,g):g.treeAdapter.isTextNode(e)?IGt(e,g):g.treeAdapter.isCommentNode(e)?nGt(e,g):g.treeAdapter.isDocumentTypeNode(e)?rGt(e,g):""}function gGt(e,g){const i=g.treeAdapter.getTagName(e);return`<${i}${iGt(e,g)}>${Bwe(e,g)?"":`${wwe(e,g)}`}`}function iGt(e,{treeAdapter:g}){let i="";for(const I of g.getAttrList(e)){if(i+=" ",!I.namespace)i+=I.name;else switch(I.namespace){case Ci.NS.XML:{i+=`xml:${I.name}`;break}case Ci.NS.XMLNS:{I.name!=="xmlns"&&(i+="xmlns:"),i+=I.name;break}case Ci.NS.XLINK:{i+=`xlink:${I.name}`;break}default:i+=`${I.prefix}:${I.name}`}i+=`="${(0,vwe.escapeAttribute)(I.value)}"`}return i}function IGt(e,g){const{treeAdapter:i}=g,I=i.getTextNodeContent(e),n=i.getParentNode(e),r=n&&i.isElementNode(n)&&i.getTagName(n);return r&&i.getNamespaceURI(n)===Ci.NS.HTML&&(0,Ci.hasUnescapedText)(r,g.scriptingEnabled)?I:(0,vwe.escapeText)(I)}function nGt(e,{treeAdapter:g}){return``}function rGt(e,{treeAdapter:g}){return``}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseFragment=e.parse=e.TokenizerMode=e.Tokenizer=e.Token=e.html=e.foreignContent=e.ErrorCodes=e.serializeOuter=e.serialize=e.Parser=e.defaultTreeAdapter=void 0;const g=OB;var i=Ak;Object.defineProperty(e,"defaultTreeAdapter",{enumerable:!0,get:function(){return i.defaultTreeAdapter}});var I=OB;Object.defineProperty(e,"Parser",{enumerable:!0,get:function(){return I.Parser}});var n=Qb;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return n.serialize}}),Object.defineProperty(e,"serializeOuter",{enumerable:!0,get:function(){return n.serializeOuter}});var r=lw;Object.defineProperty(e,"ErrorCodes",{enumerable:!0,get:function(){return r.ERR}}),e.foreignContent=E4,e.html=rl,e.Token=ok;var C=dh;Object.defineProperty(e,"Tokenizer",{enumerable:!0,get:function(){return C.Tokenizer}}),Object.defineProperty(e,"TokenizerMode",{enumerable:!0,get:function(){return C.TokenizerMode}});function o(s,A){return g.Parser.parse(s,A)}e.parse=o;function a(s,A,l){typeof s=="string"&&(l=A,A=s,s=null);const c=g.Parser.getFragmentParser(s,l);return c.tokenizer.write(A,!0),c.getFragment()}e.parseFragment=a})($Se);var Vwe={},Wwe={},LB={},hh={},dk={},hk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isUndefinedCodePoint=e.isControlCodePoint=e.getSurrogatePairCodePoint=e.isSurrogatePair=e.isSurrogate=e.SEQUENCES=e.CODE_POINTS=e.REPLACEMENT_CHARACTER=void 0;const g=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]);e.REPLACEMENT_CHARACTER="�",function(o){o[o.EOF=-1]="EOF",o[o.NULL=0]="NULL",o[o.TABULATION=9]="TABULATION",o[o.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",o[o.LINE_FEED=10]="LINE_FEED",o[o.FORM_FEED=12]="FORM_FEED",o[o.SPACE=32]="SPACE",o[o.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",o[o.QUOTATION_MARK=34]="QUOTATION_MARK",o[o.NUMBER_SIGN=35]="NUMBER_SIGN",o[o.AMPERSAND=38]="AMPERSAND",o[o.APOSTROPHE=39]="APOSTROPHE",o[o.HYPHEN_MINUS=45]="HYPHEN_MINUS",o[o.SOLIDUS=47]="SOLIDUS",o[o.DIGIT_0=48]="DIGIT_0",o[o.DIGIT_9=57]="DIGIT_9",o[o.SEMICOLON=59]="SEMICOLON",o[o.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",o[o.EQUALS_SIGN=61]="EQUALS_SIGN",o[o.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",o[o.QUESTION_MARK=63]="QUESTION_MARK",o[o.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",o[o.LATIN_CAPITAL_F=70]="LATIN_CAPITAL_F",o[o.LATIN_CAPITAL_X=88]="LATIN_CAPITAL_X",o[o.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",o[o.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",o[o.GRAVE_ACCENT=96]="GRAVE_ACCENT",o[o.LATIN_SMALL_A=97]="LATIN_SMALL_A",o[o.LATIN_SMALL_F=102]="LATIN_SMALL_F",o[o.LATIN_SMALL_X=120]="LATIN_SMALL_X",o[o.LATIN_SMALL_Z=122]="LATIN_SMALL_Z",o[o.REPLACEMENT_CHARACTER=65533]="REPLACEMENT_CHARACTER"}(e.CODE_POINTS||(e.CODE_POINTS={})),e.SEQUENCES={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function i(o){return o>=55296&&o<=57343}e.isSurrogate=i;function I(o){return o>=56320&&o<=57343}e.isSurrogatePair=I;function n(o,a){return(o-55296)*1024+9216+a}e.getSurrogatePairCodePoint=n;function r(o){return o!==32&&o!==10&&o!==13&&o!==9&&o!==12&&o>=1&&o<=31||o>=127&&o<=159}e.isControlCodePoint=r;function C(o){return o>=64976&&o<=65007||g.has(o)}e.isUndefinedCodePoint=C})(hk);var uw={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ERR=void 0,function(g){g.controlCharacterInInputStream="control-character-in-input-stream",g.noncharacterInInputStream="noncharacter-in-input-stream",g.surrogateInInputStream="surrogate-in-input-stream",g.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",g.endTagWithAttributes="end-tag-with-attributes",g.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",g.unexpectedSolidusInTag="unexpected-solidus-in-tag",g.unexpectedNullCharacter="unexpected-null-character",g.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",g.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",g.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",g.missingEndTagName="missing-end-tag-name",g.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",g.unknownNamedCharacterReference="unknown-named-character-reference",g.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",g.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",g.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",g.eofBeforeTagName="eof-before-tag-name",g.eofInTag="eof-in-tag",g.missingAttributeValue="missing-attribute-value",g.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",g.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",g.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",g.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",g.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",g.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",g.missingDoctypePublicIdentifier="missing-doctype-public-identifier",g.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",g.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",g.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",g.cdataInHtmlContent="cdata-in-html-content",g.incorrectlyOpenedComment="incorrectly-opened-comment",g.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",g.eofInDoctype="eof-in-doctype",g.nestedComment="nested-comment",g.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",g.eofInComment="eof-in-comment",g.incorrectlyClosedComment="incorrectly-closed-comment",g.eofInCdata="eof-in-cdata",g.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",g.nullCharacterReference="null-character-reference",g.surrogateCharacterReference="surrogate-character-reference",g.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",g.controlCharacterReference="control-character-reference",g.noncharacterCharacterReference="noncharacter-character-reference",g.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",g.missingDoctypeName="missing-doctype-name",g.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",g.duplicateAttribute="duplicate-attribute",g.nonConformingDoctype="non-conforming-doctype",g.missingDoctype="missing-doctype",g.misplacedDoctype="misplaced-doctype",g.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",g.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",g.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",g.openElementsLeftAfterEof="open-elements-left-after-eof",g.abandonedHeadElementChild="abandoned-head-element-child",g.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",g.nestedNoscriptInHead="nested-noscript-in-head",g.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(e.ERR||(e.ERR={}))})(uw);function CGt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function wre(e,g){for(var i=0;ithis.bufferWaterline}},{key:"dropParsedChunk",value:function(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}},{key:"write",value:function(i,I){this.html.length>0?this.html+=i:this.html=i,this.endOfChunkHit=!1,this.lastChunkWritten=I}},{key:"insertHtmlAtCurrentPos",value:function(i){this.html=this.html.substring(0,this.pos+1)+i+this.html.substring(this.pos+1),this.endOfChunkHit=!1}},{key:"startsWith",value:function(i,I){if(this.pos+i.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(I)return this.html.startsWith(i,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,On.CODE_POINTS.EOF;const n=this.html.charCodeAt(I);return n===On.CODE_POINTS.CARRIAGE_RETURN?On.CODE_POINTS.LINE_FEED:n}},{key:"advance",value:function(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,On.CODE_POINTS.EOF;let i=this.html.charCodeAt(this.pos);return i===On.CODE_POINTS.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,On.CODE_POINTS.LINE_FEED):i===On.CODE_POINTS.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,(0,On.isSurrogate)(i)&&(i=this._processSurrogate(i)),this.handler.onParseError===null||i>31&&i<127||i===On.CODE_POINTS.LINE_FEED||i===On.CODE_POINTS.CARRIAGE_RETURN||i>159&&i<64976||this._checkForProblematicCharacters(i),i)}},{key:"_checkForProblematicCharacters",value:function(i){(0,On.isControlCodePoint)(i)?this._err(HD.ERR.controlCharacterInInputStream):(0,On.isUndefinedCodePoint)(i)&&this._err(HD.ERR.noncharacterInInputStream)}},{key:"retreat",value:function(i){for(this.pos-=i;this.pos=0;n--)if(i.attrs[n].name===I)return i.attrs[n].value;return null}e.getTokenAttr=g})(mk);var Cl={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasUnescapedText=e.isNumberedHeader=e.SPECIAL_ELEMENTS=e.getTagID=e.TAG_ID=e.TAG_NAMES=e.DOCUMENT_MODE=e.ATTRS=e.NS=void 0;var g;(function(A){A.HTML="http://www.w3.org/1999/xhtml",A.MATHML="http://www.w3.org/1998/Math/MathML",A.SVG="http://www.w3.org/2000/svg",A.XLINK="http://www.w3.org/1999/xlink",A.XML="http://www.w3.org/XML/1998/namespace",A.XMLNS="http://www.w3.org/2000/xmlns/"})(g=e.NS||(e.NS={})),function(A){A.TYPE="type",A.ACTION="action",A.ENCODING="encoding",A.PROMPT="prompt",A.NAME="name",A.COLOR="color",A.FACE="face",A.SIZE="size"}(e.ATTRS||(e.ATTRS={})),function(A){A.NO_QUIRKS="no-quirks",A.QUIRKS="quirks",A.LIMITED_QUIRKS="limited-quirks"}(e.DOCUMENT_MODE||(e.DOCUMENT_MODE={}));var i;(function(A){A.A="a",A.ADDRESS="address",A.ANNOTATION_XML="annotation-xml",A.APPLET="applet",A.AREA="area",A.ARTICLE="article",A.ASIDE="aside",A.B="b",A.BASE="base",A.BASEFONT="basefont",A.BGSOUND="bgsound",A.BIG="big",A.BLOCKQUOTE="blockquote",A.BODY="body",A.BR="br",A.BUTTON="button",A.CAPTION="caption",A.CENTER="center",A.CODE="code",A.COL="col",A.COLGROUP="colgroup",A.DD="dd",A.DESC="desc",A.DETAILS="details",A.DIALOG="dialog",A.DIR="dir",A.DIV="div",A.DL="dl",A.DT="dt",A.EM="em",A.EMBED="embed",A.FIELDSET="fieldset",A.FIGCAPTION="figcaption",A.FIGURE="figure",A.FONT="font",A.FOOTER="footer",A.FOREIGN_OBJECT="foreignObject",A.FORM="form",A.FRAME="frame",A.FRAMESET="frameset",A.H1="h1",A.H2="h2",A.H3="h3",A.H4="h4",A.H5="h5",A.H6="h6",A.HEAD="head",A.HEADER="header",A.HGROUP="hgroup",A.HR="hr",A.HTML="html",A.I="i",A.IMG="img",A.IMAGE="image",A.INPUT="input",A.IFRAME="iframe",A.KEYGEN="keygen",A.LABEL="label",A.LI="li",A.LINK="link",A.LISTING="listing",A.MAIN="main",A.MALIGNMARK="malignmark",A.MARQUEE="marquee",A.MATH="math",A.MENU="menu",A.META="meta",A.MGLYPH="mglyph",A.MI="mi",A.MO="mo",A.MN="mn",A.MS="ms",A.MTEXT="mtext",A.NAV="nav",A.NOBR="nobr",A.NOFRAMES="noframes",A.NOEMBED="noembed",A.NOSCRIPT="noscript",A.OBJECT="object",A.OL="ol",A.OPTGROUP="optgroup",A.OPTION="option",A.P="p",A.PARAM="param",A.PLAINTEXT="plaintext",A.PRE="pre",A.RB="rb",A.RP="rp",A.RT="rt",A.RTC="rtc",A.RUBY="ruby",A.S="s",A.SCRIPT="script",A.SECTION="section",A.SELECT="select",A.SOURCE="source",A.SMALL="small",A.SPAN="span",A.STRIKE="strike",A.STRONG="strong",A.STYLE="style",A.SUB="sub",A.SUMMARY="summary",A.SUP="sup",A.TABLE="table",A.TBODY="tbody",A.TEMPLATE="template",A.TEXTAREA="textarea",A.TFOOT="tfoot",A.TD="td",A.TH="th",A.THEAD="thead",A.TITLE="title",A.TR="tr",A.TRACK="track",A.TT="tt",A.U="u",A.UL="ul",A.SVG="svg",A.VAR="var",A.WBR="wbr",A.XMP="xmp"})(i=e.TAG_NAMES||(e.TAG_NAMES={}));var I;(function(A){A[A.UNKNOWN=0]="UNKNOWN",A[A.A=1]="A",A[A.ADDRESS=2]="ADDRESS",A[A.ANNOTATION_XML=3]="ANNOTATION_XML",A[A.APPLET=4]="APPLET",A[A.AREA=5]="AREA",A[A.ARTICLE=6]="ARTICLE",A[A.ASIDE=7]="ASIDE",A[A.B=8]="B",A[A.BASE=9]="BASE",A[A.BASEFONT=10]="BASEFONT",A[A.BGSOUND=11]="BGSOUND",A[A.BIG=12]="BIG",A[A.BLOCKQUOTE=13]="BLOCKQUOTE",A[A.BODY=14]="BODY",A[A.BR=15]="BR",A[A.BUTTON=16]="BUTTON",A[A.CAPTION=17]="CAPTION",A[A.CENTER=18]="CENTER",A[A.CODE=19]="CODE",A[A.COL=20]="COL",A[A.COLGROUP=21]="COLGROUP",A[A.DD=22]="DD",A[A.DESC=23]="DESC",A[A.DETAILS=24]="DETAILS",A[A.DIALOG=25]="DIALOG",A[A.DIR=26]="DIR",A[A.DIV=27]="DIV",A[A.DL=28]="DL",A[A.DT=29]="DT",A[A.EM=30]="EM",A[A.EMBED=31]="EMBED",A[A.FIELDSET=32]="FIELDSET",A[A.FIGCAPTION=33]="FIGCAPTION",A[A.FIGURE=34]="FIGURE",A[A.FONT=35]="FONT",A[A.FOOTER=36]="FOOTER",A[A.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",A[A.FORM=38]="FORM",A[A.FRAME=39]="FRAME",A[A.FRAMESET=40]="FRAMESET",A[A.H1=41]="H1",A[A.H2=42]="H2",A[A.H3=43]="H3",A[A.H4=44]="H4",A[A.H5=45]="H5",A[A.H6=46]="H6",A[A.HEAD=47]="HEAD",A[A.HEADER=48]="HEADER",A[A.HGROUP=49]="HGROUP",A[A.HR=50]="HR",A[A.HTML=51]="HTML",A[A.I=52]="I",A[A.IMG=53]="IMG",A[A.IMAGE=54]="IMAGE",A[A.INPUT=55]="INPUT",A[A.IFRAME=56]="IFRAME",A[A.KEYGEN=57]="KEYGEN",A[A.LABEL=58]="LABEL",A[A.LI=59]="LI",A[A.LINK=60]="LINK",A[A.LISTING=61]="LISTING",A[A.MAIN=62]="MAIN",A[A.MALIGNMARK=63]="MALIGNMARK",A[A.MARQUEE=64]="MARQUEE",A[A.MATH=65]="MATH",A[A.MENU=66]="MENU",A[A.META=67]="META",A[A.MGLYPH=68]="MGLYPH",A[A.MI=69]="MI",A[A.MO=70]="MO",A[A.MN=71]="MN",A[A.MS=72]="MS",A[A.MTEXT=73]="MTEXT",A[A.NAV=74]="NAV",A[A.NOBR=75]="NOBR",A[A.NOFRAMES=76]="NOFRAMES",A[A.NOEMBED=77]="NOEMBED",A[A.NOSCRIPT=78]="NOSCRIPT",A[A.OBJECT=79]="OBJECT",A[A.OL=80]="OL",A[A.OPTGROUP=81]="OPTGROUP",A[A.OPTION=82]="OPTION",A[A.P=83]="P",A[A.PARAM=84]="PARAM",A[A.PLAINTEXT=85]="PLAINTEXT",A[A.PRE=86]="PRE",A[A.RB=87]="RB",A[A.RP=88]="RP",A[A.RT=89]="RT",A[A.RTC=90]="RTC",A[A.RUBY=91]="RUBY",A[A.S=92]="S",A[A.SCRIPT=93]="SCRIPT",A[A.SECTION=94]="SECTION",A[A.SELECT=95]="SELECT",A[A.SOURCE=96]="SOURCE",A[A.SMALL=97]="SMALL",A[A.SPAN=98]="SPAN",A[A.STRIKE=99]="STRIKE",A[A.STRONG=100]="STRONG",A[A.STYLE=101]="STYLE",A[A.SUB=102]="SUB",A[A.SUMMARY=103]="SUMMARY",A[A.SUP=104]="SUP",A[A.TABLE=105]="TABLE",A[A.TBODY=106]="TBODY",A[A.TEMPLATE=107]="TEMPLATE",A[A.TEXTAREA=108]="TEXTAREA",A[A.TFOOT=109]="TFOOT",A[A.TD=110]="TD",A[A.TH=111]="TH",A[A.THEAD=112]="THEAD",A[A.TITLE=113]="TITLE",A[A.TR=114]="TR",A[A.TRACK=115]="TRACK",A[A.TT=116]="TT",A[A.U=117]="U",A[A.UL=118]="UL",A[A.SVG=119]="SVG",A[A.VAR=120]="VAR",A[A.WBR=121]="WBR",A[A.XMP=122]="XMP"})(I=e.TAG_ID||(e.TAG_ID={}));const n=new Map([[i.A,I.A],[i.ADDRESS,I.ADDRESS],[i.ANNOTATION_XML,I.ANNOTATION_XML],[i.APPLET,I.APPLET],[i.AREA,I.AREA],[i.ARTICLE,I.ARTICLE],[i.ASIDE,I.ASIDE],[i.B,I.B],[i.BASE,I.BASE],[i.BASEFONT,I.BASEFONT],[i.BGSOUND,I.BGSOUND],[i.BIG,I.BIG],[i.BLOCKQUOTE,I.BLOCKQUOTE],[i.BODY,I.BODY],[i.BR,I.BR],[i.BUTTON,I.BUTTON],[i.CAPTION,I.CAPTION],[i.CENTER,I.CENTER],[i.CODE,I.CODE],[i.COL,I.COL],[i.COLGROUP,I.COLGROUP],[i.DD,I.DD],[i.DESC,I.DESC],[i.DETAILS,I.DETAILS],[i.DIALOG,I.DIALOG],[i.DIR,I.DIR],[i.DIV,I.DIV],[i.DL,I.DL],[i.DT,I.DT],[i.EM,I.EM],[i.EMBED,I.EMBED],[i.FIELDSET,I.FIELDSET],[i.FIGCAPTION,I.FIGCAPTION],[i.FIGURE,I.FIGURE],[i.FONT,I.FONT],[i.FOOTER,I.FOOTER],[i.FOREIGN_OBJECT,I.FOREIGN_OBJECT],[i.FORM,I.FORM],[i.FRAME,I.FRAME],[i.FRAMESET,I.FRAMESET],[i.H1,I.H1],[i.H2,I.H2],[i.H3,I.H3],[i.H4,I.H4],[i.H5,I.H5],[i.H6,I.H6],[i.HEAD,I.HEAD],[i.HEADER,I.HEADER],[i.HGROUP,I.HGROUP],[i.HR,I.HR],[i.HTML,I.HTML],[i.I,I.I],[i.IMG,I.IMG],[i.IMAGE,I.IMAGE],[i.INPUT,I.INPUT],[i.IFRAME,I.IFRAME],[i.KEYGEN,I.KEYGEN],[i.LABEL,I.LABEL],[i.LI,I.LI],[i.LINK,I.LINK],[i.LISTING,I.LISTING],[i.MAIN,I.MAIN],[i.MALIGNMARK,I.MALIGNMARK],[i.MARQUEE,I.MARQUEE],[i.MATH,I.MATH],[i.MENU,I.MENU],[i.META,I.META],[i.MGLYPH,I.MGLYPH],[i.MI,I.MI],[i.MO,I.MO],[i.MN,I.MN],[i.MS,I.MS],[i.MTEXT,I.MTEXT],[i.NAV,I.NAV],[i.NOBR,I.NOBR],[i.NOFRAMES,I.NOFRAMES],[i.NOEMBED,I.NOEMBED],[i.NOSCRIPT,I.NOSCRIPT],[i.OBJECT,I.OBJECT],[i.OL,I.OL],[i.OPTGROUP,I.OPTGROUP],[i.OPTION,I.OPTION],[i.P,I.P],[i.PARAM,I.PARAM],[i.PLAINTEXT,I.PLAINTEXT],[i.PRE,I.PRE],[i.RB,I.RB],[i.RP,I.RP],[i.RT,I.RT],[i.RTC,I.RTC],[i.RUBY,I.RUBY],[i.S,I.S],[i.SCRIPT,I.SCRIPT],[i.SECTION,I.SECTION],[i.SELECT,I.SELECT],[i.SOURCE,I.SOURCE],[i.SMALL,I.SMALL],[i.SPAN,I.SPAN],[i.STRIKE,I.STRIKE],[i.STRONG,I.STRONG],[i.STYLE,I.STYLE],[i.SUB,I.SUB],[i.SUMMARY,I.SUMMARY],[i.SUP,I.SUP],[i.TABLE,I.TABLE],[i.TBODY,I.TBODY],[i.TEMPLATE,I.TEMPLATE],[i.TEXTAREA,I.TEXTAREA],[i.TFOOT,I.TFOOT],[i.TD,I.TD],[i.TH,I.TH],[i.THEAD,I.THEAD],[i.TITLE,I.TITLE],[i.TR,I.TR],[i.TRACK,I.TRACK],[i.TT,I.TT],[i.U,I.U],[i.UL,I.UL],[i.SVG,I.SVG],[i.VAR,I.VAR],[i.WBR,I.WBR],[i.XMP,I.XMP]]);function r(A){var l;return(l=n.get(A))!==null&&l!==void 0?l:I.UNKNOWN}e.getTagID=r;const C=I;e.SPECIAL_ELEMENTS={[g.HTML]:new Set([C.ADDRESS,C.APPLET,C.AREA,C.ARTICLE,C.ASIDE,C.BASE,C.BASEFONT,C.BGSOUND,C.BLOCKQUOTE,C.BODY,C.BR,C.BUTTON,C.CAPTION,C.CENTER,C.COL,C.COLGROUP,C.DD,C.DETAILS,C.DIR,C.DIV,C.DL,C.DT,C.EMBED,C.FIELDSET,C.FIGCAPTION,C.FIGURE,C.FOOTER,C.FORM,C.FRAME,C.FRAMESET,C.H1,C.H2,C.H3,C.H4,C.H5,C.H6,C.HEAD,C.HEADER,C.HGROUP,C.HR,C.HTML,C.IFRAME,C.IMG,C.INPUT,C.LI,C.LINK,C.LISTING,C.MAIN,C.MARQUEE,C.MENU,C.META,C.NAV,C.NOEMBED,C.NOFRAMES,C.NOSCRIPT,C.OBJECT,C.OL,C.P,C.PARAM,C.PLAINTEXT,C.PRE,C.SCRIPT,C.SECTION,C.SELECT,C.SOURCE,C.STYLE,C.SUMMARY,C.TABLE,C.TBODY,C.TD,C.TEMPLATE,C.TEXTAREA,C.TFOOT,C.TH,C.THEAD,C.TITLE,C.TR,C.TRACK,C.UL,C.WBR,C.XMP]),[g.MATHML]:new Set([C.MI,C.MO,C.MN,C.MS,C.MTEXT,C.ANNOTATION_XML]),[g.SVG]:new Set([C.TITLE,C.FOREIGN_OBJECT,C.DESC]),[g.XLINK]:new Set,[g.XML]:new Set,[g.XMLNS]:new Set};function o(A){return A===C.H1||A===C.H2||A===C.H3||A===C.H4||A===C.H5||A===C.H6}e.isNumberedHeader=o;const a=new Set([i.STYLE,i.SCRIPT,i.XMP,i.IFRAME,i.NOEMBED,i.NOFRAMES,i.PLAINTEXT]);function s(A,l){return a.has(A)||l&&A===i.NOSCRIPT}e.hasUnescapedText=s})(Cl);function cGt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Rre(e,g){for(var i=0;i=se.CODE_POINTS.DIGIT_0&&e<=se.CODE_POINTS.DIGIT_9}function eG(e){return e>=se.CODE_POINTS.LATIN_CAPITAL_A&&e<=se.CODE_POINTS.LATIN_CAPITAL_Z}function pGt(e){return e>=se.CODE_POINTS.LATIN_SMALL_A&&e<=se.CODE_POINTS.LATIN_SMALL_Z}function Nl(e){return pGt(e)||eG(e)}function qz(e){return Nl(e)||Cv(e)}function Xwe(e){return e>=se.CODE_POINTS.LATIN_CAPITAL_A&&e<=se.CODE_POINTS.LATIN_CAPITAL_F}function Hwe(e){return e>=se.CODE_POINTS.LATIN_SMALL_A&&e<=se.CODE_POINTS.LATIN_SMALL_F}function bGt(e){return Cv(e)||Xwe(e)||Hwe(e)}function vV(e){return e+32}function Twe(e){return e===se.CODE_POINTS.SPACE||e===se.CODE_POINTS.LINE_FEED||e===se.CODE_POINTS.TABULATION||e===se.CODE_POINTS.FORM_FEED}function yGt(e){return e===se.CODE_POINTS.EQUALS_SIGN||qz(e)}function Vre(e){return Twe(e)||e===se.CODE_POINTS.SOLIDUS||e===se.CODE_POINTS.GREATER_THAN_SIGN}let ZGt=function(){function e(g,i){cGt(this,e),this.options=g,this.handler=i,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Ge.DATA,this.returnState=Ge.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new mGt.Preprocessor(i),this.currentLocation=this.getCurrentLocation(-1)}return uGt(e,[{key:"_err",value:function(i){var I,n;(n=(I=this.handler).onParseError)===null||n===void 0||n.call(I,this.preprocessor.getError(i))}},{key:"getCurrentLocation",value:function(i){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-i,startOffset:this.preprocessor.offset-i,endLine:-1,endCol:-1,endOffset:-1}:null}},{key:"_runParsingLoop",value:function(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const i=this._consume();this._ensureHibernation()||this._callState(i)}this.inLoop=!1}}},{key:"pause",value:function(){this.paused=!0}},{key:"resume",value:function(i){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||i==null||i())}},{key:"write",value:function(i,I,n){this.active=!0,this.preprocessor.write(i,I),this._runParsingLoop(),this.paused||n==null||n()}},{key:"insertHtmlAtCurrentPos",value:function(i){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(i),this._runParsingLoop()}},{key:"_ensureHibernation",value:function(){return this.preprocessor.endOfChunkHit?(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0):!1}},{key:"_consume",value:function(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}},{key:"_unconsume",value:function(i){this.consumedAfterSnapshot-=i,this.preprocessor.retreat(i)}},{key:"_reconsumeInState",value:function(i,I){this.state=i,this._callState(I)}},{key:"_advanceBy",value:function(i){this.consumedAfterSnapshot+=i;for(let I=0;I0&&this._err(et.ERR.endTagWithAttributes),i.selfClosing&&this._err(et.ERR.endTagWithTrailingSolidus),this.handler.onEndTag(i)),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentComment",value:function(i){this.prepareToken(i),this.handler.onComment(i),this.preprocessor.dropParsedChunk()}},{key:"emitCurrentDoctype",value:function(i){this.prepareToken(i),this.handler.onDoctype(i),this.preprocessor.dropParsedChunk()}},{key:"_emitCurrentCharacterToken",value:function(i){if(this.currentCharacterToken){switch(i&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=i.startLine,this.currentCharacterToken.location.endCol=i.startCol,this.currentCharacterToken.location.endOffset=i.startOffset),this.currentCharacterToken.type){case Zr.TokenType.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case Zr.TokenType.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case Zr.TokenType.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}},{key:"_emitEOFToken",value:function(){const i=this.getCurrentLocation(0);i&&(i.endLine=i.startLine,i.endCol=i.startCol,i.endOffset=i.startOffset),this._emitCurrentCharacterToken(i),this.handler.onEof({type:Zr.TokenType.EOF,location:i}),this.active=!1}},{key:"_appendCharToCurrentCharacterToken",value:function(i,I){if(this.currentCharacterToken)if(this.currentCharacterToken.type!==i)this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();else{this.currentCharacterToken.chars+=I;return}this._createCharacterToken(i,I)}},{key:"_emitCodePoint",value:function(i){const I=Twe(i)?Zr.TokenType.WHITESPACE_CHARACTER:i===se.CODE_POINTS.NULL?Zr.TokenType.NULL_CHARACTER:Zr.TokenType.CHARACTER;this._appendCharToCurrentCharacterToken(I,String.fromCodePoint(i))}},{key:"_emitChars",value:function(i){this._appendCharToCurrentCharacterToken(Zr.TokenType.CHARACTER,i)}},{key:"_matchNamedCharacterReference",value:function(i){let I=null,n=0,r=!1;for(let C=0,o=Ta.htmlDecodeTree[0];C>=0&&(C=(0,Ta.determineBranch)(Ta.htmlDecodeTree,o,C+1,i),!(C<0));i=this._consume()){n+=1,o=Ta.htmlDecodeTree[C];const a=o&Ta.BinTrieFlags.VALUE_LENGTH;if(a){const s=(a>>14)-1;if(i!==se.CODE_POINTS.SEMICOLON&&this._isCharacterReferenceInAttribute()&&yGt(this.preprocessor.peek(1))?(I=[se.CODE_POINTS.AMPERSAND],C+=s):(I=s===0?[Ta.htmlDecodeTree[C]&~Ta.BinTrieFlags.VALUE_LENGTH]:s===1?[Ta.htmlDecodeTree[++C]]:[Ta.htmlDecodeTree[++C],Ta.htmlDecodeTree[++C]],n=0,r=i!==se.CODE_POINTS.SEMICOLON),s===0){this._consume();break}}}return this._unconsume(n),r&&!this.preprocessor.endOfChunkHit&&this._err(et.ERR.missingSemicolonAfterCharacterReference),this._unconsume(1),I}},{key:"_isCharacterReferenceInAttribute",value:function(){return this.returnState===Ge.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Ge.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Ge.ATTRIBUTE_VALUE_UNQUOTED}},{key:"_flushCodePointConsumedAsCharacterReference",value:function(i){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(i):this._emitCodePoint(i)}},{key:"_callState",value:function(i){switch(this.state){case Ge.DATA:{this._stateData(i);break}case Ge.RCDATA:{this._stateRcdata(i);break}case Ge.RAWTEXT:{this._stateRawtext(i);break}case Ge.SCRIPT_DATA:{this._stateScriptData(i);break}case Ge.PLAINTEXT:{this._statePlaintext(i);break}case Ge.TAG_OPEN:{this._stateTagOpen(i);break}case Ge.END_TAG_OPEN:{this._stateEndTagOpen(i);break}case Ge.TAG_NAME:{this._stateTagName(i);break}case Ge.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(i);break}case Ge.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(i);break}case Ge.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(i);break}case Ge.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(i);break}case Ge.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(i);break}case Ge.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(i);break}case Ge.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(i);break}case Ge.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(i);break}case Ge.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(i);break}case Ge.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(i);break}case Ge.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(i);break}case Ge.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(i);break}case Ge.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(i);break}case Ge.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(i);break}case Ge.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(i);break}case Ge.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(i);break}case Ge.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(i);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(i);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(i);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(i);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(i);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(i);break}case Ge.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(i);break}case Ge.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(i);break}case Ge.ATTRIBUTE_NAME:{this._stateAttributeName(i);break}case Ge.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(i);break}case Ge.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(i);break}case Ge.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(i);break}case Ge.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(i);break}case Ge.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(i);break}case Ge.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(i);break}case Ge.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(i);break}case Ge.BOGUS_COMMENT:{this._stateBogusComment(i);break}case Ge.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(i);break}case Ge.COMMENT_START:{this._stateCommentStart(i);break}case Ge.COMMENT_START_DASH:{this._stateCommentStartDash(i);break}case Ge.COMMENT:{this._stateComment(i);break}case Ge.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(i);break}case Ge.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(i);break}case Ge.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(i);break}case Ge.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(i);break}case Ge.COMMENT_END_DASH:{this._stateCommentEndDash(i);break}case Ge.COMMENT_END:{this._stateCommentEnd(i);break}case Ge.COMMENT_END_BANG:{this._stateCommentEndBang(i);break}case Ge.DOCTYPE:{this._stateDoctype(i);break}case Ge.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(i);break}case Ge.DOCTYPE_NAME:{this._stateDoctypeName(i);break}case Ge.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(i);break}case Ge.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(i);break}case Ge.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(i);break}case Ge.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(i);break}case Ge.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(i);break}case Ge.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(i);break}case Ge.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(i);break}case Ge.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(i);break}case Ge.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(i);break}case Ge.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(i);break}case Ge.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(i);break}case Ge.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(i);break}case Ge.BOGUS_DOCTYPE:{this._stateBogusDoctype(i);break}case Ge.CDATA_SECTION:{this._stateCdataSection(i);break}case Ge.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(i);break}case Ge.CDATA_SECTION_END:{this._stateCdataSectionEnd(i);break}case Ge.CHARACTER_REFERENCE:{this._stateCharacterReference(i);break}case Ge.NAMED_CHARACTER_REFERENCE:{this._stateNamedCharacterReference(i);break}case Ge.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(i);break}case Ge.NUMERIC_CHARACTER_REFERENCE:{this._stateNumericCharacterReference(i);break}case Ge.HEXADEMICAL_CHARACTER_REFERENCE_START:{this._stateHexademicalCharacterReferenceStart(i);break}case Ge.HEXADEMICAL_CHARACTER_REFERENCE:{this._stateHexademicalCharacterReference(i);break}case Ge.DECIMAL_CHARACTER_REFERENCE:{this._stateDecimalCharacterReference(i);break}case Ge.NUMERIC_CHARACTER_REFERENCE_END:{this._stateNumericCharacterReferenceEnd(i);break}default:throw new Error("Unknown state")}}},{key:"_stateData",value:function(i){switch(i){case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.TAG_OPEN;break}case se.CODE_POINTS.AMPERSAND:{this.returnState=Ge.DATA,this.state=Ge.CHARACTER_REFERENCE;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitCodePoint(i);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateRcdata",value:function(i){switch(i){case se.CODE_POINTS.AMPERSAND:{this.returnState=Ge.RCDATA,this.state=Ge.CHARACTER_REFERENCE;break}case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.RCDATA_LESS_THAN_SIGN;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateRawtext",value:function(i){switch(i){case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.RAWTEXT_LESS_THAN_SIGN;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateScriptData",value:function(i){switch(i){case se.CODE_POINTS.LESS_THAN_SIGN:{this.state=Ge.SCRIPT_DATA_LESS_THAN_SIGN;break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_statePlaintext",value:function(i){switch(i){case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(i)}}},{key:"_stateTagOpen",value:function(i){if(Nl(i))this._createStartTagToken(),this.state=Ge.TAG_NAME,this._stateTagName(i);else switch(i){case se.CODE_POINTS.EXCLAMATION_MARK:{this.state=Ge.MARKUP_DECLARATION_OPEN;break}case se.CODE_POINTS.SOLIDUS:{this.state=Ge.END_TAG_OPEN;break}case se.CODE_POINTS.QUESTION_MARK:{this._err(et.ERR.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Ge.BOGUS_COMMENT,this._stateBogusComment(i);break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(et.ERR.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Ge.DATA,this._stateData(i)}}},{key:"_stateEndTagOpen",value:function(i){if(Nl(i))this._createEndTagToken(),this.state=Ge.TAG_NAME,this._stateTagName(i);else switch(i){case se.CODE_POINTS.GREATER_THAN_SIGN:{this._err(et.ERR.missingEndTagName),this.state=Ge.DATA;break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofBeforeTagName),this._emitChars("");break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this.state=Ge.SCRIPT_DATA_ESCAPED,this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ge.SCRIPT_DATA_ESCAPED,this._emitCodePoint(i)}}},{key:"_stateScriptDataEscapedLessThanSign",value:function(i){i===se.CODE_POINTS.SOLIDUS?this.state=Ge.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Nl(i)?(this._emitChars("<"),this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(i)):(this._emitChars("<"),this.state=Ge.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(i))}},{key:"_stateScriptDataEscapedEndTagOpen",value:function(i){Nl(i)?(this.state=Ge.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(i)):(this._emitChars("");break}case se.CODE_POINTS.NULL:{this._err(et.ERR.unexpectedNullCharacter),this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(se.REPLACEMENT_CHARACTER);break}case se.CODE_POINTS.EOF:{this._err(et.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(i)}}},{key:"_stateScriptDataDoubleEscapedLessThanSign",value:function(i){i===se.CODE_POINTS.SOLIDUS?(this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Ge.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(i))}},{key:"_stateScriptDataDoubleEscapeEnd",value:function(i){if(this.preprocessor.startsWith(se.SEQUENCES.SCRIPT,!1)&&Vre(this.preprocessor.peek(se.SEQUENCES.SCRIPT.length))){this._emitCodePoint(i);for(let I=0;I1114111)this._err(et.ERR.characterReferenceOutsideUnicodeRange),this.charRefCode=se.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,se.isSurrogate)(this.charRefCode))this._err(et.ERR.surrogateCharacterReference),this.charRefCode=se.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,se.isUndefinedCodePoint)(this.charRefCode))this._err(et.ERR.noncharacterCharacterReference);else if((0,se.isControlCodePoint)(this.charRefCode)||this.charRefCode===se.CODE_POINTS.CARRIAGE_RETURN){this._err(et.ERR.controlCharacterReference);const I=fGt.get(this.charRefCode);I!==void 0&&(this.charRefCode=I)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,i)}}]),e}();hh.Tokenizer=ZGt;var fk={};function GGt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Wre(e,g){for(var i=0;i0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(i,!0)}},{key:"replace",value:function(i,I){const n=this._indexOf(i);this.items[n]=I,n===this.stackTop&&(this.current=I)}},{key:"insertAfter",value:function(i,I,n){const r=this._indexOf(i)+1;this.items.splice(r,0,I),this.tagIDs.splice(r,0,n),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}},{key:"popUntilTagNamePopped",value:function(i){let I=this.stackTop+1;do I=this.tagIDs.lastIndexOf(i,I-1);while(I>0&&this.treeAdapter.getNamespaceURI(this.items[I])!==nt.NS.HTML);this.shortenToLength(I<0?0:I)}},{key:"shortenToLength",value:function(i){for(;this.stackTop>=i;){const I=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(I,this.stackTop=0;n--)if(i.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===I)return n;return-1}},{key:"clearBackTo",value:function(i,I){const n=this._indexOfTagNames(i,I);this.shortenToLength(n+1)}},{key:"clearBackToTableContext",value:function(){this.clearBackTo(WGt,nt.NS.HTML)}},{key:"clearBackToTableBodyContext",value:function(){this.clearBackTo(VGt,nt.NS.HTML)}},{key:"clearBackToTableRowContext",value:function(){this.clearBackTo(RGt,nt.NS.HTML)}},{key:"remove",value:function(i){const I=this._indexOf(i);I>=0&&(I===this.stackTop?this.pop():(this.items.splice(I,1),this.tagIDs.splice(I,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(i,!1)))}},{key:"tryPeekProperlyNestedBodyElement",value:function(){return this.stackTop>=1&&this.tagIDs[1]===nt.TAG_ID.BODY?this.items[1]:null}},{key:"contains",value:function(i){return this._indexOf(i)>-1}},{key:"getCommonAncestor",value:function(i){const I=this._indexOf(i)-1;return I>=0?this.items[I]:null}},{key:"isRootHtmlElementCurrent",value:function(){return this.stackTop===0&&this.tagIDs[0]===nt.TAG_ID.HTML}},{key:"hasInScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I],r=this.treeAdapter.getNamespaceURI(this.items[I]);if(n===i&&r===nt.NS.HTML)return!0;if(BV.get(n)===r)return!1}return!0}},{key:"hasNumberedHeaderInScope",value:function(){for(let i=this.stackTop;i>=0;i--){const I=this.tagIDs[i],n=this.treeAdapter.getNamespaceURI(this.items[i]);if((0,nt.isNumberedHeader)(I)&&n===nt.NS.HTML)return!0;if(BV.get(I)===n)return!1}return!0}},{key:"hasInListItemScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I],r=this.treeAdapter.getNamespaceURI(this.items[I]);if(n===i&&r===nt.NS.HTML)return!0;if((n===nt.TAG_ID.UL||n===nt.TAG_ID.OL)&&r===nt.NS.HTML||BV.get(n)===r)return!1}return!0}},{key:"hasInButtonScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I],r=this.treeAdapter.getNamespaceURI(this.items[I]);if(n===i&&r===nt.NS.HTML)return!0;if(n===nt.TAG_ID.BUTTON&&r===nt.NS.HTML||BV.get(n)===r)return!1}return!0}},{key:"hasInTableScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I];if(this.treeAdapter.getNamespaceURI(this.items[I])===nt.NS.HTML){if(n===i)return!0;if(n===nt.TAG_ID.TABLE||n===nt.TAG_ID.TEMPLATE||n===nt.TAG_ID.HTML)return!1}}return!0}},{key:"hasTableBodyContextInTableScope",value:function(){for(let i=this.stackTop;i>=0;i--){const I=this.tagIDs[i];if(this.treeAdapter.getNamespaceURI(this.items[i])===nt.NS.HTML){if(I===nt.TAG_ID.TBODY||I===nt.TAG_ID.THEAD||I===nt.TAG_ID.TFOOT)return!0;if(I===nt.TAG_ID.TABLE||I===nt.TAG_ID.HTML)return!1}}return!0}},{key:"hasInSelectScope",value:function(i){for(let I=this.stackTop;I>=0;I--){const n=this.tagIDs[I];if(this.treeAdapter.getNamespaceURI(this.items[I])===nt.NS.HTML){if(n===i)return!0;if(n!==nt.TAG_ID.OPTION&&n!==nt.TAG_ID.OPTGROUP)return!1}}return!0}},{key:"generateImpliedEndTags",value:function(){for(;Nwe.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsThoroughly",value:function(){for(;Xre.has(this.currentTagId);)this.pop()}},{key:"generateImpliedEndTagsWithExclusion",value:function(i){for(;this.currentTagId!==i&&Xre.has(this.currentTagId);)this.pop()}}]),e}();fk.OpenElementStack=HGt;var kwe={};(function(e){function g(A,l){if(!(A instanceof l))throw new TypeError("Cannot call a class as a function")}function i(A,l){for(var c=0;c[f.name,f.value]));let m=0;for(let f=0;fh.get(p.name)===p.value)&&(m+=1,m>=C&&this.entries.splice(b.idx,1))}}},{key:"insertMarker",value:function(){this.entries.unshift(a)}},{key:"pushElement",value:function(c,u){this._ensureNoahArkCondition(c),this.entries.unshift({type:o.Element,element:c,token:u})}},{key:"insertElementAfterBookmark",value:function(c,u){const d=this.entries.indexOf(this.bookmark);this.entries.splice(d,0,{type:o.Element,element:c,token:u})}},{key:"removeEntry",value:function(c){const u=this.entries.indexOf(c);u>=0&&this.entries.splice(u,1)}},{key:"clearToLastMarker",value:function(){const c=this.entries.indexOf(a);c>=0?this.entries.splice(0,c+1):this.entries.length=0}},{key:"getElementEntryInScopeWithTagName",value:function(c){const u=this.entries.find(d=>d.type===o.Marker||this.treeAdapter.getTagName(d.element)===c);return u&&u.type===o.Element?u:null}},{key:"getElementEntry",value:function(c){return this.entries.find(u=>u.type===o.Element&&u.element===c)}}]),A}();e.FormattingElementList=s})(kwe);var pk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.defaultTreeAdapter=void 0;const g=Cl;function i(I){return{nodeName:"#text",value:I,parentNode:null}}e.defaultTreeAdapter={createDocument(){return{nodeName:"#document",mode:g.DOCUMENT_MODE.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(I,n,r){return{nodeName:I,tagName:I,attrs:r,namespaceURI:n,childNodes:[],parentNode:null}},createCommentNode(I){return{nodeName:"#comment",data:I,parentNode:null}},appendChild(I,n){I.childNodes.push(n),n.parentNode=I},insertBefore(I,n,r){const C=I.childNodes.indexOf(r);I.childNodes.splice(C,0,n),n.parentNode=I},setTemplateContent(I,n){I.content=n},getTemplateContent(I){return I.content},setDocumentType(I,n,r,C){const o=I.childNodes.find(a=>a.nodeName==="#documentType");if(o)o.name=n,o.publicId=r,o.systemId=C;else{const a={nodeName:"#documentType",name:n,publicId:r,systemId:C,parentNode:null};e.defaultTreeAdapter.appendChild(I,a)}},setDocumentMode(I,n){I.mode=n},getDocumentMode(I){return I.mode},detachNode(I){if(I.parentNode){const n=I.parentNode.childNodes.indexOf(I);I.parentNode.childNodes.splice(n,1),I.parentNode=null}},insertText(I,n){if(I.childNodes.length>0){const r=I.childNodes[I.childNodes.length-1];if(e.defaultTreeAdapter.isTextNode(r)){r.value+=n;return}}e.defaultTreeAdapter.appendChild(I,i(n))},insertTextBefore(I,n,r){const C=I.childNodes[I.childNodes.indexOf(r)-1];C&&e.defaultTreeAdapter.isTextNode(C)?C.value+=n:e.defaultTreeAdapter.insertBefore(I,i(n),r)},adoptAttributes(I,n){const r=new Set(I.attrs.map(C=>C.name));for(let C=0;Ce.startsWith(i))}function FGt(e){return e.name===Ywe&&e.publicId===null&&(e.systemId===null||e.systemId===TGt)}jb.isConforming=FGt;function DGt(e){if(e.name!==Ywe)return _m.DOCUMENT_MODE.QUIRKS;const{systemId:g}=e;if(g&&g.toLowerCase()===NGt)return _m.DOCUMENT_MODE.QUIRKS;let{publicId:i}=e;if(i!==null){if(i=i.toLowerCase(),YGt.has(i))return _m.DOCUMENT_MODE.QUIRKS;let I=g===null?kGt:Kwe;if(Hre(i,I))return _m.DOCUMENT_MODE.QUIRKS;if(I=g===null?Fwe:KGt,Hre(i,I))return _m.DOCUMENT_MODE.LIMITED_QUIRKS}return _m.DOCUMENT_MODE.NO_QUIRKS}jb.getDocumentMode=DGt;var J4={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isIntegrationPoint=e.adjustTokenSVGTagName=e.adjustTokenXMLAttrs=e.adjustTokenSVGAttrs=e.adjustTokenMathMLAttrs=e.causesExit=e.SVG_TAG_NAMES_ADJUSTMENT_MAP=void 0;const g=Cl,i={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},I="definitionurl",n="definitionURL",r=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(m=>[m.toLowerCase(),m])),C=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:g.NS.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:g.NS.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:g.NS.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:g.NS.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:g.NS.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:g.NS.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:g.NS.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:g.NS.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:g.NS.XML}],["xml:space",{prefix:"xml",name:"space",namespace:g.NS.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:g.NS.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:g.NS.XMLNS}]]);e.SVG_TAG_NAMES_ADJUSTMENT_MAP=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(m=>[m.toLowerCase(),m]));const o=new Set([g.TAG_ID.B,g.TAG_ID.BIG,g.TAG_ID.BLOCKQUOTE,g.TAG_ID.BODY,g.TAG_ID.BR,g.TAG_ID.CENTER,g.TAG_ID.CODE,g.TAG_ID.DD,g.TAG_ID.DIV,g.TAG_ID.DL,g.TAG_ID.DT,g.TAG_ID.EM,g.TAG_ID.EMBED,g.TAG_ID.H1,g.TAG_ID.H2,g.TAG_ID.H3,g.TAG_ID.H4,g.TAG_ID.H5,g.TAG_ID.H6,g.TAG_ID.HEAD,g.TAG_ID.HR,g.TAG_ID.I,g.TAG_ID.IMG,g.TAG_ID.LI,g.TAG_ID.LISTING,g.TAG_ID.MENU,g.TAG_ID.META,g.TAG_ID.NOBR,g.TAG_ID.OL,g.TAG_ID.P,g.TAG_ID.PRE,g.TAG_ID.RUBY,g.TAG_ID.S,g.TAG_ID.SMALL,g.TAG_ID.SPAN,g.TAG_ID.STRONG,g.TAG_ID.STRIKE,g.TAG_ID.SUB,g.TAG_ID.SUP,g.TAG_ID.TABLE,g.TAG_ID.TT,g.TAG_ID.U,g.TAG_ID.UL,g.TAG_ID.VAR]);function a(m){const f=m.tagID;return f===g.TAG_ID.FONT&&m.attrs.some(({name:p})=>p===g.ATTRS.COLOR||p===g.ATTRS.SIZE||p===g.ATTRS.FACE)||o.has(f)}e.causesExit=a;function s(m){for(let f=0;f0&&this._setContextModes(i,I)}},{key:"onItemPop",value:function(i,I){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(i,this.currentToken),(r=(n=this.treeAdapter).onItemPop)===null||r===void 0||r.call(n,i,this.openElements.current),I){let C,o;this.openElements.stackTop===0&&this.fragmentContext?(C=this.fragmentContext,o=this.fragmentContextID):{current:C,currentTagId:o}=this.openElements,this._setContextModes(C,o)}}},{key:"_setContextModes",value:function(i,I){const n=i===this.document||this.treeAdapter.getNamespaceURI(i)===z.NS.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(I,i)}},{key:"_switchToTextParsing",value:function(i,I){this._insertElement(i,z.NS.HTML),this.tokenizer.state=I,this.originalInsertionMode=this.insertionMode,this.insertionMode=Ne.TEXT}},{key:"switchToPlaintextParsing",value:function(){this.insertionMode=Ne.TEXT,this.originalInsertionMode=Ne.IN_BODY,this.tokenizer.state=jn.TokenizerMode.PLAINTEXT}},{key:"_getAdjustedCurrentElement",value:function(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}},{key:"_findFormInFragmentContext",value:function(){let i=this.fragmentContext;for(;i;){if(this.treeAdapter.getTagName(i)===z.TAG_NAMES.FORM){this.formElement=i;break}i=this.treeAdapter.getParentNode(i)}}},{key:"_initTokenizerForFragmentParsing",value:function(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==z.NS.HTML))switch(this.fragmentContextID){case z.TAG_ID.TITLE:case z.TAG_ID.TEXTAREA:{this.tokenizer.state=jn.TokenizerMode.RCDATA;break}case z.TAG_ID.STYLE:case z.TAG_ID.XMP:case z.TAG_ID.IFRAME:case z.TAG_ID.NOEMBED:case z.TAG_ID.NOFRAMES:case z.TAG_ID.NOSCRIPT:{this.tokenizer.state=jn.TokenizerMode.RAWTEXT;break}case z.TAG_ID.SCRIPT:{this.tokenizer.state=jn.TokenizerMode.SCRIPT_DATA;break}case z.TAG_ID.PLAINTEXT:{this.tokenizer.state=jn.TokenizerMode.PLAINTEXT;break}}}},{key:"_setDocumentType",value:function(i){const I=i.name||"",n=i.publicId||"",r=i.systemId||"";if(this.treeAdapter.setDocumentType(this.document,I,n,r),i.location){const o=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));o&&this.treeAdapter.setNodeSourceCodeLocation(o,i.location)}}},{key:"_attachElementToTree",value:function(i,I){if(this.options.sourceCodeLocationInfo){const n=I&&Object.assign(Object.assign({},I),{startTag:I});this.treeAdapter.setNodeSourceCodeLocation(i,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(i);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n,i)}}},{key:"_appendElement",value:function(i,I){const n=this.treeAdapter.createElement(i.tagName,I,i.attrs);this._attachElementToTree(n,i.location)}},{key:"_insertElement",value:function(i,I){const n=this.treeAdapter.createElement(i.tagName,I,i.attrs);this._attachElementToTree(n,i.location),this.openElements.push(n,i.tagID)}},{key:"_insertFakeElement",value:function(i,I){const n=this.treeAdapter.createElement(i,z.NS.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,I)}},{key:"_insertTemplate",value:function(i){const I=this.treeAdapter.createElement(i.tagName,z.NS.HTML,i.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(I,n),this._attachElementToTree(I,i.location),this.openElements.push(I,i.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}},{key:"_insertFakeRootElement",value:function(){const i=this.treeAdapter.createElement(z.TAG_NAMES.HTML,z.NS.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(i,null),this.treeAdapter.appendChild(this.openElements.current,i),this.openElements.push(i,z.TAG_ID.HTML)}},{key:"_appendCommentNode",value:function(i,I){const n=this.treeAdapter.createCommentNode(i.data);this.treeAdapter.appendChild(I,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,i.location)}},{key:"_insertCharacters",value:function(i){let I,n;if(this._shouldFosterParentOnInsertion()?({parent:I,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(I,i.chars,n):this.treeAdapter.insertText(I,i.chars)):(I=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(I,i.chars)),!i.location)return;const r=this.treeAdapter.getChildNodes(I),C=n?r.lastIndexOf(n):r.length,o=r[C-1];if(this.treeAdapter.getNodeSourceCodeLocation(o)){const{endLine:s,endCol:A,endOffset:l}=i.location;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:s,endCol:A,endOffset:l})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,i.location)}},{key:"_adoptNodes",value:function(i,I){for(let n=this.treeAdapter.getFirstChild(i);n;n=this.treeAdapter.getFirstChild(i))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(I,n)}},{key:"_setEndLocation",value:function(i,I){if(this.treeAdapter.getNodeSourceCodeLocation(i)&&I.location){const n=I.location,r=this.treeAdapter.getTagName(i),C=I.type===VI.TokenType.END_TAG&&r===I.tagName?{endTag:Object.assign({},n),endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(i,C)}}},{key:"shouldProcessStartTagTokenInForeignContent",value:function(i){if(!this.currentNotInHTML)return!1;let I,n;return this.openElements.stackTop===0&&this.fragmentContext?(I=this.fragmentContext,n=this.fragmentContextID):{current:I,currentTagId:n}=this.openElements,i.tagID===z.TAG_ID.SVG&&this.treeAdapter.getTagName(I)===z.TAG_NAMES.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(I)===z.NS.MATHML?!1:this.tokenizer.inForeignNode||(i.tagID===z.TAG_ID.MGLYPH||i.tagID===z.TAG_ID.MALIGNMARK)&&!this._isIntegrationPoint(n,I,z.NS.HTML)}},{key:"_processToken",value:function(i){switch(i.type){case VI.TokenType.CHARACTER:{this.onCharacter(i);break}case VI.TokenType.NULL_CHARACTER:{this.onNullCharacter(i);break}case VI.TokenType.COMMENT:{this.onComment(i);break}case VI.TokenType.DOCTYPE:{this.onDoctype(i);break}case VI.TokenType.START_TAG:{this._processStartTag(i);break}case VI.TokenType.END_TAG:{this.onEndTag(i);break}case VI.TokenType.EOF:{this.onEof(i);break}case VI.TokenType.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(i);break}}}},{key:"_isIntegrationPoint",value:function(i,I,n){const r=this.treeAdapter.getNamespaceURI(I),C=this.treeAdapter.getAttrList(I);return Qa.isIntegrationPoint(i,r,C,n)}},{key:"_reconstructActiveFormattingElements",value:function(){const i=this.activeFormattingElements.entries.length;if(i){const I=this.activeFormattingElements.entries.findIndex(r=>r.type===Nre.EntryType.Marker||this.openElements.contains(r.element)),n=I<0?i-1:I-1;for(let r=n;r>=0;r--){const C=this.activeFormattingElements.entries[r];this._insertElement(C.token,this.treeAdapter.getNamespaceURI(C.element)),C.element=this.openElements.current}}}},{key:"_closeTableCell",value:function(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Ne.IN_ROW}},{key:"_closePElement",value:function(){this.openElements.generateImpliedEndTagsWithExclusion(z.TAG_ID.P),this.openElements.popUntilTagNamePopped(z.TAG_ID.P)}},{key:"_resetInsertionMode",value:function(){for(let i=this.openElements.stackTop;i>=0;i--)switch(i===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[i]){case z.TAG_ID.TR:{this.insertionMode=Ne.IN_ROW;return}case z.TAG_ID.TBODY:case z.TAG_ID.THEAD:case z.TAG_ID.TFOOT:{this.insertionMode=Ne.IN_TABLE_BODY;return}case z.TAG_ID.CAPTION:{this.insertionMode=Ne.IN_CAPTION;return}case z.TAG_ID.COLGROUP:{this.insertionMode=Ne.IN_COLUMN_GROUP;return}case z.TAG_ID.TABLE:{this.insertionMode=Ne.IN_TABLE;return}case z.TAG_ID.BODY:{this.insertionMode=Ne.IN_BODY;return}case z.TAG_ID.FRAMESET:{this.insertionMode=Ne.IN_FRAMESET;return}case z.TAG_ID.SELECT:{this._resetInsertionModeForSelect(i);return}case z.TAG_ID.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case z.TAG_ID.HTML:{this.insertionMode=this.headElement?Ne.AFTER_HEAD:Ne.BEFORE_HEAD;return}case z.TAG_ID.TD:case z.TAG_ID.TH:{if(i>0){this.insertionMode=Ne.IN_CELL;return}break}case z.TAG_ID.HEAD:{if(i>0){this.insertionMode=Ne.IN_HEAD;return}break}}this.insertionMode=Ne.IN_BODY}},{key:"_resetInsertionModeForSelect",value:function(i){if(i>0)for(let I=i-1;I>0;I--){const n=this.openElements.tagIDs[I];if(n===z.TAG_ID.TEMPLATE)break;if(n===z.TAG_ID.TABLE){this.insertionMode=Ne.IN_SELECT_IN_TABLE;return}}this.insertionMode=Ne.IN_SELECT}},{key:"_isElementCausesFosterParenting",value:function(i){return xwe.has(i)}},{key:"_shouldFosterParentOnInsertion",value:function(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}},{key:"_findFosterParentingLocation",value:function(){for(let i=this.openElements.stackTop;i>=0;i--){const I=this.openElements.items[i];switch(this.openElements.tagIDs[i]){case z.TAG_ID.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(I)===z.NS.HTML)return{parent:this.treeAdapter.getTemplateContent(I),beforeElement:null};break}case z.TAG_ID.TABLE:{const n=this.treeAdapter.getParentNode(I);return n?{parent:n,beforeElement:I}:{parent:this.openElements.items[i-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}},{key:"_fosterParentElement",value:function(i){const I=this._findFosterParentingLocation();I.beforeElement?this.treeAdapter.insertBefore(I.parent,i,I.beforeElement):this.treeAdapter.appendChild(I.parent,i)}},{key:"_isSpecialElement",value:function(i,I){const n=this.treeAdapter.getNamespaceURI(i);return z.SPECIAL_ELEMENTS[n].has(I)}},{key:"onCharacter",value:function(i){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){SBt(this,i);return}switch(this.insertionMode){case Ne.INITIAL:{lZ(this,i);break}case Ne.BEFORE_HTML:{ov(this,i);break}case Ne.BEFORE_HEAD:{av(this,i);break}case Ne.IN_HEAD:{Av(this,i);break}case Ne.IN_HEAD_NO_SCRIPT:{sv(this,i);break}case Ne.AFTER_HEAD:{lv(this,i);break}case Ne.IN_BODY:case Ne.IN_CAPTION:case Ne.IN_CELL:case Ne.IN_TEMPLATE:{Mwe(this,i);break}case Ne.TEXT:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:{this._insertCharacters(i);break}case Ne.IN_TABLE:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:{ND(this,i);break}case Ne.IN_TABLE_TEXT:{Lwe(this,i);break}case Ne.IN_COLUMN_GROUP:{OX(this,i);break}case Ne.AFTER_BODY:{_X(this,i);break}case Ne.AFTER_AFTER_BODY:{CW(this,i);break}}}},{key:"onNullCharacter",value:function(i){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){BBt(this,i);return}switch(this.insertionMode){case Ne.INITIAL:{lZ(this,i);break}case Ne.BEFORE_HTML:{ov(this,i);break}case Ne.BEFORE_HEAD:{av(this,i);break}case Ne.IN_HEAD:{Av(this,i);break}case Ne.IN_HEAD_NO_SCRIPT:{sv(this,i);break}case Ne.AFTER_HEAD:{lv(this,i);break}case Ne.TEXT:{this._insertCharacters(i);break}case Ne.IN_TABLE:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:{ND(this,i);break}case Ne.IN_COLUMN_GROUP:{OX(this,i);break}case Ne.AFTER_BODY:{_X(this,i);break}case Ne.AFTER_AFTER_BODY:{CW(this,i);break}}}},{key:"onComment",value:function(i){if(this.skipNextNewLine=!1,this.currentNotInHTML){eP(this,i);return}switch(this.insertionMode){case Ne.INITIAL:case Ne.BEFORE_HTML:case Ne.BEFORE_HEAD:case Ne.IN_HEAD:case Ne.IN_HEAD_NO_SCRIPT:case Ne.AFTER_HEAD:case Ne.IN_BODY:case Ne.IN_TABLE:case Ne.IN_CAPTION:case Ne.IN_COLUMN_GROUP:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:case Ne.IN_CELL:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:case Ne.IN_TEMPLATE:case Ne.IN_FRAMESET:case Ne.AFTER_FRAMESET:{eP(this,i);break}case Ne.IN_TABLE_TEXT:{cZ(this,i);break}case Ne.AFTER_BODY:{ivt(this,i);break}case Ne.AFTER_AFTER_BODY:case Ne.AFTER_AFTER_FRAMESET:{Ivt(this,i);break}}}},{key:"onDoctype",value:function(i){switch(this.skipNextNewLine=!1,this.insertionMode){case Ne.INITIAL:{nvt(this,i);break}case Ne.BEFORE_HEAD:case Ne.IN_HEAD:case Ne.IN_HEAD_NO_SCRIPT:case Ne.AFTER_HEAD:{this._err(i,fn.ERR.misplacedDoctype);break}case Ne.IN_TABLE_TEXT:{cZ(this,i);break}}}},{key:"onStartTag",value:function(i){this.skipNextNewLine=!1,this.currentToken=i,this._processStartTag(i),i.selfClosing&&!i.ackSelfClosing&&this._err(i,fn.ERR.nonVoidHtmlElementStartTagWithTrailingSolidus)}},{key:"_processStartTag",value:function(i){this.shouldProcessStartTagTokenInForeignContent(i)?wBt(this,i):this._startTagOutsideForeignContent(i)}},{key:"_startTagOutsideForeignContent",value:function(i){switch(this.insertionMode){case Ne.INITIAL:{lZ(this,i);break}case Ne.BEFORE_HTML:{rvt(this,i);break}case Ne.BEFORE_HEAD:{ovt(this,i);break}case Ne.IN_HEAD:{va(this,i);break}case Ne.IN_HEAD_NO_SCRIPT:{svt(this,i);break}case Ne.AFTER_HEAD:{cvt(this,i);break}case Ne.IN_BODY:{Pn(this,i);break}case Ne.IN_TABLE:{$b(this,i);break}case Ne.IN_TABLE_TEXT:{cZ(this,i);break}case Ne.IN_CAPTION:{aBt(this,i);break}case Ne.IN_COLUMN_GROUP:{L4(this,i);break}case Ne.IN_TABLE_BODY:{Zk(this,i);break}case Ne.IN_ROW:{Gk(this,i);break}case Ne.IN_CELL:{lBt(this,i);break}case Ne.IN_SELECT:{jwe(this,i);break}case Ne.IN_SELECT_IN_TABLE:{uBt(this,i);break}case Ne.IN_TEMPLATE:{hBt(this,i);break}case Ne.AFTER_BODY:{fBt(this,i);break}case Ne.IN_FRAMESET:{pBt(this,i);break}case Ne.AFTER_FRAMESET:{yBt(this,i);break}case Ne.AFTER_AFTER_BODY:{GBt(this,i);break}case Ne.AFTER_AFTER_FRAMESET:{vBt(this,i);break}}}},{key:"onEndTag",value:function(i){this.skipNextNewLine=!1,this.currentToken=i,this.currentNotInHTML?RBt(this,i):this._endTagOutsideForeignContent(i)}},{key:"_endTagOutsideForeignContent",value:function(i){switch(this.insertionMode){case Ne.INITIAL:{lZ(this,i);break}case Ne.BEFORE_HTML:{Cvt(this,i);break}case Ne.BEFORE_HEAD:{avt(this,i);break}case Ne.IN_HEAD:{Avt(this,i);break}case Ne.IN_HEAD_NO_SCRIPT:{lvt(this,i);break}case Ne.AFTER_HEAD:{uvt(this,i);break}case Ne.IN_BODY:{yk(this,i);break}case Ne.TEXT:{qvt(this,i);break}case Ne.IN_TABLE:{UB(this,i);break}case Ne.IN_TABLE_TEXT:{cZ(this,i);break}case Ne.IN_CAPTION:{ABt(this,i);break}case Ne.IN_COLUMN_GROUP:{sBt(this,i);break}case Ne.IN_TABLE_BODY:{tP(this,i);break}case Ne.IN_ROW:{Qwe(this,i);break}case Ne.IN_CELL:{cBt(this,i);break}case Ne.IN_SELECT:{$we(this,i);break}case Ne.IN_SELECT_IN_TABLE:{dBt(this,i);break}case Ne.IN_TEMPLATE:{mBt(this,i);break}case Ne.AFTER_BODY:{eRe(this,i);break}case Ne.IN_FRAMESET:{bBt(this,i);break}case Ne.AFTER_FRAMESET:{ZBt(this,i);break}case Ne.AFTER_AFTER_BODY:{CW(this,i);break}}}},{key:"onEof",value:function(i){switch(this.insertionMode){case Ne.INITIAL:{lZ(this,i);break}case Ne.BEFORE_HTML:{ov(this,i);break}case Ne.BEFORE_HEAD:{av(this,i);break}case Ne.IN_HEAD:{Av(this,i);break}case Ne.IN_HEAD_NO_SCRIPT:{sv(this,i);break}case Ne.AFTER_HEAD:{lv(this,i);break}case Ne.IN_BODY:case Ne.IN_TABLE:case Ne.IN_CAPTION:case Ne.IN_COLUMN_GROUP:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:case Ne.IN_CELL:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:{Owe(this,i);break}case Ne.TEXT:{eBt(this,i);break}case Ne.IN_TABLE_TEXT:{cZ(this,i);break}case Ne.IN_TEMPLATE:{qwe(this,i);break}case Ne.AFTER_BODY:case Ne.IN_FRAMESET:case Ne.AFTER_FRAMESET:case Ne.AFTER_AFTER_BODY:case Ne.AFTER_AFTER_FRAMESET:{_4(this,i);break}}}},{key:"onWhitespaceCharacter",value:function(i){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,i.chars.charCodeAt(0)===Dwe.CODE_POINTS.LINE_FEED)){if(i.chars.length===1)return;i.chars=i.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(i);return}switch(this.insertionMode){case Ne.IN_HEAD:case Ne.IN_HEAD_NO_SCRIPT:case Ne.AFTER_HEAD:case Ne.TEXT:case Ne.IN_COLUMN_GROUP:case Ne.IN_SELECT:case Ne.IN_SELECT_IN_TABLE:case Ne.IN_FRAMESET:case Ne.AFTER_FRAMESET:{this._insertCharacters(i);break}case Ne.IN_BODY:case Ne.IN_CAPTION:case Ne.IN_CELL:case Ne.IN_TEMPLATE:case Ne.AFTER_BODY:case Ne.AFTER_AFTER_BODY:case Ne.AFTER_AFTER_FRAMESET:{Ewe(this,i);break}case Ne.IN_TABLE:case Ne.IN_TABLE_BODY:case Ne.IN_ROW:{ND(this,i);break}case Ne.IN_TABLE_TEXT:{_we(this,i);break}}}}],[{key:"parse",value:function(i,I){const n=new this(I);return n.tokenizer.write(i,!0),n.document}},{key:"getFragmentParser",value:function(i,I){const n=Object.assign(Object.assign({},Yre),I);i??(i=n.treeAdapter.createElement(z.TAG_NAMES.TEMPLATE,z.NS.HTML,[]));const r=n.treeAdapter.createElement("documentmock",z.NS.HTML,[]),C=new this(n,r,i);return C.fragmentContextID===z.TAG_ID.TEMPLATE&&C.tmplInsertionModeStack.unshift(Ne.IN_TEMPLATE),C._initTokenizerForFragmentParsing(),C._insertFakeRootElement(),C._resetInsertionMode(),C._findFormInFragmentContext(),C}}]),e}();LB.Parser=QGt;function jGt(e,g){let i=e.activeFormattingElements.getElementEntryInScopeWithTagName(g.tagName);return i?e.openElements.contains(i.element)?e.openElements.hasInScope(g.tagID)||(i=null):(e.activeFormattingElements.removeEntry(i),i=null):Jwe(e,g),i}function $Gt(e,g){let i=null,I=e.openElements.stackTop;for(;I>=0;I--){const n=e.openElements.items[I];if(n===g.element)break;e._isSpecialElement(n,e.openElements.tagIDs[I])&&(i=n)}return i||(e.openElements.shortenToLength(I<0?0:I),e.activeFormattingElements.removeEntry(g)),i}function qGt(e,g,i){let I=g,n=e.openElements.getCommonAncestor(g);for(let r=0,C=n;C!==i;r++,C=n){n=e.openElements.getCommonAncestor(C);const o=e.activeFormattingElements.getElementEntry(C),a=o&&r>=LGt;!o||a?(a&&e.activeFormattingElements.removeEntry(o),e.openElements.remove(C)):(C=evt(e,o),I===g&&(e.activeFormattingElements.bookmark=o),e.treeAdapter.detachNode(I),e.treeAdapter.appendChild(C,I),I=C)}return I}function evt(e,g){const i=e.treeAdapter.getNamespaceURI(g.element),I=e.treeAdapter.createElement(g.token.tagName,i,g.token.attrs);return e.openElements.replace(g.element,I),g.element=I,I}function tvt(e,g,i){const I=e.treeAdapter.getTagName(g),n=(0,z.getTagID)(I);if(e._isElementCausesFosterParenting(n))e._fosterParentElement(i);else{const r=e.treeAdapter.getNamespaceURI(g);n===z.TAG_ID.TEMPLATE&&r===z.NS.HTML&&(g=e.treeAdapter.getTemplateContent(g)),e.treeAdapter.appendChild(g,i)}}function gvt(e,g,i){const I=e.treeAdapter.getNamespaceURI(i.element),{token:n}=i,r=e.treeAdapter.createElement(n.tagName,I,n.attrs);e._adoptNodes(g,r),e.treeAdapter.appendChild(g,r),e.activeFormattingElements.insertElementAfterBookmark(r,n),e.activeFormattingElements.removeEntry(i),e.openElements.remove(i.element),e.openElements.insertAfter(g,r,n.tagID)}function O4(e,g){for(let i=0;i<_Gt;i++){const I=jGt(e,g);if(!I)break;const n=$Gt(e,I);if(!n)break;e.activeFormattingElements.bookmark=I;const r=qGt(e,n,I.element),C=e.openElements.getCommonAncestor(I.element);e.treeAdapter.detachNode(r),C&&tvt(e,C,r),gvt(e,n,I)}}function eP(e,g){e._appendCommentNode(g,e.openElements.currentTmplContentOrNode)}function ivt(e,g){e._appendCommentNode(g,e.openElements.items[0])}function Ivt(e,g){e._appendCommentNode(g,e.document)}function _4(e,g){if(e.stopped=!0,g.location){const i=e.fragmentContext?0:2;for(let I=e.openElements.stackTop;I>=i;I--)e._setEndLocation(e.openElements.items[I],g);if(!e.fragmentContext&&e.openElements.stackTop>=0){const I=e.openElements.items[0],n=e.treeAdapter.getNodeSourceCodeLocation(I);if(n&&!n.endTag&&(e._setEndLocation(I,g),e.openElements.stackTop>=1)){const r=e.openElements.items[1],C=e.treeAdapter.getNodeSourceCodeLocation(r);C&&!C.endTag&&e._setEndLocation(r,g)}}}}function nvt(e,g){e._setDocumentType(g);const i=g.forceQuirks?z.DOCUMENT_MODE.QUIRKS:kre.getDocumentMode(g);kre.isConforming(g)||e._err(g,fn.ERR.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,i),e.insertionMode=Ne.BEFORE_HTML}function lZ(e,g){e._err(g,fn.ERR.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,z.DOCUMENT_MODE.QUIRKS),e.insertionMode=Ne.BEFORE_HTML,e._processToken(g)}function rvt(e,g){g.tagID===z.TAG_ID.HTML?(e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.BEFORE_HEAD):ov(e,g)}function Cvt(e,g){const i=g.tagID;(i===z.TAG_ID.HTML||i===z.TAG_ID.HEAD||i===z.TAG_ID.BODY||i===z.TAG_ID.BR)&&ov(e,g)}function ov(e,g){e._insertFakeRootElement(),e.insertionMode=Ne.BEFORE_HEAD,e._processToken(g)}function ovt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.HEAD:{e._insertElement(g,z.NS.HTML),e.headElement=e.openElements.current,e.insertionMode=Ne.IN_HEAD;break}default:av(e,g)}}function avt(e,g){const i=g.tagID;i===z.TAG_ID.HEAD||i===z.TAG_ID.BODY||i===z.TAG_ID.HTML||i===z.TAG_ID.BR?av(e,g):e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}function av(e,g){e._insertFakeElement(z.TAG_NAMES.HEAD,z.TAG_ID.HEAD),e.headElement=e.openElements.current,e.insertionMode=Ne.IN_HEAD,e._processToken(g)}function va(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.BASE:case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.LINK:case z.TAG_ID.META:{e._appendElement(g,z.NS.HTML),g.ackSelfClosing=!0;break}case z.TAG_ID.TITLE:{e._switchToTextParsing(g,jn.TokenizerMode.RCDATA);break}case z.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT):(e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_HEAD_NO_SCRIPT);break}case z.TAG_ID.NOFRAMES:case z.TAG_ID.STYLE:{e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT);break}case z.TAG_ID.SCRIPT:{e._switchToTextParsing(g,jn.TokenizerMode.SCRIPT_DATA);break}case z.TAG_ID.TEMPLATE:{e._insertTemplate(g),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Ne.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Ne.IN_TEMPLATE);break}case z.TAG_ID.HEAD:{e._err(g,fn.ERR.misplacedStartTagForHeadElement);break}default:Av(e,g)}}function Avt(e,g){switch(g.tagID){case z.TAG_ID.HEAD:{e.openElements.pop(),e.insertionMode=Ne.AFTER_HEAD;break}case z.TAG_ID.BODY:case z.TAG_ID.BR:case z.TAG_ID.HTML:{Av(e,g);break}case z.TAG_ID.TEMPLATE:{sm(e,g);break}default:e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}}function sm(e,g){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==z.TAG_ID.TEMPLATE&&e._err(g,fn.ERR.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(z.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}function Av(e,g){e.openElements.pop(),e.insertionMode=Ne.AFTER_HEAD,e._processToken(g)}function svt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.HEAD:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.NOFRAMES:case z.TAG_ID.STYLE:{va(e,g);break}case z.TAG_ID.NOSCRIPT:{e._err(g,fn.ERR.nestedNoscriptInHead);break}default:sv(e,g)}}function lvt(e,g){switch(g.tagID){case z.TAG_ID.NOSCRIPT:{e.openElements.pop(),e.insertionMode=Ne.IN_HEAD;break}case z.TAG_ID.BR:{sv(e,g);break}default:e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}}function sv(e,g){const i=g.type===VI.TokenType.EOF?fn.ERR.openElementsLeftAfterEof:fn.ERR.disallowedContentInNoscriptInHead;e._err(g,i),e.openElements.pop(),e.insertionMode=Ne.IN_HEAD,e._processToken(g)}function cvt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.BODY:{e._insertElement(g,z.NS.HTML),e.framesetOk=!1,e.insertionMode=Ne.IN_BODY;break}case z.TAG_ID.FRAMESET:{e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_FRAMESET;break}case z.TAG_ID.BASE:case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.NOFRAMES:case z.TAG_ID.SCRIPT:case z.TAG_ID.STYLE:case z.TAG_ID.TEMPLATE:case z.TAG_ID.TITLE:{e._err(g,fn.ERR.abandonedHeadElementChild),e.openElements.push(e.headElement,z.TAG_ID.HEAD),va(e,g),e.openElements.remove(e.headElement);break}case z.TAG_ID.HEAD:{e._err(g,fn.ERR.misplacedStartTagForHeadElement);break}default:lv(e,g)}}function uvt(e,g){switch(g.tagID){case z.TAG_ID.BODY:case z.TAG_ID.HTML:case z.TAG_ID.BR:{lv(e,g);break}case z.TAG_ID.TEMPLATE:{sm(e,g);break}default:e._err(g,fn.ERR.endTagWithoutMatchingOpenElement)}}function lv(e,g){e._insertFakeElement(z.TAG_NAMES.BODY,z.TAG_ID.BODY),e.insertionMode=Ne.IN_BODY,bk(e,g)}function bk(e,g){switch(g.type){case VI.TokenType.CHARACTER:{Mwe(e,g);break}case VI.TokenType.WHITESPACE_CHARACTER:{Ewe(e,g);break}case VI.TokenType.COMMENT:{eP(e,g);break}case VI.TokenType.START_TAG:{Pn(e,g);break}case VI.TokenType.END_TAG:{yk(e,g);break}case VI.TokenType.EOF:{Owe(e,g);break}}}function Ewe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g)}function Mwe(e,g){e._reconstructActiveFormattingElements(),e._insertCharacters(g),e.framesetOk=!1}function dvt(e,g){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],g.attrs)}function hvt(e,g){const i=e.openElements.tryPeekProperlyNestedBodyElement();i&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(i,g.attrs))}function mvt(e,g){const i=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&i&&(e.treeAdapter.detachNode(i),e.openElements.popAllUpToHtmlElement(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_FRAMESET)}function fvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML)}function pvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),(0,z.isNumberedHeader)(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(g,z.NS.HTML)}function bvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function yvt(e,g){const i=e.openElements.tmplCount>0;(!e.formElement||i)&&(e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),i||(e.formElement=e.openElements.current))}function Zvt(e,g){e.framesetOk=!1;const i=g.tagID;for(let I=e.openElements.stackTop;I>=0;I--){const n=e.openElements.tagIDs[I];if(i===z.TAG_ID.LI&&n===z.TAG_ID.LI||(i===z.TAG_ID.DD||i===z.TAG_ID.DT)&&(n===z.TAG_ID.DD||n===z.TAG_ID.DT)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n);break}if(n!==z.TAG_ID.ADDRESS&&n!==z.TAG_ID.DIV&&n!==z.TAG_ID.P&&e._isSpecialElement(e.openElements.items[I],n))break}e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML)}function Gvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),e.tokenizer.state=jn.TokenizerMode.PLAINTEXT}function vvt(e,g){e.openElements.hasInScope(z.TAG_ID.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(z.TAG_ID.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.framesetOk=!1}function Bvt(e,g){const i=e.activeFormattingElements.getElementEntryInScopeWithTagName(z.TAG_NAMES.A);i&&(O4(e,g),e.openElements.remove(i.element),e.activeFormattingElements.removeEntry(i)),e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function Svt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function wvt(e,g){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(z.TAG_ID.NOBR)&&(O4(e,g),e._reconstructActiveFormattingElements()),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,g)}function Rvt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Vvt(e,g){e.treeAdapter.getDocumentMode(e.document)!==z.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._insertElement(g,z.NS.HTML),e.framesetOk=!1,e.insertionMode=Ne.IN_TABLE}function zwe(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,z.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function Pwe(e){const g=(0,VI.getTokenAttr)(e,z.ATTRS.TYPE);return g!=null&&g.toLowerCase()===OGt}function Wvt(e,g){e._reconstructActiveFormattingElements(),e._appendElement(g,z.NS.HTML),Pwe(g)||(e.framesetOk=!1),g.ackSelfClosing=!0}function Xvt(e,g){e._appendElement(g,z.NS.HTML),g.ackSelfClosing=!0}function Hvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._appendElement(g,z.NS.HTML),e.framesetOk=!1,g.ackSelfClosing=!0}function Tvt(e,g){g.tagName=z.TAG_NAMES.IMG,g.tagID=z.TAG_ID.IMG,zwe(e,g)}function Nvt(e,g){e._insertElement(g,z.NS.HTML),e.skipNextNewLine=!0,e.tokenizer.state=jn.TokenizerMode.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Ne.TEXT}function kvt(e,g){e.openElements.hasInButtonScope(z.TAG_ID.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT)}function Yvt(e,g){e.framesetOk=!1,e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT)}function Kre(e,g){e._switchToTextParsing(g,jn.TokenizerMode.RAWTEXT)}function Kvt(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Ne.IN_TABLE||e.insertionMode===Ne.IN_CAPTION||e.insertionMode===Ne.IN_TABLE_BODY||e.insertionMode===Ne.IN_ROW||e.insertionMode===Ne.IN_CELL?Ne.IN_SELECT_IN_TABLE:Ne.IN_SELECT}function Fvt(e,g){e.openElements.currentTagId===z.TAG_ID.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML)}function Dvt(e,g){e.openElements.hasInScope(z.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(g,z.NS.HTML)}function xvt(e,g){e.openElements.hasInScope(z.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(z.TAG_ID.RTC),e._insertElement(g,z.NS.HTML)}function Evt(e,g){e._reconstructActiveFormattingElements(),Qa.adjustTokenMathMLAttrs(g),Qa.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,z.NS.MATHML):e._insertElement(g,z.NS.MATHML),g.ackSelfClosing=!0}function Mvt(e,g){e._reconstructActiveFormattingElements(),Qa.adjustTokenSVGAttrs(g),Qa.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,z.NS.SVG):e._insertElement(g,z.NS.SVG),g.ackSelfClosing=!0}function Fre(e,g){e._reconstructActiveFormattingElements(),e._insertElement(g,z.NS.HTML)}function Pn(e,g){switch(g.tagID){case z.TAG_ID.I:case z.TAG_ID.S:case z.TAG_ID.B:case z.TAG_ID.U:case z.TAG_ID.EM:case z.TAG_ID.TT:case z.TAG_ID.BIG:case z.TAG_ID.CODE:case z.TAG_ID.FONT:case z.TAG_ID.SMALL:case z.TAG_ID.STRIKE:case z.TAG_ID.STRONG:{Svt(e,g);break}case z.TAG_ID.A:{Bvt(e,g);break}case z.TAG_ID.H1:case z.TAG_ID.H2:case z.TAG_ID.H3:case z.TAG_ID.H4:case z.TAG_ID.H5:case z.TAG_ID.H6:{pvt(e,g);break}case z.TAG_ID.P:case z.TAG_ID.DL:case z.TAG_ID.OL:case z.TAG_ID.UL:case z.TAG_ID.DIV:case z.TAG_ID.DIR:case z.TAG_ID.NAV:case z.TAG_ID.MAIN:case z.TAG_ID.MENU:case z.TAG_ID.ASIDE:case z.TAG_ID.CENTER:case z.TAG_ID.FIGURE:case z.TAG_ID.FOOTER:case z.TAG_ID.HEADER:case z.TAG_ID.HGROUP:case z.TAG_ID.DIALOG:case z.TAG_ID.DETAILS:case z.TAG_ID.ADDRESS:case z.TAG_ID.ARTICLE:case z.TAG_ID.SECTION:case z.TAG_ID.SUMMARY:case z.TAG_ID.FIELDSET:case z.TAG_ID.BLOCKQUOTE:case z.TAG_ID.FIGCAPTION:{fvt(e,g);break}case z.TAG_ID.LI:case z.TAG_ID.DD:case z.TAG_ID.DT:{Zvt(e,g);break}case z.TAG_ID.BR:case z.TAG_ID.IMG:case z.TAG_ID.WBR:case z.TAG_ID.AREA:case z.TAG_ID.EMBED:case z.TAG_ID.KEYGEN:{zwe(e,g);break}case z.TAG_ID.HR:{Hvt(e,g);break}case z.TAG_ID.RB:case z.TAG_ID.RTC:{Dvt(e,g);break}case z.TAG_ID.RT:case z.TAG_ID.RP:{xvt(e,g);break}case z.TAG_ID.PRE:case z.TAG_ID.LISTING:{bvt(e,g);break}case z.TAG_ID.XMP:{kvt(e,g);break}case z.TAG_ID.SVG:{Mvt(e,g);break}case z.TAG_ID.HTML:{dvt(e,g);break}case z.TAG_ID.BASE:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.STYLE:case z.TAG_ID.TITLE:case z.TAG_ID.SCRIPT:case z.TAG_ID.BGSOUND:case z.TAG_ID.BASEFONT:case z.TAG_ID.TEMPLATE:{va(e,g);break}case z.TAG_ID.BODY:{hvt(e,g);break}case z.TAG_ID.FORM:{yvt(e,g);break}case z.TAG_ID.NOBR:{wvt(e,g);break}case z.TAG_ID.MATH:{Evt(e,g);break}case z.TAG_ID.TABLE:{Vvt(e,g);break}case z.TAG_ID.INPUT:{Wvt(e,g);break}case z.TAG_ID.PARAM:case z.TAG_ID.TRACK:case z.TAG_ID.SOURCE:{Xvt(e,g);break}case z.TAG_ID.IMAGE:{Tvt(e,g);break}case z.TAG_ID.BUTTON:{vvt(e,g);break}case z.TAG_ID.APPLET:case z.TAG_ID.OBJECT:case z.TAG_ID.MARQUEE:{Rvt(e,g);break}case z.TAG_ID.IFRAME:{Yvt(e,g);break}case z.TAG_ID.SELECT:{Kvt(e,g);break}case z.TAG_ID.OPTION:case z.TAG_ID.OPTGROUP:{Fvt(e,g);break}case z.TAG_ID.NOEMBED:{Kre(e,g);break}case z.TAG_ID.FRAMESET:{mvt(e,g);break}case z.TAG_ID.TEXTAREA:{Nvt(e,g);break}case z.TAG_ID.NOSCRIPT:{e.options.scriptingEnabled?Kre(e,g):Fre(e,g);break}case z.TAG_ID.PLAINTEXT:{Gvt(e,g);break}case z.TAG_ID.COL:case z.TAG_ID.TH:case z.TAG_ID.TD:case z.TAG_ID.TR:case z.TAG_ID.HEAD:case z.TAG_ID.FRAME:case z.TAG_ID.TBODY:case z.TAG_ID.TFOOT:case z.TAG_ID.THEAD:case z.TAG_ID.CAPTION:case z.TAG_ID.COLGROUP:break;default:Fre(e,g)}}function zvt(e,g){if(e.openElements.hasInScope(z.TAG_ID.BODY)&&(e.insertionMode=Ne.AFTER_BODY,e.options.sourceCodeLocationInfo)){const i=e.openElements.tryPeekProperlyNestedBodyElement();i&&e._setEndLocation(i,g)}}function Pvt(e,g){e.openElements.hasInScope(z.TAG_ID.BODY)&&(e.insertionMode=Ne.AFTER_BODY,eRe(e,g))}function Jvt(e,g){const i=g.tagID;e.openElements.hasInScope(i)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i))}function Ovt(e){const g=e.openElements.tmplCount>0,{formElement:i}=e;g||(e.formElement=null),(i||g)&&e.openElements.hasInScope(z.TAG_ID.FORM)&&(e.openElements.generateImpliedEndTags(),g?e.openElements.popUntilTagNamePopped(z.TAG_ID.FORM):i&&e.openElements.remove(i))}function _vt(e){e.openElements.hasInButtonScope(z.TAG_ID.P)||e._insertFakeElement(z.TAG_NAMES.P,z.TAG_ID.P),e._closePElement()}function Lvt(e){e.openElements.hasInListItemScope(z.TAG_ID.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(z.TAG_ID.LI),e.openElements.popUntilTagNamePopped(z.TAG_ID.LI))}function Uvt(e,g){const i=g.tagID;e.openElements.hasInScope(i)&&(e.openElements.generateImpliedEndTagsWithExclusion(i),e.openElements.popUntilTagNamePopped(i))}function Qvt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function jvt(e,g){const i=g.tagID;e.openElements.hasInScope(i)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i),e.activeFormattingElements.clearToLastMarker())}function $vt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(z.TAG_NAMES.BR,z.TAG_ID.BR),e.openElements.pop(),e.framesetOk=!1}function Jwe(e,g){const i=g.tagName,I=g.tagID;for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n],C=e.openElements.tagIDs[n];if(I===C&&(I!==z.TAG_ID.UNKNOWN||e.treeAdapter.getTagName(r)===i)){e.openElements.generateImpliedEndTagsWithExclusion(I),e.openElements.stackTop>=n&&e.openElements.shortenToLength(n);break}if(e._isSpecialElement(r,C))break}}function yk(e,g){switch(g.tagID){case z.TAG_ID.A:case z.TAG_ID.B:case z.TAG_ID.I:case z.TAG_ID.S:case z.TAG_ID.U:case z.TAG_ID.EM:case z.TAG_ID.TT:case z.TAG_ID.BIG:case z.TAG_ID.CODE:case z.TAG_ID.FONT:case z.TAG_ID.NOBR:case z.TAG_ID.SMALL:case z.TAG_ID.STRIKE:case z.TAG_ID.STRONG:{O4(e,g);break}case z.TAG_ID.P:{_vt(e);break}case z.TAG_ID.DL:case z.TAG_ID.UL:case z.TAG_ID.OL:case z.TAG_ID.DIR:case z.TAG_ID.DIV:case z.TAG_ID.NAV:case z.TAG_ID.PRE:case z.TAG_ID.MAIN:case z.TAG_ID.MENU:case z.TAG_ID.ASIDE:case z.TAG_ID.BUTTON:case z.TAG_ID.CENTER:case z.TAG_ID.FIGURE:case z.TAG_ID.FOOTER:case z.TAG_ID.HEADER:case z.TAG_ID.HGROUP:case z.TAG_ID.DIALOG:case z.TAG_ID.ADDRESS:case z.TAG_ID.ARTICLE:case z.TAG_ID.DETAILS:case z.TAG_ID.SECTION:case z.TAG_ID.SUMMARY:case z.TAG_ID.LISTING:case z.TAG_ID.FIELDSET:case z.TAG_ID.BLOCKQUOTE:case z.TAG_ID.FIGCAPTION:{Jvt(e,g);break}case z.TAG_ID.LI:{Lvt(e);break}case z.TAG_ID.DD:case z.TAG_ID.DT:{Uvt(e,g);break}case z.TAG_ID.H1:case z.TAG_ID.H2:case z.TAG_ID.H3:case z.TAG_ID.H4:case z.TAG_ID.H5:case z.TAG_ID.H6:{Qvt(e);break}case z.TAG_ID.BR:{$vt(e);break}case z.TAG_ID.BODY:{zvt(e,g);break}case z.TAG_ID.HTML:{Pvt(e,g);break}case z.TAG_ID.FORM:{Ovt(e);break}case z.TAG_ID.APPLET:case z.TAG_ID.OBJECT:case z.TAG_ID.MARQUEE:{jvt(e,g);break}case z.TAG_ID.TEMPLATE:{sm(e,g);break}default:Jwe(e,g)}}function Owe(e,g){e.tmplInsertionModeStack.length>0?qwe(e,g):_4(e,g)}function qvt(e,g){var i;g.tagID===z.TAG_ID.SCRIPT&&((i=e.scriptHandler)===null||i===void 0||i.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function eBt(e,g){e._err(g,fn.ERR.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(g)}function ND(e,g){if(xwe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Ne.IN_TABLE_TEXT,g.type){case VI.TokenType.CHARACTER:{Lwe(e,g);break}case VI.TokenType.WHITESPACE_CHARACTER:{_we(e,g);break}}else dw(e,g)}function tBt(e,g){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_CAPTION}function gBt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_COLUMN_GROUP}function iBt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(z.TAG_NAMES.COLGROUP,z.TAG_ID.COLGROUP),e.insertionMode=Ne.IN_COLUMN_GROUP,L4(e,g)}function IBt(e,g){e.openElements.clearBackToTableContext(),e._insertElement(g,z.NS.HTML),e.insertionMode=Ne.IN_TABLE_BODY}function nBt(e,g){e.openElements.clearBackToTableContext(),e._insertFakeElement(z.TAG_NAMES.TBODY,z.TAG_ID.TBODY),e.insertionMode=Ne.IN_TABLE_BODY,Zk(e,g)}function rBt(e,g){e.openElements.hasInTableScope(z.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.TABLE),e._resetInsertionMode(),e._processStartTag(g))}function CBt(e,g){Pwe(g)?e._appendElement(g,z.NS.HTML):dw(e,g),g.ackSelfClosing=!0}function oBt(e,g){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(g,z.NS.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function $b(e,g){switch(g.tagID){case z.TAG_ID.TD:case z.TAG_ID.TH:case z.TAG_ID.TR:{nBt(e,g);break}case z.TAG_ID.STYLE:case z.TAG_ID.SCRIPT:case z.TAG_ID.TEMPLATE:{va(e,g);break}case z.TAG_ID.COL:{iBt(e,g);break}case z.TAG_ID.FORM:{oBt(e,g);break}case z.TAG_ID.TABLE:{rBt(e,g);break}case z.TAG_ID.TBODY:case z.TAG_ID.TFOOT:case z.TAG_ID.THEAD:{IBt(e,g);break}case z.TAG_ID.INPUT:{CBt(e,g);break}case z.TAG_ID.CAPTION:{tBt(e,g);break}case z.TAG_ID.COLGROUP:{gBt(e,g);break}default:dw(e,g)}}function UB(e,g){switch(g.tagID){case z.TAG_ID.TABLE:{e.openElements.hasInTableScope(z.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.TABLE),e._resetInsertionMode());break}case z.TAG_ID.TEMPLATE:{sm(e,g);break}case z.TAG_ID.BODY:case z.TAG_ID.CAPTION:case z.TAG_ID.COL:case z.TAG_ID.COLGROUP:case z.TAG_ID.HTML:case z.TAG_ID.TBODY:case z.TAG_ID.TD:case z.TAG_ID.TFOOT:case z.TAG_ID.TH:case z.TAG_ID.THEAD:case z.TAG_ID.TR:break;default:dw(e,g)}}function dw(e,g){const i=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,bk(e,g),e.fosterParentingEnabled=i}function _we(e,g){e.pendingCharacterTokens.push(g)}function Lwe(e,g){e.pendingCharacterTokens.push(g),e.hasNonWhitespacePendingCharacterToken=!0}function cZ(e,g){let i=0;if(e.hasNonWhitespacePendingCharacterToken)for(;i0&&e.openElements.currentTagId===z.TAG_ID.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===z.TAG_ID.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===z.TAG_ID.OPTGROUP&&e.openElements.pop();break}case z.TAG_ID.OPTION:{e.openElements.currentTagId===z.TAG_ID.OPTION&&e.openElements.pop();break}case z.TAG_ID.SELECT:{e.openElements.hasInSelectScope(z.TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.SELECT),e._resetInsertionMode());break}case z.TAG_ID.TEMPLATE:{sm(e,g);break}}}function uBt(e,g){const i=g.tagID;i===z.TAG_ID.CAPTION||i===z.TAG_ID.TABLE||i===z.TAG_ID.TBODY||i===z.TAG_ID.TFOOT||i===z.TAG_ID.THEAD||i===z.TAG_ID.TR||i===z.TAG_ID.TD||i===z.TAG_ID.TH?(e.openElements.popUntilTagNamePopped(z.TAG_ID.SELECT),e._resetInsertionMode(),e._processStartTag(g)):jwe(e,g)}function dBt(e,g){const i=g.tagID;i===z.TAG_ID.CAPTION||i===z.TAG_ID.TABLE||i===z.TAG_ID.TBODY||i===z.TAG_ID.TFOOT||i===z.TAG_ID.THEAD||i===z.TAG_ID.TR||i===z.TAG_ID.TD||i===z.TAG_ID.TH?e.openElements.hasInTableScope(i)&&(e.openElements.popUntilTagNamePopped(z.TAG_ID.SELECT),e._resetInsertionMode(),e.onEndTag(g)):$we(e,g)}function hBt(e,g){switch(g.tagID){case z.TAG_ID.BASE:case z.TAG_ID.BASEFONT:case z.TAG_ID.BGSOUND:case z.TAG_ID.LINK:case z.TAG_ID.META:case z.TAG_ID.NOFRAMES:case z.TAG_ID.SCRIPT:case z.TAG_ID.STYLE:case z.TAG_ID.TEMPLATE:case z.TAG_ID.TITLE:{va(e,g);break}case z.TAG_ID.CAPTION:case z.TAG_ID.COLGROUP:case z.TAG_ID.TBODY:case z.TAG_ID.TFOOT:case z.TAG_ID.THEAD:{e.tmplInsertionModeStack[0]=Ne.IN_TABLE,e.insertionMode=Ne.IN_TABLE,$b(e,g);break}case z.TAG_ID.COL:{e.tmplInsertionModeStack[0]=Ne.IN_COLUMN_GROUP,e.insertionMode=Ne.IN_COLUMN_GROUP,L4(e,g);break}case z.TAG_ID.TR:{e.tmplInsertionModeStack[0]=Ne.IN_TABLE_BODY,e.insertionMode=Ne.IN_TABLE_BODY,Zk(e,g);break}case z.TAG_ID.TD:case z.TAG_ID.TH:{e.tmplInsertionModeStack[0]=Ne.IN_ROW,e.insertionMode=Ne.IN_ROW,Gk(e,g);break}default:e.tmplInsertionModeStack[0]=Ne.IN_BODY,e.insertionMode=Ne.IN_BODY,Pn(e,g)}}function mBt(e,g){g.tagID===z.TAG_ID.TEMPLATE&&sm(e,g)}function qwe(e,g){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(z.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(g)):_4(e,g)}function fBt(e,g){g.tagID===z.TAG_ID.HTML?Pn(e,g):_X(e,g)}function eRe(e,g){var i;if(g.tagID===z.TAG_ID.HTML){if(e.fragmentContext||(e.insertionMode=Ne.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===z.TAG_ID.HTML){e._setEndLocation(e.openElements.items[0],g);const I=e.openElements.items[1];I&&!(!((i=e.treeAdapter.getNodeSourceCodeLocation(I))===null||i===void 0)&&i.endTag)&&e._setEndLocation(I,g)}}else _X(e,g)}function _X(e,g){e.insertionMode=Ne.IN_BODY,bk(e,g)}function pBt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.FRAMESET:{e._insertElement(g,z.NS.HTML);break}case z.TAG_ID.FRAME:{e._appendElement(g,z.NS.HTML),g.ackSelfClosing=!0;break}case z.TAG_ID.NOFRAMES:{va(e,g);break}}}function bBt(e,g){g.tagID===z.TAG_ID.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==z.TAG_ID.FRAMESET&&(e.insertionMode=Ne.AFTER_FRAMESET))}function yBt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.NOFRAMES:{va(e,g);break}}}function ZBt(e,g){g.tagID===z.TAG_ID.HTML&&(e.insertionMode=Ne.AFTER_AFTER_FRAMESET)}function GBt(e,g){g.tagID===z.TAG_ID.HTML?Pn(e,g):CW(e,g)}function CW(e,g){e.insertionMode=Ne.IN_BODY,bk(e,g)}function vBt(e,g){switch(g.tagID){case z.TAG_ID.HTML:{Pn(e,g);break}case z.TAG_ID.NOFRAMES:{va(e,g);break}}}function BBt(e,g){g.chars=Dwe.REPLACEMENT_CHARACTER,e._insertCharacters(g)}function SBt(e,g){e._insertCharacters(g),e.framesetOk=!1}function tRe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==z.NS.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function wBt(e,g){if(Qa.causesExit(g))tRe(e),e._startTagOutsideForeignContent(g);else{const i=e._getAdjustedCurrentElement(),I=e.treeAdapter.getNamespaceURI(i);I===z.NS.MATHML?Qa.adjustTokenMathMLAttrs(g):I===z.NS.SVG&&(Qa.adjustTokenSVGTagName(g),Qa.adjustTokenSVGAttrs(g)),Qa.adjustTokenXMLAttrs(g),g.selfClosing?e._appendElement(g,I):e._insertElement(g,I),g.ackSelfClosing=!0}}function RBt(e,g){if(g.tagID===z.TAG_ID.P||g.tagID===z.TAG_ID.BR){tRe(e),e._endTagOutsideForeignContent(g);return}for(let i=e.openElements.stackTop;i>0;i--){const I=e.openElements.items[i];if(e.treeAdapter.getNamespaceURI(I)===z.NS.HTML){e._endTagOutsideForeignContent(g);break}const n=e.treeAdapter.getTagName(I);if(n.toLowerCase()===g.tagName){g.tagName=n,e.openElements.shortenToLength(i);break}}}var qb={};Object.defineProperty(qb,"__esModule",{value:!0});qb.serializeOuter=qb.serialize=void 0;const oi=Cl,gRe=xb,VBt=pk,WBt=new Set([oi.TAG_NAMES.AREA,oi.TAG_NAMES.BASE,oi.TAG_NAMES.BASEFONT,oi.TAG_NAMES.BGSOUND,oi.TAG_NAMES.BR,oi.TAG_NAMES.COL,oi.TAG_NAMES.EMBED,oi.TAG_NAMES.FRAME,oi.TAG_NAMES.HR,oi.TAG_NAMES.IMG,oi.TAG_NAMES.INPUT,oi.TAG_NAMES.KEYGEN,oi.TAG_NAMES.LINK,oi.TAG_NAMES.META,oi.TAG_NAMES.PARAM,oi.TAG_NAMES.SOURCE,oi.TAG_NAMES.TRACK,oi.TAG_NAMES.WBR]);function iRe(e,g){return g.treeAdapter.isElementNode(e)&&g.treeAdapter.getNamespaceURI(e)===oi.NS.HTML&&WBt.has(g.treeAdapter.getTagName(e))}const IRe={treeAdapter:VBt.defaultTreeAdapter,scriptingEnabled:!0};function XBt(e,g){const i=Object.assign(Object.assign({},IRe),g);return iRe(e,i)?"":nRe(e,i)}qb.serialize=XBt;function HBt(e,g){const i=Object.assign(Object.assign({},IRe),g);return rRe(e,i)}qb.serializeOuter=HBt;function nRe(e,g){let i="";const I=g.treeAdapter.isElementNode(e)&&g.treeAdapter.getTagName(e)===oi.TAG_NAMES.TEMPLATE&&g.treeAdapter.getNamespaceURI(e)===oi.NS.HTML?g.treeAdapter.getTemplateContent(e):e,n=g.treeAdapter.getChildNodes(I);if(n)for(const r of n)i+=rRe(r,g);return i}function rRe(e,g){return g.treeAdapter.isElementNode(e)?TBt(e,g):g.treeAdapter.isTextNode(e)?kBt(e,g):g.treeAdapter.isCommentNode(e)?YBt(e,g):g.treeAdapter.isDocumentTypeNode(e)?KBt(e,g):""}function TBt(e,g){const i=g.treeAdapter.getTagName(e);return`<${i}${NBt(e,g)}>${iRe(e,g)?"":`${nRe(e,g)}`}`}function NBt(e,{treeAdapter:g}){let i="";for(const I of g.getAttrList(e)){if(i+=" ",!I.namespace)i+=I.name;else switch(I.namespace){case oi.NS.XML:{i+=`xml:${I.name}`;break}case oi.NS.XMLNS:{I.name!=="xmlns"&&(i+="xmlns:"),i+=I.name;break}case oi.NS.XLINK:{i+=`xlink:${I.name}`;break}default:i+=`${I.prefix}:${I.name}`}i+=`="${(0,gRe.escapeAttribute)(I.value)}"`}return i}function kBt(e,g){const{treeAdapter:i}=g,I=i.getTextNodeContent(e),n=i.getParentNode(e),r=n&&i.isElementNode(n)&&i.getTagName(n);return r&&i.getNamespaceURI(n)===oi.NS.HTML&&(0,oi.hasUnescapedText)(r,g.scriptingEnabled)?I:(0,gRe.escapeText)(I)}function YBt(e,{treeAdapter:g}){return``}function KBt(e,{treeAdapter:g}){return``}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseFragment=e.parse=e.TokenizerMode=e.Tokenizer=e.Token=e.html=e.foreignContent=e.ErrorCodes=e.serializeOuter=e.serialize=e.Parser=e.defaultTreeAdapter=void 0;const g=LB;var i=pk;Object.defineProperty(e,"defaultTreeAdapter",{enumerable:!0,get:function(){return i.defaultTreeAdapter}});var I=LB;Object.defineProperty(e,"Parser",{enumerable:!0,get:function(){return I.Parser}});var n=qb;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return n.serialize}}),Object.defineProperty(e,"serializeOuter",{enumerable:!0,get:function(){return n.serializeOuter}});var r=uw;Object.defineProperty(e,"ErrorCodes",{enumerable:!0,get:function(){return r.ERR}}),e.foreignContent=J4,e.html=Cl,e.Token=mk;var C=hh;Object.defineProperty(e,"Tokenizer",{enumerable:!0,get:function(){return C.Tokenizer}}),Object.defineProperty(e,"TokenizerMode",{enumerable:!0,get:function(){return C.TokenizerMode}});function o(s,A){return g.Parser.parse(s,A)}e.parse=o;function a(s,A,l){typeof s=="string"&&(l=A,A=s,s=null);const c=g.Parser.getFragmentParser(s,l);return c.tokenizer.write(A,!0),c.getFragment()}e.parseFragment=a})(Wwe);(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.adapter=e.serializeDoctypeContent=void 0;const g=Wwe,i=En;function I(C){return new i.Text(C)}function n(C){const o=C.includes('"')?"'":'"';return o+C+o}function r(C,o,a){let s="!DOCTYPE ";return C&&(s+=C),o?s+=` PUBLIC ${n(o)}`:a&&(s+=" SYSTEM"),a&&(s+=` ${n(a)}`),s}e.serializeDoctypeContent=r,e.adapter={isCommentNode:i.isComment,isElementNode:i.isTag,isTextNode:i.isText,createDocument(){const C=new i.Document([]);return C["x-mode"]=g.html.DOCUMENT_MODE.NO_QUIRKS,C},createDocumentFragment(){return new i.Document([])},createElement(C,o,a){const s=Object.create(null),A=Object.create(null),l=Object.create(null);for(let u=0;u(0,i.isDirective)(c)&&c.name==="!doctype");l?l.data=A??null:(l=new i.ProcessingInstruction("!doctype",A),e.adapter.appendChild(C,l)),l["x-name"]=o??void 0,l["x-publicId"]=a??void 0,l["x-systemId"]=s??void 0},setDocumentMode(C,o){C["x-mode"]=o},getDocumentMode(C){return C["x-mode"]},detachNode(C){if(C.parent){const o=C.parent.children.indexOf(C),{prev:a,next:s}=C;C.prev=null,C.next=null,a&&(a.next=s),s&&(s.prev=a),C.parent.children.splice(o,1),C.parent=null}},insertText(C,o){const a=C.children[C.children.length-1];a&&(0,i.isText)(a)?a.data+=o:e.adapter.appendChild(C,I(o))},insertTextBefore(C,o,a){const s=C.children[C.children.indexOf(a)-1];s&&(0,i.isText)(s)?s.data+=o:e.adapter.insertBefore(C,I(o),a)},adoptAttributes(C,o){for(let a=0;a"u"&&(C.attribs[s]=o[a].value,C["x-attribsNamespace"][s]=o[a].namespace,C["x-attribsPrefix"][s]=o[a].prefix)}},getFirstChild(C){return C.children[0]},getChildNodes(C){return C.children},getParentNode(C){return C.parent},getAttrList(C){return C.attributes},getTagName(C){return C.name},getNamespaceURI(C){return C.namespace},getTextNodeContent(C){return C.data},getCommentNodeContent(C){return C.data},getDocumentTypeNodeName(C){var o;return(o=C["x-name"])!==null&&o!==void 0?o:""},getDocumentTypeNodePublicId(C){var o;return(o=C["x-publicId"])!==null&&o!==void 0?o:""},getDocumentTypeNodeSystemId(C){var o;return(o=C["x-systemId"])!==null&&o!==void 0?o:""},isDocumentTypeNode(C){return(0,i.isDirective)(C)&&C.name==="!doctype"},setNodeSourceCodeLocation(C,o){o&&(C.startIndex=o.startOffset,C.endIndex=o.endOffset),C.sourceCodeLocation=o},getNodeSourceCodeLocation(C){return C.sourceCodeLocation},updateNodeSourceCodeLocation(C,o){o.endOffset!=null&&(C.endIndex=o.endOffset),C.sourceCodeLocation=Object.assign(Object.assign({},C.sourceCodeLocation),o)}}})(Vwe);var FBt=$e&&$e.__spreadArray||function(e,g,i){if(i||arguments.length===2)for(var I=0,n=g.length,r;I=i.Zero&&c<=i.Nine}function o(c){return c>=i.LowerA&&c<=i.LowerZ||c>=i.UpperA&&c<=i.UpperZ}function a(c){return c>=i.UpperA&&c<=i.UpperF||c>=i.LowerA&&c<=i.LowerF}var s;(function(c){c[c.NoValue=0]="NoValue",c[c.Unquoted=1]="Unquoted",c[c.Single=2]="Single",c[c.Double=3]="Double"})(s=e.QuoteType||(e.QuoteType={}));var A={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])},l=function(){function c(u,d){var h=u.xmlMode,m=h===void 0?!1:h,f=u.decodeEntities,b=f===void 0?!0:f;this.cbs=d,this.state=I.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=I.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=m,this.decodeEntities=b,this.entityTrie=m?g.xmlDecodeTree:g.htmlDecodeTree}return c.prototype.reset=function(){this.state=I.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=I.Text,this.currentSequence=void 0,this.running=!0,this.offset=0},c.prototype.write=function(u){this.offset+=this.buffer.length,this.buffer=u,this.parse()},c.prototype.end=function(){this.running&&this.finish()},c.prototype.pause=function(){this.running=!1},c.prototype.resume=function(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=I.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&u===i.Amp&&(this.state=I.BeforeEntity)},c.prototype.stateSpecialStartSequence=function(u){var d=this.sequenceIndex===this.currentSequence.length,h=d?r(u):(u|32)===this.currentSequence[this.sequenceIndex];if(!h)this.isSpecial=!1;else if(!d){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=I.InTagName,this.stateInTagName(u)},c.prototype.stateInSpecialTag=function(u){if(this.sequenceIndex===this.currentSequence.length){if(u===i.Gt||n(u)){var d=this.index-this.currentSequence.length;if(this.sectionStart>14)-1;if(!this.allowLegacyEntity()&&u!==i.Semi)this.trieIndex+=h;else{var m=this.index-this.entityExcess+1;m>this.sectionStart&&this.emitPartial(this.sectionStart,m),this.entityResult=this.trieIndex,this.trieIndex+=h,this.entityExcess=0,this.sectionStart=this.index+1,h===0&&this.emitNamedEntity()}}},c.prototype.emitNamedEntity=function(){if(this.state=this.baseState,this.entityResult!==0){var u=(this.entityTrie[this.entityResult]&g.BinTrieFlags.VALUE_LENGTH)>>14;switch(u){case 1:{this.emitCodePoint(this.entityTrie[this.entityResult]&~g.BinTrieFlags.VALUE_LENGTH);break}case 2:{this.emitCodePoint(this.entityTrie[this.entityResult+1]);break}case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}}},c.prototype.stateBeforeNumericEntity=function(u){(u|32)===i.LowerX?(this.entityExcess++,this.state=I.InHexEntity):(this.state=I.InNumericEntity,this.stateInNumericEntity(u))},c.prototype.emitNumericEntity=function(u){var d=this.index-this.entityExcess-1,h=d+2+ +(this.state===I.InHexEntity);h!==this.index&&(d>this.sectionStart&&this.emitPartial(this.sectionStart,d),this.sectionStart=this.index+Number(u),this.emitCodePoint((0,g.replaceCodePoint)(this.entityResult))),this.state=this.baseState},c.prototype.stateInNumericEntity=function(u){u===i.Semi?this.emitNumericEntity(!0):C(u)?(this.entityResult=this.entityResult*10+(u-i.Zero),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)},c.prototype.stateInHexEntity=function(u){u===i.Semi?this.emitNumericEntity(!0):C(u)?(this.entityResult=this.entityResult*16+(u-i.Zero),this.entityExcess++):a(u)?(this.entityResult=this.entityResult*16+((u|32)-i.LowerA+10),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)},c.prototype.allowLegacyEntity=function(){return!this.xmlMode&&(this.baseState===I.Text||this.baseState===I.InSpecialTag)},c.prototype.cleanup=function(){this.running&&this.sectionStart!==this.index&&(this.state===I.Text||this.state===I.InSpecialTag&&this.sequenceIndex===0?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):(this.state===I.InAttributeValueDq||this.state===I.InAttributeValueSq||this.state===I.InAttributeValueNq)&&(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))},c.prototype.shouldContinue=function(){return this.index0&&C.has(this.stack[this.stack.length-1]);){var o=this.stack.pop();(I=(i=this.cbs).onclosetag)===null||I===void 0||I.call(i,o,!0)}this.isVoidElement(g)||(this.stack.push(g),zre.has(g)?this.foreignContext.push(!0):Pre.has(g)&&this.foreignContext.push(!1)),(r=(n=this.cbs).onopentagname)===null||r===void 0||r.call(n,g),this.cbs.onopentag&&(this.attribs={})},e.prototype.endOpenTag=function(g){var i,I;this.startIndex=this.openTagStart,this.attribs&&((I=(i=this.cbs).onopentag)===null||I===void 0||I.call(i,this.tagname,this.attribs,g),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""},e.prototype.onopentagend=function(g){this.endIndex=g,this.endOpenTag(!1),this.startIndex=g+1},e.prototype.onclosetag=function(g,i){var I,n,r,C,o,a;this.endIndex=i;var s=this.getSlice(g,i);if(this.lowerCaseTagNames&&(s=s.toLowerCase()),(zre.has(s)||Pre.has(s))&&this.foreignContext.pop(),this.isVoidElement(s))!this.options.xmlMode&&s==="br"&&((n=(I=this.cbs).onopentagname)===null||n===void 0||n.call(I,"br"),(C=(r=this.cbs).onopentag)===null||C===void 0||C.call(r,"br",{},!0),(a=(o=this.cbs).onclosetag)===null||a===void 0||a.call(o,"br",!1));else{var A=this.stack.lastIndexOf(s);if(A!==-1)if(this.cbs.onclosetag)for(var l=this.stack.length-A;l--;)this.cbs.onclosetag(this.stack.pop(),l!==0);else this.stack.length=A;else!this.options.xmlMode&&s==="p"&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=i+1},e.prototype.onselfclosingtag=function(g){this.endIndex=g,this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?(this.closeCurrentTag(!1),this.startIndex=g+1):this.onopentagend(g)},e.prototype.closeCurrentTag=function(g){var i,I,n=this.tagname;this.endOpenTag(g),this.stack[this.stack.length-1]===n&&((I=(i=this.cbs).onclosetag)===null||I===void 0||I.call(i,n,!g),this.stack.pop())},e.prototype.onattribname=function(g,i){this.startIndex=g;var I=this.getSlice(g,i);this.attribname=this.lowerCaseAttributeNames?I.toLowerCase():I},e.prototype.onattribdata=function(g,i){this.attribvalue+=this.getSlice(g,i)},e.prototype.onattribentity=function(g){this.attribvalue+=(0,Dre.fromCodePoint)(g)},e.prototype.onattribend=function(g,i){var I,n;this.endIndex=i,(n=(I=this.cbs).onattribute)===null||n===void 0||n.call(I,this.attribname,this.attribvalue,g===SV.QuoteType.Double?'"':g===SV.QuoteType.Single?"'":g===SV.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""},e.prototype.getInstructionName=function(g){var i=g.search(LBt),I=i<0?g:g.substr(0,i);return this.lowerCaseTagNames&&(I=I.toLowerCase()),I},e.prototype.ondeclaration=function(g,i){this.endIndex=i;var I=this.getSlice(g,i);if(this.cbs.onprocessinginstruction){var n=this.getInstructionName(I);this.cbs.onprocessinginstruction("!".concat(n),"!".concat(I))}this.startIndex=i+1},e.prototype.onprocessinginstruction=function(g,i){this.endIndex=i;var I=this.getSlice(g,i);if(this.cbs.onprocessinginstruction){var n=this.getInstructionName(I);this.cbs.onprocessinginstruction("?".concat(n),"?".concat(I))}this.startIndex=i+1},e.prototype.oncomment=function(g,i,I){var n,r,C,o;this.endIndex=i,(r=(n=this.cbs).oncomment)===null||r===void 0||r.call(n,this.getSlice(g,i-I)),(o=(C=this.cbs).oncommentend)===null||o===void 0||o.call(C),this.startIndex=i+1},e.prototype.oncdata=function(g,i,I){var n,r,C,o,a,s,A,l,c,u;this.endIndex=i;var d=this.getSlice(g,i-I);this.options.xmlMode||this.options.recognizeCDATA?((r=(n=this.cbs).oncdatastart)===null||r===void 0||r.call(n),(o=(C=this.cbs).ontext)===null||o===void 0||o.call(C,d),(s=(a=this.cbs).oncdataend)===null||s===void 0||s.call(a)):((l=(A=this.cbs).oncomment)===null||l===void 0||l.call(A,"[CDATA[".concat(d,"]]")),(u=(c=this.cbs).oncommentend)===null||u===void 0||u.call(c)),this.startIndex=i+1},e.prototype.onend=function(){var g,i;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(var I=this.stack.length;I>0;this.cbs.onclosetag(this.stack[--I],!0));}(i=(g=this.cbs).onend)===null||i===void 0||i.call(g)},e.prototype.reset=function(){var g,i,I,n;(i=(g=this.cbs).onreset)===null||i===void 0||i.call(g),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,(n=(I=this.cbs).onparserinit)===null||n===void 0||n.call(I,this),this.buffers.length=0,this.bufferOffset=0,this.writeIndex=0,this.ended=!1},e.prototype.parseComplete=function(g){this.reset(),this.end(g)},e.prototype.getSlice=function(g,i){for(;g-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();for(var I=this.buffers[0].slice(g-this.bufferOffset,i-this.bufferOffset);i-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),I+=this.buffers[0].slice(0,i-this.bufferOffset);return I},e.prototype.shiftBuffer=function(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()},e.prototype.write=function(g){var i,I;if(this.ended){(I=(i=this.cbs).onerror)===null||I===void 0||I.call(i,new Error(".write() after done!"));return}this.buffers.push(g),this.tokenizer.running&&(this.tokenizer.write(g),this.writeIndex++)},e.prototype.end=function(g){var i,I;if(this.ended){(I=(i=this.cbs).onerror)===null||I===void 0||I.call(i,new Error(".end() after done!"));return}g&&this.write(g),this.ended=!0,this.tokenizer.end()},e.prototype.pause=function(){this.tokenizer.pause()},e.prototype.resume=function(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex0&&arguments[0]!==void 0?arguments[0]:{};P4={},CRe(e)}var Di={},jz={exports:{}};(function(e,g){Object.defineProperty(g,"__esModule",{value:!0});var I=function(i){function n(C,r){return i.apply(this,arguments)}return n.toString=function(){return i.toString()},n}(function(i,n){return typeof i!="object"||i===null||typeof n!="object"||n===null?!1:Object.keys(n).every(function(C){if(!i.propertyIsEnumerable(C))return!1;var r=n[C],o=i[C];return!(typeof r=="object"&&r!==null?!I(o,r):o!==r)})});g.default=I,e.exports=g.default})(jz,jz.exports);var UBt=jz.exports,cu={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=C;var g=fk,I=n(g),i=sm;function n(r){return r&&r.__esModule?r:{default:r}}function C(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(r.adapter)return(0,I.default)(r.adapter),r.adapter;var o=(0,i.get)(),a=o.adapter;return(0,I.default)(a),a}})(cu);Object.defineProperty(Di,"__esModule",{value:!0});var QBt=function(){function e(g,I){var i=[],n=!0,C=!1,r=void 0;try{for(var o=g[Symbol.iterator](),a;!(n=(a=o.next()).done)&&(i.push(a.value),!(I&&i.length===I));n=!0);}catch(s){C=!0,r=s}finally{try{!n&&o.return&&o.return()}finally{if(C)throw r}}return i}return function(g,I){if(Array.isArray(g))return g;if(Symbol.iterator in Object(g))return e(g,I);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();Di.propsOfNode=pk;Di.childrenOfNode=j0;Di.hasClassName=lSt;Di.treeForEach=J4;Di.treeFilter=O4;Di.findParentNode=cSt;Di.pathToNode=rRe;Di.parentsOfNode=dSt;Di.nodeHasId=hSt;Di.nodeMatchesObjectProps=bSt;Di.getTextFromNode=oRe;Di.getTextFromHostNodes=aRe;Di.getHTMLFromHostNodes=ARe;var jBt=M0,$Bt=lm(jBt),qBt=tw,ECe=lm(qBt),eSt=kBe,tSt=lm(eSt),gSt=UBt,ISt=lm(gSt),iSt=b4,nSt=lm(iSt),CSt=oBe,rSt=lm(CSt),oSt=cu,aSt=lm(oSt);function lm(e){return e&&e.__esModule?e:{default:e}}function ASt(e,g,I){return g in e?Object.defineProperty(e,g,{value:I,enumerable:!0,configurable:!0,writable:!0}):e[g]=I,e}function sSt(e){if(Array.isArray(e)){for(var g=0,I=Array(e.length);g-1}function J4(e,g){e&&g(e),j0(e).forEach(function(I){return J4(I,g)})}function O4(e,g){var I=[];return J4(e,function(i){g(i)&&I.push(i)}),I}function cSt(e,g){var I=O4(e,function(i){return i.rendered?j0(i).indexOf(g)!==-1:!1});return I[0]||null}function uSt(e,g){return e.filter(function(I){return O4(I,g).length!==0})}function rRe(e,g){for(var I=[g],i=[],n=function(a){return e===a};I.length;){var C=I.pop(),r=j0(C);if(C===e)return uSt(i,n);i.push(C),r.length===0&&i.pop(),I.push.apply(I,sSt(r))}return null}function dSt(e,g){return(rRe(e,g)||[]).reverse()}function hSt(e,g){return pk(e).id===g}var mSt={};function fSt(e){return typeof e<"u"?e:mSt}function pSt(e){return(0,tSt.default)(e).reduce(function(g,I){var i=QBt(I,2),n=i[0],C=i[1];return(0,$Bt.default)({},g,ASt({},n,fSt(C)))},{})}function bSt(e,g){return(0,ISt.default)(pk(e),pSt(g))}function ySt(e){return typeof e=="string"?String(e||""):e&&e.textContent||""}function _4(e,g){var I=g.getCustom,i=g.handleHostNodes,n=g.recurse,C=g.nullRenderReturnsNull,r=C===void 0?!1:C;return e==null?"":typeof e=="string"||typeof e=="number"?String(e):I&&e.type&&typeof e.type=="function"?I(e):i&&e.nodeType==="host"?i(e):e.rendered==null&&r?null:j0(e).map(n).join("")}function oRe(e){return _4(e,{recurse:oRe,getCustom:function(){function g(I){var i=I.type;return"<"+String(i.displayName||(0,nSt.default)(i))+" />"}return g}()})}function aRe(e,g){return _4(e,{recurse:function(){function I(i){return aRe(i,g)}return I}(),handleHostNodes:function(){function I(i){var n=[].concat(g.nodeToHostNode(i,!0));return n.map(ySt).join("")}return I}()})}function ZSt(e){return e==null?null:e.outerHTML.replace(/\sdata-(reactid|reactroot)+="([^"]*)+"/g,"")}function ARe(e,g){return _4(e,{recurse:function(){function I(i){return ARe(i,g)}return I}(),handleHostNodes:function(){function I(i){var n=[].concat(g.nodeToHostNode(i,!0));return n.map(ZSt).join("")}return I}(),nullRenderReturnsNull:!0})}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.shallowEqual=e.ITERATOR_SYMBOL=void 0;var g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(F){return typeof F}:function(F){return F&&typeof Symbol=="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F},I=function(){function F(T,k){var Ie=[],me=!0,Ve=!1,we=void 0;try{for(var je=T[Symbol.iterator](),at;!(me=(at=je.next()).done)&&(Ie.push(at.value),!(k&&Ie.length===k));me=!0);}catch(bt){Ve=!0,we=bt}finally{try{!me&&je.return&&je.return()}finally{if(Ve)throw we}}return Ie}return function(T,k){if(Array.isArray(T))return T;if(Symbol.iterator in Object(T))return F(T,k);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();e.getAdapter=Y,e.makeOptions=x,e.isCustomComponent=J,e.isCustomComponentElement=P,e.propsOfNode=ge,e.typeOfNode=q,e.nodeHasType=$,e.nodeMatches=ne,e.nodeEqual=be,e.containsChildrenSubArray=pe,e.childrenToSimplifiedArray=Be,e.isReactElementAlike=Pe,e.withSetStateAllowed=De,e.AND=Qe,e.displayNameOfNode=_e,e.sym=gt,e.privateSet=lt,e.cloneElement=tt,e.spyMethod=Xe;var i=VBe;Object.defineProperty(e,"shallowEqual",{enumerable:!0,get:function(){function F(){return W(i).default}return F}()}),e.isEmptyValue=ae,e.renderedDive=ye,e.loadCheerioRoot=He;var n=M0,C=W(n),r=cN,o=W(r),a=f4,s=W(a),A=kBe,l=W(A),c=b4,u=W(c),d=P0,h=W(d),m=tw,f=W(m),b=dBe,p=W(b),y=JBe,Z=W(y),B=su,G=sm,v=Di,w=cu,R=W(w),S=fk,X=W(S);function W(F){return F&&F.__esModule?F:{default:F}}function V(F,T,k){return T in F?Object.defineProperty(F,T,{value:k,enumerable:!0,configurable:!0,writable:!0}):F[T]=k,F}function H(F,T){var k={};for(var Ie in F)T.indexOf(Ie)>=0||Object.prototype.hasOwnProperty.call(F,Ie)&&(k[Ie]=F[Ie]);return k}e.ITERATOR_SYMBOL=typeof Symbol=="function"&&Symbol.iterator;function Y(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return console.warn("getAdapter from Utils is deprecated; please use ./getAdapter instead"),(0,R.default)(F)}function K(F,T){if(F&&T&&F!==T)throw new TypeError("If both the `attachTo` and `hydrateIn` options are provided, they must be === (for backwards compatibility)")}function x(F){var T=(0,G.get)(),k=T.attachTo,Ie=T.hydrateIn,me=H(T,["attachTo","hydrateIn"]);K(k,Ie);var Ve=F.attachTo,we=F.hydrateIn;K(Ve,we);var je=we||Ie||k||Ve||void 0,at=we||Ie||void 0,bt=(0,C.default)({},je&&{attachTo:je},at&&{hydrateIn:at});return(0,C.default)({},me,F,bt)}function J(F,T){return(0,X.default)(T),T.isCustomComponent?!!T.isCustomComponent(F):typeof F=="function"}function P(F,T){return T.isCustomComponentElement?!!T.isCustomComponentElement(F):!!F&&T.isValidElement(F)&&typeof F.type=="function"}function ge(F){return(0,l.default)(F&&F.props||{}).filter(function(T){var k=I(T,2),Ie=k[1];return typeof Ie<"u"}).reduce(function(T,k){var Ie=I(k,2),me=Ie[0],Ve=Ie[1];return(0,C.default)(T,V({},me,Ve))},{})}function q(F){return F?F.type:null}function $(F,T){if(!T||!F)return!1;var k=(0,R.default)();if(k.displayNameOfNode){var Ie=k.displayNameOfNode(F);return Ie===T}return F.type?typeof F.type=="string"?F.type===T:(typeof F.type=="function"?(0,u.default)(F.type)===T:F.type.name===T)||F.type.displayName===T:!1}function j(F,T,k,Ie){var me=Ie?ne:be;if(F===T)return!0;if(!Array.isArray(F)&&!Array.isArray(T))return me(F,T,k);var Ve=(0,f.default)(F,1/0),we=(0,f.default)(T,1/0);if(Ve.length!==we.length)return!1;if(Ve.length===0&&we.length===0)return!0;for(var je=0;je2&&arguments[2]!==void 0?arguments[2]:s.default;return he(F,T,k,!0)}function be(F,T){var k=arguments.length>2&&arguments[2]!==void 0?arguments[2]:s.default;return he(F,T,k,!1)}function pe(F,T,k){var Ie=(0,v.childrenOfNode)(T),me=function(we,je){return ve(F,Ie.slice(je,je+k.length),k)};return Ie.some(me)}function ve(F,T,k){return T.length===k.length&&T.every(function(Ie,me){return F(Ie,k[me])})}function We(F){var T=[],k=function(me){me===null||me===!1||typeof me>"u"||T.push(me)};return Array.isArray(F)?F.forEach(k):k(F),T}function Be(F){for(var T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,k=We(F),Ie=[],me=0;me"u"?Ie.push(Ve):Je(Ve)&&Je(we)?Ie.push(we+Ve):(Ie.push(we),Ie.push(Ve))}return T?Ie.map(function(je){return typeof je=="string"?(0,p.default)(je):je}):Ie}function Je(F){return typeof F=="string"||typeof F=="number"}function Pe(F,T){return T.isValidElement(F)||Je(F)||Array.isArray(F)}function De(F){var T=!1;typeof globalThis.document>"u"&&(T=!0,globalThis.document={}),F(),T&&(globalThis.document=void 0,delete globalThis.document)}function Qe(F){var T=F.slice().reverse();return function(k){return T.every(function(Ie){return Ie(k)})}}function _e(F){if(!F)return null;var T=F.type;return T?T.displayName||(typeof T=="function"?(0,u.default)(T):T.name||T):null}function gt(F){return typeof Symbol=="function"?Symbol.for("enzyme."+String(F)):F}function lt(F,T,k){Object.defineProperty(F,T,{value:k,enumerable:!1,writable:!0})}function tt(F,T,k){return F.createElement(T.type,(0,C.default)({},T.props,k))}function Xe(F,T){var k=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},Ie=void 0,me=F[T],Ve=(0,h.default)(F,T),we=void 0;return Ve&&(we=Object.getOwnPropertyDescriptor(F,T)),Object.defineProperty(F,T,{configurable:!0,enumerable:!we||!!we.enumerable,value:k(me)||function(){function je(){for(var at=arguments.length,bt=Array(at),ct=0;ct"'`]/g,BSt=RegExp(sRe.source),SSt={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},wSt=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,RSt=typeof self=="object"&&self&&self.Object===Object&&self,VSt=wSt||RSt||Function("return this")();function WSt(e){return function(g){return e==null?void 0:e[g]}}var XSt=WSt(SSt),HSt=Object.prototype,TSt=HSt.toString,MCe=VSt.Symbol,zCe=MCe?MCe.prototype:void 0,PCe=zCe?zCe.toString:void 0;function NSt(e){if(typeof e=="string")return e;if(YSt(e))return PCe?PCe.call(e):"";var g=e+"";return g=="0"&&1/e==-GSt?"-0":g}function kSt(e){return!!e&&typeof e=="object"}function YSt(e){return typeof e=="symbol"||kSt(e)&&TSt.call(e)==vSt}function KSt(e){return e==null?"":NSt(e)}function FSt(e){return e=KSt(e),e&&BSt.test(e)?e.replace(sRe,XSt):e}var DSt=FSt,xSt=String.prototype.valueOf,ESt=function(g){try{return xSt.call(g),!0}catch{return!1}},MSt=Object.prototype.toString,zSt="[object String]",PSt=ew(),lRe=function(g){return typeof g=="string"?!0:typeof g!="object"?!1:PSt?ESt(g):MSt.call(g)===zSt},JSt=Number.prototype.toString,OSt=function(g){try{return JSt.call(g),!0}catch{return!1}},_St=Object.prototype.toString,LSt="[object Number]",USt=ew(),QSt=function(g){return typeof g=="number"?!0:typeof g!="object"?!1:USt?OSt(g):_St.call(g)===LSt},cRe=hC,jSt=cRe("Boolean.prototype.toString"),$St=cRe("Object.prototype.toString"),qSt=function(g){try{return jSt(g),!0}catch{return!1}},ewt="[object Boolean]",twt=ew(),gwt=function(g){return typeof g=="boolean"?!0:g===null||typeof g!="object"?!1:twt&&Symbol.toStringTag in g?qSt(g):$St(g)===ewt};Object.defineProperty(uu,"__esModule",{value:!0});var JCe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};uu.typeName=hRe;uu.spaces=mRe;uu.indent=fRe;uu.debugNode=L4;uu.debugNodes=Zwt;var Iwt=DSt,iwt=rl(Iwt),nwt=b4,uRe=rl(nwt),Cwt=lRe,rwt=rl(Cwt),owt=QSt,awt=rl(owt),Awt=d4,swt=rl(Awt),lwt=gwt,cwt=rl(lwt),uwt=Eve,pf=rl(uwt),dwt=P0,Lm=rl(dwt),dRe=Di,hwt=cu,$z=rl(hwt);function rl(e){return e&&e.__esModule?e:{default:e}}var mwt=Function.bind.call(Function.call,Boolean.prototype.valueOf);function hRe(e){var g=(0,$z.default)();return g.displayNameOfNode?(0,$z.default)().displayNameOfNode(e)||"Component":typeof e.type=="function"?e.type.displayName||(0,uRe.default)(e.type)||"Component":e.type}function mRe(e){return Array(e+1).join(" ")}function fRe(e,g){return g.split(` -`).map(function(I){return""+String(mRe(e))+String(I)}).join(` -`)}function fwt(e,g){return(0,rwt.default)(e)?(0,pf.default)(String(e),{quoteStyle:"double"}):(0,awt.default)(e)?"{"+String((0,pf.default)(Number(e)))+"}":(0,cwt.default)(e)?"{"+String((0,pf.default)(mwt(e)))+"}":(0,swt.default)(e)?"{"+String((0,pf.default)(e))+"}":(typeof e>"u"?"undefined":JCe(e))==="object"?g.verbose?"{"+String((0,pf.default)(e))+"}":"{{...}}":"{["+(typeof e>"u"?"undefined":JCe(e))+"]}"}function pwt(e,g){var I=(0,dRe.propsOfNode)(e),i=Object.keys(I).filter(function(n){return n!=="children"});return i.map(function(n){return String(n)+"="+String(fwt(I[n],g))}).join(" ")}function bwt(e,g){return e.length?` -`+String(e.map(function(I){return fRe(g,I)}).join(` + `);if(!(r instanceof i.default))throw new Error("Enzyme Internal Error: configured enzyme adapter did not inherit from the EnzymeAdapter base class")}})(vk);Object.defineProperty(lm,"__esModule",{value:!0});lm.get=tSt;lm.merge=cRe;lm.reset=gSt;var $Bt=P0,sRe=lRe($Bt),qBt=vk,eSt=lRe(qBt);function lRe(e){return e&&e.__esModule?e:{default:e}}var Q4={};function tSt(){return(0,sRe.default)({},Q4)}function cRe(e){e.adapter&&(0,eSt.default)(e.adapter),(0,sRe.default)(Q4,e)}function gSt(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Q4={},cRe(e)}var DI={},iP={exports:{}};(function(e,g){Object.defineProperty(g,"__esModule",{value:!0});var i=function(I){function n(r,C){return I.apply(this,arguments)}return n.toString=function(){return I.toString()},n}(function(I,n){return typeof I!="object"||I===null||typeof n!="object"||n===null?!1:Object.keys(n).every(function(r){if(!I.propertyIsEnumerable(r))return!1;var C=n[r],o=I[r];return!(typeof C=="object"&&C!==null?!i(o,C):o!==C)})});g.default=i,e.exports=g.default})(iP,iP.exports);var iSt=iP.exports,uu={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var g=vk,i=n(g),I=lm;function n(C){return C&&C.__esModule?C:{default:C}}function r(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(C.adapter)return(0,i.default)(C.adapter),C.adapter;var o=(0,I.get)(),a=o.adapter;return(0,i.default)(a),a}})(uu);Object.defineProperty(DI,"__esModule",{value:!0});var ISt=function(){function e(g,i){var I=[],n=!0,r=!1,C=void 0;try{for(var o=g[Symbol.iterator](),a;!(n=(a=o.next()).done)&&(I.push(a.value),!(i&&I.length===i));n=!0);}catch(s){r=!0,C=s}finally{try{!n&&o.return&&o.return()}finally{if(r)throw C}}return I}return function(g,i){if(Array.isArray(g))return g;if(Symbol.iterator in Object(g))return e(g,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();DI.propsOfNode=Bk;DI.childrenOfNode=q0;DI.hasClassName=bSt;DI.treeForEach=j4;DI.treeFilter=$4;DI.findParentNode=ySt;DI.pathToNode=uRe;DI.parentsOfNode=GSt;DI.nodeHasId=vSt;DI.nodeMatchesObjectProps=RSt;DI.getTextFromNode=dRe;DI.getTextFromHostNodes=hRe;DI.getHTMLFromHostNodes=mRe;var nSt=P0,rSt=cm(nSt),CSt=iw,Jre=cm(CSt),oSt=MBe,aSt=cm(oSt),ASt=iSt,sSt=cm(ASt),lSt=S4,cSt=cm(lSt),uSt=dBe,dSt=cm(uSt),hSt=uu,mSt=cm(hSt);function cm(e){return e&&e.__esModule?e:{default:e}}function fSt(e,g,i){return g in e?Object.defineProperty(e,g,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[g]=i,e}function pSt(e){if(Array.isArray(e)){for(var g=0,i=Array(e.length);g-1}function j4(e,g){e&&g(e),q0(e).forEach(function(i){return j4(i,g)})}function $4(e,g){var i=[];return j4(e,function(I){g(I)&&i.push(I)}),i}function ySt(e,g){var i=$4(e,function(I){return I.rendered?q0(I).indexOf(g)!==-1:!1});return i[0]||null}function ZSt(e,g){return e.filter(function(i){return $4(i,g).length!==0})}function uRe(e,g){for(var i=[g],I=[],n=function(a){return e===a};i.length;){var r=i.pop(),C=q0(r);if(r===e)return ZSt(I,n);I.push(r),C.length===0&&I.pop(),i.push.apply(i,pSt(C))}return null}function GSt(e,g){return(uRe(e,g)||[]).reverse()}function vSt(e,g){return Bk(e).id===g}var BSt={};function SSt(e){return typeof e<"u"?e:BSt}function wSt(e){return(0,aSt.default)(e).reduce(function(g,i){var I=ISt(i,2),n=I[0],r=I[1];return(0,rSt.default)({},g,fSt({},n,SSt(r)))},{})}function RSt(e,g){return(0,sSt.default)(Bk(e),wSt(g))}function VSt(e){return typeof e=="string"?String(e||""):e&&e.textContent||""}function q4(e,g){var i=g.getCustom,I=g.handleHostNodes,n=g.recurse,r=g.nullRenderReturnsNull,C=r===void 0?!1:r;return e==null?"":typeof e=="string"||typeof e=="number"?String(e):i&&e.type&&typeof e.type=="function"?i(e):I&&e.nodeType==="host"?I(e):e.rendered==null&&C?null:q0(e).map(n).join("")}function dRe(e){return q4(e,{recurse:dRe,getCustom:function(){function g(i){var I=i.type;return"<"+String(I.displayName||(0,cSt.default)(I))+" />"}return g}()})}function hRe(e,g){return q4(e,{recurse:function(){function i(I){return hRe(I,g)}return i}(),handleHostNodes:function(){function i(I){var n=[].concat(g.nodeToHostNode(I,!0));return n.map(VSt).join("")}return i}()})}function WSt(e){return e==null?null:e.outerHTML.replace(/\sdata-(reactid|reactroot)+="([^"]*)+"/g,"")}function mRe(e,g){return q4(e,{recurse:function(){function i(I){return mRe(I,g)}return i}(),handleHostNodes:function(){function i(I){var n=[].concat(g.nodeToHostNode(I,!0));return n.map(WSt).join("")}return i}(),nullRenderReturnsNull:!0})}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.shallowEqual=e.ITERATOR_SYMBOL=void 0;var g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(F){return typeof F}:function(F){return F&&typeof Symbol=="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F},i=function(){function F(T,Y){var ie=[],me=!0,Ve=!1,we=void 0;try{for(var je=T[Symbol.iterator](),at;!(me=(at=je.next()).done)&&(ie.push(at.value),!(Y&&ie.length===Y));me=!0);}catch(bt){Ve=!0,we=bt}finally{try{!me&&je.return&&je.return()}finally{if(Ve)throw we}}return ie}return function(T,Y){if(Array.isArray(T))return T;if(Symbol.iterator in Object(T))return F(T,Y);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();e.getAdapter=k,e.makeOptions=D,e.isCustomComponent=J,e.isCustomComponentElement=P,e.propsOfNode=te,e.typeOfNode=q,e.nodeHasType=$,e.nodeMatches=ne,e.nodeEqual=be,e.containsChildrenSubArray=pe,e.childrenToSimplifiedArray=Be,e.isReactElementAlike=Pe,e.withSetStateAllowed=De,e.AND=Qe,e.displayNameOfNode=_e,e.sym=gt,e.privateSet=lt,e.cloneElement=tt,e.spyMethod=Xe;var I=YBe;Object.defineProperty(e,"shallowEqual",{enumerable:!0,get:function(){function F(){return W(I).default}return F}()}),e.isEmptyValue=ae,e.renderedDive=ye,e.loadCheerioRoot=He;var n=P0,r=W(n),C=pN,o=W(C),a=v4,s=W(a),A=MBe,l=W(A),c=S4,u=W(c),d=O0,h=W(d),m=iw,f=W(m),b=ZBe,p=W(b),y=$Be,Z=W(y),B=lu,G=lm,v=DI,w=uu,V=W(w),S=vk,X=W(S);function W(F){return F&&F.__esModule?F:{default:F}}function R(F,T,Y){return T in F?Object.defineProperty(F,T,{value:Y,enumerable:!0,configurable:!0,writable:!0}):F[T]=Y,F}function H(F,T){var Y={};for(var ie in F)T.indexOf(ie)>=0||Object.prototype.hasOwnProperty.call(F,ie)&&(Y[ie]=F[ie]);return Y}e.ITERATOR_SYMBOL=typeof Symbol=="function"&&Symbol.iterator;function k(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return console.warn("getAdapter from Utils is deprecated; please use ./getAdapter instead"),(0,V.default)(F)}function K(F,T){if(F&&T&&F!==T)throw new TypeError("If both the `attachTo` and `hydrateIn` options are provided, they must be === (for backwards compatibility)")}function D(F){var T=(0,G.get)(),Y=T.attachTo,ie=T.hydrateIn,me=H(T,["attachTo","hydrateIn"]);K(Y,ie);var Ve=F.attachTo,we=F.hydrateIn;K(Ve,we);var je=we||ie||Y||Ve||void 0,at=we||ie||void 0,bt=(0,r.default)({},je&&{attachTo:je},at&&{hydrateIn:at});return(0,r.default)({},me,F,bt)}function J(F,T){return(0,X.default)(T),T.isCustomComponent?!!T.isCustomComponent(F):typeof F=="function"}function P(F,T){return T.isCustomComponentElement?!!T.isCustomComponentElement(F):!!F&&T.isValidElement(F)&&typeof F.type=="function"}function te(F){return(0,l.default)(F&&F.props||{}).filter(function(T){var Y=i(T,2),ie=Y[1];return typeof ie<"u"}).reduce(function(T,Y){var ie=i(Y,2),me=ie[0],Ve=ie[1];return(0,r.default)(T,R({},me,Ve))},{})}function q(F){return F?F.type:null}function $(F,T){if(!T||!F)return!1;var Y=(0,V.default)();if(Y.displayNameOfNode){var ie=Y.displayNameOfNode(F);return ie===T}return F.type?typeof F.type=="string"?F.type===T:(typeof F.type=="function"?(0,u.default)(F.type)===T:F.type.name===T)||F.type.displayName===T:!1}function j(F,T,Y,ie){var me=ie?ne:be;if(F===T)return!0;if(!Array.isArray(F)&&!Array.isArray(T))return me(F,T,Y);var Ve=(0,f.default)(F,1/0),we=(0,f.default)(T,1/0);if(Ve.length!==we.length)return!1;if(Ve.length===0&&we.length===0)return!0;for(var je=0;je2&&arguments[2]!==void 0?arguments[2]:s.default;return he(F,T,Y,!0)}function be(F,T){var Y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:s.default;return he(F,T,Y,!1)}function pe(F,T,Y){var ie=(0,v.childrenOfNode)(T),me=function(we,je){return ve(F,ie.slice(je,je+Y.length),Y)};return ie.some(me)}function ve(F,T,Y){return T.length===Y.length&&T.every(function(ie,me){return F(ie,Y[me])})}function We(F){var T=[],Y=function(me){me===null||me===!1||typeof me>"u"||T.push(me)};return Array.isArray(F)?F.forEach(Y):Y(F),T}function Be(F){for(var T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,Y=We(F),ie=[],me=0;me"u"?ie.push(Ve):Je(Ve)&&Je(we)?ie.push(we+Ve):(ie.push(we),ie.push(Ve))}return T?ie.map(function(je){return typeof je=="string"?(0,p.default)(je):je}):ie}function Je(F){return typeof F=="string"||typeof F=="number"}function Pe(F,T){return T.isValidElement(F)||Je(F)||Array.isArray(F)}function De(F){var T=!1;typeof globalThis.document>"u"&&(T=!0,globalThis.document={}),F(),T&&(globalThis.document=void 0,delete globalThis.document)}function Qe(F){var T=F.slice().reverse();return function(Y){return T.every(function(ie){return ie(Y)})}}function _e(F){if(!F)return null;var T=F.type;return T?T.displayName||(typeof T=="function"?(0,u.default)(T):T.name||T):null}function gt(F){return typeof Symbol=="function"?Symbol.for("enzyme."+String(F)):F}function lt(F,T,Y){Object.defineProperty(F,T,{value:Y,enumerable:!1,writable:!0})}function tt(F,T,Y){return F.createElement(T.type,(0,r.default)({},T.props,Y))}function Xe(F,T){var Y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},ie=void 0,me=F[T],Ve=(0,h.default)(F,T),we=void 0;return Ve&&(we=Object.getOwnPropertyDescriptor(F,T)),Object.defineProperty(F,T,{configurable:!0,enumerable:!we||!!we.enumerable,value:Y(me)||function(){function je(){for(var at=arguments.length,bt=Array(at),ct=0;ct"'`]/g,TSt=RegExp(fRe.source),NSt={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},kSt=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,YSt=typeof self=="object"&&self&&self.Object===Object&&self,KSt=kSt||YSt||Function("return this")();function FSt(e){return function(g){return e==null?void 0:e[g]}}var DSt=FSt(NSt),xSt=Object.prototype,ESt=xSt.toString,Ore=KSt.Symbol,_re=Ore?Ore.prototype:void 0,Lre=_re?_re.toString:void 0;function MSt(e){if(typeof e=="string")return e;if(PSt(e))return Lre?Lre.call(e):"";var g=e+"";return g=="0"&&1/e==-XSt?"-0":g}function zSt(e){return!!e&&typeof e=="object"}function PSt(e){return typeof e=="symbol"||zSt(e)&&ESt.call(e)==HSt}function JSt(e){return e==null?"":MSt(e)}function OSt(e){return e=JSt(e),e&&TSt.test(e)?e.replace(fRe,DSt):e}var _St=OSt,LSt=String.prototype.valueOf,USt=function(g){try{return LSt.call(g),!0}catch{return!1}},QSt=Object.prototype.toString,jSt="[object String]",$St=gw(),pRe=function(g){return typeof g=="string"?!0:typeof g!="object"?!1:$St?USt(g):QSt.call(g)===jSt},qSt=Number.prototype.toString,ewt=function(g){try{return qSt.call(g),!0}catch{return!1}},twt=Object.prototype.toString,gwt="[object Number]",iwt=gw(),Iwt=function(g){return typeof g=="number"?!0:typeof g!="object"?!1:iwt?ewt(g):twt.call(g)===gwt},bRe=mr,nwt=bRe("Boolean.prototype.toString"),rwt=bRe("Object.prototype.toString"),Cwt=function(g){try{return nwt(g),!0}catch{return!1}},owt="[object Boolean]",awt=gw(),Awt=function(g){return typeof g=="boolean"?!0:g===null||typeof g!="object"?!1:awt&&Symbol.toStringTag in g?Cwt(g):rwt(g)===owt};Object.defineProperty(du,"__esModule",{value:!0});var Ure=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};du.typeName=GRe;du.spaces=vRe;du.indent=BRe;du.debugNode=ej;du.debugNodes=Wwt;var swt=_St,lwt=ol(swt),cwt=S4,yRe=ol(cwt),uwt=pRe,dwt=ol(uwt),hwt=Iwt,mwt=ol(hwt),fwt=y4,pwt=ol(fwt),bwt=Awt,ywt=ol(bwt),Zwt=Lve,bf=ol(Zwt),Gwt=O0,Um=ol(Gwt),ZRe=DI,vwt=uu,IP=ol(vwt);function ol(e){return e&&e.__esModule?e:{default:e}}var Bwt=Function.bind.call(Function.call,Boolean.prototype.valueOf);function GRe(e){var g=(0,IP.default)();return g.displayNameOfNode?(0,IP.default)().displayNameOfNode(e)||"Component":typeof e.type=="function"?e.type.displayName||(0,yRe.default)(e.type)||"Component":e.type}function vRe(e){return Array(e+1).join(" ")}function BRe(e,g){return g.split(` +`).map(function(i){return""+String(vRe(e))+String(i)}).join(` +`)}function Swt(e,g){return(0,dwt.default)(e)?(0,bf.default)(String(e),{quoteStyle:"double"}):(0,mwt.default)(e)?"{"+String((0,bf.default)(Number(e)))+"}":(0,ywt.default)(e)?"{"+String((0,bf.default)(Bwt(e)))+"}":(0,pwt.default)(e)?"{"+String((0,bf.default)(e))+"}":(typeof e>"u"?"undefined":Ure(e))==="object"?g.verbose?"{"+String((0,bf.default)(e))+"}":"{{...}}":"{["+(typeof e>"u"?"undefined":Ure(e))+"]}"}function wwt(e,g){var i=(0,ZRe.propsOfNode)(e),I=Object.keys(i).filter(function(n){return n!=="children"});return I.map(function(n){return String(n)+"="+String(Swt(i[n],g))}).join(" ")}function Rwt(e,g){return e.length?` +`+String(e.map(function(i){return BRe(g,i)}).join(` `))+` -`:""}function ywt(e){return(0,Lm.default)(e,"nodeType")&&typeof e.nodeType=="string"&&(0,Lm.default)(e,"type")&&(0,Lm.default)(e,"key")&&(0,Lm.default)(e,"ref")&&(0,Lm.default)(e,"instance")&&(0,Lm.default)(e,"rendered")}function L4(e){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof e=="string"||typeof e=="number")return(0,iwt.default)(e);if(typeof e=="function"){var i=(0,uRe.default)(e);return"[function"+(i?" "+String(i):"")+"]"}if(!e)return"";var n=(0,$z.default)();if(!n.isValidElement(e)&&!ywt(e))return"{"+String((0,pf.default)(e))+"}";var C=(0,dRe.childrenOfNode)(e).map(function(c){return L4(c,g,I)}).filter(Boolean),r=hRe(e),o=I.ignoreProps?"":pwt(e,I),a=o?" ":"",s=C.length?">":" ",A=bwt(C,g),l=C.length?"":"/>";return"<"+String(r)+a+String(o)+s+String(A)+l}function Zwt(e){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return e.map(function(I){return L4(I,void 0,g)}).join(` +`:""}function Vwt(e){return(0,Um.default)(e,"nodeType")&&typeof e.nodeType=="string"&&(0,Um.default)(e,"type")&&(0,Um.default)(e,"key")&&(0,Um.default)(e,"ref")&&(0,Um.default)(e,"instance")&&(0,Um.default)(e,"rendered")}function ej(e){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof e=="string"||typeof e=="number")return(0,lwt.default)(e);if(typeof e=="function"){var I=(0,yRe.default)(e);return"[function"+(I?" "+String(I):"")+"]"}if(!e)return"";var n=(0,IP.default)();if(!n.isValidElement(e)&&!Vwt(e))return"{"+String((0,bf.default)(e))+"}";var r=(0,ZRe.childrenOfNode)(e).map(function(c){return ej(c,g,i)}).filter(Boolean),C=GRe(e),o=i.ignoreProps?"":wwt(e,i),a=o?" ":"",s=r.length?">":" ",A=Rwt(r,g),l=r.length?"":"/>";return"<"+String(C)+a+String(o)+s+String(A)+l}function Wwt(e){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return e.map(function(i){return ej(i,void 0,g)}).join(` -`)}var $0={},$b={},U4={};Object.defineProperty(U4,"__esModule",{value:!0});var OCe=function(g){return JSON.stringify(g)},Gwt=function(g){var I=g.body,i=[],n=!0,C=!1,r=void 0;try{for(var o=I[Symbol.iterator](),a;!(n=(a=o.next()).done);n=!0){var s=a.value,A=void 0;if(s.type==="universalSelector")A="*";else if(s.type==="typeSelector")A=s.name;else if(s.type==="idSelector")A="#"+s.name;else if(s.type==="classSelector")A="."+s.name;else if(s.type==="attributePresenceSelector")A="["+s.name+"]";else if(s.type==="attributeValueSelector")A="["+s.name+s.operator+OCe(s.value)+"]";else if(s.type==="pseudoClassSelector")A=":"+s.name,s.parameters.length&&(A+="("+s.parameters.map(OCe).join(", ")+")");else if(s.type==="pseudoElementSelector")A="::"+s.name;else throw new Error("Unknown token.");i.push(A)}}catch(l){C=!0,r=l}finally{try{!n&&o.return&&o.return()}finally{if(C)throw r}}return i.join("")};U4.default=function(){var e=function(I){var i=[],n=!0,C=!1,r=void 0;try{for(var o=I[Symbol.iterator](),a;!(n=(a=o.next()).done);n=!0){var s=a.value;if(s.type==="selector")i.push(Gwt(s));else if(s.type==="descendantCombinator")i.push(" ");else if(s.type==="childCombinator")i.push(" > ");else if(s.type==="adjacentSiblingCombinator")i.push(" + ");else if(s.type==="generalSiblingCombinator")i.push(" ~ ");else throw new Error("Unknown token.")}}catch(A){C=!0,r=A}finally{try{!n&&o.return&&o.return()}finally{if(C)throw r}}return i.join("")};return{generate:e}};var Q4={},pRe={exports:{}};(function(e){(function(g,I){e.exports?e.exports=I():g.nearley=I()})($e,function(){function g(s,A,l){return this.id=++g.highestId,this.name=s,this.symbols=A,this.postprocess=l,this}g.highestId=0,g.prototype.toString=function(s){var A=typeof s>"u"?this.symbols.map(a).join(" "):this.symbols.slice(0,s).map(a).join(" ")+" ● "+this.symbols.slice(s).map(a).join(" ");return this.name+" → "+A};function I(s,A,l,c){this.rule=s,this.dot=A,this.reference=l,this.data=[],this.wantedBy=c,this.isComplete=this.dot===s.symbols.length}I.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},I.prototype.nextState=function(s){var A=new I(this.rule,this.dot+1,this.reference,this.wantedBy);return A.left=this,A.right=s,A.isComplete&&(A.data=A.build(),A.right=void 0),A},I.prototype.build=function(){var s=[],A=this;do s.push(A.right.data),A=A.left;while(A.left);return s.reverse(),s},I.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,r.fail))};function i(s,A){this.grammar=s,this.index=A,this.states=[],this.wants={},this.scannable=[],this.completed={}}i.prototype.process=function(s){for(var A=this.states,l=this.wants,c=this.completed,u=0;u ");else if(s.type==="adjacentSiblingCombinator")I.push(" + ");else if(s.type==="generalSiblingCombinator")I.push(" ~ ");else throw new Error("Unknown token.")}}catch(A){r=!0,C=A}finally{try{!n&&o.return&&o.return()}finally{if(r)throw C}}return I.join("")};return{generate:e}};var gj={},SRe={exports:{}};(function(e){(function(g,i){e.exports?e.exports=i():g.nearley=i()})($e,function(){function g(s,A,l){return this.id=++g.highestId,this.name=s,this.symbols=A,this.postprocess=l,this}g.highestId=0,g.prototype.toString=function(s){var A=typeof s>"u"?this.symbols.map(a).join(" "):this.symbols.slice(0,s).map(a).join(" ")+" ● "+this.symbols.slice(s).map(a).join(" ");return this.name+" → "+A};function i(s,A,l,c){this.rule=s,this.dot=A,this.reference=l,this.data=[],this.wantedBy=c,this.isComplete=this.dot===s.symbols.length}i.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},i.prototype.nextState=function(s){var A=new i(this.rule,this.dot+1,this.reference,this.wantedBy);return A.left=this,A.right=s,A.isComplete&&(A.data=A.build(),A.right=void 0),A},i.prototype.build=function(){var s=[],A=this;do s.push(A.right.data),A=A.left;while(A.left);return s.reverse(),s},i.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,C.fail))};function I(s,A){this.grammar=s,this.index=A,this.states=[],this.wants={},this.scannable=[],this.completed={}}I.prototype.process=function(s){for(var A=this.states,l=this.wants,c=this.completed,u=0;u0&&A.push(" ^ "+c+" more lines identical to this"),c=0,A.push(" "+h)),l=h}},r.prototype.getSymbolDisplay=function(s){return o(s)},r.prototype.buildFirstStateStack=function(s,A){if(A.indexOf(s)!==-1)return null;if(s.wantedBy.length===0)return[s];var l=s.wantedBy[0],c=[s].concat(A),u=this.buildFirstStateStack(l,c);return u===null?null:[s].concat(u)},r.prototype.save=function(){var s=this.table[this.current];return s.lexerState=this.lexerState,s},r.prototype.restore=function(s){var A=s.index;this.current=A,this.table[A]=s,this.table.splice(A+1),this.lexerState=s.lexerState,this.results=this.finish()},r.prototype.rewind=function(s){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[s])},r.prototype.finish=function(){var s=[],A=this.grammar.start,l=this.table[this.table.length-1];return l.states.forEach(function(c){c.rule.name===A&&c.dot===c.rule.symbols.length&&c.reference===0&&c.data!==r.fail&&s.push(c)}),s.map(function(c){return c.data})};function o(s){var A=typeof s;if(A==="string")return s;if(A==="object"){if(s.literal)return JSON.stringify(s.literal);if(s instanceof RegExp)return"character matching "+s;if(s.type)return s.type+" token";if(s.test)return"token matching "+String(s.test);throw new Error("Unknown symbol type: "+s)}}function a(s){var A=typeof s;if(A==="string")return s;if(A==="object"){if(s.literal)return JSON.stringify(s.literal);if(s instanceof RegExp)return s.toString();if(s.type)return"%"+s.type;if(s.test)return"<"+String(s.test)+">";throw new Error("Unknown symbol type: "+s)}}return{Parser:r,Grammar:n,Rule:g}})})(pRe);var vwt=pRe.exports,bRe={exports:{}},Bwt=1/0,Swt=9007199254740991,wwt="[object Arguments]",Rwt="[object Function]",Vwt="[object GeneratorFunction]",Wwt=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,Xwt=typeof self=="object"&&self&&self.Object===Object&&self,Hwt=Wwt||Xwt||Function("return this")();function Twt(e,g){for(var I=-1,i=g.length,n=e.length;++I0&&I(o)?g>1?ZRe(o,g-1,I,i,n):Twt(n,o):i||(n[n.length]=o)}return n}function Ywt(e){return Dwt(e)||Fwt(e)||!!(LCe&&e&&e[LCe])}function Kwt(e){var g=e?e.length:0;return g?ZRe(e,Bwt):[]}function Fwt(e){return Ewt(e)&&Nwt.call(e,"callee")&&(!kwt.call(e,"callee")||yRe.call(e)==wwt)}var Dwt=Array.isArray;function xwt(e){return e!=null&&zwt(e.length)&&!Mwt(e)}function Ewt(e){return Jwt(e)&&xwt(e)}function Mwt(e){var g=Pwt(e)?yRe.call(e):"";return g==Rwt||g==Vwt}function zwt(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Swt}function Pwt(e){var g=typeof e;return!!e&&(g=="object"||g=="function")}function Jwt(e){return!!e&&typeof e=="object"}var Owt=Kwt;(function(e){(function(){function g(l){return l[0]}var I=Owt,i=function(c,u){return function(d){return d[c].concat([d[u]])}},n=function(c){return c=c.filter(function(u){return u!==null}),I(c)},C={" ":"descendantCombinator","+":"adjacentSiblingCombinator",">":"childCombinator","~":"generalSiblingCombinator"},r=function(c){return(Array.isArray(c[0])?c[0]:[c[0]]).concat({type:C[c[2]]}).concat(c[4])},o=function(c,u,d){var h=I(c).join(""),m=parseFloat(h);return isNaN(m)?d:m},a=function(c,u,d){return c[0]==="true"?!0:c[0]==="false"?!1:d},s=function(c,u,d){if(c[0]==="NaN")return NaN;if(c[0]!=="undefined")return c[0]==="null"?null:d},A={Lexer:void 0,ParserRules:[{name:"combinator",symbols:["selector"]},{name:"combinator",symbols:["combinator","_",/[>+~ ]/,"_","selector"],postprocess:r},{name:"selector",symbols:["selectorBody"],postprocess:function(c){return{type:"selector",body:c[0]}}},{name:"selectorBody$ebnf$1",symbols:["typeSelector"],postprocess:g},{name:"selectorBody$ebnf$1",symbols:[],postprocess:function(c){return null}},{name:"selectorBody$ebnf$2",symbols:[]},{name:"selectorBody$ebnf$2",symbols:["selectorBody$ebnf$2","simpleSelector"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"selectorBody",symbols:["selectorBody$ebnf$1","selectorBody$ebnf$2"],postprocess:function(c,u,d){var h=n(c);return h.length?h:d}},{name:"selectorBody$ebnf$3",symbols:[]},{name:"selectorBody$ebnf$3",symbols:["selectorBody$ebnf$3","simpleSelector"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"selectorBody",symbols:["universalSelector","selectorBody$ebnf$3"],postprocess:n},{name:"simpleSelector",symbols:["idSelector"]},{name:"simpleSelector",symbols:["classSelector"]},{name:"simpleSelector",symbols:["attributeValueSelector"]},{name:"simpleSelector",symbols:["attributePresenceSelector"]},{name:"simpleSelector",symbols:["pseudoClassSelector"]},{name:"simpleSelector",symbols:["pseudoElementSelector"]},{name:"typeSelector",symbols:["attributeName"],postprocess:function(c){return{type:"typeSelector",name:c[0]}}},{name:"className$ebnf$1",symbols:[{literal:"-"}],postprocess:g},{name:"className$ebnf$1",symbols:[],postprocess:function(c){return null}},{name:"className$ebnf$2",symbols:[]},{name:"className$ebnf$2",symbols:["className$ebnf$2",/[_a-zA-Z0-9-]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"className",symbols:["className$ebnf$1",/[_a-zA-Z]/,"className$ebnf$2"],postprocess:function(c){return(c[0]||"")+c[1]+c[2].join("")}},{name:"attributeName$ebnf$1",symbols:[]},{name:"attributeName$ebnf$1",symbols:["attributeName$ebnf$1",/[_a-zA-Z()0-9-]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"attributeName",symbols:[/[_a-z()A-Z]/,"attributeName$ebnf$1"],postprocess:function(c){return c[0]+c[1].join("")}},{name:"classSelector",symbols:[{literal:"."},"className"],postprocess:function(c){return{type:"classSelector",name:c[1]}}},{name:"idSelector",symbols:[{literal:"#"},"attributeName"],postprocess:function(c){return{type:"idSelector",name:c[1]}}},{name:"universalSelector",symbols:[{literal:"*"}],postprocess:function(c){return{type:"universalSelector"}}},{name:"attributePresenceSelector",symbols:[{literal:"["},"attributeName",{literal:"]"}],postprocess:function(c){return{type:"attributePresenceSelector",name:c[1]}}},{name:"attributeOperator",symbols:[{literal:"="}]},{name:"attributeOperator$string$1",symbols:[{literal:"~"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$1"]},{name:"attributeOperator$string$2",symbols:[{literal:"|"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$2"]},{name:"attributeOperator$string$3",symbols:[{literal:"^"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$3"]},{name:"attributeOperator$string$4",symbols:[{literal:"$"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$4"]},{name:"attributeOperator$string$5",symbols:[{literal:"*"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$5"]},{name:"attributeValueSelector",symbols:[{literal:"["},"attributeName","attributeOperator","attributeValue",{literal:"]"}],postprocess:function(c){return{type:"attributeValueSelector",name:c[1],value:c[3],operator:c[2][0]}}},{name:"attributeValue",symbols:["falsyPrimitiveStrings"],postprocess:g},{name:"attributeValue",symbols:["numericValue"],postprocess:g},{name:"attributeValue",symbols:["sqstring"],postprocess:g},{name:"attributeValue",symbols:["dqstring"],postprocess:g},{name:"falsyPrimitiveStrings$string$1",symbols:[{literal:"f"},{literal:"a"},{literal:"l"},{literal:"s"},{literal:"e"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$1"],postprocess:a},{name:"falsyPrimitiveStrings$string$2",symbols:[{literal:"t"},{literal:"r"},{literal:"u"},{literal:"e"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$2"],postprocess:a},{name:"falsyPrimitiveStrings$string$3",symbols:[{literal:"N"},{literal:"a"},{literal:"N"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$3"],postprocess:s},{name:"falsyPrimitiveStrings$string$4",symbols:[{literal:"n"},{literal:"u"},{literal:"l"},{literal:"l"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$4"],postprocess:s},{name:"falsyPrimitiveStrings$string$5",symbols:[{literal:"u"},{literal:"n"},{literal:"d"},{literal:"e"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"e"},{literal:"d"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$5"],postprocess:s},{name:"numericValue",symbols:["int",{literal:"."},"int"],postprocess:o},{name:"numericValue",symbols:[{literal:"+"},"int",{literal:"."},"int"],postprocess:o},{name:"numericValue",symbols:[{literal:"-"},"int",{literal:"."},"int"],postprocess:o},{name:"numericValue",symbols:[{literal:"-"},"int"],postprocess:o},{name:"numericValue",symbols:["int"],postprocess:o},{name:"numericValue",symbols:[{literal:"+"},"int"],postprocess:o},{name:"numericValue$string$1",symbols:[{literal:"I"},{literal:"n"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"i"},{literal:"t"},{literal:"y"}],postprocess:function(c){return c.join("")}},{name:"numericValue",symbols:["numericValue$string$1"],postprocess:o},{name:"numericValue$string$2",symbols:[{literal:"+"},{literal:"I"},{literal:"n"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"i"},{literal:"t"},{literal:"y"}],postprocess:function(c){return c.join("")}},{name:"numericValue",symbols:["numericValue$string$2"],postprocess:o},{name:"numericValue$string$3",symbols:[{literal:"-"},{literal:"I"},{literal:"n"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"i"},{literal:"t"},{literal:"y"}],postprocess:function(c){return c.join("")}},{name:"numericValue",symbols:["numericValue$string$3"],postprocess:o},{name:"int$ebnf$1",symbols:[/[0-9]/]},{name:"int$ebnf$1",symbols:["int$ebnf$1",/[0-9]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"int",symbols:["int$ebnf$1"]},{name:"classParameters",symbols:[]},{name:"classParameters",symbols:["classParameter"]},{name:"classParameters",symbols:["classParameters",{literal:","},"_","classParameter"],postprocess:i(0,3)},{name:"classParameter$ebnf$1",symbols:[/[^()"', ]/]},{name:"classParameter$ebnf$1",symbols:["classParameter$ebnf$1",/[^()"', ]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"classParameter",symbols:["classParameter$ebnf$1"],postprocess:function(c){return c[0].join("")}},{name:"classParameter",symbols:["sqstring"],postprocess:g},{name:"classParameter",symbols:["dqstring"],postprocess:g},{name:"pseudoElementSelector$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:function(c){return c.join("")}},{name:"pseudoElementSelector",symbols:["pseudoElementSelector$string$1","pseudoClassSelectorName"],postprocess:function(c){return{type:"pseudoElementSelector",name:c[1]}}},{name:"pseudoClassSelector",symbols:[{literal:":"},"pseudoClassSelectorName"],postprocess:function(c){return{type:"pseudoClassSelector",name:c[1]}}},{name:"pseudoClassSelector",symbols:[{literal:":"},"pseudoClassSelectorName",{literal:"("},"classParameters",{literal:")"}],postprocess:function(c){return{type:"pseudoClassSelector",name:c[1],parameters:c[3]}}},{name:"pseudoClassSelectorName$ebnf$1",symbols:[/[a-zA-Z0-9-_]/]},{name:"pseudoClassSelectorName$ebnf$1",symbols:["pseudoClassSelectorName$ebnf$1",/[a-zA-Z0-9-_]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"pseudoClassSelectorName",symbols:[/[a-zA-Z]/,"pseudoClassSelectorName$ebnf$1"],postprocess:function(c){return c[0]+c[1].join("")}},{name:"dqstring$ebnf$1",symbols:[]},{name:"dqstring$ebnf$1",symbols:["dqstring$ebnf$1","dstrchar"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"dqstring",symbols:[{literal:'"'},"dqstring$ebnf$1",{literal:'"'}],postprocess:function(c){return c[1].join("")}},{name:"dstrchar",symbols:[/[^"]/],postprocess:g},{name:"dstrchar$string$1",symbols:[{literal:"\\"},{literal:'"'}],postprocess:function(c){return c.join("")}},{name:"dstrchar",symbols:["dstrchar$string$1"],postprocess:function(c){return'"'}},{name:"sqstring$ebnf$1",symbols:[]},{name:"sqstring$ebnf$1",symbols:["sqstring$ebnf$1","sstrchar"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"sqstring",symbols:[{literal:"'"},"sqstring$ebnf$1",{literal:"'"}],postprocess:function(c){return c[1].join("")}},{name:"sstrchar",symbols:[/[^']/],postprocess:g},{name:"sstrchar$string$1",symbols:[{literal:"\\"},{literal:"'"}],postprocess:function(c){return c.join("")}},{name:"sstrchar",symbols:["sstrchar$string$1"],postprocess:function(c){return"'"}},{name:"_$ebnf$1",symbols:[]},{name:"_$ebnf$1",symbols:["_$ebnf$1",/[ ]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"_",symbols:["_$ebnf$1"],postprocess:function(c){return null}}],ParserStart:"combinator"};e.exports=A})()})(bRe);var _wt=bRe.exports;Object.defineProperty(Q4,"__esModule",{value:!0});var Lwt=vwt,Uwt=_wt,UCe=Qwt(Uwt);function Qwt(e){return e&&e.__esModule?e:{default:e}}Q4.default=function(){var e=function(I){var i=new Lwt.Parser(UCe.default.ParserRules,UCe.default.ParserStart),n=i.feed(I).results;if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");return n[0]};return{parse:e}};Object.defineProperty($b,"__esModule",{value:!0});$b.createParser=$b.createGenerator=void 0;var jwt=U4,$wt=GRe(jwt),qwt=Q4,eRt=GRe(qwt);function GRe(e){return e&&e.__esModule?e:{default:e}}$b.createGenerator=$wt.default;$b.createParser=eRt.default;var tRt=z0,vRe=hC,gRt=vRe("Object.prototype.propertyIsEnumerable"),IRt=vRe("Array.prototype.push"),BRe=function(g){var I=tRt(g),i=[];for(var n in I)gRt(I,n)&&IRt(i,I[n]);return i},iRt=BRe,SRe=function(){return typeof Object.values=="function"?Object.values:iRt},nRt=SRe,CRt=Mn,rRt=function(){var g=nRt();return CRt(Object,{values:g},{values:function(){return Object.values!==g}}),g},oRt=Mn,aRt=il,ARt=BRe,wRe=SRe,sRt=rRt,RRe=aRt(wRe(),Object);oRt(RRe,{getPolyfill:wRe,implementation:ARt,shim:sRt});var lRt=RRe,cRt=qve,uRt=tBe(),dRt=IBe(),hRt=qS,mRt=iBe(),fRt=h4,pRt=pBe(),bRt=Uve,yRt=bBe,QCe=m4,ZRt=hC,GRt=lRe,jCe=Object("a"),vRt=jCe[0]!=="a"||!(0 in jCe),BRt=ZRt("String.prototype.split"),VRe=function(g){var I=yRt(this),i=vRt&&GRt(I)?BRt(I,""):I,n=pRt(i);if(!fRt(g))throw new TypeError("Array.prototype.filter callback must be a function");var C;arguments.length>1&&(C=arguments[1]);for(var r=cRt(I,0),o=0,a=0;o"u")return!1;if(g.type===KRe)return(0,gVt.default)(C,g.name);if((typeof o!="string"||typeof i!="string")&&I!==qCe)return!1;switch(I){case qCe:return(0,eVt.default)(o,i);case pVt:return o.split(" ").indexOf(i)!==-1;case bVt:return o===i||o.startsWith(String(i)+"-");case yVt:return i===""?!1:o.slice(0,i.length)===i;case ZVt:return i===""?!1:o.slice(-i.length)===i;case GVt:return i===""?!1:o.indexOf(i)!==-1;default:throw new Error('Enzyme::Selector: Unknown attribute selector operator "'+String(I)+'"')}}function vVt(e,g,I){var i=g.name,n=g.parameters;if(i==="not")return n.every(function(c){return bk(c,e).length===0});if(i==="empty")return(0,aC.treeFilter)(e,function(c){return c!==e}).length===0;if(i==="first-child"){var C=(0,aC.findParentNode)(I,e),r=C.rendered,o=LRt(r,1),a=o[0];return a===e}if(i==="last-child"){var s=(0,aC.findParentNode)(I,e),A=s.rendered;return A[A.length-1]===e}if(i==="focus"){if(typeof document>"u")throw new Error('Enzyme::Selector does not support the ":focus" pseudo-element without a global `document`.');var l=(0,kRe.default)();return document.activeElement&&l.nodeToHostNode(e)===document.activeElement}throw new TypeError('Enzyme::Selector does not support the "'+String(g.name)+'" pseudo-element or pseudo-class selectors.')}function BVt(e,g,I){if(e===null||typeof e=="string")return!1;switch(g.type){case dVt:return!0;case cVt:return(0,aC.hasClassName)(e,g.name);case lVt:return(0,NRe.nodeHasType)(e,g.name);case uVt:return(0,aC.nodeHasId)(e,g.name);case KRe:return ere(e,g);case hVt:return ere(e,g);case fVt:case mVt:return vVt(e,g,I);default:throw new Error("Unknown token type: "+String(g.type))}}function qz(e,g){return function(I){return e.body.every(function(i){return BVt(I,i,g)})}}function SVt(e){return e.some(function(g){return g.type!==YRe})}function xRe(e){if(typeof e=="string"){var g=DRe(e);if(SVt(g))throw new TypeError("This method does not support complex CSS selectors");return qz(g[0])}var I=(0,kRe.default)(),i=I.isValidElementType?I.isValidElementType(e):typeof e=="function";if(i)return function(C){return I.matchesElementType(C,e)};if((typeof e>"u"?"undefined":TRe(e))==="object"){if(!Array.isArray(e)&&e!==null&&Object.keys(e).length>0){var n=(0,jRt.default)(e).some(function(C){return typeof C>"u"});if(n)throw new TypeError("Enzyme::Props can’t have `undefined` values. Try using ‘findWhere()’ instead.");return function(C){return(0,aC.nodeMatchesObjectProps)(C,e)}}throw new TypeError("Enzyme::Selector does not support an array, null, or empty object as a selector")}throw new TypeError("Enzyme::Selector expects a string, object, or valid element type (Component Constructor)")}function wVt(e,g,I){return e.reduce(function(i,n){var C=(0,aC.findParentNode)(I,n);if(!C)return i;var r=(0,aC.childrenOfNode)(C),o=r.indexOf(n),a=r[o+1];return a&&g(a)&&i.push(a),i},[])}function RVt(e,g,I){return q4(function(i,n){var C=(0,aC.findParentNode)(I,n);if(!C)return i;var r=(0,aC.childrenOfNode)(C),o=r.indexOf(n),a=r.slice(o+1);return i.concat(a.filter(g))},e)}function VVt(e,g){return q4(function(I,i){return I.concat((0,aC.childrenOfNode)(i).filter(g))},e)}function WVt(e,g){return q4(function(I,i){return I.concat((0,aC.treeFilter)(i,g))},(0,$4.default)(e.map(aC.childrenOfNode)))}function bk(e,g){if(typeof e!="string"){var I=(0,iVt.default)(e);if(I.length>0)return(0,$4.default)(I.map(function(A){return bk(A.tag,g)}))}if(typeof e=="function"||(typeof e>"u"?"undefined":TRe(e))==="object")return(0,aC.treeFilter)(g,xRe(e));var i=[];if(typeof e=="string")for(var n=DRe(e),C=0;C2&&arguments[2]!==void 0?arguments[2]:u.treeFilter;return q.flatMap(function(te){return j(te.getNodeInternal(),$)})}function H(q,$){return q.wrap(q.getNodesInternal().filter($).filter(Boolean))}function Y(q){if(q[v].length!==1)throw new Error("getRootNodeInternal(wrapper) can only be called when wrapper wraps one node");return q[v]!==q?q[R][0]:q[v][y]}function K(q,$){return(0,u.parentsOfNode)($,Y(q))}function x(q,$){$?Array.isArray($)?((0,s.privateSet)(q,y,$[0]),(0,s.privateSet)(q,Z,$)):((0,s.privateSet)(q,y,$),(0,s.privateSet)(q,Z,[$])):((0,s.privateSet)(q,y,null),(0,s.privateSet)(q,Z,[])),(0,s.privateSet)(q,"length",q[Z].length)}var J=function(){function q($,j){var te=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(p(this,q),!globalThis.window&&!globalThis.document)throw new Error("It looks like you called `mount()` without a global document being loaded.");var Q=(0,s.makeOptions)(te);if(j)(0,s.privateSet)(this,B,j[B]),(0,s.privateSet)(this,v,j),x(this,$),(0,s.privateSet)(this,R,j[Z]),(0,s.privateSet)(this,w,j[w]),(0,s.privateSet)(this,X,[]);else{var ie=(0,l.default)(Q);if(!ie.isValidElement($))throw new TypeError("ReactWrapper can only wrap valid elements");var he=ie.createRenderer((0,n.default)({mode:"mount"},Q));if((0,s.privateSet)(this,B,he),he.render($,Q.context),(0,s.privateSet)(this,v,this),x(this,this[B].getNode()),(0,s.privateSet)(this,w,Q),(0,s.privateSet)(this,X,[]),(0,s.isCustomComponent)(Q.wrappingComponent,ie)){if(typeof this[B].getWrappingComponentRenderer!="function")throw new TypeError("your adapter does not support `wrappingComponent`. Try upgrading it!");(0,s.privateSet)(this,S,new P(this,this[B].getWrappingComponentRenderer())),this[X].push(this[S])}}(0,s.privateSet)(this,G,$),(0,s.privateSet)(this,W,null)}return I(q,[{key:"root",value:function(){function $(){return this[v]}return $}()},{key:"getNodeInternal",value:function(){function $(){if(this.length!==1)throw new Error("ReactWrapper::getNode() can only be called when wrapping one node");return this[Z][0]}return $}()},{key:"getNodesInternal",value:function(){function $(){return this[Z]}return $}()},{key:"getElement",value:function(){function $(){var j=this;return this.single("getElement",function(){return(0,l.default)(j[w]).nodeToElement(j[y])})}return $}()},{key:"getElements",value:function(){function $(){var j=this;return this[Z].map(function(te){return(0,l.default)(j[w]).nodeToElement(te)})}return $}()},{key:"getNode",value:function(){function $(){throw new Error("ReactWrapper::getNode() is no longer supported. Use ReactWrapper::instance() instead")}return $}()},{key:"getNodes",value:function(){function $(){throw new Error("ReactWrapper::getNodes() is no longer supported.")}return $}()},{key:"getDOMNode",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("getDOMNode",function(te){return j.nodeToHostNode(te,!0)})}return $}()},{key:"ref",value:function(){function $(j){if(this[v]!==this)throw new Error("ReactWrapper::ref(refname) can only be called on the root");return this.instance().refs[j]}return $}()},{key:"instance",value:function(){function $(){var j=this;return this.single("instance",function(){return j[y].instance})}return $}()},{key:"getWrappingComponent",value:function(){function $(){if(this[v]!==this)throw new Error("ReactWrapper::getWrappingComponent() can only be called on the root");if(!this[w].wrappingComponent)throw new Error("ReactWrapper::getWrappingComponent() can only be called on a wrapper that was originally passed a `wrappingComponent` option");return this[S]}return $}()},{key:"update",value:function(){function $(){var j=this,te=this[v];return this!==te?te.update():(x(this,this[B].getNode()),this[X].forEach(function(Q){if(Q!==j[W]){Q[W]=j;try{Q.update()}finally{Q[W]=null}}}),this)}return $}()},{key:"unmount",value:function(){function $(){var j=this;if(this[v]!==this)throw new Error("ReactWrapper::unmount() can only be called on the root");return this.single("unmount",function(){j[B].unmount(),j.update()}),this}return $}()},{key:"mount",value:function(){function $(){var j=this;if(this[v]!==this)throw new Error("ReactWrapper::mount() can only be called on the root");return this[B].render(this[G],this[w].context,function(){return j.update()}),this}return $}()},{key:"setProps",value:function(){function $(j){var te=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this[v]!==this)throw new Error("ReactWrapper::setProps() can only be called on the root");if(arguments.length>1&&typeof Q!="function")throw new TypeError("ReactWrapper::setProps() expects a function as its second argument");var ie=(0,l.default)(this[w]);return this[G]=(0,s.cloneElement)(ie,this[G],j),this[B].render(this[G],null,function(){te.update(),Q&&Q()}),this}return $}()},{key:"setState",value:function(){function $(j){var te=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this.instance()===null||this.getNodeInternal().nodeType!=="class")throw new Error("ReactWrapper::setState() can only be called on class components");if(arguments.length>1&&typeof Q!="function")throw new TypeError("ReactWrapper::setState() expects a function as its second argument");return this.instance().setState(j,function(){if(te.update(),Q){var ie=(0,l.default)(te[w]),he=te.instance();ie.invokeSetStateCallback?ie.invokeSetStateCallback(he,Q):Q.call(he)}}),this}return $}()},{key:"setContext",value:function(){function $(j){var te=this;if(this[v]!==this)throw new Error("ReactWrapper::setContext() can only be called on the root");if(!this[w].context)throw new Error("ReactWrapper::setContext() can only be called on a wrapper that was originally passed a context option");return this[B].render(this[G],j,function(){return te.update()}),this}return $}()},{key:"contains",value:function(){function $(j){var te=(0,l.default)(this[w]),Q=Array.isArray(j)?function(ie){return(0,s.containsChildrenSubArray)(s.nodeEqual,ie,j.map(function(he){return te.elementToNode(he)}))}:function(ie){return(0,s.nodeEqual)(te.elementToNode(j),ie)};return V(this,Q).length>0}return $}()},{key:"containsMatchingElement",value:function(){function $(j){var te=(0,l.default)(this[w]).elementToNode(j),Q=function(){function ie(he){return(0,s.nodeMatches)(te,he,function(ne,be){return ne<=be})}return ie}();return V(this,Q).length>0}return $}()},{key:"containsAllMatchingElements",value:function(){function $(j){var te=this;if(!Array.isArray(j))throw new TypeError("nodes should be an Array");return j.every(function(Q){return te.containsMatchingElement(Q)})}return $}()},{key:"containsAnyMatchingElements",value:function(){function $(j){var te=this;return Array.isArray(j)&&j.some(function(Q){return te.containsMatchingElement(Q)})}return $}()},{key:"equals",value:function(){function $(j){var te=this;return this.single("equals",function(){return(0,s.nodeEqual)(te.getNodeInternal(),j)})}return $}()},{key:"matchesElement",value:function(){function $(j){var te=this;return this.single("matchesElement",function(){var Q=(0,l.default)(te[w]),ie=Q.elementToNode(j);return(0,s.nodeMatches)(ie,te.getNodeInternal(),function(he,ne){return he<=ne})})}return $}()},{key:"find",value:function(){function $(j){return this.wrap((0,d.reduceTreesBySelector)(j,this.getNodesInternal()))}return $}()},{key:"is",value:function(){function $(j){var te=(0,d.buildPredicate)(j);return this.single("is",function(Q){return te(Q)})}return $}()},{key:"isEmptyRender",value:function(){function $(){var j=this.getNodeInternal();return(0,s.renderedDive)(j)}return $}()},{key:"filterWhere",value:function(){function $(j){var te=this;return H(this,function(Q){return j(te.wrap(Q))})}return $}()},{key:"filter",value:function(){function $(j){var te=(0,d.buildPredicate)(j);return H(this,te)}return $}()},{key:"not",value:function(){function $(j){var te=(0,d.buildPredicate)(j);return H(this,function(Q){return!te(Q)})}return $}()},{key:"text",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("text",function(te){return(0,u.getTextFromHostNodes)(te,j)})}return $}()},{key:"html",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("html",function(te){return(0,u.getHTMLFromHostNodes)(te,j)})}return $}()},{key:"render",value:function(){function $(){var j=this.html();return(0,s.loadCheerioRoot)(j)}return $}()},{key:"simulate",value:function(){function $(j){var te=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return this.single("simulate",function(ie){return te[B].simulateEvent(ie,j,Q),te[v].update(),te})}return $}()},{key:"simulateError",value:function(){function $(j){var te=this;if(this[v]===this)throw new Error("ReactWrapper::simulateError() may not be called on the root");return this.single("simulateError",function(Q){if(Q.nodeType==="host")throw new Error("ReactWrapper::simulateError() can only be called on custom components");var ie=te[B];if(typeof ie.simulateError!="function")throw new TypeError("your adapter does not support `simulateError`. Try upgrading it!");var he=Y(te),ne=[Q].concat(K(te,Q));return ie.simulateError(ne,he,j),te[v].update(),te})}return $}()},{key:"props",value:function(){function $(){return this.single("props",u.propsOfNode)}return $}()},{key:"state",value:function(){function $(j){var te=this,Q=this[v]===this?this[B].getNode():this.getNodeInternal();if(this.instance()===null||Q.nodeType!=="class")throw new Error("ReactWrapper::state() can only be called on class components");var ie=this.single("state",function(){return te.instance().state});if(typeof j<"u"){if(ie==null)throw new TypeError('ReactWrapper::state("'+String(j)+'") requires that `state` not be `null` or `undefined`');return ie[j]}return ie}return $}()},{key:"context",value:function(){function $(j){var te=this;if(this[v]!==this)throw new Error("ReactWrapper::context() can only be called on the root");var Q=this.single("context",function(){return te.instance()});if(Q===null)throw new Error("ReactWrapper::context() can only be called on components with instances");var ie=Q.context;return typeof j<"u"?ie[j]:ie}return $}()},{key:"children",value:function(){function $(j){var te=this.flatMap(function(Q){return(0,u.childrenOfNode)(Q.getNodeInternal())});return j?te.filter(j):te}return $}()},{key:"childAt",value:function(){function $(j){var te=this;return this.single("childAt",function(){return te.children().at(j)})}return $}()},{key:"parents",value:function(){function $(j){var te=this;return this.single("parents",function(Q){var ie=te.wrap(K(te,Q));return j?ie.filter(j):ie})}return $}()},{key:"parent",value:function(){function $(){return this.flatMap(function(j){return[j.parents().get(0)]})}return $}()},{key:"closest",value:function(){function $(j){if(this.is(j))return this;var te=this.parents().filter(j);return te.length>0?te.first():this.findWhere(function(){return!1})}return $}()},{key:"prop",value:function(){function $(j){return this.props()[j]}return $}()},{key:"invoke",value:function(){function $(j){var te=this;return this.single("invoke",function(){var Q=te.prop(j);if(typeof Q!="function")throw new TypeError("ReactWrapper::invoke() requires the name of a prop whose value is a function");return function(){for(var ie=arguments.length,he=Array(ie),ne=0;ne"u"?"undefined":g(ne))+"“");return function(){var be=ne.apply(void 0,arguments),pe=Q.wrap(be);return te.wrap(pe,null,te[w])}})}return $}()},{key:"key",value:function(){function $(){return this.single("key",function(j){return j.key===void 0?null:j.key})}return $}()},{key:"type",value:function(){function $(){return this.single("type",function(j){return(0,s.typeOfNode)(j)})}return $}()},{key:"name",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("name",function(te){return j.displayNameOfNode?j.displayNameOfNode(te):(0,s.displayNameOfNode)(te)})}return $}()},{key:"hasClass",value:function(){function $(j){return typeof j=="string"&&j.indexOf(".")!==-1&&console.warn("It looks like you're calling `ReactWrapper::hasClass()` with a CSS selector. hasClass() expects a class name, not a CSS selector."),this.single("hasClass",function(te){return(0,u.hasClassName)(te,j)})}return $}()},{key:"forEach",value:function(){function $(j){var te=this;return this.getNodesInternal().forEach(function(Q,ie){return j.call(te,te.wrap(Q),ie)}),this}return $}()},{key:"map",value:function(){function $(j){var te=this;return this.getNodesInternal().map(function(Q,ie){return j.call(te,te.wrap(Q),ie)})}return $}()},{key:"reduce",value:function(){function $(j){var te=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduce(function(ie,he,ne){return j.call(te,ie,te.wrap(he),ne)},Q):this.getNodesInternal().reduce(function(ie,he,ne){return j.call(te,ne===1?te.wrap(ie):ie,te.wrap(he),ne)})}return $}()},{key:"reduceRight",value:function(){function $(j){var te=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduceRight(function(ie,he,ne){return j.call(te,ie,te.wrap(he),ne)},Q):this.getNodesInternal().reduceRight(function(ie,he,ne){return j.call(te,ne===1?te.wrap(ie):ie,te.wrap(he),ne)})}return $}()},{key:"slice",value:function(){function $(j,te){return this.wrap(this.getNodesInternal().slice(j,te))}return $}()},{key:"some",value:function(){function $(j){if(this[v]===this)throw new Error("ReactWrapper::some() can not be called on the root");var te=(0,d.buildPredicate)(j);return this.getNodesInternal().some(te)}return $}()},{key:"someWhere",value:function(){function $(j){var te=this;return this.getNodesInternal().some(function(Q,ie){return j.call(te,te.wrap(Q),ie)})}return $}()},{key:"every",value:function(){function $(j){var te=(0,d.buildPredicate)(j);return this.getNodesInternal().every(te)}return $}()},{key:"everyWhere",value:function(){function $(j){var te=this;return this.getNodesInternal().every(function(Q,ie){return j.call(te,te.wrap(Q),ie)})}return $}()},{key:"flatMap",value:function(){function $(j){var te=this,Q=this.getNodesInternal().map(function(he,ne){return j.call(te,te.wrap(he),ne)}),ie=(0,r.default)(Q,1);return this.wrap(ie.filter(Boolean))}return $}()},{key:"findWhere",value:function(){function $(j){var te=this;return V(this,function(Q){var ie=te.wrap(Q);return ie.length>0&&j(ie)})}return $}()},{key:"get",value:function(){function $(j){return this.getElements()[j]}return $}()},{key:"at",value:function(){function $(j){var te=this.getNodesInternal();return j0&&arguments[0]!==void 0?arguments[0]:null;return arguments.length>0?this.find(j).exists():this.length>0}return $}()},{key:"single",value:function(){function $(j,te){var Q=typeof j=="string"?j:"unknown",ie=typeof te=="function"?te:j;if(this.length!==1)throw new Error("Method “"+Q+"” is meant to be run on 1 node. "+String(this.length)+" found instead.");return ie.call(this,this.getNodeInternal())}return $}()},{key:"wrap",value:function(){function $(j){var te=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this[v];if(j instanceof q)return j;for(var Q=arguments.length,ie=Array(Q>2?Q-2:0),he=2;he0&&arguments[0]!==void 0?arguments[0]:{};return(0,c.debugNodes)(this.getNodesInternal(),j)}return $}()},{key:"tap",value:function(){function $(j){return j(this),this}return $}()},{key:"detach",value:function(){function $(){if(this[v]!==this)throw new Error("ReactWrapper::detach() can only be called on the root");if(!this[w].attachTo)throw new Error("ReactWrapper::detach() can only be called on when the `attachTo` option was passed into `mount()`.");this[B].unmount()}return $}()},{key:"hostNodes",value:function(){function $(){return this.filterWhere(function(j){return typeof j.type()=="string"})}return $}()}]),q}(),P=function(q){b($,q);function $(j,te){p(this,$);var Q=f(this,($.__proto__||Object.getPrototypeOf($)).call(this,te.getNode(),j));return(0,s.privateSet)(Q,v,Q),(0,s.privateSet)(Q,B,te),Q[X].push(j),Q}return I($,[{key:"getWrappingComponent",value:function(){function j(){throw new TypeError("ReactWrapper::getWrappingComponent() can only be called on the root")}return j}()}]),$}(J);s.ITERATOR_SYMBOL&&Object.defineProperty(J.prototype,s.ITERATOR_SYMBOL,{configurable:!0,value:function(){function q(){var $,j=this[Z][s.ITERATOR_SYMBOL](),te=(0,l.default)(this[w]);return $={},m($,s.ITERATOR_SYMBOL,function(){return this}),m($,"next",function(){function Q(){var ie=j.next();return ie.done?{done:!0}:{done:!1,value:te.nodeToElement(ie.value)}}return Q}()),$}return q}()});function ge(q,$){Object.defineProperty(J.prototype,q,{get:function(){function j(){throw new Error(` +`)},C.prototype.displayStateStack=function(s,A){for(var l,c=0,u=0;u0&&A.push(" ^ "+c+" more lines identical to this"),c=0,A.push(" "+h)),l=h}},C.prototype.getSymbolDisplay=function(s){return o(s)},C.prototype.buildFirstStateStack=function(s,A){if(A.indexOf(s)!==-1)return null;if(s.wantedBy.length===0)return[s];var l=s.wantedBy[0],c=[s].concat(A),u=this.buildFirstStateStack(l,c);return u===null?null:[s].concat(u)},C.prototype.save=function(){var s=this.table[this.current];return s.lexerState=this.lexerState,s},C.prototype.restore=function(s){var A=s.index;this.current=A,this.table[A]=s,this.table.splice(A+1),this.lexerState=s.lexerState,this.results=this.finish()},C.prototype.rewind=function(s){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[s])},C.prototype.finish=function(){var s=[],A=this.grammar.start,l=this.table[this.table.length-1];return l.states.forEach(function(c){c.rule.name===A&&c.dot===c.rule.symbols.length&&c.reference===0&&c.data!==C.fail&&s.push(c)}),s.map(function(c){return c.data})};function o(s){var A=typeof s;if(A==="string")return s;if(A==="object"){if(s.literal)return JSON.stringify(s.literal);if(s instanceof RegExp)return"character matching "+s;if(s.type)return s.type+" token";if(s.test)return"token matching "+String(s.test);throw new Error("Unknown symbol type: "+s)}}function a(s){var A=typeof s;if(A==="string")return s;if(A==="object"){if(s.literal)return JSON.stringify(s.literal);if(s instanceof RegExp)return s.toString();if(s.type)return"%"+s.type;if(s.test)return"<"+String(s.test)+">";throw new Error("Unknown symbol type: "+s)}}return{Parser:C,Grammar:n,Rule:g}})})(SRe);var Hwt=SRe.exports,wRe={exports:{}},Twt=1/0,Nwt=9007199254740991,kwt="[object Arguments]",Ywt="[object Function]",Kwt="[object GeneratorFunction]",Fwt=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,Dwt=typeof self=="object"&&self&&self.Object===Object&&self,xwt=Fwt||Dwt||Function("return this")();function Ewt(e,g){for(var i=-1,I=g.length,n=e.length;++i0&&i(o)?g>1?VRe(o,g-1,i,I,n):Ewt(n,o):I||(n[n.length]=o)}return n}function Pwt(e){return _wt(e)||Owt(e)||!!($re&&e&&e[$re])}function Jwt(e){var g=e?e.length:0;return g?VRe(e,Twt):[]}function Owt(e){return Uwt(e)&&Mwt.call(e,"callee")&&(!zwt.call(e,"callee")||RRe.call(e)==kwt)}var _wt=Array.isArray;function Lwt(e){return e!=null&&jwt(e.length)&&!Qwt(e)}function Uwt(e){return qwt(e)&&Lwt(e)}function Qwt(e){var g=$wt(e)?RRe.call(e):"";return g==Ywt||g==Kwt}function jwt(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Nwt}function $wt(e){var g=typeof e;return!!e&&(g=="object"||g=="function")}function qwt(e){return!!e&&typeof e=="object"}var eRt=Jwt;(function(e){(function(){function g(l){return l[0]}var i=eRt,I=function(c,u){return function(d){return d[c].concat([d[u]])}},n=function(c){return c=c.filter(function(u){return u!==null}),i(c)},r={" ":"descendantCombinator","+":"adjacentSiblingCombinator",">":"childCombinator","~":"generalSiblingCombinator"},C=function(c){return(Array.isArray(c[0])?c[0]:[c[0]]).concat({type:r[c[2]]}).concat(c[4])},o=function(c,u,d){var h=i(c).join(""),m=parseFloat(h);return isNaN(m)?d:m},a=function(c,u,d){return c[0]==="true"?!0:c[0]==="false"?!1:d},s=function(c,u,d){if(c[0]==="NaN")return NaN;if(c[0]!=="undefined")return c[0]==="null"?null:d},A={Lexer:void 0,ParserRules:[{name:"combinator",symbols:["selector"]},{name:"combinator",symbols:["combinator","_",/[>+~ ]/,"_","selector"],postprocess:C},{name:"selector",symbols:["selectorBody"],postprocess:function(c){return{type:"selector",body:c[0]}}},{name:"selectorBody$ebnf$1",symbols:["typeSelector"],postprocess:g},{name:"selectorBody$ebnf$1",symbols:[],postprocess:function(c){return null}},{name:"selectorBody$ebnf$2",symbols:[]},{name:"selectorBody$ebnf$2",symbols:["selectorBody$ebnf$2","simpleSelector"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"selectorBody",symbols:["selectorBody$ebnf$1","selectorBody$ebnf$2"],postprocess:function(c,u,d){var h=n(c);return h.length?h:d}},{name:"selectorBody$ebnf$3",symbols:[]},{name:"selectorBody$ebnf$3",symbols:["selectorBody$ebnf$3","simpleSelector"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"selectorBody",symbols:["universalSelector","selectorBody$ebnf$3"],postprocess:n},{name:"simpleSelector",symbols:["idSelector"]},{name:"simpleSelector",symbols:["classSelector"]},{name:"simpleSelector",symbols:["attributeValueSelector"]},{name:"simpleSelector",symbols:["attributePresenceSelector"]},{name:"simpleSelector",symbols:["pseudoClassSelector"]},{name:"simpleSelector",symbols:["pseudoElementSelector"]},{name:"typeSelector",symbols:["attributeName"],postprocess:function(c){return{type:"typeSelector",name:c[0]}}},{name:"className$ebnf$1",symbols:[{literal:"-"}],postprocess:g},{name:"className$ebnf$1",symbols:[],postprocess:function(c){return null}},{name:"className$ebnf$2",symbols:[]},{name:"className$ebnf$2",symbols:["className$ebnf$2",/[_a-zA-Z0-9-]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"className",symbols:["className$ebnf$1",/[_a-zA-Z]/,"className$ebnf$2"],postprocess:function(c){return(c[0]||"")+c[1]+c[2].join("")}},{name:"attributeName$ebnf$1",symbols:[]},{name:"attributeName$ebnf$1",symbols:["attributeName$ebnf$1",/[_a-zA-Z()0-9-]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"attributeName",symbols:[/[_a-z()A-Z]/,"attributeName$ebnf$1"],postprocess:function(c){return c[0]+c[1].join("")}},{name:"classSelector",symbols:[{literal:"."},"className"],postprocess:function(c){return{type:"classSelector",name:c[1]}}},{name:"idSelector",symbols:[{literal:"#"},"attributeName"],postprocess:function(c){return{type:"idSelector",name:c[1]}}},{name:"universalSelector",symbols:[{literal:"*"}],postprocess:function(c){return{type:"universalSelector"}}},{name:"attributePresenceSelector",symbols:[{literal:"["},"attributeName",{literal:"]"}],postprocess:function(c){return{type:"attributePresenceSelector",name:c[1]}}},{name:"attributeOperator",symbols:[{literal:"="}]},{name:"attributeOperator$string$1",symbols:[{literal:"~"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$1"]},{name:"attributeOperator$string$2",symbols:[{literal:"|"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$2"]},{name:"attributeOperator$string$3",symbols:[{literal:"^"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$3"]},{name:"attributeOperator$string$4",symbols:[{literal:"$"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$4"]},{name:"attributeOperator$string$5",symbols:[{literal:"*"},{literal:"="}],postprocess:function(c){return c.join("")}},{name:"attributeOperator",symbols:["attributeOperator$string$5"]},{name:"attributeValueSelector",symbols:[{literal:"["},"attributeName","attributeOperator","attributeValue",{literal:"]"}],postprocess:function(c){return{type:"attributeValueSelector",name:c[1],value:c[3],operator:c[2][0]}}},{name:"attributeValue",symbols:["falsyPrimitiveStrings"],postprocess:g},{name:"attributeValue",symbols:["numericValue"],postprocess:g},{name:"attributeValue",symbols:["sqstring"],postprocess:g},{name:"attributeValue",symbols:["dqstring"],postprocess:g},{name:"falsyPrimitiveStrings$string$1",symbols:[{literal:"f"},{literal:"a"},{literal:"l"},{literal:"s"},{literal:"e"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$1"],postprocess:a},{name:"falsyPrimitiveStrings$string$2",symbols:[{literal:"t"},{literal:"r"},{literal:"u"},{literal:"e"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$2"],postprocess:a},{name:"falsyPrimitiveStrings$string$3",symbols:[{literal:"N"},{literal:"a"},{literal:"N"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$3"],postprocess:s},{name:"falsyPrimitiveStrings$string$4",symbols:[{literal:"n"},{literal:"u"},{literal:"l"},{literal:"l"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$4"],postprocess:s},{name:"falsyPrimitiveStrings$string$5",symbols:[{literal:"u"},{literal:"n"},{literal:"d"},{literal:"e"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"e"},{literal:"d"}],postprocess:function(c){return c.join("")}},{name:"falsyPrimitiveStrings",symbols:["falsyPrimitiveStrings$string$5"],postprocess:s},{name:"numericValue",symbols:["int",{literal:"."},"int"],postprocess:o},{name:"numericValue",symbols:[{literal:"+"},"int",{literal:"."},"int"],postprocess:o},{name:"numericValue",symbols:[{literal:"-"},"int",{literal:"."},"int"],postprocess:o},{name:"numericValue",symbols:[{literal:"-"},"int"],postprocess:o},{name:"numericValue",symbols:["int"],postprocess:o},{name:"numericValue",symbols:[{literal:"+"},"int"],postprocess:o},{name:"numericValue$string$1",symbols:[{literal:"I"},{literal:"n"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"i"},{literal:"t"},{literal:"y"}],postprocess:function(c){return c.join("")}},{name:"numericValue",symbols:["numericValue$string$1"],postprocess:o},{name:"numericValue$string$2",symbols:[{literal:"+"},{literal:"I"},{literal:"n"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"i"},{literal:"t"},{literal:"y"}],postprocess:function(c){return c.join("")}},{name:"numericValue",symbols:["numericValue$string$2"],postprocess:o},{name:"numericValue$string$3",symbols:[{literal:"-"},{literal:"I"},{literal:"n"},{literal:"f"},{literal:"i"},{literal:"n"},{literal:"i"},{literal:"t"},{literal:"y"}],postprocess:function(c){return c.join("")}},{name:"numericValue",symbols:["numericValue$string$3"],postprocess:o},{name:"int$ebnf$1",symbols:[/[0-9]/]},{name:"int$ebnf$1",symbols:["int$ebnf$1",/[0-9]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"int",symbols:["int$ebnf$1"]},{name:"classParameters",symbols:[]},{name:"classParameters",symbols:["classParameter"]},{name:"classParameters",symbols:["classParameters",{literal:","},"_","classParameter"],postprocess:I(0,3)},{name:"classParameter$ebnf$1",symbols:[/[^()"', ]/]},{name:"classParameter$ebnf$1",symbols:["classParameter$ebnf$1",/[^()"', ]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"classParameter",symbols:["classParameter$ebnf$1"],postprocess:function(c){return c[0].join("")}},{name:"classParameter",symbols:["sqstring"],postprocess:g},{name:"classParameter",symbols:["dqstring"],postprocess:g},{name:"pseudoElementSelector$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:function(c){return c.join("")}},{name:"pseudoElementSelector",symbols:["pseudoElementSelector$string$1","pseudoClassSelectorName"],postprocess:function(c){return{type:"pseudoElementSelector",name:c[1]}}},{name:"pseudoClassSelector",symbols:[{literal:":"},"pseudoClassSelectorName"],postprocess:function(c){return{type:"pseudoClassSelector",name:c[1]}}},{name:"pseudoClassSelector",symbols:[{literal:":"},"pseudoClassSelectorName",{literal:"("},"classParameters",{literal:")"}],postprocess:function(c){return{type:"pseudoClassSelector",name:c[1],parameters:c[3]}}},{name:"pseudoClassSelectorName$ebnf$1",symbols:[/[a-zA-Z0-9-_]/]},{name:"pseudoClassSelectorName$ebnf$1",symbols:["pseudoClassSelectorName$ebnf$1",/[a-zA-Z0-9-_]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"pseudoClassSelectorName",symbols:[/[a-zA-Z]/,"pseudoClassSelectorName$ebnf$1"],postprocess:function(c){return c[0]+c[1].join("")}},{name:"dqstring$ebnf$1",symbols:[]},{name:"dqstring$ebnf$1",symbols:["dqstring$ebnf$1","dstrchar"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"dqstring",symbols:[{literal:'"'},"dqstring$ebnf$1",{literal:'"'}],postprocess:function(c){return c[1].join("")}},{name:"dstrchar",symbols:[/[^"]/],postprocess:g},{name:"dstrchar$string$1",symbols:[{literal:"\\"},{literal:'"'}],postprocess:function(c){return c.join("")}},{name:"dstrchar",symbols:["dstrchar$string$1"],postprocess:function(c){return'"'}},{name:"sqstring$ebnf$1",symbols:[]},{name:"sqstring$ebnf$1",symbols:["sqstring$ebnf$1","sstrchar"],postprocess:function(c){return c[0].concat([c[1]])}},{name:"sqstring",symbols:[{literal:"'"},"sqstring$ebnf$1",{literal:"'"}],postprocess:function(c){return c[1].join("")}},{name:"sstrchar",symbols:[/[^']/],postprocess:g},{name:"sstrchar$string$1",symbols:[{literal:"\\"},{literal:"'"}],postprocess:function(c){return c.join("")}},{name:"sstrchar",symbols:["sstrchar$string$1"],postprocess:function(c){return"'"}},{name:"_$ebnf$1",symbols:[]},{name:"_$ebnf$1",symbols:["_$ebnf$1",/[ ]/],postprocess:function(c){return c[0].concat([c[1]])}},{name:"_",symbols:["_$ebnf$1"],postprocess:function(c){return null}}],ParserStart:"combinator"};e.exports=A})()})(wRe);var tRt=wRe.exports;Object.defineProperty(gj,"__esModule",{value:!0});var gRt=Hwt,iRt=tRt,qre=IRt(iRt);function IRt(e){return e&&e.__esModule?e:{default:e}}gj.default=function(){var e=function(i){var I=new gRt.Parser(qre.default.ParserRules,qre.default.ParserStart),n=I.feed(i).results;if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");return n[0]};return{parse:e}};Object.defineProperty(e0,"__esModule",{value:!0});e0.createParser=e0.createGenerator=void 0;var nRt=tj,rRt=WRe(nRt),CRt=gj,oRt=WRe(CRt);function WRe(e){return e&&e.__esModule?e:{default:e}}e0.createGenerator=rRt.default;e0.createParser=oRt.default;var aRt=J0,XRe=mr,ARt=XRe("Object.prototype.propertyIsEnumerable"),sRt=XRe("Array.prototype.push"),HRe=function(g){var i=aRt(g),I=[];for(var n in i)ARt(i,n)&&sRt(I,i[n]);return I},lRt=HRe,TRe=function(){return typeof Object.values=="function"?Object.values:lRt},cRt=TRe,uRt=Mn,dRt=function(){var g=cRt();return uRt(Object,{values:g},{values:function(){return Object.values!==g}}),g},hRt=Mn,mRt=nl,fRt=HRe,NRe=TRe,pRt=dRt,kRe=mRt(NRe(),Object);hRt(kRe,{getPolyfill:NRe,implementation:fRt,shim:pRt});var bRt=kRe,yRt=rBe,ZRt=oBe(),GRt=ABe(),vRt=tw,BRt=sBe(),SRt=Z4,wRt=SBe(),RRt=gBe,VRt=wBe,eCe=G4,WRt=mr,XRt=pRe,tCe=Object("a"),HRt=tCe[0]!=="a"||!(0 in tCe),TRt=WRt("String.prototype.split"),YRe=function(g){var i=VRt(this),I=HRt&&XRt(i)?TRt(i,""):i,n=wRt(I);if(!SRt(g))throw new TypeError("Array.prototype.filter callback must be a function");var r;arguments.length>1&&(r=arguments[1]);for(var C=yRt(i,0),o=0,a=0;o"u")return!1;if(g.type===PRe)return(0,AVt.default)(r,g.name);if((typeof o!="string"||typeof I!="string")&&i!==iCe)return!1;switch(i){case iCe:return(0,oVt.default)(o,I);case wVt:return o.split(" ").indexOf(I)!==-1;case RVt:return o===I||o.startsWith(String(I)+"-");case VVt:return I===""?!1:o.slice(0,I.length)===I;case WVt:return I===""?!1:o.slice(-I.length)===I;case XVt:return I===""?!1:o.indexOf(I)!==-1;default:throw new Error('Enzyme::Selector: Unknown attribute selector operator "'+String(i)+'"')}}function HVt(e,g,i){var I=g.name,n=g.parameters;if(I==="not")return n.every(function(c){return Sk(c,e).length===0});if(I==="empty")return(0,Ar.treeFilter)(e,function(c){return c!==e}).length===0;if(I==="first-child"){var r=(0,Ar.findParentNode)(i,e),C=r.rendered,o=gVt(C,1),a=o[0];return a===e}if(I==="last-child"){var s=(0,Ar.findParentNode)(i,e),A=s.rendered;return A[A.length-1]===e}if(I==="focus"){if(typeof document>"u")throw new Error('Enzyme::Selector does not support the ":focus" pseudo-element without a global `document`.');var l=(0,MRe.default)();return document.activeElement&&l.nodeToHostNode(e)===document.activeElement}throw new TypeError('Enzyme::Selector does not support the "'+String(g.name)+'" pseudo-element or pseudo-class selectors.')}function TVt(e,g,i){if(e===null||typeof e=="string")return!1;switch(g.type){case GVt:return!0;case yVt:return(0,Ar.hasClassName)(e,g.name);case bVt:return(0,ERe.nodeHasType)(e,g.name);case ZVt:return(0,Ar.nodeHasId)(e,g.name);case PRe:return ICe(e,g);case vVt:return ICe(e,g);case SVt:case BVt:return HVt(e,g,i);default:throw new Error("Unknown token type: "+String(g.type))}}function nP(e,g){return function(i){return e.body.every(function(I){return TVt(i,I,g)})}}function NVt(e){return e.some(function(g){return g.type!==zRe})}function _Re(e){if(typeof e=="string"){var g=ORe(e);if(NVt(g))throw new TypeError("This method does not support complex CSS selectors");return nP(g[0])}var i=(0,MRe.default)(),I=i.isValidElementType?i.isValidElementType(e):typeof e=="function";if(I)return function(r){return i.matchesElementType(r,e)};if((typeof e>"u"?"undefined":xRe(e))==="object"){if(!Array.isArray(e)&&e!==null&&Object.keys(e).length>0){var n=(0,nVt.default)(e).some(function(r){return typeof r>"u"});if(n)throw new TypeError("Enzyme::Props can’t have `undefined` values. Try using ‘findWhere()’ instead.");return function(r){return(0,Ar.nodeMatchesObjectProps)(r,e)}}throw new TypeError("Enzyme::Selector does not support an array, null, or empty object as a selector")}throw new TypeError("Enzyme::Selector expects a string, object, or valid element type (Component Constructor)")}function kVt(e,g,i){return e.reduce(function(I,n){var r=(0,Ar.findParentNode)(i,n);if(!r)return I;var C=(0,Ar.childrenOfNode)(r),o=C.indexOf(n),a=C[o+1];return a&&g(a)&&I.push(a),I},[])}function YVt(e,g,i){return nj(function(I,n){var r=(0,Ar.findParentNode)(i,n);if(!r)return I;var C=(0,Ar.childrenOfNode)(r),o=C.indexOf(n),a=C.slice(o+1);return I.concat(a.filter(g))},e)}function KVt(e,g){return nj(function(i,I){return i.concat((0,Ar.childrenOfNode)(I).filter(g))},e)}function FVt(e,g){return nj(function(i,I){return i.concat((0,Ar.treeFilter)(I,g))},(0,Ij.default)(e.map(Ar.childrenOfNode)))}function Sk(e,g){if(typeof e!="string"){var i=(0,lVt.default)(e);if(i.length>0)return(0,Ij.default)(i.map(function(A){return Sk(A.tag,g)}))}if(typeof e=="function"||(typeof e>"u"?"undefined":xRe(e))==="object")return(0,Ar.treeFilter)(g,_Re(e));var I=[];if(typeof e=="string")for(var n=ORe(e),r=0;r2&&arguments[2]!==void 0?arguments[2]:u.treeFilter;return q.flatMap(function(ge){return j(ge.getNodeInternal(),$)})}function H(q,$){return q.wrap(q.getNodesInternal().filter($).filter(Boolean))}function k(q){if(q[v].length!==1)throw new Error("getRootNodeInternal(wrapper) can only be called when wrapper wraps one node");return q[v]!==q?q[V][0]:q[v][y]}function K(q,$){return(0,u.parentsOfNode)($,k(q))}function D(q,$){$?Array.isArray($)?((0,s.privateSet)(q,y,$[0]),(0,s.privateSet)(q,Z,$)):((0,s.privateSet)(q,y,$),(0,s.privateSet)(q,Z,[$])):((0,s.privateSet)(q,y,null),(0,s.privateSet)(q,Z,[])),(0,s.privateSet)(q,"length",q[Z].length)}var J=function(){function q($,j){var ge=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(p(this,q),!globalThis.window&&!globalThis.document)throw new Error("It looks like you called `mount()` without a global document being loaded.");var Q=(0,s.makeOptions)(ge);if(j)(0,s.privateSet)(this,B,j[B]),(0,s.privateSet)(this,v,j),D(this,$),(0,s.privateSet)(this,V,j[Z]),(0,s.privateSet)(this,w,j[w]),(0,s.privateSet)(this,X,[]);else{var Ie=(0,l.default)(Q);if(!Ie.isValidElement($))throw new TypeError("ReactWrapper can only wrap valid elements");var he=Ie.createRenderer((0,n.default)({mode:"mount"},Q));if((0,s.privateSet)(this,B,he),he.render($,Q.context),(0,s.privateSet)(this,v,this),D(this,this[B].getNode()),(0,s.privateSet)(this,w,Q),(0,s.privateSet)(this,X,[]),(0,s.isCustomComponent)(Q.wrappingComponent,Ie)){if(typeof this[B].getWrappingComponentRenderer!="function")throw new TypeError("your adapter does not support `wrappingComponent`. Try upgrading it!");(0,s.privateSet)(this,S,new P(this,this[B].getWrappingComponentRenderer())),this[X].push(this[S])}}(0,s.privateSet)(this,G,$),(0,s.privateSet)(this,W,null)}return i(q,[{key:"root",value:function(){function $(){return this[v]}return $}()},{key:"getNodeInternal",value:function(){function $(){if(this.length!==1)throw new Error("ReactWrapper::getNode() can only be called when wrapping one node");return this[Z][0]}return $}()},{key:"getNodesInternal",value:function(){function $(){return this[Z]}return $}()},{key:"getElement",value:function(){function $(){var j=this;return this.single("getElement",function(){return(0,l.default)(j[w]).nodeToElement(j[y])})}return $}()},{key:"getElements",value:function(){function $(){var j=this;return this[Z].map(function(ge){return(0,l.default)(j[w]).nodeToElement(ge)})}return $}()},{key:"getNode",value:function(){function $(){throw new Error("ReactWrapper::getNode() is no longer supported. Use ReactWrapper::instance() instead")}return $}()},{key:"getNodes",value:function(){function $(){throw new Error("ReactWrapper::getNodes() is no longer supported.")}return $}()},{key:"getDOMNode",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("getDOMNode",function(ge){return j.nodeToHostNode(ge,!0)})}return $}()},{key:"ref",value:function(){function $(j){if(this[v]!==this)throw new Error("ReactWrapper::ref(refname) can only be called on the root");return this.instance().refs[j]}return $}()},{key:"instance",value:function(){function $(){var j=this;return this.single("instance",function(){return j[y].instance})}return $}()},{key:"getWrappingComponent",value:function(){function $(){if(this[v]!==this)throw new Error("ReactWrapper::getWrappingComponent() can only be called on the root");if(!this[w].wrappingComponent)throw new Error("ReactWrapper::getWrappingComponent() can only be called on a wrapper that was originally passed a `wrappingComponent` option");return this[S]}return $}()},{key:"update",value:function(){function $(){var j=this,ge=this[v];return this!==ge?ge.update():(D(this,this[B].getNode()),this[X].forEach(function(Q){if(Q!==j[W]){Q[W]=j;try{Q.update()}finally{Q[W]=null}}}),this)}return $}()},{key:"unmount",value:function(){function $(){var j=this;if(this[v]!==this)throw new Error("ReactWrapper::unmount() can only be called on the root");return this.single("unmount",function(){j[B].unmount(),j.update()}),this}return $}()},{key:"mount",value:function(){function $(){var j=this;if(this[v]!==this)throw new Error("ReactWrapper::mount() can only be called on the root");return this[B].render(this[G],this[w].context,function(){return j.update()}),this}return $}()},{key:"setProps",value:function(){function $(j){var ge=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this[v]!==this)throw new Error("ReactWrapper::setProps() can only be called on the root");if(arguments.length>1&&typeof Q!="function")throw new TypeError("ReactWrapper::setProps() expects a function as its second argument");var Ie=(0,l.default)(this[w]);return this[G]=(0,s.cloneElement)(Ie,this[G],j),this[B].render(this[G],null,function(){ge.update(),Q&&Q()}),this}return $}()},{key:"setState",value:function(){function $(j){var ge=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this.instance()===null||this.getNodeInternal().nodeType!=="class")throw new Error("ReactWrapper::setState() can only be called on class components");if(arguments.length>1&&typeof Q!="function")throw new TypeError("ReactWrapper::setState() expects a function as its second argument");return this.instance().setState(j,function(){if(ge.update(),Q){var Ie=(0,l.default)(ge[w]),he=ge.instance();Ie.invokeSetStateCallback?Ie.invokeSetStateCallback(he,Q):Q.call(he)}}),this}return $}()},{key:"setContext",value:function(){function $(j){var ge=this;if(this[v]!==this)throw new Error("ReactWrapper::setContext() can only be called on the root");if(!this[w].context)throw new Error("ReactWrapper::setContext() can only be called on a wrapper that was originally passed a context option");return this[B].render(this[G],j,function(){return ge.update()}),this}return $}()},{key:"contains",value:function(){function $(j){var ge=(0,l.default)(this[w]),Q=Array.isArray(j)?function(Ie){return(0,s.containsChildrenSubArray)(s.nodeEqual,Ie,j.map(function(he){return ge.elementToNode(he)}))}:function(Ie){return(0,s.nodeEqual)(ge.elementToNode(j),Ie)};return R(this,Q).length>0}return $}()},{key:"containsMatchingElement",value:function(){function $(j){var ge=(0,l.default)(this[w]).elementToNode(j),Q=function(){function Ie(he){return(0,s.nodeMatches)(ge,he,function(ne,be){return ne<=be})}return Ie}();return R(this,Q).length>0}return $}()},{key:"containsAllMatchingElements",value:function(){function $(j){var ge=this;if(!Array.isArray(j))throw new TypeError("nodes should be an Array");return j.every(function(Q){return ge.containsMatchingElement(Q)})}return $}()},{key:"containsAnyMatchingElements",value:function(){function $(j){var ge=this;return Array.isArray(j)&&j.some(function(Q){return ge.containsMatchingElement(Q)})}return $}()},{key:"equals",value:function(){function $(j){var ge=this;return this.single("equals",function(){return(0,s.nodeEqual)(ge.getNodeInternal(),j)})}return $}()},{key:"matchesElement",value:function(){function $(j){var ge=this;return this.single("matchesElement",function(){var Q=(0,l.default)(ge[w]),Ie=Q.elementToNode(j);return(0,s.nodeMatches)(Ie,ge.getNodeInternal(),function(he,ne){return he<=ne})})}return $}()},{key:"find",value:function(){function $(j){return this.wrap((0,d.reduceTreesBySelector)(j,this.getNodesInternal()))}return $}()},{key:"is",value:function(){function $(j){var ge=(0,d.buildPredicate)(j);return this.single("is",function(Q){return ge(Q)})}return $}()},{key:"isEmptyRender",value:function(){function $(){var j=this.getNodeInternal();return(0,s.renderedDive)(j)}return $}()},{key:"filterWhere",value:function(){function $(j){var ge=this;return H(this,function(Q){return j(ge.wrap(Q))})}return $}()},{key:"filter",value:function(){function $(j){var ge=(0,d.buildPredicate)(j);return H(this,ge)}return $}()},{key:"not",value:function(){function $(j){var ge=(0,d.buildPredicate)(j);return H(this,function(Q){return!ge(Q)})}return $}()},{key:"text",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("text",function(ge){return(0,u.getTextFromHostNodes)(ge,j)})}return $}()},{key:"html",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("html",function(ge){return(0,u.getHTMLFromHostNodes)(ge,j)})}return $}()},{key:"render",value:function(){function $(){var j=this.html();return(0,s.loadCheerioRoot)(j)}return $}()},{key:"simulate",value:function(){function $(j){var ge=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return this.single("simulate",function(Ie){return ge[B].simulateEvent(Ie,j,Q),ge[v].update(),ge})}return $}()},{key:"simulateError",value:function(){function $(j){var ge=this;if(this[v]===this)throw new Error("ReactWrapper::simulateError() may not be called on the root");return this.single("simulateError",function(Q){if(Q.nodeType==="host")throw new Error("ReactWrapper::simulateError() can only be called on custom components");var Ie=ge[B];if(typeof Ie.simulateError!="function")throw new TypeError("your adapter does not support `simulateError`. Try upgrading it!");var he=k(ge),ne=[Q].concat(K(ge,Q));return Ie.simulateError(ne,he,j),ge[v].update(),ge})}return $}()},{key:"props",value:function(){function $(){return this.single("props",u.propsOfNode)}return $}()},{key:"state",value:function(){function $(j){var ge=this,Q=this[v]===this?this[B].getNode():this.getNodeInternal();if(this.instance()===null||Q.nodeType!=="class")throw new Error("ReactWrapper::state() can only be called on class components");var Ie=this.single("state",function(){return ge.instance().state});if(typeof j<"u"){if(Ie==null)throw new TypeError('ReactWrapper::state("'+String(j)+'") requires that `state` not be `null` or `undefined`');return Ie[j]}return Ie}return $}()},{key:"context",value:function(){function $(j){var ge=this;if(this[v]!==this)throw new Error("ReactWrapper::context() can only be called on the root");var Q=this.single("context",function(){return ge.instance()});if(Q===null)throw new Error("ReactWrapper::context() can only be called on components with instances");var Ie=Q.context;return typeof j<"u"?Ie[j]:Ie}return $}()},{key:"children",value:function(){function $(j){var ge=this.flatMap(function(Q){return(0,u.childrenOfNode)(Q.getNodeInternal())});return j?ge.filter(j):ge}return $}()},{key:"childAt",value:function(){function $(j){var ge=this;return this.single("childAt",function(){return ge.children().at(j)})}return $}()},{key:"parents",value:function(){function $(j){var ge=this;return this.single("parents",function(Q){var Ie=ge.wrap(K(ge,Q));return j?Ie.filter(j):Ie})}return $}()},{key:"parent",value:function(){function $(){return this.flatMap(function(j){return[j.parents().get(0)]})}return $}()},{key:"closest",value:function(){function $(j){if(this.is(j))return this;var ge=this.parents().filter(j);return ge.length>0?ge.first():this.findWhere(function(){return!1})}return $}()},{key:"prop",value:function(){function $(j){return this.props()[j]}return $}()},{key:"invoke",value:function(){function $(j){var ge=this;return this.single("invoke",function(){var Q=ge.prop(j);if(typeof Q!="function")throw new TypeError("ReactWrapper::invoke() requires the name of a prop whose value is a function");return function(){for(var Ie=arguments.length,he=Array(Ie),ne=0;ne"u"?"undefined":g(ne))+"“");return function(){var be=ne.apply(void 0,arguments),pe=Q.wrap(be);return ge.wrap(pe,null,ge[w])}})}return $}()},{key:"key",value:function(){function $(){return this.single("key",function(j){return j.key===void 0?null:j.key})}return $}()},{key:"type",value:function(){function $(){return this.single("type",function(j){return(0,s.typeOfNode)(j)})}return $}()},{key:"name",value:function(){function $(){var j=(0,l.default)(this[w]);return this.single("name",function(ge){return j.displayNameOfNode?j.displayNameOfNode(ge):(0,s.displayNameOfNode)(ge)})}return $}()},{key:"hasClass",value:function(){function $(j){return typeof j=="string"&&j.indexOf(".")!==-1&&console.warn("It looks like you're calling `ReactWrapper::hasClass()` with a CSS selector. hasClass() expects a class name, not a CSS selector."),this.single("hasClass",function(ge){return(0,u.hasClassName)(ge,j)})}return $}()},{key:"forEach",value:function(){function $(j){var ge=this;return this.getNodesInternal().forEach(function(Q,Ie){return j.call(ge,ge.wrap(Q),Ie)}),this}return $}()},{key:"map",value:function(){function $(j){var ge=this;return this.getNodesInternal().map(function(Q,Ie){return j.call(ge,ge.wrap(Q),Ie)})}return $}()},{key:"reduce",value:function(){function $(j){var ge=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduce(function(Ie,he,ne){return j.call(ge,Ie,ge.wrap(he),ne)},Q):this.getNodesInternal().reduce(function(Ie,he,ne){return j.call(ge,ne===1?ge.wrap(Ie):Ie,ge.wrap(he),ne)})}return $}()},{key:"reduceRight",value:function(){function $(j){var ge=this,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduceRight(function(Ie,he,ne){return j.call(ge,Ie,ge.wrap(he),ne)},Q):this.getNodesInternal().reduceRight(function(Ie,he,ne){return j.call(ge,ne===1?ge.wrap(Ie):Ie,ge.wrap(he),ne)})}return $}()},{key:"slice",value:function(){function $(j,ge){return this.wrap(this.getNodesInternal().slice(j,ge))}return $}()},{key:"some",value:function(){function $(j){if(this[v]===this)throw new Error("ReactWrapper::some() can not be called on the root");var ge=(0,d.buildPredicate)(j);return this.getNodesInternal().some(ge)}return $}()},{key:"someWhere",value:function(){function $(j){var ge=this;return this.getNodesInternal().some(function(Q,Ie){return j.call(ge,ge.wrap(Q),Ie)})}return $}()},{key:"every",value:function(){function $(j){var ge=(0,d.buildPredicate)(j);return this.getNodesInternal().every(ge)}return $}()},{key:"everyWhere",value:function(){function $(j){var ge=this;return this.getNodesInternal().every(function(Q,Ie){return j.call(ge,ge.wrap(Q),Ie)})}return $}()},{key:"flatMap",value:function(){function $(j){var ge=this,Q=this.getNodesInternal().map(function(he,ne){return j.call(ge,ge.wrap(he),ne)}),Ie=(0,C.default)(Q,1);return this.wrap(Ie.filter(Boolean))}return $}()},{key:"findWhere",value:function(){function $(j){var ge=this;return R(this,function(Q){var Ie=ge.wrap(Q);return Ie.length>0&&j(Ie)})}return $}()},{key:"get",value:function(){function $(j){return this.getElements()[j]}return $}()},{key:"at",value:function(){function $(j){var ge=this.getNodesInternal();return j0&&arguments[0]!==void 0?arguments[0]:null;return arguments.length>0?this.find(j).exists():this.length>0}return $}()},{key:"single",value:function(){function $(j,ge){var Q=typeof j=="string"?j:"unknown",Ie=typeof ge=="function"?ge:j;if(this.length!==1)throw new Error("Method “"+Q+"” is meant to be run on 1 node. "+String(this.length)+" found instead.");return Ie.call(this,this.getNodeInternal())}return $}()},{key:"wrap",value:function(){function $(j){var ge=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this[v];if(j instanceof q)return j;for(var Q=arguments.length,Ie=Array(Q>2?Q-2:0),he=2;he0&&arguments[0]!==void 0?arguments[0]:{};return(0,c.debugNodes)(this.getNodesInternal(),j)}return $}()},{key:"tap",value:function(){function $(j){return j(this),this}return $}()},{key:"detach",value:function(){function $(){if(this[v]!==this)throw new Error("ReactWrapper::detach() can only be called on the root");if(!this[w].attachTo)throw new Error("ReactWrapper::detach() can only be called on when the `attachTo` option was passed into `mount()`.");this[B].unmount()}return $}()},{key:"hostNodes",value:function(){function $(){return this.filterWhere(function(j){return typeof j.type()=="string"})}return $}()}]),q}(),P=function(q){b($,q);function $(j,ge){p(this,$);var Q=f(this,($.__proto__||Object.getPrototypeOf($)).call(this,ge.getNode(),j));return(0,s.privateSet)(Q,v,Q),(0,s.privateSet)(Q,B,ge),Q[X].push(j),Q}return i($,[{key:"getWrappingComponent",value:function(){function j(){throw new TypeError("ReactWrapper::getWrappingComponent() can only be called on the root")}return j}()}]),$}(J);s.ITERATOR_SYMBOL&&Object.defineProperty(J.prototype,s.ITERATOR_SYMBOL,{configurable:!0,value:function(){function q(){var $,j=this[Z][s.ITERATOR_SYMBOL](),ge=(0,l.default)(this[w]);return $={},m($,s.ITERATOR_SYMBOL,function(){return this}),m($,"next",function(){function Q(){var Ie=j.next();return Ie.done?{done:!0}:{done:!1,value:ge.nodeToElement(Ie.value)}}return Q}()),$}return q}()});function te(q,$){Object.defineProperty(J.prototype,q,{get:function(){function j(){throw new Error(` Attempted to access ReactWrapper::`+String(q)+`, which was previously a private property on Enzyme ReactWrapper instances, but is no longer and should not be relied upon. `+String($)+` - `)}return j}(),enumerable:!1,configurable:!1})}ge("node","Consider using the getElement() method instead."),ge("nodes","Consider using the getElements() method instead."),ge("renderer",""),ge("options",""),ge("complexSelector",""),e.default=J})(I4);var ej={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});var g=function(){function Xe(ae,ye,He){ae===null&&(ae=Function.prototype);var F=Object.getOwnPropertyDescriptor(ae,ye);if(F===void 0){var T=Object.getPrototypeOf(ae);return T===null?void 0:Xe(T,ye,He)}else{if("value"in F)return F.value;var k=F.get;return k===void 0?void 0:k.call(He)}}return Xe}(),I=function(){function Xe(ae,ye){for(var He=0;He2&&arguments[2]!==void 0?arguments[2]:m.treeFilter;return Xe.flatMap(function(He){return ye(He.getNodeInternal(),ae)})}function q(Xe,ae){return Xe.wrap(Xe.getNodesInternal().filter(ae).filter(Boolean))}function $(Xe){var ae=Xe.lifecycleExperimental,ye=Xe.disableLifecycleMethods,He=Xe.enableComponentDidUpdateOnSetState,F=Xe.supportPrevContextArgumentOfComponentDidUpdate,T=Xe.lifecycles;if(typeof ae<"u"&&typeof ae!="boolean")throw new Error("lifecycleExperimental must be either true or false if provided");if(typeof ye<"u"&&typeof ye!="boolean")throw new Error("disableLifecycleMethods must be either true or false if provided");if(ae!=null&&ye!=null&&ae===ye)throw new Error("lifecycleExperimental and disableLifecycleMethods cannot be set to the same value");if(typeof He<"u"&&T.componentDidUpdate&&T.componentDidUpdate.onSetState!==He)throw new TypeError("the legacy enableComponentDidUpdateOnSetState option should be matched by `lifecycles: { componentDidUpdate: { onSetState: true } }`, for compatibility");if(typeof F<"u"&&T.componentDidUpdate&&T.componentDidUpdate.prevContext!==F)throw new TypeError("the legacy supportPrevContextArgumentOfComponentDidUpdate option should be matched by `lifecycles: { componentDidUpdate: { prevContext: true } }`, for compatibility")}function j(Xe){var ae=Xe.options,ye=ae.lifecycles,He=ye===void 0?{}:ye,F=ae.enableComponentDidUpdateOnSetState,T=ae.supportPrevContextArgumentOfComponentDidUpdate,k=typeof F<"u",Ie=typeof T<"u",me=k||Ie?(0,C.default)({},k&&{onSetState:!!F},Ie&&{prevContext:!!T}):null,Ve=He.getDerivedStateFromProps,we=Ve?{hasShouldComponentUpdateBug:!!Ve.hasShouldComponentUpdateBug}:!1;return(0,C.default)({},He,{setState:(0,C.default)({},He.setState),getChildContext:(0,C.default)({calledByRenderer:!0},He.getChildContext)},me&&{componentDidUpdate:me},{getDerivedStateFromProps:we})}function te(Xe){return Xe.nodeType==="host"?Xe:Xe.rendered}function Q(Xe){if(Xe[X].length!==1)throw new Error("getRootNodeInternal(wrapper) can only be called when wrapper wraps one node");return Xe[X]!==Xe?Xe[H][0]:Xe[X][v]}function ie(Xe,ae){return(0,m.parentsOfNode)(ae,Q(Xe))}function he(Xe,ae){Array.isArray(ae)?((0,c.privateSet)(Xe,v,ae[0]),(0,c.privateSet)(Xe,w,ae)):((0,c.privateSet)(Xe,v,ae),(0,c.privateSet)(Xe,w,[ae])),(0,c.privateSet)(Xe,"length",Xe[w].length)}function ne(Xe,ae,ye,He){return!(0,l.default)(Xe,ae)||!(0,l.default)(ye,He)}function be(Xe){return Xe&&Xe.isPureReactComponent}function pe(Xe,ae,ye){var He=Xe.instance,F=Xe.type,T=(0,c.displayNameOfNode)(Xe);if(i(F.childContextTypes)!=="object")return console.warn(String(T)+".getChildContext(): childContextTypes must be defined in order to use getChildContext()."),{};var k=He.getChildContext();return Object.keys(k).forEach(function(Ie){if(!(Ie in F.childContextTypes))throw new Error(String(T)+'.getChildContext(): key "'+String(Ie)+'" is not defined in childContextTypes.')}),typeof ye.checkPropTypes=="function"&&ye.checkPropTypes(F.childContextTypes,k,"child context",ae),k}function ve(Xe,ae){return!(0,c.isCustomComponentElement)(Xe,ae)||!Xe.type.prototype||typeof Xe.type.prototype.getChildContext!="function"?null:(0,c.spyMethod)(Xe.type.prototype,"getChildContext")}function We(Xe,ae,ye,He,F){var T=ae[R];if(Xe.options.legacyContextMode==="parent")if(F)(0,c.privateSet)(ae,Y,F.getLastReturnValue()),F.restore();else if(typeof ye.getChildContext=="function"){var k=[ae[v]].concat(ie(ae,ae[v])),Ie=pe(He,k,T);(0,c.privateSet)(ae,Y,Ie)}else(0,c.privateSet)(ae,Y,null)}function Be(Xe,ae){var ye=Xe.type.getDerivedStateFromProps;if(typeof ye=="function")var He=Xe.instance,F=(0,c.spyMethod)(He,"shouldComponentUpdate",function(k){return function(){function Ie(){He.state=ae;for(var me=arguments.length,Ve=Array(me),we=0;we1&&arguments[1]!==void 0?arguments[1]:{},ye=(0,C.default)({},Xe[W],ae,{context:ae.context||(0,C.default)({},Xe[W].context,Xe[X][Y])});return(0,c.privateSet)(ye,P,Xe[X][P]),ye}var _e=function(){function Xe(ae,ye){var He=this,F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};B(this,Xe),$(F);var T=De(ae,ye,F,this),k=(0,d.default)(T),Ie=j(k);if(ye)(0,c.privateSet)(this,X,ye),(0,c.privateSet)(this,S,null),(0,c.privateSet)(this,R,ye[R]),he(this,ae),(0,c.privateSet)(this,W,ye[W]),(0,c.privateSet)(this,H,ye[w]),(0,c.privateSet)(this,P,null);else{if(!k.isValidElement(ae))throw new TypeError("ShallowWrapper can only wrap valid elements");var me=Ie.getChildContext.calledByRenderer?ve(ae,k):null;(0,c.privateSet)(this,X,this),(0,c.privateSet)(this,S,ae);var Ve=k.createRenderer((0,C.default)({mode:"shallow"},T));(0,c.privateSet)(this,R,Ve);var we=new Map(T[P]||[]);this[R].render(ae,T.context,{providerValues:we});var je=this[R].getNode();he(this,te(je)),(0,c.privateSet)(this,W,T),(0,c.privateSet)(this,P,we);var at=je.instance;at&&!T.disableLifecycleMethods&&(Ie.componentDidUpdate.onSetState&&!at[V]&&((0,c.privateSet)(at,V,at.setState),at.setState=function(bt){var ct=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return He.setState.apply(He,Z(ct==null?[bt]:[bt,ct]))}),typeof at.componentDidMount=="function"&&this[R].batchedUpdates(function(){at.componentDidMount()}),We(k,this,at,je,me))}}return I(Xe,[{key:"root",value:function(){function ae(){return this[X]}return ae}()},{key:"getNodeInternal",value:function(){function ae(){if(this.length!==1)throw new Error("ShallowWrapper::getNode() can only be called when wrapping one node");return this[X]===this&&this.update(),this[v]}return ae}()},{key:"getNodesInternal",value:function(){function ae(){return this[X]===this&&this.length===1&&this.update(),this[w]}return ae}()},{key:"getElement",value:function(){function ae(){var ye=this;return this.single("getElement",function(He){return(0,d.default)(ye[W]).nodeToElement(He)})}return ae}()},{key:"getElements",value:function(){function ae(){var ye=this;return this.getNodesInternal().map(function(He){return(0,d.default)(ye[W]).nodeToElement(He)})}return ae}()},{key:"getNode",value:function(){function ae(){throw new Error("ShallowWrapper::getNode() is no longer supported. Use ShallowWrapper::getElement() instead")}return ae}()},{key:"getNodes",value:function(){function ae(){throw new Error("ShallowWrapper::getNodes() is no longer supported. Use ShallowWrapper::getElements() instead")}return ae}()},{key:"instance",value:function(){function ae(){if(this[X]!==this)throw new Error("ShallowWrapper::instance() can only be called on the root");return this[R].getNode().instance}return ae}()},{key:"getWrappingComponent",value:function(){function ae(){if(this[X]!==this)throw new Error("ShallowWrapper::getWrappingComponent() can only be called on the root");if(!this[W].wrappingComponent)throw new Error("ShallowWrapper::getWrappingComponent() can only be called on a wrapper that was originally passed a `wrappingComponent` option");return this[K]}return ae}()},{key:"update",value:function(){function ae(){if(this[X]!==this)throw new Error("ShallowWrapper::update() can only be called on the root");if(this.length!==1)throw new Error("ShallowWrapper::update() can only be called when wrapping one node");return he(this,te(this[R].getNode())),this}return ae}()},{key:"unmount",value:function(){function ae(){return this[R].unmount(),this[X][K]&&this[X][K].unmount(),this}return ae}()},{key:"rerender",value:function(){function ae(ye,He){var F=this,T=(0,d.default)(this[W]);return this.single("rerender",function(){(0,c.withSetStateAllowed)(function(){var k=F[R].getNode(),Ie=k.instance||{},me=k.type||{},Ve=Ie.state,we=Ie.props||F[S].props,je=Ie.context||F[W].context,at=He||je;He&&(F[W]=(0,C.default)({},F[W],{context:at})),F[R].batchedUpdates(function(){var bt=j(T),ct=!0,Ht=void 0,Ce=void 0;if(!F[W].disableLifecycleMethods&&Ie){if(typeof Ie.shouldComponentUpdate=="function"){var E=bt.getDerivedStateFromProps;E&&E.hasShouldComponentUpdateBug&&Be(k,Ve),Ht=(0,c.spyMethod)(Ie,"shouldComponentUpdate")}bt.getChildContext.calledByRenderer&&typeof Ie.getChildContext=="function"&&(Ce=(0,c.spyMethod)(Ie,"getChildContext"))}if(!Ht&&be(Ie)&&(ct=ne(we,ye,Ve,Ie.state)),ye&&(F[S]=(0,c.cloneElement)(T,F[S],ye)),F[R].render(F[S],at,{providerValues:F[P]}),Ht&&(ct=Ht.getLastReturnValue(),Ht.restore()),ct&&!F[W].disableLifecycleMethods&&Ie)if(We(T,F,Ie,k,Ce),bt.getSnapshotBeforeUpdate){var _=void 0;typeof Ie.getSnapshotBeforeUpdate=="function"&&(_=Ie.getSnapshotBeforeUpdate(we,Ve)),bt.componentDidUpdate&&typeof Ie.componentDidUpdate=="function"&&(!Ve||(0,l.default)(Ve,F.instance().state)||typeof me.getDerivedStateFromProps=="function")&&Ie.componentDidUpdate(we,Ve,_)}else bt.componentDidUpdate&&typeof Ie.componentDidUpdate=="function"&&(bt.componentDidUpdate.prevContext?Ie.componentDidUpdate(we,Ve,je):(!Ve||(0,l.default)(F.instance().state,Ve))&&Ie.componentDidUpdate(we,Ve));else(0,l.default)(ye,Ie.props)||(Ie.props=(Object.freeze||Object)((0,C.default)({},Ie.props,ye)));F.update()})})}),this}return ae}()},{key:"setProps",value:function(){function ae(ye){var He=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this[X]!==this)throw new Error("ShallowWrapper::setProps() can only be called on the root");if(arguments.length>1&&typeof He!="function")throw new TypeError("ReactWrapper::setProps() expects a function as its second argument");return this.rerender(ye),He&&He(),this}return ae}()},{key:"setState",value:function(){function ae(ye){var He=this,F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this[X]!==this)throw new Error("ShallowWrapper::setState() can only be called on the root");if(this.instance()===null||this[R].getNode().nodeType!=="class")throw new Error("ShallowWrapper::setState() can only be called on class components");if(arguments.length>1&&typeof F!="function")throw new TypeError("ReactWrapper::setState() expects a function as its second argument");return this.single("setState",function(){(0,c.withSetStateAllowed)(function(){var T=(0,d.default)(He[W]),k=j(T),Ie=He[R].getNode(),me=Ie.instance,Ve=me.props,we=me.state,je=me.context,at=typeof ye=="function"?ye.call(me,we,Ve):ye,bt=!k.setState.skipsComponentDidUpdateOnNullish||at!=null,ct=void 0,Ht=void 0,Ce=!0;if(!He[W].disableLifecycleMethods&&me){if(k.componentDidUpdate&&k.componentDidUpdate.onSetState&&typeof me.shouldComponentUpdate=="function"){var E=k.getDerivedStateFromProps;E&&E.hasShouldComponentUpdateBug&&Be(Ie,ye),ct=(0,c.spyMethod)(me,"shouldComponentUpdate")}k.getChildContext.calledByRenderer&&typeof me.getChildContext=="function"&&(Ht=(0,c.spyMethod)(me,"getChildContext"))}if(!ct&&be(me)&&(Ce=ne(Ve,me.props,we,(0,C.default)({},we,at))),me[V]?me[V](at):me.setState(at),ct&&(Ce=ct.getLastReturnValue(),ct.restore()),bt&&Ce&&!He[W].disableLifecycleMethods&&(We(T,He,me,Ie,Ht),k.componentDidUpdate&&k.componentDidUpdate.onSetState))if(k.getSnapshotBeforeUpdate&&typeof me.getSnapshotBeforeUpdate=="function"){var _=me.getSnapshotBeforeUpdate(Ve,we);typeof me.componentDidUpdate=="function"&&me.componentDidUpdate(Ve,we,_)}else typeof me.componentDidUpdate=="function"&&(k.componentDidUpdate.prevContext?me.componentDidUpdate(Ve,we,je):me.componentDidUpdate(Ve,we));He.update(),F&&(T.invokeSetStateCallback?T.invokeSetStateCallback(me,F):F.call(me))})}),this}return ae}()},{key:"setContext",value:function(){function ae(ye){if(this[X]!==this)throw new Error("ShallowWrapper::setContext() can only be called on the root");if(!this[W].context)throw new Error("ShallowWrapper::setContext() can only be called on a wrapper that was originally passed a context option");return this.rerender(null,ye)}return ae}()},{key:"contains",value:function(){function ae(ye){var He=(0,d.default)(this[W]);if(!(0,c.isReactElementAlike)(ye,He))throw new Error("ShallowWrapper::contains() can only be called with a ReactElement (or an array of them), a string, or a number as an argument.");var F=Array.isArray(ye)?function(T){return(0,c.containsChildrenSubArray)(c.nodeEqual,T,ye.map(function(k){return He.elementToNode(k)}))}:function(T){return(0,c.nodeEqual)(He.elementToNode(ye),T)};return ge(this,F).length>0}return ae}()},{key:"containsMatchingElement",value:function(){function ae(ye){var He=(0,d.default)(this[W]),F=He.elementToNode(ye),T=function(){function k(Ie){return(0,c.nodeMatches)(F,Ie,function(me,Ve){return me<=Ve})}return k}();return ge(this,T).length>0}return ae}()},{key:"containsAllMatchingElements",value:function(){function ae(ye){var He=this;if(!Array.isArray(ye))throw new TypeError("nodes should be an Array");return ye.every(function(F){return He.containsMatchingElement(F)})}return ae}()},{key:"containsAnyMatchingElements",value:function(){function ae(ye){var He=this;return Array.isArray(ye)&&ye.some(function(F){return He.containsMatchingElement(F)})}return ae}()},{key:"equals",value:function(){function ae(ye){var He=this;return this.single("equals",function(){return(0,c.nodeEqual)(He.getNodeInternal(),ye)})}return ae}()},{key:"matchesElement",value:function(){function ae(ye){var He=this;return this.single("matchesElement",function(){var F=(0,d.default)(He[W]),T=F.elementToNode(ye);return(0,c.nodeMatches)(T,He.getNodeInternal(),function(k,Ie){return k<=Ie})})}return ae}()},{key:"find",value:function(){function ae(ye){return this.wrap((0,f.reduceTreesBySelector)(ye,this.getNodesInternal()))}return ae}()},{key:"is",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return this.single("is",function(F){return He(F)})}return ae}()},{key:"isEmptyRender",value:function(){function ae(){var ye=this.getNodesInternal();return ye.every(function(He){return(0,c.isEmptyValue)(He)})}return ae}()},{key:"filterWhere",value:function(){function ae(ye){var He=this;return q(this,function(F){return ye(He.wrap(F))})}return ae}()},{key:"filter",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return q(this,He)}return ae}()},{key:"not",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return q(this,function(F){return!He(F)})}return ae}()},{key:"text",value:function(){function ae(){return this.single("text",m.getTextFromNode)}return ae}()},{key:"html",value:function(){function ae(){var ye=this;return this.single("html",function(He){if(ye.type()===null)return null;var F=(0,d.default)(ye[W]),T=F.createRenderer((0,C.default)({},ye[W],{mode:"string"}));return T.render(F.nodeToElement(He))})}return ae}()},{key:"render",value:function(){function ae(){var ye=this.html();return(0,c.loadCheerioRoot)(ye)}return ae}()},{key:"simulate",value:function(){function ae(ye){for(var He=this,F=arguments.length,T=Array(F>1?F-1:0),k=1;k0?He.first():this.findWhere(function(){return!1})}return ae}()},{key:"shallow",value:function(){function ae(){var ye=this,He=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return this.single("shallow",function(F){var T=Qe(ye,He);return ye.wrap((0,d.default)(ye[W]).nodeToElement(F),null,T)})}return ae}()},{key:"prop",value:function(){function ae(ye){return this.props()[ye]}return ae}()},{key:"invoke",value:function(){function ae(ye){var He=this;return this.single("invoke",function(){var F=He.prop(ye);if(typeof F!="function")throw new TypeError("ShallowWrapper::invoke() requires the name of a prop whose value is a function");return function(){var T=F.apply(void 0,arguments);return He[X].update(),T}})}return ae}()},{key:"renderProp",value:function(){function ae(ye){var He=this,F=(0,d.default)(this[W]);if(typeof F.wrap!="function")throw new RangeError("your adapter does not support `wrap`. Try upgrading it!");return this.single("renderProp",function(T){if(T.nodeType==="host")throw new TypeError("ShallowWrapper::renderProp() can only be called on custom components");if(typeof ye!="string")throw new TypeError("ShallowWrapper::renderProp(): `propName` must be a string");var k=He.props();if(!(0,s.default)(k,ye))throw new Error("ShallowWrapper::renderProp(): no prop called “"+String(ye)+"“ found");var Ie=k[ye];if(typeof Ie!="function")throw new TypeError("ShallowWrapper::renderProp(): expected prop “"+String(ye)+"“ to contain a function, but it holds “"+(typeof Ie>"u"?"undefined":i(Ie))+"“");return function(){var me=Ie.apply(void 0,arguments),Ve=F.wrap(me);return He.wrap(Ve,null,He[W])}})}return ae}()},{key:"key",value:function(){function ae(){return this.single("key",function(ye){return ye.key===void 0?null:ye.key})}return ae}()},{key:"type",value:function(){function ae(){return this.single("type",function(ye){return(0,c.typeOfNode)(ye)})}return ae}()},{key:"name",value:function(){function ae(){var ye=(0,d.default)(this[W]);return this.single("name",function(He){return ye.displayNameOfNode?ye.displayNameOfNode(He):(0,c.displayNameOfNode)(He)})}return ae}()},{key:"hasClass",value:function(){function ae(ye){return typeof ye=="string"&&ye.indexOf(".")!==-1&&console.warn("It looks like you're calling `ShallowWrapper::hasClass()` with a CSS selector. hasClass() expects a class name, not a CSS selector."),this.single("hasClass",function(He){return(0,m.hasClassName)(He,ye)})}return ae}()},{key:"forEach",value:function(){function ae(ye){var He=this;return this.getNodesInternal().forEach(function(F,T){return ye.call(He,He.wrap(F),T)}),this}return ae}()},{key:"map",value:function(){function ae(ye){var He=this;return this.getNodesInternal().map(function(F,T){return ye.call(He,He.wrap(F),T)})}return ae}()},{key:"reduce",value:function(){function ae(ye){var He=this,F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduce(function(T,k,Ie){return ye.call(He,T,He.wrap(k),Ie)},F):this.getNodesInternal().reduce(function(T,k,Ie){return ye.call(He,Ie===1?He.wrap(T):T,He.wrap(k),Ie)})}return ae}()},{key:"reduceRight",value:function(){function ae(ye){var He=this,F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduceRight(function(T,k,Ie){return ye.call(He,T,He.wrap(k),Ie)},F):this.getNodesInternal().reduceRight(function(T,k,Ie){return ye.call(He,Ie===1?He.wrap(T):T,He.wrap(k),Ie)})}return ae}()},{key:"slice",value:function(){function ae(ye,He){return this.wrap(this.getNodesInternal().slice(ye,He))}return ae}()},{key:"some",value:function(){function ae(ye){if(this[X]===this)throw new Error("ShallowWrapper::some() can not be called on the root");var He=(0,f.buildPredicate)(ye);return this.getNodesInternal().some(He)}return ae}()},{key:"someWhere",value:function(){function ae(ye){var He=this;return this.getNodesInternal().some(function(F,T){return ye.call(He,He.wrap(F),T)})}return ae}()},{key:"every",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return this.getNodesInternal().every(He)}return ae}()},{key:"everyWhere",value:function(){function ae(ye){var He=this;return this.getNodesInternal().every(function(F,T){return ye.call(He,He.wrap(F),T)})}return ae}()},{key:"flatMap",value:function(){function ae(ye){var He=this,F=this.getNodesInternal().map(function(k,Ie){return ye.call(He,He.wrap(k),Ie)}),T=(0,o.default)(F,1);return this.wrap(T.filter(Boolean))}return ae}()},{key:"findWhere",value:function(){function ae(ye){var He=this;return ge(this,function(F){var T=He.wrap(F);return T.length>0&&ye(T)})}return ae}()},{key:"get",value:function(){function ae(ye){return this.getElements()[ye]}return ae}()},{key:"at",value:function(){function ae(ye){var He=this.getNodesInternal();return ye0&&arguments[0]!==void 0?arguments[0]:null;return arguments.length>0?this.find(ye).exists():this.length>0}return ae}()},{key:"single",value:function(){function ae(ye,He){var F=typeof ye=="string"?ye:"unknown",T=typeof He=="function"?He:ye;if(this.length!==1)throw new Error("Method “"+F+"” is meant to be run on 1 node. "+String(this.length)+" found instead.");return T.call(this,this.getNodeInternal())}return ae}()},{key:"wrap",value:function(){function ae(ye){var He=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this[X];if(ye instanceof Xe)return ye;for(var F=arguments.length,T=Array(F>2?F-2:0),k=2;k0&&arguments[0]!==void 0?arguments[0]:{};return(0,h.debugNodes)(this.getNodesInternal(),ye)}return ae}()},{key:"tap",value:function(){function ae(ye){return ye(this),this}return ae}()},{key:"dive",value:function(){function ae(){var ye=this,He=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},F=(0,d.default)(this[W]),T="dive";return this.single(T,function(k){if(k&&k.nodeType==="host")throw new TypeError("ShallowWrapper::"+T+"() can not be called on Host Components");var Ie=(0,d.default)(ye[W]).nodeToElement(k);if(!(0,c.isCustomComponentElement)(Ie,F))throw new TypeError("ShallowWrapper::"+T+"() can only be called on components");var me=Qe(ye,He);return ye.wrap(Ie,null,me)})}return ae}()},{key:"hostNodes",value:function(){function ae(){return this.filterWhere(function(ye){return typeof ye.type()=="string"})}return ae}()}]),Xe}();function gt(Xe){var ae=(0,d.default)(Xe[W]),ye=Xe[x],He=ye[R],F=He.getNode(),T=Pe(Xe,ae),k=T.legacyContext,Ie=T.providerValues,me=ye[P];if(ye.setContext((0,C.default)({},Xe[x][W].context,k)),ye[P]=new Map([].concat(Z(me),Z(Ie))),typeof ae.isContextConsumer=="function"&&ae.isContextConsumer(F.type)){var Ve=F.type,we=ae.getProviderFromConsumer(Ve),je=Ie.get(we),at=me.get(we);je!==at&&ye.rerender()}}var lt=function(Xe){y(ae,Xe);function ae(ye,He,F){B(this,ae);var T=p(this,(ae.__proto__||Object.getPrototypeOf(ae)).call(this,ye));return(0,c.privateSet)(T,x,He),(0,c.privateSet)(T,J,F),T}return I(ae,[{key:"rerender",value:function(){function ye(){for(var He,F=arguments.length,T=Array(F),k=0;k2&&arguments[2]!==void 0?arguments[2]:m.treeFilter;return Xe.flatMap(function(He){return ye(He.getNodeInternal(),ae)})}function q(Xe,ae){return Xe.wrap(Xe.getNodesInternal().filter(ae).filter(Boolean))}function $(Xe){var ae=Xe.lifecycleExperimental,ye=Xe.disableLifecycleMethods,He=Xe.enableComponentDidUpdateOnSetState,F=Xe.supportPrevContextArgumentOfComponentDidUpdate,T=Xe.lifecycles;if(typeof ae<"u"&&typeof ae!="boolean")throw new Error("lifecycleExperimental must be either true or false if provided");if(typeof ye<"u"&&typeof ye!="boolean")throw new Error("disableLifecycleMethods must be either true or false if provided");if(ae!=null&&ye!=null&&ae===ye)throw new Error("lifecycleExperimental and disableLifecycleMethods cannot be set to the same value");if(typeof He<"u"&&T.componentDidUpdate&&T.componentDidUpdate.onSetState!==He)throw new TypeError("the legacy enableComponentDidUpdateOnSetState option should be matched by `lifecycles: { componentDidUpdate: { onSetState: true } }`, for compatibility");if(typeof F<"u"&&T.componentDidUpdate&&T.componentDidUpdate.prevContext!==F)throw new TypeError("the legacy supportPrevContextArgumentOfComponentDidUpdate option should be matched by `lifecycles: { componentDidUpdate: { prevContext: true } }`, for compatibility")}function j(Xe){var ae=Xe.options,ye=ae.lifecycles,He=ye===void 0?{}:ye,F=ae.enableComponentDidUpdateOnSetState,T=ae.supportPrevContextArgumentOfComponentDidUpdate,Y=typeof F<"u",ie=typeof T<"u",me=Y||ie?(0,r.default)({},Y&&{onSetState:!!F},ie&&{prevContext:!!T}):null,Ve=He.getDerivedStateFromProps,we=Ve?{hasShouldComponentUpdateBug:!!Ve.hasShouldComponentUpdateBug}:!1;return(0,r.default)({},He,{setState:(0,r.default)({},He.setState),getChildContext:(0,r.default)({calledByRenderer:!0},He.getChildContext)},me&&{componentDidUpdate:me},{getDerivedStateFromProps:we})}function ge(Xe){return Xe.nodeType==="host"?Xe:Xe.rendered}function Q(Xe){if(Xe[X].length!==1)throw new Error("getRootNodeInternal(wrapper) can only be called when wrapper wraps one node");return Xe[X]!==Xe?Xe[H][0]:Xe[X][v]}function Ie(Xe,ae){return(0,m.parentsOfNode)(ae,Q(Xe))}function he(Xe,ae){Array.isArray(ae)?((0,c.privateSet)(Xe,v,ae[0]),(0,c.privateSet)(Xe,w,ae)):((0,c.privateSet)(Xe,v,ae),(0,c.privateSet)(Xe,w,[ae])),(0,c.privateSet)(Xe,"length",Xe[w].length)}function ne(Xe,ae,ye,He){return!(0,l.default)(Xe,ae)||!(0,l.default)(ye,He)}function be(Xe){return Xe&&Xe.isPureReactComponent}function pe(Xe,ae,ye){var He=Xe.instance,F=Xe.type,T=(0,c.displayNameOfNode)(Xe);if(I(F.childContextTypes)!=="object")return console.warn(String(T)+".getChildContext(): childContextTypes must be defined in order to use getChildContext()."),{};var Y=He.getChildContext();return Object.keys(Y).forEach(function(ie){if(!(ie in F.childContextTypes))throw new Error(String(T)+'.getChildContext(): key "'+String(ie)+'" is not defined in childContextTypes.')}),typeof ye.checkPropTypes=="function"&&ye.checkPropTypes(F.childContextTypes,Y,"child context",ae),Y}function ve(Xe,ae){return!(0,c.isCustomComponentElement)(Xe,ae)||!Xe.type.prototype||typeof Xe.type.prototype.getChildContext!="function"?null:(0,c.spyMethod)(Xe.type.prototype,"getChildContext")}function We(Xe,ae,ye,He,F){var T=ae[V];if(Xe.options.legacyContextMode==="parent")if(F)(0,c.privateSet)(ae,k,F.getLastReturnValue()),F.restore();else if(typeof ye.getChildContext=="function"){var Y=[ae[v]].concat(Ie(ae,ae[v])),ie=pe(He,Y,T);(0,c.privateSet)(ae,k,ie)}else(0,c.privateSet)(ae,k,null)}function Be(Xe,ae){var ye=Xe.type.getDerivedStateFromProps;if(typeof ye=="function")var He=Xe.instance,F=(0,c.spyMethod)(He,"shouldComponentUpdate",function(Y){return function(){function ie(){He.state=ae;for(var me=arguments.length,Ve=Array(me),we=0;we1&&arguments[1]!==void 0?arguments[1]:{},ye=(0,r.default)({},Xe[W],ae,{context:ae.context||(0,r.default)({},Xe[W].context,Xe[X][k])});return(0,c.privateSet)(ye,P,Xe[X][P]),ye}var _e=function(){function Xe(ae,ye){var He=this,F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};B(this,Xe),$(F);var T=De(ae,ye,F,this),Y=(0,d.default)(T),ie=j(Y);if(ye)(0,c.privateSet)(this,X,ye),(0,c.privateSet)(this,S,null),(0,c.privateSet)(this,V,ye[V]),he(this,ae),(0,c.privateSet)(this,W,ye[W]),(0,c.privateSet)(this,H,ye[w]),(0,c.privateSet)(this,P,null);else{if(!Y.isValidElement(ae))throw new TypeError("ShallowWrapper can only wrap valid elements");var me=ie.getChildContext.calledByRenderer?ve(ae,Y):null;(0,c.privateSet)(this,X,this),(0,c.privateSet)(this,S,ae);var Ve=Y.createRenderer((0,r.default)({mode:"shallow"},T));(0,c.privateSet)(this,V,Ve);var we=new Map(T[P]||[]);this[V].render(ae,T.context,{providerValues:we});var je=this[V].getNode();he(this,ge(je)),(0,c.privateSet)(this,W,T),(0,c.privateSet)(this,P,we);var at=je.instance;at&&!T.disableLifecycleMethods&&(ie.componentDidUpdate.onSetState&&!at[R]&&((0,c.privateSet)(at,R,at.setState),at.setState=function(bt){var ct=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return He.setState.apply(He,Z(ct==null?[bt]:[bt,ct]))}),typeof at.componentDidMount=="function"&&this[V].batchedUpdates(function(){at.componentDidMount()}),We(Y,this,at,je,me))}}return i(Xe,[{key:"root",value:function(){function ae(){return this[X]}return ae}()},{key:"getNodeInternal",value:function(){function ae(){if(this.length!==1)throw new Error("ShallowWrapper::getNode() can only be called when wrapping one node");return this[X]===this&&this.update(),this[v]}return ae}()},{key:"getNodesInternal",value:function(){function ae(){return this[X]===this&&this.length===1&&this.update(),this[w]}return ae}()},{key:"getElement",value:function(){function ae(){var ye=this;return this.single("getElement",function(He){return(0,d.default)(ye[W]).nodeToElement(He)})}return ae}()},{key:"getElements",value:function(){function ae(){var ye=this;return this.getNodesInternal().map(function(He){return(0,d.default)(ye[W]).nodeToElement(He)})}return ae}()},{key:"getNode",value:function(){function ae(){throw new Error("ShallowWrapper::getNode() is no longer supported. Use ShallowWrapper::getElement() instead")}return ae}()},{key:"getNodes",value:function(){function ae(){throw new Error("ShallowWrapper::getNodes() is no longer supported. Use ShallowWrapper::getElements() instead")}return ae}()},{key:"instance",value:function(){function ae(){if(this[X]!==this)throw new Error("ShallowWrapper::instance() can only be called on the root");return this[V].getNode().instance}return ae}()},{key:"getWrappingComponent",value:function(){function ae(){if(this[X]!==this)throw new Error("ShallowWrapper::getWrappingComponent() can only be called on the root");if(!this[W].wrappingComponent)throw new Error("ShallowWrapper::getWrappingComponent() can only be called on a wrapper that was originally passed a `wrappingComponent` option");return this[K]}return ae}()},{key:"update",value:function(){function ae(){if(this[X]!==this)throw new Error("ShallowWrapper::update() can only be called on the root");if(this.length!==1)throw new Error("ShallowWrapper::update() can only be called when wrapping one node");return he(this,ge(this[V].getNode())),this}return ae}()},{key:"unmount",value:function(){function ae(){return this[V].unmount(),this[X][K]&&this[X][K].unmount(),this}return ae}()},{key:"rerender",value:function(){function ae(ye,He){var F=this,T=(0,d.default)(this[W]);return this.single("rerender",function(){(0,c.withSetStateAllowed)(function(){var Y=F[V].getNode(),ie=Y.instance||{},me=Y.type||{},Ve=ie.state,we=ie.props||F[S].props,je=ie.context||F[W].context,at=He||je;He&&(F[W]=(0,r.default)({},F[W],{context:at})),F[V].batchedUpdates(function(){var bt=j(T),ct=!0,Ht=void 0,re=void 0;if(!F[W].disableLifecycleMethods&&ie){if(typeof ie.shouldComponentUpdate=="function"){var E=bt.getDerivedStateFromProps;E&&E.hasShouldComponentUpdateBug&&Be(Y,Ve),Ht=(0,c.spyMethod)(ie,"shouldComponentUpdate")}bt.getChildContext.calledByRenderer&&typeof ie.getChildContext=="function"&&(re=(0,c.spyMethod)(ie,"getChildContext"))}if(!Ht&&be(ie)&&(ct=ne(we,ye,Ve,ie.state)),ye&&(F[S]=(0,c.cloneElement)(T,F[S],ye)),F[V].render(F[S],at,{providerValues:F[P]}),Ht&&(ct=Ht.getLastReturnValue(),Ht.restore()),ct&&!F[W].disableLifecycleMethods&&ie)if(We(T,F,ie,Y,re),bt.getSnapshotBeforeUpdate){var _=void 0;typeof ie.getSnapshotBeforeUpdate=="function"&&(_=ie.getSnapshotBeforeUpdate(we,Ve)),bt.componentDidUpdate&&typeof ie.componentDidUpdate=="function"&&(!Ve||(0,l.default)(Ve,F.instance().state)||typeof me.getDerivedStateFromProps=="function")&&ie.componentDidUpdate(we,Ve,_)}else bt.componentDidUpdate&&typeof ie.componentDidUpdate=="function"&&(bt.componentDidUpdate.prevContext?ie.componentDidUpdate(we,Ve,je):(!Ve||(0,l.default)(F.instance().state,Ve))&&ie.componentDidUpdate(we,Ve));else(0,l.default)(ye,ie.props)||(ie.props=(Object.freeze||Object)((0,r.default)({},ie.props,ye)));F.update()})})}),this}return ae}()},{key:"setProps",value:function(){function ae(ye){var He=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this[X]!==this)throw new Error("ShallowWrapper::setProps() can only be called on the root");if(arguments.length>1&&typeof He!="function")throw new TypeError("ReactWrapper::setProps() expects a function as its second argument");return this.rerender(ye),He&&He(),this}return ae}()},{key:"setState",value:function(){function ae(ye){var He=this,F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(this[X]!==this)throw new Error("ShallowWrapper::setState() can only be called on the root");if(this.instance()===null||this[V].getNode().nodeType!=="class")throw new Error("ShallowWrapper::setState() can only be called on class components");if(arguments.length>1&&typeof F!="function")throw new TypeError("ReactWrapper::setState() expects a function as its second argument");return this.single("setState",function(){(0,c.withSetStateAllowed)(function(){var T=(0,d.default)(He[W]),Y=j(T),ie=He[V].getNode(),me=ie.instance,Ve=me.props,we=me.state,je=me.context,at=typeof ye=="function"?ye.call(me,we,Ve):ye,bt=!Y.setState.skipsComponentDidUpdateOnNullish||at!=null,ct=void 0,Ht=void 0,re=!0;if(!He[W].disableLifecycleMethods&&me){if(Y.componentDidUpdate&&Y.componentDidUpdate.onSetState&&typeof me.shouldComponentUpdate=="function"){var E=Y.getDerivedStateFromProps;E&&E.hasShouldComponentUpdateBug&&Be(ie,ye),ct=(0,c.spyMethod)(me,"shouldComponentUpdate")}Y.getChildContext.calledByRenderer&&typeof me.getChildContext=="function"&&(Ht=(0,c.spyMethod)(me,"getChildContext"))}if(!ct&&be(me)&&(re=ne(Ve,me.props,we,(0,r.default)({},we,at))),me[R]?me[R](at):me.setState(at),ct&&(re=ct.getLastReturnValue(),ct.restore()),bt&&re&&!He[W].disableLifecycleMethods&&(We(T,He,me,ie,Ht),Y.componentDidUpdate&&Y.componentDidUpdate.onSetState))if(Y.getSnapshotBeforeUpdate&&typeof me.getSnapshotBeforeUpdate=="function"){var _=me.getSnapshotBeforeUpdate(Ve,we);typeof me.componentDidUpdate=="function"&&me.componentDidUpdate(Ve,we,_)}else typeof me.componentDidUpdate=="function"&&(Y.componentDidUpdate.prevContext?me.componentDidUpdate(Ve,we,je):me.componentDidUpdate(Ve,we));He.update(),F&&(T.invokeSetStateCallback?T.invokeSetStateCallback(me,F):F.call(me))})}),this}return ae}()},{key:"setContext",value:function(){function ae(ye){if(this[X]!==this)throw new Error("ShallowWrapper::setContext() can only be called on the root");if(!this[W].context)throw new Error("ShallowWrapper::setContext() can only be called on a wrapper that was originally passed a context option");return this.rerender(null,ye)}return ae}()},{key:"contains",value:function(){function ae(ye){var He=(0,d.default)(this[W]);if(!(0,c.isReactElementAlike)(ye,He))throw new Error("ShallowWrapper::contains() can only be called with a ReactElement (or an array of them), a string, or a number as an argument.");var F=Array.isArray(ye)?function(T){return(0,c.containsChildrenSubArray)(c.nodeEqual,T,ye.map(function(Y){return He.elementToNode(Y)}))}:function(T){return(0,c.nodeEqual)(He.elementToNode(ye),T)};return te(this,F).length>0}return ae}()},{key:"containsMatchingElement",value:function(){function ae(ye){var He=(0,d.default)(this[W]),F=He.elementToNode(ye),T=function(){function Y(ie){return(0,c.nodeMatches)(F,ie,function(me,Ve){return me<=Ve})}return Y}();return te(this,T).length>0}return ae}()},{key:"containsAllMatchingElements",value:function(){function ae(ye){var He=this;if(!Array.isArray(ye))throw new TypeError("nodes should be an Array");return ye.every(function(F){return He.containsMatchingElement(F)})}return ae}()},{key:"containsAnyMatchingElements",value:function(){function ae(ye){var He=this;return Array.isArray(ye)&&ye.some(function(F){return He.containsMatchingElement(F)})}return ae}()},{key:"equals",value:function(){function ae(ye){var He=this;return this.single("equals",function(){return(0,c.nodeEqual)(He.getNodeInternal(),ye)})}return ae}()},{key:"matchesElement",value:function(){function ae(ye){var He=this;return this.single("matchesElement",function(){var F=(0,d.default)(He[W]),T=F.elementToNode(ye);return(0,c.nodeMatches)(T,He.getNodeInternal(),function(Y,ie){return Y<=ie})})}return ae}()},{key:"find",value:function(){function ae(ye){return this.wrap((0,f.reduceTreesBySelector)(ye,this.getNodesInternal()))}return ae}()},{key:"is",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return this.single("is",function(F){return He(F)})}return ae}()},{key:"isEmptyRender",value:function(){function ae(){var ye=this.getNodesInternal();return ye.every(function(He){return(0,c.isEmptyValue)(He)})}return ae}()},{key:"filterWhere",value:function(){function ae(ye){var He=this;return q(this,function(F){return ye(He.wrap(F))})}return ae}()},{key:"filter",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return q(this,He)}return ae}()},{key:"not",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return q(this,function(F){return!He(F)})}return ae}()},{key:"text",value:function(){function ae(){return this.single("text",m.getTextFromNode)}return ae}()},{key:"html",value:function(){function ae(){var ye=this;return this.single("html",function(He){if(ye.type()===null)return null;var F=(0,d.default)(ye[W]),T=F.createRenderer((0,r.default)({},ye[W],{mode:"string"}));return T.render(F.nodeToElement(He))})}return ae}()},{key:"render",value:function(){function ae(){var ye=this.html();return(0,c.loadCheerioRoot)(ye)}return ae}()},{key:"simulate",value:function(){function ae(ye){for(var He=this,F=arguments.length,T=Array(F>1?F-1:0),Y=1;Y0?He.first():this.findWhere(function(){return!1})}return ae}()},{key:"shallow",value:function(){function ae(){var ye=this,He=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return this.single("shallow",function(F){var T=Qe(ye,He);return ye.wrap((0,d.default)(ye[W]).nodeToElement(F),null,T)})}return ae}()},{key:"prop",value:function(){function ae(ye){return this.props()[ye]}return ae}()},{key:"invoke",value:function(){function ae(ye){var He=this;return this.single("invoke",function(){var F=He.prop(ye);if(typeof F!="function")throw new TypeError("ShallowWrapper::invoke() requires the name of a prop whose value is a function");return function(){var T=F.apply(void 0,arguments);return He[X].update(),T}})}return ae}()},{key:"renderProp",value:function(){function ae(ye){var He=this,F=(0,d.default)(this[W]);if(typeof F.wrap!="function")throw new RangeError("your adapter does not support `wrap`. Try upgrading it!");return this.single("renderProp",function(T){if(T.nodeType==="host")throw new TypeError("ShallowWrapper::renderProp() can only be called on custom components");if(typeof ye!="string")throw new TypeError("ShallowWrapper::renderProp(): `propName` must be a string");var Y=He.props();if(!(0,s.default)(Y,ye))throw new Error("ShallowWrapper::renderProp(): no prop called “"+String(ye)+"“ found");var ie=Y[ye];if(typeof ie!="function")throw new TypeError("ShallowWrapper::renderProp(): expected prop “"+String(ye)+"“ to contain a function, but it holds “"+(typeof ie>"u"?"undefined":I(ie))+"“");return function(){var me=ie.apply(void 0,arguments),Ve=F.wrap(me);return He.wrap(Ve,null,He[W])}})}return ae}()},{key:"key",value:function(){function ae(){return this.single("key",function(ye){return ye.key===void 0?null:ye.key})}return ae}()},{key:"type",value:function(){function ae(){return this.single("type",function(ye){return(0,c.typeOfNode)(ye)})}return ae}()},{key:"name",value:function(){function ae(){var ye=(0,d.default)(this[W]);return this.single("name",function(He){return ye.displayNameOfNode?ye.displayNameOfNode(He):(0,c.displayNameOfNode)(He)})}return ae}()},{key:"hasClass",value:function(){function ae(ye){return typeof ye=="string"&&ye.indexOf(".")!==-1&&console.warn("It looks like you're calling `ShallowWrapper::hasClass()` with a CSS selector. hasClass() expects a class name, not a CSS selector."),this.single("hasClass",function(He){return(0,m.hasClassName)(He,ye)})}return ae}()},{key:"forEach",value:function(){function ae(ye){var He=this;return this.getNodesInternal().forEach(function(F,T){return ye.call(He,He.wrap(F),T)}),this}return ae}()},{key:"map",value:function(){function ae(ye){var He=this;return this.getNodesInternal().map(function(F,T){return ye.call(He,He.wrap(F),T)})}return ae}()},{key:"reduce",value:function(){function ae(ye){var He=this,F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduce(function(T,Y,ie){return ye.call(He,T,He.wrap(Y),ie)},F):this.getNodesInternal().reduce(function(T,Y,ie){return ye.call(He,ie===1?He.wrap(T):T,He.wrap(Y),ie)})}return ae}()},{key:"reduceRight",value:function(){function ae(ye){var He=this,F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;return arguments.length>1?this.getNodesInternal().reduceRight(function(T,Y,ie){return ye.call(He,T,He.wrap(Y),ie)},F):this.getNodesInternal().reduceRight(function(T,Y,ie){return ye.call(He,ie===1?He.wrap(T):T,He.wrap(Y),ie)})}return ae}()},{key:"slice",value:function(){function ae(ye,He){return this.wrap(this.getNodesInternal().slice(ye,He))}return ae}()},{key:"some",value:function(){function ae(ye){if(this[X]===this)throw new Error("ShallowWrapper::some() can not be called on the root");var He=(0,f.buildPredicate)(ye);return this.getNodesInternal().some(He)}return ae}()},{key:"someWhere",value:function(){function ae(ye){var He=this;return this.getNodesInternal().some(function(F,T){return ye.call(He,He.wrap(F),T)})}return ae}()},{key:"every",value:function(){function ae(ye){var He=(0,f.buildPredicate)(ye);return this.getNodesInternal().every(He)}return ae}()},{key:"everyWhere",value:function(){function ae(ye){var He=this;return this.getNodesInternal().every(function(F,T){return ye.call(He,He.wrap(F),T)})}return ae}()},{key:"flatMap",value:function(){function ae(ye){var He=this,F=this.getNodesInternal().map(function(Y,ie){return ye.call(He,He.wrap(Y),ie)}),T=(0,o.default)(F,1);return this.wrap(T.filter(Boolean))}return ae}()},{key:"findWhere",value:function(){function ae(ye){var He=this;return te(this,function(F){var T=He.wrap(F);return T.length>0&&ye(T)})}return ae}()},{key:"get",value:function(){function ae(ye){return this.getElements()[ye]}return ae}()},{key:"at",value:function(){function ae(ye){var He=this.getNodesInternal();return ye0&&arguments[0]!==void 0?arguments[0]:null;return arguments.length>0?this.find(ye).exists():this.length>0}return ae}()},{key:"single",value:function(){function ae(ye,He){var F=typeof ye=="string"?ye:"unknown",T=typeof He=="function"?He:ye;if(this.length!==1)throw new Error("Method “"+F+"” is meant to be run on 1 node. "+String(this.length)+" found instead.");return T.call(this,this.getNodeInternal())}return ae}()},{key:"wrap",value:function(){function ae(ye){var He=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this[X];if(ye instanceof Xe)return ye;for(var F=arguments.length,T=Array(F>2?F-2:0),Y=2;Y0&&arguments[0]!==void 0?arguments[0]:{};return(0,h.debugNodes)(this.getNodesInternal(),ye)}return ae}()},{key:"tap",value:function(){function ae(ye){return ye(this),this}return ae}()},{key:"dive",value:function(){function ae(){var ye=this,He=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},F=(0,d.default)(this[W]),T="dive";return this.single(T,function(Y){if(Y&&Y.nodeType==="host")throw new TypeError("ShallowWrapper::"+T+"() can not be called on Host Components");var ie=(0,d.default)(ye[W]).nodeToElement(Y);if(!(0,c.isCustomComponentElement)(ie,F))throw new TypeError("ShallowWrapper::"+T+"() can only be called on components");var me=Qe(ye,He);return ye.wrap(ie,null,me)})}return ae}()},{key:"hostNodes",value:function(){function ae(){return this.filterWhere(function(ye){return typeof ye.type()=="string"})}return ae}()}]),Xe}();function gt(Xe){var ae=(0,d.default)(Xe[W]),ye=Xe[D],He=ye[V],F=He.getNode(),T=Pe(Xe,ae),Y=T.legacyContext,ie=T.providerValues,me=ye[P];if(ye.setContext((0,r.default)({},Xe[D][W].context,Y)),ye[P]=new Map([].concat(Z(me),Z(ie))),typeof ae.isContextConsumer=="function"&&ae.isContextConsumer(F.type)){var Ve=F.type,we=ae.getProviderFromConsumer(Ve),je=ie.get(we),at=me.get(we);je!==at&&ye.rerender()}}var lt=function(Xe){y(ae,Xe);function ae(ye,He,F){B(this,ae);var T=p(this,(ae.__proto__||Object.getPrototypeOf(ae)).call(this,ye));return(0,c.privateSet)(T,D,He),(0,c.privateSet)(T,J,F),T}return i(ae,[{key:"rerender",value:function(){function ye(){for(var He,F=arguments.length,T=Array(F),Y=0;Y1&&arguments[1]!==void 0?arguments[1]:{},A=(0,n.default)(s),l=A.createRenderer((0,I.default)({mode:"string"},s)),c=l.render(a,s.context);return(0,C.loadCheerioRoot)(c)}})(zRe);var HVt=I4,TVt=ey(HVt),NVt=ej,kVt=ey(NVt),YVt=IRe,KVt=ey(YVt),FVt=ERe,DVt=ey(FVt),xVt=MRe,EVt=ey(xVt),MVt=zRe,zVt=ey(MVt),PVt=sm;function ey(e){return e&&e.__esModule?e:{default:e}}var JVt={render:zVt.default,shallow:EVt.default,mount:DVt.default,ShallowWrapper:kVt.default,ReactWrapper:TVt.default,configure:PVt.merge,EnzymeAdapter:KVt.default};const tj=100,OVt=(e,g,I,i)=>{for(const{viewId:n,trackId:C,track:r}of e.instance().iterateOverTracks())n===g&&C===I&&(r.options={...r.options,...i});e.setState(e.instance().state)},_Vt=e=>{for(const g of e.iterateOverTracks())if(pve(e,g.viewId,g.trackId).activeTransitions>0)return!0;return!1},PRe=(e,g)=>{_Vt(e)?setTimeout(()=>{PRe(e,g)},tj):g()},gj=e=>{DB>0?setTimeout(()=>gj(e),tj):e()},LVt=e=>{for(const g of e.iterateOverTracks()){let I=g4(e,g.viewId,g.trackId);if(!(!g.track.server&&!g.track.tilesetUid&&!(g.track.data&&g.track.data.type==="divided")))if(g.track.data&&g.track.data.type==="divided"||g.track.server&&g.track.tilesetUid){if(I.originalTrack&&(I=I.originalTrack),!(I.tilesetInfo||I.chromInfo)||I.fetching&&I.fetching.size)return!0}else throw Error('"server" and "tilesetUid" belong together')}return!1},JX=(e,g)=>{LVt(e)?setTimeout(()=>{JX(e,g)},tj):g()},JRe=(e,g,I,i,n={})=>{const{style:C="width:800px; background-color: lightgreen;",bounded:r=!1,extendedDelay:o=!1}=n;g&&(g.unmount(),g.detach()),e&&globalThis.document.body.removeChild(e);const a=globalThis.document.createElement("div");globalThis.document.body.appendChild(a),a.setAttribute("style",C),a.setAttribute("id","simple-hg-component");const s=JVt.mount(N.createElement(dy,{options:{bounded:r},viewConfig:I}),{attachTo:a});return s.update(),gj(()=>{if(o){const A=()=>setTimeout(()=>{i()},1e3);JX(s.instance(),A)}else JX(s.instance(),i)}),[a,s]},UVt=e=>{e&&(jI.unmountComponentAtNode(e),document.body.removeChild(e))};async function QVt(e,g,I,i){let n;return await new Promise(C=>{n=JRe(e,g,I,C,i)}),n}var qb=0,$Z=0,lZ=0,ORe=1e3,OX,qZ,_X=0,hh=0,yk=0,UB=typeof performance=="object"&&performance.now?performance:Date,_Re=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Ij(){return hh||(_Re(jVt),hh=UB.now()+yk)}function jVt(){hh=0}function LX(){this._call=this._time=this._next=null}LX.prototype=LRe.prototype={constructor:LX,restart:function(e,g,I){if(typeof e!="function")throw new TypeError("callback is not a function");I=(I==null?Ij():+I)+(g==null?0:+g),!this._next&&qZ!==this&&(qZ?qZ._next=this:OX=this,qZ=this),this._call=e,this._time=I,eP()},stop:function(){this._call&&(this._call=null,this._time=1/0,eP())}};function LRe(e,g,I){var i=new LX;return i.restart(e,g,I),i}function $Vt(){Ij(),++qb;for(var e=OX,g;e;)(g=hh-e._time)>=0&&e._call.call(void 0,g),e=e._next;--qb}function tre(){hh=(_X=UB.now())+yk,qb=$Z=0;try{$Vt()}finally{qb=0,e1t(),hh=0}}function qVt(){var e=UB.now(),g=e-_X;g>ORe&&(yk-=g,_X=e)}function e1t(){for(var e,g=OX,I,i=1/0;g;)g._call?(i>g._time&&(i=g._time),e=g,g=g._next):(I=g._next,g._next=null,g=e?e._next=I:OX=I);qZ=e,eP(i)}function eP(e){if(!qb){$Z&&($Z=clearTimeout($Z));var g=e-hh;g>24?(e<1/0&&($Z=setTimeout(tre,e-UB.now()-yk)),lZ&&(lZ=clearInterval(lZ))):(lZ||(_X=UB.now(),lZ=setInterval(qVt,ORe)),qb=1,_Re(tre))}}function gre(e,g,I){var i=new LX;return g=g==null?0:+g,i.restart(n=>{i.stop(),e(n+g)},g,I),i}var t1t=x0("start","end","cancel","interrupt"),g1t=[],URe=0,tP=1,gP=2,nW=3,Ire=4,IP=5,CW=6;function Zk(e,g,I,i,n,C){var r=e.__transition;if(!r)e.__transition={};else if(I in r)return;I1t(e,I,{name:g,index:i,group:n,on:t1t,tween:g1t,time:C.time,delay:C.delay,duration:C.duration,ease:C.ease,timer:null,state:URe})}function ij(e,g){var I=Za(e,g);if(I.state>URe)throw new Error("too late; already scheduled");return I}function NA(e,g){var I=Za(e,g);if(I.state>nW)throw new Error("too late; already running");return I}function Za(e,g){var I=e.__transition;if(!I||!(I=I[g]))throw new Error("transition not found");return I}function I1t(e,g,I){var i=e.__transition,n;i[g]=I,I.timer=LRe(C,0,I.time);function C(s){I.state=tP,I.timer.restart(r,I.delay,I.time),I.delay<=s&&r(s-I.delay)}function r(s){var A,l,c,u;if(I.state!==tP)return a();for(A in i)if(u=i[A],u.name===I.name){if(u.state===nW)return gre(r);u.state===Ire?(u.state=CW,u.timer.stop(),u.on.call("interrupt",e,e.__data__,u.index,u.group),delete i[A]):+AgP&&i.state=0&&(g=g.slice(0,I)),!g||g==="start"})}function T1t(e,g,I){var i,n,C=H1t(g)?ij:NA;return function(){var r=C(this,e),o=r.on;o!==i&&(n=(i=o).copy()).on(g,I),r.on=n}}function N1t(e,g){var I=this._id;return arguments.length<2?Za(this.node(),I).on.on(e):this.each(T1t(I,e,g))}function k1t(e){return function(){var g=this.parentNode;for(var I in this.__transition)if(+I!==e)return;g&&g.removeChild(this)}}function Y1t(){return this.on("end.remove",k1t(this._id))}function K1t(e){var g=this._name,I=this._id;typeof e!="function"&&(e=FS(e));for(var i=this._groups,n=i.length,C=new Array(n),r=0;rtP&&i.name===g)return new BA([[e]],oWt,g,+n)}return null}const AWt=Object.freeze(Object.defineProperty({__proto__:null,active:aWt,interrupt:Av,transition:$Re},Symbol.toStringTag,{value:"Module"})),SV=e=>()=>e;function sWt(e,{sourceEvent:g,target:I,transform:i,dispatch:n}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:g,enumerable:!0,configurable:!0},target:{value:I,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:n}})}function CA(e,g,I){this.k=e,this.x=g,this.y=I}CA.prototype={constructor:CA,scale:function(e){return e===1?this:new CA(this.k*e,this.x,this.y)},translate:function(e,g){return e===0&g===0?this:new CA(this.k,this.x+this.k*e,this.y+this.k*g)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Ji=new CA(1,0,0);eVe.prototype=CA.prototype;function eVe(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Ji;return e.__zoom}function WD(e){e.stopImmediatePropagation()}function cZ(e){e.preventDefault(),e.stopImmediatePropagation()}function lWt(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function cWt(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function ire(){return this.__zoom||Ji}function uWt(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function dWt(){return navigator.maxTouchPoints||"ontouchstart"in this}function hWt(e,g,I){var i=e.invertX(g[0][0])-I[0][0],n=e.invertX(g[1][0])-I[1][0],C=e.invertY(g[0][1])-I[0][1],r=e.invertY(g[1][1])-I[1][1];return e.translate(n>i?(i+n)/2:Math.min(0,i)||Math.max(0,n),r>C?(C+r)/2:Math.min(0,C)||Math.max(0,r))}function iP(){var e=lWt,g=cWt,I=hWt,i=uWt,n=dWt,C=[0,1/0],r=[[-1/0,-1/0],[1/0,1/0]],o=250,a=sit,s=x0("start","zoom","end"),A,l,c,u=500,d=150,h=0,m=10;function f(V){V.property("__zoom",ire).on("wheel.zoom",v,{passive:!1}).on("mousedown.zoom",w).on("dblclick.zoom",R).filter(n).on("touchstart.zoom",S).on("touchmove.zoom",X).on("touchend.zoom touchcancel.zoom",W).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}f.transform=function(V,H,Y,K){var x=V.selection?V.selection():V;x.property("__zoom",ire),V!==x?Z(V,H,Y,K):x.interrupt().each(function(){B(this,arguments).event(K).start().zoom(null,typeof H=="function"?H.apply(this,arguments):H).end()})},f.scaleBy=function(V,H,Y,K){f.scaleTo(V,function(){var x=this.__zoom.k,J=typeof H=="function"?H.apply(this,arguments):H;return x*J},Y,K)},f.scaleTo=function(V,H,Y,K){f.transform(V,function(){var x=g.apply(this,arguments),J=this.__zoom,P=Y==null?y(x):typeof Y=="function"?Y.apply(this,arguments):Y,ge=J.invert(P),q=typeof H=="function"?H.apply(this,arguments):H;return I(p(b(J,q),P,ge),x,r)},Y,K)},f.translateBy=function(V,H,Y,K){f.transform(V,function(){return I(this.__zoom.translate(typeof H=="function"?H.apply(this,arguments):H,typeof Y=="function"?Y.apply(this,arguments):Y),g.apply(this,arguments),r)},null,K)},f.translateTo=function(V,H,Y,K,x){f.transform(V,function(){var J=g.apply(this,arguments),P=this.__zoom,ge=K==null?y(J):typeof K=="function"?K.apply(this,arguments):K;return I(Ji.translate(ge[0],ge[1]).scale(P.k).translate(typeof H=="function"?-H.apply(this,arguments):-H,typeof Y=="function"?-Y.apply(this,arguments):-Y),J,r)},K,x)};function b(V,H){return H=Math.max(C[0],Math.min(C[1],H)),H===V.k?V:new CA(H,V.x,V.y)}function p(V,H,Y){var K=H[0]-Y[0]*V.k,x=H[1]-Y[1]*V.k;return K===V.x&&x===V.y?V:new CA(V.k,K,x)}function y(V){return[(+V[0][0]+ +V[1][0])/2,(+V[0][1]+ +V[1][1])/2]}function Z(V,H,Y,K){V.on("start.zoom",function(){B(this,arguments).event(K).start()}).on("interrupt.zoom end.zoom",function(){B(this,arguments).event(K).end()}).tween("zoom",function(){var x=this,J=arguments,P=B(x,J).event(K),ge=g.apply(x,J),q=Y==null?y(ge):typeof Y=="function"?Y.apply(x,J):Y,$=Math.max(ge[1][0]-ge[0][0],ge[1][1]-ge[0][1]),j=x.__zoom,te=typeof H=="function"?H.apply(x,J):H,Q=a(j.invert(q).concat($/j.k),te.invert(q).concat($/te.k));return function(ie){if(ie===1)ie=te;else{var he=Q(ie),ne=$/he[2];ie=new CA(ne,q[0]-he[0]*ne,q[1]-he[1]*ne)}P.zoom(null,ie)}})}function B(V,H,Y){return!Y&&V.__zooming||new G(V,H)}function G(V,H){this.that=V,this.args=H,this.active=0,this.sourceEvent=null,this.extent=g.apply(V,H),this.taps=0}G.prototype={event:function(V){return V&&(this.sourceEvent=V),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(V,H){return this.mouse&&V!=="mouse"&&(this.mouse[1]=H.invert(this.mouse[0])),this.touch0&&V!=="touch"&&(this.touch0[1]=H.invert(this.touch0[0])),this.touch1&&V!=="touch"&&(this.touch1[1]=H.invert(this.touch1[0])),this.that.__zoom=H,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(V){var H=hg(this.that).datum();s.call(V,this.that,new sWt(V,{sourceEvent:this.sourceEvent,target:f,type:V,transform:this.that.__zoom,dispatch:s}),H)}};function v(V,...H){if(!e.apply(this,arguments))return;var Y=B(this,H).event(V),K=this.__zoom,x=Math.max(C[0],Math.min(C[1],K.k*Math.pow(2,i.apply(this,arguments)))),J=zg(V);if(Y.wheel)(Y.mouse[0][0]!==J[0]||Y.mouse[0][1]!==J[1])&&(Y.mouse[1]=K.invert(Y.mouse[0]=J)),clearTimeout(Y.wheel);else{if(K.k===x)return;Y.mouse=[J,K.invert(J)],Av(this),Y.start()}cZ(V),Y.wheel=setTimeout(P,d),Y.zoom("mouse",I(p(b(K,x),Y.mouse[0],Y.mouse[1]),Y.extent,r));function P(){Y.wheel=null,Y.end()}}function w(V,...H){if(c||!e.apply(this,arguments))return;var Y=V.currentTarget,K=B(this,H,!0).event(V),x=hg(V.view).on("mousemove.zoom",q,!0).on("mouseup.zoom",$,!0),J=zg(V,Y),P=V.clientX,ge=V.clientY;SN(V.view),WD(V),K.mouse=[J,this.__zoom.invert(J)],Av(this),K.start();function q(j){if(cZ(j),!K.moved){var te=j.clientX-P,Q=j.clientY-ge;K.moved=te*te+Q*Q>h}K.event(j).zoom("mouse",I(p(K.that.__zoom,K.mouse[0]=zg(j,Y),K.mouse[1]),K.extent,r))}function $(j){x.on("mousemove.zoom mouseup.zoom",null),wN(j.view,K.moved),cZ(j),K.event(j).end()}}function R(V,...H){if(e.apply(this,arguments)){var Y=this.__zoom,K=zg(V.changedTouches?V.changedTouches[0]:V,this),x=Y.invert(K),J=Y.k*(V.shiftKey?.5:2),P=I(p(b(Y,J),K,x),g.apply(this,H),r);cZ(V),o>0?hg(this).transition().duration(o).call(Z,P,K,V):hg(this).call(f.transform,P,K,V)}}function S(V,...H){if(e.apply(this,arguments)){var Y=V.touches,K=Y.length,x=B(this,H,V.changedTouches.length===K).event(V),J,P,ge,q;for(WD(V),P=0;Pr;nthis.tickValues.length;){const r=this.axisTexts.pop();this.pAxis.removeChild(r),r.destroy(!0)}}},{key:"calculateAxisTickValues",value:function(I,i){const n=Math.max(Math.ceil(i/ZWt),1);let C=I.ticks(n);return C.length<1&&(C=I.ticks(n+1),C.length>1&&(C=[C[0]])),C}},{key:"drawAxisLeft",value:function(I,i){this.startAxis(i),this.createAxisTexts(I,i);const n=this.pAxis;this.track.getTheme()===gI&&n.lineStyle(n.lineWidth||n._lineStyle.width,Kt("#ffffff")),n.moveTo(0,0),n.lineTo(-(Ei+ZC),0),n.moveTo(0,i),n.lineTo(-(Ei+ZC),i);for(let C=0;C=0;I--)this.axisTexts[I].visible=!0;for(let I=this.axisTexts.length-1;I>=0;I--){if(!this.axisTexts[I].visible)continue;let i=I-1;for(;i>=0&&this.axisTexts[I].y+this.axisTexts[I].height/2>this.axisTexts[i].y-this.axisTexts[i].height/2;){this.axisTexts[i].visible=!1;i-=1}}}},{key:"exportVerticalAxis",value:function(I){const i=document.createElement("g");i.setAttribute("class","axis-vertical");let n="black";this.track&&this.track.options.lineStrokeColor&&(n=this.track.options.lineStrokeColor),this.track.getTheme()===gI&&(n="#cccccc");const C=document.createElement("path");return C.setAttribute("fill","transparent"),C.setAttribute("stroke",n),C.setAttribute("id","axis-line"),C.setAttribute("d",`M0,0 L0,${I}`),i.appendChild(C),i}},{key:"createAxisSVGLine",value:function(){let I="black";this.track&&this.track.options.lineStrokeColor&&(I=this.track.options.lineStrokeColor),this.track.getTheme()===gI&&(I="#cccccc");const i=document.createElement("path");return i.setAttribute("id","tick-mark"),i.setAttribute("fill","transparent"),i.setAttribute("stroke",I),i}},{key:"createAxisSVGText",value:function(I){const i=document.createElement("text");return i.innerHTML=I,i.setAttribute("id","axis-text"),i.setAttribute("text-anchor","middle"),i.setAttribute("font-family",this.axisTextFontFamily),i.setAttribute("font-size",this.axisTextFontSize),i.setAttribute("dy",this.axisTextFontSize/2-2),i}},{key:"exportAxisLeftSVG",value:function(I,i){const n=this.exportVerticalAxis(i),C=this.createAxisSVGLine();n.appendChild(C),C.setAttribute("d",`M0,0 L${+(Ei+ZC)},0`);const r=this.createAxisSVGLine();n.appendChild(r),r.setAttribute("d",`M0,${i} L${+(Ei+ZC)},${i}`);for(let o=0;o{const I=[];for(let i=e;i{const I=e.map(o=>+o).sort((o,a)=>a-o),i=g.range()[1]-g.range()[0],C=I.map(o=>(g.domain()[1]-g.domain()[0])/o).map(o=>o/i),r=C.filter(o=>o<1);return r.length===0?0:C.indexOf(r[r.length-1])},vWt=(e,g,I,i)=>{const n=e.range()[1]-e.range()[0],C=Math.max((I-g)/(e.domain()[1]-e.domain()[0]),1),o=Math.max(0,Math.ceil(Math.log(n/384)/Math.LN2));let a=Math.round(Math.log(C)/Math.LN2)+o,s=0;return i&&(s=Math.floor(Math.log(256)/Math.log(2)-Math.log(i)/Math.log(2))),a+=s,a},gVe=(e,g,I)=>{if(typeof I>"u"&&(I=Number.MAX_SAFE_INTEGER),e.resolutions)return GWt(e.resolutions,g,e.min_pos[0],e.max_pos[0]-2);const i=vWt(g,e.min_pos[0],e.max_pos[0],e.bins_per_dimension||e.tile_size),n=Math.min(i,I);return Math.max(n,0)},BWt=(e,g,I,i,n,C)=>{const r=Math.min(e,n),o=C/2**r,a=1e-7;return tVe(Math.max(0,Math.floor((g.domain()[0]-I)/o)),Math.min(2**r,Math.ceil((g.domain()[1]-I-a)/o)))},SWt=(e,g,I,i=Number.MAX_VALUE,n=256)=>{const r=e*n,o=20,a=Math.max(0,Math.floor((g.domain()[0]-I)/r)),s=Math.ceil(Math.min(i,g.domain()[1]-I-1e-7)/r);let A=tVe(a,s);return A.length>o&&(console.warn(`Too many visible tiles: ${A.length} truncating to ${o}`),A=A.slice(0,o)),A},wWt=(e,g)=>{if(!e)return[];const I=gVe(e,g,e.max_zoom);if(e.resolutions){const C=e.resolutions.map(a=>+a).sort((a,s)=>s-a);return SWt(C[I],g,e.min_pos[0],e.max_pos[0]).map(a=>[I,a])}return BWt(I,g,e.min_pos[0],e.max_pos[0],e.max_zoom,e.max_width).map(C=>[I,C])},RWt=(e,g)=>{if(e.axis||(e.axis=new Gk(e),e.pBase.addChild(e.axis.pAxis)),!e.options.axisPositionVertical&&!e.options.axisPositionHorizontal){e.axis.clearAxis();return}if(e.options.axisPositionVertical&&e.options.axisPositionVertical==="hidden"){e.axis.clearAxis();return}if(e.options.axisPositionHorizontal&&e.options.axisPositionHorizontal==="hidden"){e.axis.clearAxis();return}const I=e.options.axisMargin||0;e.options.axisPositionHorizontal==="left"||e.options.axisPositionVertical==="top"?(e.axis.pAxis.position.x=e.position[0]+I,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisRight(g,e.dimensions[1])):e.options.axisPositionHorizontal==="outsideLeft"||e.options.axisPositionVertical==="outsideTop"?(e.axis.pAxis.position.x=e.position[0]+I,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisLeft(g,e.dimensions[1])):e.options.axisPositionHorizontal==="right"||e.options.axisPositionVertical==="bottom"?(e.axis.pAxis.position.x=e.position[0]+e.dimensions[0]-I,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisLeft(g,e.dimensions[1])):(e.options.axisPositionHorizontal==="outsideRight"||e.options.axisPositionVertical==="outsideBottom")&&(e.axis.pAxis.position.x=e.position[0]+e.dimensions[0]-I,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisRight(g,e.dimensions[1]))},VWt=(e,g)=>{const I=e.valueScaleTransform,{y:i,k:n}=I,C=e.dimensions[1];i+g/n>-(n-1)*C&&i+g/n<0&&(e.valueScaleTransform=I.translate(0,g/n)),Object.values(e.fetchedTiles).forEach(r=>{r.graphics.position.y=e.valueScaleTransform.y}),e.animate()},WWt=(e,g,I,i)=>{const n=I.k,C=I.y,r=(e-C)/n,o=Math.max(n/g,1);let a=n*r+C-o*r;return a=Math.max(a,-(o-1)*i),a=Math.min(a,0),Ji.translate(0,a).scale(o)},XWt=(e,g)=>{const I=+g.split(".")[0],i=+g.split(".")[1],n=e.max_width,C=e.min_pos[0],r=n/2**I;return{tileX:C+i*r,tileWidth:r}};function HWt(e,g){Object.values(e.fetchedTiles).forEach(I=>{if(!I.drawnAtScale)return;const i=I.drawnAtScale.range(),n=e._xScale.range();if(i[0]!==n[0]||i[1]!==n[1]){e.renderTile(I);return}const C=(I.drawnAtScale.domain()[1]-I.drawnAtScale.domain()[0])/(e._xScale.domain()[1]-e._xScale.domain()[0]);if(C>2||C<.5)e.renderTile(I);else{const o=e._xScale.domain().map(I.drawnAtScale)[0];for(const a of g)a(I).scale.x=C,a(I).x=-o*C}})}const Kd={calculate1DVisibleTiles:wWt,calculate1DZoomLevel:gVe,drawAxis:RWt,movedY:VWt,getTilePosAndDimensions:XWt,stretchRects:HWt,zoomedY:WWt},TWt=Object.freeze(Object.defineProperty({__proto__:null,DenseDataExtrema1D:WX,DenseDataExtrema2D:e4,IS_TRACK_RANGE_SELECTABLE:E0,absToChr:Ti,accessorTransposition:RGe,addArrays:VGe,addClass:Ast,base64ToCanvas:sst,changeOptions:OVt,chrToAbs:pX,chromInfoBisector:wGe,cloneEvent:WGe,colorDomainToRgbaArray:Oc,colorToHex:Kt,colorToRgba:PGe,dataToGenomicLoci:vX,debounce:MQ,decToHexStr:dz,dictFromTuples:JGe,dictItems:Nr,dictKeys:Wr,dictValues:Eg,download:JG,expandCombinedTracks:j1,fillInMinWidths:OGe,flatten:Ost,forEach:_st,forwardEvent:BX,genomeLociToPixels:Lst,genomicRangeToChromosomeChunks:Ust,getAggregationFunction:t4,getDefaultTrackForDatatype:zQ,getElementDim:qGe,getTiledPlot:xct,getTrackByUid:gr,getTrackConfFromHGC:_lt,getTrackObjById:UZ,getTrackObjectFromHGC:g4,getTrackPositionByUid:OG,getTrackRenderer:pve,getXylofon:tve,gradient:gve,hasClass:fX,hasParent:Ive,hexStrToInt:ive,intoTheVoid:nve,isTrackOrChildTrack:Cve,isWithin:jQ,latToY:gct,lngToX:ict,loadChromInfos:Ict,map:UQ,max:hz,maxNonZero:mz,min:rve,minNonZero:fz,mod:nct,mountHGComponent:JRe,mountHGComponentAsync:QVt,ndarrayAssign:ove,ndarrayFlatten:sve,ndarrayToList:Ave,numericifyVersion:lve,objVals:XN,or:jS,parseChromsizesRows:HN,pixiTextToSvg:pz,q:pct,rangeQuery2d:bct,reduce:_Ge,relToAbsChromPos:yct,removeClass:Gct,removeHGComponent:UVt,resetD3BrushStyle:kp,rgbToHex:vct,scalesCenterAndK:Si,scalesToGenomeLoci:cve,segmentsToRows:VX,selectedItemsToSize:EB,showMousePosition:Ah,some:Rct,sum:$l,svgLine:uve,throttleAndDebounce:dve,tileToCanvas:Vct,timeout:$Q,toVoid:$o,totalTrackPixelHeight:Wct,trackUtils:Kd,trimTrailingSlash:TN,valueToColor:qQ,visitPositionedTracks:Is,visitTracks:LQ,waitForJsonComplete:gj,waitForTilesLoaded:JX,waitForTransitionsFinished:PRe},Symbol.toStringTag,{value:"Module"}));function nP(){return nP=Object.assign?Object.assign.bind():function(e){for(var g=1;gN.forwardRef((g,I)=>N.createElement(kWt,null,i=>N.createElement(e,nP({ref:I},g,{theme:i})))),Jl={"track-control":"_track-control_w7hx2_1","track-control-vertical":"_track-control-vertical_w7hx2_2","track-control-dark":"_track-control-dark_w7hx2_15","track-control-active":"_track-control-active_w7hx2_16 _track-control_w7hx2_1","track-control-left":"_track-control-left_w7hx2_24","track-control-vertical-active":"_track-control-vertical-active_w7hx2_30","track-control-padding-right":"_track-control-padding-right_w7hx2_48","track-control-button":"_track-control-button_w7hx2_52","track-control-button-vertical":"_track-control-button-vertical_w7hx2_81"},YWt=e=>Xg({[Jl["track-control-active"]]:e.isVisible,[Jl["track-control"]]:!e.isVisible,[Jl["track-control-left"]]:e.isAlignLeft,[Jl["track-control-vertical"]]:e.isVertical,[Jl["track-control-padding-right"]]:e.paddingRight,[Jl["track-control-dark"]]:e.theme===gI}),wV=e=>Xg("no-zoom",Jl["track-control-button"],{[Jl["track-control-button-vertical"]]:e.isVertical});let XD=null,rre=null;function IVe(e){(!e||!XD||Object.keys(e).some(i=>XD[i]!==e[i]))&&(XD=e,rre=sz(()=>N.createElement("svg",{className:wV(e),style:{height:"20px",width:"20px",...e.imgStyleMove}},N.createElement("title",null,"Move track"),N.createElement("use",{xlinkHref:"#move"}))));let g,I;return N.createElement("div",{className:YWt(e)},e.isMoveable&&N.createElement(rre,null),N.createElement("svg",{ref:i=>{g=i},className:wV(e),onClick:()=>{e.onConfigTrackMenuOpened(e.uid,g.getBoundingClientRect())},style:{height:"20px",width:"20px",...e.imgStyleSettings}},N.createElement("title",null,"Configure track"),N.createElement("use",{xlinkHref:"#cog"})),e.onAddSeries&&N.createElement("svg",{className:wV(e),onClick:()=>e.onAddSeries(e.uid),style:{height:"20px",width:"20px",...e.imgStyleAdd}},N.createElement("title",null,"Add series"),N.createElement("use",{xlinkHref:"#plus"})),N.createElement("svg",{ref:i=>{I=i},className:wV(e),onClick:()=>{e.onCloseTrackMenuOpened(e.uid,I.getBoundingClientRect())},style:{height:"20px",width:"20px",...e.imgStyleClose}},N.createElement("title",null,"Close track"),N.createElement("use",{xlinkHref:"#cross"})))}IVe.propTypes={imgStyleAdd:L.object,imgStyleClose:L.object,imgStyleMove:L.object,imgStyleSettings:L.object,isAlignLeft:L.bool,isMoveable:L.bool,isVertical:L.bool,isVisible:L.bool,onConfigTrackMenuOpened:L.func,onCloseTrackMenuOpened:L.func,onAddSeries:L.func,paddingRight:L.bool,theme:L.symbol.isRequired,uid:L.string};const vk=cm(IVe),CP={"center-track":"_center-track_fiu64_1","center-track-container":"_center-track-container_fiu64_6"},Jo={"track-range-selection":"_track-range-selection_5bcsr_1","track-range-selection-active":"_track-range-selection-active_5bcsr_8 _track-range-selection_5bcsr_1","track-range-selection-active-primary":"_track-range-selection-active-primary_5bcsr_14 _track-range-selection-active_5bcsr_8 _track-range-selection_5bcsr_1","track-range-selection-active-secondary":"_track-range-selection-active-secondary_5bcsr_18 _track-range-selection-active_5bcsr_8 _track-range-selection_5bcsr_1","track-range-selection-group-inactive":"_track-range-selection-group-inactive_5bcsr_22","track-range-selection-group-brush-selection":"_track-range-selection-group-brush-selection_5bcsr_26"};function KWt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function ore(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function UX(e){return UX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},UX(e)}const RV={pointerEvents:"all"};function Um(e){return e&&e.sourceEvent}let Cj=function(e){EWt(I,e);var g=MWt(I);function I(i){var n;return KWt(this,I),n=g.call(this,i),n.state={isVisible:!1},n.brushBehaviorX=WN().on("brush",n.brushedX.bind(Nl(n))).on("end",n.brushedXEnded.bind(Nl(n))),n.brushBehaviorY=LS().on("brush",n.brushedY.bind(Nl(n))).on("end",n.brushedYEnded.bind(Nl(n))),n.brushBehaviorXY=NQ().on("start",n.brushStarted.bind(Nl(n))).on("brush",n.brushedXY.bind(Nl(n))).on("end",n.brushedXYEnded.bind(Nl(n))),n}return FWt(I,[{key:"componentDidMount",value:function(){this.props.isRangeSelectionActive&&this.addBrush2d()}},{key:"shouldComponentUpdate",value:function(n,C){if(this.rangeSelectionTriggeredXY){if(this.rangeSelectionTriggeredXY=!1,this.rangeSelectionTriggeredXYEnd){const r=n.rangeSelection[0]||null;this.moveBrushXY([r,n.rangeSelection[1]],!0),this.rangeSelectionTriggeredXYEnd=!1}return this.state!==C}if(this.props.rangeSelection!==n.rangeSelection){const r=n.rangeSelection[0]||null;this.props.is1dRangeSelection?(this.rangeSelectionTriggeredX||this.moveBrushX(r,n.rangeSelectionEnd),this.rangeSelectionTriggeredXEnd&&this.moveBrushX(r,n.rangeSelectionEnd,!0),this.rangeSelectionTriggeredY||this.moveBrushY(r,n.rangeSelectionEnd),this.rangeSelectionTriggeredYEnd&&this.moveBrushY(r,n.rangeSelectionEnd,!0),this.rangeSelectionTriggeredX=!1,this.rangeSelectionTriggeredXEnd=!1,this.rangeSelectionTriggeredY=!1,this.rangeSelectionTriggeredYEnd=!1):this.moveBrushXY([r,n.rangeSelection[1]],n.rangeSelectionEnd);const o=this.props.is1dRangeSelection&&!n.is1dRangeSelection&&r===null;return this.state!==C||o}return!0}},{key:"componentDidUpdate",value:function(){this.props.isRangeSelectionActive?this.addBrush2d():(this.removeBrush1d(),this.removeBrush2d())}},{key:"addBrush1d",value:function(){!this.brushElX||!this.brushElY||this.brushElXOld===this.brushElX&&this.brushElYOld===this.brushElY||(this.brushElXOld&&this.brushElXOld.on(".brush",null),this.brushElYOld&&this.brushElYOld.on(".brush",null),this.brushElX.call(this.brushBehaviorX),this.brushElY.call(this.brushBehaviorY),kp(this.brushElX,Jo["track-range-selection-group-brush-selection"]),kp(this.brushElY,Jo["track-range-selection-group-brush-selection"]),this.brushElXOld=this.brushElX,this.brushElYOld=this.brushElY,this.brushIs1dBound=!0)}},{key:"addBrush2d",value:function(){!this.brushElXY||this.brushElXYOld===this.brushElXY||(this.brushElXYOld&&this.brushElXYOld.on(".brush",null),this.brushElXY.call(this.brushBehaviorXY),this.brushElXYOld=this.brushElXY,this.brushIs2dBound=!0,kp(this.brushElXY,Jo["track-range-selection-group-brush-selection"]))}},{key:"brushedX",value:function(n){const C=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Um(n)||!this.props.onRangeSelectionX||!this.props.is1dRangeSelection||C)&&(this.rangeSelectionTriggeredX=!0,this.props.onRangeSelectionX(n.selection))}},{key:"brushedXEnded",value:function(n){const C=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,!(!Um(n)||!this.props.onRangeSelectionX||!this.props.is1dRangeSelection||C)&&(this.rangeSelectionTriggeredX=!0,this.rangeSelectionTriggeredXEnd=!0,this.props.onRangeSelectionXEnd(n.selection))}},{key:"brushedY",value:function(n){const C=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Um(n)||!this.props.onRangeSelectionY||!this.props.is1dRangeSelection||C)&&(this.rangeSelectionTriggeredY=!0,this.props.onRangeSelectionY(n.selection))}},{key:"brushedYEnded",value:function(n){const C=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,!(!Um(n)||!this.props.onRangeSelectionY||!this.props.is1dRangeSelection||C)&&(this.rangeSelectionTriggeredY=!0,this.rangeSelectionTriggeredYEnd=!0,this.props.onRangeSelectionYEnd(n.selection))}},{key:"brushedXY",value:function(n){const C=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Um(n)||!this.props.onRangeSelectionXY||C||this.props.is1dRangeSelection)&&(this.rangeSelectionTriggeredXY=!0,this.props.onRangeSelectionXY([[n.selection[0][0],n.selection[1][0]],[n.selection[0][1],n.selection[1][1]]]))}},{key:"brushedXYEnded",value:function(n){if(this.props.is1dRangeSelection)return;const C=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,n.selection&&n.sourceEvent&&this.props.onRangeSelectionXY&&!C&&(this.rangeSelectionTriggeredXY=!0,this.rangeSelectionTriggeredXYEnd=!0,this.props.onRangeSelectionXYEnd([[n.selection[0][0],n.selection[1][0]],[n.selection[0][1],n.selection[1][1]]])),n.selection||(this.rangeSelectionTriggeredXY=!0,this.props.onRangeSelectionReset())}},{key:"brushStarted",value:function(n){Um(n)&&this.props.onRangeSelectionStart()}},{key:"moveBrushX",value:function(n,C=!1){if(!this.brushEl)return;this.brushIs2dBound&&(this.removeBrush2d(),this.addBrush1d());const r=n?[this.props.scaleX(n[0]),this.props.scaleX(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,C?this.brushElX.transition().call(this.brushBehaviorX.move,r):this.brushElX.call(this.brushBehaviorX.move,r)}},{key:"moveBrushY",value:function(n,C=!1){if(!this.brushEl)return;this.brushIs2dBound&&(this.removeBrush2d(),this.addBrush1d());const r=n?[this.props.scaleY(n[0]),this.props.scaleY(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,C?this.brushElY.transition().call(this.brushBehaviorY.move,r):this.brushElY.call(this.brushBehaviorY.move,r)}},{key:"moveBrushXY",value:function(n,C=!1){if(!this.brushEl)return;const r=[[this.props.scaleX(n[0][0]),this.props.scaleY(n[1][0])],[this.props.scaleX(n[0][1]),this.props.scaleY(n[1][1])]];this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,C?this.brushElXY.transition().call(this.brushBehaviorXY.move,r):this.brushElXY.call(this.brushBehaviorXY.move,r)}},{key:"mouseEnterHandler",value:function(){this.props.isRangeSelectionActive||this.setState({isVisible:!0})}},{key:"mouseLeaveHandler",value:function(){this.setState({isVisible:!1})}},{key:"removeBrush1d",value:function(){this.brushIs1dBound&&(this.brushElX&&(this.brushElX.call(this.brushBehaviorX.move,null),this.brushElX.on(".brush",null)),this.brushElY&&(this.brushElY.call(this.brushBehaviorY.move,null),this.brushElY.on(".brush",null)),this.brushIs1dBound=!1)}},{key:"removeBrush2d",value:function(){this.brushIs2dBound&&this.brushElXY&&(this.brushElXY.call(this.brushBehaviorXY.move,null),this.brushElXY.on(".brush",null),this.brushElXYOld=void 0,this.brushIs2dBound=!1,this.props.is1dRangeSelection||this.props.onRangeSelectionReset())}},{key:"render",value:function(){const n=this.props.tracks.map(s=>E0(s)).reduce(jS,!1),C=this.props.tracks.some(s=>s.contents?s.contents.some(A=>A.type==="heatmap"?A.options.colorbarPosition==="topRight":!1):s.type==="heatmap"?s.options.colorbarPosition==="topRight":!1);let r="track-range-selection";this.props.isRangeSelectionActive&&(r+=this.props.is1dRangeSelection?"-active-secondary":"-active-primary");const o=Xg(!this.props.is1dRangeSelection&&Jo["track-range-selection-group-inactive"]),a=Xg(this.props.is1dRangeSelection&&Jo["track-range-selection-group-inactive"]);return N.createElement("div",{className:Xg(this.props.className,CP["center-track"]),onMouseEnter:this.mouseEnterHandler.bind(this),onMouseLeave:this.mouseLeaveHandler.bind(this),style:{height:this.props.height,width:this.props.width}},n&&N.createElement("svg",{className:Jo[r],style:{height:this.props.height,width:this.props.width},xmlns:"http://www.w3.org/2000/svg"},N.createElement("g",{ref:s=>{this.brushElX=hg(s)},className:o}),N.createElement("g",{ref:s=>{this.brushElY=hg(s)},className:o}),N.createElement("g",{ref:s=>{this.brushElXY=hg(s)},className:a})),this.props.editable&&N.createElement(vk,{imgStyleAdd:RV,imgStyleClose:RV,imgStyleMove:RV,imgStyleSettings:RV,isMoveable:!1,isVisible:this.state.isVisible||this.props.uid===this.props.configTrackMenuId,onAddSeries:this.props.onAddSeries,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,paddingRight:C,uid:this.props.uid}))}}]),I}(N.Component);Cj.defaultProps={className:"center-track",configTrackMenuId:null,is1dRangeSelection:!1,rangeSelectionEnd:L.bool,isRangeSelectionActive:!1,scaleX:e=>e,scaleY:e=>e};Cj.propTypes={className:L.string,configTrackMenuId:L.string,editable:L.bool,height:L.number.isRequired,is1dRangeSelection:L.bool,isRangeSelectionActive:L.bool,onAddSeries:L.func.isRequired,onCloseTrackMenuOpened:L.func.isRequired,onConfigTrackMenuOpened:L.func.isRequired,onRangeSelectionX:L.func.isRequired,onRangeSelectionXEnd:L.func.isRequired,onRangeSelectionY:L.func.isRequired,onRangeSelectionYEnd:L.func.isRequired,onRangeSelectionXY:L.func.isRequired,onRangeSelectionXYEnd:L.func.isRequired,onRangeSelectionReset:L.func.isRequired,onRangeSelectionStart:L.func.isRequired,rangeSelection:L.array.isRequired,rangeSelectionEnd:L.bool,scaleX:L.func,scaleY:L.func,tracks:L.array.isRequired,uid:L.string.isRequired,width:L.number.isRequired};function oP(){return oP=Object.assign?Object.assign.bind():function(e){for(var g=1;g({event:"fake",handler:$o}),unsubscribe:$o,clear:$o},{Provider:JWt,Consumer:OWt}=N.createContext(rj),ty=e=>N.forwardRef((g,I)=>N.createElement(OWt,null,i=>N.createElement(e,oP({ref:I},g,{pubSub:i})))),_Wt={"drag-listening-div-active":"_drag-listening-div-active_19gkt_1"};function LWt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function are(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function QX(e){return QX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},QX(e)}let oj=function(e){$Wt(I,e);var g=qWt(I);function I(i){var n;return LWt(this,I),n=g.call(this,i),n.state={dragOnTop:!1},n}return UWt(I,[{key:"render",value:function(){let n="red";return this.props.enabled&&this.state.dragOnTop?n="green":this.props.enabled&&(n="blue"),N.createElement("div",{className:Xg("DragListeningDiv",{[_Wt["drag-listening-div-active"]]:this.props.enabled}),onDragEnter:()=>{this.setState({dragOnTop:!0})},onDragLeave:()=>{this.setState({dragOnTop:!1})},onDragOver:C=>{C.preventDefault()},onDrop:()=>{if(!this.props.enabled)return;const C=this.props.draggingHappening,r={type:this.props.defaultTrackType,uid:lg.nice(),tilesetUid:C.tilesetUid,server:C.server};this.props.onTrackDropped(r),this.props.pubSub.publish("trackDropped",r)},style:{background:n,opacity:.6,...this.props.style}})}}]),I}(N.Component);oj.defaultProps={enabled:!1,style:{},draggingHappening:{},onTrackDropped:()=>{}};oj.propTypes={enabled:L.bool,style:L.object,defaultTrackType:L.object,draggingHappening:L.object,onTrackDropped:L.func,position:L.string.isRequired,pubSub:L.object.isRequired};const VV=ty(oj),Nu={"gallery-tracks":"_gallery-tracks_fbxxi_1","gallery-track":"_gallery-track_fbxxi_1","gallery-sub-track":"_gallery-sub-track_fbxxi_18","gallery-invisible-track":"_gallery-invisible-track_fbxxi_19"},I9t="_horizontalList_1y7td_7",i9t="_list_1y7td_14",n9t="_stylizedList_1y7td_21",C9t="_stylizedItem_1y7td_28",r9t="_stylizedHelper_1y7td_39",o9t="_horizontalItem_1y7td_44",a9t="_domain_1y7td_60",Oo={"tiled-plot":"_tiled-plot_1y7td_1",horizontalList:I9t,list:i9t,stylizedList:n9t,stylizedItem:C9t,stylizedHelper:r9t,horizontalItem:o9t,"resizable-track":"_resizable-track_1y7td_55",domain:a9t};function A9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Are(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jX(e){return jX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},jX(e)}const WV={pointerEvents:"all"};let iVe=function(e){u9t(I,e);var g=d9t(I);function I(i){var n;return A9t(this,I),n=g.call(this,i),n.state={hovering:!1},n}return s9t(I,[{key:"mouseEnterHandler",value:function(){this.setState({hovering:!0})}},{key:"mouseLeaveHandler",value:function(){this.setState({hovering:!1})}},{key:"render",value:function(){return N.createElement("div",{className:Xg("gallery-tracks",Nu["gallery-tracks"])},this.props.tracks&&this.props.tracks.map((n,C)=>N.createElement("div",{key:n.uid||C,className:Nu["gallery-track"],onMouseLeave:this.mouseLeaveHandler.bind(this),style:{top:n.height*C,right:n.height*C,bottom:n.height*C,left:n.height*C}},N.createElement("div",{className:Nu["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{top:0,right:0,left:0,height:n.height}}),N.createElement("div",{className:Nu["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{top:0,right:0,bottom:0,width:n.height}}),N.createElement("div",{className:Nu["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{right:0,bottom:0,left:0,height:n.height}}),N.createElement("div",{className:Nu["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{top:0,bottom:0,left:0,width:n.height}}),N.createElement("div",{className:Nu["gallery-invisible-track"],onMouseLeave:this.mouseLeaveHandler.bind(this),style:{top:n.height,right:n.height,bottom:n.height,left:n.height}}),this.props.editable&&N.createElement(vk,{configMenuVisible:!0,imgStyleAdd:WV,imgStyleClose:WV,imgStyleMove:WV,imgStyleSettings:WV,isMoveable:!1,isVisible:this.state.hovering,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,uid:n.uid||C}))))}}]),I}(N.Component);iVe.propTypes={editable:L.bool,onCloseTrackMenuOpened:L.func.isRequired,onConfigTrackMenuOpened:L.func.isRequired,tracks:L.array};function p9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function sre(e,g){for(var I=0;I{}),this.pubSubs.push(this.pubSub.subscribe("app.mouseMove",this.defaultMouseMoveHandler.bind(this))),this.isLeftModified=!1}return b9t(e,[{key:"isWithin",value:function(I,i){let n=I,C=i,r=this.position[0],o=this.position[1];return this.isLeftModified&&(n=i,C=I,r=this.position[1],o=this.position[0]),jQ(n,C,r,this.dimensions[0]+r,o,this.dimensions[1]+o)}},{key:"getProp",value:function(I){return()=>this[I]}},{key:"getData",value:function(){}},{key:"click",value:function(I,i,n){return{type:"generic",event:n,payload:null}}},{key:"clickOutside",value:function(){}},{key:"getDimensions",value:function(){return this.dimensions}},{key:"setDimensions",value:function(I){this.dimensions=I,this._xScale.range([0,this.dimensions[0]]),this._yScale.range([0,this.dimensions[1]])}},{key:"refXScale",value:function(I){return I?(this._refXScale=I,this):this._refXScale}},{key:"refYScale",value:function(I){return I?(this._refYScale=I,this):this._refYScale}},{key:"xScale",value:function(I){return I?(this._xScale=I,this):this._xScale}},{key:"yScale",value:function(I){return I?(this._yScale=I,this):this._yScale}},{key:"zoomed",value:function(I,i){this.xScale(I),this.yScale(i)}},{key:"refScalesChanged",value:function(I,i){this._refXScale=I,this._refYScale=i}},{key:"draw",value:function(){}},{key:"getPosition",value:function(){return this.position}},{key:"setPosition",value:function(I){this.position=I}},{key:"defaultMouseMoveHandler",value:function(I){}},{key:"remove",value:function(){this.pubSubs.forEach(I=>this.pubSub.unsubscribe(I)),this.pubSubs=[]}},{key:"rerender",value:function(I){}},{key:"respondsToPosition",value:function(I,i){return this.isWithin(I,i)}},{key:"zoomedY",value:function(I,i){}},{key:"movedY",value:function(I){}}]),e}();function G9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function lre(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function e0(e){return e0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},e0(e)}function T9t(e,g){const I=D0(g,e);return tm(`.${I}`,e)(e)}function N9t(e,g){const I=e.map(C=>+C).sort((C,r)=>r-C),i=I[g],n=I[I.length-1];return T9t(i,n)}function k9t(e,g,I,i){const n=g/(2**e*I);if(!Number.isNaN(n)){const C=g/(2**i*I),r=D0(C,n);return tm(`.${r}`,n)(n)}return console.warn("NaN resolution, screen is probably too small."),""}let mC=function(e){R9t(I,e);var g=V9t(I);function I(i,n){var C;G9t(this,I),C=g.call(this,i,n);const{scene:r}=i;C.scene=r,C.delayDrawing=!1,C.pBase=new ot.PIXI.Graphics,C.pMasked=new ot.PIXI.Graphics,C.pMask=new ot.PIXI.Graphics,C.pMain=new ot.PIXI.Graphics,C.pBorder=new ot.PIXI.Graphics,C.pBackground=new ot.PIXI.Graphics,C.pForeground=new ot.PIXI.Graphics,C.pLabel=new ot.PIXI.Graphics,C.pMobile=new ot.PIXI.Graphics,C.pAxis=new ot.PIXI.Graphics,C.pMouseOver=new ot.PIXI.Graphics,C.scene.addChild(C.pBase),C.pBase.addChild(C.pMasked),C.pMasked.addChild(C.pBackground),C.pMasked.addChild(C.pMain),C.pMasked.addChild(C.pMask),C.pMasked.addChild(C.pMobile),C.pMasked.addChild(C.pBorder),C.pMasked.addChild(C.pLabel),C.pMasked.addChild(C.pForeground),C.pMasked.addChild(C.pMouseOver),C.pBase.addChild(C.pAxis),C.pMasked.mask=C.pMask,C.prevOptions="",C.options=Object.assign(C.options,n);const o=C.getName();return C.labelTextFontFamily="Arial",C.labelTextFontSize=12,C.labelXOffset=0,C.labelText=new ot.PIXI.Text(o,{fontSize:`${C.labelTextFontSize}px`,fontFamily:C.labelTextFontFamily,fill:"black"}),C.pLabel.addChild(C.labelText),C.errorText=new ot.PIXI.Text("",{fontSize:"12px",fontFamily:"Arial",fill:"red"}),C.errorText.anchor.x=.5,C.errorText.anchor.y=.5,C.pLabel.addChild(C.errorText),C.errorTextText="",C.flipText=!1,C.tilesetInfo=void 0,C}return v9t(I,[{key:"setLabelText",value:function(){}},{key:"setPosition",value:function(n){this.position=n,this.drawBorder(),this.drawLabel(),this.drawBackground(),this.setMask(this.position,this.dimensions),this.setForeground()}},{key:"setDimensions",value:function(n){rW(e0(I.prototype),"setDimensions",this).call(this,n),this.drawBorder(),this.drawLabel(),this.drawBackground(),this.setMask(this.position,this.dimensions),this.setForeground()}},{key:"setMask",value:function(n,C){this.pMask.clear(),this.pMask.beginFill(),this.pMask.drawRect(n[0],n[1],C[0],C[1]),this.pMask.endFill()}},{key:"setForeground",value:function(){this.pForeground.position.y=this.position[1],this.pForeground.position.x=this.position[0]}},{key:"remove",value:function(){this.pBase.clear(),this.scene.removeChild(this.pBase)}},{key:"drawBorder",value:function(){const n=this.pBorder;if(n.clear(),!this.options||!this.options.trackBorderWidth)return;const C=Kt(this.options.trackBorderColor?this.options.trackBorderColor:"white");n.lineStyle(this.options.trackBorderWidth,C),n.drawRect(this.position[0],this.position[1],this.dimensions[0],this.dimensions[1])}},{key:"drawError",value:function(){if(this.errorText.x=this.position[0]+this.dimensions[0]/2,this.errorText.y=this.position[1]+this.dimensions[1]/2,this.errorText.text=this.errorTextText,this.errorTextText&&this.errorTextText.length){const n=this.pBorder;n.clear(),n.lineStyle(1,Kt("red")),n.drawRect(this.position[0],this.position[1],this.dimensions[0],this.dimensions[1])}}},{key:"drawBackground",value:function(){const n=this.pBackground;if(n.clear(),!this.options||!this.options.backgroundColor)return;let C=1,r=this.options.backgroundColor;this.options.backgroundColor==="transparent"&&(C=0,r="white");const o=Kt(r);n.beginFill(o,C),n.drawRect(this.position[0],this.position[1],this.dimensions[0],this.dimensions[1])}},{key:"getLabelColor",value:function(){return this.options.labelColor&&this.options.labelColor!=="[glyph-color]"?this.options.labelColor:this.options.lineStrokeColor||this.options.barFillColor||"black"}},{key:"getName",value:function(){return this.options.name?this.options.name:this.tilesetInfo&&this.tilesetInfo.name||""}},{key:"drawLabel",value:function(){if(!this.labelText)return;const n=this.pLabel;if(n.clear(),!this.options||!this.options.labelPosition||this.options.labelPosition==="hidden"){this.labelText.alpha=0;return}const{labelBackgroundColor:C="white",labelBackgroundOpacity:r=.5}=this.options;n.beginFill(Kt(C),+r);const o=Kt(this.getLabelColor()),a=2;if(this.dimensions[0]<0)return;let s=this.options.labelShowAssembly&&this.tilesetInfo&&this.tilesetInfo.coordSystem?`${this.tilesetInfo.coordSystem} | `:"";if(s+=this.getName(),this.options.labelShowResolution&&Ult(this.tilesetInfo)&&this.tilesetInfo.bins_per_dimension){const d=k9t(this.calculateZoomLevel(),this.tilesetInfo.max_width,this.tilesetInfo.bins_per_dimension,this.tilesetInfo.max_zoom);s+=` -[Current data resolution: ${d}]`}else if(this.options.labelShowResolution&&Qlt(this.tilesetInfo)){const d=N9t(this.tilesetInfo.resolutions,this.calculateZoomLevel());s+=` + `)}return ye}(),enumerable:!1,configurable:!1})}tt("node","Consider using the getElement() method instead."),tt("nodes","Consider using the getElements() method instead."),tt("renderer",""),tt("options",""),tt("complexSelector",""),e.default=_e})(rj);var LRe={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var g=a4,i=I(g);function I(r){return r&&r.__esModule?r:{default:r}}function n(r,C){return new i.default(r,null,C)}})(LRe);var URe={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var g=rj,i=I(g);function I(r){return r&&r.__esModule?r:{default:r}}function n(r,C){return new i.default(r,null,C)}})(URe);var QRe={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var g=P0,i=C(g),I=uu,n=C(I),r=Iw;function C(a){return a&&a.__esModule?a:{default:a}}function o(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=(0,n.default)(s),l=A.createRenderer((0,i.default)({mode:"string"},s)),c=l.render(a,s.context);return(0,r.loadCheerioRoot)(c)}})(QRe);var xVt=a4,EVt=gy(xVt),MVt=rj,zVt=gy(MVt),PVt=ARe,JVt=gy(PVt),OVt=LRe,_Vt=gy(OVt),LVt=URe,UVt=gy(LVt),QVt=QRe,jVt=gy(QVt),$Vt=lm;function gy(e){return e&&e.__esModule?e:{default:e}}var qVt={render:jVt.default,shallow:UVt.default,mount:_Vt.default,ShallowWrapper:zVt.default,ReactWrapper:EVt.default,configure:$Vt.merge,EnzymeAdapter:JVt.default};const Cj=100,e1t=(e,g,i,I)=>{for(const{viewId:n,trackId:r,track:C}of e.instance().iterateOverTracks())n===g&&r===i&&(C.options={...C.options,...I});e.setState(e.instance().state)},t1t=e=>{for(const g of e.iterateOverTracks())if(Sve(e,g.viewId,g.trackId).activeTransitions>0)return!0;return!1},jRe=(e,g)=>{t1t(e)?setTimeout(()=>{jRe(e,g)},Cj):g()},oj=e=>{EB>0?setTimeout(()=>oj(e),Cj):e()},g1t=e=>{for(const g of e.iterateOverTracks()){let i=o4(e,g.viewId,g.trackId);if(!(!g.track.server&&!g.track.tilesetUid&&!(g.track.data&&g.track.data.type==="divided")))if(g.track.data&&g.track.data.type==="divided"||g.track.server&&g.track.tilesetUid){if(i.originalTrack&&(i=i.originalTrack),!(i.tilesetInfo||i.chromInfo)||i.fetching&&i.fetching.size)return!0}else throw Error('"server" and "tilesetUid" belong together')}return!1},LX=(e,g)=>{g1t(e)?setTimeout(()=>{LX(e,g)},Cj):g()},$Re=(e,g,i,I,n={})=>{const{style:r="width:800px; background-color: lightgreen;",bounded:C=!1,extendedDelay:o=!1}=n;g&&(g.unmount(),g.detach()),e&&globalThis.document.body.removeChild(e);const a=globalThis.document.createElement("div");globalThis.document.body.appendChild(a),a.setAttribute("style",r),a.setAttribute("id","simple-hg-component");const s=qVt.mount(N.createElement(my,{options:{bounded:C},viewConfig:i}),{attachTo:a});return s.update(),oj(()=>{if(o){const A=()=>setTimeout(()=>{I()},1e3);LX(s.instance(),A)}else LX(s.instance(),I)}),[a,s]},i1t=e=>{e&&(qi.unmountComponentAtNode(e),document.body.removeChild(e))};async function I1t(e,g,i,I){let n;return await new Promise(r=>{n=$Re(e,g,i,r,I)}),n}var t0=0,tG=0,uZ=0,qRe=1e3,UX,gG,QX=0,mh=0,wk=0,jB=typeof performance=="object"&&performance.now?performance:Date,eVe=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function aj(){return mh||(eVe(n1t),mh=jB.now()+wk)}function n1t(){mh=0}function jX(){this._call=this._time=this._next=null}jX.prototype=tVe.prototype={constructor:jX,restart:function(e,g,i){if(typeof e!="function")throw new TypeError("callback is not a function");i=(i==null?aj():+i)+(g==null?0:+g),!this._next&&gG!==this&&(gG?gG._next=this:UX=this,gG=this),this._call=e,this._time=i,rP()},stop:function(){this._call&&(this._call=null,this._time=1/0,rP())}};function tVe(e,g,i){var I=new jX;return I.restart(e,g,i),I}function r1t(){aj(),++t0;for(var e=UX,g;e;)(g=mh-e._time)>=0&&e._call.call(void 0,g),e=e._next;--t0}function nCe(){mh=(QX=jB.now())+wk,t0=tG=0;try{r1t()}finally{t0=0,o1t(),mh=0}}function C1t(){var e=jB.now(),g=e-QX;g>qRe&&(wk-=g,QX=e)}function o1t(){for(var e,g=UX,i,I=1/0;g;)g._call?(I>g._time&&(I=g._time),e=g,g=g._next):(i=g._next,g._next=null,g=e?e._next=i:UX=i);gG=e,rP(I)}function rP(e){if(!t0){tG&&(tG=clearTimeout(tG));var g=e-mh;g>24?(e<1/0&&(tG=setTimeout(nCe,e-jB.now()-wk)),uZ&&(uZ=clearInterval(uZ))):(uZ||(QX=jB.now(),uZ=setInterval(C1t,qRe)),t0=1,eVe(nCe))}}function rCe(e,g,i){var I=new jX;return g=g==null?0:+g,I.restart(n=>{I.stop(),e(n+g)},g,i),I}var a1t=M0("start","end","cancel","interrupt"),A1t=[],gVe=0,CP=1,oP=2,oW=3,CCe=4,aP=5,aW=6;function Rk(e,g,i,I,n,r){var C=e.__transition;if(!C)e.__transition={};else if(i in C)return;s1t(e,i,{name:g,index:I,group:n,on:a1t,tween:A1t,time:r.time,delay:r.delay,duration:r.duration,ease:r.ease,timer:null,state:gVe})}function Aj(e,g){var i=Ba(e,g);if(i.state>gVe)throw new Error("too late; already scheduled");return i}function kA(e,g){var i=Ba(e,g);if(i.state>oW)throw new Error("too late; already running");return i}function Ba(e,g){var i=e.__transition;if(!i||!(i=i[g]))throw new Error("transition not found");return i}function s1t(e,g,i){var I=e.__transition,n;I[g]=i,i.timer=tVe(r,0,i.time);function r(s){i.state=CP,i.timer.restart(C,i.delay,i.time),i.delay<=s&&C(s-i.delay)}function C(s){var A,l,c,u;if(i.state!==CP)return a();for(A in I)if(u=I[A],u.name===i.name){if(u.state===oW)return rCe(C);u.state===CCe?(u.state=aW,u.timer.stop(),u.on.call("interrupt",e,e.__data__,u.index,u.group),delete I[A]):+AoP&&I.state=0&&(g=g.slice(0,i)),!g||g==="start"})}function E1t(e,g,i){var I,n,r=x1t(g)?Aj:kA;return function(){var C=r(this,e),o=C.on;o!==I&&(n=(I=o).copy()).on(g,i),C.on=n}}function M1t(e,g){var i=this._id;return arguments.length<2?Ba(this.node(),i).on.on(e):this.each(E1t(i,e,g))}function z1t(e){return function(){var g=this.parentNode;for(var i in this.__transition)if(+i!==e)return;g&&g.removeChild(this)}}function P1t(){return this.on("end.remove",z1t(this._id))}function J1t(e){var g=this._name,i=this._id;typeof e!="function"&&(e=xS(e));for(var I=this._groups,n=I.length,r=new Array(n),C=0;CCP&&I.name===g)return new SA([[e]],hWt,g,+n)}return null}const fWt=Object.freeze(Object.defineProperty({__proto__:null,active:mWt,interrupt:cv,transition:nVe},Symbol.toStringTag,{value:"Module"})),RV=e=>()=>e;function pWt(e,{sourceEvent:g,target:i,transform:I,dispatch:n}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:g,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},transform:{value:I,enumerable:!0,configurable:!0},_:{value:n}})}function oA(e,g,i){this.k=e,this.x=g,this.y=i}oA.prototype={constructor:oA,scale:function(e){return e===1?this:new oA(this.k*e,this.x,this.y)},translate:function(e,g){return e===0&g===0?this:new oA(this.k,this.x+this.k*e,this.y+this.k*g)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var JI=new oA(1,0,0);CVe.prototype=oA.prototype;function CVe(e){for(;!e.__zoom;)if(!(e=e.parentNode))return JI;return e.__zoom}function YD(e){e.stopImmediatePropagation()}function dZ(e){e.preventDefault(),e.stopImmediatePropagation()}function bWt(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function yWt(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function oCe(){return this.__zoom||JI}function ZWt(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function GWt(){return navigator.maxTouchPoints||"ontouchstart"in this}function vWt(e,g,i){var I=e.invertX(g[0][0])-i[0][0],n=e.invertX(g[1][0])-i[1][0],r=e.invertY(g[0][1])-i[0][1],C=e.invertY(g[1][1])-i[1][1];return e.translate(n>I?(I+n)/2:Math.min(0,I)||Math.max(0,n),C>r?(r+C)/2:Math.min(0,r)||Math.max(0,C))}function AP(){var e=bWt,g=yWt,i=vWt,I=ZWt,n=GWt,r=[0,1/0],C=[[-1/0,-1/0],[1/0,1/0]],o=250,a=pIt,s=M0("start","zoom","end"),A,l,c,u=500,d=150,h=0,m=10;function f(R){R.property("__zoom",oCe).on("wheel.zoom",v,{passive:!1}).on("mousedown.zoom",w).on("dblclick.zoom",V).filter(n).on("touchstart.zoom",S).on("touchmove.zoom",X).on("touchend.zoom touchcancel.zoom",W).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}f.transform=function(R,H,k,K){var D=R.selection?R.selection():R;D.property("__zoom",oCe),R!==D?Z(R,H,k,K):D.interrupt().each(function(){B(this,arguments).event(K).start().zoom(null,typeof H=="function"?H.apply(this,arguments):H).end()})},f.scaleBy=function(R,H,k,K){f.scaleTo(R,function(){var D=this.__zoom.k,J=typeof H=="function"?H.apply(this,arguments):H;return D*J},k,K)},f.scaleTo=function(R,H,k,K){f.transform(R,function(){var D=g.apply(this,arguments),J=this.__zoom,P=k==null?y(D):typeof k=="function"?k.apply(this,arguments):k,te=J.invert(P),q=typeof H=="function"?H.apply(this,arguments):H;return i(p(b(J,q),P,te),D,C)},k,K)},f.translateBy=function(R,H,k,K){f.transform(R,function(){return i(this.__zoom.translate(typeof H=="function"?H.apply(this,arguments):H,typeof k=="function"?k.apply(this,arguments):k),g.apply(this,arguments),C)},null,K)},f.translateTo=function(R,H,k,K,D){f.transform(R,function(){var J=g.apply(this,arguments),P=this.__zoom,te=K==null?y(J):typeof K=="function"?K.apply(this,arguments):K;return i(JI.translate(te[0],te[1]).scale(P.k).translate(typeof H=="function"?-H.apply(this,arguments):-H,typeof k=="function"?-k.apply(this,arguments):-k),J,C)},K,D)};function b(R,H){return H=Math.max(r[0],Math.min(r[1],H)),H===R.k?R:new oA(H,R.x,R.y)}function p(R,H,k){var K=H[0]-k[0]*R.k,D=H[1]-k[1]*R.k;return K===R.x&&D===R.y?R:new oA(R.k,K,D)}function y(R){return[(+R[0][0]+ +R[1][0])/2,(+R[0][1]+ +R[1][1])/2]}function Z(R,H,k,K){R.on("start.zoom",function(){B(this,arguments).event(K).start()}).on("interrupt.zoom end.zoom",function(){B(this,arguments).event(K).end()}).tween("zoom",function(){var D=this,J=arguments,P=B(D,J).event(K),te=g.apply(D,J),q=k==null?y(te):typeof k=="function"?k.apply(D,J):k,$=Math.max(te[1][0]-te[0][0],te[1][1]-te[0][1]),j=D.__zoom,ge=typeof H=="function"?H.apply(D,J):H,Q=a(j.invert(q).concat($/j.k),ge.invert(q).concat($/ge.k));return function(Ie){if(Ie===1)Ie=ge;else{var he=Q(Ie),ne=$/he[2];Ie=new oA(ne,q[0]-he[0]*ne,q[1]-he[1]*ne)}P.zoom(null,Ie)}})}function B(R,H,k){return!k&&R.__zooming||new G(R,H)}function G(R,H){this.that=R,this.args=H,this.active=0,this.sourceEvent=null,this.extent=g.apply(R,H),this.taps=0}G.prototype={event:function(R){return R&&(this.sourceEvent=R),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(R,H){return this.mouse&&R!=="mouse"&&(this.mouse[1]=H.invert(this.mouse[0])),this.touch0&&R!=="touch"&&(this.touch0[1]=H.invert(this.touch0[0])),this.touch1&&R!=="touch"&&(this.touch1[1]=H.invert(this.touch1[0])),this.that.__zoom=H,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(R){var H=hg(this.that).datum();s.call(R,this.that,new pWt(R,{sourceEvent:this.sourceEvent,target:f,type:R,transform:this.that.__zoom,dispatch:s}),H)}};function v(R,...H){if(!e.apply(this,arguments))return;var k=B(this,H).event(R),K=this.__zoom,D=Math.max(r[0],Math.min(r[1],K.k*Math.pow(2,I.apply(this,arguments)))),J=Pg(R);if(k.wheel)(k.mouse[0][0]!==J[0]||k.mouse[0][1]!==J[1])&&(k.mouse[1]=K.invert(k.mouse[0]=J)),clearTimeout(k.wheel);else{if(K.k===D)return;k.mouse=[J,K.invert(J)],cv(this),k.start()}dZ(R),k.wheel=setTimeout(P,d),k.zoom("mouse",i(p(b(K,D),k.mouse[0],k.mouse[1]),k.extent,C));function P(){k.wheel=null,k.end()}}function w(R,...H){if(c||!e.apply(this,arguments))return;var k=R.currentTarget,K=B(this,H,!0).event(R),D=hg(R.view).on("mousemove.zoom",q,!0).on("mouseup.zoom",$,!0),J=Pg(R,k),P=R.clientX,te=R.clientY;HN(R.view),YD(R),K.mouse=[J,this.__zoom.invert(J)],cv(this),K.start();function q(j){if(dZ(j),!K.moved){var ge=j.clientX-P,Q=j.clientY-te;K.moved=ge*ge+Q*Q>h}K.event(j).zoom("mouse",i(p(K.that.__zoom,K.mouse[0]=Pg(j,k),K.mouse[1]),K.extent,C))}function $(j){D.on("mousemove.zoom mouseup.zoom",null),TN(j.view,K.moved),dZ(j),K.event(j).end()}}function V(R,...H){if(e.apply(this,arguments)){var k=this.__zoom,K=Pg(R.changedTouches?R.changedTouches[0]:R,this),D=k.invert(K),J=k.k*(R.shiftKey?.5:2),P=i(p(b(k,J),K,D),g.apply(this,H),C);dZ(R),o>0?hg(this).transition().duration(o).call(Z,P,K,R):hg(this).call(f.transform,P,K,R)}}function S(R,...H){if(e.apply(this,arguments)){var k=R.touches,K=k.length,D=B(this,H,R.changedTouches.length===K).event(R),J,P,te,q;for(YD(R),P=0;PC;nthis.tickValues.length;){const C=this.axisTexts.pop();this.pAxis.removeChild(C),C.destroy(!0)}}},{key:"calculateAxisTickValues",value:function(i,I){const n=Math.max(Math.ceil(I/WWt),1);let r=i.ticks(n);return r.length<1&&(r=i.ticks(n+1),r.length>1&&(r=[r[0]])),r}},{key:"drawAxisLeft",value:function(i,I){this.startAxis(I),this.createAxisTexts(i,I);const n=this.pAxis;this.track.getTheme()===ii&&n.lineStyle(n.lineWidth||n._lineStyle.width,Kt("#ffffff")),n.moveTo(0,0),n.lineTo(-(EI+Gr),0),n.moveTo(0,I),n.lineTo(-(EI+Gr),I);for(let r=0;r=0;i--)this.axisTexts[i].visible=!0;for(let i=this.axisTexts.length-1;i>=0;i--){if(!this.axisTexts[i].visible)continue;let I=i-1;for(;I>=0&&this.axisTexts[i].y+this.axisTexts[i].height/2>this.axisTexts[I].y-this.axisTexts[I].height/2;){this.axisTexts[I].visible=!1;I-=1}}}},{key:"exportVerticalAxis",value:function(i){const I=document.createElement("g");I.setAttribute("class","axis-vertical");let n="black";this.track&&this.track.options.lineStrokeColor&&(n=this.track.options.lineStrokeColor),this.track.getTheme()===ii&&(n="#cccccc");const r=document.createElement("path");return r.setAttribute("fill","transparent"),r.setAttribute("stroke",n),r.setAttribute("id","axis-line"),r.setAttribute("d",`M0,0 L0,${i}`),I.appendChild(r),I}},{key:"createAxisSVGLine",value:function(){let i="black";this.track&&this.track.options.lineStrokeColor&&(i=this.track.options.lineStrokeColor),this.track.getTheme()===ii&&(i="#cccccc");const I=document.createElement("path");return I.setAttribute("id","tick-mark"),I.setAttribute("fill","transparent"),I.setAttribute("stroke",i),I}},{key:"createAxisSVGText",value:function(i){const I=document.createElement("text");return I.innerHTML=i,I.setAttribute("id","axis-text"),I.setAttribute("text-anchor","middle"),I.setAttribute("font-family",this.axisTextFontFamily),I.setAttribute("font-size",this.axisTextFontSize),I.setAttribute("dy",this.axisTextFontSize/2-2),I}},{key:"exportAxisLeftSVG",value:function(i,I){const n=this.exportVerticalAxis(I),r=this.createAxisSVGLine();n.appendChild(r),r.setAttribute("d",`M0,0 L${+(EI+Gr)},0`);const C=this.createAxisSVGLine();n.appendChild(C),C.setAttribute("d",`M0,${I} L${+(EI+Gr)},${I}`);for(let o=0;o{const i=[];for(let I=e;I{const i=e.map(o=>+o).sort((o,a)=>a-o),I=g.range()[1]-g.range()[0],r=i.map(o=>(g.domain()[1]-g.domain()[0])/o).map(o=>o/I),C=r.filter(o=>o<1);return C.length===0?0:r.indexOf(C[C.length-1])},HWt=(e,g,i,I)=>{const n=e.range()[1]-e.range()[0],r=Math.max((i-g)/(e.domain()[1]-e.domain()[0]),1),o=Math.max(0,Math.ceil(Math.log(n/384)/Math.LN2));let a=Math.round(Math.log(r)/Math.LN2)+o,s=0;return I&&(s=Math.floor(Math.log(256)/Math.log(2)-Math.log(I)/Math.log(2))),a+=s,a},aVe=(e,g,i)=>{if(typeof i>"u"&&(i=Number.MAX_SAFE_INTEGER),e.resolutions)return XWt(e.resolutions,g,e.min_pos[0],e.max_pos[0]-2);const I=HWt(g,e.min_pos[0],e.max_pos[0],e.bins_per_dimension||e.tile_size),n=Math.min(I,i);return Math.max(n,0)},TWt=(e,g,i,I,n,r)=>{const C=Math.min(e,n),o=r/2**C,a=1e-7;return oVe(Math.max(0,Math.floor((g.domain()[0]-i)/o)),Math.min(2**C,Math.ceil((g.domain()[1]-i-a)/o)))},NWt=(e,g,i,I=Number.MAX_VALUE,n=256)=>{const C=e*n,o=20,a=Math.max(0,Math.floor((g.domain()[0]-i)/C)),s=Math.ceil(Math.min(I,g.domain()[1]-i-1e-7)/C);let A=oVe(a,s);return A.length>o&&(console.warn(`Too many visible tiles: ${A.length} truncating to ${o}`),A=A.slice(0,o)),A},kWt=(e,g)=>{if(!e)return[];const i=aVe(e,g,e.max_zoom);if(e.resolutions){const r=e.resolutions.map(a=>+a).sort((a,s)=>s-a);return NWt(r[i],g,e.min_pos[0],e.max_pos[0]).map(a=>[i,a])}return TWt(i,g,e.min_pos[0],e.max_pos[0],e.max_zoom,e.max_width).map(r=>[i,r])},YWt=(e,g)=>{if(e.axis||(e.axis=new Vk(e),e.pBase.addChild(e.axis.pAxis)),!e.options.axisPositionVertical&&!e.options.axisPositionHorizontal){e.axis.clearAxis();return}if(e.options.axisPositionVertical&&e.options.axisPositionVertical==="hidden"){e.axis.clearAxis();return}if(e.options.axisPositionHorizontal&&e.options.axisPositionHorizontal==="hidden"){e.axis.clearAxis();return}const i=e.options.axisMargin||0;e.options.axisPositionHorizontal==="left"||e.options.axisPositionVertical==="top"?(e.axis.pAxis.position.x=e.position[0]+i,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisRight(g,e.dimensions[1])):e.options.axisPositionHorizontal==="outsideLeft"||e.options.axisPositionVertical==="outsideTop"?(e.axis.pAxis.position.x=e.position[0]+i,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisLeft(g,e.dimensions[1])):e.options.axisPositionHorizontal==="right"||e.options.axisPositionVertical==="bottom"?(e.axis.pAxis.position.x=e.position[0]+e.dimensions[0]-i,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisLeft(g,e.dimensions[1])):(e.options.axisPositionHorizontal==="outsideRight"||e.options.axisPositionVertical==="outsideBottom")&&(e.axis.pAxis.position.x=e.position[0]+e.dimensions[0]-i,e.axis.pAxis.position.y=e.position[1],e.axis.drawAxisRight(g,e.dimensions[1]))},KWt=(e,g)=>{const i=e.valueScaleTransform,{y:I,k:n}=i,r=e.dimensions[1];I+g/n>-(n-1)*r&&I+g/n<0&&(e.valueScaleTransform=i.translate(0,g/n)),Object.values(e.fetchedTiles).forEach(C=>{C.graphics.position.y=e.valueScaleTransform.y}),e.animate()},FWt=(e,g,i,I)=>{const n=i.k,r=i.y,C=(e-r)/n,o=Math.max(n/g,1);let a=n*C+r-o*C;return a=Math.max(a,-(o-1)*I),a=Math.min(a,0),JI.translate(0,a).scale(o)},DWt=(e,g)=>{const i=+g.split(".")[0],I=+g.split(".")[1],n=e.max_width,r=e.min_pos[0],C=n/2**i;return{tileX:r+I*C,tileWidth:C}};function xWt(e,g){Object.values(e.fetchedTiles).forEach(i=>{if(!i.drawnAtScale)return;const I=i.drawnAtScale.range(),n=e._xScale.range();if(I[0]!==n[0]||I[1]!==n[1]){e.renderTile(i);return}const r=(i.drawnAtScale.domain()[1]-i.drawnAtScale.domain()[0])/(e._xScale.domain()[1]-e._xScale.domain()[0]);if(r>2||r<.5)e.renderTile(i);else{const o=e._xScale.domain().map(i.drawnAtScale)[0];for(const a of g)a(i).scale.x=r,a(i).x=-o*r}})}const Fd={calculate1DVisibleTiles:kWt,calculate1DZoomLevel:aVe,drawAxis:YWt,movedY:KWt,getTilePosAndDimensions:DWt,stretchRects:xWt,zoomedY:FWt},EWt=Object.freeze(Object.defineProperty({__proto__:null,DenseDataExtrema1D:TX,DenseDataExtrema2D:r4,IS_TRACK_RANGE_SELECTABLE:z0,absToChr:TI,accessorTransposition:kGe,addArrays:YGe,addClass:fst,base64ToCanvas:pst,changeOptions:e1t,chrToAbs:ZX,chromInfoBisector:NGe,cloneEvent:KGe,colorDomainToRgbaArray:_c,colorToHex:Kt,colorToRgba:jGe,dataToGenomicLoci:wX,debounce:LQ,decToHexStr:yz,dictFromTuples:$Ge,dictItems:YC,dictKeys:HC,dictValues:Mg,download:LG,expandCombinedTracks:eW,fillInMinWidths:qGe,flatten:elt,forEach:tlt,forwardEvent:RX,genomeLociToPixels:glt,genomicRangeToChromosomeChunks:ilt,getAggregationFunction:C4,getDefaultTrackForDatatype:UQ,getElementDim:rve,getTiledPlot:Lct,getTrackByUid:nC,getTrackConfFromHGC:tct,getTrackObjById:$Z,getTrackObjectFromHGC:o4,getTrackPositionByUid:UG,getTrackRenderer:Sve,getXylofon:ove,gradient:ave,hasClass:yX,hasParent:Ave,hexStrToInt:sve,intoTheVoid:lve,isTrackOrChildTrack:cve,isWithin:i4,latToY:Act,lngToX:lct,loadChromInfos:sct,map:t4,max:Zz,maxNonZero:Gz,min:uve,minNonZero:vz,mod:cct,mountHGComponent:$Re,mountHGComponentAsync:I1t,ndarrayAssign:dve,ndarrayFlatten:fve,ndarrayToList:mve,numericifyVersion:pve,objVals:KN,or:qS,parseChromsizesRows:FN,pixiTextToSvg:Bz,q:wct,rangeQuery2d:Rct,reduce:eve,relToAbsChromPos:Vct,removeClass:Xct,removeHGComponent:i1t,resetD3BrushStyle:Yp,rgbToHex:Hct,scalesCenterAndK:SI,scalesToGenomeLoci:bve,segmentsToRows:HX,selectedItemsToSize:zB,showMousePosition:sh,some:Yct,sum:ql,svgLine:yve,throttleAndDebounce:Zve,tileToCanvas:Kct,timeout:I4,toVoid:ta,totalTrackPixelHeight:Fct,trackUtils:Fd,trimTrailingSlash:DN,valueToColor:n4,visitPositionedTracks:Is,visitTracks:e4,waitForJsonComplete:oj,waitForTilesLoaded:LX,waitForTransitionsFinished:jRe},Symbol.toStringTag,{value:"Module"}));function sP(){return sP=Object.assign?Object.assign.bind():function(e){for(var g=1;gN.forwardRef((g,i)=>N.createElement(zWt,null,I=>N.createElement(e,sP({ref:i},g,{theme:I})))),Ol={"track-control":"_track-control_w7hx2_1","track-control-vertical":"_track-control-vertical_w7hx2_2","track-control-dark":"_track-control-dark_w7hx2_15","track-control-active":"_track-control-active_w7hx2_16 _track-control_w7hx2_1","track-control-left":"_track-control-left_w7hx2_24","track-control-vertical-active":"_track-control-vertical-active_w7hx2_30","track-control-padding-right":"_track-control-padding-right_w7hx2_48","track-control-button":"_track-control-button_w7hx2_52","track-control-button-vertical":"_track-control-button-vertical_w7hx2_81"},PWt=e=>Xg({[Ol["track-control-active"]]:e.isVisible,[Ol["track-control"]]:!e.isVisible,[Ol["track-control-left"]]:e.isAlignLeft,[Ol["track-control-vertical"]]:e.isVertical,[Ol["track-control-padding-right"]]:e.paddingRight,[Ol["track-control-dark"]]:e.theme===ii}),VV=e=>Xg("no-zoom",Ol["track-control-button"],{[Ol["track-control-button-vertical"]]:e.isVertical});let KD=null,sCe=null;function AVe(e){(!e||!KD||Object.keys(e).some(I=>KD[I]!==e[I]))&&(KD=e,sCe=mz(()=>N.createElement("svg",{className:VV(e),style:{height:"20px",width:"20px",...e.imgStyleMove}},N.createElement("title",null,"Move track"),N.createElement("use",{xlinkHref:"#move"}))));let g,i;return N.createElement("div",{className:PWt(e)},e.isMoveable&&N.createElement(sCe,null),N.createElement("svg",{ref:I=>{g=I},className:VV(e),onClick:()=>{e.onConfigTrackMenuOpened(e.uid,g.getBoundingClientRect())},style:{height:"20px",width:"20px",...e.imgStyleSettings}},N.createElement("title",null,"Configure track"),N.createElement("use",{xlinkHref:"#cog"})),e.onAddSeries&&N.createElement("svg",{className:VV(e),onClick:()=>e.onAddSeries(e.uid),style:{height:"20px",width:"20px",...e.imgStyleAdd}},N.createElement("title",null,"Add series"),N.createElement("use",{xlinkHref:"#plus"})),N.createElement("svg",{ref:I=>{i=I},className:VV(e),onClick:()=>{e.onCloseTrackMenuOpened(e.uid,i.getBoundingClientRect())},style:{height:"20px",width:"20px",...e.imgStyleClose}},N.createElement("title",null,"Close track"),N.createElement("use",{xlinkHref:"#cross"})))}AVe.propTypes={imgStyleAdd:L.object,imgStyleClose:L.object,imgStyleMove:L.object,imgStyleSettings:L.object,isAlignLeft:L.bool,isMoveable:L.bool,isVertical:L.bool,isVisible:L.bool,onConfigTrackMenuOpened:L.func,onCloseTrackMenuOpened:L.func,onAddSeries:L.func,paddingRight:L.bool,theme:L.symbol.isRequired,uid:L.string};const Wk=um(AVe),lP={"center-track":"_center-track_fiu64_1","center-track-container":"_center-track-container_fiu64_6"},Lo={"track-range-selection":"_track-range-selection_5bcsr_1","track-range-selection-active":"_track-range-selection-active_5bcsr_8 _track-range-selection_5bcsr_1","track-range-selection-active-primary":"_track-range-selection-active-primary_5bcsr_14 _track-range-selection-active_5bcsr_8 _track-range-selection_5bcsr_1","track-range-selection-active-secondary":"_track-range-selection-active-secondary_5bcsr_18 _track-range-selection-active_5bcsr_8 _track-range-selection_5bcsr_1","track-range-selection-group-inactive":"_track-range-selection-group-inactive_5bcsr_22","track-range-selection-group-brush-selection":"_track-range-selection-group-brush-selection_5bcsr_26"};function JWt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function lCe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function $X(e){return $X=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},$X(e)}const WV={pointerEvents:"all"};function Qm(e){return e&&e.sourceEvent}let lj=function(e){UWt(i,e);var g=QWt(i);function i(I){var n;return JWt(this,i),n=g.call(this,I),n.state={isVisible:!1},n.brushBehaviorX=YN().on("brush",n.brushedX.bind(kl(n))).on("end",n.brushedXEnded.bind(kl(n))),n.brushBehaviorY=QS().on("brush",n.brushedY.bind(kl(n))).on("end",n.brushedYEnded.bind(kl(n))),n.brushBehaviorXY=xQ().on("start",n.brushStarted.bind(kl(n))).on("brush",n.brushedXY.bind(kl(n))).on("end",n.brushedXYEnded.bind(kl(n))),n}return OWt(i,[{key:"componentDidMount",value:function(){this.props.isRangeSelectionActive&&this.addBrush2d()}},{key:"shouldComponentUpdate",value:function(n,r){if(this.rangeSelectionTriggeredXY){if(this.rangeSelectionTriggeredXY=!1,this.rangeSelectionTriggeredXYEnd){const C=n.rangeSelection[0]||null;this.moveBrushXY([C,n.rangeSelection[1]],!0),this.rangeSelectionTriggeredXYEnd=!1}return this.state!==r}if(this.props.rangeSelection!==n.rangeSelection){const C=n.rangeSelection[0]||null;this.props.is1dRangeSelection?(this.rangeSelectionTriggeredX||this.moveBrushX(C,n.rangeSelectionEnd),this.rangeSelectionTriggeredXEnd&&this.moveBrushX(C,n.rangeSelectionEnd,!0),this.rangeSelectionTriggeredY||this.moveBrushY(C,n.rangeSelectionEnd),this.rangeSelectionTriggeredYEnd&&this.moveBrushY(C,n.rangeSelectionEnd,!0),this.rangeSelectionTriggeredX=!1,this.rangeSelectionTriggeredXEnd=!1,this.rangeSelectionTriggeredY=!1,this.rangeSelectionTriggeredYEnd=!1):this.moveBrushXY([C,n.rangeSelection[1]],n.rangeSelectionEnd);const o=this.props.is1dRangeSelection&&!n.is1dRangeSelection&&C===null;return this.state!==r||o}return!0}},{key:"componentDidUpdate",value:function(){this.props.isRangeSelectionActive?this.addBrush2d():(this.removeBrush1d(),this.removeBrush2d())}},{key:"addBrush1d",value:function(){!this.brushElX||!this.brushElY||this.brushElXOld===this.brushElX&&this.brushElYOld===this.brushElY||(this.brushElXOld&&this.brushElXOld.on(".brush",null),this.brushElYOld&&this.brushElYOld.on(".brush",null),this.brushElX.call(this.brushBehaviorX),this.brushElY.call(this.brushBehaviorY),Yp(this.brushElX,Lo["track-range-selection-group-brush-selection"]),Yp(this.brushElY,Lo["track-range-selection-group-brush-selection"]),this.brushElXOld=this.brushElX,this.brushElYOld=this.brushElY,this.brushIs1dBound=!0)}},{key:"addBrush2d",value:function(){!this.brushElXY||this.brushElXYOld===this.brushElXY||(this.brushElXYOld&&this.brushElXYOld.on(".brush",null),this.brushElXY.call(this.brushBehaviorXY),this.brushElXYOld=this.brushElXY,this.brushIs2dBound=!0,Yp(this.brushElXY,Lo["track-range-selection-group-brush-selection"]))}},{key:"brushedX",value:function(n){const r=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Qm(n)||!this.props.onRangeSelectionX||!this.props.is1dRangeSelection||r)&&(this.rangeSelectionTriggeredX=!0,this.props.onRangeSelectionX(n.selection))}},{key:"brushedXEnded",value:function(n){const r=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,!(!Qm(n)||!this.props.onRangeSelectionX||!this.props.is1dRangeSelection||r)&&(this.rangeSelectionTriggeredX=!0,this.rangeSelectionTriggeredXEnd=!0,this.props.onRangeSelectionXEnd(n.selection))}},{key:"brushedY",value:function(n){const r=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Qm(n)||!this.props.onRangeSelectionY||!this.props.is1dRangeSelection||r)&&(this.rangeSelectionTriggeredY=!0,this.props.onRangeSelectionY(n.selection))}},{key:"brushedYEnded",value:function(n){const r=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,!(!Qm(n)||!this.props.onRangeSelectionY||!this.props.is1dRangeSelection||r)&&(this.rangeSelectionTriggeredY=!0,this.rangeSelectionTriggeredYEnd=!0,this.props.onRangeSelectionYEnd(n.selection))}},{key:"brushedXY",value:function(n){const r=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Qm(n)||!this.props.onRangeSelectionXY||r||this.props.is1dRangeSelection)&&(this.rangeSelectionTriggeredXY=!0,this.props.onRangeSelectionXY([[n.selection[0][0],n.selection[1][0]],[n.selection[0][1],n.selection[1][1]]]))}},{key:"brushedXYEnded",value:function(n){if(this.props.is1dRangeSelection)return;const r=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,n.selection&&n.sourceEvent&&this.props.onRangeSelectionXY&&!r&&(this.rangeSelectionTriggeredXY=!0,this.rangeSelectionTriggeredXYEnd=!0,this.props.onRangeSelectionXYEnd([[n.selection[0][0],n.selection[1][0]],[n.selection[0][1],n.selection[1][1]]])),n.selection||(this.rangeSelectionTriggeredXY=!0,this.props.onRangeSelectionReset())}},{key:"brushStarted",value:function(n){Qm(n)&&this.props.onRangeSelectionStart()}},{key:"moveBrushX",value:function(n,r=!1){if(!this.brushEl)return;this.brushIs2dBound&&(this.removeBrush2d(),this.addBrush1d());const C=n?[this.props.scaleX(n[0]),this.props.scaleX(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,r?this.brushElX.transition().call(this.brushBehaviorX.move,C):this.brushElX.call(this.brushBehaviorX.move,C)}},{key:"moveBrushY",value:function(n,r=!1){if(!this.brushEl)return;this.brushIs2dBound&&(this.removeBrush2d(),this.addBrush1d());const C=n?[this.props.scaleY(n[0]),this.props.scaleY(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,r?this.brushElY.transition().call(this.brushBehaviorY.move,C):this.brushElY.call(this.brushBehaviorY.move,C)}},{key:"moveBrushXY",value:function(n,r=!1){if(!this.brushEl)return;const C=[[this.props.scaleX(n[0][0]),this.props.scaleY(n[1][0])],[this.props.scaleX(n[0][1]),this.props.scaleY(n[1][1])]];this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,r?this.brushElXY.transition().call(this.brushBehaviorXY.move,C):this.brushElXY.call(this.brushBehaviorXY.move,C)}},{key:"mouseEnterHandler",value:function(){this.props.isRangeSelectionActive||this.setState({isVisible:!0})}},{key:"mouseLeaveHandler",value:function(){this.setState({isVisible:!1})}},{key:"removeBrush1d",value:function(){this.brushIs1dBound&&(this.brushElX&&(this.brushElX.call(this.brushBehaviorX.move,null),this.brushElX.on(".brush",null)),this.brushElY&&(this.brushElY.call(this.brushBehaviorY.move,null),this.brushElY.on(".brush",null)),this.brushIs1dBound=!1)}},{key:"removeBrush2d",value:function(){this.brushIs2dBound&&this.brushElXY&&(this.brushElXY.call(this.brushBehaviorXY.move,null),this.brushElXY.on(".brush",null),this.brushElXYOld=void 0,this.brushIs2dBound=!1,this.props.is1dRangeSelection||this.props.onRangeSelectionReset())}},{key:"render",value:function(){const n=this.props.tracks.map(s=>z0(s)).reduce(qS,!1),r=this.props.tracks.some(s=>s.contents?s.contents.some(A=>A.type==="heatmap"?A.options.colorbarPosition==="topRight":!1):s.type==="heatmap"?s.options.colorbarPosition==="topRight":!1);let C="track-range-selection";this.props.isRangeSelectionActive&&(C+=this.props.is1dRangeSelection?"-active-secondary":"-active-primary");const o=Xg(!this.props.is1dRangeSelection&&Lo["track-range-selection-group-inactive"]),a=Xg(this.props.is1dRangeSelection&&Lo["track-range-selection-group-inactive"]);return N.createElement("div",{className:Xg(this.props.className,lP["center-track"]),onMouseEnter:this.mouseEnterHandler.bind(this),onMouseLeave:this.mouseLeaveHandler.bind(this),style:{height:this.props.height,width:this.props.width}},n&&N.createElement("svg",{className:Lo[C],style:{height:this.props.height,width:this.props.width},xmlns:"http://www.w3.org/2000/svg"},N.createElement("g",{ref:s=>{this.brushElX=hg(s)},className:o}),N.createElement("g",{ref:s=>{this.brushElY=hg(s)},className:o}),N.createElement("g",{ref:s=>{this.brushElXY=hg(s)},className:a})),this.props.editable&&N.createElement(Wk,{imgStyleAdd:WV,imgStyleClose:WV,imgStyleMove:WV,imgStyleSettings:WV,isMoveable:!1,isVisible:this.state.isVisible||this.props.uid===this.props.configTrackMenuId,onAddSeries:this.props.onAddSeries,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,paddingRight:r,uid:this.props.uid}))}}]),i}(N.Component);lj.defaultProps={className:"center-track",configTrackMenuId:null,is1dRangeSelection:!1,rangeSelectionEnd:L.bool,isRangeSelectionActive:!1,scaleX:e=>e,scaleY:e=>e};lj.propTypes={className:L.string,configTrackMenuId:L.string,editable:L.bool,height:L.number.isRequired,is1dRangeSelection:L.bool,isRangeSelectionActive:L.bool,onAddSeries:L.func.isRequired,onCloseTrackMenuOpened:L.func.isRequired,onConfigTrackMenuOpened:L.func.isRequired,onRangeSelectionX:L.func.isRequired,onRangeSelectionXEnd:L.func.isRequired,onRangeSelectionY:L.func.isRequired,onRangeSelectionYEnd:L.func.isRequired,onRangeSelectionXY:L.func.isRequired,onRangeSelectionXYEnd:L.func.isRequired,onRangeSelectionReset:L.func.isRequired,onRangeSelectionStart:L.func.isRequired,rangeSelection:L.array.isRequired,rangeSelectionEnd:L.bool,scaleX:L.func,scaleY:L.func,tracks:L.array.isRequired,uid:L.string.isRequired,width:L.number.isRequired};function uP(){return uP=Object.assign?Object.assign.bind():function(e){for(var g=1;g({event:"fake",handler:ta}),unsubscribe:ta,clear:ta},{Provider:qWt,Consumer:e9t}=N.createContext(cj),iy=e=>N.forwardRef((g,i)=>N.createElement(e9t,null,I=>N.createElement(e,uP({ref:i},g,{pubSub:I})))),t9t={"drag-listening-div-active":"_drag-listening-div-active_19gkt_1"};function g9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cCe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qX(e){return qX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},qX(e)}let uj=function(e){r9t(i,e);var g=C9t(i);function i(I){var n;return g9t(this,i),n=g.call(this,I),n.state={dragOnTop:!1},n}return i9t(i,[{key:"render",value:function(){let n="red";return this.props.enabled&&this.state.dragOnTop?n="green":this.props.enabled&&(n="blue"),N.createElement("div",{className:Xg("DragListeningDiv",{[t9t["drag-listening-div-active"]]:this.props.enabled}),onDragEnter:()=>{this.setState({dragOnTop:!0})},onDragLeave:()=>{this.setState({dragOnTop:!1})},onDragOver:r=>{r.preventDefault()},onDrop:()=>{if(!this.props.enabled)return;const r=this.props.draggingHappening,C={type:this.props.defaultTrackType,uid:cg.nice(),tilesetUid:r.tilesetUid,server:r.server};this.props.onTrackDropped(C),this.props.pubSub.publish("trackDropped",C)},style:{background:n,opacity:.6,...this.props.style}})}}]),i}(N.Component);uj.defaultProps={enabled:!1,style:{},draggingHappening:{},onTrackDropped:()=>{}};uj.propTypes={enabled:L.bool,style:L.object,defaultTrackType:L.object,draggingHappening:L.object,onTrackDropped:L.func,position:L.string.isRequired,pubSub:L.object.isRequired};const XV=iy(uj),ku={"gallery-tracks":"_gallery-tracks_fbxxi_1","gallery-track":"_gallery-track_fbxxi_1","gallery-sub-track":"_gallery-sub-track_fbxxi_18","gallery-invisible-track":"_gallery-invisible-track_fbxxi_19"},s9t="_horizontalList_1y7td_7",l9t="_list_1y7td_14",c9t="_stylizedList_1y7td_21",u9t="_stylizedItem_1y7td_28",d9t="_stylizedHelper_1y7td_39",h9t="_horizontalItem_1y7td_44",m9t="_domain_1y7td_60",Uo={"tiled-plot":"_tiled-plot_1y7td_1",horizontalList:s9t,list:l9t,stylizedList:c9t,stylizedItem:u9t,stylizedHelper:d9t,horizontalItem:h9t,"resizable-track":"_resizable-track_1y7td_55",domain:m9t};function f9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uCe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function e2(e){return e2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},e2(e)}const HV={pointerEvents:"all"};let sVe=function(e){Z9t(i,e);var g=G9t(i);function i(I){var n;return f9t(this,i),n=g.call(this,I),n.state={hovering:!1},n}return p9t(i,[{key:"mouseEnterHandler",value:function(){this.setState({hovering:!0})}},{key:"mouseLeaveHandler",value:function(){this.setState({hovering:!1})}},{key:"render",value:function(){return N.createElement("div",{className:Xg("gallery-tracks",ku["gallery-tracks"])},this.props.tracks&&this.props.tracks.map((n,r)=>N.createElement("div",{key:n.uid||r,className:ku["gallery-track"],onMouseLeave:this.mouseLeaveHandler.bind(this),style:{top:n.height*r,right:n.height*r,bottom:n.height*r,left:n.height*r}},N.createElement("div",{className:ku["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{top:0,right:0,left:0,height:n.height}}),N.createElement("div",{className:ku["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{top:0,right:0,bottom:0,width:n.height}}),N.createElement("div",{className:ku["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{right:0,bottom:0,left:0,height:n.height}}),N.createElement("div",{className:ku["gallery-sub-track"],onMouseEnter:this.mouseEnterHandler.bind(this),style:{top:0,bottom:0,left:0,width:n.height}}),N.createElement("div",{className:ku["gallery-invisible-track"],onMouseLeave:this.mouseLeaveHandler.bind(this),style:{top:n.height,right:n.height,bottom:n.height,left:n.height}}),this.props.editable&&N.createElement(Wk,{configMenuVisible:!0,imgStyleAdd:HV,imgStyleClose:HV,imgStyleMove:HV,imgStyleSettings:HV,isMoveable:!1,isVisible:this.state.hovering,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,uid:n.uid||r}))))}}]),i}(N.Component);sVe.propTypes={editable:L.bool,onCloseTrackMenuOpened:L.func.isRequired,onConfigTrackMenuOpened:L.func.isRequired,tracks:L.array};function w9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function dCe(e,g){for(var i=0;i{}),this.pubSubs.push(this.pubSub.subscribe("app.mouseMove",this.defaultMouseMoveHandler.bind(this))),this.isLeftModified=!1}return R9t(e,[{key:"isWithin",value:function(i,I){let n=i,r=I,C=this.position[0],o=this.position[1];return this.isLeftModified&&(n=I,r=i,C=this.position[1],o=this.position[0]),i4(n,r,C,this.dimensions[0]+C,o,this.dimensions[1]+o)}},{key:"getProp",value:function(i){return()=>this[i]}},{key:"getData",value:function(){}},{key:"click",value:function(i,I,n){return{type:"generic",event:n,payload:null}}},{key:"clickOutside",value:function(){}},{key:"getDimensions",value:function(){return this.dimensions}},{key:"setDimensions",value:function(i){this.dimensions=i,this._xScale.range([0,this.dimensions[0]]),this._yScale.range([0,this.dimensions[1]])}},{key:"refXScale",value:function(i){return i?(this._refXScale=i,this):this._refXScale}},{key:"refYScale",value:function(i){return i?(this._refYScale=i,this):this._refYScale}},{key:"xScale",value:function(i){return i?(this._xScale=i,this):this._xScale}},{key:"yScale",value:function(i){return i?(this._yScale=i,this):this._yScale}},{key:"zoomed",value:function(i,I){this.xScale(i),this.yScale(I)}},{key:"refScalesChanged",value:function(i,I){this._refXScale=i,this._refYScale=I}},{key:"draw",value:function(){}},{key:"getPosition",value:function(){return this.position}},{key:"setPosition",value:function(i){this.position=i}},{key:"defaultMouseMoveHandler",value:function(i){}},{key:"remove",value:function(){this.pubSubs.forEach(i=>this.pubSub.unsubscribe(i)),this.pubSubs=[]}},{key:"rerender",value:function(i){}},{key:"respondsToPosition",value:function(i,I){return this.isWithin(i,I)}},{key:"zoomedY",value:function(i,I){}},{key:"movedY",value:function(i){}}]),e}();function X9t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hCe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function g0(e){return g0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},g0(e)}function E9t(e,g){const i=E0(g,e);return gm(`.${i}`,e)(e)}function M9t(e,g){const i=e.map(r=>+r).sort((r,C)=>C-r),I=i[g],n=i[i.length-1];return E9t(I,n)}function z9t(e,g,i,I){const n=g/(2**e*i);if(!Number.isNaN(n)){const r=g/(2**I*i),C=E0(r,n);return gm(`.${C}`,n)(n)}return console.warn("NaN resolution, screen is probably too small."),""}let fr=function(e){Y9t(i,e);var g=K9t(i);function i(I,n){var r;X9t(this,i),r=g.call(this,I,n);const{scene:C}=I;r.scene=C,r.delayDrawing=!1,r.pBase=new ot.PIXI.Graphics,r.pMasked=new ot.PIXI.Graphics,r.pMask=new ot.PIXI.Graphics,r.pMain=new ot.PIXI.Graphics,r.pBorder=new ot.PIXI.Graphics,r.pBackground=new ot.PIXI.Graphics,r.pForeground=new ot.PIXI.Graphics,r.pLabel=new ot.PIXI.Graphics,r.pMobile=new ot.PIXI.Graphics,r.pAxis=new ot.PIXI.Graphics,r.pMouseOver=new ot.PIXI.Graphics,r.scene.addChild(r.pBase),r.pBase.addChild(r.pMasked),r.pMasked.addChild(r.pBackground),r.pMasked.addChild(r.pMain),r.pMasked.addChild(r.pMask),r.pMasked.addChild(r.pMobile),r.pMasked.addChild(r.pBorder),r.pMasked.addChild(r.pLabel),r.pMasked.addChild(r.pForeground),r.pMasked.addChild(r.pMouseOver),r.pBase.addChild(r.pAxis),r.pMasked.mask=r.pMask,r.prevOptions="",r.options=Object.assign(r.options,n);const o=r.getName();return r.labelTextFontFamily="Arial",r.labelTextFontSize=12,r.labelXOffset=0,r.labelText=new ot.PIXI.Text(o,{fontSize:`${r.labelTextFontSize}px`,fontFamily:r.labelTextFontFamily,fill:"black"}),r.pLabel.addChild(r.labelText),r.errorText=new ot.PIXI.Text("",{fontSize:"12px",fontFamily:"Arial",fill:"red"}),r.errorText.anchor.x=.5,r.errorText.anchor.y=.5,r.pLabel.addChild(r.errorText),r.errorTextText="",r.flipText=!1,r.tilesetInfo=void 0,r}return H9t(i,[{key:"setLabelText",value:function(){}},{key:"setPosition",value:function(n){this.position=n,this.drawBorder(),this.drawLabel(),this.drawBackground(),this.setMask(this.position,this.dimensions),this.setForeground()}},{key:"setDimensions",value:function(n){AW(g0(i.prototype),"setDimensions",this).call(this,n),this.drawBorder(),this.drawLabel(),this.drawBackground(),this.setMask(this.position,this.dimensions),this.setForeground()}},{key:"setMask",value:function(n,r){this.pMask.clear(),this.pMask.beginFill(),this.pMask.drawRect(n[0],n[1],r[0],r[1]),this.pMask.endFill()}},{key:"setForeground",value:function(){this.pForeground.position.y=this.position[1],this.pForeground.position.x=this.position[0]}},{key:"remove",value:function(){this.pBase.clear(),this.scene.removeChild(this.pBase)}},{key:"drawBorder",value:function(){const n=this.pBorder;if(n.clear(),!this.options||!this.options.trackBorderWidth)return;const r=Kt(this.options.trackBorderColor?this.options.trackBorderColor:"white");n.lineStyle(this.options.trackBorderWidth,r),n.drawRect(this.position[0],this.position[1],this.dimensions[0],this.dimensions[1])}},{key:"drawError",value:function(){if(this.errorText.x=this.position[0]+this.dimensions[0]/2,this.errorText.y=this.position[1]+this.dimensions[1]/2,this.errorText.text=this.errorTextText,this.errorTextText&&this.errorTextText.length){const n=this.pBorder;n.clear(),n.lineStyle(1,Kt("red")),n.drawRect(this.position[0],this.position[1],this.dimensions[0],this.dimensions[1])}}},{key:"drawBackground",value:function(){const n=this.pBackground;if(n.clear(),!this.options||!this.options.backgroundColor)return;let r=1,C=this.options.backgroundColor;this.options.backgroundColor==="transparent"&&(r=0,C="white");const o=Kt(C);n.beginFill(o,r),n.drawRect(this.position[0],this.position[1],this.dimensions[0],this.dimensions[1])}},{key:"getLabelColor",value:function(){return this.options.labelColor&&this.options.labelColor!=="[glyph-color]"?this.options.labelColor:this.options.lineStrokeColor||this.options.barFillColor||"black"}},{key:"getName",value:function(){return this.options.name?this.options.name:this.tilesetInfo&&this.tilesetInfo.name||""}},{key:"drawLabel",value:function(){if(!this.labelText)return;const n=this.pLabel;if(n.clear(),!this.options||!this.options.labelPosition||this.options.labelPosition==="hidden"){this.labelText.alpha=0;return}const{labelBackgroundColor:r="white",labelBackgroundOpacity:C=.5}=this.options;n.beginFill(Kt(r),+C);const o=Kt(this.getLabelColor()),a=2;if(this.dimensions[0]<0)return;let s=this.options.labelShowAssembly&&this.tilesetInfo&&this.tilesetInfo.coordSystem?`${this.tilesetInfo.coordSystem} | `:"";if(s+=this.getName(),this.options.labelShowResolution&&ict(this.tilesetInfo)&&this.tilesetInfo.bins_per_dimension){const d=z9t(this.calculateZoomLevel(),this.tilesetInfo.max_width,this.tilesetInfo.bins_per_dimension,this.tilesetInfo.max_zoom);s+=` +[Current data resolution: ${d}]`}else if(this.options.labelShowResolution&&Ict(this.tilesetInfo)){const d=M9t(this.tilesetInfo.resolutions,this.calculateZoomLevel());s+=` [Current data resolution: ${d}]`}if(this.options&&this.options.dataTransform){let d=null;if(this.tilesetInfo&&this.tilesetInfo.transforms)for(const h of this.tilesetInfo.transforms)h.value===this.options.dataTransform&&(d=h);d?s+=` [Transform: ${d.name}]`:this.options.dataTransform==="None"?s+=` [Transform: None ]`:s+=` -[Transform: Default ]`}this.labelText.text=s,this.labelText.style={fontSize:`${this.labelTextFontSize}px`,fontFamily:this.labelTextFontFamily,fill:o},this.labelText.alpha=typeof this.options.labelTextOpacity<"u"?this.options.labelTextOpacity:1,this.labelText.visible=!0,this.flipText&&(this.labelText.scale.x=-1);const{labelLeftMargin:A=0,labelRightMargin:l=0,labelTopMargin:c=0,labelBottomMargin:u=0}=this.options;this.options.labelPosition==="topLeft"?(this.labelText.x=this.position[0]+A+this.labelXOffset,this.labelText.y=this.position[1]+c,this.labelText.anchor.x=.5,this.labelText.anchor.y=0,this.labelText.x+=this.labelText.width/2,n.drawRect(this.position[0]+A+this.labelXOffset,this.position[1]+c,this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="bottomLeft"&&!this.flipText||this.options.labelPosition==="topRight"&&this.flipText?(this.labelText.x=this.position[0]+(A||c),this.labelText.y=this.position[1]+this.dimensions[1]-(u||l),this.labelText.anchor.x=.5,this.labelText.anchor.y=1,this.labelText.x+=this.labelText.width/2+this.labelXOffset,n.drawRect(this.position[0]+(A||c)+this.labelXOffset,this.position[1]+this.dimensions[1]-this.labelText.height-a-(u||l),this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="topRight"&&!this.flipText||this.options.labelPosition==="bottomLeft"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0]-(l||u),this.labelText.y=this.position[1]+(c||A),this.labelText.anchor.x=.5,this.labelText.anchor.y=0,this.labelText.x-=this.labelText.width/2+this.labelXOffset,n.drawRect(this.position[0]+this.dimensions[0]-this.labelText.width-a-(l||u)-this.labelXOffset,this.position[1]+(c||A),this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="bottomRight"?(this.labelText.x=this.position[0]+this.dimensions[0]-l,this.labelText.y=this.position[1]+this.dimensions[1]-u,this.labelText.anchor.x=.5,this.labelText.anchor.y=1,this.labelText.x-=this.labelText.width/2+this.labelXOffset,n.drawRect(this.position[0]+this.dimensions[0]-this.labelText.width-a-l-this.labelXOffset,this.position[1]+this.dimensions[1]-this.labelText.height-a-u,this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="outerLeft"&&!this.flipText||this.options.labelPosition==="outerTop"&&this.flipText?(this.labelText.x=this.position[0],this.labelText.y=this.position[1]+this.dimensions[1]/2,this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.x-=this.labelText.width/2+3):this.options.labelPosition==="outerTop"&&!this.flipText||this.options.labelPosition==="outerLeft"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0]/2,this.labelText.y=this.position[1],this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.y-=this.labelText.height/2+3):this.options.labelPosition==="outerBottom"&&!this.flipText||this.options.labelPosition==="outerRight"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0]/2,this.labelText.y=this.position[1]+this.dimensions[1],this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.y+=this.labelText.height/2+3):this.options.labelPosition==="outerRight"&&!this.flipText||this.options.labelPosition==="outerBottom"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0],this.labelText.y=this.position[1]+this.dimensions[1]/2,this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.x+=this.labelText.width/2+3):this.labelText.visible=!1,this.options.labelPosition==="outerLeft"||this.options.labelPosition==="outerRight"||this.options.labelPosition==="outerTop"||this.options.labelPosition==="outerBottom"?this.pLabel.setParent(this.pBase):this.pLabel.setParent(this.pMasked)}},{key:"rerender",value:function(n){this.options=n,this.draw(),this.drawBackground(),this.drawLabel(),this.drawError(),this.drawBorder()}},{key:"draw",value:function(){this.drawError()}},{key:"exportSVG",value:function(){const n=document.createElement("g"),C=document.createElement("rect");C.setAttribute("x",`${this.position[0]}`),C.setAttribute("y",`${this.position[1]}`),C.setAttribute("width",`${this.dimensions[0]}`),C.setAttribute("height",`${this.dimensions[1]}`),this.options&&this.options.backgroundColor?C.setAttribute("fill",this.options.backgroundColor):C.setAttribute("fill-opacity","0");const r=document.createElement("g");r.setAttribute("class","g-clipped"),n.appendChild(r),r.appendChild(C);const o=document.createElement("g");r.setAttribute("class","g-track"),r.appendChild(o);const a=document.createElement("g");r.setAttribute("class","g-labels"),r.appendChild(a);const s=document.createElementNS("http://www.w3.org/2000/svg","clipPath");n.appendChild(s);const A=document.createElementNS("http://www.w3.org/2000/svg","polygon");s.appendChild(A),A.setAttribute("points",`${this.position[0]},${this.position[1]} ${this.position[0]+this.dimensions[0]},${this.position[1]} ${this.position[0]+this.dimensions[0]},${this.position[1]+this.dimensions[1]} ${this.position[0]},${this.position[1]+this.dimensions[1]} `);const l=lg.nice();s.setAttribute("id",l),r.setAttribute("style",`clip-path:url(#${l});`);const c=this.labelText.text.split(` -`);let u=0;const d=3,h=(this.labelTextFontSize+2)*c.length+d;this.labelText.anchor.y===.5?u=h/2:this.labelText.anchor.y===1&&(u=-h);for(let m=0;mnew e(i,I)))}return K9t(e,[{key:"registerFileUrl",value:async function({server:I,url:i,filetype:n,coordSystem:C}){const r=`${TN(I)}/register_url/`;return fetch(r,{method:"POST",body:JSON.stringify({fileurl:i,filetype:n,coordSystem:C}),headers:{"Content-Type":"application/json; charset=utf-8"}})}},{key:"tilesetInfo",value:function(I){const{server:i,url:n,filetype:C,coordSystem:r}=this.dataConfig;return i&&n&&C?this.registerFileUrl({server:i,url:n,filetype:C,coordSystem:r}).then(o=>o.json()).then(o=>{this.dataConfig.tilesetUid=o.uid,this.tilesetInfoAfterRegister(I)}).catch(o=>{console.error("Error registering url",o)}):new Promise(()=>{this.tilesetInfoAfterRegister(I)})}},{key:"tilesetInfoAfterRegister",value:function(I){if(this.dataConfig.children){const i=this.dataConfig.children.map(n=>new Promise(C=>{n.tilesetInfo(C)}));Promise.all(i).then(n=>{I(n[0])})}else{const{server:i,tilesetUid:n}=this.dataConfig;!i||!n?(console.warn("No dataConfig children, server or tilesetUid:",this.dataConfig),I(null)):vt.trackInfo(i,n,C=>{this.dataConfig.tilesetInfo=C[n],I(C[n],n)},C=>{this.tilesetInfoLoading=!1,I({error:C})},this.pubSub)}}},{key:"fullTileId",value:function(I,i){return`${I}.${i}`}},{key:"fetchTilesDebounced",value:function(I,i){var n;if(this.dataConfig.type==="horizontal-section")return this.fetchHorizontalSection(I,i);if(this.dataConfig.type==="vertical-section")return this.fetchHorizontalSection(I,i,!0);if(!this.dataConfig.children&&this.dataConfig.tilesetUid)return new Promise(o=>{vt.fetchTilesDebounced({id:lg.nice(),server:this.dataConfig.server,done:o,ids:i.map(a=>`${this.dataConfig.tilesetUid}.${a}`),options:this.dataConfig.options},this.pubSub,!0)}).then(o=>{const a=Eg(o)[0].tilesetUid,s={};for(let A=0;Anew Promise(o=>{r.fetchTilesDebounced(o,i)})))??[];return Promise.all(C).then(r=>{if(this.dataConfig.type==="divided"&&x9t(r)){const o=this.makeDivided(r,i);return I(o),o}return console.warn("Unimplemented dataConfig type. Returning first data source.",this.dataConfig),I(r[0]),r[0]})}},{key:"divideData",value:function(I,i){const n=new Float32Array(I.length);for(let C=0;C+p).sort((p,y)=>y-p);h=vt.calculateTilesFromResolution(b[c],d,a.min_pos[n?1:0],a.max_pos[n?1:0])}else h=vt.calculateTiles(c,d,a.min_pos[n?1:0],a.max_pos[n?1:0],a.max_zoom,a.max_width);const m=[u,h[0]].sort((b,p)=>b-p);m[0]===u?r.push(!1):r.push(!0);const f=`${c}.${m[0]}.${m[1]}`;C.push(f)}return new Promise(A=>{vt.fetchTilesDebounced({id:lg.nice(),server:this.dataConfig.server,done:A,ids:C.map(l=>`${this.dataConfig.tilesetUid}.${l}`)},this.pubSub,!0)}).then(A=>{const l=Eg(A)[0].tilesetUid,c={};for(let u=0;u=0;)e[g]=0}var P9t=0,nVe=1,J9t=2,O9t=3,_9t=258,aj=29,dw=256,QB=dw+1+aj,xp=30,Aj=19,CVe=2*QB+1,ld=15,HD=16,L9t=7,sj=256,rVe=16,oVe=17,aVe=18,lP=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],oW=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],U9t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],AVe=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Q9t=512,is=new Array((QB+2)*2);Iy(is);var sv=new Array(xp*2);Iy(sv);var jB=new Array(Q9t);Iy(jB);var $B=new Array(_9t-O9t+1);Iy($B);var lj=new Array(aj);Iy(lj);var $X=new Array(xp);Iy($X);function TD(e,g,I,i,n){this.static_tree=e,this.extra_bits=g,this.extra_base=I,this.elems=i,this.max_length=n,this.has_stree=e&&e.length}var sVe,lVe,cVe;function ND(e,g){this.dyn_tree=e,this.max_code=0,this.stat_desc=g}function uVe(e){return e<256?jB[e]:jB[256+(e>>>7)]}function qB(e,g){e.pending_buf[e.pending++]=g&255,e.pending_buf[e.pending++]=g>>>8&255}function YC(e,g,I){e.bi_valid>HD-I?(e.bi_buf|=g<>HD-e.bi_valid,e.bi_valid+=I-HD):(e.bi_buf|=g<>>=1,I<<=1;while(--g>0);return I>>>1}function j9t(e){e.bi_valid===16?(qB(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)}function $9t(e,g){var I=g.dyn_tree,i=g.max_code,n=g.stat_desc.static_tree,C=g.stat_desc.has_stree,r=g.stat_desc.extra_bits,o=g.stat_desc.extra_base,a=g.stat_desc.max_length,s,A,l,c,u,d,h=0;for(c=0;c<=ld;c++)e.bl_count[c]=0;for(I[e.heap[e.heap_max]*2+1]=0,s=e.heap_max+1;sa&&(c=a,h++),I[A*2+1]=c,!(A>i)&&(e.bl_count[c]++,u=0,A>=o&&(u=r[A-o]),d=I[A*2],e.opt_len+=d*(c+u),C&&(e.static_len+=d*(n[A*2+1]+u)));if(h!==0){do{for(c=a-1;e.bl_count[c]===0;)c--;e.bl_count[c]--,e.bl_count[c+1]+=2,e.bl_count[a]--,h-=2}while(h>0);for(c=a;c!==0;c--)for(A=e.bl_count[c];A!==0;)l=e.heap[--s],!(l>i)&&(I[l*2+1]!==c&&(e.opt_len+=(c-I[l*2+1])*I[l*2],I[l*2+1]=c),A--)}}function hVe(e,g,I){var i=new Array(ld+1),n=0,C,r;for(C=1;C<=ld;C++)i[C]=n=n+I[C-1]<<1;for(r=0;r<=g;r++){var o=e[r*2+1];o!==0&&(e[r*2]=dVe(i[o]++,o))}}function q9t(){var e,g,I,i,n,C=new Array(ld+1);for(I=0,i=0;i>=7;i8?qB(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function eXt(e,g,I,i){fVe(e),i&&(qB(e,I),qB(e,~I)),E9t.arraySet(e.pending_buf,e.window,g,I,e.pending),e.pending+=I}function hre(e,g,I,i){var n=g*2,C=I*2;return e[n]>1;r>=1;r--)kD(e,I,r);s=C;do r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],kD(e,I,1),o=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=o,I[s*2]=I[r*2]+I[o*2],e.depth[s]=(e.depth[r]>=e.depth[o]?e.depth[r]:e.depth[o])+1,I[r*2+1]=I[o*2+1]=s,e.heap[1]=s++,kD(e,I,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],$9t(e,g),hVe(I,a,e.bl_count)}function fre(e,g,I){var i,n=-1,C,r=g[0*2+1],o=0,a=7,s=4;for(r===0&&(a=138,s=3),g[(I+1)*2+1]=65535,i=0;i<=I;i++)C=r,r=g[(i+1)*2+1],!(++o=3&&e.bl_tree[AVe[g]*2+1]===0;g--);return e.opt_len+=3*(g+1)+5+5+4,g}function gXt(e,g,I,i){var n;for(YC(e,g-257,5),YC(e,I-1,5),YC(e,i-4,4),n=0;n>>=1)if(g&1&&e.dyn_ltree[I*2]!==0)return ure;if(e.dyn_ltree[9*2]!==0||e.dyn_ltree[10*2]!==0||e.dyn_ltree[13*2]!==0)return dre;for(I=32;I0?(e.strm.data_type===z9t&&(e.strm.data_type=IXt(e)),cP(e,e.l_desc),cP(e,e.d_desc),r=tXt(e),n=e.opt_len+3+7>>>3,C=e.static_len+3+7>>>3,C<=n&&(n=C)):n=C=I+5,I+4<=n&&g!==-1?pVe(e,g,I,i):e.strategy===M9t||C===n?(YC(e,(nVe<<1)+(i?1:0),3),mre(e,is,sv)):(YC(e,(J9t<<1)+(i?1:0),3),gXt(e,e.l_desc.max_code+1,e.d_desc.max_code+1,r+1),mre(e,e.dyn_ltree,e.dyn_dtree)),mVe(e),i&&fVe(e)}function rXt(e,g,I){return e.pending_buf[e.d_buf+e.last_lit*2]=g>>>8&255,e.pending_buf[e.d_buf+e.last_lit*2+1]=g&255,e.pending_buf[e.l_buf+e.last_lit]=I&255,e.last_lit++,g===0?e.dyn_ltree[I*2]++:(e.matches++,g--,e.dyn_ltree[($B[I]+dw+1)*2]++,e.dyn_dtree[uVe(g)*2]++),e.last_lit===e.lit_bufsize-1}gy._tr_init=iXt;gy._tr_stored_block=pVe;gy._tr_flush_block=CXt;gy._tr_tally=rXt;gy._tr_align=nXt;function oXt(e,g,I,i){for(var n=e&65535|0,C=e>>>16&65535|0,r=0;I!==0;){r=I>2e3?2e3:I,I-=r;do n=n+g[i++]|0,C=C+n|0;while(--r);n%=65521,C%=65521}return n|C<<16|0}var bVe=oXt;function aXt(){for(var e,g=[],I=0;I<256;I++){e=I;for(var i=0;i<8;i++)e=e&1?3988292384^e>>>1:e>>>1;g[I]=e}return g}var AXt=aXt();function sXt(e,g,I,i){var n=AXt,C=i+I;e^=-1;for(var r=i;r>>8^n[(e^g[r])&255];return e^-1}var yVe=sXt,cj={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},$n=ol,to=gy,ZVe=bVe,kl=yVe,lXt=cj,um=0,cXt=1,uXt=3,Nc=4,yre=5,Qa=0,Zre=1,go=-2,dXt=-3,YD=-5,hXt=-1,mXt=1,XV=2,fXt=3,pXt=4,bXt=0,yXt=2,Sk=8,ZXt=9,GXt=15,vXt=8,BXt=29,SXt=256,uP=SXt+1+BXt,wXt=30,RXt=19,VXt=2*uP+1,WXt=15,Bg=3,fc=258,oa=fc+Bg+1,XXt=32,wk=42,dP=69,aW=73,AW=91,sW=103,cd=113,eG=666,Ni=1,hw=2,mh=3,iy=4,HXt=3;function pc(e,g){return e.msg=lXt[g],g}function Gre(e){return(e<<1)-(e>4?9:0)}function ql(e){for(var g=e.length;--g>=0;)e[g]=0}function Yl(e){var g=e.state,I=g.pending;I>e.avail_out&&(I=e.avail_out),I!==0&&($n.arraySet(e.output,g.pending_buf,g.pending_out,I,e.next_out),e.next_out+=I,g.pending_out+=I,e.total_out+=I,e.avail_out-=I,g.pending-=I,g.pending===0&&(g.pending_out=0))}function un(e,g){to._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,g),e.block_start=e.strstart,Yl(e.strm)}function Ng(e,g){e.pending_buf[e.pending++]=g}function uZ(e,g){e.pending_buf[e.pending++]=g>>>8&255,e.pending_buf[e.pending++]=g&255}function TXt(e,g,I,i){var n=e.avail_in;return n>i&&(n=i),n===0?0:(e.avail_in-=n,$n.arraySet(g,e.input,e.next_in,n,I),e.state.wrap===1?e.adler=ZVe(e.adler,g,n,I):e.state.wrap===2&&(e.adler=kl(e.adler,g,n,I)),e.next_in+=n,e.total_in+=n,n)}function GVe(e,g){var I=e.max_chain_length,i=e.strstart,n,C,r=e.prev_length,o=e.nice_match,a=e.strstart>e.w_size-oa?e.strstart-(e.w_size-oa):0,s=e.window,A=e.w_mask,l=e.prev,c=e.strstart+fc,u=s[i+r-1],d=s[i+r];e.prev_length>=e.good_match&&(I>>=2),o>e.lookahead&&(o=e.lookahead);do if(n=g,!(s[n+r]!==d||s[n+r-1]!==u||s[n]!==s[i]||s[++n]!==s[i+1])){i+=2,n++;do;while(s[++i]===s[++n]&&s[++i]===s[++n]&&s[++i]===s[++n]&&s[++i]===s[++n]&&s[++i]===s[++n]&&s[++i]===s[++n]&&s[++i]===s[++n]&&s[++i]===s[++n]&&ir){if(e.match_start=g,r=C,C>=o)break;u=s[i+r-1],d=s[i+r]}}while((g=l[g&A])>a&&--I!==0);return r<=e.lookahead?r:e.lookahead}function fh(e){var g=e.w_size,I,i,n,C,r;do{if(C=e.window_size-e.lookahead-e.strstart,e.strstart>=g+(g-oa)){$n.arraySet(e.window,e.window,g,g,0),e.match_start-=g,e.strstart-=g,e.block_start-=g,i=e.hash_size,I=i;do n=e.head[--I],e.head[I]=n>=g?n-g:0;while(--i);i=g,I=i;do n=e.prev[--I],e.prev[I]=n>=g?n-g:0;while(--i);C+=g}if(e.strm.avail_in===0)break;if(i=TXt(e.strm,e.window,e.strstart+e.lookahead,C),e.lookahead+=i,e.lookahead+e.insert>=Bg)for(r=e.strstart-e.insert,e.ins_h=e.window[r],e.ins_h=(e.ins_h<e.pending_buf_size-5&&(I=e.pending_buf_size-5);;){if(e.lookahead<=1){if(fh(e),e.lookahead===0&&g===um)return Ni;if(e.lookahead===0)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+I;if((e.strstart===0||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,un(e,!1),e.strm.avail_out===0)||e.strstart-e.block_start>=e.w_size-oa&&(un(e,!1),e.strm.avail_out===0))return Ni}return e.insert=0,g===Nc?(un(e,!0),e.strm.avail_out===0?mh:iy):(e.strstart>e.block_start&&(un(e,!1),e.strm.avail_out===0),Ni)}function KD(e,g){for(var I,i;;){if(e.lookahead=Bg&&(e.ins_h=(e.ins_h<=Bg)if(i=to._tr_tally(e,e.strstart-e.match_start,e.match_length-Bg),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=Bg){e.match_length--;do e.strstart++,e.ins_h=(e.ins_h<=Bg&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=Bg-1)),e.prev_length>=Bg&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-Bg,i=to._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-Bg),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=n&&(e.ins_h=(e.ins_h<=Bg&&e.strstart>0&&(n=e.strstart-1,i=r[n],i===r[++n]&&i===r[++n]&&i===r[++n])){C=e.strstart+fc;do;while(i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&ne.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=Bg?(I=to._tr_tally(e,1,e.match_length-Bg),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(I=to._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),I&&(un(e,!1),e.strm.avail_out===0))return Ni}return e.insert=0,g===Nc?(un(e,!0),e.strm.avail_out===0?mh:iy):e.last_lit&&(un(e,!1),e.strm.avail_out===0)?Ni:hw}function YXt(e,g){for(var I;;){if(e.lookahead===0&&(fh(e),e.lookahead===0)){if(g===um)return Ni;break}if(e.match_length=0,I=to._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,I&&(un(e,!1),e.strm.avail_out===0))return Ni}return e.insert=0,g===Nc?(un(e,!0),e.strm.avail_out===0?mh:iy):e.last_lit&&(un(e,!1),e.strm.avail_out===0)?Ni:hw}function Ha(e,g,I,i,n){this.good_length=e,this.max_lazy=g,this.nice_length=I,this.max_chain=i,this.func=n}var ap;ap=[new Ha(0,0,0,0,NXt),new Ha(4,4,8,4,KD),new Ha(4,5,16,8,KD),new Ha(4,6,32,32,KD),new Ha(4,4,16,16,Qm),new Ha(8,16,32,32,Qm),new Ha(8,16,128,128,Qm),new Ha(8,32,128,256,Qm),new Ha(32,128,258,1024,Qm),new Ha(32,258,258,4096,Qm)];function KXt(e){e.window_size=2*e.w_size,ql(e.head),e.max_lazy_match=ap[e.level].max_lazy,e.good_match=ap[e.level].good_length,e.nice_match=ap[e.level].nice_length,e.max_chain_length=ap[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=Bg-1,e.match_available=0,e.ins_h=0}function FXt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Sk,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new $n.Buf16(VXt*2),this.dyn_dtree=new $n.Buf16((2*wXt+1)*2),this.bl_tree=new $n.Buf16((2*RXt+1)*2),ql(this.dyn_ltree),ql(this.dyn_dtree),ql(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new $n.Buf16(WXt+1),this.heap=new $n.Buf16(2*uP+1),ql(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new $n.Buf16(2*uP+1),ql(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function vVe(e){var g;return!e||!e.state?pc(e,go):(e.total_in=e.total_out=0,e.data_type=yXt,g=e.state,g.pending=0,g.pending_out=0,g.wrap<0&&(g.wrap=-g.wrap),g.status=g.wrap?wk:cd,e.adler=g.wrap===2?0:1,g.last_flush=um,to._tr_init(g),Qa)}function BVe(e){var g=vVe(e);return g===Qa&&KXt(e.state),g}function DXt(e,g){return!e||!e.state||e.state.wrap!==2?go:(e.state.gzhead=g,Qa)}function SVe(e,g,I,i,n,C){if(!e)return go;var r=1;if(g===hXt&&(g=6),i<0?(r=0,i=-i):i>15&&(r=2,i-=16),n<1||n>ZXt||I!==Sk||i<8||i>15||g<0||g>9||C<0||C>pXt)return pc(e,go);i===8&&(i=9);var o=new FXt;return e.state=o,o.strm=e,o.wrap=r,o.gzhead=null,o.w_bits=i,o.w_size=1<yre||g<0)return e?pc(e,go):go;if(i=e.state,!e.output||!e.input&&e.avail_in!==0||i.status===eG&&g!==Nc)return pc(e,e.avail_out===0?YD:go);if(i.strm=e,I=i.last_flush,i.last_flush=g,i.status===wk)if(i.wrap===2)e.adler=0,Ng(i,31),Ng(i,139),Ng(i,8),i.gzhead?(Ng(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Ng(i,i.gzhead.time&255),Ng(i,i.gzhead.time>>8&255),Ng(i,i.gzhead.time>>16&255),Ng(i,i.gzhead.time>>24&255),Ng(i,i.level===9?2:i.strategy>=XV||i.level<2?4:0),Ng(i,i.gzhead.os&255),i.gzhead.extra&&i.gzhead.extra.length&&(Ng(i,i.gzhead.extra.length&255),Ng(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=kl(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=dP):(Ng(i,0),Ng(i,0),Ng(i,0),Ng(i,0),Ng(i,0),Ng(i,i.level===9?2:i.strategy>=XV||i.level<2?4:0),Ng(i,HXt),i.status=cd);else{var r=Sk+(i.w_bits-8<<4)<<8,o=-1;i.strategy>=XV||i.level<2?o=0:i.level<6?o=1:i.level===6?o=2:o=3,r|=o<<6,i.strstart!==0&&(r|=XXt),r+=31-r%31,i.status=cd,uZ(i,r),i.strstart!==0&&(uZ(i,e.adler>>>16),uZ(i,e.adler&65535)),e.adler=1}if(i.status===dP)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(i.gzhead.extra.length&65535)&&!(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=kl(e.adler,i.pending_buf,i.pending-n,n)),Yl(e),n=i.pending,i.pending===i.pending_buf_size));)Ng(i,i.gzhead.extra[i.gzindex]&255),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(e.adler=kl(e.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=aW)}else i.status=aW;if(i.status===aW)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=kl(e.adler,i.pending_buf,i.pending-n,n)),Yl(e),n=i.pending,i.pending===i.pending_buf_size)){C=1;break}i.gzindexn&&(e.adler=kl(e.adler,i.pending_buf,i.pending-n,n)),C===0&&(i.gzindex=0,i.status=AW)}else i.status=AW;if(i.status===AW)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=kl(e.adler,i.pending_buf,i.pending-n,n)),Yl(e),n=i.pending,i.pending===i.pending_buf_size)){C=1;break}i.gzindexn&&(e.adler=kl(e.adler,i.pending_buf,i.pending-n,n)),C===0&&(i.status=sW)}else i.status=sW;if(i.status===sW&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&Yl(e),i.pending+2<=i.pending_buf_size&&(Ng(i,e.adler&255),Ng(i,e.adler>>8&255),e.adler=0,i.status=cd)):i.status=cd),i.pending!==0){if(Yl(e),e.avail_out===0)return i.last_flush=-1,Qa}else if(e.avail_in===0&&Gre(g)<=Gre(I)&&g!==Nc)return pc(e,YD);if(i.status===eG&&e.avail_in!==0)return pc(e,YD);if(e.avail_in!==0||i.lookahead!==0||g!==um&&i.status!==eG){var a=i.strategy===XV?YXt(i,g):i.strategy===fXt?kXt(i,g):ap[i.level].func(i,g);if((a===mh||a===iy)&&(i.status=eG),a===Ni||a===mh)return e.avail_out===0&&(i.last_flush=-1),Qa;if(a===hw&&(g===cXt?to._tr_align(i):g!==yre&&(to._tr_stored_block(i,0,0,!1),g===uXt&&(ql(i.head),i.lookahead===0&&(i.strstart=0,i.block_start=0,i.insert=0))),Yl(e),e.avail_out===0))return i.last_flush=-1,Qa}return g!==Nc?Qa:i.wrap<=0?Zre:(i.wrap===2?(Ng(i,e.adler&255),Ng(i,e.adler>>8&255),Ng(i,e.adler>>16&255),Ng(i,e.adler>>24&255),Ng(i,e.total_in&255),Ng(i,e.total_in>>8&255),Ng(i,e.total_in>>16&255),Ng(i,e.total_in>>24&255)):(uZ(i,e.adler>>>16),uZ(i,e.adler&65535)),Yl(e),i.wrap>0&&(i.wrap=-i.wrap),i.pending!==0?Qa:Zre)}function MXt(e){var g;return!e||!e.state?go:(g=e.state.status,g!==wk&&g!==dP&&g!==aW&&g!==AW&&g!==sW&&g!==cd&&g!==eG?pc(e,go):(e.state=null,g===cd?pc(e,dXt):Qa))}function zXt(e,g){var I=g.length,i,n,C,r,o,a,s,A;if(!e||!e.state||(i=e.state,r=i.wrap,r===2||r===1&&i.status!==wk||i.lookahead))return go;for(r===1&&(e.adler=ZVe(e.adler,g,I,0)),i.wrap=0,I>=i.w_size&&(r===0&&(ql(i.head),i.strstart=0,i.block_start=0,i.insert=0),A=new $n.Buf8(i.w_size),$n.arraySet(A,g,I-i.w_size,i.w_size,0),g=A,I=i.w_size),o=e.avail_in,a=e.next_in,s=e.input,e.avail_in=I,e.next_in=0,e.input=g,fh(i);i.lookahead>=Bg;){n=i.strstart,C=i.lookahead-(Bg-1);do i.ins_h=(i.ins_h<=252?6:Gl>=248?5:Gl>=240?4:Gl>=224?3:Gl>=192?2:1;eS[254]=eS[254]=1;dm.string2buf=function(e){var g,I,i,n,C,r=e.length,o=0;for(n=0;n>>6,g[C++]=128|I&63):I<65536?(g[C++]=224|I>>>12,g[C++]=128|I>>>6&63,g[C++]=128|I&63):(g[C++]=240|I>>>18,g[C++]=128|I>>>12&63,g[C++]=128|I>>>6&63,g[C++]=128|I&63);return g};function VVe(e,g){if(g<65534&&(e.subarray&&RVe||!e.subarray&&wVe))return String.fromCharCode.apply(null,Rk.shrinkBuf(e,g));for(var I="",i=0;i4){o[i++]=65533,I+=C-1;continue}for(n&=C===2?31:C===3?15:7;C>1&&I1){o[i++]=65533;continue}n<65536?o[i++]=n:(n-=65536,o[i++]=55296|n>>10&1023,o[i++]=56320|n&1023)}return VVe(o,i)};dm.utf8border=function(e,g){var I;for(g=g||e.length,g>e.length&&(g=e.length),I=g-1;I>=0&&(e[I]&192)===128;)I--;return I<0||I===0?g:I+eS[e[I]]>g?I:g};function PXt(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var WVe=PXt,lv=kA,cv=ol,hP=dm,mP=cj,JXt=WVe,XVe=Object.prototype.toString,OXt=0,FD=4,Ep=0,vre=1,Bre=2,_Xt=-1,LXt=0,UXt=8;function ph(e){if(!(this instanceof ph))return new ph(e);this.options=cv.assign({level:_Xt,method:UXt,chunkSize:16384,windowBits:15,memLevel:8,strategy:LXt,to:""},e||{});var g=this.options;g.raw&&g.windowBits>0?g.windowBits=-g.windowBits:g.gzip&&g.windowBits>0&&g.windowBits<16&&(g.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new JXt,this.strm.avail_out=0;var I=lv.deflateInit2(this.strm,g.level,g.method,g.windowBits,g.memLevel,g.strategy);if(I!==Ep)throw new Error(mP[I]);if(g.header&&lv.deflateSetHeader(this.strm,g.header),g.dictionary){var i;if(typeof g.dictionary=="string"?i=hP.string2buf(g.dictionary):XVe.call(g.dictionary)==="[object ArrayBuffer]"?i=new Uint8Array(g.dictionary):i=g.dictionary,I=lv.deflateSetDictionary(this.strm,i),I!==Ep)throw new Error(mP[I]);this._dict_set=!0}}ph.prototype.push=function(e,g){var I=this.strm,i=this.options.chunkSize,n,C;if(this.ended)return!1;C=g===~~g?g:g===!0?FD:OXt,typeof e=="string"?I.input=hP.string2buf(e):XVe.call(e)==="[object ArrayBuffer]"?I.input=new Uint8Array(e):I.input=e,I.next_in=0,I.avail_in=I.input.length;do{if(I.avail_out===0&&(I.output=new cv.Buf8(i),I.next_out=0,I.avail_out=i),n=lv.deflate(I,C),n!==vre&&n!==Ep)return this.onEnd(n),this.ended=!0,!1;(I.avail_out===0||I.avail_in===0&&(C===FD||C===Bre))&&(this.options.to==="string"?this.onData(hP.buf2binstring(cv.shrinkBuf(I.output,I.next_out))):this.onData(cv.shrinkBuf(I.output,I.next_out)))}while((I.avail_in>0||I.avail_out===0)&&n!==vre);return C===FD?(n=lv.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===Ep):(C===Bre&&(this.onEnd(Ep),I.avail_out=0),!0)};ph.prototype.onData=function(e){this.chunks.push(e)};ph.prototype.onEnd=function(e){e===Ep&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=cv.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function uj(e,g){var I=new ph(g);if(I.push(e,!0),I.err)throw I.msg||mP[I.err];return I.result}function QXt(e,g){return g=g||{},g.raw=!0,uj(e,g)}function jXt(e,g){return g=g||{},g.gzip=!0,uj(e,g)}uw.Deflate=ph;uw.deflate=uj;uw.deflateRaw=QXt;uw.gzip=jXt;var mw={},Ga={},HV=30,$Xt=12,qXt=function(g,I){var i,n,C,r,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G,v,w,R,S;i=g.state,n=g.next_in,R=g.input,C=n+(g.avail_in-5),r=g.next_out,S=g.output,o=r-(I-g.avail_out),a=r+(g.avail_out-257),s=i.dmax,A=i.wsize,l=i.whave,c=i.wnext,u=i.window,d=i.hold,h=i.bits,m=i.lencode,f=i.distcode,b=(1<>>24,d>>>=Z,h-=Z,Z=y>>>16&255,Z===0)S[r++]=y&65535;else if(Z&16){B=y&65535,Z&=15,Z&&(h>>=Z,h-=Z),h<15&&(d+=R[n++]<>>24,d>>>=Z,h-=Z,Z=y>>>16&255,Z&16){if(G=y&65535,Z&=15,hs){g.msg="invalid distance too far back",i.mode=HV;break e}if(d>>>=Z,h-=Z,Z=r-o,G>Z){if(Z=G-Z,Z>l&&i.sane){g.msg="invalid distance too far back",i.mode=HV;break e}if(v=0,w=u,c===0){if(v+=A-Z,Z2;)S[r++]=w[v++],S[r++]=w[v++],S[r++]=w[v++],B-=3;B&&(S[r++]=w[v++],B>1&&(S[r++]=w[v++]))}else{v=r-G;do S[r++]=S[v++],S[r++]=S[v++],S[r++]=S[v++],B-=3;while(B>2);B&&(S[r++]=S[v++],B>1&&(S[r++]=S[v++]))}}else if(Z&64){g.msg="invalid distance code",i.mode=HV;break e}else{y=f[(y&65535)+(d&(1<>3,n-=B,h-=B<<3,d&=(1<=1&&X[u]===0;u--);if(d>u&&(d=u),u===0)return C[r++]=1<<24|64<<16|0,C[r++]=1<<24|64<<16|0,a.bits=1,0;for(c=1;c0&&(g===Vre||u!==1))return-1;for(W[1]=0,A=1;Awre||g===Wre&&b>Rre)return 1;for(;;){Y=A-m,o[l]S?(K=V[H+o[l]],x=w[R+o[l]]):(K=32+64,x=0),y=1<>m)+Z]=Y<<24|K<<16|x|0;while(Z!==0);for(y=1<>=1;if(y!==0?(p&=y-1,p+=y):p=0,l++,--X[A]===0){if(A===u)break;A=I[i+o[l]]}if(A>d&&(p&G)!==B){for(m===0&&(m=d),v+=c,h=A-m,f=1<wre||g===Wre&&b>Rre)return 1;B=p&G,C[B]=d<<24|h<<16|v-r|0}}return p!==0&&(C[v+p]=A-m<<24|64<<16|0),a.bits=d,0},lr=ol,fP=bVe,Ta=yVe,n2t=qXt,uv=i2t,C2t=0,HVe=1,TVe=2,Xre=4,r2t=5,TV=6,bh=0,o2t=1,a2t=2,oo=-2,NVe=-3,kVe=-4,A2t=-5,Hre=8,YVe=1,Tre=2,Nre=3,kre=4,Yre=5,Kre=6,Fre=7,Dre=8,xre=9,Ere=10,qX=11,JA=12,xD=13,Mre=14,ED=15,zre=16,Pre=17,Jre=18,Ore=19,NV=20,kV=21,_re=22,Lre=23,Ure=24,Qre=25,jre=26,MD=27,$re=28,qre=29,GI=30,KVe=31,s2t=32,l2t=852,c2t=592,u2t=15,d2t=u2t;function eoe(e){return(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24)}function h2t(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new lr.Buf16(320),this.work=new lr.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function FVe(e){var g;return!e||!e.state?oo:(g=e.state,e.total_in=e.total_out=g.total=0,e.msg="",g.wrap&&(e.adler=g.wrap&1),g.mode=YVe,g.last=0,g.havedict=0,g.dmax=32768,g.head=null,g.hold=0,g.bits=0,g.lencode=g.lendyn=new lr.Buf32(l2t),g.distcode=g.distdyn=new lr.Buf32(c2t),g.sane=1,g.back=-1,bh)}function DVe(e){var g;return!e||!e.state?oo:(g=e.state,g.wsize=0,g.whave=0,g.wnext=0,FVe(e))}function xVe(e,g){var I,i;return!e||!e.state||(i=e.state,g<0?(I=0,g=-g):(I=(g>>4)+1,g<48&&(g&=15)),g&&(g<8||g>15))?oo:(i.window!==null&&i.wbits!==g&&(i.window=null),i.wrap=I,i.wbits=g,DVe(e))}function EVe(e,g){var I,i;return e?(i=new h2t,e.state=i,i.window=null,I=xVe(e,g),I!==bh&&(e.state=null),I):oo}function m2t(e){return EVe(e,d2t)}var toe=!0,zD,PD;function f2t(e){if(toe){var g;for(zD=new lr.Buf32(512),PD=new lr.Buf32(32),g=0;g<144;)e.lens[g++]=8;for(;g<256;)e.lens[g++]=9;for(;g<280;)e.lens[g++]=7;for(;g<288;)e.lens[g++]=8;for(uv(HVe,e.lens,0,288,zD,0,e.work,{bits:9}),g=0;g<32;)e.lens[g++]=5;uv(TVe,e.lens,0,32,PD,0,e.work,{bits:5}),toe=!1}e.lencode=zD,e.lenbits=9,e.distcode=PD,e.distbits=5}function MVe(e,g,I,i){var n,C=e.state;return C.window===null&&(C.wsize=1<=C.wsize?(lr.arraySet(C.window,g,I-C.wsize,C.wsize,0),C.wnext=0,C.whave=C.wsize):(n=C.wsize-C.wnext,n>i&&(n=i),lr.arraySet(C.window,g,I-i,n,C.wnext),i-=n,i?(lr.arraySet(C.window,g,I-i,i,0),C.wnext=i,C.whave=C.wsize):(C.wnext+=n,C.wnext===C.wsize&&(C.wnext=0),C.whave>>8&255,I.check=Ta(I.check,w,2,0),s=0,A=0,I.mode=Tre;break}if(I.flags=0,I.head&&(I.head.done=!1),!(I.wrap&1)||(((s&255)<<8)+(s>>8))%31){e.msg="incorrect header check",I.mode=GI;break}if((s&15)!==Hre){e.msg="unknown compression method",I.mode=GI;break}if(s>>>=4,A-=4,G=(s&15)+8,I.wbits===0)I.wbits=G;else if(G>I.wbits){e.msg="invalid window size",I.mode=GI;break}I.dmax=1<>8&1),I.flags&512&&(w[0]=s&255,w[1]=s>>>8&255,I.check=Ta(I.check,w,2,0)),s=0,A=0,I.mode=Nre;case Nre:for(;A<32;){if(o===0)break e;o--,s+=i[C++]<>>8&255,w[2]=s>>>16&255,w[3]=s>>>24&255,I.check=Ta(I.check,w,4,0)),s=0,A=0,I.mode=kre;case kre:for(;A<16;){if(o===0)break e;o--,s+=i[C++]<>8),I.flags&512&&(w[0]=s&255,w[1]=s>>>8&255,I.check=Ta(I.check,w,2,0)),s=0,A=0,I.mode=Yre;case Yre:if(I.flags&1024){for(;A<16;){if(o===0)break e;o--,s+=i[C++]<>>8&255,I.check=Ta(I.check,w,2,0)),s=0,A=0}else I.head&&(I.head.extra=null);I.mode=Kre;case Kre:if(I.flags&1024&&(u=I.length,u>o&&(u=o),u&&(I.head&&(G=I.head.extra_len-I.length,I.head.extra||(I.head.extra=new Array(I.head.extra_len)),lr.arraySet(I.head.extra,i,C,u,G)),I.flags&512&&(I.check=Ta(I.check,i,u,C)),o-=u,C+=u,I.length-=u),I.length))break e;I.length=0,I.mode=Fre;case Fre:if(I.flags&2048){if(o===0)break e;u=0;do G=i[C+u++],I.head&&G&&I.length<65536&&(I.head.name+=String.fromCharCode(G));while(G&&u>9&1,I.head.done=!0),e.adler=I.check=0,I.mode=JA;break;case Ere:for(;A<32;){if(o===0)break e;o--,s+=i[C++]<>>=A&7,A-=A&7,I.mode=MD;break}for(;A<3;){if(o===0)break e;o--,s+=i[C++]<>>=1,A-=1,s&3){case 0:I.mode=Mre;break;case 1:if(f2t(I),I.mode=NV,g===TV){s>>>=2,A-=2;break e}break;case 2:I.mode=Pre;break;case 3:e.msg="invalid block type",I.mode=GI}s>>>=2,A-=2;break;case Mre:for(s>>>=A&7,A-=A&7;A<32;){if(o===0)break e;o--,s+=i[C++]<>>16^65535)){e.msg="invalid stored block lengths",I.mode=GI;break}if(I.length=s&65535,s=0,A=0,I.mode=ED,g===TV)break e;case ED:I.mode=zre;case zre:if(u=I.length,u){if(u>o&&(u=o),u>a&&(u=a),u===0)break e;lr.arraySet(n,i,C,u,r),o-=u,C+=u,a-=u,r+=u,I.length-=u;break}I.mode=JA;break;case Pre:for(;A<14;){if(o===0)break e;o--,s+=i[C++]<>>=5,A-=5,I.ndist=(s&31)+1,s>>>=5,A-=5,I.ncode=(s&15)+4,s>>>=4,A-=4,I.nlen>286||I.ndist>30){e.msg="too many length or distance symbols",I.mode=GI;break}I.have=0,I.mode=Jre;case Jre:for(;I.have>>=3,A-=3}for(;I.have<19;)I.lens[X[I.have++]]=0;if(I.lencode=I.lendyn,I.lenbits=7,R={bits:I.lenbits},v=uv(C2t,I.lens,0,19,I.lencode,0,I.work,R),I.lenbits=R.bits,v){e.msg="invalid code lengths set",I.mode=GI;break}I.have=0,I.mode=Ore;case Ore:for(;I.have>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=i[C++]<>>=f,A-=f,I.lens[I.have++]=p;else{if(p===16){for(S=f+2;A>>=f,A-=f,I.have===0){e.msg="invalid bit length repeat",I.mode=GI;break}G=I.lens[I.have-1],u=3+(s&3),s>>>=2,A-=2}else if(p===17){for(S=f+3;A>>=f,A-=f,G=0,u=3+(s&7),s>>>=3,A-=3}else{for(S=f+7;A>>=f,A-=f,G=0,u=11+(s&127),s>>>=7,A-=7}if(I.have+u>I.nlen+I.ndist){e.msg="invalid bit length repeat",I.mode=GI;break}for(;u--;)I.lens[I.have++]=G}}if(I.mode===GI)break;if(I.lens[256]===0){e.msg="invalid code -- missing end-of-block",I.mode=GI;break}if(I.lenbits=9,R={bits:I.lenbits},v=uv(HVe,I.lens,0,I.nlen,I.lencode,0,I.work,R),I.lenbits=R.bits,v){e.msg="invalid literal/lengths set",I.mode=GI;break}if(I.distbits=6,I.distcode=I.distdyn,R={bits:I.distbits},v=uv(TVe,I.lens,I.nlen,I.ndist,I.distcode,0,I.work,R),I.distbits=R.bits,v){e.msg="invalid distances set",I.mode=GI;break}if(I.mode=NV,g===TV)break e;case NV:I.mode=kV;case kV:if(o>=6&&a>=258){e.next_out=r,e.avail_out=a,e.next_in=C,e.avail_in=o,I.hold=s,I.bits=A,n2t(e,c),r=e.next_out,n=e.output,a=e.avail_out,C=e.next_in,i=e.input,o=e.avail_in,s=I.hold,A=I.bits,I.mode===JA&&(I.back=-1);break}for(I.back=0;m=I.lencode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=i[C++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=i[C++]<>>=y,A-=y,I.back+=y}if(s>>>=f,A-=f,I.back+=f,I.length=p,b===0){I.mode=jre;break}if(b&32){I.back=-1,I.mode=JA;break}if(b&64){e.msg="invalid literal/length code",I.mode=GI;break}I.extra=b&15,I.mode=_re;case _re:if(I.extra){for(S=I.extra;A>>=I.extra,A-=I.extra,I.back+=I.extra}I.was=I.length,I.mode=Lre;case Lre:for(;m=I.distcode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=i[C++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=i[C++]<>>=y,A-=y,I.back+=y}if(s>>>=f,A-=f,I.back+=f,b&64){e.msg="invalid distance code",I.mode=GI;break}I.offset=p,I.extra=b&15,I.mode=Ure;case Ure:if(I.extra){for(S=I.extra;A>>=I.extra,A-=I.extra,I.back+=I.extra}if(I.offset>I.dmax){e.msg="invalid distance too far back",I.mode=GI;break}I.mode=Qre;case Qre:if(a===0)break e;if(u=c-a,I.offset>u){if(u=I.offset-u,u>I.whave&&I.sane){e.msg="invalid distance too far back",I.mode=GI;break}u>I.wnext?(u-=I.wnext,d=I.wsize-u):d=I.wnext-u,u>I.length&&(u=I.length),h=I.window}else h=n,d=r-I.offset,u=I.length;u>a&&(u=a),a-=u,I.length-=u;do n[r++]=h[d++];while(--u);I.length===0&&(I.mode=kV);break;case jre:if(a===0)break e;n[r++]=I.length,a--,I.mode=kV;break;case MD:if(I.wrap){for(;A<32;){if(o===0)break e;o--,s|=i[C++]<=0&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),g.windowBits>=0&&g.windowBits<16&&!(e&&e.windowBits)&&(g.windowBits+=32),g.windowBits>15&&g.windowBits<48&&(g.windowBits&15||(g.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new B2t,this.strm.avail_out=0;var I=Mp.inflateInit2(this.strm,g.windowBits);if(I!==ii.Z_OK)throw new Error(pP[I]);if(this.header=new S2t,Mp.inflateGetHeader(this.strm,this.header),g.dictionary&&(typeof g.dictionary=="string"?g.dictionary=lW.string2buf(g.dictionary):PVe.call(g.dictionary)==="[object ArrayBuffer]"&&(g.dictionary=new Uint8Array(g.dictionary)),g.raw&&(I=Mp.inflateSetDictionary(this.strm,g.dictionary),I!==ii.Z_OK)))throw new Error(pP[I])}yh.prototype.push=function(e,g){var I=this.strm,i=this.options.chunkSize,n=this.options.dictionary,C,r,o,a,s,A=!1;if(this.ended)return!1;r=g===~~g?g:g===!0?ii.Z_FINISH:ii.Z_NO_FLUSH,typeof e=="string"?I.input=lW.binstring2buf(e):PVe.call(e)==="[object ArrayBuffer]"?I.input=new Uint8Array(e):I.input=e,I.next_in=0,I.avail_in=I.input.length;do{if(I.avail_out===0&&(I.output=new dv.Buf8(i),I.next_out=0,I.avail_out=i),C=Mp.inflate(I,ii.Z_NO_FLUSH),C===ii.Z_NEED_DICT&&n&&(C=Mp.inflateSetDictionary(this.strm,n)),C===ii.Z_BUF_ERROR&&A===!0&&(C=ii.Z_OK,A=!1),C!==ii.Z_STREAM_END&&C!==ii.Z_OK)return this.onEnd(C),this.ended=!0,!1;I.next_out&&(I.avail_out===0||C===ii.Z_STREAM_END||I.avail_in===0&&(r===ii.Z_FINISH||r===ii.Z_SYNC_FLUSH))&&(this.options.to==="string"?(o=lW.utf8border(I.output,I.next_out),a=I.next_out-o,s=lW.buf2string(I.output,o),I.next_out=a,I.avail_out=i-a,a&&dv.arraySet(I.output,I.output,o,a,0),this.onData(s)):this.onData(dv.shrinkBuf(I.output,I.next_out))),I.avail_in===0&&I.avail_out===0&&(A=!0)}while((I.avail_in>0||I.avail_out===0)&&C!==ii.Z_STREAM_END);return C===ii.Z_STREAM_END&&(r=ii.Z_FINISH),r===ii.Z_FINISH?(C=Mp.inflateEnd(this.strm),this.onEnd(C),this.ended=!0,C===ii.Z_OK):(r===ii.Z_SYNC_FLUSH&&(this.onEnd(ii.Z_OK),I.avail_out=0),!0)};yh.prototype.onData=function(e){this.chunks.push(e)};yh.prototype.onEnd=function(e){e===ii.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=dv.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function dj(e,g){var I=new yh(g);if(I.push(e,!0),I.err)throw I.msg||pP[I.err];return I.result}function w2t(e,g){return g=g||{},g.raw=!0,dj(e,g)}mw.Inflate=yh;mw.inflate=dj;mw.inflateRaw=w2t;mw.ungzip=dj;var R2t=ol.assign,V2t=uw,W2t=mw,X2t=zVe,JVe={};R2t(JVe,V2t,W2t,X2t);var H2t=JVe;const T2t=PC(H2t);var N2t=["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];const k2t=N2t;function Y2t(e){if(typeof e!="string")throw new TypeError("input must be a string");let g=[],I,i,n={LOCUS_TAG:"LOCUS",DEFINITION_TAG:"DEFINITION",ACCESSION_TAG:"ACCESSION",VERSION_TAG:"VERSION",KEYWORDS_TAG:"KEYWORDS",SOURCE_TAG:"SOURCE",ORGANISM_TAG:"ORGANISM",REFERENCE_TAG:"REFERENCE",AUTHORS_TAG:"AUTHORS",CONSORTIUM_TAG:"CONSRTM",TITLE_TAG:"TITLE",JOURNAL_TAG:"JOURNAL",PUBMED_TAG:"PUBMED",REMARK_TAG:"REMARK",FEATURES_TAG:"FEATURES",BASE_COUNT_TAG:"BASE COUNT",ORIGIN_TAG:"ORIGIN",END_SEQUENCE_TAG:"//"},C=e.split(/\r?\n/),r,o,a,s,A,l=!1;for(let V of C){if(V===null)break;let H=v(V),Y=R(V),K=X(V),x=S(V);if(H===n.END_SEQUENCE_TAG||x?(r=H,o=null):K&&(o=H),!(V.trim()===""||H===";")){if(!l&&r!==n.LOCUS_TAG)break;switch(r){case n.LOCUS_TAG:l=!0,m(V);break;case n.FEATURES_TAG:p(V,H,Y);break;case n.ORIGIN_TAG:h(V,H);break;case n.DEFINITION_TAG:case n.ACCESSION_TAG:case n.VERSION_TAG:case n.KEYWORDS_TAG:w(r,V,r.toLowerCase());break;case n.SOURCE_TAG:o===n.ORGANISM_TAG?w(o,V,"organism"):w(H,V,"source");break;case n.REFERENCE_TAG:if(H===n.REFERENCE_TAG){const J=I.references||[];I.references=J,J.push({})}b(V,o);break;case n.END_SEQUENCE_TAG:c();break}}}return g[g.length-1]!==I&&c(),g;function c(){d(),g.push(I)}function u(){return I.features[I.features.length-1]}function d(){if(I&&I.features)for(let V=0;V0;g--){const I=Math.floor(Math.random()*(g+1)),i=e[g];e[g]=e[I],e[I]=i}return e}function J2t(e){return e.type==="filler"}function O2t(e){const g=e.end-e.start,I=e.strand===1?"+":"-",i=lg.nice();return J2t(e)?{xStart:e.start,xEnd:e.end,strand:e.strand,fields:[],type:"filler",uid:i}:{xStart:e.start,xEnd:e.end,strand:I,chrOffset:0,importance:e.end-e.start,uid:i,type:e.type,fields:["chrom",e.start,e.end,e.name,g,I,"","",e.type,e.name,e.start.toString(),e.end.toString(),e.start.toString(),e.end.toString()]}}function _2t(e){const g=D2t(e),I=P2t(g[0].features.filter(i=>i.type!=="source").sort((i,n)=>i.start-n.start));return{json:g,features:I}}async function L2t(e,{gzipped:g}){if(!g)return e.text();const I=await e.arrayBuffer();return T2t.inflate(I,{to:"string"})}let _Ve=function(){function e(g){x2t(this,e),this.dataConfig=g,this.trackUid=lg.nice(),this.errorTxt="";let I;if(g.url){const i=g.url.slice(g.url.length-3);I=fetch(g.url,{mode:"cors",redirect:"follow",method:"GET"}).then(n=>L2t(n,{gzipped:i===".gz"}))}else if(g.text)I=Promise.resolve(g.text);else throw new Error("No data or URL specified");this.gbDataPromise=I.then(i=>_2t(i))}return E2t(e,[{key:"tilesetInfo",value:function(I){return this.tilesetInfoLoading=!0,this.gbDataPromise.then(i=>{this.tilesetInfoLoading=!1;const n=1024,C={name:`genbank-${this.trackUid}`,tile_size:n,max_zoom:Math.ceil(Math.log(i.json[0].size/n)/Math.log(2)),max_width:i.json[0].size,min_pos:[0],max_pos:[i.json[0].size]};return I&&I(C),C}).catch(i=>{this.tilesetInfoLoading=!1,I&&I({error:`Error parsing genbank: ${i}`})})}},{key:"fetchTilesDebounced",value:async function(I,i){const n={},C=[],r=[];for(const a of i){const s=a.split("."),A=parseInt(s[0],10),l=parseInt(s[1],10);if(Number.isNaN(l)||Number.isNaN(A)){console.warn("Invalid tile zoom or position:",A,l);continue}C.push(a),r.push(this.tile(A,l))}const o=await Promise.all(r);for(let a=0;ah.end>o&&h.starth.strand===1),A,"+"),c=Ioe(s.filter(h=>h.strand!==1),A,"-"),u=[],d=20;for(let h=0;h=d);h++)C.features[h].end>=o&&C.features[h].start<=a&&u.push(C.features[h]);return[u,l,c].flatMap(h=>h.map(O2t))}}]),e}();function U2t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function ioe(e,g){for(var I=0;I`localtile.${r}`);_Q(this.tilesData,"",C);for(const r of i)n[r]=this.tilesData[`localtile.${r}`];return I(n),n}},{key:"tile",value:function(I,i){}}]),e}();function q2t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function noe(e,g){for(var I=0;IC.trackId!==n),this.taskList.push({handler:I,data:i,trackId:n})),this.taskHandle||(this.taskHandle=requestIdleCallback(this.runTaskQueue.bind(this),{timeout:this.requestIdleCallbackTimeout}))}},{key:"runTaskQueue",value:function(I){for(;(I.timeRemaining()>0||I.didTimeout)&&this.taskList.length;){const i=this.taskList.shift();i&&IHt(i)?i.handler():i&&i.handler(i.data)}this.taskList.length?this.taskHandle=requestIdleCallback(this.runTaskQueue.bind(this),{timeout:this.requestIdleCallbackTimeout}):this.taskHandle=0}}]),e}();const nHt=new iHt;function CHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Coe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fs(e){return fs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},fs(e)}function dHt(e,g,I,i,n){const C=e||n,r=0;return C==="log"&&g>0?["log",Cu().range([254,0]).domain([g+r,i+r])]:["linear",gg().range([254,0]).domain([g,i])]}let hm=function(e){sHt(I,e);var g=lHt(I);function I(i,n){var C;CHt(this,I),C=g.call(this,i,n);const{pubSub:r,dataConfig:o,handleTilesetInfoReceived:a,animate:s,onValueScaleChanged:A}=i;return C.renderVersion=1,C.visibleTiles=new Set,C.visibleTileIds=new Set,C.renderingTiles=new Set,C.fetching=new Set,C.scale={},C.fetchedTiles={},C.tileGraphics={},C.maxZoom=0,C.medianVisibleValue=null,C.backgroundTaskScheduler=nHt,C.continuousScaling="requestIdleCallback"in window,C.valueScaleMin=null,C.fixedValueScaleMin=null,C.valueScaleMax=null,C.fixedValueScaleMax=null,C.listeners={},C.pubSub=r,C.animate=s,C.onValueScaleChanged=A,C.prevValueScale=null,i.dataFetcher?C.dataFetcher=i.dataFetcher:C.dataFetcher=new Bk(o,C.pubSub),C.tilesetInfo=null,C.uuid=lg.nice(),C.trackNotFoundText=new ot.PIXI.Text("",{fontSize:"12px",fontFamily:"Arial",fill:"black"}),C.pLabel.addChild(C.trackNotFoundText),C.refreshTilesDebounced=dve(C.refreshTiles.bind(yP(C)),yX,yX),C.dataFetcher.tilesetInfo((l,c)=>{if(l){if(C.tilesetInfo=l,C.dataFetcher.dataConfig.tilesetUid||(C.dataFetcher.dataConfig.tilesetUid=c),C.tilesetUid=C.dataFetcher.dataConfig.tilesetUid,C.server=C.dataFetcher.dataConfig.server||"unknown",C.tilesetInfo&&C.tilesetInfo.chromsizes&&(C.chromInfo=HN(C.tilesetInfo.chromsizes)),"error"in C.tilesetInfo){console.warn("Error retrieving tilesetInfo:",o,C.tilesetInfo.error),C.tilesetInfo=null,C.setError(C.tilesetInfo.error);return}C.tilesetInfo.resolutions?C.maxZoom=C.tilesetInfo.resolutions.length:C.maxZoom=+C.tilesetInfo.max_zoom,C.options&&C.options.maxZoom&&(C.options.maxZoom>=0?C.maxZoom=Math.min(C.options.maxZoom,C.maxZoom):console.error("Invalid maxZoom on track:",yP(C))),C.refreshTiles(),a&&a(l),C.options||(C.options={}),C.options.name=C.options.name||l.name,C.checkValueScaleLimits(),C.draw(),C.drawLabel(),C.animate()}}),C}return rHt(I,[{key:"setError",value:function(n){this.errorTextText=n,this.draw(),this.animate()}},{key:"setFixedValueScaleMin",value:function(n){Number.isNaN(+n)?this.fixedValueScaleMin=null:this.fixedValueScaleMin=+n}},{key:"setFixedValueScaleMax",value:function(n){Number.isNaN(+n)?this.fixedValueScaleMax=null:this.fixedValueScaleMax=+n}},{key:"checkValueScaleLimits",value:function(){this.valueScaleMin=typeof this.options.valueScaleMin<"u"?+this.options.valueScaleMin:null,this.fixedValueScaleMin!==null&&(this.valueScaleMin=this.fixedValueScaleMin),this.valueScaleMax=typeof this.options.valueScaleMax<"u"?+this.options.valueScaleMax:null,this.fixedValueScaleMax!==null&&(this.valueScaleMax=this.fixedValueScaleMax)}},{key:"on",value:function(n,C){this.listeners[n]||(this.listeners[n]=[]),this.listeners[n].push(C)}},{key:"off",value:function(n,C){const r=this.listeners[n].indexOf(C);r===-1||r>=this.listeners[n].length||this.listeners[n].splice(r,1)}},{key:"rerender",value:function(n){ud(fs(I.prototype),"rerender",this).call(this,n),this.renderVersion+=1,this.tilesetInfo&&(this.checkValueScaleLimits(),this.tilesetInfo.resolutions?this.maxZoom=this.tilesetInfo.resolutions.length:this.maxZoom=+this.tilesetInfo.max_zoom,this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?this.maxZoom=Math.min(this.options.maxZoom,this.maxZoom):console.error("Invalid maxZoom on track:",this)))}},{key:"visibleAndFetchedIds",value:function(){return Object.keys(this.fetchedTiles).filter(n=>this.visibleTileIds.has(n))}},{key:"visibleAndFetchedTiles",value:function(){return this.visibleAndFetchedIds().map(n=>this.fetchedTiles[n])}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C),mirrored:C.mirrored})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.tileId))}},{key:"removeOldTiles",value:function(){this.calculateVisibleTiles();const C=[...new Set(Object.keys(this.fetchedTiles))].filter(r=>!this.visibleTileIds.has(r));this.removeTiles(C)}},{key:"refreshTiles",value:function(){if(!this.tilesetInfo)return;this.calculateVisibleTiles();const n=new Set(Object.keys(this.fetchedTiles)),C=[...this.visibleTiles].filter(r=>!this.fetching.has(r.remoteId)&&!n.has(r.tileId));for(let r=0;r0;)if(r-=1,o=o.map(s=>Math.floor(s/2)),`${C}.${r}.${o.join(".")}`in this.fetchedTiles)return!0;return!1}},{key:"parentTileId",value:function(n){const C=n.tileData.zoomLevel-1,r=n.tileData.tilePos.map(a=>Math.floor(a/2));return`${n.tileData.tilesetUid}.${C}.${r.join(".")}`}},{key:"removeTiles",value:function(n){!n.length||!this.areAllVisibleTilesLoaded()||this.renderingTiles.size||(n.forEach(C=>{const r=C;this.destroyTile(this.fetchedTiles[r]),r in this.tileGraphics&&(this.pMain.removeChild(this.tileGraphics[r]),delete this.tileGraphics[r]),delete this.fetchedTiles[r]}),this.synchronizeTilesAndGraphics(),this.draw())}},{key:"zoomed",value:function(n,C,r=1,o=0,a=0){this.xScale(n),this.yScale(C),this.refreshTilesDebounced(),this.pMobile.position.x=o,this.pMobile.position.y=this.position[1],this.pMobile.scale.x=r,this.pMobile.scale.y=1}},{key:"setPosition",value:function(n){ud(fs(I.prototype),"setPosition",this).call(this,n)}},{key:"setDimensions",value:function(n){ud(fs(I.prototype),"setDimensions",this).call(this,n)}},{key:"areAllVisibleTilesLoaded",value:function(){const n=new Set(Object.keys(this.fetchedTiles)),C=[...this.visibleTileIds];for(let r=0;rC.tileData))}},{key:"loadTileData",value:function(n,C){let r=this.lruCache.get(n.tileId);return r||(r=C(n.data,n.type),this.lruCache.put(n.tileId,r)),r}},{key:"fetchNewTiles",value:function(n){if(n.length>0){const C=[...new Set(n.map(r=>r.remoteId))];this.dataFetcher.fetchTilesDebounced(this.receivedTiles.bind(this),C)}}},{key:"receivedTiles",value:function(n){for(let C=0;CNumber.isNaN(+a)).forEach(a=>{this.fetchedTiles[r].tileData[a]=o[a]})}else this.fetchedTiles[r].tileData={...n[this.visibleTiles[C].remoteId]};this.fetchedTiles[r].tileData.error&&console.warn("Error in loaded tile",r,this.fetchedTiles[r].tileData)}}for(const C in n)if(n[C]){const r=n[C].tilePositionId;this.fetching.has(r)&&this.fetching.delete(r)}this.synchronizeTilesAndGraphics(),this.draw(),this.drawLabel(),this.valueScale&&(!this.prevValueScale||JSON.stringify(this.valueScale.domain())!==JSON.stringify(this.prevValueScale.domain()))&&(this.prevValueScale=this.valueScale.copy(),this.onValueScaleChanged&&this.onValueScaleChanged()),this.animate(),this.areAllVisibleTilesLoaded()&&this.pubSub&&this.pubSub.publish("TiledPixiTrack.tilesLoaded",{uuid:this.uuid})}},{key:"draw",value:function(){if(this.delayDrawing)return;this.tilesetInfo?this.trackNotFoundText.visible=!1:(this.dataFetcher.tilesetInfoLoading?this.trackNotFoundText.text="Loading...":this.trackNotFoundText.text=`Tileset info not found. Server: [${this.server}] tilesetUid: [${this.tilesetUid}]`,[this.trackNotFoundText.x,this.trackNotFoundText.y]=this.position,this.flipText&&(this.trackNotFoundText.anchor.x=1,this.trackNotFoundText.scale.x=-1),this.trackNotFoundText.visible=!0),this.pubSub&&this.pubSub.publish("TiledPixiTrack.tilesDrawnStart",{uuid:this.uuid});const n=Object.values(this.fetchedTiles).map(C=>C.tileData&&C.tileData.error&&`${C.tileId}: ${C.tileData.error}`).filter(C=>C);n.length?this.errorTextText=n.join(` -`):this.errorTextText="",ud(fs(I.prototype),"draw",this).call(this),Object.keys(this.fetchedTiles).forEach(C=>{this.drawTile(this.fetchedTiles[C])}),this.pubSub&&this.pubSub.publish("TiledPixiTrack.tilesDrawnEnd",{uuid:this.uuid})}},{key:"drawTile",value:function(){}},{key:"calculateMedianVisibleValue",value:function(){this.areAllVisibleTilesLoaded()&&this.allTilesLoaded();let n=this.visibleAndFetchedIds();n.length===0&&(n=Object.keys(this.fetchedTiles));const C=[].concat(...n.filter(r=>this.fetchedTiles[r].tileData.dense).map(r=>Array.from(this.fetchedTiles[r].tileData.dense))).filter(r=>r>0);return this.medianVisibleValue=E7(C),this.medianVisibleValue}},{key:"allVisibleValues",value:function(){return[].concat(...this.visibleAndFetchedIds().map(n=>Array.from(this.fetchedTiles[n].tileData.dense)))}},{key:"minVisibleValue",value:function(n=!1){return this.minVisibleValueInTiles(n)}},{key:"minVisibleValueInTiles",value:function(n=!1){let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));let r=Math.min(...C.map(o=>this.fetchedTiles[o].tileData.minNonZero));return r===Number.MAX_SAFE_INTEGER&&(r=null),n?r:this.valueScaleMin!==null?this.valueScaleMin:r}},{key:"maxVisibleValue",value:function(n=!1){return this.maxVisibleValueInTiles(n)}},{key:"maxVisibleValueInTiles",value:function(n=!1){let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));let r=Math.max(...C.map(o=>this.fetchedTiles[o].tileData.maxNonZero));return r===Number.MIN_SAFE_INTEGER&&(r=null),n?r:this.valueScaleMax!==null?this.valueScaleMax:r}},{key:"makeValueScale",value:function(n,C,r,o){let a=null,s=0,A=o;(A===null||typeof A>"u")&&(A=6);let l=Math.min(this.dimensions[1]-A,A),c=Math.max(this.dimensions[1]-A,A);if(this.dimensions[1]-Anh(u,d,m),[h,0]}else if(this.options.valueScaling==="setquantile"){const u=this.dimensions[1]-A,d=A,h=new Set(this.allVisibleValues()),m=nX().domain([...h]).range(nC(u,d,(d-u)/256));return m.ticks=f=>nh(u,d,f),[m,0]}else a=gg().domain([n,r]).range([c,l]);return[a,s]}}]),I}(mC);function hHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function roe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function kI(e){return kI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},kI(e)}const ooe=200,Kl=10,tG=40,Tn=10,Fl=Tn,aoe=4,bf=1,Dl=4,Aoe=5,BHt=256,dZ=Kl+tG+Tn+bf+Fl+Dl;let fw=function(e){yHt(I,e);var g=ZHt(I);function I(i,n){var C;hHt(this,I);const r={...i};r.onValueScaleChanged=()=>{i.onValueScaleChanged(),C.drawColorbar()},C=g.call(this,r,n);const{pubSub:o,animate:a,svgElement:s,onTrackOptionsChanged:A,onMouseMoveZoom:l,isShowGlobalMousePosition:c,isValueScaleLocked:u}=i;return C.pubSub=o,C.is2d=!0,C.animate=a,C.uid=lg.nice(),C.scaleBrush=LS(),C.onTrackOptionsChanged=A,C.isShowGlobalMousePosition=c,C.isValueScaleLocked=u,C.pColorbarArea=new ot.PIXI.Graphics,C.pMasked.addChild(C.pColorbarArea),C.pColorbar=new ot.PIXI.Graphics,C.pColorbarArea.addChild(C.pColorbar),C.axis=new Gk(cW(C)),C.pColorbarArea.addChild(C.axis.pAxis),C.colorScale=Nb,n&&n.colorRange&&(C.colorScale=Oc(n.colorRange)),C.gBase=hg(s).append("g"),C.gMain=C.gBase.append("g"),C.gColorscaleBrush=C.gMain.append("g"),C.brushing=!1,C.prevOptions="",C.prevIndUpperLeftTile="",C.onMouseMoveZoom=l,C.setDataLensSize(11),C.dataLens=new Float32Array(C.dataLensSize**2),C.mouseMoveHandlerBound=C.mouseMoveHandler.bind(cW(C)),C.onMouseMoveZoom&&C.pubSubs.push(C.pubSub.subscribe("app.mouseMove",C.mouseMoveHandlerBound)),C.options&&C.options.showMousePosition&&!C.hideMousePosition&&(C.hideMousePosition=Ah(cW(C),C.is2d,C.isShowGlobalMousePosition())),C.prevOptions=JSON.stringify(n),C}return mHt(I,[{key:"mouseMoveHandler",value:function(n){this.isWithin(n.x,n.y)&&(this.mouseX=n.x,this.mouseY=n.y,this.mouseMoveZoomHandler())}},{key:"mouseMoveZoomHandler",value:function(n=this.mouseX,C=this.mouseY){if(typeof n>"u"||typeof C>"u"||!this.areAllVisibleTilesLoaded()||!this.tilesetInfo)return;const r=n-this.position[0],o=C-this.position[1];let a,s;try{s=this.getVisibleRectangleData(r-this.dataLensPadding,o-this.dataLensPadding,this.dataLensSize,this.dataLensSize),a=s.get(this.dataLensPadding,this.dataLensPadding)}catch{return}const A=this.dataLensSize;let l;try{l=qQ(this.limitedValueScale,this.colorScale,this.valueScale.domain()[0])}catch{return}if(!l)return;const c=Math.round(this._xScale.invert(r)),u=Math.round(this._yScale.invert(o));let d=[c,u],h=[Math.round(this._xScale.invert(r-this.dataLensPadding)),Math.round(this._xScale.invert(r+this.dataLensPadding))],m=[Math.round(this._yScale.invert(o-this.dataLensPadding)),Math.round(this._yScale.invert(o+this.dataLensPadding))];this.chromInfo&&(d=d.map(f=>Ti(f,this.chromInfo).slice(0,2)),h=h.map(f=>Ti(f,this.chromInfo).slice(0,2)),m=m.map(f=>Ti(f,this.chromInfo).slice(0,2))),this.onMouseMoveZoom({trackId:this.id,data:a,absX:n,absY:C,relX:r,relY:o,dataX:c,dataY:u,orientation:"2d",dataLens:s,dim:A,toRgb:l,center:d,xRange:h,yRange:m,isGenomicCoords:!!this.chromInfo})}},{key:"scheduleRerender",value:function(){this.backgroundTaskScheduler.enqueueTask(this.handleRerender.bind(this),null,this.uuid)}},{key:"handleRerender",value:function(){this.rerender(this.options,!0)}},{key:"getAbsTileDim",value:function(n,C,r){const{tileX:o,tileY:a,tileWidth:s,tileHeight:A}=this.getTilePosAndDimensions(n,C),l={};return l.width=this._refXScale(o+s)-this._refXScale(o),l.height=this._refYScale(a+A)-this._refYScale(a),r?(l.x=this._refXScale(a),l.y=this._refYScale(o)):(l.x=this._refXScale(o),l.y=this._refYScale(a)),l}},{key:"updateValueScale",value:function(){let n=this.minValue(),C=this.maxValue();const r=1e-6;n!=null&&C!==void 0&&C!==null&&Math.abs(n-C)this.renderTile(o)),this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0),this.options&&this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=Ah(this,this.is2d,this.isShowGlobalMousePosition())))}},{key:"drawLabel",value:function(){this.options.labelPosition===this.options.colorbarPosition?this.labelXOffset=dZ:this.labelXOffset=0,ni(kI(I.prototype),"drawLabel",this).call(this)}},{key:"tileDataToCanvas",value:function(n){const C=document.createElement("canvas");C.width=this.binsPerTile(),C.height=this.binsPerTile();const r=C.getContext("2d");r.fillStyle="transparent",r.fillRect(0,0,C.width,C.height);const o=new ImageData(n,C.width,C.height);return r.putImageData(o,0,0),C}},{key:"exportData",value:function(){if(this.tilesetInfo){const n=this.getVisibleRectangleData(0,0,this.dimensions[0],this.dimensions[1]),C={bounds:[this._xScale.domain(),this._yScale.domain()],dimensions:n.shape,data:sve(n)};JG("data.json",JSON.stringify(C))}}},{key:"setSpriteProperties",value:function(n,C,r,o){const a=this.getAbsTileDim(C,r,o);n.width=a.width,n.height=a.height,n.x=a.x,n.y=a.y,o&&r[0]!==r[1]&&(n.rotation=-Math.PI/2,n.scale.x=Math.abs(n.scale.x)*-1)}},{key:"refXScale",value:function(n){ni(kI(I.prototype),"refXScale",this).call(this,n),this.draw()}},{key:"refYScale",value:function(n){ni(kI(I.prototype),"refYScale",this).call(this,n),this.draw()}},{key:"draw",value:function(){ni(kI(I.prototype),"draw",this).call(this)}},{key:"newBrushOptions",value:function(n){const C=JSON.parse(JSON.stringify(this.options)),r=this.valueScale.copy().range([this.colorbarHeight,0]),o=r.invert(n[0]),s=(r.invert(n[1])-r.domain()[0])/(r.domain()[1]-r.domain()[0]),A=(o-r.domain()[0])/(r.domain()[1]-r.domain()[0]);return C.scaleStartPercent=s.toFixed(Aoe),C.scaleEndPercent=A.toFixed(Aoe),C}},{key:"brushStart",value:function(){this.brushing=!0}},{key:"brushMoved",value:function(n){if(!n.selection)return;const C=this.newBrushOptions(n.selection),r=JSON.stringify(C);this.gColorscaleBrush.selectAll(".handle--custom").attr("y",o=>o.type==="n"?n.selection[0]:n.selection[1]-aoe/2),r!==this.prevOptions&&(this.prevOptions=r,this.rerender(C,!0),this.onTrackOptionsChanged(C),this.isValueScaleLocked()&&this.onValueScaleChanged())}},{key:"brushEnd",value:function(){this.brushing=!1}},{key:"setPosition",value:function(n){ni(kI(I.prototype),"setPosition",this).call(this,n),this.drawColorbar()}},{key:"setDimensions",value:function(n){ni(kI(I.prototype),"setDimensions",this).call(this,n),this.drawColorbar()}},{key:"removeColorbar",value:function(){this.pColorbarArea.visible=!1,this.scaleBrush.on(".brush")&&this.gColorscaleBrush.call(this.scaleBrush.move,null),this.gColorscaleBrush.on(".brush",null),this.gColorscaleBrush.selectAll("rect").remove()}},{key:"drawColorbar",value:function(){if(this.pColorbar.clear(),!this.options||!this.options.colorbarPosition||this.options.colorbarPosition==="hidden"){this.removeColorbar();return}if(this.pColorbarArea.visible=!0,!this.valueScale||Number.isNaN(+this.valueScale.domain()[0])||Number.isNaN(+this.valueScale.domain()[1]))return;const n=Math.min(this.dimensions[1]/2,ooe);if(this.colorbarHeight=n-2*Tn,this.colorbarHeight<0){this.removeColorbar();return}if(this.valueScale.domain()[1]===this.valueScale.domain()[0]){this.removeColorbar();return}const C=this.valueScale.copy().range([this.colorbarHeight,0]);this.options.colorbarPosition==="topLeft"||this.options.colorbarPosition==="bottomLeft"?this.scaleBrush.extent([[Dl,0],[Fl,this.colorbarHeight]]):this.scaleBrush.extent([[0,0],[Fl-Dl,this.colorbarHeight]]),this.options.colorbarPosition==="topLeft"&&([this.pColorbarArea.x,this.pColorbarArea.y]=this.position,this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=Dl+Fl+bf+Kl,this.pColorbar.x=Dl+Fl+bf,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+Dl},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.options.colorbarPosition==="topRight"&&(this.pColorbarArea.x=this.position[0]+this.dimensions[0]-dZ,this.pColorbarArea.y=this.position[1],this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=tG+Tn,this.pColorbar.x=tG+Tn,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+this.pColorbar.x+Kl+2},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.options.colorbarPosition==="bottomRight"&&(this.pColorbarArea.x=this.position[0]+this.dimensions[0]-dZ,this.pColorbarArea.y=this.position[1]+this.dimensions[1]-n,this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=tG+Tn,this.pColorbar.x=tG+Tn,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+this.pColorbar.x+Kl+bf},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.options.colorbarPosition==="bottomLeft"&&(this.pColorbarArea.x=this.position[0],this.pColorbarArea.y=this.position[1]+this.dimensions[1]-n,this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=Dl+Fl+bf+Kl,this.pColorbar.x=Dl+Fl+bf,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+2},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.pColorbarArea.clear(),this.pColorbarArea.beginFill(Kt(this.options.colorbarBackgroundColor||"white"),+this.options.colorbarBackgroundOpacity>=0?+this.options.colorbarBackgroundOpacity:.6),this.pColorbarArea.drawRect(0,0,dZ,n),this.options?(this.options.scaleStartPercent||(this.options.scaleStartPercent=0),this.options.scaleEndPercent||(this.options.scaleEndPercent=1)):this.options={scaleStartPercent:0,scaleEndPercent:1};const r=C.domain()[1]-C.domain()[0],o=C(this.options.scaleStartPercent*r+C.domain()[0]),a=C(this.options.scaleEndPercent*r+C.domain()[0]);this.brushing||(this.scaleBrush.on("start",this.brushStart.bind(this)).on("brush",this.brushMoved.bind(this)).on("end",this.brushEnd.bind(this)).handleSize(0),this.gColorscaleBrush.on(".brush",null),this.gColorscaleBrush.call(this.scaleBrush),this.northHandle=this.gColorscaleBrush.selectAll(".handle--custom").data([{type:"n"},{type:"s"}]).enter().append("rect").classed("handle--custom",!0).attr("cursor","ns-resize").attr("width",Fl).attr("height",aoe).style("fill","#666").style("stroke","white"),this.flipText&&this.northHandle.attr("cursor","ew-resize"),this.gColorscaleBrush.call(this.scaleBrush.move,[a,o]));const s=gg().domain([0,255]).range([0,this.colorbarHeight]);for(let A=0;A{const Z=y.mirrored?[y.tileData.tilePos[1],y.tileData.tilePos[0]]:y.tileData.tilePos,{tileX:B,tileY:G,tileWidth:v,tileHeight:w}=this.getTilePosAndDimensions(y.tileData.zoomLevel,Z,this.binsPerTile()),R=Math.floor(B/A),S=Math.floor((B+v)/A),X=Math.floor(G/A),W=Math.floor((G+w)/A);let V=Math.max(h,R)-R,H=Math.max(m,X)-X;const Y=Math.min(h+f,S)-R,K=Math.min(m+b,W)-X,x=Math.max(R-h,0),J=Math.max(X-m,0),P=Y-V,ge=K-H;if(!(P<0||ge<0)){if(y.mirrored&&V>H){const q=V;V=H,H=q}ove(p.hi(J+ge,x+P).lo(J,x),y.dataArray.hi(H+ge,V+P).lo(H,V))}}),p}},{key:"initTile",value:function(n){ni(kI(I.prototype),"initTile",this).call(this,n),n.tileData.dense.length===this.binsPerTile()**2&&(n.dataArray=Np(Array.from(n.tileData.dense),[this.binsPerTile(),this.binsPerTile()]),this.continuousScaling&&n.tileData.tilePos[0]===n.tileData.tilePos[1]&&n.mirrored&&(n.tileData.denseDataExtrema.mirrorPrecomputedExtrema(),ni(kI(I.prototype),"initTile",this).call(this,n))),!(this.scale.minValue===null||this.scale.maxValue===null)&&this.renderTile(n)}},{key:"updateTile",value:function(n){n.scale&&this.scale&&this.scale.minValue===n.scale.minValue&&this.scale.maxValue===n.scale.maxValue||(this.renderTile(n),this.drawColorbar())}},{key:"destroyTile",value:function(n){n.sprite.destroy(!0),n.canvas=null,n.sprite=null,n.texture=null}},{key:"pixDataFunction",value:function(n,C){if(C){const{graphics:r}=n,o=this.tileDataToCanvas(C.pixData);n.sprite&&n.sprite.destroy(!0);const a=ot.PIXI.VERSION[0]==="4"?ot.PIXI.Texture.fromCanvas(o,ot.PIXI.SCALE_MODES.NEAREST):ot.PIXI.Texture.from(o,{scaleMode:ot.PIXI.SCALE_MODES.NEAREST}),s=new ot.PIXI.Sprite(a);n.sprite=s,n.texture=a,n.canvas=o,this.setSpriteProperties(n.sprite,n.tileData.zoomLevel,n.tileData.tilePos,n.mirrored),r.removeChildren(),r.addChild(n.sprite)}this.renderingTiles.delete(n.tileId)}},{key:"renderTile",value:function(n){const[C]=this.updateValueScale(),r=0;if(this.renderingTiles.add(n.tileId),this.tilesetInfo.tile_size&&n.tileData.dense.lengththis.pixDataFunction(n,o),this.mirrorTiles()&&!n.mirrored&&n.tileData.tilePos[0]===n.tileData.tilePos[1],this.options.extent==="upper-right"&&n.tileData.tilePos[0]===n.tileData.tilePos[1],this.options.zeroValueColor?PGe(this.options.zeroValueColor):void 0,{selectedRows:this.options.selectRows,selectedRowsAggregationMode:this.options.selectRowsAggregationMode,selectedRowsAggregationWithRelativeHeight:this.options.selectRowsAggregationWithRelativeHeight,selectedRowsAggregationMethod:this.options.selectRowsAggregationMethod})}},{key:"remove",value:function(){this.gMain.remove(),this.gMain=null,ni(kI(I.prototype),"remove",this).call(this)}},{key:"refScalesChanged",value:function(n,C){ni(kI(I.prototype),"refScalesChanged",this).call(this,n,C),XN(this.fetchedTiles).filter(r=>r.sprite).forEach(r=>this.setSpriteProperties(r.sprite,r.tileData.zoomLevel,r.tileData.tilePos,r.mirrored))}},{key:"superSVG",value:function(){return ni(kI(I.prototype),"exportSVG",this).call(this)}},{key:"exportSVG",value:function(){let n=null,C=null;ni(kI(I.prototype),"exportSVG",this)?[C,n]=ni(kI(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C);const r=document.createElement("g");n.appendChild(r),r.setAttribute("transform",`translate(${this.pMain.position.x},${this.pMain.position.y}) scale(${this.pMain.scale.x},${this.pMain.scale.y})`);for(const a of this.visibleAndFetchedTiles()){const s=a.sprite.rotation*180/Math.PI,A=document.createElement("g");A.setAttribute("transform",`translate(${a.sprite.x},${a.sprite.y}) rotate(${s}) scale(${a.sprite.scale.x},${a.sprite.scale.y})`);const l=document.createElement("image");l.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a.canvas.toDataURL()),l.setAttribute("width",a.canvas.width),l.setAttribute("height",a.canvas.height),l.setAttribute("style","image-rendering: pixelated"),A.appendChild(l),r.appendChild(A)}const o=this.exportColorBarSVG();return n.appendChild(o),[C,C]}},{key:"getVisiblePartOfUppLeftTile",value:function(){const n=this.visibleAndFetchedTiles().map(d=>{const h=d.mirrored?[d.tileData.tilePos[1],d.tileData.tilePos[0]]:d.tileData.tilePos;return[h[0],h[1],d.tileId]});if(n.length===0)return null;let C=n[0];for(let d=0;dd.tileId===C[2])[0],s=this.getIndicesOfVisibleDataInTile(a),A=s[0],l=s[1],c=A-A%o,u=l-l%o;return[a.tileId,c,u]}},{key:"getIndicesOfVisibleDataInTile",value:function(n){const C=this._xScale.range(),r=this._yScale.range(),o=n.mirrored?[n.tileData.tilePos[1],n.tileData.tilePos[0]]:n.tileData.tilePos,{tileX:a,tileY:s,tileWidth:A,tileHeight:l}=this.getTilePosAndDimensions(n.tileData.zoomLevel,o,this.binsPerTile()),c=gg().domain([0,this.binsPerTile()]).range([a,a+A]),u=Math.max(0,Math.round(c.invert(this._xScale.invert(C[0])))-1),d=Math.min(this.binsPerTile(),Math.round(c.invert(this._xScale.invert(C[1])))),h=gg().domain([0,this.binsPerTile()]).range([s,s+l]),m=Math.max(0,Math.round(h.invert(this._yScale.invert(r[0])))-1),f=Math.min(this.binsPerTile(),Math.round(h.invert(this._yScale.invert(r[1]))));return n.mirrored&&o[0]!==o[1]?[m,u,f,d]:[u,m,d,f]}},{key:"minVisibleValue",value:function(n=!1){const C=this.visibleAndFetchedTiles().map(o=>{if(o.tileData.denseDataExtrema===void 0)return null;const a=this.getIndicesOfVisibleDataInTile(o);return o.tileData.denseDataExtrema.getMinNonZeroInSubset(a)});if(C.length===0&&this.valueScaleMax===null)return null;const r=Math.min.apply(null,C);return r===Number.MAX_SAFE_INTEGER?ni(kI(I.prototype),"minVisibleValue",this).call(this,n):n?r:this.valueScaleMin!==null?this.valueScaleMin:r}},{key:"maxVisibleValue",value:function(n=!1){const C=this.visibleAndFetchedTiles().map(o=>{if(o.tileData.denseDataExtrema===void 0)return null;const a=this.getIndicesOfVisibleDataInTile(o);return o.tileData.denseDataExtrema.getMaxNonZeroInSubset(a)});if(C.length===0&&this.valueScaleMax===null)return null;const r=Math.max.apply(null,C);return r===Number.MIN_SAFE_INTEGER?ni(kI(I.prototype),"maxVisibleValue",this).call(this,n):n?r:this.valueScaleMax!==null?this.valueScaleMax:r}},{key:"zoomed",value:function(n,C,r,o,a){if(this.brushing)return;ni(kI(I.prototype),"zoomed",this).call(this,n,C),this.pMain.position.x=o,this.pMain.position.y=a,this.pMain.scale.x=r,this.pMain.scale.y=r;const s=this.isValueScaleLocked();if(this.continuousScaling&&this.minValue()!==void 0&&this.maxValue()!==void 0){const A=JSON.stringify(this.getVisiblePartOfUppLeftTile());if(this.valueScaleMin===null&&this.valueScaleMax===null&&!s&&A!==this.prevIndUpperLeftTile){const l=this.minVisibleValue(),c=this.maxVisibleValue(),u=1e-6;l!==null&&c!==null&&(Math.abs(this.minValue()-l)>u||Math.abs(this.maxValue()-c)>u)&&(this.minValue(l),this.maxValue(c),this.scheduleRerender()),this.prevIndUpperLeftTile=A}s&&this.onValueScaleChanged()}this.mouseMoveZoomHandler()}},{key:"addTileId",value:function(n,C,r,o,a,s=!1){const A=[C,r,o];A.mirrored=s,A.dataTransform=a,n.push(A)}},{key:"tilesToId",value:function(n,C,r){const o=n,a=C,s=this.options&&this.options.dataTransform||"default",A=[];for(let l=0;l=a[c]?this.options.extent!=="lower-left"&&this.addTileId(A,r,a[c],o[l],s,!0):this.options.extent!=="upper-right"&&this.addTileId(A,r,o[l],a[c],s),o[l]===a[c]&&this.options.extent==="lower-left"&&this.addTileId(A,r,o[l],a[c],s)):this.addTileId(A,r,o[l],a[c],s);return A}},{key:"calculateVisibleTiles",value:function(){if(this.tilesetInfo){if(this.zoomLevel=this.calculateZoomLevel(),this.tilesetInfo.resolutions){const n=this.tilesetInfo.resolutions.map(C=>+C).sort((C,r)=>r-C);this.xTiles=vt.calculateTilesFromResolution(n[this.zoomLevel],this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),this.yTiles=vt.calculateTilesFromResolution(n[this.zoomLevel],this._yScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0])}else this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.options.reverseYAxis?-this.tilesetInfo.max_pos[1]:this.tilesetInfo.min_pos[1],this.options.reverseYAxis?-this.tilesetInfo.min_pos[1]:this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width1||this.tilesetInfo.max_width);this.setVisibleTiles(this.tilesToId(this.xTiles,this.yTiles,this.zoomLevel))}}},{key:"mirrorTiles",value:function(){return!(this.tilesetInfo.mirror_tiles&&(this.tilesetInfo.mirror_tiles===!1||this.tilesetInfo.mirror_tiles==="false"))}},{key:"getMouseOverHtml",value:function(n,C){if(!this.options||!this.options.showTooltip||!this.tilesetInfo)return"";const r=vt.calculateResolution(this.tilesetInfo,this.zoomLevel),o=Math.max(this.tilesetInfo.max_pos[1]-this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[0]-this.tilesetInfo.min_pos[0]),a=Math.ceil(Math.log(o/r)/Math.log(10));this.setDataLensSize(1);const s=this._xScale.invert(n),A=this._yScale.invert(C);let l="Position: ";if(this.chromInfo){const u=Ti(s,this.chromInfo),d=Ti(A,this.chromInfo),h=m=>ur(`.${a}s`)(m);l+=`${u[0]}:${h(u[1])} & ${d[0]}:${h(d[1])}`,l+="
"}let c=null;try{c=this.getVisibleRectangleData(n,C,1,1).get(0,0)}catch{return""}return this.options&&this.options.heatmapValueScaling==="log"?c>0?`${l}Value: 1e${ur(".3f")(Math.log(c)/Math.log(10))}`:c===0?`${l}Value: 0`:`${l}Value: N/A`:`${l}Value: ${ur(".3f")(c)}`}},{key:"getTilePosAndDimensions",value:function(n,C,r){const o=r||this.binsPerTile();if(this.tilesetInfo.resolutions){const f=this.tilesetInfo.resolutions.map(B=>+B).sort((B,G)=>G-B)[n],b=f*o,p=b,y=f*o*C[0],Z=f*o*C[1];return{tileX:y,tileY:Z,tileWidth:b,tileHeight:p}}const a=C[0],s=C[1],A=this.tilesetInfo.min_pos[0],l=this.options.reverseYAxis?-this.tilesetInfo.max_pos[1]:this.tilesetInfo.min_pos[1],c=this.tilesetInfo.max_width/2**n,u=this.tilesetInfo.max_width/2**n,d=A+a*c,h=l+s*u;return{tileX:d,tileY:h,tileWidth:c,tileHeight:u}}},{key:"calculateZoomLevel",value:function(){const n=this.tilesetInfo.min_pos[0],C=this.tilesetInfo.max_pos[0],r=this.tilesetInfo.min_pos[1],o=this.tilesetInfo.max_pos[1];let a=null;if(this.tilesetInfo.resolutions){const s=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,n,C),A=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._yScale,r,o);a=Math.min(s,A)}else{const s=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.binsPerTile()),A=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.binsPerTile());a=Math.max(s,A),a=Math.min(a,this.maxZoom)}return this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?a=Math.min(this.options.maxZoom,a):console.error("Invalid maxZoom on track:",this)),a}},{key:"tileToLocalId",value:function(n){return n.dataTransform&&n.dataTransform!=="default"?`${n.join(".")}.${n.mirrored}.${n.dataTransform}`:`${n.join(".")}.${n.mirrored}`}},{key:"tileToRemoteId",value:function(n){return n.dataTransform&&n.dataTransform!=="default"?`${n.join(".")}.${n.dataTransform}`:`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const C=n.split(".");return C.slice(0,C.length-1).join(".")}}]),I}(hm);function SHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function soe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function e2(e){return e2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},e2(e)}function UVe(e){if(!e.graphics)return;const g=e.graphics,{tileX:I,tileY:i,tileWidth:n}=this.getTilePosAndDimensions(e.tileData.zoomLevel,e.tileData.tilePos);e.drawnAtScale=this._xScale.copy();const C=1/((this._xScale(1)-this._xScale(0))/(this._refXScale(1)-this._refXScale(0))),r=1/((this._yScale(1)-this._yScale(0))/(this._refYScale(1)-this._refYScale(0)));e.text.scale.x=C,e.text.scale.y=r;const o=this._xScale(n)-this._xScale(0);if(e.textGraphics.scale.x=o/256,e.textGraphics.scale.y=o/256,g.clear(),g.lineStyle(4*C,255,1),g.beginFill(16740363,.4),g.alpha=.5,e.mirrored){const a=this._refXScale(i+n)-this._refXScale(i),s=this._refYScale(I+n)-this._refYScale(I);e.textGraphics.position.x=this._refXScale(i)+a/2,e.textGraphics.position.y=this._refYScale(I)+s/2,g.drawRect(this._refXScale(i),this._refYScale(I),a,s)}else{const a=this._refXScale(I+n)-this._refXScale(I),s=this._refYScale(i+n)-this._refYScale(i);e.textGraphics.position.x=this._refXScale(I)+a/2,e.textGraphics.position.y=this._refYScale(i)+s/2,g.drawRect(this._refXScale(I),this._refYScale(i),a,s)}}function QVe(e){const g=e.graphics;e.textGraphics=new ot.PIXI.Graphics,e.mirrored?e.text=new ot.PIXI.Text(`${e.tileData.zoomLevel}/${[e.tileData.tilePos[1],e.tileData.tilePos[0]].join("/")}`,{fontFamily:"Arial",fontSize:24,fill:16715792,align:"center"}):e.text=new ot.PIXI.Text(`${e.tileData.zoomLevel}/${e.tileData.tilePos.join("/")}`,{fontFamily:"Arial",fontSize:24,fill:16715792,align:"center"}),e.textGraphics.addChild(e.text),e.text.anchor.x=.5,e.text.anchor.y=.5,g.addChild(e.textGraphics)}let jVe=function(e){WHt(I,e);var g=XHt(I);function I(){return SHt(this,I),g.apply(this,arguments)}return wHt(I,[{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"initTile",value:function(n){QVe.bind(this)(n),this.drawTile(n)}},{key:"destroyTile",value:function(n,C){}},{key:"drawTile",value:function(n){UVe.bind(this)(n)}},{key:"fetchNewTiles",value:function(n){n.forEach(C=>{const o=C.remoteId.split("."),a={zoomLevel:o[0],tilePos:o.slice(1,o.length).map(s=>+s)};this.fetchedTiles[C.tileId]=C,this.fetchedTiles[C.tileId].tileData=a,this.fetching.has(C.remoteId)&&this.fetching.delete(C.remoteId)}),this.synchronizeTilesAndGraphics()}}]),I}(fw);function kHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function loe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Zh(e){return Zh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Zh(e)}const PHt=1024;let hj=function(e){xHt(I,e);var g=EHt(I);function I(i,n){var C;kHt(this,I),C=g.call(this,i,n);const{onMouseMoveZoom:r,isValueScaleLocked:o,getLockGroupExtrema:a}=i;return C.onMouseMoveZoom=r,C.isValueScaleLocked=o,C.getLockGroupExtrema=a,C.onMouseMoveZoom&&C.pubSubs.push(C.pubSub.subscribe("app.mouseMove",C.mouseMoveHandler.bind($Ve(C)))),C}return YHt(I,[{key:"initTile",value:function(n){hv(Zh(I.prototype),"initTile",this).call(this,n)}},{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"relevantScale",value:function(){return null}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C)})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.tileId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;if(this.zoomLevel=this.calculateZoomLevel(),this.tilesetInfo.resolutions){const r=this.tilesetInfo.resolutions.map(s=>+s).sort((s,A)=>A-s),a=vt.calculateTilesFromResolution(r[this.zoomLevel],this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]).map(s=>[this.zoomLevel,s]);this.setVisibleTiles(a);return}const C=vt.calculateTiles(this.zoomLevel,this.relevantScale(),this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width).map(r=>[this.zoomLevel,r]);this.setVisibleTiles(C)}},{key:"getTilePosAndDimensions",value:function(n,C,r){const o=C[0],a=C[0];if(this.tilesetInfo.resolutions){const f=r||PHt,p=this.tilesetInfo.resolutions.map(v=>+v).sort((v,w)=>w-v)[n],y=p*f,Z=y,B=p*f*C[0],G=p*f*C[1];return{tileX:B,tileY:G,tileWidth:y,tileHeight:Z}}const s=this.tilesetInfo.max_width,A=this.tilesetInfo.max_width,l=this.tilesetInfo.min_pos[0],c=this.tilesetInfo.min_pos[1],u=s/2**n,d=A/2**n,h=l+o*u,m=c+a*d;return{tileX:h,tileY:m,tileWidth:u,tileHeight:d}}},{key:"updateTile",value:function(n){}},{key:"scheduleRerender",value:function(){this.backgroundTaskScheduler.enqueueTask(this.handleRerender.bind(this),null,this.uuid)}},{key:"handleRerender",value:function(){this.rerender(this.options,!1)}},{key:"getIndicesOfVisibleDataInTile",value:function(n){const C=this._xScale.range();if(!this.tilesetInfo)return[null,null];const{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos,this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size),a=gg().domain([0,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension]).range([r,r+o]),s=Math.max(0,Math.round(a.invert(this._xScale.invert(C[0])))),A=Math.min(n.tileData.dense.length,Math.round(a.invert(this._xScale.invert(C[1]))));return[s,A]}},{key:"minVisibleValue",value:function(n=!1){let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));const r=C.map(a=>this.fetchedTiles[a]).map(a=>{const s=this.getIndicesOfVisibleDataInTile(a);return a.tileData.denseDataExtrema.getMinNonZeroInSubset(s)}),o=Math.min(...r);return n?o:this.valueScaleMin!==null?this.valueScaleMin:o}},{key:"maxVisibleValue",value:function(n=!1){let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));const r=C.map(a=>this.fetchedTiles[a]).map(a=>{const s=this.getIndicesOfVisibleDataInTile(a);return a.tileData.denseDataExtrema.getMaxNonZeroInSubset(s)}),o=Math.max(...r);return n?o:this.valueScaleMax!==null?this.valueScaleMax:o}},{key:"getAggregatedVisibleValue",value:function(n="max"){const C=n==="min"?Math.min:Math.max,r=n==="min"?1/0:-1/0;let o=this.visibleAndFetchedIds();o.length===0&&(o=Object.keys(this.fetchedTiles));const a=this._xScale.range();return o.map(s=>this.fetchedTiles[s]).map(s=>{if(!s.tileData.tilePos)return n==="min"?this.minVisibleValue():this.maxVisibleValue();const{tileX:A,tileWidth:l}=this.getTilePosAndDimensions(s.tileData.zoomLevel,s.tileData.tilePos,this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size),c=gg().domain([0,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension]).range([A,A+l]),u=Math.max(0,Math.round(c.invert(this._xScale.invert(a[0])))),d=Math.min(s.tileData.dense.length,Math.round(c.invert(this._xScale.invert(a[1]))));return s.tileData.dense.slice(u,d)}).reduce((s,A)=>C(s,...A),r)}},{key:"getDataAtPos",value:function(n){let C;if(!this.tilesetInfo)return C;const r=this.calculateZoomLevel(),o=vt.calculateTileWidth(this.tilesetInfo,r,this.tilesetInfo.tile_size),a=this._xScale.invert(n)/o,s=this.tileToLocalId([r,Math.floor(a)]),A=this.fetchedTiles[s];if(!A)return C;const l=this.tilesetInfo.tile_size*(a-Math.floor(a));return A.tileData.dense?A.tileData.dense[Math.floor(l)]:null}},{key:"mouseMoveHandler",value:function({x:n,y:C}={}){this.isWithin(n,C)&&(this.mouseX=n,this.mouseY=C,this.mouseMoveZoomHandler())}},{key:"mouseMoveZoomHandler",value:function(){}},{key:"zoomed",value:function(...n){hv(Zh(I.prototype),"zoomed",this).call(this,...n),this.mouseMoveZoomHandler()}}]),I}(hm);function JHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function coe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ps(e){return ps=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},ps(e)}let ny=function(e){QHt(I,e);var g=jHt(I);function I(i,n){var C;JHt(this,I),C=g.call(this,i,n);const{animate:r,isShowGlobalMousePosition:o}=i;return C.constIndicator=new ot.PIXI.Graphics,C.pMain.addChild(C.constIndicator),C.axis=new Gk(SP(C)),C.pBase.addChild(C.axis.pAxis),C.animate=r,C.options=n,C.isShowGlobalMousePosition=o,C.pubSubs=[],C.options.showMousePosition&&!C.hideMousePosition&&(C.hideMousePosition=Ah(SP(C),C.is2d,C.isShowGlobalMousePosition())),C}return OHt(I,[{key:"rerender",value:function(n,C){const r=JSON.stringify(n);!C&&r===this.prevOptions||(dd(ps(I.prototype),"rerender",this).call(this,n,C),this.prevOptions=r,this.options=n,this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=Ah(this,this.is2d,this.isShowGlobalMousePosition())),!this.options.showMousePosition&&this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0))}},{key:"calculateZoomLevel",value:function(){if(this.tilesetInfo.resolutions)return vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]-2);const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size);let C=Math.min(n,this.maxZoom);return C=Math.max(C,0),C}},{key:"relevantScale",value:function(){return this._xScale}},{key:"draw",value:function(){dd(ps(I.prototype),"draw",this).call(this),this.drawConstIndicator()}},{key:"drawAxis",value:function(n){if(!this.options.axisPositionVertical&&!this.options.axisPositionHorizontal){this.axis.clearAxis();return}if(this.options.axisPositionVertical&&this.options.axisPositionVertical==="hidden"){this.axis.clearAxis();return}if(this.options.axisPositionHorizontal&&this.options.axisPositionHorizontal==="hidden"){this.axis.clearAxis();return}const C=this.options.axisMargin||0;this.options.axisPositionHorizontal==="left"||this.options.axisPositionVertical==="top"?(this.axis.pAxis.position.x=this.position[0]+C,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisRight(n,this.dimensions[1])):this.options.axisPositionHorizontal==="outsideLeft"||this.options.axisPositionVertical==="outsideTop"?(this.axis.pAxis.position.x=this.position[0]+C,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisLeft(n,this.dimensions[1])):this.options.axisPositionHorizontal==="right"||this.options.axisPositionVertical==="bottom"?(this.axis.pAxis.position.x=this.position[0]+this.dimensions[0]-C,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisLeft(n,this.dimensions[1])):(this.options.axisPositionHorizontal==="outsideRight"||this.options.axisPositionVertical==="outsideBottom")&&(this.axis.pAxis.position.x=this.position[0]+this.dimensions[0]-C,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisRight(n,this.dimensions[1]))}},{key:"mouseMoveZoomHandler",value:function(n=this.mouseX,C=this.mouseY){if(typeof n>"u"||!this.areAllVisibleTilesLoaded()||!this.tilesetInfo)return;let r=0,o=0,a="1d-horizontal";this.isLeftModified?(r=C-this.position[1],o=n-this.position[0],a="1d-vertical"):(r=n-this.position[0],o=C-this.position[1]);const s=n-this.position[0],A=C-this.position[1],l=this._xScale.invert(r),c=this._yScale.invert(o),u=this.getDataAtPos(r);u&&this.onMouseMoveZoom({trackId:this.id,data:u,absX:n,absY:C,relX:s,relY:A,dataX:l,dataY:c,orientation:a})}},{key:"drawConstIndicator",value:function(){if(this.constIndicator){for(this.constIndicator.clear();this.constIndicator.children[0];)this.constIndicator.removeChild(this.constIndicator.children[0]);!this.options.constIndicators||!this.valueScale||this.options.constIndicators.forEach(({color:n="black",opacity:C=1,label:r=null,labelColor:o="black",labelOpacity:a=1,labelPosition:s="leftTop",labelSize:A=12,value:l=0}={})=>{const c=Kt(n),u=Kt(o);this.constIndicator.beginFill(c,C);const d=this.valueScale(l);let h=0,m=0;if(r){const f=new ot.PIXI.Text(r,{fontFamily:"Arial",fontSize:A,fill:u});switch(f.alpha=a,s){case"right":f.anchor.x=1,f.anchor.y=.5,f.x=this.position[0]+this.dimensions[0]-6,f.y=d,m=f.width+8;break;case"rightBottom":f.anchor.x=1,f.anchor.y=0,f.x=this.position[0]+this.dimensions[0]-6,f.y=d;break;case"rightTop":f.anchor.x=1,f.anchor.y=1,f.x=this.position[0]+this.dimensions[0]-6,f.y=d;break;case"left":f.anchor.x=0,f.anchor.y=.5,f.x=this.position[0]+2,f.y=d,h=f.width+4;break;case"leftBottom":f.anchor.x=0,f.anchor.y=0,f.x=this.position[0]+2,f.y=d;break;case"leftTop":default:f.anchor.x=0,f.anchor.y=1,f.x=this.position[0]+2,f.y=d;break}this.constIndicator.addChild(f)}this.constIndicator.drawRect(this.position[0]+h,d,this.dimensions[0]-m,1)})}}},{key:"exportSVG",value:function(){let n=null,C=null;dd(ps(I.prototype),"exportSVG",this)?[C,n]=dd(ps(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C),C.setAttribute("class","horizontal-tiled-1d-track");const r=document.createElement("g");return n.appendChild(r),this.options.constIndicators&&this.options.constIndicators.forEach(({color:o="black",opacity:a=1,label:s=null,labelColor:A="black",labelOpacity:l=1,labelPosition:c="leftTop",labelSize:u=12,value:d=0}={})=>{const h=this.valueScale(d);if(s){const f=document.createElement("text");switch(f.textContent=s,f.setAttribute("x",this.position[0]),f.setAttribute("y",h),f.setAttribute("style",`font-family: 'Arial'; font-size: ${u}px; fill: ${A}; fill-opacity: ${l};`),c){case"rightBottom":f.setAttribute("x",this.position[0]+this.dimensions[0]-6),f.setAttribute("y",h+u+2),f.setAttribute("text-anchor","end");break;case"right":case"rightTop":f.setAttribute("x",this.position[0]+this.dimensions[0]-6),f.setAttribute("y",h-2),f.setAttribute("text-anchor","end");break;case"leftBottom":f.setAttribute("x",this.position[0]+2),f.setAttribute("y",h+u+2);break;case"left":case"leftTop":default:f.setAttribute("x",this.position[0]+2),f.setAttribute("y",h-2);break}r.appendChild(f)}const m=document.createElement("line");m.setAttribute("x1",this.position[0]),m.setAttribute("y1",h),m.setAttribute("x2",this.dimensions[0]),m.setAttribute("y2",h),m.setAttribute("stroke",o),m.setAttribute("stroke-opacity",a),r.appendChild(m)}),[C,n]}}]),I}(hj);function eTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uoe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function t0(e){return t0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},t0(e)}let qVe=function(e){nTt(I,e);var g=CTt(I);function I(i,n){var C;return eTt(this,I),C=g.call(this,i,n),C.pMain=C.pMobile,C}return tTt(I,[{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"initTile",value:function(n){const C=n.graphics;n.textGraphics=new ot.PIXI.Graphics,n.text=new ot.PIXI.Text(`${n.tileData.zoomLevel}/${n.tileData.tilePos.join("/")}`,{fontFamily:"Arial",fontSize:32,fill:16715792,align:"center"}),n.textGraphics.addChild(n.text),n.text.anchor.x=.5,n.text.anchor.y=.5,C.addChild(n.textGraphics),this.drawTile(n)}},{key:"destroyTile",value:function(n){}},{key:"drawTile",value:function(n){if(uW(t0(I.prototype),"drawTile",this).call(this,n),!n.graphics)return;const C=n.graphics,{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=1/((this._xScale(1)-this._xScale(0))/(this._refXScale(1)-this._refXScale(0)));n.text.scale.x=a,C.clear();const s=this.dimensions[1],A=this._refXScale(r+o)-this._refXScale(r);n.textGraphics.position.x=this._refXScale(r)+A/2,n.textGraphics.position.y=s/2;const l=this._refXScale(r);C.lineStyle(4*a,255,1),C.beginFill(16740363,.4),C.alpha=.5,C.moveTo(l,0),C.lineTo(l,s),C.moveTo(l+A,0),C.lineTo(l+A,s),C.lineStyle(0,255,1),C.drawRect(l,0,A,s)}}]),I}(ny);function ATt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function doe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function g0(e){return g0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},g0(e)}let e1e=function(e){dTt(I,e);var g=hTt(I);function I(){return ATt(this,I),g.apply(this,arguments)}return sTt(I,[{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._yScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);return Math.min(n,this.maxZoom)}},{key:"relevantScale",value:function(){return this._yScale}},{key:"zoomed",value:function(n,C){dW(g0(I.prototype),"zoomed",this).call(this,n,C);const r=1,o=(C(1)-C(0))/(this._refYScale(1)-this._refYScale(0)),a=this.position[0],s=C(0)+this.position[1]-this._refYScale(1)*o;this.pMain.position.x=a,this.pMain.position.y=s,this.pMain.scale.x=r,this.pMain.scale.y=o}}]),I}(hj);function bTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hoe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function I0(e){return I0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},I0(e)}let t1e=function(e){BTt(I,e);var g=STt(I);function I(){return bTt(this,I),g.apply(this,arguments)}return yTt(I,[{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"initTile",value:function(n){const C=n.graphics;n.textGraphics=new ot.PIXI.Graphics,n.text=new ot.PIXI.Text(`${n.tileData.zoomLevel}/${n.tileData.tilePos.join("/")}`,{fontFamily:"Arial",fontSize:32,fill:16715792,align:"center"}),n.textGraphics.addChild(n.text),n.text.anchor.x=.5,n.text.anchor.y=.5,n.text.rotation=-Math.PI/2,C.addChild(n.textGraphics),this.drawTile(n,C)}},{key:"destroyTile",value:function(n,C){}},{key:"drawTile",value:function(n){if(hW(I0(I.prototype),"drawTile",this).call(this,n),!n.graphics)return;const C=n.graphics,{tileY:r,tileHeight:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=1/((this._yScale(1)-this._yScale(0))/(this._refYScale(1)-this._refYScale(0)));n.text.scale.x=a,C.clear(),C.lineStyle(4*a,255,1),C.beginFill(16740363,.4),C.alpha=.5;const s=this.dimensions[0],A=this._refYScale(r+o)-this._refYScale(r);n.textGraphics.position.x=s/2,n.textGraphics.position.y=this._refYScale(r)+A/2,C.drawRect(0,this._refYScale(r),s,A)}},{key:"fetchNewTiles",value:function(n){n.forEach(C=>{const o=C.remoteId.split("."),a={zoomLevel:o[1],tilePos:o.slice(2,o.length).map(s=>+s)};this.fetchedTiles[C.tileId]=C,this.fetchedTiles[C.tileId].tileData=a,this.fetching.has(C.remoteId)&&this.fetching.delete(C.remoteId)}),this.synchronizeTilesAndGraphics()}}]),I}(e1e);var JD=Array.prototype.slice;function WTt(e){return e}var mW=1,fW=2,WP=3,gG=4,moe=1e-6;function XTt(e){return"translate("+e+",0)"}function HTt(e){return"translate(0,"+e+")"}function TTt(e){return g=>+e(g)}function NTt(e,g){return g=Math.max(0,e.bandwidth()-g*2)/2,e.round()&&(g=Math.round(g)),I=>+e(I)+g}function kTt(){return!this.__axis}function Vk(e,g){var I=[],i=null,n=null,C=6,r=6,o=3,a=typeof window<"u"&&window.devicePixelRatio>1?0:.5,s=e===mW||e===gG?-1:1,A=e===gG||e===fW?"x":"y",l=e===mW||e===WP?XTt:HTt;function c(u){var d=i??(g.ticks?g.ticks.apply(g,I):g.domain()),h=n??(g.tickFormat?g.tickFormat.apply(g,I):WTt),m=Math.max(C,0)+o,f=g.range(),b=+f[0]+a,p=+f[f.length-1]+a,y=(g.bandwidth?NTt:TTt)(g.copy(),a),Z=u.selection?u.selection():u,B=Z.selectAll(".domain").data([null]),G=Z.selectAll(".tick").data(d,g).order(),v=G.exit(),w=G.enter().append("g").attr("class","tick"),R=G.select("line"),S=G.select("text");B=B.merge(B.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),G=G.merge(w),R=R.merge(w.append("line").attr("stroke","currentColor").attr(A+"2",s*C)),S=S.merge(w.append("text").attr("fill","currentColor").attr(A,s*m).attr("dy",e===mW?"0em":e===WP?"0.71em":"0.32em")),u!==Z&&(B=B.transition(u),G=G.transition(u),R=R.transition(u),S=S.transition(u),v=v.transition(u).attr("opacity",moe).attr("transform",function(X){return isFinite(X=y(X))?l(X+a):this.getAttribute("transform")}),w.attr("opacity",moe).attr("transform",function(X){var W=this.parentNode.__axis;return l((W&&isFinite(W=W(X))?W:y(X))+a)})),v.remove(),B.attr("d",e===gG||e===fW?r?"M"+s*r+","+b+"H"+a+"V"+p+"H"+s*r:"M"+a+","+b+"V"+p:r?"M"+b+","+s*r+"V"+a+"H"+p+"V"+s*r:"M"+b+","+a+"H"+p),G.attr("opacity",1).attr("transform",function(X){return l(y(X)+a)}),R.attr(A+"2",s*C),S.attr(A,s*m).text(h),Z.filter(kTt).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===fW?"start":e===gG?"end":"middle"),Z.each(function(){this.__axis=y})}return c.scale=function(u){return arguments.length?(g=u,c):g},c.ticks=function(){return I=JD.call(arguments),c},c.tickArguments=function(u){return arguments.length?(I=u==null?[]:JD.call(u),c):I.slice()},c.tickValues=function(u){return arguments.length?(i=u==null?null:JD.call(u),c):i&&i.slice()},c.tickFormat=function(u){return arguments.length?(n=u,c):n},c.tickSize=function(u){return arguments.length?(C=r=+u,c):C},c.tickSizeInner=function(u){return arguments.length?(C=+u,c):C},c.tickSizeOuter=function(u){return arguments.length?(r=+u,c):r},c.tickPadding=function(u){return arguments.length?(o=+u,c):o},c.offset=function(u){return arguments.length?(a=+u,c):a},c}function g1e(e){return Vk(mW,e)}function YTt(e){return Vk(fW,e)}function KTt(e){return Vk(WP,e)}function I1e(e){return Vk(gG,e)}const FTt=Object.freeze(Object.defineProperty({__proto__:null,axisBottom:KTt,axisLeft:I1e,axisRight:YTt,axisTop:g1e},Symbol.toStringTag,{value:"Module"}));function DTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function foe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function t2(e){return t2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},t2(e)}let mm=function(e){zTt(I,e);var g=PTt(I);function I(i,n){var C;DTt(this,I),C=g.call(this,i,n);const{svgElement:r}=i;return C.gMain=hg(r).append("g"),C.clipUid=lg.nice(),C.clipRect=C.gMain.append("clipPath").attr("id",`track-bounds-${C.clipUid}`).append("rect"),C.gMain.attr("clip-path",`url(#track-bounds-${C.clipUid})`),C}return xTt(I,[{key:"setPosition",value:function(n){this.position=n,this.gMain.attr("transform",`translate(${this.position[0]},${this.position[1]})`),this.draw()}},{key:"setDimensions",value:function(n){this.dimensions=n,this._xScale.range([0,this.dimensions[0]]),this._yScale.range([0,this.dimensions[1]]),n[0]>=0&&n[1]>=0?(this.clipRect.attr("width",n[0]),this.clipRect.attr("height",n[1])):(this.clipRect.attr("width",0),this.clipRect.attr("height",0)),this.draw()}},{key:"remove",value:function(){this.gMain.remove(),this.gMain=null}},{key:"draw",value:function(){return this}}]),I}(Dp);function LTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function poe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gh(e){return Gh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Gh(e)}let i1e=function(e){qTt(I,e);var g=eNt(I);function I(i,n){var C;return LTt(this,I),C=g.call(this,i,n),C.axis=g1e(C._xScale),C.gAxis=C.gMain.append("g"),C.tilesetInfo=!0,C}return UTt(I,[{key:"setDimensions",value:function(n){mv(Gh(I.prototype),"setDimensions",this).call(this,n),this.axis.ticks(Math.ceil(this.dimensions[0]/150)),this.gAxis.attr("transform",`translate(0,${n[1]})`)}},{key:"draw",value:function(){return this.axis.scale(this._xScale),this.gAxis.call(this.axis),this}},{key:"zoomed",value:function(n,C){mv(Gh(I.prototype),"zoomed",this).call(this,n,C),this.draw()}}]),I}(mm);function iNt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function boe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vh(e){return vh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},vh(e)}let n1e=function(e){aNt(I,e);var g=ANt(I);function I(i,n){var C;return iNt(this,I),C=g.call(this,i,n),C.axis=I1e(C._yScale),C.gAxis=C.gMain.append("g"),C.tilesetInfo=!0,C}return nNt(I,[{key:"setDimensions",value:function(n){fv(vh(I.prototype),"setDimensions",this).call(this,n),this.axis.ticks(Math.ceil(this.dimensions[1]/150)),this.gAxis.attr("transform",`translate(${n[0]},0)`)}},{key:"draw",value:function(){return this.axis.scale(this._yScale),this.gAxis.call(this.axis),this}},{key:"zoomed",value:function(n,C){fv(vh(I.prototype),"zoomed",this).call(this,n,C),this.draw()}}]),I}(mm);var sg={},XI={},mj=32;XI.INT_BITS=mj;XI.INT_MAX=2147483647;XI.INT_MIN=-1<0)-(e<0)};XI.abs=function(e){var g=e>>mj-1;return(e^g)-g};XI.min=function(e,g){return g^(e^g)&-(e65535)<<4,e>>>=g,I=(e>255)<<3,e>>>=I,g|=I,I=(e>15)<<2,e>>>=I,g|=I,I=(e>3)<<1,e>>>=I,g|=I,g|e>>1};XI.log10=function(e){return e>=1e9?9:e>=1e8?8:e>=1e7?7:e>=1e6?6:e>=1e5?5:e>=1e4?4:e>=1e3?3:e>=100?2:e>=10?1:0};XI.popCount=function(e){return e=e-(e>>>1&1431655765),e=(e&858993459)+(e>>>2&858993459),(e+(e>>>4)&252645135)*16843009>>>24};function C1e(e){var g=32;return e&=-e,e&&g--,e&65535&&(g-=16),e&16711935&&(g-=8),e&252645135&&(g-=4),e&858993459&&(g-=2),e&1431655765&&(g-=1),g}XI.countTrailingZeros=C1e;XI.nextPow2=function(e){return e+=e===0,--e,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1};XI.prevPow2=function(e){return e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e-(e>>>1)};XI.parity=function(e){return e^=e>>>16,e^=e>>>8,e^=e>>>4,e&=15,27030>>>e&1};var IG=new Array(256);(function(e){for(var g=0;g<256;++g){var I=g,i=g,n=7;for(I>>>=1;I;I>>>=1)i<<=1,i|=I&1,--n;e[g]=i<>>8&255]<<16|IG[e>>>16&255]<<8|IG[e>>>24&255]};XI.interleave2=function(e,g){return e&=65535,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,g&=65535,g=(g|g<<8)&16711935,g=(g|g<<4)&252645135,g=(g|g<<2)&858993459,g=(g|g<<1)&1431655765,e|g<<1};XI.deinterleave2=function(e,g){return e=e>>>g&1431655765,e=(e|e>>>1)&858993459,e=(e|e>>>2)&252645135,e=(e|e>>>4)&16711935,e=(e|e>>>16)&65535,e<<16>>16};XI.interleave3=function(e,g,I){return e&=1023,e=(e|e<<16)&4278190335,e=(e|e<<8)&251719695,e=(e|e<<4)&3272356035,e=(e|e<<2)&1227133513,g&=1023,g=(g|g<<16)&4278190335,g=(g|g<<8)&251719695,g=(g|g<<4)&3272356035,g=(g|g<<2)&1227133513,e|=g<<1,I&=1023,I=(I|I<<16)&4278190335,I=(I|I<<8)&251719695,I=(I|I<<4)&3272356035,I=(I|I<<2)&1227133513,e|I<<2};XI.deinterleave3=function(e,g){return e=e>>>g&1227133513,e=(e|e>>>2)&3272356035,e=(e|e>>>4)&251719695,e=(e|e>>>8)&4278190335,e=(e|e>>>16)&1023,e<<22>>22};XI.nextCombination=function(e){var g=e|e-1;return g+1|(~g&-~g)-1>>>C1e(e)+1};function r1e(e,g,I){var i=e[I]|0;if(i<=0)return[];var n=new Array(i),C;if(I===e.length-1)for(C=0;C"u"&&(g=0),typeof e){case"number":if(e>0)return uNt(e|0,g);break;case"object":if(typeof e.length=="number")return r1e(e,g,0);break}return[]}var hNt=dNt,o1e={},Wk={};Wk.byteLength=pNt;Wk.toByteArray=yNt;Wk.fromByteArray=vNt;var ja=[],Hr=[],mNt=typeof Uint8Array<"u"?Uint8Array:Array,OD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var $m=0,fNt=OD.length;$m0)throw new Error("Invalid string. Length must be a multiple of 4");var I=e.indexOf("=");I===-1&&(I=g);var i=I===g?0:4-I%4;return[I,i]}function pNt(e){var g=a1e(e),I=g[0],i=g[1];return(I+i)*3/4-i}function bNt(e,g,I){return(g+I)*3/4-I}function yNt(e){var g,I=a1e(e),i=I[0],n=I[1],C=new mNt(bNt(e,i,n)),r=0,o=n>0?i-4:i,a;for(a=0;a>16&255,C[r++]=g>>8&255,C[r++]=g&255;return n===2&&(g=Hr[e.charCodeAt(a)]<<2|Hr[e.charCodeAt(a+1)]>>4,C[r++]=g&255),n===1&&(g=Hr[e.charCodeAt(a)]<<10|Hr[e.charCodeAt(a+1)]<<4|Hr[e.charCodeAt(a+2)]>>2,C[r++]=g>>8&255,C[r++]=g&255),C}function ZNt(e){return ja[e>>18&63]+ja[e>>12&63]+ja[e>>6&63]+ja[e&63]}function GNt(e,g,I){for(var i,n=[],C=g;Co?o:r+C));return i===1?(g=e[I-1],n.push(ja[g>>2]+ja[g<<4&63]+"==")):i===2&&(g=(e[I-2]<<8)+e[I-1],n.push(ja[g>>10]+ja[g>>4&63]+ja[g<<2&63]+"=")),n.join("")}var fj={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */fj.read=function(e,g,I,i,n){var C,r,o=n*8-i-1,a=(1<>1,A=-7,l=I?n-1:0,c=I?-1:1,u=e[g+l];for(l+=c,C=u&(1<<-A)-1,u>>=-A,A+=o;A>0;C=C*256+e[g+l],l+=c,A-=8);for(r=C&(1<<-A)-1,C>>=-A,A+=i;A>0;r=r*256+e[g+l],l+=c,A-=8);if(C===0)C=1-s;else{if(C===a)return r?NaN:(u?-1:1)*(1/0);r=r+Math.pow(2,i),C=C-s}return(u?-1:1)*r*Math.pow(2,C-i)};fj.write=function(e,g,I,i,n,C){var r,o,a,s=C*8-n-1,A=(1<>1,c=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,u=i?0:C-1,d=i?1:-1,h=g<0||g===0&&1/g<0?1:0;for(g=Math.abs(g),isNaN(g)||g===1/0?(o=isNaN(g)?1:0,r=A):(r=Math.floor(Math.log(g)/Math.LN2),g*(a=Math.pow(2,-r))<1&&(r--,a*=2),r+l>=1?g+=c/a:g+=c*Math.pow(2,1-l),g*a>=2&&(r++,a/=2),r+l>=A?(o=0,r=A):r+l>=1?(o=(g*a-1)*Math.pow(2,n),r=r+l):(o=g*Math.pow(2,l-1)*Math.pow(2,n),r=0));n>=8;e[I+u]=o&255,u+=d,o/=256,n-=8);for(r=r<0;e[I+u]=r&255,u+=d,r/=256,s-=8);e[I+u-d]|=h*128};/*! +[Transform: Default ]`}this.labelText.text=s,this.labelText.style={fontSize:`${this.labelTextFontSize}px`,fontFamily:this.labelTextFontFamily,fill:o},this.labelText.alpha=typeof this.options.labelTextOpacity<"u"?this.options.labelTextOpacity:1,this.labelText.visible=!0,this.flipText&&(this.labelText.scale.x=-1);const{labelLeftMargin:A=0,labelRightMargin:l=0,labelTopMargin:c=0,labelBottomMargin:u=0}=this.options;this.options.labelPosition==="topLeft"?(this.labelText.x=this.position[0]+A+this.labelXOffset,this.labelText.y=this.position[1]+c,this.labelText.anchor.x=.5,this.labelText.anchor.y=0,this.labelText.x+=this.labelText.width/2,n.drawRect(this.position[0]+A+this.labelXOffset,this.position[1]+c,this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="bottomLeft"&&!this.flipText||this.options.labelPosition==="topRight"&&this.flipText?(this.labelText.x=this.position[0]+(A||c),this.labelText.y=this.position[1]+this.dimensions[1]-(u||l),this.labelText.anchor.x=.5,this.labelText.anchor.y=1,this.labelText.x+=this.labelText.width/2+this.labelXOffset,n.drawRect(this.position[0]+(A||c)+this.labelXOffset,this.position[1]+this.dimensions[1]-this.labelText.height-a-(u||l),this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="topRight"&&!this.flipText||this.options.labelPosition==="bottomLeft"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0]-(l||u),this.labelText.y=this.position[1]+(c||A),this.labelText.anchor.x=.5,this.labelText.anchor.y=0,this.labelText.x-=this.labelText.width/2+this.labelXOffset,n.drawRect(this.position[0]+this.dimensions[0]-this.labelText.width-a-(l||u)-this.labelXOffset,this.position[1]+(c||A),this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="bottomRight"?(this.labelText.x=this.position[0]+this.dimensions[0]-l,this.labelText.y=this.position[1]+this.dimensions[1]-u,this.labelText.anchor.x=.5,this.labelText.anchor.y=1,this.labelText.x-=this.labelText.width/2+this.labelXOffset,n.drawRect(this.position[0]+this.dimensions[0]-this.labelText.width-a-l-this.labelXOffset,this.position[1]+this.dimensions[1]-this.labelText.height-a-u,this.labelText.width+a,this.labelText.height+a)):this.options.labelPosition==="outerLeft"&&!this.flipText||this.options.labelPosition==="outerTop"&&this.flipText?(this.labelText.x=this.position[0],this.labelText.y=this.position[1]+this.dimensions[1]/2,this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.x-=this.labelText.width/2+3):this.options.labelPosition==="outerTop"&&!this.flipText||this.options.labelPosition==="outerLeft"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0]/2,this.labelText.y=this.position[1],this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.y-=this.labelText.height/2+3):this.options.labelPosition==="outerBottom"&&!this.flipText||this.options.labelPosition==="outerRight"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0]/2,this.labelText.y=this.position[1]+this.dimensions[1],this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.y+=this.labelText.height/2+3):this.options.labelPosition==="outerRight"&&!this.flipText||this.options.labelPosition==="outerBottom"&&this.flipText?(this.labelText.x=this.position[0]+this.dimensions[0],this.labelText.y=this.position[1]+this.dimensions[1]/2,this.labelText.anchor.x=.5,this.labelText.anchor.y=.5,this.labelText.x+=this.labelText.width/2+3):this.labelText.visible=!1,this.options.labelPosition==="outerLeft"||this.options.labelPosition==="outerRight"||this.options.labelPosition==="outerTop"||this.options.labelPosition==="outerBottom"?this.pLabel.setParent(this.pBase):this.pLabel.setParent(this.pMasked)}},{key:"rerender",value:function(n){this.options=n,this.draw(),this.drawBackground(),this.drawLabel(),this.drawError(),this.drawBorder()}},{key:"draw",value:function(){this.drawError()}},{key:"exportSVG",value:function(){const n=document.createElement("g"),r=document.createElement("rect");r.setAttribute("x",`${this.position[0]}`),r.setAttribute("y",`${this.position[1]}`),r.setAttribute("width",`${this.dimensions[0]}`),r.setAttribute("height",`${this.dimensions[1]}`),this.options&&this.options.backgroundColor?r.setAttribute("fill",this.options.backgroundColor):r.setAttribute("fill-opacity","0");const C=document.createElement("g");C.setAttribute("class","g-clipped"),n.appendChild(C),C.appendChild(r);const o=document.createElement("g");C.setAttribute("class","g-track"),C.appendChild(o);const a=document.createElement("g");C.setAttribute("class","g-labels"),C.appendChild(a);const s=document.createElementNS("http://www.w3.org/2000/svg","clipPath");n.appendChild(s);const A=document.createElementNS("http://www.w3.org/2000/svg","polygon");s.appendChild(A),A.setAttribute("points",`${this.position[0]},${this.position[1]} ${this.position[0]+this.dimensions[0]},${this.position[1]} ${this.position[0]+this.dimensions[0]},${this.position[1]+this.dimensions[1]} ${this.position[0]},${this.position[1]+this.dimensions[1]} `);const l=cg.nice();s.setAttribute("id",l),C.setAttribute("style",`clip-path:url(#${l});`);const c=this.labelText.text.split(` +`);let u=0;const d=3,h=(this.labelTextFontSize+2)*c.length+d;this.labelText.anchor.y===.5?u=h/2:this.labelText.anchor.y===1&&(u=-h);for(let m=0;mnew e(I,i)))}return J9t(e,[{key:"registerFileUrl",value:async function({server:i,url:I,filetype:n,coordSystem:r}){const C=`${DN(i)}/register_url/`;return fetch(C,{method:"POST",body:JSON.stringify({fileurl:I,filetype:n,coordSystem:r}),headers:{"Content-Type":"application/json; charset=utf-8"}})}},{key:"tilesetInfo",value:function(i){const{server:I,url:n,filetype:r,coordSystem:C}=this.dataConfig;return I&&n&&r?this.registerFileUrl({server:I,url:n,filetype:r,coordSystem:C}).then(o=>o.json()).then(o=>{this.dataConfig.tilesetUid=o.uid,this.tilesetInfoAfterRegister(i)}).catch(o=>{console.error("Error registering url",o)}):new Promise(()=>{this.tilesetInfoAfterRegister(i)})}},{key:"tilesetInfoAfterRegister",value:function(i){if(this.dataConfig.children){const I=this.dataConfig.children.map(n=>new Promise(r=>{n.tilesetInfo(r)}));Promise.all(I).then(n=>{i(n[0])})}else{const{server:I,tilesetUid:n}=this.dataConfig;!I||!n?(console.warn("No dataConfig children, server or tilesetUid:",this.dataConfig),i(null)):vt.trackInfo(I,n,r=>{this.dataConfig.tilesetInfo=r[n],i(r[n],n)},r=>{this.tilesetInfoLoading=!1,i({error:r})},this.pubSub)}}},{key:"fullTileId",value:function(i,I){return`${i}.${I}`}},{key:"fetchTilesDebounced",value:function(i,I){var n;if(this.dataConfig.type==="horizontal-section")return this.fetchHorizontalSection(i,I);if(this.dataConfig.type==="vertical-section")return this.fetchHorizontalSection(i,I,!0);if(!this.dataConfig.children&&this.dataConfig.tilesetUid)return new Promise(o=>{vt.fetchTilesDebounced({id:cg.nice(),server:this.dataConfig.server,done:o,ids:I.map(a=>`${this.dataConfig.tilesetUid}.${a}`),options:this.dataConfig.options},this.pubSub,!0)}).then(o=>{const a=Mg(o)[0].tilesetUid,s={};for(let A=0;Anew Promise(o=>{C.fetchTilesDebounced(o,I)})))??[];return Promise.all(r).then(C=>{if(this.dataConfig.type==="divided"&&L9t(C)){const o=this.makeDivided(C,I);return i(o),o}return console.warn("Unimplemented dataConfig type. Returning first data source.",this.dataConfig),i(C[0]),C[0]})}},{key:"divideData",value:function(i,I){const n=new Float32Array(i.length);for(let r=0;r+p).sort((p,y)=>y-p);h=vt.calculateTilesFromResolution(b[c],d,a.min_pos[n?1:0],a.max_pos[n?1:0])}else h=vt.calculateTiles(c,d,a.min_pos[n?1:0],a.max_pos[n?1:0],a.max_zoom,a.max_width);const m=[u,h[0]].sort((b,p)=>b-p);m[0]===u?C.push(!1):C.push(!0);const f=`${c}.${m[0]}.${m[1]}`;r.push(f)}return new Promise(A=>{vt.fetchTilesDebounced({id:cg.nice(),server:this.dataConfig.server,done:A,ids:r.map(l=>`${this.dataConfig.tilesetUid}.${l}`)},this.pubSub,!0)}).then(A=>{const l=Mg(A)[0].tilesetUid,c={};for(let u=0;u=0;)e[g]=0}var $9t=0,lVe=1,q9t=2,eXt=3,tXt=258,dj=29,mw=256,$B=mw+1+dj,Ep=30,hj=19,cVe=2*$B+1,cd=15,FD=16,gXt=7,mj=256,uVe=16,dVe=17,hVe=18,fP=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],sW=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],iXt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],mVe=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],IXt=512,ns=new Array(($B+2)*2);ny(ns);var uv=new Array(Ep*2);ny(uv);var qB=new Array(IXt);ny(qB);var eS=new Array(tXt-eXt+1);ny(eS);var fj=new Array(dj);ny(fj);var t2=new Array(Ep);ny(t2);function DD(e,g,i,I,n){this.static_tree=e,this.extra_bits=g,this.extra_base=i,this.elems=I,this.max_length=n,this.has_stree=e&&e.length}var fVe,pVe,bVe;function xD(e,g){this.dyn_tree=e,this.max_code=0,this.stat_desc=g}function yVe(e){return e<256?qB[e]:qB[256+(e>>>7)]}function tS(e,g){e.pending_buf[e.pending++]=g&255,e.pending_buf[e.pending++]=g>>>8&255}function Kr(e,g,i){e.bi_valid>FD-i?(e.bi_buf|=g<>FD-e.bi_valid,e.bi_valid+=i-FD):(e.bi_buf|=g<>>=1,i<<=1;while(--g>0);return i>>>1}function nXt(e){e.bi_valid===16?(tS(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)}function rXt(e,g){var i=g.dyn_tree,I=g.max_code,n=g.stat_desc.static_tree,r=g.stat_desc.has_stree,C=g.stat_desc.extra_bits,o=g.stat_desc.extra_base,a=g.stat_desc.max_length,s,A,l,c,u,d,h=0;for(c=0;c<=cd;c++)e.bl_count[c]=0;for(i[e.heap[e.heap_max]*2+1]=0,s=e.heap_max+1;sa&&(c=a,h++),i[A*2+1]=c,!(A>I)&&(e.bl_count[c]++,u=0,A>=o&&(u=C[A-o]),d=i[A*2],e.opt_len+=d*(c+u),r&&(e.static_len+=d*(n[A*2+1]+u)));if(h!==0){do{for(c=a-1;e.bl_count[c]===0;)c--;e.bl_count[c]--,e.bl_count[c+1]+=2,e.bl_count[a]--,h-=2}while(h>0);for(c=a;c!==0;c--)for(A=e.bl_count[c];A!==0;)l=e.heap[--s],!(l>I)&&(i[l*2+1]!==c&&(e.opt_len+=(c-i[l*2+1])*i[l*2],i[l*2+1]=c),A--)}}function GVe(e,g,i){var I=new Array(cd+1),n=0,r,C;for(r=1;r<=cd;r++)I[r]=n=n+i[r-1]<<1;for(C=0;C<=g;C++){var o=e[C*2+1];o!==0&&(e[C*2]=ZVe(I[o]++,o))}}function CXt(){var e,g,i,I,n,r=new Array(cd+1);for(i=0,I=0;I>=7;I8?tS(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function oXt(e,g,i,I){BVe(e),I&&(tS(e,i),tS(e,~i)),U9t.arraySet(e.pending_buf,e.window,g,i,e.pending),e.pending+=i}function bCe(e,g,i,I){var n=g*2,r=i*2;return e[n]>1;C>=1;C--)ED(e,i,C);s=r;do C=e.heap[1],e.heap[1]=e.heap[e.heap_len--],ED(e,i,1),o=e.heap[1],e.heap[--e.heap_max]=C,e.heap[--e.heap_max]=o,i[s*2]=i[C*2]+i[o*2],e.depth[s]=(e.depth[C]>=e.depth[o]?e.depth[C]:e.depth[o])+1,i[C*2+1]=i[o*2+1]=s,e.heap[1]=s++,ED(e,i,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],rXt(e,g),GVe(i,a,e.bl_count)}function ZCe(e,g,i){var I,n=-1,r,C=g[0*2+1],o=0,a=7,s=4;for(C===0&&(a=138,s=3),g[(i+1)*2+1]=65535,I=0;I<=i;I++)r=C,C=g[(I+1)*2+1],!(++o=3&&e.bl_tree[mVe[g]*2+1]===0;g--);return e.opt_len+=3*(g+1)+5+5+4,g}function AXt(e,g,i,I){var n;for(Kr(e,g-257,5),Kr(e,i-1,5),Kr(e,I-4,4),n=0;n>>=1)if(g&1&&e.dyn_ltree[i*2]!==0)return fCe;if(e.dyn_ltree[9*2]!==0||e.dyn_ltree[10*2]!==0||e.dyn_ltree[13*2]!==0)return pCe;for(i=32;i0?(e.strm.data_type===j9t&&(e.strm.data_type=sXt(e)),pP(e,e.l_desc),pP(e,e.d_desc),C=aXt(e),n=e.opt_len+3+7>>>3,r=e.static_len+3+7>>>3,r<=n&&(n=r)):n=r=i+5,i+4<=n&&g!==-1?SVe(e,g,i,I):e.strategy===Q9t||r===n?(Kr(e,(lVe<<1)+(I?1:0),3),yCe(e,ns,uv)):(Kr(e,(q9t<<1)+(I?1:0),3),AXt(e,e.l_desc.max_code+1,e.d_desc.max_code+1,C+1),yCe(e,e.dyn_ltree,e.dyn_dtree)),vVe(e),I&&BVe(e)}function dXt(e,g,i){return e.pending_buf[e.d_buf+e.last_lit*2]=g>>>8&255,e.pending_buf[e.d_buf+e.last_lit*2+1]=g&255,e.pending_buf[e.l_buf+e.last_lit]=i&255,e.last_lit++,g===0?e.dyn_ltree[i*2]++:(e.matches++,g--,e.dyn_ltree[(eS[i]+mw+1)*2]++,e.dyn_dtree[yVe(g)*2]++),e.last_lit===e.lit_bufsize-1}Iy._tr_init=lXt;Iy._tr_stored_block=SVe;Iy._tr_flush_block=uXt;Iy._tr_tally=dXt;Iy._tr_align=cXt;function hXt(e,g,i,I){for(var n=e&65535|0,r=e>>>16&65535|0,C=0;i!==0;){C=i>2e3?2e3:i,i-=C;do n=n+g[I++]|0,r=r+n|0;while(--C);n%=65521,r%=65521}return n|r<<16|0}var wVe=hXt;function mXt(){for(var e,g=[],i=0;i<256;i++){e=i;for(var I=0;I<8;I++)e=e&1?3988292384^e>>>1:e>>>1;g[i]=e}return g}var fXt=mXt();function pXt(e,g,i,I){var n=fXt,r=I+i;e^=-1;for(var C=I;C>>8^n[(e^g[C])&255];return e^-1}var RVe=pXt,pj={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},$n=al,io=Iy,VVe=wVe,Yl=RVe,bXt=pj,dm=0,yXt=1,ZXt=3,kc=4,BCe=5,$a=0,SCe=1,Io=-2,GXt=-3,MD=-5,vXt=-1,BXt=1,TV=2,SXt=3,wXt=4,RXt=0,VXt=2,Hk=8,WXt=9,XXt=15,HXt=8,TXt=29,NXt=256,bP=NXt+1+TXt,kXt=30,YXt=19,KXt=2*bP+1,FXt=15,Bg=3,pc=258,sa=pc+Bg+1,DXt=32,Tk=42,yP=69,lW=73,cW=91,uW=103,ud=113,iG=666,NI=1,fw=2,fh=3,ry=4,xXt=3;function bc(e,g){return e.msg=bXt[g],g}function wCe(e){return(e<<1)-(e>4?9:0)}function ec(e){for(var g=e.length;--g>=0;)e[g]=0}function Kl(e){var g=e.state,i=g.pending;i>e.avail_out&&(i=e.avail_out),i!==0&&($n.arraySet(e.output,g.pending_buf,g.pending_out,i,e.next_out),e.next_out+=i,g.pending_out+=i,e.total_out+=i,e.avail_out-=i,g.pending-=i,g.pending===0&&(g.pending_out=0))}function un(e,g){io._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,g),e.block_start=e.strstart,Kl(e.strm)}function Ng(e,g){e.pending_buf[e.pending++]=g}function hZ(e,g){e.pending_buf[e.pending++]=g>>>8&255,e.pending_buf[e.pending++]=g&255}function EXt(e,g,i,I){var n=e.avail_in;return n>I&&(n=I),n===0?0:(e.avail_in-=n,$n.arraySet(g,e.input,e.next_in,n,i),e.state.wrap===1?e.adler=VVe(e.adler,g,n,i):e.state.wrap===2&&(e.adler=Yl(e.adler,g,n,i)),e.next_in+=n,e.total_in+=n,n)}function WVe(e,g){var i=e.max_chain_length,I=e.strstart,n,r,C=e.prev_length,o=e.nice_match,a=e.strstart>e.w_size-sa?e.strstart-(e.w_size-sa):0,s=e.window,A=e.w_mask,l=e.prev,c=e.strstart+pc,u=s[I+C-1],d=s[I+C];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do if(n=g,!(s[n+C]!==d||s[n+C-1]!==u||s[n]!==s[I]||s[++n]!==s[I+1])){I+=2,n++;do;while(s[++I]===s[++n]&&s[++I]===s[++n]&&s[++I]===s[++n]&&s[++I]===s[++n]&&s[++I]===s[++n]&&s[++I]===s[++n]&&s[++I]===s[++n]&&s[++I]===s[++n]&&IC){if(e.match_start=g,C=r,r>=o)break;u=s[I+C-1],d=s[I+C]}}while((g=l[g&A])>a&&--i!==0);return C<=e.lookahead?C:e.lookahead}function ph(e){var g=e.w_size,i,I,n,r,C;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=g+(g-sa)){$n.arraySet(e.window,e.window,g,g,0),e.match_start-=g,e.strstart-=g,e.block_start-=g,I=e.hash_size,i=I;do n=e.head[--i],e.head[i]=n>=g?n-g:0;while(--I);I=g,i=I;do n=e.prev[--i],e.prev[i]=n>=g?n-g:0;while(--I);r+=g}if(e.strm.avail_in===0)break;if(I=EXt(e.strm,e.window,e.strstart+e.lookahead,r),e.lookahead+=I,e.lookahead+e.insert>=Bg)for(C=e.strstart-e.insert,e.ins_h=e.window[C],e.ins_h=(e.ins_h<e.pending_buf_size-5&&(i=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ph(e),e.lookahead===0&&g===dm)return NI;if(e.lookahead===0)break}e.strstart+=e.lookahead,e.lookahead=0;var I=e.block_start+i;if((e.strstart===0||e.strstart>=I)&&(e.lookahead=e.strstart-I,e.strstart=I,un(e,!1),e.strm.avail_out===0)||e.strstart-e.block_start>=e.w_size-sa&&(un(e,!1),e.strm.avail_out===0))return NI}return e.insert=0,g===kc?(un(e,!0),e.strm.avail_out===0?fh:ry):(e.strstart>e.block_start&&(un(e,!1),e.strm.avail_out===0),NI)}function zD(e,g){for(var i,I;;){if(e.lookahead=Bg&&(e.ins_h=(e.ins_h<=Bg)if(I=io._tr_tally(e,e.strstart-e.match_start,e.match_length-Bg),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=Bg){e.match_length--;do e.strstart++,e.ins_h=(e.ins_h<=Bg&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=Bg-1)),e.prev_length>=Bg&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-Bg,I=io._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-Bg),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=n&&(e.ins_h=(e.ins_h<=Bg&&e.strstart>0&&(n=e.strstart-1,I=C[n],I===C[++n]&&I===C[++n]&&I===C[++n])){r=e.strstart+pc;do;while(I===C[++n]&&I===C[++n]&&I===C[++n]&&I===C[++n]&&I===C[++n]&&I===C[++n]&&I===C[++n]&&I===C[++n]&&ne.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=Bg?(i=io._tr_tally(e,1,e.match_length-Bg),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=io._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(un(e,!1),e.strm.avail_out===0))return NI}return e.insert=0,g===kc?(un(e,!0),e.strm.avail_out===0?fh:ry):e.last_lit&&(un(e,!1),e.strm.avail_out===0)?NI:fw}function PXt(e,g){for(var i;;){if(e.lookahead===0&&(ph(e),e.lookahead===0)){if(g===dm)return NI;break}if(e.match_length=0,i=io._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(un(e,!1),e.strm.avail_out===0))return NI}return e.insert=0,g===kc?(un(e,!0),e.strm.avail_out===0?fh:ry):e.last_lit&&(un(e,!1),e.strm.avail_out===0)?NI:fw}function Na(e,g,i,I,n){this.good_length=e,this.max_lazy=g,this.nice_length=i,this.max_chain=I,this.func=n}var Ap;Ap=[new Na(0,0,0,0,MXt),new Na(4,4,8,4,zD),new Na(4,5,16,8,zD),new Na(4,6,32,32,zD),new Na(4,4,16,16,jm),new Na(8,16,32,32,jm),new Na(8,16,128,128,jm),new Na(8,32,128,256,jm),new Na(32,128,258,1024,jm),new Na(32,258,258,4096,jm)];function JXt(e){e.window_size=2*e.w_size,ec(e.head),e.max_lazy_match=Ap[e.level].max_lazy,e.good_match=Ap[e.level].good_length,e.nice_match=Ap[e.level].nice_length,e.max_chain_length=Ap[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=Bg-1,e.match_available=0,e.ins_h=0}function OXt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Hk,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new $n.Buf16(KXt*2),this.dyn_dtree=new $n.Buf16((2*kXt+1)*2),this.bl_tree=new $n.Buf16((2*YXt+1)*2),ec(this.dyn_ltree),ec(this.dyn_dtree),ec(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new $n.Buf16(FXt+1),this.heap=new $n.Buf16(2*bP+1),ec(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new $n.Buf16(2*bP+1),ec(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function XVe(e){var g;return!e||!e.state?bc(e,Io):(e.total_in=e.total_out=0,e.data_type=VXt,g=e.state,g.pending=0,g.pending_out=0,g.wrap<0&&(g.wrap=-g.wrap),g.status=g.wrap?Tk:ud,e.adler=g.wrap===2?0:1,g.last_flush=dm,io._tr_init(g),$a)}function HVe(e){var g=XVe(e);return g===$a&&JXt(e.state),g}function _Xt(e,g){return!e||!e.state||e.state.wrap!==2?Io:(e.state.gzhead=g,$a)}function TVe(e,g,i,I,n,r){if(!e)return Io;var C=1;if(g===vXt&&(g=6),I<0?(C=0,I=-I):I>15&&(C=2,I-=16),n<1||n>WXt||i!==Hk||I<8||I>15||g<0||g>9||r<0||r>wXt)return bc(e,Io);I===8&&(I=9);var o=new OXt;return e.state=o,o.strm=e,o.wrap=C,o.gzhead=null,o.w_bits=I,o.w_size=1<BCe||g<0)return e?bc(e,Io):Io;if(I=e.state,!e.output||!e.input&&e.avail_in!==0||I.status===iG&&g!==kc)return bc(e,e.avail_out===0?MD:Io);if(I.strm=e,i=I.last_flush,I.last_flush=g,I.status===Tk)if(I.wrap===2)e.adler=0,Ng(I,31),Ng(I,139),Ng(I,8),I.gzhead?(Ng(I,(I.gzhead.text?1:0)+(I.gzhead.hcrc?2:0)+(I.gzhead.extra?4:0)+(I.gzhead.name?8:0)+(I.gzhead.comment?16:0)),Ng(I,I.gzhead.time&255),Ng(I,I.gzhead.time>>8&255),Ng(I,I.gzhead.time>>16&255),Ng(I,I.gzhead.time>>24&255),Ng(I,I.level===9?2:I.strategy>=TV||I.level<2?4:0),Ng(I,I.gzhead.os&255),I.gzhead.extra&&I.gzhead.extra.length&&(Ng(I,I.gzhead.extra.length&255),Ng(I,I.gzhead.extra.length>>8&255)),I.gzhead.hcrc&&(e.adler=Yl(e.adler,I.pending_buf,I.pending,0)),I.gzindex=0,I.status=yP):(Ng(I,0),Ng(I,0),Ng(I,0),Ng(I,0),Ng(I,0),Ng(I,I.level===9?2:I.strategy>=TV||I.level<2?4:0),Ng(I,xXt),I.status=ud);else{var C=Hk+(I.w_bits-8<<4)<<8,o=-1;I.strategy>=TV||I.level<2?o=0:I.level<6?o=1:I.level===6?o=2:o=3,C|=o<<6,I.strstart!==0&&(C|=DXt),C+=31-C%31,I.status=ud,hZ(I,C),I.strstart!==0&&(hZ(I,e.adler>>>16),hZ(I,e.adler&65535)),e.adler=1}if(I.status===yP)if(I.gzhead.extra){for(n=I.pending;I.gzindex<(I.gzhead.extra.length&65535)&&!(I.pending===I.pending_buf_size&&(I.gzhead.hcrc&&I.pending>n&&(e.adler=Yl(e.adler,I.pending_buf,I.pending-n,n)),Kl(e),n=I.pending,I.pending===I.pending_buf_size));)Ng(I,I.gzhead.extra[I.gzindex]&255),I.gzindex++;I.gzhead.hcrc&&I.pending>n&&(e.adler=Yl(e.adler,I.pending_buf,I.pending-n,n)),I.gzindex===I.gzhead.extra.length&&(I.gzindex=0,I.status=lW)}else I.status=lW;if(I.status===lW)if(I.gzhead.name){n=I.pending;do{if(I.pending===I.pending_buf_size&&(I.gzhead.hcrc&&I.pending>n&&(e.adler=Yl(e.adler,I.pending_buf,I.pending-n,n)),Kl(e),n=I.pending,I.pending===I.pending_buf_size)){r=1;break}I.gzindexn&&(e.adler=Yl(e.adler,I.pending_buf,I.pending-n,n)),r===0&&(I.gzindex=0,I.status=cW)}else I.status=cW;if(I.status===cW)if(I.gzhead.comment){n=I.pending;do{if(I.pending===I.pending_buf_size&&(I.gzhead.hcrc&&I.pending>n&&(e.adler=Yl(e.adler,I.pending_buf,I.pending-n,n)),Kl(e),n=I.pending,I.pending===I.pending_buf_size)){r=1;break}I.gzindexn&&(e.adler=Yl(e.adler,I.pending_buf,I.pending-n,n)),r===0&&(I.status=uW)}else I.status=uW;if(I.status===uW&&(I.gzhead.hcrc?(I.pending+2>I.pending_buf_size&&Kl(e),I.pending+2<=I.pending_buf_size&&(Ng(I,e.adler&255),Ng(I,e.adler>>8&255),e.adler=0,I.status=ud)):I.status=ud),I.pending!==0){if(Kl(e),e.avail_out===0)return I.last_flush=-1,$a}else if(e.avail_in===0&&wCe(g)<=wCe(i)&&g!==kc)return bc(e,MD);if(I.status===iG&&e.avail_in!==0)return bc(e,MD);if(e.avail_in!==0||I.lookahead!==0||g!==dm&&I.status!==iG){var a=I.strategy===TV?PXt(I,g):I.strategy===SXt?zXt(I,g):Ap[I.level].func(I,g);if((a===fh||a===ry)&&(I.status=iG),a===NI||a===fh)return e.avail_out===0&&(I.last_flush=-1),$a;if(a===fw&&(g===yXt?io._tr_align(I):g!==BCe&&(io._tr_stored_block(I,0,0,!1),g===ZXt&&(ec(I.head),I.lookahead===0&&(I.strstart=0,I.block_start=0,I.insert=0))),Kl(e),e.avail_out===0))return I.last_flush=-1,$a}return g!==kc?$a:I.wrap<=0?SCe:(I.wrap===2?(Ng(I,e.adler&255),Ng(I,e.adler>>8&255),Ng(I,e.adler>>16&255),Ng(I,e.adler>>24&255),Ng(I,e.total_in&255),Ng(I,e.total_in>>8&255),Ng(I,e.total_in>>16&255),Ng(I,e.total_in>>24&255)):(hZ(I,e.adler>>>16),hZ(I,e.adler&65535)),Kl(e),I.wrap>0&&(I.wrap=-I.wrap),I.pending!==0?$a:SCe)}function QXt(e){var g;return!e||!e.state?Io:(g=e.state.status,g!==Tk&&g!==yP&&g!==lW&&g!==cW&&g!==uW&&g!==ud&&g!==iG?bc(e,Io):(e.state=null,g===ud?bc(e,GXt):$a))}function jXt(e,g){var i=g.length,I,n,r,C,o,a,s,A;if(!e||!e.state||(I=e.state,C=I.wrap,C===2||C===1&&I.status!==Tk||I.lookahead))return Io;for(C===1&&(e.adler=VVe(e.adler,g,i,0)),I.wrap=0,i>=I.w_size&&(C===0&&(ec(I.head),I.strstart=0,I.block_start=0,I.insert=0),A=new $n.Buf8(I.w_size),$n.arraySet(A,g,i-I.w_size,I.w_size,0),g=A,i=I.w_size),o=e.avail_in,a=e.next_in,s=e.input,e.avail_in=i,e.next_in=0,e.input=g,ph(I);I.lookahead>=Bg;){n=I.strstart,r=I.lookahead-(Bg-1);do I.ins_h=(I.ins_h<=252?6:vl>=248?5:vl>=240?4:vl>=224?3:vl>=192?2:1;gS[254]=gS[254]=1;hm.string2buf=function(e){var g,i,I,n,r,C=e.length,o=0;for(n=0;n>>6,g[r++]=128|i&63):i<65536?(g[r++]=224|i>>>12,g[r++]=128|i>>>6&63,g[r++]=128|i&63):(g[r++]=240|i>>>18,g[r++]=128|i>>>12&63,g[r++]=128|i>>>6&63,g[r++]=128|i&63);return g};function YVe(e,g){if(g<65534&&(e.subarray&&kVe||!e.subarray&&NVe))return String.fromCharCode.apply(null,Nk.shrinkBuf(e,g));for(var i="",I=0;I4){o[I++]=65533,i+=r-1;continue}for(n&=r===2?31:r===3?15:7;r>1&&i1){o[I++]=65533;continue}n<65536?o[I++]=n:(n-=65536,o[I++]=55296|n>>10&1023,o[I++]=56320|n&1023)}return YVe(o,I)};hm.utf8border=function(e,g){var i;for(g=g||e.length,g>e.length&&(g=e.length),i=g-1;i>=0&&(e[i]&192)===128;)i--;return i<0||i===0?g:i+gS[e[i]]>g?i:g};function $Xt(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var KVe=$Xt,dv=YA,hv=al,ZP=hm,GP=pj,qXt=KVe,FVe=Object.prototype.toString,e2t=0,PD=4,Mp=0,RCe=1,VCe=2,t2t=-1,g2t=0,i2t=8;function bh(e){if(!(this instanceof bh))return new bh(e);this.options=hv.assign({level:t2t,method:i2t,chunkSize:16384,windowBits:15,memLevel:8,strategy:g2t,to:""},e||{});var g=this.options;g.raw&&g.windowBits>0?g.windowBits=-g.windowBits:g.gzip&&g.windowBits>0&&g.windowBits<16&&(g.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qXt,this.strm.avail_out=0;var i=dv.deflateInit2(this.strm,g.level,g.method,g.windowBits,g.memLevel,g.strategy);if(i!==Mp)throw new Error(GP[i]);if(g.header&&dv.deflateSetHeader(this.strm,g.header),g.dictionary){var I;if(typeof g.dictionary=="string"?I=ZP.string2buf(g.dictionary):FVe.call(g.dictionary)==="[object ArrayBuffer]"?I=new Uint8Array(g.dictionary):I=g.dictionary,i=dv.deflateSetDictionary(this.strm,I),i!==Mp)throw new Error(GP[i]);this._dict_set=!0}}bh.prototype.push=function(e,g){var i=this.strm,I=this.options.chunkSize,n,r;if(this.ended)return!1;r=g===~~g?g:g===!0?PD:e2t,typeof e=="string"?i.input=ZP.string2buf(e):FVe.call(e)==="[object ArrayBuffer]"?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new hv.Buf8(I),i.next_out=0,i.avail_out=I),n=dv.deflate(i,r),n!==RCe&&n!==Mp)return this.onEnd(n),this.ended=!0,!1;(i.avail_out===0||i.avail_in===0&&(r===PD||r===VCe))&&(this.options.to==="string"?this.onData(ZP.buf2binstring(hv.shrinkBuf(i.output,i.next_out))):this.onData(hv.shrinkBuf(i.output,i.next_out)))}while((i.avail_in>0||i.avail_out===0)&&n!==RCe);return r===PD?(n=dv.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===Mp):(r===VCe&&(this.onEnd(Mp),i.avail_out=0),!0)};bh.prototype.onData=function(e){this.chunks.push(e)};bh.prototype.onEnd=function(e){e===Mp&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=hv.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function bj(e,g){var i=new bh(g);if(i.push(e,!0),i.err)throw i.msg||GP[i.err];return i.result}function I2t(e,g){return g=g||{},g.raw=!0,bj(e,g)}function n2t(e,g){return g=g||{},g.gzip=!0,bj(e,g)}hw.Deflate=bh;hw.deflate=bj;hw.deflateRaw=I2t;hw.gzip=n2t;var pw={},Sa={},NV=30,r2t=12,C2t=function(g,i){var I,n,r,C,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G,v,w,V,S;I=g.state,n=g.next_in,V=g.input,r=n+(g.avail_in-5),C=g.next_out,S=g.output,o=C-(i-g.avail_out),a=C+(g.avail_out-257),s=I.dmax,A=I.wsize,l=I.whave,c=I.wnext,u=I.window,d=I.hold,h=I.bits,m=I.lencode,f=I.distcode,b=(1<>>24,d>>>=Z,h-=Z,Z=y>>>16&255,Z===0)S[C++]=y&65535;else if(Z&16){B=y&65535,Z&=15,Z&&(h>>=Z,h-=Z),h<15&&(d+=V[n++]<>>24,d>>>=Z,h-=Z,Z=y>>>16&255,Z&16){if(G=y&65535,Z&=15,hs){g.msg="invalid distance too far back",I.mode=NV;break e}if(d>>>=Z,h-=Z,Z=C-o,G>Z){if(Z=G-Z,Z>l&&I.sane){g.msg="invalid distance too far back",I.mode=NV;break e}if(v=0,w=u,c===0){if(v+=A-Z,Z2;)S[C++]=w[v++],S[C++]=w[v++],S[C++]=w[v++],B-=3;B&&(S[C++]=w[v++],B>1&&(S[C++]=w[v++]))}else{v=C-G;do S[C++]=S[v++],S[C++]=S[v++],S[C++]=S[v++],B-=3;while(B>2);B&&(S[C++]=S[v++],B>1&&(S[C++]=S[v++]))}}else if(Z&64){g.msg="invalid distance code",I.mode=NV;break e}else{y=f[(y&65535)+(d&(1<>3,n-=B,h-=B<<3,d&=(1<=1&&X[u]===0;u--);if(d>u&&(d=u),u===0)return r[C++]=1<<24|64<<16|0,r[C++]=1<<24|64<<16|0,a.bits=1,0;for(c=1;c0&&(g===TCe||u!==1))return-1;for(W[1]=0,A=1;A<$m;A++)W[A+1]=W[A]+X[A];for(l=0;lXCe||g===NCe&&b>HCe)return 1;for(;;){k=A-m,o[l]S?(K=R[H+o[l]],D=w[V+o[l]]):(K=32+64,D=0),y=1<>m)+Z]=k<<24|K<<16|D|0;while(Z!==0);for(y=1<>=1;if(y!==0?(p&=y-1,p+=y):p=0,l++,--X[A]===0){if(A===u)break;A=i[I+o[l]]}if(A>d&&(p&G)!==B){for(m===0&&(m=d),v+=c,h=A-m,f=1<XCe||g===NCe&&b>HCe)return 1;B=p&G,r[B]=d<<24|h<<16|v-C|0}}return p!==0&&(r[v+p]=A-m<<24|64<<16|0),a.bits=d,0},dC=al,vP=wVe,ka=RVe,c2t=C2t,mv=l2t,u2t=0,DVe=1,xVe=2,kCe=4,d2t=5,kV=6,yh=0,h2t=1,m2t=2,Ao=-2,EVe=-3,MVe=-4,f2t=-5,YCe=8,zVe=1,KCe=2,FCe=3,DCe=4,xCe=5,ECe=6,MCe=7,zCe=8,PCe=9,JCe=10,g2=11,OA=12,OD=13,OCe=14,_D=15,_Ce=16,LCe=17,UCe=18,QCe=19,YV=20,KV=21,jCe=22,$Ce=23,qCe=24,eoe=25,toe=26,LD=27,goe=28,ioe=29,Bi=30,PVe=31,p2t=32,b2t=852,y2t=592,Z2t=15,G2t=Z2t;function Ioe(e){return(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24)}function v2t(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new dC.Buf16(320),this.work=new dC.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function JVe(e){var g;return!e||!e.state?Ao:(g=e.state,e.total_in=e.total_out=g.total=0,e.msg="",g.wrap&&(e.adler=g.wrap&1),g.mode=zVe,g.last=0,g.havedict=0,g.dmax=32768,g.head=null,g.hold=0,g.bits=0,g.lencode=g.lendyn=new dC.Buf32(b2t),g.distcode=g.distdyn=new dC.Buf32(y2t),g.sane=1,g.back=-1,yh)}function OVe(e){var g;return!e||!e.state?Ao:(g=e.state,g.wsize=0,g.whave=0,g.wnext=0,JVe(e))}function _Ve(e,g){var i,I;return!e||!e.state||(I=e.state,g<0?(i=0,g=-g):(i=(g>>4)+1,g<48&&(g&=15)),g&&(g<8||g>15))?Ao:(I.window!==null&&I.wbits!==g&&(I.window=null),I.wrap=i,I.wbits=g,OVe(e))}function LVe(e,g){var i,I;return e?(I=new v2t,e.state=I,I.window=null,i=_Ve(e,g),i!==yh&&(e.state=null),i):Ao}function B2t(e){return LVe(e,G2t)}var noe=!0,UD,QD;function S2t(e){if(noe){var g;for(UD=new dC.Buf32(512),QD=new dC.Buf32(32),g=0;g<144;)e.lens[g++]=8;for(;g<256;)e.lens[g++]=9;for(;g<280;)e.lens[g++]=7;for(;g<288;)e.lens[g++]=8;for(mv(DVe,e.lens,0,288,UD,0,e.work,{bits:9}),g=0;g<32;)e.lens[g++]=5;mv(xVe,e.lens,0,32,QD,0,e.work,{bits:5}),noe=!1}e.lencode=UD,e.lenbits=9,e.distcode=QD,e.distbits=5}function UVe(e,g,i,I){var n,r=e.state;return r.window===null&&(r.wsize=1<=r.wsize?(dC.arraySet(r.window,g,i-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>I&&(n=I),dC.arraySet(r.window,g,i-I,n,r.wnext),I-=n,I?(dC.arraySet(r.window,g,i-I,I,0),r.wnext=I,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,i.check=ka(i.check,w,2,0),s=0,A=0,i.mode=KCe;break}if(i.flags=0,i.head&&(i.head.done=!1),!(i.wrap&1)||(((s&255)<<8)+(s>>8))%31){e.msg="incorrect header check",i.mode=Bi;break}if((s&15)!==YCe){e.msg="unknown compression method",i.mode=Bi;break}if(s>>>=4,A-=4,G=(s&15)+8,i.wbits===0)i.wbits=G;else if(G>i.wbits){e.msg="invalid window size",i.mode=Bi;break}i.dmax=1<>8&1),i.flags&512&&(w[0]=s&255,w[1]=s>>>8&255,i.check=ka(i.check,w,2,0)),s=0,A=0,i.mode=FCe;case FCe:for(;A<32;){if(o===0)break e;o--,s+=I[r++]<>>8&255,w[2]=s>>>16&255,w[3]=s>>>24&255,i.check=ka(i.check,w,4,0)),s=0,A=0,i.mode=DCe;case DCe:for(;A<16;){if(o===0)break e;o--,s+=I[r++]<>8),i.flags&512&&(w[0]=s&255,w[1]=s>>>8&255,i.check=ka(i.check,w,2,0)),s=0,A=0,i.mode=xCe;case xCe:if(i.flags&1024){for(;A<16;){if(o===0)break e;o--,s+=I[r++]<>>8&255,i.check=ka(i.check,w,2,0)),s=0,A=0}else i.head&&(i.head.extra=null);i.mode=ECe;case ECe:if(i.flags&1024&&(u=i.length,u>o&&(u=o),u&&(i.head&&(G=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),dC.arraySet(i.head.extra,I,r,u,G)),i.flags&512&&(i.check=ka(i.check,I,u,r)),o-=u,r+=u,i.length-=u),i.length))break e;i.length=0,i.mode=MCe;case MCe:if(i.flags&2048){if(o===0)break e;u=0;do G=I[r+u++],i.head&&G&&i.length<65536&&(i.head.name+=String.fromCharCode(G));while(G&&u>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=OA;break;case JCe:for(;A<32;){if(o===0)break e;o--,s+=I[r++]<>>=A&7,A-=A&7,i.mode=LD;break}for(;A<3;){if(o===0)break e;o--,s+=I[r++]<>>=1,A-=1,s&3){case 0:i.mode=OCe;break;case 1:if(S2t(i),i.mode=YV,g===kV){s>>>=2,A-=2;break e}break;case 2:i.mode=LCe;break;case 3:e.msg="invalid block type",i.mode=Bi}s>>>=2,A-=2;break;case OCe:for(s>>>=A&7,A-=A&7;A<32;){if(o===0)break e;o--,s+=I[r++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=Bi;break}if(i.length=s&65535,s=0,A=0,i.mode=_D,g===kV)break e;case _D:i.mode=_Ce;case _Ce:if(u=i.length,u){if(u>o&&(u=o),u>a&&(u=a),u===0)break e;dC.arraySet(n,I,r,u,C),o-=u,r+=u,a-=u,C+=u,i.length-=u;break}i.mode=OA;break;case LCe:for(;A<14;){if(o===0)break e;o--,s+=I[r++]<>>=5,A-=5,i.ndist=(s&31)+1,s>>>=5,A-=5,i.ncode=(s&15)+4,s>>>=4,A-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=Bi;break}i.have=0,i.mode=UCe;case UCe:for(;i.have>>=3,A-=3}for(;i.have<19;)i.lens[X[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,V={bits:i.lenbits},v=mv(u2t,i.lens,0,19,i.lencode,0,i.work,V),i.lenbits=V.bits,v){e.msg="invalid code lengths set",i.mode=Bi;break}i.have=0,i.mode=QCe;case QCe:for(;i.have>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=I[r++]<>>=f,A-=f,i.lens[i.have++]=p;else{if(p===16){for(S=f+2;A>>=f,A-=f,i.have===0){e.msg="invalid bit length repeat",i.mode=Bi;break}G=i.lens[i.have-1],u=3+(s&3),s>>>=2,A-=2}else if(p===17){for(S=f+3;A>>=f,A-=f,G=0,u=3+(s&7),s>>>=3,A-=3}else{for(S=f+7;A>>=f,A-=f,G=0,u=11+(s&127),s>>>=7,A-=7}if(i.have+u>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=Bi;break}for(;u--;)i.lens[i.have++]=G}}if(i.mode===Bi)break;if(i.lens[256]===0){e.msg="invalid code -- missing end-of-block",i.mode=Bi;break}if(i.lenbits=9,V={bits:i.lenbits},v=mv(DVe,i.lens,0,i.nlen,i.lencode,0,i.work,V),i.lenbits=V.bits,v){e.msg="invalid literal/lengths set",i.mode=Bi;break}if(i.distbits=6,i.distcode=i.distdyn,V={bits:i.distbits},v=mv(xVe,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,V),i.distbits=V.bits,v){e.msg="invalid distances set",i.mode=Bi;break}if(i.mode=YV,g===kV)break e;case YV:i.mode=KV;case KV:if(o>=6&&a>=258){e.next_out=C,e.avail_out=a,e.next_in=r,e.avail_in=o,i.hold=s,i.bits=A,c2t(e,c),C=e.next_out,n=e.output,a=e.avail_out,r=e.next_in,I=e.input,o=e.avail_in,s=i.hold,A=i.bits,i.mode===OA&&(i.back=-1);break}for(i.back=0;m=i.lencode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=I[r++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=I[r++]<>>=y,A-=y,i.back+=y}if(s>>>=f,A-=f,i.back+=f,i.length=p,b===0){i.mode=toe;break}if(b&32){i.back=-1,i.mode=OA;break}if(b&64){e.msg="invalid literal/length code",i.mode=Bi;break}i.extra=b&15,i.mode=jCe;case jCe:if(i.extra){for(S=i.extra;A>>=i.extra,A-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=$Ce;case $Ce:for(;m=i.distcode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=I[r++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=I[r++]<>>=y,A-=y,i.back+=y}if(s>>>=f,A-=f,i.back+=f,b&64){e.msg="invalid distance code",i.mode=Bi;break}i.offset=p,i.extra=b&15,i.mode=qCe;case qCe:if(i.extra){for(S=i.extra;A>>=i.extra,A-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=Bi;break}i.mode=eoe;case eoe:if(a===0)break e;if(u=c-a,i.offset>u){if(u=i.offset-u,u>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=Bi;break}u>i.wnext?(u-=i.wnext,d=i.wsize-u):d=i.wnext-u,u>i.length&&(u=i.length),h=i.window}else h=n,d=C-i.offset,u=i.length;u>a&&(u=a),a-=u,i.length-=u;do n[C++]=h[d++];while(--u);i.length===0&&(i.mode=KV);break;case toe:if(a===0)break e;n[C++]=i.length,a--,i.mode=KV;break;case LD:if(i.wrap){for(;A<32;){if(o===0)break e;o--,s|=I[r++]<=0&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),g.windowBits>=0&&g.windowBits<16&&!(e&&e.windowBits)&&(g.windowBits+=32),g.windowBits>15&&g.windowBits<48&&(g.windowBits&15||(g.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new T2t,this.strm.avail_out=0;var i=zp.inflateInit2(this.strm,g.windowBits);if(i!==rI.Z_OK)throw new Error(BP[i]);if(this.header=new N2t,zp.inflateGetHeader(this.strm,this.header),g.dictionary&&(typeof g.dictionary=="string"?g.dictionary=dW.string2buf(g.dictionary):jVe.call(g.dictionary)==="[object ArrayBuffer]"&&(g.dictionary=new Uint8Array(g.dictionary)),g.raw&&(i=zp.inflateSetDictionary(this.strm,g.dictionary),i!==rI.Z_OK)))throw new Error(BP[i])}Zh.prototype.push=function(e,g){var i=this.strm,I=this.options.chunkSize,n=this.options.dictionary,r,C,o,a,s,A=!1;if(this.ended)return!1;C=g===~~g?g:g===!0?rI.Z_FINISH:rI.Z_NO_FLUSH,typeof e=="string"?i.input=dW.binstring2buf(e):jVe.call(e)==="[object ArrayBuffer]"?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new fv.Buf8(I),i.next_out=0,i.avail_out=I),r=zp.inflate(i,rI.Z_NO_FLUSH),r===rI.Z_NEED_DICT&&n&&(r=zp.inflateSetDictionary(this.strm,n)),r===rI.Z_BUF_ERROR&&A===!0&&(r=rI.Z_OK,A=!1),r!==rI.Z_STREAM_END&&r!==rI.Z_OK)return this.onEnd(r),this.ended=!0,!1;i.next_out&&(i.avail_out===0||r===rI.Z_STREAM_END||i.avail_in===0&&(C===rI.Z_FINISH||C===rI.Z_SYNC_FLUSH))&&(this.options.to==="string"?(o=dW.utf8border(i.output,i.next_out),a=i.next_out-o,s=dW.buf2string(i.output,o),i.next_out=a,i.avail_out=I-a,a&&fv.arraySet(i.output,i.output,o,a,0),this.onData(s)):this.onData(fv.shrinkBuf(i.output,i.next_out))),i.avail_in===0&&i.avail_out===0&&(A=!0)}while((i.avail_in>0||i.avail_out===0)&&r!==rI.Z_STREAM_END);return r===rI.Z_STREAM_END&&(C=rI.Z_FINISH),C===rI.Z_FINISH?(r=zp.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===rI.Z_OK):(C===rI.Z_SYNC_FLUSH&&(this.onEnd(rI.Z_OK),i.avail_out=0),!0)};Zh.prototype.onData=function(e){this.chunks.push(e)};Zh.prototype.onEnd=function(e){e===rI.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=fv.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function yj(e,g){var i=new Zh(g);if(i.push(e,!0),i.err)throw i.msg||BP[i.err];return i.result}function k2t(e,g){return g=g||{},g.raw=!0,yj(e,g)}pw.Inflate=Zh;pw.inflate=yj;pw.inflateRaw=k2t;pw.ungzip=yj;var Y2t=al.assign,K2t=hw,F2t=pw,D2t=QVe,$Ve={};Y2t($Ve,K2t,F2t,D2t);var x2t=$Ve;const E2t=Or(x2t);var M2t=["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];const z2t=M2t;function P2t(e){if(typeof e!="string")throw new TypeError("input must be a string");let g=[],i,I,n={LOCUS_TAG:"LOCUS",DEFINITION_TAG:"DEFINITION",ACCESSION_TAG:"ACCESSION",VERSION_TAG:"VERSION",KEYWORDS_TAG:"KEYWORDS",SOURCE_TAG:"SOURCE",ORGANISM_TAG:"ORGANISM",REFERENCE_TAG:"REFERENCE",AUTHORS_TAG:"AUTHORS",CONSORTIUM_TAG:"CONSRTM",TITLE_TAG:"TITLE",JOURNAL_TAG:"JOURNAL",PUBMED_TAG:"PUBMED",REMARK_TAG:"REMARK",FEATURES_TAG:"FEATURES",BASE_COUNT_TAG:"BASE COUNT",ORIGIN_TAG:"ORIGIN",END_SEQUENCE_TAG:"//"},r=e.split(/\r?\n/),C,o,a,s,A,l=!1;for(let R of r){if(R===null)break;let H=v(R),k=V(R),K=X(R),D=S(R);if(H===n.END_SEQUENCE_TAG||D?(C=H,o=null):K&&(o=H),!(R.trim()===""||H===";")){if(!l&&C!==n.LOCUS_TAG)break;switch(C){case n.LOCUS_TAG:l=!0,m(R);break;case n.FEATURES_TAG:p(R,H,k);break;case n.ORIGIN_TAG:h(R,H);break;case n.DEFINITION_TAG:case n.ACCESSION_TAG:case n.VERSION_TAG:case n.KEYWORDS_TAG:w(C,R,C.toLowerCase());break;case n.SOURCE_TAG:o===n.ORGANISM_TAG?w(o,R,"organism"):w(H,R,"source");break;case n.REFERENCE_TAG:if(H===n.REFERENCE_TAG){const J=i.references||[];i.references=J,J.push({})}b(R,o);break;case n.END_SEQUENCE_TAG:c();break}}}return g[g.length-1]!==i&&c(),g;function c(){d(),g.push(i)}function u(){return i.features[i.features.length-1]}function d(){if(i&&i.features)for(let R=0;R0;g--){const i=Math.floor(Math.random()*(g+1)),I=e[g];e[g]=e[i],e[i]=I}return e}function q2t(e){return e.type==="filler"}function eHt(e){const g=e.end-e.start,i=e.strand===1?"+":"-",I=cg.nice();return q2t(e)?{xStart:e.start,xEnd:e.end,strand:e.strand,fields:[],type:"filler",uid:I}:{xStart:e.start,xEnd:e.end,strand:i,chrOffset:0,importance:e.end-e.start,uid:I,type:e.type,fields:["chrom",e.start,e.end,e.name,g,i,"","",e.type,e.name,e.start.toString(),e.end.toString(),e.start.toString(),e.end.toString()]}}function tHt(e){const g=_2t(e),i=$2t(g[0].features.filter(I=>I.type!=="source").sort((I,n)=>I.start-n.start));return{json:g,features:i}}async function gHt(e,{gzipped:g}){if(!g)return e.text();const i=await e.arrayBuffer();return E2t.inflate(i,{to:"string"})}let e1e=function(){function e(g){L2t(this,e),this.dataConfig=g,this.trackUid=cg.nice(),this.errorTxt="";let i;if(g.url){const I=g.url.slice(g.url.length-3);i=fetch(g.url,{mode:"cors",redirect:"follow",method:"GET"}).then(n=>gHt(n,{gzipped:I===".gz"}))}else if(g.text)i=Promise.resolve(g.text);else throw new Error("No data or URL specified");this.gbDataPromise=i.then(I=>tHt(I))}return U2t(e,[{key:"tilesetInfo",value:function(i){return this.tilesetInfoLoading=!0,this.gbDataPromise.then(I=>{this.tilesetInfoLoading=!1;const n=1024,r={name:`genbank-${this.trackUid}`,tile_size:n,max_zoom:Math.ceil(Math.log(I.json[0].size/n)/Math.log(2)),max_width:I.json[0].size,min_pos:[0],max_pos:[I.json[0].size]};return i&&i(r),r}).catch(I=>{this.tilesetInfoLoading=!1,i&&i({error:`Error parsing genbank: ${I}`})})}},{key:"fetchTilesDebounced",value:async function(i,I){const n={},r=[],C=[];for(const a of I){const s=a.split("."),A=parseInt(s[0],10),l=parseInt(s[1],10);if(Number.isNaN(l)||Number.isNaN(A)){console.warn("Invalid tile zoom or position:",A,l);continue}r.push(a),C.push(this.tile(A,l))}const o=await Promise.all(C);for(let a=0;ah.end>o&&h.starth.strand===1),A,"+"),c=Coe(s.filter(h=>h.strand!==1),A,"-"),u=[],d=20;for(let h=0;h=d);h++)r.features[h].end>=o&&r.features[h].start<=a&&u.push(r.features[h]);return[u,l,c].flatMap(h=>h.map(eHt))}}]),e}();function iHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function ooe(e,g){for(var i=0;i`localtile.${C}`);qQ(this.tilesData,"",r);for(const C of I)n[C]=this.tilesData[`localtile.${C}`];return i(n),n}},{key:"tile",value:function(i,I){}}]),e}();function CHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function aoe(e,g){for(var i=0;ir.trackId!==n),this.taskList.push({handler:i,data:I,trackId:n})),this.taskHandle||(this.taskHandle=requestIdleCallback(this.runTaskQueue.bind(this),{timeout:this.requestIdleCallbackTimeout}))}},{key:"runTaskQueue",value:function(i){for(;(i.timeRemaining()>0||i.didTimeout)&&this.taskList.length;){const I=this.taskList.shift();I&&sHt(I)?I.handler():I&&I.handler(I.data)}this.taskList.length?this.taskHandle=requestIdleCallback(this.runTaskQueue.bind(this),{timeout:this.requestIdleCallbackTimeout}):this.taskHandle=0}}]),e}();const cHt=new lHt;function uHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Aoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ps(e){return ps=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},ps(e)}function GHt(e,g,i,I,n){const r=e||n,C=0;return r==="log"&&g>0?["log",Cu().range([254,0]).domain([g+C,I+C])]:["linear",tg().range([254,0]).domain([g,I])]}let mm=function(e){pHt(i,e);var g=bHt(i);function i(I,n){var r;uHt(this,i),r=g.call(this,I,n);const{pubSub:C,dataConfig:o,handleTilesetInfoReceived:a,animate:s,onValueScaleChanged:A}=I;return r.renderVersion=1,r.visibleTiles=new Set,r.visibleTileIds=new Set,r.renderingTiles=new Set,r.fetching=new Set,r.scale={},r.fetchedTiles={},r.tileGraphics={},r.maxZoom=0,r.medianVisibleValue=null,r.backgroundTaskScheduler=cHt,r.continuousScaling="requestIdleCallback"in window,r.valueScaleMin=null,r.fixedValueScaleMin=null,r.valueScaleMax=null,r.fixedValueScaleMax=null,r.listeners={},r.pubSub=C,r.animate=s,r.onValueScaleChanged=A,r.prevValueScale=null,I.dataFetcher?r.dataFetcher=I.dataFetcher:r.dataFetcher=new Xk(o,r.pubSub),r.tilesetInfo=null,r.uuid=cg.nice(),r.trackNotFoundText=new ot.PIXI.Text("",{fontSize:"12px",fontFamily:"Arial",fill:"black"}),r.pLabel.addChild(r.trackNotFoundText),r.refreshTilesDebounced=Zve(r.refreshTiles.bind(wP(r)),vX,vX),r.dataFetcher.tilesetInfo((l,c)=>{if(l){if(r.tilesetInfo=l,r.dataFetcher.dataConfig.tilesetUid||(r.dataFetcher.dataConfig.tilesetUid=c),r.tilesetUid=r.dataFetcher.dataConfig.tilesetUid,r.server=r.dataFetcher.dataConfig.server||"unknown",r.tilesetInfo&&r.tilesetInfo.chromsizes&&(r.chromInfo=FN(r.tilesetInfo.chromsizes)),"error"in r.tilesetInfo){console.warn("Error retrieving tilesetInfo:",o,r.tilesetInfo.error),r.tilesetInfo=null,r.setError(r.tilesetInfo.error);return}r.tilesetInfo.resolutions?r.maxZoom=r.tilesetInfo.resolutions.length:r.maxZoom=+r.tilesetInfo.max_zoom,r.options&&r.options.maxZoom&&(r.options.maxZoom>=0?r.maxZoom=Math.min(r.options.maxZoom,r.maxZoom):console.error("Invalid maxZoom on track:",wP(r))),r.refreshTiles(),a&&a(l),r.options||(r.options={}),r.options.name=r.options.name||l.name,r.checkValueScaleLimits(),r.draw(),r.drawLabel(),r.animate()}}),r}return dHt(i,[{key:"setError",value:function(n){this.errorTextText=n,this.draw(),this.animate()}},{key:"setFixedValueScaleMin",value:function(n){Number.isNaN(+n)?this.fixedValueScaleMin=null:this.fixedValueScaleMin=+n}},{key:"setFixedValueScaleMax",value:function(n){Number.isNaN(+n)?this.fixedValueScaleMax=null:this.fixedValueScaleMax=+n}},{key:"checkValueScaleLimits",value:function(){this.valueScaleMin=typeof this.options.valueScaleMin<"u"?+this.options.valueScaleMin:null,this.fixedValueScaleMin!==null&&(this.valueScaleMin=this.fixedValueScaleMin),this.valueScaleMax=typeof this.options.valueScaleMax<"u"?+this.options.valueScaleMax:null,this.fixedValueScaleMax!==null&&(this.valueScaleMax=this.fixedValueScaleMax)}},{key:"on",value:function(n,r){this.listeners[n]||(this.listeners[n]=[]),this.listeners[n].push(r)}},{key:"off",value:function(n,r){const C=this.listeners[n].indexOf(r);C===-1||C>=this.listeners[n].length||this.listeners[n].splice(C,1)}},{key:"rerender",value:function(n){dd(ps(i.prototype),"rerender",this).call(this,n),this.renderVersion+=1,this.tilesetInfo&&(this.checkValueScaleLimits(),this.tilesetInfo.resolutions?this.maxZoom=this.tilesetInfo.resolutions.length:this.maxZoom=+this.tilesetInfo.max_zoom,this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?this.maxZoom=Math.min(this.options.maxZoom,this.maxZoom):console.error("Invalid maxZoom on track:",this)))}},{key:"visibleAndFetchedIds",value:function(){return Object.keys(this.fetchedTiles).filter(n=>this.visibleTileIds.has(n))}},{key:"visibleAndFetchedTiles",value:function(){return this.visibleAndFetchedIds().map(n=>this.fetchedTiles[n])}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r),mirrored:r.mirrored})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.tileId))}},{key:"removeOldTiles",value:function(){this.calculateVisibleTiles();const r=[...new Set(Object.keys(this.fetchedTiles))].filter(C=>!this.visibleTileIds.has(C));this.removeTiles(r)}},{key:"refreshTiles",value:function(){if(!this.tilesetInfo)return;this.calculateVisibleTiles();const n=new Set(Object.keys(this.fetchedTiles)),r=[...this.visibleTiles].filter(C=>!this.fetching.has(C.remoteId)&&!n.has(C.tileId));for(let C=0;C0;)if(C-=1,o=o.map(s=>Math.floor(s/2)),`${r}.${C}.${o.join(".")}`in this.fetchedTiles)return!0;return!1}},{key:"parentTileId",value:function(n){const r=n.tileData.zoomLevel-1,C=n.tileData.tilePos.map(a=>Math.floor(a/2));return`${n.tileData.tilesetUid}.${r}.${C.join(".")}`}},{key:"removeTiles",value:function(n){!n.length||!this.areAllVisibleTilesLoaded()||this.renderingTiles.size||(n.forEach(r=>{const C=r;this.destroyTile(this.fetchedTiles[C]),C in this.tileGraphics&&(this.pMain.removeChild(this.tileGraphics[C]),delete this.tileGraphics[C]),delete this.fetchedTiles[C]}),this.synchronizeTilesAndGraphics(),this.draw())}},{key:"zoomed",value:function(n,r,C=1,o=0,a=0){this.xScale(n),this.yScale(r),this.refreshTilesDebounced(),this.pMobile.position.x=o,this.pMobile.position.y=this.position[1],this.pMobile.scale.x=C,this.pMobile.scale.y=1}},{key:"setPosition",value:function(n){dd(ps(i.prototype),"setPosition",this).call(this,n)}},{key:"setDimensions",value:function(n){dd(ps(i.prototype),"setDimensions",this).call(this,n)}},{key:"areAllVisibleTilesLoaded",value:function(){const n=new Set(Object.keys(this.fetchedTiles)),r=[...this.visibleTileIds];for(let C=0;Cr.tileData))}},{key:"loadTileData",value:function(n,r){let C=this.lruCache.get(n.tileId);return C||(C=r(n.data,n.type),this.lruCache.put(n.tileId,C)),C}},{key:"fetchNewTiles",value:function(n){if(n.length>0){const r=[...new Set(n.map(C=>C.remoteId))];this.dataFetcher.fetchTilesDebounced(this.receivedTiles.bind(this),r)}}},{key:"receivedTiles",value:function(n){for(let r=0;rNumber.isNaN(+a)).forEach(a=>{this.fetchedTiles[C].tileData[a]=o[a]})}else this.fetchedTiles[C].tileData={...n[this.visibleTiles[r].remoteId]};this.fetchedTiles[C].tileData.error&&console.warn("Error in loaded tile",C,this.fetchedTiles[C].tileData)}}for(const r in n)if(n[r]){const C=n[r].tilePositionId;this.fetching.has(C)&&this.fetching.delete(C)}this.synchronizeTilesAndGraphics(),this.draw(),this.drawLabel(),this.valueScale&&(!this.prevValueScale||JSON.stringify(this.valueScale.domain())!==JSON.stringify(this.prevValueScale.domain()))&&(this.prevValueScale=this.valueScale.copy(),this.onValueScaleChanged&&this.onValueScaleChanged()),this.animate(),this.areAllVisibleTilesLoaded()&&this.pubSub&&this.pubSub.publish("TiledPixiTrack.tilesLoaded",{uuid:this.uuid})}},{key:"draw",value:function(){if(this.delayDrawing)return;this.tilesetInfo?this.trackNotFoundText.visible=!1:(this.dataFetcher.tilesetInfoLoading?this.trackNotFoundText.text="Loading...":this.trackNotFoundText.text=`Tileset info not found. Server: [${this.server}] tilesetUid: [${this.tilesetUid}]`,[this.trackNotFoundText.x,this.trackNotFoundText.y]=this.position,this.flipText&&(this.trackNotFoundText.anchor.x=1,this.trackNotFoundText.scale.x=-1),this.trackNotFoundText.visible=!0),this.pubSub&&this.pubSub.publish("TiledPixiTrack.tilesDrawnStart",{uuid:this.uuid});const n=Object.values(this.fetchedTiles).map(r=>r.tileData&&r.tileData.error&&`${r.tileId}: ${r.tileData.error}`).filter(r=>r);n.length?this.errorTextText=n.join(` +`):this.errorTextText="",dd(ps(i.prototype),"draw",this).call(this),Object.keys(this.fetchedTiles).forEach(r=>{this.drawTile(this.fetchedTiles[r])}),this.pubSub&&this.pubSub.publish("TiledPixiTrack.tilesDrawnEnd",{uuid:this.uuid})}},{key:"drawTile",value:function(){}},{key:"calculateMedianVisibleValue",value:function(){this.areAllVisibleTilesLoaded()&&this.allTilesLoaded();let n=this.visibleAndFetchedIds();n.length===0&&(n=Object.keys(this.fetchedTiles));const r=[].concat(...n.filter(C=>this.fetchedTiles[C].tileData.dense).map(C=>Array.from(this.fetchedTiles[C].tileData.dense))).filter(C=>C>0);return this.medianVisibleValue=_7(r),this.medianVisibleValue}},{key:"allVisibleValues",value:function(){return[].concat(...this.visibleAndFetchedIds().map(n=>Array.from(this.fetchedTiles[n].tileData.dense)))}},{key:"minVisibleValue",value:function(n=!1){return this.minVisibleValueInTiles(n)}},{key:"minVisibleValueInTiles",value:function(n=!1){let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));let C=Math.min(...r.map(o=>this.fetchedTiles[o].tileData.minNonZero));return C===Number.MAX_SAFE_INTEGER&&(C=null),n?C:this.valueScaleMin!==null?this.valueScaleMin:C}},{key:"maxVisibleValue",value:function(n=!1){return this.maxVisibleValueInTiles(n)}},{key:"maxVisibleValueInTiles",value:function(n=!1){let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));let C=Math.max(...r.map(o=>this.fetchedTiles[o].tileData.maxNonZero));return C===Number.MIN_SAFE_INTEGER&&(C=null),n?C:this.valueScaleMax!==null?this.valueScaleMax:C}},{key:"makeValueScale",value:function(n,r,C,o){let a=null,s=0,A=o;(A===null||typeof A>"u")&&(A=6);let l=Math.min(this.dimensions[1]-A,A),c=Math.max(this.dimensions[1]-A,A);if(this.dimensions[1]-Arh(u,d,m),[h,0]}else if(this.options.valueScaling==="setquantile"){const u=this.dimensions[1]-A,d=A,h=new Set(this.allVisibleValues()),m=oX().domain([...h]).range(nr(u,d,(d-u)/256));return m.ticks=f=>rh(u,d,f),[m,0]}else a=tg().domain([n,C]).range([c,l]);return[a,s]}}]),i}(fr);function vHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function soe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Yi(e){return Yi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Yi(e)}const loe=200,Fl=10,IG=40,Tn=10,Dl=Tn,coe=4,yf=1,xl=4,uoe=5,THt=256,mZ=Fl+IG+Tn+yf+Dl+xl;let bw=function(e){VHt(i,e);var g=WHt(i);function i(I,n){var r;vHt(this,i);const C={...I};C.onValueScaleChanged=()=>{I.onValueScaleChanged(),r.drawColorbar()},r=g.call(this,C,n);const{pubSub:o,animate:a,svgElement:s,onTrackOptionsChanged:A,onMouseMoveZoom:l,isShowGlobalMousePosition:c,isValueScaleLocked:u}=I;return r.pubSub=o,r.is2d=!0,r.animate=a,r.uid=cg.nice(),r.scaleBrush=QS(),r.onTrackOptionsChanged=A,r.isShowGlobalMousePosition=c,r.isValueScaleLocked=u,r.pColorbarArea=new ot.PIXI.Graphics,r.pMasked.addChild(r.pColorbarArea),r.pColorbar=new ot.PIXI.Graphics,r.pColorbarArea.addChild(r.pColorbar),r.axis=new Vk(hW(r)),r.pColorbarArea.addChild(r.axis.pAxis),r.colorScale=Yb,n&&n.colorRange&&(r.colorScale=_c(n.colorRange)),r.gBase=hg(s).append("g"),r.gMain=r.gBase.append("g"),r.gColorscaleBrush=r.gMain.append("g"),r.brushing=!1,r.prevOptions="",r.prevIndUpperLeftTile="",r.onMouseMoveZoom=l,r.setDataLensSize(11),r.dataLens=new Float32Array(r.dataLensSize**2),r.mouseMoveHandlerBound=r.mouseMoveHandler.bind(hW(r)),r.onMouseMoveZoom&&r.pubSubs.push(r.pubSub.subscribe("app.mouseMove",r.mouseMoveHandlerBound)),r.options&&r.options.showMousePosition&&!r.hideMousePosition&&(r.hideMousePosition=sh(hW(r),r.is2d,r.isShowGlobalMousePosition())),r.prevOptions=JSON.stringify(n),r}return BHt(i,[{key:"mouseMoveHandler",value:function(n){this.isWithin(n.x,n.y)&&(this.mouseX=n.x,this.mouseY=n.y,this.mouseMoveZoomHandler())}},{key:"mouseMoveZoomHandler",value:function(n=this.mouseX,r=this.mouseY){if(typeof n>"u"||typeof r>"u"||!this.areAllVisibleTilesLoaded()||!this.tilesetInfo)return;const C=n-this.position[0],o=r-this.position[1];let a,s;try{s=this.getVisibleRectangleData(C-this.dataLensPadding,o-this.dataLensPadding,this.dataLensSize,this.dataLensSize),a=s.get(this.dataLensPadding,this.dataLensPadding)}catch{return}const A=this.dataLensSize;let l;try{l=n4(this.limitedValueScale,this.colorScale,this.valueScale.domain()[0])}catch{return}if(!l)return;const c=Math.round(this._xScale.invert(C)),u=Math.round(this._yScale.invert(o));let d=[c,u],h=[Math.round(this._xScale.invert(C-this.dataLensPadding)),Math.round(this._xScale.invert(C+this.dataLensPadding))],m=[Math.round(this._yScale.invert(o-this.dataLensPadding)),Math.round(this._yScale.invert(o+this.dataLensPadding))];this.chromInfo&&(d=d.map(f=>TI(f,this.chromInfo).slice(0,2)),h=h.map(f=>TI(f,this.chromInfo).slice(0,2)),m=m.map(f=>TI(f,this.chromInfo).slice(0,2))),this.onMouseMoveZoom({trackId:this.id,data:a,absX:n,absY:r,relX:C,relY:o,dataX:c,dataY:u,orientation:"2d",dataLens:s,dim:A,toRgb:l,center:d,xRange:h,yRange:m,isGenomicCoords:!!this.chromInfo})}},{key:"scheduleRerender",value:function(){this.backgroundTaskScheduler.enqueueTask(this.handleRerender.bind(this),null,this.uuid)}},{key:"handleRerender",value:function(){this.rerender(this.options,!0)}},{key:"getAbsTileDim",value:function(n,r,C){const{tileX:o,tileY:a,tileWidth:s,tileHeight:A}=this.getTilePosAndDimensions(n,r),l={};return l.width=this._refXScale(o+s)-this._refXScale(o),l.height=this._refYScale(a+A)-this._refYScale(a),C?(l.x=this._refXScale(a),l.y=this._refYScale(o)):(l.x=this._refXScale(o),l.y=this._refYScale(a)),l}},{key:"updateValueScale",value:function(){let n=this.minValue(),r=this.maxValue();const C=1e-6;n!=null&&r!==void 0&&r!==null&&Math.abs(n-r)this.renderTile(o)),this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0),this.options&&this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=sh(this,this.is2d,this.isShowGlobalMousePosition())))}},{key:"drawLabel",value:function(){this.options.labelPosition===this.options.colorbarPosition?this.labelXOffset=mZ:this.labelXOffset=0,CI(Yi(i.prototype),"drawLabel",this).call(this)}},{key:"tileDataToCanvas",value:function(n){const r=document.createElement("canvas");r.width=this.binsPerTile(),r.height=this.binsPerTile();const C=r.getContext("2d");C.fillStyle="transparent",C.fillRect(0,0,r.width,r.height);const o=new ImageData(n,r.width,r.height);return C.putImageData(o,0,0),r}},{key:"exportData",value:function(){if(this.tilesetInfo){const n=this.getVisibleRectangleData(0,0,this.dimensions[0],this.dimensions[1]),r={bounds:[this._xScale.domain(),this._yScale.domain()],dimensions:n.shape,data:fve(n)};LG("data.json",JSON.stringify(r))}}},{key:"setSpriteProperties",value:function(n,r,C,o){const a=this.getAbsTileDim(r,C,o);n.width=a.width,n.height=a.height,n.x=a.x,n.y=a.y,o&&C[0]!==C[1]&&(n.rotation=-Math.PI/2,n.scale.x=Math.abs(n.scale.x)*-1)}},{key:"refXScale",value:function(n){CI(Yi(i.prototype),"refXScale",this).call(this,n),this.draw()}},{key:"refYScale",value:function(n){CI(Yi(i.prototype),"refYScale",this).call(this,n),this.draw()}},{key:"draw",value:function(){CI(Yi(i.prototype),"draw",this).call(this)}},{key:"newBrushOptions",value:function(n){const r=JSON.parse(JSON.stringify(this.options)),C=this.valueScale.copy().range([this.colorbarHeight,0]),o=C.invert(n[0]),s=(C.invert(n[1])-C.domain()[0])/(C.domain()[1]-C.domain()[0]),A=(o-C.domain()[0])/(C.domain()[1]-C.domain()[0]);return r.scaleStartPercent=s.toFixed(uoe),r.scaleEndPercent=A.toFixed(uoe),r}},{key:"brushStart",value:function(){this.brushing=!0}},{key:"brushMoved",value:function(n){if(!n.selection)return;const r=this.newBrushOptions(n.selection),C=JSON.stringify(r);this.gColorscaleBrush.selectAll(".handle--custom").attr("y",o=>o.type==="n"?n.selection[0]:n.selection[1]-coe/2),C!==this.prevOptions&&(this.prevOptions=C,this.rerender(r,!0),this.onTrackOptionsChanged(r),this.isValueScaleLocked()&&this.onValueScaleChanged())}},{key:"brushEnd",value:function(){this.brushing=!1}},{key:"setPosition",value:function(n){CI(Yi(i.prototype),"setPosition",this).call(this,n),this.drawColorbar()}},{key:"setDimensions",value:function(n){CI(Yi(i.prototype),"setDimensions",this).call(this,n),this.drawColorbar()}},{key:"removeColorbar",value:function(){this.pColorbarArea.visible=!1,this.scaleBrush.on(".brush")&&this.gColorscaleBrush.call(this.scaleBrush.move,null),this.gColorscaleBrush.on(".brush",null),this.gColorscaleBrush.selectAll("rect").remove()}},{key:"drawColorbar",value:function(){if(this.pColorbar.clear(),!this.options||!this.options.colorbarPosition||this.options.colorbarPosition==="hidden"){this.removeColorbar();return}if(this.pColorbarArea.visible=!0,!this.valueScale||Number.isNaN(+this.valueScale.domain()[0])||Number.isNaN(+this.valueScale.domain()[1]))return;const n=Math.min(this.dimensions[1]/2,loe);if(this.colorbarHeight=n-2*Tn,this.colorbarHeight<0){this.removeColorbar();return}if(this.valueScale.domain()[1]===this.valueScale.domain()[0]){this.removeColorbar();return}const r=this.valueScale.copy().range([this.colorbarHeight,0]);this.options.colorbarPosition==="topLeft"||this.options.colorbarPosition==="bottomLeft"?this.scaleBrush.extent([[xl,0],[Dl,this.colorbarHeight]]):this.scaleBrush.extent([[0,0],[Dl-xl,this.colorbarHeight]]),this.options.colorbarPosition==="topLeft"&&([this.pColorbarArea.x,this.pColorbarArea.y]=this.position,this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=xl+Dl+yf+Fl,this.pColorbar.x=xl+Dl+yf,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+xl},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.options.colorbarPosition==="topRight"&&(this.pColorbarArea.x=this.position[0]+this.dimensions[0]-mZ,this.pColorbarArea.y=this.position[1],this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=IG+Tn,this.pColorbar.x=IG+Tn,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+this.pColorbar.x+Fl+2},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.options.colorbarPosition==="bottomRight"&&(this.pColorbarArea.x=this.position[0]+this.dimensions[0]-mZ,this.pColorbarArea.y=this.position[1]+this.dimensions[1]-n,this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=IG+Tn,this.pColorbar.x=IG+Tn,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+this.pColorbar.x+Fl+yf},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.options.colorbarPosition==="bottomLeft"&&(this.pColorbarArea.x=this.position[0],this.pColorbarArea.y=this.position[1]+this.dimensions[1]-n,this.pColorbar.y=Tn,this.axis.pAxis.y=Tn,this.axis.pAxis.x=xl+Dl+yf+Fl,this.pColorbar.x=xl+Dl+yf,this.gColorscaleBrush.attr("transform",`translate(${this.pColorbarArea.x+2},${this.pColorbarArea.y+this.pColorbar.y-1})`)),this.pColorbarArea.clear(),this.pColorbarArea.beginFill(Kt(this.options.colorbarBackgroundColor||"white"),+this.options.colorbarBackgroundOpacity>=0?+this.options.colorbarBackgroundOpacity:.6),this.pColorbarArea.drawRect(0,0,mZ,n),this.options?(this.options.scaleStartPercent||(this.options.scaleStartPercent=0),this.options.scaleEndPercent||(this.options.scaleEndPercent=1)):this.options={scaleStartPercent:0,scaleEndPercent:1};const C=r.domain()[1]-r.domain()[0],o=r(this.options.scaleStartPercent*C+r.domain()[0]),a=r(this.options.scaleEndPercent*C+r.domain()[0]);this.brushing||(this.scaleBrush.on("start",this.brushStart.bind(this)).on("brush",this.brushMoved.bind(this)).on("end",this.brushEnd.bind(this)).handleSize(0),this.gColorscaleBrush.on(".brush",null),this.gColorscaleBrush.call(this.scaleBrush),this.northHandle=this.gColorscaleBrush.selectAll(".handle--custom").data([{type:"n"},{type:"s"}]).enter().append("rect").classed("handle--custom",!0).attr("cursor","ns-resize").attr("width",Dl).attr("height",coe).style("fill","#666").style("stroke","white"),this.flipText&&this.northHandle.attr("cursor","ew-resize"),this.gColorscaleBrush.call(this.scaleBrush.move,[a,o]));const s=tg().domain([0,255]).range([0,this.colorbarHeight]);for(let A=0;A{const Z=y.mirrored?[y.tileData.tilePos[1],y.tileData.tilePos[0]]:y.tileData.tilePos,{tileX:B,tileY:G,tileWidth:v,tileHeight:w}=this.getTilePosAndDimensions(y.tileData.zoomLevel,Z,this.binsPerTile()),V=Math.floor(B/A),S=Math.floor((B+v)/A),X=Math.floor(G/A),W=Math.floor((G+w)/A);let R=Math.max(h,V)-V,H=Math.max(m,X)-X;const k=Math.min(h+f,S)-V,K=Math.min(m+b,W)-X,D=Math.max(V-h,0),J=Math.max(X-m,0),P=k-R,te=K-H;if(!(P<0||te<0)){if(y.mirrored&&R>H){const q=R;R=H,H=q}dve(p.hi(J+te,D+P).lo(J,D),y.dataArray.hi(H+te,R+P).lo(H,R))}}),p}},{key:"initTile",value:function(n){CI(Yi(i.prototype),"initTile",this).call(this,n),n.tileData.dense.length===this.binsPerTile()**2&&(n.dataArray=kp(Array.from(n.tileData.dense),[this.binsPerTile(),this.binsPerTile()]),this.continuousScaling&&n.tileData.tilePos[0]===n.tileData.tilePos[1]&&n.mirrored&&(n.tileData.denseDataExtrema.mirrorPrecomputedExtrema(),CI(Yi(i.prototype),"initTile",this).call(this,n))),!(this.scale.minValue===null||this.scale.maxValue===null)&&this.renderTile(n)}},{key:"updateTile",value:function(n){n.scale&&this.scale&&this.scale.minValue===n.scale.minValue&&this.scale.maxValue===n.scale.maxValue||(this.renderTile(n),this.drawColorbar())}},{key:"destroyTile",value:function(n){n.sprite.destroy(!0),n.canvas=null,n.sprite=null,n.texture=null}},{key:"pixDataFunction",value:function(n,r){if(r){const{graphics:C}=n,o=this.tileDataToCanvas(r.pixData);n.sprite&&n.sprite.destroy(!0);const a=ot.PIXI.VERSION[0]==="4"?ot.PIXI.Texture.fromCanvas(o,ot.PIXI.SCALE_MODES.NEAREST):ot.PIXI.Texture.from(o,{scaleMode:ot.PIXI.SCALE_MODES.NEAREST}),s=new ot.PIXI.Sprite(a);n.sprite=s,n.texture=a,n.canvas=o,this.setSpriteProperties(n.sprite,n.tileData.zoomLevel,n.tileData.tilePos,n.mirrored),C.removeChildren(),C.addChild(n.sprite)}this.renderingTiles.delete(n.tileId)}},{key:"renderTile",value:function(n){const[r]=this.updateValueScale(),C=0;if(this.renderingTiles.add(n.tileId),this.tilesetInfo.tile_size&&n.tileData.dense.lengththis.pixDataFunction(n,o),this.mirrorTiles()&&!n.mirrored&&n.tileData.tilePos[0]===n.tileData.tilePos[1],this.options.extent==="upper-right"&&n.tileData.tilePos[0]===n.tileData.tilePos[1],this.options.zeroValueColor?jGe(this.options.zeroValueColor):void 0,{selectedRows:this.options.selectRows,selectedRowsAggregationMode:this.options.selectRowsAggregationMode,selectedRowsAggregationWithRelativeHeight:this.options.selectRowsAggregationWithRelativeHeight,selectedRowsAggregationMethod:this.options.selectRowsAggregationMethod})}},{key:"remove",value:function(){this.gMain.remove(),this.gMain=null,CI(Yi(i.prototype),"remove",this).call(this)}},{key:"refScalesChanged",value:function(n,r){CI(Yi(i.prototype),"refScalesChanged",this).call(this,n,r),KN(this.fetchedTiles).filter(C=>C.sprite).forEach(C=>this.setSpriteProperties(C.sprite,C.tileData.zoomLevel,C.tileData.tilePos,C.mirrored))}},{key:"superSVG",value:function(){return CI(Yi(i.prototype),"exportSVG",this).call(this)}},{key:"exportSVG",value:function(){let n=null,r=null;CI(Yi(i.prototype),"exportSVG",this)?[r,n]=CI(Yi(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r);const C=document.createElement("g");n.appendChild(C),C.setAttribute("transform",`translate(${this.pMain.position.x},${this.pMain.position.y}) scale(${this.pMain.scale.x},${this.pMain.scale.y})`);for(const a of this.visibleAndFetchedTiles()){const s=a.sprite.rotation*180/Math.PI,A=document.createElement("g");A.setAttribute("transform",`translate(${a.sprite.x},${a.sprite.y}) rotate(${s}) scale(${a.sprite.scale.x},${a.sprite.scale.y})`);const l=document.createElement("image");l.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a.canvas.toDataURL()),l.setAttribute("width",a.canvas.width),l.setAttribute("height",a.canvas.height),l.setAttribute("style","image-rendering: pixelated"),A.appendChild(l),C.appendChild(A)}const o=this.exportColorBarSVG();return n.appendChild(o),[r,r]}},{key:"getVisiblePartOfUppLeftTile",value:function(){const n=this.visibleAndFetchedTiles().map(d=>{const h=d.mirrored?[d.tileData.tilePos[1],d.tileData.tilePos[0]]:d.tileData.tilePos;return[h[0],h[1],d.tileId]});if(n.length===0)return null;let r=n[0];for(let d=0;dd.tileId===r[2])[0],s=this.getIndicesOfVisibleDataInTile(a),A=s[0],l=s[1],c=A-A%o,u=l-l%o;return[a.tileId,c,u]}},{key:"getIndicesOfVisibleDataInTile",value:function(n){const r=this._xScale.range(),C=this._yScale.range(),o=n.mirrored?[n.tileData.tilePos[1],n.tileData.tilePos[0]]:n.tileData.tilePos,{tileX:a,tileY:s,tileWidth:A,tileHeight:l}=this.getTilePosAndDimensions(n.tileData.zoomLevel,o,this.binsPerTile()),c=tg().domain([0,this.binsPerTile()]).range([a,a+A]),u=Math.max(0,Math.round(c.invert(this._xScale.invert(r[0])))-1),d=Math.min(this.binsPerTile(),Math.round(c.invert(this._xScale.invert(r[1])))),h=tg().domain([0,this.binsPerTile()]).range([s,s+l]),m=Math.max(0,Math.round(h.invert(this._yScale.invert(C[0])))-1),f=Math.min(this.binsPerTile(),Math.round(h.invert(this._yScale.invert(C[1]))));return n.mirrored&&o[0]!==o[1]?[m,u,f,d]:[u,m,d,f]}},{key:"minVisibleValue",value:function(n=!1){const r=this.visibleAndFetchedTiles().map(o=>{if(o.tileData.denseDataExtrema===void 0)return null;const a=this.getIndicesOfVisibleDataInTile(o);return o.tileData.denseDataExtrema.getMinNonZeroInSubset(a)});if(r.length===0&&this.valueScaleMax===null)return null;const C=Math.min.apply(null,r);return C===Number.MAX_SAFE_INTEGER?CI(Yi(i.prototype),"minVisibleValue",this).call(this,n):n?C:this.valueScaleMin!==null?this.valueScaleMin:C}},{key:"maxVisibleValue",value:function(n=!1){const r=this.visibleAndFetchedTiles().map(o=>{if(o.tileData.denseDataExtrema===void 0)return null;const a=this.getIndicesOfVisibleDataInTile(o);return o.tileData.denseDataExtrema.getMaxNonZeroInSubset(a)});if(r.length===0&&this.valueScaleMax===null)return null;const C=Math.max.apply(null,r);return C===Number.MIN_SAFE_INTEGER?CI(Yi(i.prototype),"maxVisibleValue",this).call(this,n):n?C:this.valueScaleMax!==null?this.valueScaleMax:C}},{key:"zoomed",value:function(n,r,C,o,a){if(this.brushing)return;CI(Yi(i.prototype),"zoomed",this).call(this,n,r),this.pMain.position.x=o,this.pMain.position.y=a,this.pMain.scale.x=C,this.pMain.scale.y=C;const s=this.isValueScaleLocked();if(this.continuousScaling&&this.minValue()!==void 0&&this.maxValue()!==void 0){const A=JSON.stringify(this.getVisiblePartOfUppLeftTile());if(this.valueScaleMin===null&&this.valueScaleMax===null&&!s&&A!==this.prevIndUpperLeftTile){const l=this.minVisibleValue(),c=this.maxVisibleValue(),u=1e-6;l!==null&&c!==null&&(Math.abs(this.minValue()-l)>u||Math.abs(this.maxValue()-c)>u)&&(this.minValue(l),this.maxValue(c),this.scheduleRerender()),this.prevIndUpperLeftTile=A}s&&this.onValueScaleChanged()}this.mouseMoveZoomHandler()}},{key:"addTileId",value:function(n,r,C,o,a,s=!1){const A=[r,C,o];A.mirrored=s,A.dataTransform=a,n.push(A)}},{key:"tilesToId",value:function(n,r,C){const o=n,a=r,s=this.options&&this.options.dataTransform||"default",A=[];for(let l=0;l=a[c]?this.options.extent!=="lower-left"&&this.addTileId(A,C,a[c],o[l],s,!0):this.options.extent!=="upper-right"&&this.addTileId(A,C,o[l],a[c],s),o[l]===a[c]&&this.options.extent==="lower-left"&&this.addTileId(A,C,o[l],a[c],s)):this.addTileId(A,C,o[l],a[c],s);return A}},{key:"calculateVisibleTiles",value:function(){if(this.tilesetInfo){if(this.zoomLevel=this.calculateZoomLevel(),this.tilesetInfo.resolutions){const n=this.tilesetInfo.resolutions.map(r=>+r).sort((r,C)=>C-r);this.xTiles=vt.calculateTilesFromResolution(n[this.zoomLevel],this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),this.yTiles=vt.calculateTilesFromResolution(n[this.zoomLevel],this._yScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0])}else this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.options.reverseYAxis?-this.tilesetInfo.max_pos[1]:this.tilesetInfo.min_pos[1],this.options.reverseYAxis?-this.tilesetInfo.min_pos[1]:this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width1||this.tilesetInfo.max_width);this.setVisibleTiles(this.tilesToId(this.xTiles,this.yTiles,this.zoomLevel))}}},{key:"mirrorTiles",value:function(){return!(this.tilesetInfo.mirror_tiles&&(this.tilesetInfo.mirror_tiles===!1||this.tilesetInfo.mirror_tiles==="false"))}},{key:"getMouseOverHtml",value:function(n,r){if(!this.options||!this.options.showTooltip||!this.tilesetInfo)return"";const C=vt.calculateResolution(this.tilesetInfo,this.zoomLevel),o=Math.max(this.tilesetInfo.max_pos[1]-this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[0]-this.tilesetInfo.min_pos[0]),a=Math.ceil(Math.log(o/C)/Math.log(10));this.setDataLensSize(1);const s=this._xScale.invert(n),A=this._yScale.invert(r);let l="Position: ";if(this.chromInfo){const u=TI(s,this.chromInfo),d=TI(A,this.chromInfo),h=m=>mC(`.${a}s`)(m);l+=`${u[0]}:${h(u[1])} & ${d[0]}:${h(d[1])}`,l+="
"}let c=null;try{c=this.getVisibleRectangleData(n,r,1,1).get(0,0)}catch{return""}return this.options&&this.options.heatmapValueScaling==="log"?c>0?`${l}Value: 1e${mC(".3f")(Math.log(c)/Math.log(10))}`:c===0?`${l}Value: 0`:`${l}Value: N/A`:`${l}Value: ${mC(".3f")(c)}`}},{key:"getTilePosAndDimensions",value:function(n,r,C){const o=C||this.binsPerTile();if(this.tilesetInfo.resolutions){const f=this.tilesetInfo.resolutions.map(B=>+B).sort((B,G)=>G-B)[n],b=f*o,p=b,y=f*o*r[0],Z=f*o*r[1];return{tileX:y,tileY:Z,tileWidth:b,tileHeight:p}}const a=r[0],s=r[1],A=this.tilesetInfo.min_pos[0],l=this.options.reverseYAxis?-this.tilesetInfo.max_pos[1]:this.tilesetInfo.min_pos[1],c=this.tilesetInfo.max_width/2**n,u=this.tilesetInfo.max_width/2**n,d=A+a*c,h=l+s*u;return{tileX:d,tileY:h,tileWidth:c,tileHeight:u}}},{key:"calculateZoomLevel",value:function(){const n=this.tilesetInfo.min_pos[0],r=this.tilesetInfo.max_pos[0],C=this.tilesetInfo.min_pos[1],o=this.tilesetInfo.max_pos[1];let a=null;if(this.tilesetInfo.resolutions){const s=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,n,r),A=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._yScale,C,o);a=Math.min(s,A)}else{const s=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.binsPerTile()),A=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.binsPerTile());a=Math.max(s,A),a=Math.min(a,this.maxZoom)}return this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?a=Math.min(this.options.maxZoom,a):console.error("Invalid maxZoom on track:",this)),a}},{key:"tileToLocalId",value:function(n){return n.dataTransform&&n.dataTransform!=="default"?`${n.join(".")}.${n.mirrored}.${n.dataTransform}`:`${n.join(".")}.${n.mirrored}`}},{key:"tileToRemoteId",value:function(n){return n.dataTransform&&n.dataTransform!=="default"?`${n.join(".")}.${n.dataTransform}`:`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const r=n.split(".");return r.slice(0,r.length-1).join(".")}}]),i}(mm);function NHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function doe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function i2(e){return i2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},i2(e)}function g1e(e){if(!e.graphics)return;const g=e.graphics,{tileX:i,tileY:I,tileWidth:n}=this.getTilePosAndDimensions(e.tileData.zoomLevel,e.tileData.tilePos);e.drawnAtScale=this._xScale.copy();const r=1/((this._xScale(1)-this._xScale(0))/(this._refXScale(1)-this._refXScale(0))),C=1/((this._yScale(1)-this._yScale(0))/(this._refYScale(1)-this._refYScale(0)));e.text.scale.x=r,e.text.scale.y=C;const o=this._xScale(n)-this._xScale(0);if(e.textGraphics.scale.x=o/256,e.textGraphics.scale.y=o/256,g.clear(),g.lineStyle(4*r,255,1),g.beginFill(16740363,.4),g.alpha=.5,e.mirrored){const a=this._refXScale(I+n)-this._refXScale(I),s=this._refYScale(i+n)-this._refYScale(i);e.textGraphics.position.x=this._refXScale(I)+a/2,e.textGraphics.position.y=this._refYScale(i)+s/2,g.drawRect(this._refXScale(I),this._refYScale(i),a,s)}else{const a=this._refXScale(i+n)-this._refXScale(i),s=this._refYScale(I+n)-this._refYScale(I);e.textGraphics.position.x=this._refXScale(i)+a/2,e.textGraphics.position.y=this._refYScale(I)+s/2,g.drawRect(this._refXScale(i),this._refYScale(I),a,s)}}function i1e(e){const g=e.graphics;e.textGraphics=new ot.PIXI.Graphics,e.mirrored?e.text=new ot.PIXI.Text(`${e.tileData.zoomLevel}/${[e.tileData.tilePos[1],e.tileData.tilePos[0]].join("/")}`,{fontFamily:"Arial",fontSize:24,fill:16715792,align:"center"}):e.text=new ot.PIXI.Text(`${e.tileData.zoomLevel}/${e.tileData.tilePos.join("/")}`,{fontFamily:"Arial",fontSize:24,fill:16715792,align:"center"}),e.textGraphics.addChild(e.text),e.text.anchor.x=.5,e.text.anchor.y=.5,g.addChild(e.textGraphics)}let I1e=function(e){FHt(i,e);var g=DHt(i);function i(){return NHt(this,i),g.apply(this,arguments)}return kHt(i,[{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"initTile",value:function(n){i1e.bind(this)(n),this.drawTile(n)}},{key:"destroyTile",value:function(n,r){}},{key:"drawTile",value:function(n){g1e.bind(this)(n)}},{key:"fetchNewTiles",value:function(n){n.forEach(r=>{const o=r.remoteId.split("."),a={zoomLevel:o[0],tilePos:o.slice(1,o.length).map(s=>+s)};this.fetchedTiles[r.tileId]=r,this.fetchedTiles[r.tileId].tileData=a,this.fetching.has(r.remoteId)&&this.fetching.delete(r.remoteId)}),this.synchronizeTilesAndGraphics()}}]),i}(bw);function zHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gh(e){return Gh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Gh(e)}const $Ht=1024;let Zj=function(e){LHt(i,e);var g=UHt(i);function i(I,n){var r;zHt(this,i),r=g.call(this,I,n);const{onMouseMoveZoom:C,isValueScaleLocked:o,getLockGroupExtrema:a}=I;return r.onMouseMoveZoom=C,r.isValueScaleLocked=o,r.getLockGroupExtrema=a,r.onMouseMoveZoom&&r.pubSubs.push(r.pubSub.subscribe("app.mouseMove",r.mouseMoveHandler.bind(n1e(r)))),r}return PHt(i,[{key:"initTile",value:function(n){pv(Gh(i.prototype),"initTile",this).call(this,n)}},{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"relevantScale",value:function(){return null}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r)})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.tileId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;if(this.zoomLevel=this.calculateZoomLevel(),this.tilesetInfo.resolutions){const C=this.tilesetInfo.resolutions.map(s=>+s).sort((s,A)=>A-s),a=vt.calculateTilesFromResolution(C[this.zoomLevel],this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]).map(s=>[this.zoomLevel,s]);this.setVisibleTiles(a);return}const r=vt.calculateTiles(this.zoomLevel,this.relevantScale(),this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width).map(C=>[this.zoomLevel,C]);this.setVisibleTiles(r)}},{key:"getTilePosAndDimensions",value:function(n,r,C){const o=r[0],a=r[0];if(this.tilesetInfo.resolutions){const f=C||$Ht,p=this.tilesetInfo.resolutions.map(v=>+v).sort((v,w)=>w-v)[n],y=p*f,Z=y,B=p*f*r[0],G=p*f*r[1];return{tileX:B,tileY:G,tileWidth:y,tileHeight:Z}}const s=this.tilesetInfo.max_width,A=this.tilesetInfo.max_width,l=this.tilesetInfo.min_pos[0],c=this.tilesetInfo.min_pos[1],u=s/2**n,d=A/2**n,h=l+o*u,m=c+a*d;return{tileX:h,tileY:m,tileWidth:u,tileHeight:d}}},{key:"updateTile",value:function(n){}},{key:"scheduleRerender",value:function(){this.backgroundTaskScheduler.enqueueTask(this.handleRerender.bind(this),null,this.uuid)}},{key:"handleRerender",value:function(){this.rerender(this.options,!1)}},{key:"getIndicesOfVisibleDataInTile",value:function(n){const r=this._xScale.range();if(!this.tilesetInfo)return[null,null];const{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos,this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size),a=tg().domain([0,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension]).range([C,C+o]),s=Math.max(0,Math.round(a.invert(this._xScale.invert(r[0])))),A=Math.min(n.tileData.dense.length,Math.round(a.invert(this._xScale.invert(r[1]))));return[s,A]}},{key:"minVisibleValue",value:function(n=!1){let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));const C=r.map(a=>this.fetchedTiles[a]).map(a=>{const s=this.getIndicesOfVisibleDataInTile(a);return a.tileData.denseDataExtrema.getMinNonZeroInSubset(s)}),o=Math.min(...C);return n?o:this.valueScaleMin!==null?this.valueScaleMin:o}},{key:"maxVisibleValue",value:function(n=!1){let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));const C=r.map(a=>this.fetchedTiles[a]).map(a=>{const s=this.getIndicesOfVisibleDataInTile(a);return a.tileData.denseDataExtrema.getMaxNonZeroInSubset(s)}),o=Math.max(...C);return n?o:this.valueScaleMax!==null?this.valueScaleMax:o}},{key:"getAggregatedVisibleValue",value:function(n="max"){const r=n==="min"?Math.min:Math.max,C=n==="min"?1/0:-1/0;let o=this.visibleAndFetchedIds();o.length===0&&(o=Object.keys(this.fetchedTiles));const a=this._xScale.range();return o.map(s=>this.fetchedTiles[s]).map(s=>{if(!s.tileData.tilePos)return n==="min"?this.minVisibleValue():this.maxVisibleValue();const{tileX:A,tileWidth:l}=this.getTilePosAndDimensions(s.tileData.zoomLevel,s.tileData.tilePos,this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size),c=tg().domain([0,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension]).range([A,A+l]),u=Math.max(0,Math.round(c.invert(this._xScale.invert(a[0])))),d=Math.min(s.tileData.dense.length,Math.round(c.invert(this._xScale.invert(a[1]))));return s.tileData.dense.slice(u,d)}).reduce((s,A)=>r(s,...A),C)}},{key:"getDataAtPos",value:function(n){let r;if(!this.tilesetInfo)return r;const C=this.calculateZoomLevel(),o=vt.calculateTileWidth(this.tilesetInfo,C,this.tilesetInfo.tile_size),a=this._xScale.invert(n)/o,s=this.tileToLocalId([C,Math.floor(a)]),A=this.fetchedTiles[s];if(!A)return r;const l=this.tilesetInfo.tile_size*(a-Math.floor(a));return A.tileData.dense?A.tileData.dense[Math.floor(l)]:null}},{key:"mouseMoveHandler",value:function({x:n,y:r}={}){this.isWithin(n,r)&&(this.mouseX=n,this.mouseY=r,this.mouseMoveZoomHandler())}},{key:"mouseMoveZoomHandler",value:function(){}},{key:"zoomed",value:function(...n){pv(Gh(i.prototype),"zoomed",this).call(this,...n),this.mouseMoveZoomHandler()}}]),i}(mm);function qHt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function moe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bs(e){return bs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},bs(e)}let Cy=function(e){ITt(i,e);var g=nTt(i);function i(I,n){var r;qHt(this,i),r=g.call(this,I,n);const{animate:C,isShowGlobalMousePosition:o}=I;return r.constIndicator=new ot.PIXI.Graphics,r.pMain.addChild(r.constIndicator),r.axis=new Vk(HP(r)),r.pBase.addChild(r.axis.pAxis),r.animate=C,r.options=n,r.isShowGlobalMousePosition=o,r.pubSubs=[],r.options.showMousePosition&&!r.hideMousePosition&&(r.hideMousePosition=sh(HP(r),r.is2d,r.isShowGlobalMousePosition())),r}return eTt(i,[{key:"rerender",value:function(n,r){const C=JSON.stringify(n);!r&&C===this.prevOptions||(hd(bs(i.prototype),"rerender",this).call(this,n,r),this.prevOptions=C,this.options=n,this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=sh(this,this.is2d,this.isShowGlobalMousePosition())),!this.options.showMousePosition&&this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0))}},{key:"calculateZoomLevel",value:function(){if(this.tilesetInfo.resolutions)return vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]-2);const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size);let r=Math.min(n,this.maxZoom);return r=Math.max(r,0),r}},{key:"relevantScale",value:function(){return this._xScale}},{key:"draw",value:function(){hd(bs(i.prototype),"draw",this).call(this),this.drawConstIndicator()}},{key:"drawAxis",value:function(n){if(!this.options.axisPositionVertical&&!this.options.axisPositionHorizontal){this.axis.clearAxis();return}if(this.options.axisPositionVertical&&this.options.axisPositionVertical==="hidden"){this.axis.clearAxis();return}if(this.options.axisPositionHorizontal&&this.options.axisPositionHorizontal==="hidden"){this.axis.clearAxis();return}const r=this.options.axisMargin||0;this.options.axisPositionHorizontal==="left"||this.options.axisPositionVertical==="top"?(this.axis.pAxis.position.x=this.position[0]+r,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisRight(n,this.dimensions[1])):this.options.axisPositionHorizontal==="outsideLeft"||this.options.axisPositionVertical==="outsideTop"?(this.axis.pAxis.position.x=this.position[0]+r,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisLeft(n,this.dimensions[1])):this.options.axisPositionHorizontal==="right"||this.options.axisPositionVertical==="bottom"?(this.axis.pAxis.position.x=this.position[0]+this.dimensions[0]-r,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisLeft(n,this.dimensions[1])):(this.options.axisPositionHorizontal==="outsideRight"||this.options.axisPositionVertical==="outsideBottom")&&(this.axis.pAxis.position.x=this.position[0]+this.dimensions[0]-r,this.axis.pAxis.position.y=this.position[1],this.axis.drawAxisRight(n,this.dimensions[1]))}},{key:"mouseMoveZoomHandler",value:function(n=this.mouseX,r=this.mouseY){if(typeof n>"u"||!this.areAllVisibleTilesLoaded()||!this.tilesetInfo)return;let C=0,o=0,a="1d-horizontal";this.isLeftModified?(C=r-this.position[1],o=n-this.position[0],a="1d-vertical"):(C=n-this.position[0],o=r-this.position[1]);const s=n-this.position[0],A=r-this.position[1],l=this._xScale.invert(C),c=this._yScale.invert(o),u=this.getDataAtPos(C);u&&this.onMouseMoveZoom({trackId:this.id,data:u,absX:n,absY:r,relX:s,relY:A,dataX:l,dataY:c,orientation:a})}},{key:"drawConstIndicator",value:function(){if(this.constIndicator){for(this.constIndicator.clear();this.constIndicator.children[0];)this.constIndicator.removeChild(this.constIndicator.children[0]);!this.options.constIndicators||!this.valueScale||this.options.constIndicators.forEach(({color:n="black",opacity:r=1,label:C=null,labelColor:o="black",labelOpacity:a=1,labelPosition:s="leftTop",labelSize:A=12,value:l=0}={})=>{const c=Kt(n),u=Kt(o);this.constIndicator.beginFill(c,r);const d=this.valueScale(l);let h=0,m=0;if(C){const f=new ot.PIXI.Text(C,{fontFamily:"Arial",fontSize:A,fill:u});switch(f.alpha=a,s){case"right":f.anchor.x=1,f.anchor.y=.5,f.x=this.position[0]+this.dimensions[0]-6,f.y=d,m=f.width+8;break;case"rightBottom":f.anchor.x=1,f.anchor.y=0,f.x=this.position[0]+this.dimensions[0]-6,f.y=d;break;case"rightTop":f.anchor.x=1,f.anchor.y=1,f.x=this.position[0]+this.dimensions[0]-6,f.y=d;break;case"left":f.anchor.x=0,f.anchor.y=.5,f.x=this.position[0]+2,f.y=d,h=f.width+4;break;case"leftBottom":f.anchor.x=0,f.anchor.y=0,f.x=this.position[0]+2,f.y=d;break;case"leftTop":default:f.anchor.x=0,f.anchor.y=1,f.x=this.position[0]+2,f.y=d;break}this.constIndicator.addChild(f)}this.constIndicator.drawRect(this.position[0]+h,d,this.dimensions[0]-m,1)})}}},{key:"exportSVG",value:function(){let n=null,r=null;hd(bs(i.prototype),"exportSVG",this)?[r,n]=hd(bs(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r),r.setAttribute("class","horizontal-tiled-1d-track");const C=document.createElement("g");return n.appendChild(C),this.options.constIndicators&&this.options.constIndicators.forEach(({color:o="black",opacity:a=1,label:s=null,labelColor:A="black",labelOpacity:l=1,labelPosition:c="leftTop",labelSize:u=12,value:d=0}={})=>{const h=this.valueScale(d);if(s){const f=document.createElement("text");switch(f.textContent=s,f.setAttribute("x",this.position[0]),f.setAttribute("y",h),f.setAttribute("style",`font-family: 'Arial'; font-size: ${u}px; fill: ${A}; fill-opacity: ${l};`),c){case"rightBottom":f.setAttribute("x",this.position[0]+this.dimensions[0]-6),f.setAttribute("y",h+u+2),f.setAttribute("text-anchor","end");break;case"right":case"rightTop":f.setAttribute("x",this.position[0]+this.dimensions[0]-6),f.setAttribute("y",h-2),f.setAttribute("text-anchor","end");break;case"leftBottom":f.setAttribute("x",this.position[0]+2),f.setAttribute("y",h+u+2);break;case"left":case"leftTop":default:f.setAttribute("x",this.position[0]+2),f.setAttribute("y",h-2);break}C.appendChild(f)}const m=document.createElement("line");m.setAttribute("x1",this.position[0]),m.setAttribute("y1",h),m.setAttribute("x2",this.dimensions[0]),m.setAttribute("y2",h),m.setAttribute("stroke",o),m.setAttribute("stroke-opacity",a),C.appendChild(m)}),[r,n]}}]),i}(Zj);function oTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function foe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function i0(e){return i0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},i0(e)}let r1e=function(e){cTt(i,e);var g=uTt(i);function i(I,n){var r;return oTt(this,i),r=g.call(this,I,n),r.pMain=r.pMobile,r}return aTt(i,[{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"initTile",value:function(n){const r=n.graphics;n.textGraphics=new ot.PIXI.Graphics,n.text=new ot.PIXI.Text(`${n.tileData.zoomLevel}/${n.tileData.tilePos.join("/")}`,{fontFamily:"Arial",fontSize:32,fill:16715792,align:"center"}),n.textGraphics.addChild(n.text),n.text.anchor.x=.5,n.text.anchor.y=.5,r.addChild(n.textGraphics),this.drawTile(n)}},{key:"destroyTile",value:function(n){}},{key:"drawTile",value:function(n){if(mW(i0(i.prototype),"drawTile",this).call(this,n),!n.graphics)return;const r=n.graphics,{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=1/((this._xScale(1)-this._xScale(0))/(this._refXScale(1)-this._refXScale(0)));n.text.scale.x=a,r.clear();const s=this.dimensions[1],A=this._refXScale(C+o)-this._refXScale(C);n.textGraphics.position.x=this._refXScale(C)+A/2,n.textGraphics.position.y=s/2;const l=this._refXScale(C);r.lineStyle(4*a,255,1),r.beginFill(16740363,.4),r.alpha=.5,r.moveTo(l,0),r.lineTo(l,s),r.moveTo(l+A,0),r.lineTo(l+A,s),r.lineStyle(0,255,1),r.drawRect(l,0,A,s)}}]),i}(Cy);function fTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function poe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function I0(e){return I0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},I0(e)}let C1e=function(e){GTt(i,e);var g=vTt(i);function i(){return fTt(this,i),g.apply(this,arguments)}return pTt(i,[{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._yScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);return Math.min(n,this.maxZoom)}},{key:"relevantScale",value:function(){return this._yScale}},{key:"zoomed",value:function(n,r){fW(I0(i.prototype),"zoomed",this).call(this,n,r);const C=1,o=(r(1)-r(0))/(this._refYScale(1)-this._refYScale(0)),a=this.position[0],s=r(0)+this.position[1]-this._refYScale(1)*o;this.pMain.position.x=a,this.pMain.position.y=s,this.pMain.scale.x=C,this.pMain.scale.y=o}}]),i}(Zj);function RTt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function boe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function n0(e){return n0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},n0(e)}let o1e=function(e){TTt(i,e);var g=NTt(i);function i(){return RTt(this,i),g.apply(this,arguments)}return VTt(i,[{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"initTile",value:function(n){const r=n.graphics;n.textGraphics=new ot.PIXI.Graphics,n.text=new ot.PIXI.Text(`${n.tileData.zoomLevel}/${n.tileData.tilePos.join("/")}`,{fontFamily:"Arial",fontSize:32,fill:16715792,align:"center"}),n.textGraphics.addChild(n.text),n.text.anchor.x=.5,n.text.anchor.y=.5,n.text.rotation=-Math.PI/2,r.addChild(n.textGraphics),this.drawTile(n,r)}},{key:"destroyTile",value:function(n,r){}},{key:"drawTile",value:function(n){if(pW(n0(i.prototype),"drawTile",this).call(this,n),!n.graphics)return;const r=n.graphics,{tileY:C,tileHeight:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=1/((this._yScale(1)-this._yScale(0))/(this._refYScale(1)-this._refYScale(0)));n.text.scale.x=a,r.clear(),r.lineStyle(4*a,255,1),r.beginFill(16740363,.4),r.alpha=.5;const s=this.dimensions[0],A=this._refYScale(C+o)-this._refYScale(C);n.textGraphics.position.x=s/2,n.textGraphics.position.y=this._refYScale(C)+A/2,r.drawRect(0,this._refYScale(C),s,A)}},{key:"fetchNewTiles",value:function(n){n.forEach(r=>{const o=r.remoteId.split("."),a={zoomLevel:o[1],tilePos:o.slice(2,o.length).map(s=>+s)};this.fetchedTiles[r.tileId]=r,this.fetchedTiles[r.tileId].tileData=a,this.fetching.has(r.remoteId)&&this.fetching.delete(r.remoteId)}),this.synchronizeTilesAndGraphics()}}]),i}(C1e);var jD=Array.prototype.slice;function FTt(e){return e}var bW=1,yW=2,YP=3,nG=4,yoe=1e-6;function DTt(e){return"translate("+e+",0)"}function xTt(e){return"translate(0,"+e+")"}function ETt(e){return g=>+e(g)}function MTt(e,g){return g=Math.max(0,e.bandwidth()-g*2)/2,e.round()&&(g=Math.round(g)),i=>+e(i)+g}function zTt(){return!this.__axis}function kk(e,g){var i=[],I=null,n=null,r=6,C=6,o=3,a=typeof window<"u"&&window.devicePixelRatio>1?0:.5,s=e===bW||e===nG?-1:1,A=e===nG||e===yW?"x":"y",l=e===bW||e===YP?DTt:xTt;function c(u){var d=I??(g.ticks?g.ticks.apply(g,i):g.domain()),h=n??(g.tickFormat?g.tickFormat.apply(g,i):FTt),m=Math.max(r,0)+o,f=g.range(),b=+f[0]+a,p=+f[f.length-1]+a,y=(g.bandwidth?MTt:ETt)(g.copy(),a),Z=u.selection?u.selection():u,B=Z.selectAll(".domain").data([null]),G=Z.selectAll(".tick").data(d,g).order(),v=G.exit(),w=G.enter().append("g").attr("class","tick"),V=G.select("line"),S=G.select("text");B=B.merge(B.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),G=G.merge(w),V=V.merge(w.append("line").attr("stroke","currentColor").attr(A+"2",s*r)),S=S.merge(w.append("text").attr("fill","currentColor").attr(A,s*m).attr("dy",e===bW?"0em":e===YP?"0.71em":"0.32em")),u!==Z&&(B=B.transition(u),G=G.transition(u),V=V.transition(u),S=S.transition(u),v=v.transition(u).attr("opacity",yoe).attr("transform",function(X){return isFinite(X=y(X))?l(X+a):this.getAttribute("transform")}),w.attr("opacity",yoe).attr("transform",function(X){var W=this.parentNode.__axis;return l((W&&isFinite(W=W(X))?W:y(X))+a)})),v.remove(),B.attr("d",e===nG||e===yW?C?"M"+s*C+","+b+"H"+a+"V"+p+"H"+s*C:"M"+a+","+b+"V"+p:C?"M"+b+","+s*C+"V"+a+"H"+p+"V"+s*C:"M"+b+","+a+"H"+p),G.attr("opacity",1).attr("transform",function(X){return l(y(X)+a)}),V.attr(A+"2",s*r),S.attr(A,s*m).text(h),Z.filter(zTt).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===yW?"start":e===nG?"end":"middle"),Z.each(function(){this.__axis=y})}return c.scale=function(u){return arguments.length?(g=u,c):g},c.ticks=function(){return i=jD.call(arguments),c},c.tickArguments=function(u){return arguments.length?(i=u==null?[]:jD.call(u),c):i.slice()},c.tickValues=function(u){return arguments.length?(I=u==null?null:jD.call(u),c):I&&I.slice()},c.tickFormat=function(u){return arguments.length?(n=u,c):n},c.tickSize=function(u){return arguments.length?(r=C=+u,c):r},c.tickSizeInner=function(u){return arguments.length?(r=+u,c):r},c.tickSizeOuter=function(u){return arguments.length?(C=+u,c):C},c.tickPadding=function(u){return arguments.length?(o=+u,c):o},c.offset=function(u){return arguments.length?(a=+u,c):a},c}function a1e(e){return kk(bW,e)}function PTt(e){return kk(yW,e)}function JTt(e){return kk(YP,e)}function A1e(e){return kk(nG,e)}const OTt=Object.freeze(Object.defineProperty({__proto__:null,axisBottom:JTt,axisLeft:A1e,axisRight:PTt,axisTop:a1e},Symbol.toStringTag,{value:"Module"}));function _Tt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Zoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function I2(e){return I2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},I2(e)}let fm=function(e){jTt(i,e);var g=$Tt(i);function i(I,n){var r;_Tt(this,i),r=g.call(this,I,n);const{svgElement:C}=I;return r.gMain=hg(C).append("g"),r.clipUid=cg.nice(),r.clipRect=r.gMain.append("clipPath").attr("id",`track-bounds-${r.clipUid}`).append("rect"),r.gMain.attr("clip-path",`url(#track-bounds-${r.clipUid})`),r}return LTt(i,[{key:"setPosition",value:function(n){this.position=n,this.gMain.attr("transform",`translate(${this.position[0]},${this.position[1]})`),this.draw()}},{key:"setDimensions",value:function(n){this.dimensions=n,this._xScale.range([0,this.dimensions[0]]),this._yScale.range([0,this.dimensions[1]]),n[0]>=0&&n[1]>=0?(this.clipRect.attr("width",n[0]),this.clipRect.attr("height",n[1])):(this.clipRect.attr("width",0),this.clipRect.attr("height",0)),this.draw()}},{key:"remove",value:function(){this.gMain.remove(),this.gMain=null}},{key:"draw",value:function(){return this}}]),i}(xp);function gNt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Goe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vh(e){return vh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},vh(e)}let s1e=function(e){CNt(i,e);var g=oNt(i);function i(I,n){var r;return gNt(this,i),r=g.call(this,I,n),r.axis=a1e(r._xScale),r.gAxis=r.gMain.append("g"),r.tilesetInfo=!0,r}return iNt(i,[{key:"setDimensions",value:function(n){bv(vh(i.prototype),"setDimensions",this).call(this,n),this.axis.ticks(Math.ceil(this.dimensions[0]/150)),this.gAxis.attr("transform",`translate(0,${n[1]})`)}},{key:"draw",value:function(){return this.axis.scale(this._xScale),this.gAxis.call(this.axis),this}},{key:"zoomed",value:function(n,r){bv(vh(i.prototype),"zoomed",this).call(this,n,r),this.draw()}}]),i}(fm);function lNt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function voe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Bh(e){return Bh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Bh(e)}let l1e=function(e){mNt(i,e);var g=fNt(i);function i(I,n){var r;return lNt(this,i),r=g.call(this,I,n),r.axis=A1e(r._yScale),r.gAxis=r.gMain.append("g"),r.tilesetInfo=!0,r}return cNt(i,[{key:"setDimensions",value:function(n){yv(Bh(i.prototype),"setDimensions",this).call(this,n),this.axis.ticks(Math.ceil(this.dimensions[1]/150)),this.gAxis.attr("transform",`translate(${n[0]},0)`)}},{key:"draw",value:function(){return this.axis.scale(this._yScale),this.gAxis.call(this.axis),this}},{key:"zoomed",value:function(n,r){yv(Bh(i.prototype),"zoomed",this).call(this,n,r),this.draw()}}]),i}(fm);var lg={},Ti={},Gj=32;Ti.INT_BITS=Gj;Ti.INT_MAX=2147483647;Ti.INT_MIN=-1<0)-(e<0)};Ti.abs=function(e){var g=e>>Gj-1;return(e^g)-g};Ti.min=function(e,g){return g^(e^g)&-(e65535)<<4,e>>>=g,i=(e>255)<<3,e>>>=i,g|=i,i=(e>15)<<2,e>>>=i,g|=i,i=(e>3)<<1,e>>>=i,g|=i,g|e>>1};Ti.log10=function(e){return e>=1e9?9:e>=1e8?8:e>=1e7?7:e>=1e6?6:e>=1e5?5:e>=1e4?4:e>=1e3?3:e>=100?2:e>=10?1:0};Ti.popCount=function(e){return e=e-(e>>>1&1431655765),e=(e&858993459)+(e>>>2&858993459),(e+(e>>>4)&252645135)*16843009>>>24};function c1e(e){var g=32;return e&=-e,e&&g--,e&65535&&(g-=16),e&16711935&&(g-=8),e&252645135&&(g-=4),e&858993459&&(g-=2),e&1431655765&&(g-=1),g}Ti.countTrailingZeros=c1e;Ti.nextPow2=function(e){return e+=e===0,--e,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1};Ti.prevPow2=function(e){return e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e-(e>>>1)};Ti.parity=function(e){return e^=e>>>16,e^=e>>>8,e^=e>>>4,e&=15,27030>>>e&1};var rG=new Array(256);(function(e){for(var g=0;g<256;++g){var i=g,I=g,n=7;for(i>>>=1;i;i>>>=1)I<<=1,I|=i&1,--n;e[g]=I<>>8&255]<<16|rG[e>>>16&255]<<8|rG[e>>>24&255]};Ti.interleave2=function(e,g){return e&=65535,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,g&=65535,g=(g|g<<8)&16711935,g=(g|g<<4)&252645135,g=(g|g<<2)&858993459,g=(g|g<<1)&1431655765,e|g<<1};Ti.deinterleave2=function(e,g){return e=e>>>g&1431655765,e=(e|e>>>1)&858993459,e=(e|e>>>2)&252645135,e=(e|e>>>4)&16711935,e=(e|e>>>16)&65535,e<<16>>16};Ti.interleave3=function(e,g,i){return e&=1023,e=(e|e<<16)&4278190335,e=(e|e<<8)&251719695,e=(e|e<<4)&3272356035,e=(e|e<<2)&1227133513,g&=1023,g=(g|g<<16)&4278190335,g=(g|g<<8)&251719695,g=(g|g<<4)&3272356035,g=(g|g<<2)&1227133513,e|=g<<1,i&=1023,i=(i|i<<16)&4278190335,i=(i|i<<8)&251719695,i=(i|i<<4)&3272356035,i=(i|i<<2)&1227133513,e|i<<2};Ti.deinterleave3=function(e,g){return e=e>>>g&1227133513,e=(e|e>>>2)&3272356035,e=(e|e>>>4)&251719695,e=(e|e>>>8)&4278190335,e=(e|e>>>16)&1023,e<<22>>22};Ti.nextCombination=function(e){var g=e|e-1;return g+1|(~g&-~g)-1>>>c1e(e)+1};function u1e(e,g,i){var I=e[i]|0;if(I<=0)return[];var n=new Array(I),r;if(i===e.length-1)for(r=0;r"u"&&(g=0),typeof e){case"number":if(e>0)return ZNt(e|0,g);break;case"object":if(typeof e.length=="number")return u1e(e,g,0);break}return[]}var vNt=GNt,d1e={},Yk={};Yk.byteLength=wNt;Yk.toByteArray=VNt;Yk.fromByteArray=HNt;var qa=[],NC=[],BNt=typeof Uint8Array<"u"?Uint8Array:Array,$D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var qm=0,SNt=$D.length;qm0)throw new Error("Invalid string. Length must be a multiple of 4");var i=e.indexOf("=");i===-1&&(i=g);var I=i===g?0:4-i%4;return[i,I]}function wNt(e){var g=h1e(e),i=g[0],I=g[1];return(i+I)*3/4-I}function RNt(e,g,i){return(g+i)*3/4-i}function VNt(e){var g,i=h1e(e),I=i[0],n=i[1],r=new BNt(RNt(e,I,n)),C=0,o=n>0?I-4:I,a;for(a=0;a>16&255,r[C++]=g>>8&255,r[C++]=g&255;return n===2&&(g=NC[e.charCodeAt(a)]<<2|NC[e.charCodeAt(a+1)]>>4,r[C++]=g&255),n===1&&(g=NC[e.charCodeAt(a)]<<10|NC[e.charCodeAt(a+1)]<<4|NC[e.charCodeAt(a+2)]>>2,r[C++]=g>>8&255,r[C++]=g&255),r}function WNt(e){return qa[e>>18&63]+qa[e>>12&63]+qa[e>>6&63]+qa[e&63]}function XNt(e,g,i){for(var I,n=[],r=g;ro?o:C+r));return I===1?(g=e[i-1],n.push(qa[g>>2]+qa[g<<4&63]+"==")):I===2&&(g=(e[i-2]<<8)+e[i-1],n.push(qa[g>>10]+qa[g>>4&63]+qa[g<<2&63]+"=")),n.join("")}var vj={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */vj.read=function(e,g,i,I,n){var r,C,o=n*8-I-1,a=(1<>1,A=-7,l=i?n-1:0,c=i?-1:1,u=e[g+l];for(l+=c,r=u&(1<<-A)-1,u>>=-A,A+=o;A>0;r=r*256+e[g+l],l+=c,A-=8);for(C=r&(1<<-A)-1,r>>=-A,A+=I;A>0;C=C*256+e[g+l],l+=c,A-=8);if(r===0)r=1-s;else{if(r===a)return C?NaN:(u?-1:1)*(1/0);C=C+Math.pow(2,I),r=r-s}return(u?-1:1)*C*Math.pow(2,r-I)};vj.write=function(e,g,i,I,n,r){var C,o,a,s=r*8-n-1,A=(1<>1,c=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,u=I?0:r-1,d=I?1:-1,h=g<0||g===0&&1/g<0?1:0;for(g=Math.abs(g),isNaN(g)||g===1/0?(o=isNaN(g)?1:0,C=A):(C=Math.floor(Math.log(g)/Math.LN2),g*(a=Math.pow(2,-C))<1&&(C--,a*=2),C+l>=1?g+=c/a:g+=c*Math.pow(2,1-l),g*a>=2&&(C++,a/=2),C+l>=A?(o=0,C=A):C+l>=1?(o=(g*a-1)*Math.pow(2,n),C=C+l):(o=g*Math.pow(2,l-1)*Math.pow(2,n),C=0));n>=8;e[i+u]=o&255,u+=d,o/=256,n-=8);for(C=C<0;e[i+u]=C&255,u+=d,C/=256,s-=8);e[i+u-d]|=h*128};/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */(function(e){function g(Ce,E){if(!(Ce instanceof E))throw new TypeError("Cannot call a class as a function")}function I(Ce,E){for(var _=0;_"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function c(Ce){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(_){return _.__proto__||Object.getPrototypeOf(_)},c(Ce)}const u=Wk,d=fj,h=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=p,e.SlowBuffer=V,e.INSPECT_MAX_BYTES=50;const m=2147483647;e.kMaxLength=m,p.TYPED_ARRAY_SUPPORT=f(),!p.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function f(){try{const Ce=new Uint8Array(1),E={foo:function(){return 42}};return Object.setPrototypeOf(E,Uint8Array.prototype),Object.setPrototypeOf(Ce,E),Ce.foo()===42}catch{return!1}}Object.defineProperty(p.prototype,"parent",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,"offset",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}});function b(Ce){if(Ce>m)throw new RangeError('The value "'+Ce+'" is invalid for option "size"');const E=new Uint8Array(Ce);return Object.setPrototypeOf(E,p.prototype),E}function p(Ce,E,_){if(typeof Ce=="number"){if(typeof E=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return G(Ce)}return y(Ce,E,_)}p.poolSize=8192;function y(Ce,E,_){if(typeof Ce=="string")return v(Ce,E);if(ArrayBuffer.isView(Ce))return R(Ce);if(Ce==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Ce);if(je(Ce,ArrayBuffer)||Ce&&je(Ce.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(je(Ce,SharedArrayBuffer)||Ce&&je(Ce.buffer,SharedArrayBuffer)))return S(Ce,E,_);if(typeof Ce=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const fe=Ce.valueOf&&Ce.valueOf();if(fe!=null&&fe!==Ce)return p.from(fe,E,_);const Ye=X(Ce);if(Ye)return Ye;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof Ce[Symbol.toPrimitive]=="function")return p.from(Ce[Symbol.toPrimitive]("string"),E,_);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Ce)}p.from=function(Ce,E,_){return y(Ce,E,_)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array);function Z(Ce){if(typeof Ce!="number")throw new TypeError('"size" argument must be of type number');if(Ce<0)throw new RangeError('The value "'+Ce+'" is invalid for option "size"')}function B(Ce,E,_){return Z(Ce),Ce<=0?b(Ce):E!==void 0?typeof _=="string"?b(Ce).fill(E,_):b(Ce).fill(E):b(Ce)}p.alloc=function(Ce,E,_){return B(Ce,E,_)};function G(Ce){return Z(Ce),b(Ce<0?0:W(Ce)|0)}p.allocUnsafe=function(Ce){return G(Ce)},p.allocUnsafeSlow=function(Ce){return G(Ce)};function v(Ce,E){if((typeof E!="string"||E==="")&&(E="utf8"),!p.isEncoding(E))throw new TypeError("Unknown encoding: "+E);const _=H(Ce,E)|0;let fe=b(_);const Ye=fe.write(Ce,E);return Ye!==_&&(fe=fe.slice(0,Ye)),fe}function w(Ce){const E=Ce.length<0?0:W(Ce.length)|0,_=b(E);for(let fe=0;fe=m)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+m.toString(16)+" bytes");return Ce|0}function V(Ce){return+Ce!=Ce&&(Ce=0),p.alloc(+Ce)}p.isBuffer=function(E){return E!=null&&E._isBuffer===!0&&E!==p.prototype},p.compare=function(E,_){if(je(E,Uint8Array)&&(E=p.from(E,E.offset,E.byteLength)),je(_,Uint8Array)&&(_=p.from(_,_.offset,_.byteLength)),!p.isBuffer(E)||!p.isBuffer(_))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(E===_)return 0;let fe=E.length,Ye=_.length;for(let ue=0,le=Math.min(fe,Ye);ueYe.length?(p.isBuffer(le)||(le=p.from(le)),le.copy(Ye,ue)):Uint8Array.prototype.set.call(Ye,le,ue);else if(p.isBuffer(le))le.copy(Ye,ue);else throw new TypeError('"list" argument must be an Array of Buffers');ue+=le.length}return Ye};function H(Ce,E){if(p.isBuffer(Ce))return Ce.length;if(ArrayBuffer.isView(Ce)||je(Ce,ArrayBuffer))return Ce.byteLength;if(typeof Ce!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof Ce);const _=Ce.length,fe=arguments.length>2&&arguments[2]===!0;if(!fe&&_===0)return 0;let Ye=!1;for(;;)switch(E){case"ascii":case"latin1":case"binary":return _;case"utf8":case"utf-8":return k(Ce).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _*2;case"hex":return _>>>1;case"base64":return Ve(Ce).length;default:if(Ye)return fe?-1:k(Ce).length;E=(""+E).toLowerCase(),Ye=!0}}p.byteLength=H;function Y(Ce,E,_){let fe=!1;if((E===void 0||E<0)&&(E=0),E>this.length||((_===void 0||_>this.length)&&(_=this.length),_<=0)||(_>>>=0,E>>>=0,_<=E))return"";for(Ce||(Ce="utf8");;)switch(Ce){case"hex":return pe(this,E,_);case"utf8":case"utf-8":return Q(this,E,_);case"ascii":return ne(this,E,_);case"latin1":case"binary":return be(this,E,_);case"base64":return te(this,E,_);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ve(this,E,_);default:if(fe)throw new TypeError("Unknown encoding: "+Ce);Ce=(Ce+"").toLowerCase(),fe=!0}}p.prototype._isBuffer=!0;function K(Ce,E,_){const fe=Ce[E];Ce[E]=Ce[_],Ce[_]=fe}p.prototype.swap16=function(){const E=this.length;if(E%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let _=0;__&&(E+=" ... "),""},h&&(p.prototype[h]=p.prototype.inspect),p.prototype.compare=function(E,_,fe,Ye,ue){if(je(E,Uint8Array)&&(E=p.from(E,E.offset,E.byteLength)),!p.isBuffer(E))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof E);if(_===void 0&&(_=0),fe===void 0&&(fe=E?E.length:0),Ye===void 0&&(Ye=0),ue===void 0&&(ue=this.length),_<0||fe>E.length||Ye<0||ue>this.length)throw new RangeError("out of range index");if(Ye>=ue&&_>=fe)return 0;if(Ye>=ue)return-1;if(_>=fe)return 1;if(_>>>=0,fe>>>=0,Ye>>>=0,ue>>>=0,this===E)return 0;let le=ue-Ye,re=fe-_;const oe=Math.min(le,re),Re=this.slice(Ye,ue),xe=E.slice(_,fe);for(let Fe=0;Fe2147483647?_=2147483647:_<-2147483648&&(_=-2147483648),_=+_,at(_)&&(_=Ye?0:Ce.length-1),_<0&&(_=Ce.length+_),_>=Ce.length){if(Ye)return-1;_=Ce.length-1}else if(_<0)if(Ye)_=0;else return-1;if(typeof E=="string"&&(E=p.from(E,fe)),p.isBuffer(E))return E.length===0?-1:J(Ce,E,_,fe,Ye);if(typeof E=="number")return E=E&255,typeof Uint8Array.prototype.indexOf=="function"?Ye?Uint8Array.prototype.indexOf.call(Ce,E,_):Uint8Array.prototype.lastIndexOf.call(Ce,E,_):J(Ce,[E],_,fe,Ye);throw new TypeError("val must be string, number or Buffer")}function J(Ce,E,_,fe,Ye){let ue=1,le=Ce.length,re=E.length;if(fe!==void 0&&(fe=String(fe).toLowerCase(),fe==="ucs2"||fe==="ucs-2"||fe==="utf16le"||fe==="utf-16le")){if(Ce.length<2||E.length<2)return-1;ue=2,le/=2,re/=2,_/=2}function oe(xe,Fe){return ue===1?xe[Fe]:xe.readUInt16BE(Fe*ue)}let Re;if(Ye){let xe=-1;for(Re=_;Rele&&(_=le-re),Re=_;Re>=0;Re--){let xe=!0;for(let Fe=0;FeYe&&(fe=Ye)):fe=Ye;const ue=E.length;fe>ue/2&&(fe=ue/2);let le;for(le=0;le>>0,isFinite(fe)?(fe=fe>>>0,Ye===void 0&&(Ye="utf8")):(Ye=fe,fe=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const ue=this.length-_;if((fe===void 0||fe>ue)&&(fe=ue),E.length>0&&(fe<0||_<0)||_>this.length)throw new RangeError("Attempt to write outside buffer bounds");Ye||(Ye="utf8");let le=!1;for(;;)switch(Ye){case"hex":return P(this,E,_,fe);case"utf8":case"utf-8":return ge(this,E,_,fe);case"ascii":case"latin1":case"binary":return q(this,E,_,fe);case"base64":return $(this,E,_,fe);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,E,_,fe);default:if(le)throw new TypeError("Unknown encoding: "+Ye);Ye=(""+Ye).toLowerCase(),le=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function te(Ce,E,_){return E===0&&_===Ce.length?u.fromByteArray(Ce):u.fromByteArray(Ce.slice(E,_))}function Q(Ce,E,_){_=Math.min(Ce.length,_);const fe=[];let Ye=E;for(;Ye<_;){const ue=Ce[Ye];let le=null,re=ue>239?4:ue>223?3:ue>191?2:1;if(Ye+re<=_){let oe,Re,xe,Fe;switch(re){case 1:ue<128&&(le=ue);break;case 2:oe=Ce[Ye+1],(oe&192)===128&&(Fe=(ue&31)<<6|oe&63,Fe>127&&(le=Fe));break;case 3:oe=Ce[Ye+1],Re=Ce[Ye+2],(oe&192)===128&&(Re&192)===128&&(Fe=(ue&15)<<12|(oe&63)<<6|Re&63,Fe>2047&&(Fe<55296||Fe>57343)&&(le=Fe));break;case 4:oe=Ce[Ye+1],Re=Ce[Ye+2],xe=Ce[Ye+3],(oe&192)===128&&(Re&192)===128&&(xe&192)===128&&(Fe=(ue&15)<<18|(oe&63)<<12|(Re&63)<<6|xe&63,Fe>65535&&Fe<1114112&&(le=Fe))}}le===null?(le=65533,re=1):le>65535&&(le-=65536,fe.push(le>>>10&1023|55296),le=56320|le&1023),fe.push(le),Ye+=re}return he(fe)}const ie=4096;function he(Ce){const E=Ce.length;if(E<=ie)return String.fromCharCode.apply(String,Ce);let _="",fe=0;for(;fefe)&&(_=fe);let Ye="";for(let ue=E;ue<_;++ue)Ye+=bt[Ce[ue]];return Ye}function ve(Ce,E,_){const fe=Ce.slice(E,_);let Ye="";for(let ue=0;uefe&&(E=fe),_<0?(_+=fe,_<0&&(_=0)):_>fe&&(_=fe),__)throw new RangeError("Trying to access beyond buffer length")}p.prototype.readUintLE=p.prototype.readUIntLE=function(E,_,fe){E=E>>>0,_=_>>>0,fe||We(E,_,this.length);let Ye=this[E],ue=1,le=0;for(;++le<_&&(ue*=256);)Ye+=this[E+le]*ue;return Ye},p.prototype.readUintBE=p.prototype.readUIntBE=function(E,_,fe){E=E>>>0,_=_>>>0,fe||We(E,_,this.length);let Ye=this[E+--_],ue=1;for(;_>0&&(ue*=256);)Ye+=this[E+--_]*ue;return Ye},p.prototype.readUint8=p.prototype.readUInt8=function(E,_){return E=E>>>0,_||We(E,1,this.length),this[E]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(E,_){return E=E>>>0,_||We(E,2,this.length),this[E]|this[E+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(E,_){return E=E>>>0,_||We(E,2,this.length),this[E]<<8|this[E+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(E,_){return E=E>>>0,_||We(E,4,this.length),(this[E]|this[E+1]<<8|this[E+2]<<16)+this[E+3]*16777216},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(E,_){return E=E>>>0,_||We(E,4,this.length),this[E]*16777216+(this[E+1]<<16|this[E+2]<<8|this[E+3])},p.prototype.readBigUInt64LE=ct(function(E){E=E>>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ye=_+this[++E]*2**8+this[++E]*2**16+this[++E]*2**24,ue=this[++E]+this[++E]*2**8+this[++E]*2**16+fe*2**24;return BigInt(Ye)+(BigInt(ue)<>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ye=_*2**24+this[++E]*2**16+this[++E]*2**8+this[++E],ue=this[++E]*2**24+this[++E]*2**16+this[++E]*2**8+fe;return(BigInt(Ye)<>>0,_=_>>>0,fe||We(E,_,this.length);let Ye=this[E],ue=1,le=0;for(;++le<_&&(ue*=256);)Ye+=this[E+le]*ue;return ue*=128,Ye>=ue&&(Ye-=Math.pow(2,8*_)),Ye},p.prototype.readIntBE=function(E,_,fe){E=E>>>0,_=_>>>0,fe||We(E,_,this.length);let Ye=_,ue=1,le=this[E+--Ye];for(;Ye>0&&(ue*=256);)le+=this[E+--Ye]*ue;return ue*=128,le>=ue&&(le-=Math.pow(2,8*_)),le},p.prototype.readInt8=function(E,_){return E=E>>>0,_||We(E,1,this.length),this[E]&128?(255-this[E]+1)*-1:this[E]},p.prototype.readInt16LE=function(E,_){E=E>>>0,_||We(E,2,this.length);const fe=this[E]|this[E+1]<<8;return fe&32768?fe|4294901760:fe},p.prototype.readInt16BE=function(E,_){E=E>>>0,_||We(E,2,this.length);const fe=this[E+1]|this[E]<<8;return fe&32768?fe|4294901760:fe},p.prototype.readInt32LE=function(E,_){return E=E>>>0,_||We(E,4,this.length),this[E]|this[E+1]<<8|this[E+2]<<16|this[E+3]<<24},p.prototype.readInt32BE=function(E,_){return E=E>>>0,_||We(E,4,this.length),this[E]<<24|this[E+1]<<16|this[E+2]<<8|this[E+3]},p.prototype.readBigInt64LE=ct(function(E){E=E>>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ye=this[E+4]+this[E+5]*2**8+this[E+6]*2**16+(fe<<24);return(BigInt(Ye)<>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ye=(_<<24)+this[++E]*2**16+this[++E]*2**8+this[++E];return(BigInt(Ye)<>>0,_||We(E,4,this.length),d.read(this,E,!0,23,4)},p.prototype.readFloatBE=function(E,_){return E=E>>>0,_||We(E,4,this.length),d.read(this,E,!1,23,4)},p.prototype.readDoubleLE=function(E,_){return E=E>>>0,_||We(E,8,this.length),d.read(this,E,!0,52,8)},p.prototype.readDoubleBE=function(E,_){return E=E>>>0,_||We(E,8,this.length),d.read(this,E,!1,52,8)};function Be(Ce,E,_,fe,Ye,ue){if(!p.isBuffer(Ce))throw new TypeError('"buffer" argument must be a Buffer instance');if(E>Ye||ECe.length)throw new RangeError("Index out of range")}p.prototype.writeUintLE=p.prototype.writeUIntLE=function(E,_,fe,Ye){if(E=+E,_=_>>>0,fe=fe>>>0,!Ye){const re=Math.pow(2,8*fe)-1;Be(this,E,_,fe,re,0)}let ue=1,le=0;for(this[_]=E&255;++le>>0,fe=fe>>>0,!Ye){const re=Math.pow(2,8*fe)-1;Be(this,E,_,fe,re,0)}let ue=fe-1,le=1;for(this[_+ue]=E&255;--ue>=0&&(le*=256);)this[_+ue]=E/le&255;return _+fe},p.prototype.writeUint8=p.prototype.writeUInt8=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,1,255,0),this[_]=E&255,_+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,65535,0),this[_]=E&255,this[_+1]=E>>>8,_+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,65535,0),this[_]=E>>>8,this[_+1]=E&255,_+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,4294967295,0),this[_+3]=E>>>24,this[_+2]=E>>>16,this[_+1]=E>>>8,this[_]=E&255,_+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,4294967295,0),this[_]=E>>>24,this[_+1]=E>>>16,this[_+2]=E>>>8,this[_+3]=E&255,_+4};function Je(Ce,E,_,fe,Ye){ae(E,fe,Ye,Ce,_,7);let ue=Number(E&BigInt(4294967295));Ce[_++]=ue,ue=ue>>8,Ce[_++]=ue,ue=ue>>8,Ce[_++]=ue,ue=ue>>8,Ce[_++]=ue;let le=Number(E>>BigInt(32)&BigInt(4294967295));return Ce[_++]=le,le=le>>8,Ce[_++]=le,le=le>>8,Ce[_++]=le,le=le>>8,Ce[_++]=le,_}function Pe(Ce,E,_,fe,Ye){ae(E,fe,Ye,Ce,_,7);let ue=Number(E&BigInt(4294967295));Ce[_+7]=ue,ue=ue>>8,Ce[_+6]=ue,ue=ue>>8,Ce[_+5]=ue,ue=ue>>8,Ce[_+4]=ue;let le=Number(E>>BigInt(32)&BigInt(4294967295));return Ce[_+3]=le,le=le>>8,Ce[_+2]=le,le=le>>8,Ce[_+1]=le,le=le>>8,Ce[_]=le,_+8}p.prototype.writeBigUInt64LE=ct(function(E,_=0){return Je(this,E,_,BigInt(0),BigInt("0xffffffffffffffff"))}),p.prototype.writeBigUInt64BE=ct(function(E,_=0){return Pe(this,E,_,BigInt(0),BigInt("0xffffffffffffffff"))}),p.prototype.writeIntLE=function(E,_,fe,Ye){if(E=+E,_=_>>>0,!Ye){const oe=Math.pow(2,8*fe-1);Be(this,E,_,fe,oe-1,-oe)}let ue=0,le=1,re=0;for(this[_]=E&255;++ue>0)-re&255;return _+fe},p.prototype.writeIntBE=function(E,_,fe,Ye){if(E=+E,_=_>>>0,!Ye){const oe=Math.pow(2,8*fe-1);Be(this,E,_,fe,oe-1,-oe)}let ue=fe-1,le=1,re=0;for(this[_+ue]=E&255;--ue>=0&&(le*=256);)E<0&&re===0&&this[_+ue+1]!==0&&(re=1),this[_+ue]=(E/le>>0)-re&255;return _+fe},p.prototype.writeInt8=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,1,127,-128),E<0&&(E=255+E+1),this[_]=E&255,_+1},p.prototype.writeInt16LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,32767,-32768),this[_]=E&255,this[_+1]=E>>>8,_+2},p.prototype.writeInt16BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,32767,-32768),this[_]=E>>>8,this[_+1]=E&255,_+2},p.prototype.writeInt32LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,2147483647,-2147483648),this[_]=E&255,this[_+1]=E>>>8,this[_+2]=E>>>16,this[_+3]=E>>>24,_+4},p.prototype.writeInt32BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,2147483647,-2147483648),E<0&&(E=4294967295+E+1),this[_]=E>>>24,this[_+1]=E>>>16,this[_+2]=E>>>8,this[_+3]=E&255,_+4},p.prototype.writeBigInt64LE=ct(function(E,_=0){return Je(this,E,_,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),p.prototype.writeBigInt64BE=ct(function(E,_=0){return Pe(this,E,_,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function De(Ce,E,_,fe,Ye,ue){if(_+fe>Ce.length)throw new RangeError("Index out of range");if(_<0)throw new RangeError("Index out of range")}function Qe(Ce,E,_,fe,Ye){return E=+E,_=_>>>0,Ye||De(Ce,E,_,4),d.write(Ce,E,_,fe,23,4),_+4}p.prototype.writeFloatLE=function(E,_,fe){return Qe(this,E,_,!0,fe)},p.prototype.writeFloatBE=function(E,_,fe){return Qe(this,E,_,!1,fe)};function _e(Ce,E,_,fe,Ye){return E=+E,_=_>>>0,Ye||De(Ce,E,_,8),d.write(Ce,E,_,fe,52,8),_+8}p.prototype.writeDoubleLE=function(E,_,fe){return _e(this,E,_,!0,fe)},p.prototype.writeDoubleBE=function(E,_,fe){return _e(this,E,_,!1,fe)},p.prototype.copy=function(E,_,fe,Ye){if(!p.isBuffer(E))throw new TypeError("argument should be a Buffer");if(fe||(fe=0),!Ye&&Ye!==0&&(Ye=this.length),_>=E.length&&(_=E.length),_||(_=0),Ye>0&&Ye=this.length)throw new RangeError("Index out of range");if(Ye<0)throw new RangeError("sourceEnd out of bounds");Ye>this.length&&(Ye=this.length),E.length-_>>0,fe=fe===void 0?this.length:fe>>>0,E||(E=0);let ue;if(typeof E=="number")for(ue=_;ue2**32?Ye=tt(String(_)):typeof _=="bigint"&&(Ye=String(_),(_>BigInt(2)**BigInt(32)||_<-(BigInt(2)**BigInt(32)))&&(Ye=tt(Ye)),Ye+="n"),fe+=` It must be ${E}. Received ${Ye}`,fe},RangeError);function tt(Ce){let E="",_=Ce.length;const fe=Ce[0]==="-"?1:0;for(;_>=fe+4;_-=3)E=`_${Ce.slice(_-3,_)}${E}`;return`${Ce.slice(0,_)}${E}`}function Xe(Ce,E,_){ye(E,"offset"),(Ce[E]===void 0||Ce[E+_]===void 0)&&He(E,Ce.length-(_+1))}function ae(Ce,E,_,fe,Ye,ue){if(Ce>_||Ce3?E===0||E===BigInt(0)?re=`>= 0${le} and < 2${le} ** ${(ue+1)*8}${le}`:re=`>= -(2${le} ** ${(ue+1)*8-1}${le}) and < 2 ** ${(ue+1)*8-1}${le}`:re=`>= ${E}${le} and <= ${_}${le}`,new gt.ERR_OUT_OF_RANGE("value",re,Ce)}Xe(fe,Ye,ue)}function ye(Ce,E){if(typeof Ce!="number")throw new gt.ERR_INVALID_ARG_TYPE(E,"number",Ce)}function He(Ce,E,_){throw Math.floor(Ce)!==Ce?(ye(Ce,_),new gt.ERR_OUT_OF_RANGE(_||"offset","an integer",Ce)):E<0?new gt.ERR_BUFFER_OUT_OF_BOUNDS:new gt.ERR_OUT_OF_RANGE(_||"offset",`>= ${_?1:0} and <= ${E}`,Ce)}const F=/[^+/0-9A-Za-z-_]/g;function T(Ce){if(Ce=Ce.split("=")[0],Ce=Ce.trim().replace(F,""),Ce.length<2)return"";for(;Ce.length%4!==0;)Ce=Ce+"=";return Ce}function k(Ce,E){E=E||1/0;let _;const fe=Ce.length;let Ye=null;const ue=[];for(let le=0;le55295&&_<57344){if(!Ye){if(_>56319){(E-=3)>-1&&ue.push(239,191,189);continue}else if(le+1===fe){(E-=3)>-1&&ue.push(239,191,189);continue}Ye=_;continue}if(_<56320){(E-=3)>-1&&ue.push(239,191,189),Ye=_;continue}_=(Ye-55296<<10|_-56320)+65536}else Ye&&(E-=3)>-1&&ue.push(239,191,189);if(Ye=null,_<128){if((E-=1)<0)break;ue.push(_)}else if(_<2048){if((E-=2)<0)break;ue.push(_>>6|192,_&63|128)}else if(_<65536){if((E-=3)<0)break;ue.push(_>>12|224,_>>6&63|128,_&63|128)}else if(_<1114112){if((E-=4)<0)break;ue.push(_>>18|240,_>>12&63|128,_>>6&63|128,_&63|128)}else throw new Error("Invalid code point")}return ue}function Ie(Ce){const E=[];for(let _=0;_>8,Ye=_%256,ue.push(Ye),ue.push(fe);return ue}function Ve(Ce){return u.toByteArray(T(Ce))}function we(Ce,E,_,fe){let Ye;for(Ye=0;Ye=E.length||Ye>=Ce.length);++Ye)E[Ye+_]=Ce[Ye];return Ye}function je(Ce,E){return Ce instanceof E||Ce!=null&&Ce.constructor!=null&&Ce.constructor.name!=null&&Ce.constructor.name===E.name}function at(Ce){return Ce!==Ce}const bt=function(){const Ce="0123456789abcdef",E=new Array(256);for(let _=0;_<16;++_){const fe=_*16;for(let Ye=0;Ye<16;++Ye)E[fe+Ye]=Ce[_]+Ce[Ye]}return E}();function ct(Ce){return typeof BigInt>"u"?Ht:Ce}function Ht(){throw new Error("BigInt not supported")}})(o1e);var _c=XI,rn=hNt,A1e=o1e.Buffer;globalThis.__TYPEDARRAY_POOL||(globalThis.__TYPEDARRAY_POOL={UINT8:rn([32,0]),UINT16:rn([32,0]),UINT32:rn([32,0]),BIGUINT64:rn([32,0]),INT8:rn([32,0]),INT16:rn([32,0]),INT32:rn([32,0]),BIGINT64:rn([32,0]),FLOAT:rn([32,0]),DOUBLE:rn([32,0]),DATA:rn([32,0]),UINT8C:rn([32,0]),BUFFER:rn([32,0])});var BNt=typeof Uint8ClampedArray<"u",SNt=typeof BigUint64Array<"u",wNt=typeof BigInt64Array<"u",oi=globalThis.__TYPEDARRAY_POOL;oi.UINT8C||(oi.UINT8C=rn([32,0]));oi.BIGUINT64||(oi.BIGUINT64=rn([32,0]));oi.BIGINT64||(oi.BIGINT64=rn([32,0]));oi.BUFFER||(oi.BUFFER=rn([32,0]));var Xk=oi.DATA,Hk=oi.BUFFER;sg.free=function(g){if(A1e.isBuffer(g))Hk[_c.log2(g.length)].push(g);else{if(Object.prototype.toString.call(g)!=="[object ArrayBuffer]"&&(g=g.buffer),!g)return;var I=g.length||g.byteLength,i=_c.log2(I)|0;Xk[i].push(g)}};function s1e(e){if(e){var g=e.length||e.byteLength,I=_c.log2(g);Xk[I].push(e)}}function RNt(e){s1e(e.buffer)}sg.freeUint8=sg.freeUint16=sg.freeUint32=sg.freeBigUint64=sg.freeInt8=sg.freeInt16=sg.freeInt32=sg.freeBigInt64=sg.freeFloat32=sg.freeFloat=sg.freeFloat64=sg.freeDouble=sg.freeUint8Clamped=sg.freeDataView=RNt;sg.freeArrayBuffer=s1e;sg.freeBuffer=function(g){Hk[_c.log2(g.length)].push(g)};sg.malloc=function(g,I){if(I===void 0||I==="arraybuffer")return JC(g);switch(I){case"uint8":return pj(g);case"uint16":return l1e(g);case"uint32":return c1e(g);case"int8":return u1e(g);case"int16":return d1e(g);case"int32":return h1e(g);case"float":case"float32":return m1e(g);case"double":case"float64":return f1e(g);case"uint8_clamped":return p1e(g);case"bigint64":return y1e(g);case"biguint64":return b1e(g);case"buffer":return G1e(g);case"data":case"dataview":return Z1e(g);default:return null}return null};function JC(g){var g=_c.nextPow2(g),I=_c.log2(g),i=Xk[I];return i.length>0?i.pop():new ArrayBuffer(g)}sg.mallocArrayBuffer=JC;function pj(e){return new Uint8Array(JC(e),0,e)}sg.mallocUint8=pj;function l1e(e){return new Uint16Array(JC(2*e),0,e)}sg.mallocUint16=l1e;function c1e(e){return new Uint32Array(JC(4*e),0,e)}sg.mallocUint32=c1e;function u1e(e){return new Int8Array(JC(e),0,e)}sg.mallocInt8=u1e;function d1e(e){return new Int16Array(JC(2*e),0,e)}sg.mallocInt16=d1e;function h1e(e){return new Int32Array(JC(4*e),0,e)}sg.mallocInt32=h1e;function m1e(e){return new Float32Array(JC(4*e),0,e)}sg.mallocFloat32=sg.mallocFloat=m1e;function f1e(e){return new Float64Array(JC(8*e),0,e)}sg.mallocFloat64=sg.mallocDouble=f1e;function p1e(e){return BNt?new Uint8ClampedArray(JC(e),0,e):pj(e)}sg.mallocUint8Clamped=p1e;function b1e(e){return SNt?new BigUint64Array(JC(8*e),0,e):null}sg.mallocBigUint64=b1e;function y1e(e){return wNt?new BigInt64Array(JC(8*e),0,e):null}sg.mallocBigInt64=y1e;function Z1e(e){return new DataView(JC(e),0,e)}sg.mallocDataView=Z1e;function G1e(e){e=_c.nextPow2(e);var g=_c.log2(e),I=Hk[g];return I.length>0?I.pop():new A1e(e)}sg.mallocBuffer=G1e;sg.clearCache=function(){for(var g=0;g<32;++g)oi.UINT8[g].length=0,oi.UINT16[g].length=0,oi.UINT32[g].length=0,oi.INT8[g].length=0,oi.INT16[g].length=0,oi.INT32[g].length=0,oi.FLOAT[g].length=0,oi.DOUBLE[g].length=0,oi.BIGUINT64[g].length=0,oi.BIGINT64[g].length=0,oi.UINT8C[g].length=0,Xk[g].length=0,Hk[g].length=0};var VNt=WNt,pW=32;function WNt(e,g){g<=4*pW?bW(0,g-1,e):yW(0,g-1,e)}function bW(e,g,I){for(var i=2*(e+1),n=e+1;n<=g;++n){for(var C=I[i++],r=I[i++],o=n,a=i-2;o-- >e;){var s=I[a-2],A=I[a-1];if(sI[g+1]:!0}function YV(e,g,I,i){e*=2;var n=i[e];return n>1,o=r-i,a=r+i,s=n,A=o,l=r,c=a,u=C,d=e+1,h=g-1,m=0;OA(s,A,I)&&(m=s,s=A,A=m),OA(c,u,I)&&(m=c,c=u,u=m),OA(s,l,I)&&(m=s,s=l,l=m),OA(A,l,I)&&(m=A,A=l,l=m),OA(s,c,I)&&(m=s,s=c,c=m),OA(l,c,I)&&(m=l,l=c,c=m),OA(A,u,I)&&(m=A,A=u,u=m),OA(A,l,I)&&(m=A,A=l,l=m),OA(c,u,I)&&(m=c,c=u,u=m);for(var f=I[2*A],b=I[2*A+1],p=I[2*c],y=I[2*c+1],Z=2*s,B=2*l,G=2*u,v=2*n,w=2*r,R=2*C,S=0;S<2;++S){var X=I[Z+S],W=I[B+S],V=I[G+S];I[v+S]=X,I[w+S]=W,I[R+S]=V}Zoe(o,e,I),Zoe(a,g,I);for(var H=d;H<=h;++H)if(YV(H,f,b,I))H!==d&&yoe(H,d,I),++d;else if(!YV(H,p,y,I))for(;;)if(YV(h,p,y,I)){YV(h,f,b,I)?(XNt(H,d,h,I),++d,--h):(yoe(H,h,I),--h);break}else{if(--h>>1;Tk(og,b);for(var p=0,y=0,d=0;d=rr)Z=Z-rr|0,Pp(Ws,Fd,y--,Z);else if(Z>=0)Pp(sn,Vs,p--,Z);else if(Z<=-rr){Z=-Z-rr|0;for(var B=0;B>>1;Tk(og,b);for(var p=0,y=0,Z=0,d=0;d>1===og[2*d+3]>>1&&(G=2,d+=1),B<0){for(var v=-(B>>1)-1,w=0;w>1)-1;G===0?Pp(sn,Vs,p--,v):G===1?Pp(Ws,Fd,y--,v):G===2&&Pp(zp,pv,Z--,v)}}}function YNt(e,g,I,i,n,C,r,o,a,s,A,l){var c=0,u=2*e,d=g,h=g+e,m=1,f=1;i?f=rr:m=rr;for(var b=n;b>>1;Tk(og,B);for(var G=0,b=0;b=rr?(w=!i,p-=rr):(w=!!i,p-=1),w)Jp(sn,Vs,G++,p);else{var R=l[p],S=u*p,X=A[S+g+1],W=A[S+g+1+e];e:for(var V=0;V>>1;Tk(og,p);for(var y=0,h=0;h=rr)sn[y++]=m-rr;else{m-=1;var B=A[m],G=c*m,v=s[G+g+1],w=s[G+g+1+e];e:for(var R=0;R=0;--R)if(sn[R]===m){for(var V=R+1;V"+Zj+"-"+I2+"){"),e?(C(!0,!1),n.push("}else{"),C(!1,!1)):(n.push("if("+_D+"){"),C(!0,!0),n.push("}else{"),C(!0,!1),n.push("}}else{if("+_D+"){"),C(!1,!0),n.push("}else{"),C(!1,!1),n.push("}")),n.push("}}return "+g);var r=I.join("")+n.join(""),o=new Function(r);return o()}bj.partial=R1e(!1);bj.full=R1e(!0);var V1e=xNt,DNt="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m";function xNt(e,g){var I="abcdef".split("").concat(g),i=[];return e.indexOf("lo")>=0&&i.push("lo=e[k+n]"),e.indexOf("hi")>=0&&i.push("hi=e[k+o]"),I.push(DNt.replace("_",i.join()).replace("$",e)),Function.apply(void 0,I)}var ENt=JNt,MNt=V1e,voe=MNt("loI&&n[l+g]>s;--A,l-=r){for(var c=l,u=l+r,d=0;d>>1,s=2*e,A=a,l=n[s*a+g];r=m?(A=h,l=m):d>=b?(A=u,l=d):(A=f,l=b):m>=b?(A=h,l=m):b>=d?(A=u,l=d):(A=f,l=b);for(var Z=s*(o-1),B=s*A,p=0;p=p0)&&!(p1>=hi)",["p0","p1"]),Soe=Cy("lo===p0",["p0"]),qNt=Cy("lo0;){s-=1;var c=s*Gj,u=qn[c],d=qn[c+1],h=qn[c+2],m=qn[c+3],f=qn[c+4],b=qn[c+5],p=s*vj,y=Dd[p],Z=Dd[p+1],B=b&1,G=!!(b&16),v=n,w=C,R=o,S=a;if(B&&(v=o,w=a,R=n,S=C),!(b&2&&(h=qNt(e,u,d,h,v,w,Z),d>=h))&&!(b&4&&(d=ekt(e,u,d,h,v,w,y),d>=h))){var X=h-d,W=f-m;if(G){if(e*X*(X+W)>>1;if(!(r<=0)){var o,a=Bl.mallocDouble(2*r*n),s=Bl.mallocInt32(n);if(n=Roe(e,r,a,s),n>0){if(r===1&&i)KV.init(n),o=KV.sweepComplete(r,I,0,n,a,s,0,n,a,s);else{var A=Bl.mallocDouble(2*r*C),l=Bl.mallocInt32(C);C=Roe(g,r,A,l),C>0&&(KV.init(n+C),r===1?o=KV.sweepBipartite(r,I,0,n,a,s,0,C,A,l):o=rkt(r,I,i,n,a,s,C,A,l),Bl.free(A),Bl.free(l))}Bl.free(a),Bl.free(s)}return o}}}var tS;function H1e(e,g){tS.push([e,g])}function akt(e){return tS=[],i2(e,e,H1e,!0),tS}function Akt(e,g){return tS=[],i2(e,g,H1e,!1),tS}function skt(e,g,I){switch(arguments.length){case 1:return akt(e);case 2:return typeof g=="function"?i2(e,e,g,!0):Akt(e,g);case 3:return i2(e,g,I,!1);default:throw new Error("box-intersect: Invalid arguments")}}const pw=PC(Ckt);var T1e={exports:{}},N1e=lkt,Voe=+(Math.pow(2,27)+1);function lkt(e,g,I){var i=e*g,n=Voe*e,C=n-e,r=n-C,o=e-r,a=Voe*g,s=a-g,A=a-s,l=g-A,c=i-r*A,u=c-o*A,d=u-r*l,h=o*l-d;return I?(I[0]=h,I[1]=i,I):[h,i]}var ckt=dkt;function ukt(e,g){var I=e+g,i=I-e,n=I-i,C=g-i,r=e-n,o=r+C;return o?[o,I]:[I]}function dkt(e,g){var I=e.length|0,i=g.length|0;if(I===1&&i===1)return ukt(e[0],g[0]);var n=I+i,C=new Array(n),r=0,o=0,a=0,s=Math.abs,A=e[o],l=s(A),c=g[a],u=s(c),d,h;l=i?(d=A,o+=1,o=i?(d=A,o+=1,o0){if(v<=0)return w;R=G+v}else if(G<0){if(v>=0)return w;R=-(G+v)}else return w;var S=o*R;return w>=S||w<=-S?w:u(y,Z,B)},function(y,Z,B,G){var v=y[0]-G[0],w=Z[0]-G[0],R=B[0]-G[0],S=y[1]-G[1],X=Z[1]-G[1],W=B[1]-G[1],V=y[2]-G[2],H=Z[2]-G[2],Y=B[2]-G[2],K=w*W,x=R*X,J=R*S,P=v*W,ge=v*X,q=w*S,$=V*(K-x)+H*(J-P)+Y*(ge-q),j=(Math.abs(K)+Math.abs(x))*Math.abs(V)+(Math.abs(J)+Math.abs(P))*Math.abs(H)+(Math.abs(ge)+Math.abs(q))*Math.abs(Y),te=a*j;return $>te||-$>te?$:d(y,Z,B,G)}];function m(p){var y=h[p.length];return y||(y=h[p.length]=c(p.length)),y.apply(void 0,p)}function f(p,y,Z,B,G,v,w){return function(S,X,W,V,H){switch(arguments.length){case 0:case 1:return 0;case 2:return B(S,X);case 3:return G(S,X,W);case 4:return v(S,X,W,V);case 5:return w(S,X,W,V,H)}for(var Y=new Array(arguments.length),K=0;K0;){var b=(a+n-1)%n,p=e[b];if(p[1]!==i)break;var y=p[0];m=Math.min(m,y),f=Math.max(f,y),a=b}if(a===0)return m<=I&&I<=f?0:1;r=a+1}for(var Z=e[(a+n-1)%n][1];o+1"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Yr(e){return Yr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Yr(e)}const Xoe=16,Hoe=50,$D=5e3,Toe=5,Kkt=14,ku={fontSize:`${Kkt}px`,fontFamily:"Arial",stroke:"white",strokeThickness:2,fontWeight:400,dropShadow:!0,dropShadowColor:"white",dropShadowDistance:0,dropShadowBlur:2};let Y1e=function(e){Hkt(I,e);var g=Tkt(I);function I(i,n){var C;return wkt(this,I),C=g.call(this,i,n),C.valueScaleTransform=Ji,C}return Rkt(I,[{key:"initialize",value:function(){this.initialized||([this.prevK,this.vertK,this.vertY]=[1,1,0],this.drawnRects||(this.drawnRects={}),this.colorScale||(this.options.colorRange?this.colorScale=Oc(this.options.colorRange):this.colorScale=Nb),this.initialized=!0)}},{key:"initTile",value:function(n){n.texts={},n.rectGraphics=new ot.PIXI.Graphics,n.textGraphics=new ot.PIXI.Graphics,n.graphics.addChild(n.rectGraphics),n.graphics.addChild(n.textGraphics);let C=[],r=[];if(n.tileData&&n.tileData.length){if(n.tileData.sort((o,a)=>a.importance-o.importance),!this.options||!this.options.valueColumn){const o=n.tileData.map(a=>{const s=+a.chrOffset;return{from:+a.fields[1]+s,to:+a.fields[2]+s,value:a,text:a.fields[3],strand:a.fields.length>=6&&a.fields[5]==="-"?"-":"+"}});C=VX(o.filter(a=>a.strand==="+")),r=VX(o.filter(a=>a.strand==="-"))}else C=[n.tileData.map(o=>({value:o}))];n.plusStrandRows=C,n.minusStrandRows=r,this.options.showTexts&&n.tileData.forEach((o,a)=>{const s=o.fields;if(o.importance||(o.importance=Math.random()),n.textWidths={},n.textHeights={},a>=(+this.options.maxTexts||Hoe))return;const A=new ot.PIXI.Text(s[3],{...ku,fontSize:+this.options.fontSize||ku.fontSize});this.flipText&&(A.scale.x=-1),A.anchor.x=.5,A.anchor.y=.5,n.texts[o.uid]=A,n.textGraphics.addChild(A)})}n.initialized=!0}},{key:"removeTileRects",value:function(n){const C=+n.tileId.split(".")[0];n.rectGraphics.clear(),n.rendered=!1,n.tileData&&n.tileData.length&&n.tileData.forEach((r,o)=>{this.drawnRects[C]&&this.drawnRects[C][r.uid]&&this.drawnRects[C][r.uid][2]===n.tileId&&delete this.drawnRects[C][r.uid]})}},{key:"destroyTile",value:function(n){this.removeTileRects(n),n.graphics.removeChild(n.textGraphics),n.graphics.removeChild(n.rectGraphics)}},{key:"removeTiles",value:function(n){Ka(Yr(I.prototype),"removeTiles",this).call(this,n)}},{key:"drawTile",value:function(n){this.options&&this.options.valueColumn&&this.valueScale&&this.drawAxis(this.valueScale)}},{key:"rerender",value:function(n,C){Ka(Yr(I.prototype),"rerender",this).call(this,n,C),this.valueScale=null,this.drawnRects={},this.options.colorRange?this.colorScale=Oc(this.options.colorRange):this.colorScale=Nb;for(const r of this.visibleAndFetchedTiles())this.destroyTile(r),this.initTile(r),this.renderTile(r)}},{key:"updateTile",value:function(n){this.areAllVisibleTilesLoaded()&&this.renderTile(n)}},{key:"allVisibleRects",value:function(){const n={};Object.values(this.fetchedTiles).forEach(a=>{if(a.plusStrandRows)for(const s of a.plusStrandRows[0])n[s.value.uid]||(n[s.value.uid]=s)});const C=Object.values(n).sort((a,s)=>a.from-s.from);let r=0,o=0;for(let a=0;a=0&&C.length;a--)C[a].staggeredStartPosition=(o+r-a)%2;return n}},{key:"drawSegmentStyle",value:function(n,C,r,o,a,s){const l=o+a/2,c=[C,o,C+2*.1,o,C+2*.1,l-.1,r-2*.1,l-.1,r-2*.1,o,r,o,r,o+a,r-2*.1,o+a,r-2*.1,l+.1,C+2*.1,l+.1,C+2*.1,o+a,C,o+a];return n.rectGraphics.drawPolygon(c),c}},{key:"drawPoly",value:function(n,C,r,o,a,s){let A=null;return this.options.annotationStyle==="segment"?this.drawSegmentStyle(n,C,r,o,a,s):((s==="+"||s==="-")&&r-C=(+this.options.maxTexts||Hoe)||!n.texts[h.uid])continue;const X=n.texts[h.uid];X.position.x=this._xScale(y),X.position.y=v+B/2,X.nominalY=v+B/2,S&&(X.alreadyDrawn=!0);const W=this.options.fontColor!==void 0?Kt(this.options.fontColor):s;if(X.style={...ku,fill:W,fontSize:+this.options.fontSize||ku.fontSize},!(m[3]in n.textWidths)){X.updateTransform();const V=X.getBounds().width,H=X.getBounds().height,Y=5;n.textWidths[m[3]]=V,n.textHeights[m[3]]=H-Y}}}},{key:"renderTile",value:function(n){let C=n.plusStrandRows?n.plusStrandRows.length:1,r=n.minusStrandRows?n.minusStrandRows.length:1;for(const o of this.visibleAndFetchedTiles()){if(!o.initialized)return;!o.plusStrandRows&&!o.minusStrandRows||(C=Math.max(o.plusStrandRows.length,C),r=Math.max(o.minusStrandRows.length,r))}if(n.rendered&&this.removeTileRects(n),n.drawnAtScale=this._xScale.copy(),n.rendered=!0,this.setValueScale(),this.setColorValueScale(),n.tileData&&n.tileData.length){const o=this.options.plusStrandColor||this.options.fillColor||"blue",a=this.options.minusStrandColor||this.options.fillColor||"purple",s=0;let A=0;this.options.separatePlusMinusStrands?A=C*this.dimensions[1]/(C+r)-s/2:A=this.dimensions[1],this.renderRows(n,n.plusStrandRows,C,0,A,o),this.renderRows(n,n.minusStrandRows,r,this.options.separatePlusMinusStrands?A+s/2:0,this.dimensions[1],a)}Kd.stretchRects(this,[o=>o.rectGraphics])}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);let C=Math.min(n,this.maxZoom);return C=Math.max(C,0),C}},{key:"minVisibleValueInTiles",value:function(n){let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));let r=Math.min.apply(null,C.map(o=>this.fetchedTiles[o]).filter(o=>o.tileData&&o.tileData.length).map(o=>Math.min.apply(null,o.tileData.sort((a,s)=>s.importance-a.importance).slice(0,$D).map(a=>+a.fields[n-1]).filter(a=>!Number.isNaN(a)))));return r===Number.MAX_SAFE_INTEGER&&(r=null),r}},{key:"maxVisibleValueInTiles",value:function(n){let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));let r=Math.max.apply(null,C.map(o=>this.fetchedTiles[o]).filter(o=>o.tileData&&o.tileData.length).map(o=>Math.max.apply(null,o.tileData.sort((a,s)=>s.importance-a.importance).slice(0,$D).map(a=>+a.fields[n-1]).filter(a=>!Number.isNaN(a)))));return r===Number.MIN_SAFE_INTEGER&&(r=null),r}},{key:"calculateMedianVisibleValue",value:function(n){this.areAllVisibleTilesLoaded()&&this.allTilesLoaded();let C=this.visibleAndFetchedIds();C.length===0&&(C=Object.keys(this.fetchedTiles));const r=[].concat(...C.map(o=>this.fetchedTiles[o]).filter(o=>o.tileData&&o.tileData.length).map(o=>o.tileData.sort((a,s)=>s.importance-a.importance).slice(0,$D).map(a=>+a.fields[n-1]))).filter(o=>o>0);this.medianVisibleValue=E7(r)}},{key:"draw",value:function(){Ka(Yr(I.prototype),"draw",this).call(this),this.allTexts=[],this.allBoxes=[];for(const n in this.fetchedTiles){const C=this.fetchedTiles[n];if(C.rectGraphics.scale.y=this.vertK,C.rectGraphics.position.y=this.vertY,!C.drawnAtScale)return;Kd.stretchRects(this,[o=>o.rectGraphics]);const r=this.parentInFetched(C);C.initialized&&C.tileData&&C.tileData.length&&C.tileData.forEach(o=>{if(!C.texts)return;const a=o.fields,s=a[3],A=C.texts[o.uid];if(!A)return;const l=+o.chrOffset,c=+a[1]+l,u=+a[2]+l,d=(c+u)/2;if(A.position.x=this._xScale(d),A.position.y=A.nominalY*(this.vertK*this.prevK)+this.vertY,!r&&!A.alreadyDrawn){A.visible=!0;const h=3;this.allBoxes.push([A.position.x-h,A.position.y-C.textHeights[a[3]]/2,A.position.x+C.textWidths[a[3]]+h,A.position.y+C.textHeights[a[3]]/2]),this.allTexts.push({importance:o.importance,text:A,caption:s,strand:a[5]})}else A.visible=!1})}this.hideOverlaps(this.allBoxes,this.allTexts)}},{key:"hideOverlaps",value:function(n,C){pw(n,(r,o)=>{C[r].importance>C[o].importance?C[r].text.visible&&(C[o].text.visible=!1):C[o].text.visible&&(C[r].text.visible=!1)})}},{key:"setPosition",value:function(n){Ka(Yr(I.prototype),"setPosition",this).call(this,n),[this.pMain.position.x,this.pMain.position.y]=this.position}},{key:"setDimensions",value:function(n){Ka(Yr(I.prototype),"setDimensions",this).call(this,n)}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.refreshTiles(),this.draw()}},{key:"exportSVG",value:function(){let n=null,C=null;Ka(Yr(I.prototype),"exportSVG",this)?[C,n]=Ka(Yr(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C);const r=document.createElement("g");r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(r);const o=document.createElement("g"),a=document.createElement("g");r.appendChild(o),r.appendChild(a);for(const s of this.visibleAndFetchedTiles())s.tileData.length&&s.tileData.forEach(A=>{const l=+s.tileId.split(".")[0],c=document.createElement("g");if(c.setAttribute("transform",`translate(${s.rectGraphics.position.x},${s.rectGraphics.position.y})scale(${s.rectGraphics.scale.x},${s.rectGraphics.scale.y})`),o.appendChild(c),this.drawnRects[l]&&A.uid in this.drawnRects[l]){const u=this.drawnRects[l][A.uid][0],d=document.createElement("path");let h=`M ${u[0]} ${u[1]}`;for(let b=2;b{const r=this.valueScaleTransform,{y:o,k:a}=r,s=this.dimensions[1];o+n/a>-(a-1)*s&&o+n/a<0&&(this.valueScaleTransform=r.translate(0,n/a)),C.rectGraphics.position.y=this.valueScaleTransform.y,this.vertY=this.valueScaleTransform.y}),this.animate()}},{key:"zoomedY",value:function(n,C){const r=Kd.zoomedY(n,C,this.valueScaleTransform,this.dimensions[1]);this.valueScaleTransform=r;let o=r.k;const a=r.y;let s=!1;o/=this.prevK,(o>1.5||o<1/1.5)&&(this.prevK*=o,o=1,s=!0),this.vertK=o,this.vertY=a,Object.values(this.fetchedTiles).forEach(A=>{s&&this.renderTile(A),A.rectGraphics.scale.y=o,A.rectGraphics.position.y=a}),this.draw(),this.animate()}},{key:"getMouseOverHtml",value:function(n,C){if(!this.tilesetInfo)return"";const r=this.calculateZoomLevel(),o=[n,C];if(this.drawnRects[r]){const a=Object.values(this.drawnRects[r]);for(let s=0;s"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function $a(e){return $a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},$a(e)}const Lkt=(e,g,I,i,n)=>{n.drawRect(e,g,I,i)},Ukt=(e,g,I,i,n,{fill:C=0,fillOpacity:r=0,stroke:o=0,strokeWidth:a=0,strokeOpacity:s=0}={})=>{const A=document.createElement("rect");A.setAttribute("x",e),A.setAttribute("y",g),A.setAttribute("width",I),A.setAttribute("height",i),A.setAttribute("fill",`#${dz(C)}`),A.setAttribute("fill-opacity",r),A.setAttribute("stroke",`#${dz(o)}`),A.setAttribute("stroke-opacity",s),A.setAttribute("stroke-width",a),n.appendChild(A)},Na=(e,g,I,i,n,C)=>{n instanceof HTMLElement?Ukt(e,g,I,i,n,C):Lkt(e,g,I,i,n)},koe=(e,g,I,i,n,C,r,o,{isVertical:a=!1,svg:s=null}={})=>{let A=g,l=I,c=i,u=n;const d=o.width*2>i?i/2:o.width,h=o.width*2>n?n/2:o.width,m=s||e,f={fill:0,fillOpacity:0,stroke:0,strokeOpacity:0,strokeWidth:1};if(o.positions&&o.positions.length?(e.lineStyle(1,0,0),e.beginFill(o.color,o.opacity),f.fill=o.color,f.fillOpacity=o.opacity,f.stroke=0,f.strokeOpacity=0,f.strokeWidth=1,o.positions.forEach(b=>{b==="top"&&!a||b==="left"&&a?Na(g-d,I-h,i+d*2,h,m,f):b==="bottom"&&!a||b==="right"&&a?Na(g-d,I+n,i+d*2,h,m,f):b==="left"&&!a||b==="top"&&a?Na(g-d,I-h,d,n+h*2,m,f):(b==="right"&&!a||b==="bottom"&&a)&&Na(g+i,I-h,d,n+h*2,m,f)})):o.width>0&&o.opacity>0&&(e.lineStyle(o.width,o.color,o.opacity),e.beginFill(0,0),f.fill=0,f.fillOpacity=0,f.stroke=o.color,f.strokeOpacity=o.opacity,f.strokeWidth=o.width,Na(g-d,I-h,i+d*2,n+h*2,m,f)),r.positions&&r.positions.length){e.lineStyle(1,0,0),e.beginFill(r.color,r.opacity);const b=r.width*2>i?i/2:r.width,p=r.width*2>n?n/2:r.width;f.fill=r.color,f.fillOpacity=r.opacity,f.stroke=0,f.strokeOpacity=0,f.strokeWidth=1,r.positions.forEach(y=>{y==="top"&&!a||y==="left"&&a?(Na(g,I,i,p,m,f),l+=p,u-=p):y==="bottom"&&!a||y==="right"&&a?(Na(g,I+n-p,i,p,m,f),u-=p):y==="left"&&!a||y==="top"&&a?(Na(g,I,b,n,m,f),A+=b,c-=b):(y==="right"&&!a||y==="bottom"&&a)&&(Na(g+i-b,I,b,n,m,f),c-=b)})}else e.lineStyle(r.width,r.color,r.opacity),f.stroke=r.color,f.strokeOpacity=r.opacity,f.strokeWidth=r.width;e.beginFill(C.color,C.opacity),f.fill=C.color,f.fillOpacity=C.opacity,Na(A,l,c,u,m,f)};let K1e=function(e){zkt(I,e);var g=Pkt(I);function I(i,n){var C;return Fkt(this,I),C=g.call(this,i,n),C.options=n||{},C.drawnRects={},C}return Dkt(I,[{key:"drawHorizontalOverlay",value:function(n,C,r,o=0,a,s,A,l){if(!r||r.length<2)return;let c=this.position[0]+C.left+this._xScale(r[0]);const u=this.position[1]+C.top,d=C.height;let h=this._xScale(r[1])-this._xScale(r[0]);h=4?r[2]:r[0]);const d=this.position[1]+C.top,h=this.position[1]+C.top+C.height;if(u>h)return;u=4?r[3]:r[1])-u+C.top+this.position[1];f<0||(u+f>h&&(f+=h-(u+f)),f{(l.orientation==="1d-horizontal"||l.orientation==="2d")&&this.options.extent.forEach(c=>this.drawHorizontalOverlay(C,l.position,c,s,r,o,a,n)),(l.orientation==="1d-vertical"||l.orientation==="2d")&&this.options.extent.forEach(c=>this.drawVerticalOverlay(C,l.position,c,A,r,o,a,n))})}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}},{key:"setPosition",value:function(n){ec($a(I.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){ec($a(I.prototype),"setDimensions",this).call(this,n),this.draw()}},{key:"exportSVG",value:function(){let n=null,C=null;ec($a(I.prototype),"exportSVG",this)?[C,n]=ec($a(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C);const r=document.createElement("g");return n.appendChild(r),this.draw({svg:r}),[C,n]}}]),I}(mC);function Qkt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Yoe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qC(e){return qC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},qC(e)}let ry=function(e){tYt(I,e);var g=gYt(I);function I(){return Qkt(this,I),g.apply(this,arguments)}return jkt(I,[{key:"stopHover",value:function(){this.pMouseOver.clear(),this.animate()}},{key:"getMouseOverHtml",value:function(n){if(!this.tilesetInfo||!this.options.showTooltip||!this.valueScale)return"";const C=this.getDataAtPos(n);let r="";C&&(r=ur(".3f")(C));const o=this.pMouseOver,a=0,s=this.valueScale(C);o.clear(),o.beginFill(a,.5),o.lineStyle(1,a,1);const A=4;return o.drawRect(n-A/2,s-A/2,A,A),this.animate(),`${r}`}},{key:"initTile",value:function(n){if(Eo(qC(I.prototype),"initTile",this).call(this,n),!n.tileData||!n.tileData.dense){console.warn("emptyTile:",n);return}if(n.xValues=new Array(n.tileData.dense.length),n.yValues=new Array(n.tileData.dense.length),this.isValueScaleLocked()){const C=this.getLockGroupExtrema();C!==null&&(this.minValue(C[0]),this.maxValue(C[1]))}this.drawTile(n)}},{key:"rerender",value:function(n,C){Eo(qC(I.prototype),"rerender",this).call(this,n,C),this.options=n,Eo(qC(I.prototype),"draw",this).call(this),this.visibleAndFetchedTiles().forEach(r=>{this.renderTile(r)})}},{key:"renderTile",value:function(n){this.drawTile(n),this.drawAxis(this.valueScale)}},{key:"drawTile",value:function(n){if(Eo(qC(I.prototype),"drawTile",this).call(this,n),!n.graphics||!n.tileData||!n.tileData.dense)return;const C=n.graphics,{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=n.tileData.dense;if(a.length===0)return;const[s,A]=this.makeValueScale(this.minValue(),this.medianVisibleValue,this.maxValue());if(this.valueScale=s,C.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const l=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue");!this.tilesetInfo.tile_size&&!this.tilesetInfo.bins_per_dimension&&console.warn("No tileset_info.tile_size or tileset_info.bins_per_dimension",this.tilesetInfo);const c=this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension,u=gg().domain([0,c]).range([r,r+o]),d=this.options.lineStrokeWidth?this.options.lineStrokeWidth:1;C.lineStyle(d,l,1),n.segments=[];let h=[];for(let m=0;m1&&n.segments.push(h),h=[];continue}if(u(m)>this.tilesetInfo.max_pos[0])break;h.push([f,b])}h.length>1&&n.segments.push(h);for(const m of n.segments){const f=m[0],b=m.slice(1);C.moveTo(f[0],f[1]);for(const p of b)C.lineTo(p[0],p[1])}}},{key:"setPosition",value:function(n){Eo(qC(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0],this.pMouseOver.position.y=this.position[1],this.pMouseOver.position.x=this.position[0]}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.refreshTiles(),this.draw();const r=this.isValueScaleLocked();if(this.continuousScaling&&this.minValue()!==void 0&&this.maxValue()!==void 0){if(this.valueScaleMin===null&&this.valueScaleMax===null&&!r){const o=this.minVisibleValue(),a=this.maxVisibleValue(),s=1e-6;o!==null&&a!==null&&(Math.abs(this.minValue()-o)>s||Math.abs(this.maxValue()-a)>s)&&(this.minValue(o),this.maxValue(a),this.scheduleRerender())}r&&this.onValueScaleChanged()}}},{key:"superSVG",value:function(){return Eo(qC(I.prototype),"exportSVG",this).call(this)}},{key:"exportSVG",value:function(){let n=null,C=null;Eo(qC(I.prototype),"exportSVG",this)?[C,n]=Eo(qC(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C),C.setAttribute("class","exported-line-track");const r=document.createElement("g");n.appendChild(r),r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`);const o=this.options.lineStrokeColor?this.options.lineStrokeColor:"blue";this.visibleAndFetchedTiles().forEach(s=>{const A=document.createElement("path");A.setAttribute("fill","transparent"),A.setAttribute("stroke",o);let l="";for(const c of s.segments){const u=c[0],d=c.slice(1);l+=`M${u[0]} ${u[1]}`;for(const h of d)l+=`L${h[0]} ${h[1]}`}A.setAttribute("d",l),r.appendChild(A)});const a=document.createElement("g");if(a.setAttribute("id","axis"),C.appendChild(a),a.setAttribute("transform",`translate(${this.axis.pAxis.position.x}, ${this.axis.pAxis.position.y})`),this.options.axisPositionHorizontal==="left"||this.options.axisPositionVertical==="top"){const s=this.axis.exportAxisLeftSVG(this.valueScale,this.dimensions[1]);a.appendChild(s)}else if(this.options.axisPositionHorizontal==="right"||this.options.axisPositionVertical==="bottom"){const s=this.axis.exportAxisRightSVG(this.valueScale,this.dimensions[1]);a.appendChild(s)}return[C,n]}},{key:"tileToLocalId",value:function(n){return this.options.aggregationMode&&this.options.aggregationMode!=="mean"?`${n.join(".")}.${this.options.aggregationMode}`:`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return this.tileToLocalId(n)}}]),I}(ny);function CYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Koe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bs(e){return bs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},bs(e)}let F1e=function(e){sYt(I,e);var g=lYt(I);function I(){return CYt(this,I),g.apply(this,arguments)}return rYt(I,[{key:"initTile",value:function(n){n.barXValues=new Array(n.tileData.dense.length),n.barYValues=new Array(n.tileData.dense.length),n.barWidths=new Array(n.tileData.dense.length),n.barHeights=new Array(n.tileData.dense.length),hd(bs(I.prototype),"initTile",this).call(this,n)}},{key:"drawTile",value:function(n){if(!n.graphics||!n.tileData||!n.tileData.dense)return;const C=n.graphics,{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=n.tileData.dense;if(a.length===0)return;let s=0;if(this.valueScale=null,this.options.valueScaling==="log"){let h=this.medianVisibleValue;this.medianVisibleValue||(h=this.minValue()),this.valueScale=Cu().domain([h,this.maxValue()+h]).range([this.dimensions[1],0]),s=h}else this.valueScale=gg().domain([this.minValue(),this.maxValue()]).range([this.dimensions[1],0]);if(C.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const A=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue"),l=gg().domain([0,this.tilesetInfo.tile_size]).range([r,r+o]),c=0;C.lineStyle(c,A,1);const u=this.options.pointSize?this.options.pointSize:3,d=Kt(this.options.pointColor?this.options.pointColor:"red");C.beginFill(d,1),n.drawnAtScale=this._xScale.copy();for(let h=0;hthis.tilesetInfo.max_pos[0])break;C.drawRect(m-u/2/this.pMain.scale.x,f-u/2/this.pMain.scale.y,u/this.pMain.scale.x,u/this.pMain.scale.y)}}},{key:"draw",value:function(){hd(bs(I.prototype),"draw",this).call(this);for(const n of Eg(this.fetchedTiles)){const C=(n.drawnAtScale.domain()[1]-n.drawnAtScale.domain()[0])/(this._xScale.domain()[1]-this._xScale.domain()[0]),o=this._xScale.domain().map(n.drawnAtScale)[0];n.graphics.scale.x=C,n.graphics.position.x=-o*C}}},{key:"zoomed",value:function(n,C,r,o,a){hd(bs(I.prototype),"zoomed",this).call(this,n,C)}},{key:"exportSVG",value:function(){let n=null,C=null;[C,n]=hd(bs(I.prototype),"superSVG",this).call(this),C.setAttribute("class","exported-line-track");const r=document.createElement("g");n.appendChild(r),r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`);for(const a of this.visibleAndFetchedTiles())for(let s=0;s{g+=+i||0,I.push(g)}),Float64Array.from(I)}const mYt=(e,g)=>{const I=EB(e,g);return hYt(e.map(i=>(Array.isArray(i)&&g?i.length:1)/I))};function fYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Foe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Bh(e){return Bh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Bh(e)}let D1e=function(e){GYt(I,e);var g=vYt(I);function I(i,n){var C;return fYt(this,I),C=g.call(this,i,n),C.pMain=C.pMobile,C.continuousScaling=!1,C.updateDataFetcher(n),C}return pYt(I,[{key:"updateDataFetcher",value:function(n){if(n&&n.selectRows&&n.selectRowsAggregationMethod==="server"){const{pubSub:C,dataFetcher:r}=this,o=r.dataConfig.options,a={aggGroups:n.selectRows,aggFunc:n.selectRowsAggregationMode};if(JSON.stringify(o)!==JSON.stringify(a)){const s={...r.dataConfig,options:a};this.dataFetcher=new r.constructor(s,C),this.dataFetcher.dataConfig.tilesetUid&&this.fetchNewTiles(Object.keys(this.fetchedTiles).map(A=>({tileId:A,remoteId:A})))}}}},{key:"rerender",value:function(n,C){this.updateDataFetcher(n),bv(Bh(I.prototype),"rerender",this).call(this,n,C),n.selectRows&&(this.selectRowsCumWeights=mYt(n.selectRows,n.selectRowsAggregationWithRelativeHeight))}},{key:"tileDataToCanvas",value:function(n){const C=document.createElement("canvas");this.options.selectRows&&this.tilesetInfo.shape?(C.width=this.tilesetInfo.shape[0],C.height=EB(this.options.selectRows,this.options.selectRowsAggregationWithRelativeHeight)):this.tilesetInfo.shape?(C.width=this.tilesetInfo.shape[0],C.height=this.tilesetInfo.shape[1]):(C.width=this.tilesetInfo.tile_size,C.height=1);const r=C.getContext("2d");if(r.fillStyle="transparent",r.fillRect(0,0,C.width,C.height),n.length!==0&&n.length===4*C.width*C.height){const o=new ImageData(n,C.width,C.height);r.putImageData(o,0,0)}else console.warn("HorizontalMultivecTrack: pixData has an incorrect length.");return C}},{key:"setSpriteProperties",value:function(n,C,r){const{tileX:o,tileWidth:a}=this.getTilePosAndDimensions(C,r,this.tilesetInfo.tile_size),s=o+a;n.width=this._refXScale(s)-this._refXScale(o),n.height=this.dimensions[1],n.x=this._refXScale(o),n.y=0}},{key:"leftTrackZoomed",value:function(n,C,r,o,a){const s=this._xScale(0)-r*this._refXScale(0);this.pMobile.position.x=s+this.position[0],this.pMobile.position.y=this.position[1],this.pMobile.scale.x=r,this.pMobile.scale.y=1}},{key:"zoomed",value:function(n,C,r,o){bv(Bh(I.prototype),"zoomed",this).call(this,n,C),this.pMain.position.x=o,this.pMain.position.y=this.position[1],this.pMain.scale.x=r,this.pMain.scale.y=1,this.drawColorbar()}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;if(this.zoomLevel=this.calculateZoomLevel(),this.tilesetInfo.resolutions){const C=this.tilesetInfo.resolutions.map(r=>+r).sort((r,o)=>o-r);this.xTiles=vt.calculateTilesFromResolution(C[this.zoomLevel],this._xScale,this.tilesetInfo.min_pos[0],null,this.tilesetInfo.tile_size)}else this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const n=this.xTiles.map(C=>[this.zoomLevel,C]);this.setVisibleTiles(n)}},{key:"calculateZoomLevel",value:function(){if(!this.tilesetInfo)return;const n=this.tilesetInfo.min_pos[0];let C=null;return this.tilesetInfo.resolutions?C=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,n):C=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),C}},{key:"tileToLocalId",value:function(n){return n.join(".")}},{key:"tileToRemoteId",value:function(n){return n.join(".")}},{key:"getTilePosAtPosition",value:function(n,C){if(!this.tilesetInfo)return;const r=this.calculateZoomLevel(),o=vt.calculateTileWidth(this.tilesetInfo,r,this.tilesetInfo.tile_size),a=this._xScale.invert(n)/o;return[r,Math.floor(a)]}},{key:"getVisibleData",value:function(n,C){const r=this.calculateZoomLevel(),o=vt.calculateTileWidth(this.tilesetInfo,r,this.tilesetInfo.tile_size),a=this._xScale.invert(n)/o;let s=this.tilesetInfo.shape?this.tilesetInfo.shape[1]:1;this.options.selectRows&&(s=EB(this.options.selectRows,this.options.selectRowsAggregationWithRelativeHeight));let A=this.tilesetInfo.tile_size*(a-Math.floor(a));const l=C/this.dimensions[1],c=l*s;let u=Math.floor(c),d;this.options.selectRows&&(this.options.selectRowsAggregationWithRelativeHeight&&(u=this.selectRowsCumWeights.findIndex((b,p)=>l<=b&&(p===this.selectRowsCumWeights.length-1||this.selectRowsCumWeights[p+1]>=l))),d=this.options.selectRows[u]);const h=this.tileToLocalId([r,Math.floor(a)]),m=this.fetchedTiles[h];let f="";if(m){this.tilesetInfo.shape||(A=m.tileData.dense.length*(a-Math.floor(a)));let b=null;if(this.tilesetInfo.shape?Array.isArray(d)&&this.options.selectRowsAggregationMethod==="client"?b=d.map(p=>this.tilesetInfo.shape[0]*p+Math.floor(A)):d&&this.options.selectRowsAggregationMethod==="client"?b=this.tilesetInfo.shape[0]*d+Math.floor(A):b=this.tilesetInfo.shape[0]*u+Math.floor(A):b=m.tileData.dense.length*u+Math.floor(A),Array.isArray(b)){const p=t4(this.options.selectRowsAggregationMode),y=b.map(Z=>m.tileData.dense[Z]);f=ur(".3f")(p(y)),f+="
",f+=`${b.length}-item ${this.options.selectRowsAggregationMode}`}else f=ur(".3f")(m.tileData.dense[b]),Array.isArray(d)&&(f+="
",f+=`${d.length}-item ${this.options.selectRowsAggregationMode}`)}if(this.tilesetInfo.row_infos){f+="
";let b="";this.options.selectRows&&!Array.isArray(d)?b=this.tilesetInfo.row_infos[d]:u>=0&&u"),A=this.options.colorRange[parseInt(s[0],10)-1],l=s[1];if(Number.isNaN(A)||A==="NaN"||typeof A>"u"||A==="undefined")return"";o=` ${l}`}else o+=`Data value: ${this.getVisibleData(n,C)}
`,o+=`Zoom level: ${r[0]} tile position: ${r[1]}`;return o}}]),I}(fw);function RYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Doe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _o(e){return _o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},_o(e)}const FYt=Kt("#FFFFFF");let Bj=function(e){TYt(I,e);var g=NYt(I);function I(...i){var n;return RYt(this,I),n=g.call(this,...i),n.zeroLine=new ot.PIXI.Graphics,n.pMain.addChild(n.zeroLine),n.valueScaleTransform=Ji,n.options&&n.options.colorRange&&(n.options.colorRangeGradient?n.setColorGradient(n.options.colorRange):n.setColorScale(n.options.colorRange)),n.initialized=!0,n}return VYt(I,[{key:"setColorScale",value:function(n){n&&(this.colorScale=Oc(n),this.colorScale=this.colorScale.map(C=>C.map(r=>r/255)))}},{key:"setColorGradient",value:function(n){if(!n)return;const C=n.length-1;this.colorGradientColors=this.options.align==="bottom"?n.slice().reverse().map((r,o)=>({from:o/C,color:r})):n.map((r,o)=>({from:o/C,color:r}))}},{key:"initTile",value:function(n){this.initialized&&ns(_o(I.prototype),"initTile",this).call(this,n)}},{key:"updateTile",value:function(n){(!n.valueScale||!this.scale||this.scale.minValue!==n.scale.minValue||this.scale.maxValue!==n.scale.maxValue)&&this.renderTile(n)}},{key:"renderTile",value:function(n){this.initialized&&ns(_o(I.prototype),"renderTile",this).call(this,n)}},{key:"drawTile",value:function(n){if(!n.graphics||!n.tileData||!n.tileData.dense)return;const{graphics:C}=n;n.svgData=void 0;const{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos,this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size),a=n.tileData.dense;if(a.length===0)return;const[s,A]=this.makeValueScale(this.minValue(),this.medianVisibleValue,this.maxValue(),0);s.clamp(!0),this.valueScale=s;const l=s.copy();if(l.range([254,0]).clamp(!0),C.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const c=Kt(this.options.lineStrokeColor||"blue"),u=gg().domain([0,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension]).range([r,r+o]),d=0;C.lineStyle(d,c,1);const h=this.options.barFillColor||"grey",m=Kt(h),f="barOpacity"in this.options?this.options.barOpacity:1;C.beginFill(m,f),n.drawnAtScale=this._xScale.copy();const b=this.options.align==="top";let p,y,Z,B,G,v;if(this.colorGradientColors){G=new ot.PIXI.Graphics,G.beginFill(FYt,1);const w=gve(this.colorGradientColors,1,this.dimensions[1],0,0,0,this.dimensions[1]);v=new ot.PIXI.Sprite(ot.PIXI.Texture.fromCanvas(w,ot.PIXI.SCALE_MODES.NEAREST)),v.x=this._xScale(r),v.width=this._xScale(r+o)-v.x}for(let w=0;wthis.tilesetInfo.max_pos[0])break;if(this.colorScale&&!this.options.colorRangeGradient){const R=Math.round(l(a[w]+A)),S=this.colorScale[R],X=ot.PIXI.utils.rgb2hex(S);C.beginFill(X,f)}(G||C).drawRect(p,Z,y,B)}this.colorGradientColors&&(v.mask=G,C.removeChildren(),C.addChild(v,G))}},{key:"rerender",value:function(n,C){n&&n.colorRange&&(n.colorRangeGradient?this.setColorGradient(n.colorRange):this.setColorScale(n.colorRange)),ns(_o(I.prototype),"rerender",this).call(this,n,C)}},{key:"drawZeroLine",value:function(){this.zeroLine.clear();const n=Kt(this.options.barFillColor||"grey"),C=+this.options.barOpacity||1,r=this.options.zeroLineColor?Kt(this.options.zeroLineColor):n,o=Number.isNaN(+this.options.zeroLineOpacity)?C:+this.options.zeroLineOpacity;this.zeroLine.beginFill(r,o),this.zeroLine.drawRect(0,this.dimensions[1]-1,this.dimensions[0],1)}},{key:"drawZeroLineSvg",value:function(n){const C=document.createElement("rect");C.setAttribute("id","zero-line"),C.setAttribute("x",0),C.setAttribute("y",this.dimensions[1]-1),C.setAttribute("height",1),C.setAttribute("width",this.dimensions[0]),C.setAttribute("fill",this.options.zeroLineColor||this.options.barFillColor),C.setAttribute("fill-opacity",this.options.zeroLineOpacity||this.options.barOpacity),n.appendChild(C)}},{key:"getXScaleAndOffset",value:function(n){const C=n.domain(),r=this._xScale.domain(),o=(C[1]-C[0])/(r[1]-r[0]),s=this._xScale.domain().map(n)[0];return[o,-s*o]}},{key:"draw",value:function(){this.initialized&&(ns(_o(I.prototype),"draw",this).call(this),this.options.zeroLineVisible?this.drawZeroLine():this.zeroLine.clear(),Object.values(this.fetchedTiles).forEach(n=>{const[C,r]=this.getXScaleAndOffset(n.drawnAtScale);n.graphics.scale.x=C,n.graphics.position.x=r}))}},{key:"zoomed",value:function(n,C){ns(_o(I.prototype),"zoomed",this).call(this,n,C)}},{key:"movedY",value:function(n){}},{key:"zoomedY",value:function(n,C){}},{key:"addSVGInfo",value:function(n,C,r,o,a,s){n.svgData?(n.svgData.barXValues.push(C),n.svgData.barYValues.push(r),n.svgData.barWidths.push(o),n.svgData.barHeights.push(a),n.svgData.barColors.push(s)):n.svgData={barXValues:[C],barYValues:[r],barWidths:[o],barHeights:[a],barColors:[s]}}},{key:"exportSVG",value:function(){let n=null,C=null;[C,n]=ns(_o(I.prototype),"superSVG",this).call(this),C.setAttribute("class","exported-line-track");const r=document.createElement("g");n.appendChild(r),r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),this.options.zeroLine&&this.drawZeroLineSvg(r),this.visibleAndFetchedTiles().filter(a=>a.svgData&&a.svgData.barXValues).forEach(a=>{const s=a.svgData;for(let A=0;A"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function n2(e){return n2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},n2(e)}let x1e=function(e){zYt(I,e);var g=PYt(I);function I(){return DYt(this,I),g.apply(this,arguments)}return xYt(I,[{key:"drawTile",value:function(n){this.renderTile(n)}},{key:"renderTile",value:function(n){if(!n.graphics)return;const C=n.graphics,{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension),a=n.tileData.dense;if(a.length===0)return;let s=0;if(this.valueScale=null,this.options.valueScaling==="log"){let p=this.medianVisibleValue;this.medianVisibleValue||(p=this.minValue()),this.valueScale=Cu().domain([p,this.maxValue()+p]).range([this.dimensions[1],0]),s=p}else this.valueScale=gg().domain([this.minValue(),this.maxValue()]).range([this.dimensions[1],0]);if(C.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const A=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue"),l=gg().domain([0,this.tilesetInfo.tile_size]).range([r,r+o]),c=0;C.lineStyle(c,A,1);const u=this.options.barFillColorTop?this.options.barFillColorTop:"green",d=this.options.barFillColorBottom?this.options.barFillColorBottom:"red",h=Kt(u),m=Kt(d),f="barOpacity"in this.options?this.options.barOpacity:1;n.drawnAtScale=this._xScale.copy();let b=0;this.options.valueScaling==="log"?b=this.valueScale(1):b=this.valueScale(0),delete n.svgData;for(let p=0;pb?(C.beginFill(m,f),this.addSVGInfo(n,y,b,B,Z-b,d)):(C.beginFill(h,f),this.addSVGInfo(n,y,Z,B,b-Z,u)),l(p)>this.tilesetInfo.max_pos[0])break;C.drawRect(y,n.svgData.barYValues[p],B,n.svgData.barHeights[p])}}}]),I}(Bj);function LYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Eoe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function i0(e){return i0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},i0(e)}let E1e=function(e){qYt(I,e);var g=eKt(I);function I(i,n){var C;return LYt(this,I),C=g.call(this,i,n),C.setColorScale(n.colorRange),C.opacity=n.opacity||1,C}return UYt(I,[{key:"setColorScale",value:function(n){this.colorScale=n?Oc(n):Nb,this.colorScale=this.colorScale.map(C=>C.map(r=>r/255))}},{key:"rerender",value:function(n){n&&n.colorRange&&this.setColorScale(n.colorRange),this.opacity=n.opacity||1,ZW(i0(I.prototype),"rerender",this).call(this,n)}},{key:"drawAxis",value:function(){}},{key:"drawTile",value:function(n){if(!n.graphics||!n.tileData||!n.tileData.dense)return;const C=n.graphics,{tileX:r,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=n.tileData.dense;if(a.length===0)return;const[s,A]=this.makeValueScale(this.minValue(),this.medianVisibleValue,this.maxValue());if(s.range([254,0]).clamp(!0),this.valueScale=s,C.clear(),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const l=gg().domain([0,this.tilesetInfo.tile_size]).range([r,r+o]);C.lineStyle(0,0,0);for(let c=0;cthis.tilesetInfo.max_pos[0])break;a[c]!==0&&C.drawRect(d,0,h,m)}}}}]),I}(ry);function iKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Moe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function C2(e){return C2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},C2(e)}let M1e=function(e){oKt(I,e);var g=aKt(I);function I(i,n){var C;return iKt(this,I),C=g.call(this,i,n),C.seen=new Set,C.pMain=C.pMobile,C.rows=[],C}return nKt(I,[{key:"uid",value:function(n){return n[n.length-2]}},{key:"segmentOverlap",value:function(n,C){}},{key:"drawAll",value:function(n){this.pMain.clear();const C=new Set,r=n.map(a=>C.has(this.uid(a))?null:(C.add(this.uid(a)),{from:+a[1],to:+a[2],type:a[4],uid:this.uid(a)})).filter(a=>a),o=VX(r);this.rows=o,this.draw()}},{key:"draw",value:function(){const n=this.rows;if(!n)return;const C=xS().range([0,this.dimensions[1]]).padding(.1).domain(nC(0,this.maxRows())),r=this.pMain;r.clear(),r.lineStyle(1,255,0),r.beginFill(16740363,.8);for(let o=0;othis.fetchedTiles[o].tileData.discrete),r=[].concat(...C);this.drawAll(r)}},{key:"initTile",value:function(n){}},{key:"maxRows",value:function(){return this.rows.length}},{key:"updateTile",value:function(n){}},{key:"destroyTile",value:function(n){n.tileData.discrete.forEach(C=>{const r=C[C.length-2];this.seen.has(r)&&this.seen.delete(r)})}},{key:"drawTile",value:function(n){}}]),I}(ny);function cKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function zoe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function c(re){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(_){return _.__proto__||Object.getPrototypeOf(_)},c(re)}const u=Yk,d=vj,h=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=p,e.SlowBuffer=R,e.INSPECT_MAX_BYTES=50;const m=2147483647;e.kMaxLength=m,p.TYPED_ARRAY_SUPPORT=f(),!p.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function f(){try{const re=new Uint8Array(1),E={foo:function(){return 42}};return Object.setPrototypeOf(E,Uint8Array.prototype),Object.setPrototypeOf(re,E),re.foo()===42}catch{return!1}}Object.defineProperty(p.prototype,"parent",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,"offset",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}});function b(re){if(re>m)throw new RangeError('The value "'+re+'" is invalid for option "size"');const E=new Uint8Array(re);return Object.setPrototypeOf(E,p.prototype),E}function p(re,E,_){if(typeof re=="number"){if(typeof E=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return G(re)}return y(re,E,_)}p.poolSize=8192;function y(re,E,_){if(typeof re=="string")return v(re,E);if(ArrayBuffer.isView(re))return V(re);if(re==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof re);if(je(re,ArrayBuffer)||re&&je(re.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(je(re,SharedArrayBuffer)||re&&je(re.buffer,SharedArrayBuffer)))return S(re,E,_);if(typeof re=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const fe=re.valueOf&&re.valueOf();if(fe!=null&&fe!==re)return p.from(fe,E,_);const Ke=X(re);if(Ke)return Ke;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof re[Symbol.toPrimitive]=="function")return p.from(re[Symbol.toPrimitive]("string"),E,_);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof re)}p.from=function(re,E,_){return y(re,E,_)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array);function Z(re){if(typeof re!="number")throw new TypeError('"size" argument must be of type number');if(re<0)throw new RangeError('The value "'+re+'" is invalid for option "size"')}function B(re,E,_){return Z(re),re<=0?b(re):E!==void 0?typeof _=="string"?b(re).fill(E,_):b(re).fill(E):b(re)}p.alloc=function(re,E,_){return B(re,E,_)};function G(re){return Z(re),b(re<0?0:W(re)|0)}p.allocUnsafe=function(re){return G(re)},p.allocUnsafeSlow=function(re){return G(re)};function v(re,E){if((typeof E!="string"||E==="")&&(E="utf8"),!p.isEncoding(E))throw new TypeError("Unknown encoding: "+E);const _=H(re,E)|0;let fe=b(_);const Ke=fe.write(re,E);return Ke!==_&&(fe=fe.slice(0,Ke)),fe}function w(re){const E=re.length<0?0:W(re.length)|0,_=b(E);for(let fe=0;fe=m)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+m.toString(16)+" bytes");return re|0}function R(re){return+re!=re&&(re=0),p.alloc(+re)}p.isBuffer=function(E){return E!=null&&E._isBuffer===!0&&E!==p.prototype},p.compare=function(E,_){if(je(E,Uint8Array)&&(E=p.from(E,E.offset,E.byteLength)),je(_,Uint8Array)&&(_=p.from(_,_.offset,_.byteLength)),!p.isBuffer(E)||!p.isBuffer(_))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(E===_)return 0;let fe=E.length,Ke=_.length;for(let ue=0,le=Math.min(fe,Ke);ueKe.length?(p.isBuffer(le)||(le=p.from(le)),le.copy(Ke,ue)):Uint8Array.prototype.set.call(Ke,le,ue);else if(p.isBuffer(le))le.copy(Ke,ue);else throw new TypeError('"list" argument must be an Array of Buffers');ue+=le.length}return Ke};function H(re,E){if(p.isBuffer(re))return re.length;if(ArrayBuffer.isView(re)||je(re,ArrayBuffer))return re.byteLength;if(typeof re!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof re);const _=re.length,fe=arguments.length>2&&arguments[2]===!0;if(!fe&&_===0)return 0;let Ke=!1;for(;;)switch(E){case"ascii":case"latin1":case"binary":return _;case"utf8":case"utf-8":return Y(re).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _*2;case"hex":return _>>>1;case"base64":return Ve(re).length;default:if(Ke)return fe?-1:Y(re).length;E=(""+E).toLowerCase(),Ke=!0}}p.byteLength=H;function k(re,E,_){let fe=!1;if((E===void 0||E<0)&&(E=0),E>this.length||((_===void 0||_>this.length)&&(_=this.length),_<=0)||(_>>>=0,E>>>=0,_<=E))return"";for(re||(re="utf8");;)switch(re){case"hex":return pe(this,E,_);case"utf8":case"utf-8":return Q(this,E,_);case"ascii":return ne(this,E,_);case"latin1":case"binary":return be(this,E,_);case"base64":return ge(this,E,_);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ve(this,E,_);default:if(fe)throw new TypeError("Unknown encoding: "+re);re=(re+"").toLowerCase(),fe=!0}}p.prototype._isBuffer=!0;function K(re,E,_){const fe=re[E];re[E]=re[_],re[_]=fe}p.prototype.swap16=function(){const E=this.length;if(E%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let _=0;__&&(E+=" ... "),""},h&&(p.prototype[h]=p.prototype.inspect),p.prototype.compare=function(E,_,fe,Ke,ue){if(je(E,Uint8Array)&&(E=p.from(E,E.offset,E.byteLength)),!p.isBuffer(E))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof E);if(_===void 0&&(_=0),fe===void 0&&(fe=E?E.length:0),Ke===void 0&&(Ke=0),ue===void 0&&(ue=this.length),_<0||fe>E.length||Ke<0||ue>this.length)throw new RangeError("out of range index");if(Ke>=ue&&_>=fe)return 0;if(Ke>=ue)return-1;if(_>=fe)return 1;if(_>>>=0,fe>>>=0,Ke>>>=0,ue>>>=0,this===E)return 0;let le=ue-Ke,Ce=fe-_;const oe=Math.min(le,Ce),Re=this.slice(Ke,ue),xe=E.slice(_,fe);for(let Fe=0;Fe2147483647?_=2147483647:_<-2147483648&&(_=-2147483648),_=+_,at(_)&&(_=Ke?0:re.length-1),_<0&&(_=re.length+_),_>=re.length){if(Ke)return-1;_=re.length-1}else if(_<0)if(Ke)_=0;else return-1;if(typeof E=="string"&&(E=p.from(E,fe)),p.isBuffer(E))return E.length===0?-1:J(re,E,_,fe,Ke);if(typeof E=="number")return E=E&255,typeof Uint8Array.prototype.indexOf=="function"?Ke?Uint8Array.prototype.indexOf.call(re,E,_):Uint8Array.prototype.lastIndexOf.call(re,E,_):J(re,[E],_,fe,Ke);throw new TypeError("val must be string, number or Buffer")}function J(re,E,_,fe,Ke){let ue=1,le=re.length,Ce=E.length;if(fe!==void 0&&(fe=String(fe).toLowerCase(),fe==="ucs2"||fe==="ucs-2"||fe==="utf16le"||fe==="utf-16le")){if(re.length<2||E.length<2)return-1;ue=2,le/=2,Ce/=2,_/=2}function oe(xe,Fe){return ue===1?xe[Fe]:xe.readUInt16BE(Fe*ue)}let Re;if(Ke){let xe=-1;for(Re=_;Rele&&(_=le-Ce),Re=_;Re>=0;Re--){let xe=!0;for(let Fe=0;FeKe&&(fe=Ke)):fe=Ke;const ue=E.length;fe>ue/2&&(fe=ue/2);let le;for(le=0;le>>0,isFinite(fe)?(fe=fe>>>0,Ke===void 0&&(Ke="utf8")):(Ke=fe,fe=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const ue=this.length-_;if((fe===void 0||fe>ue)&&(fe=ue),E.length>0&&(fe<0||_<0)||_>this.length)throw new RangeError("Attempt to write outside buffer bounds");Ke||(Ke="utf8");let le=!1;for(;;)switch(Ke){case"hex":return P(this,E,_,fe);case"utf8":case"utf-8":return te(this,E,_,fe);case"ascii":case"latin1":case"binary":return q(this,E,_,fe);case"base64":return $(this,E,_,fe);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,E,_,fe);default:if(le)throw new TypeError("Unknown encoding: "+Ke);Ke=(""+Ke).toLowerCase(),le=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function ge(re,E,_){return E===0&&_===re.length?u.fromByteArray(re):u.fromByteArray(re.slice(E,_))}function Q(re,E,_){_=Math.min(re.length,_);const fe=[];let Ke=E;for(;Ke<_;){const ue=re[Ke];let le=null,Ce=ue>239?4:ue>223?3:ue>191?2:1;if(Ke+Ce<=_){let oe,Re,xe,Fe;switch(Ce){case 1:ue<128&&(le=ue);break;case 2:oe=re[Ke+1],(oe&192)===128&&(Fe=(ue&31)<<6|oe&63,Fe>127&&(le=Fe));break;case 3:oe=re[Ke+1],Re=re[Ke+2],(oe&192)===128&&(Re&192)===128&&(Fe=(ue&15)<<12|(oe&63)<<6|Re&63,Fe>2047&&(Fe<55296||Fe>57343)&&(le=Fe));break;case 4:oe=re[Ke+1],Re=re[Ke+2],xe=re[Ke+3],(oe&192)===128&&(Re&192)===128&&(xe&192)===128&&(Fe=(ue&15)<<18|(oe&63)<<12|(Re&63)<<6|xe&63,Fe>65535&&Fe<1114112&&(le=Fe))}}le===null?(le=65533,Ce=1):le>65535&&(le-=65536,fe.push(le>>>10&1023|55296),le=56320|le&1023),fe.push(le),Ke+=Ce}return he(fe)}const Ie=4096;function he(re){const E=re.length;if(E<=Ie)return String.fromCharCode.apply(String,re);let _="",fe=0;for(;fefe)&&(_=fe);let Ke="";for(let ue=E;ue<_;++ue)Ke+=bt[re[ue]];return Ke}function ve(re,E,_){const fe=re.slice(E,_);let Ke="";for(let ue=0;uefe&&(E=fe),_<0?(_+=fe,_<0&&(_=0)):_>fe&&(_=fe),__)throw new RangeError("Trying to access beyond buffer length")}p.prototype.readUintLE=p.prototype.readUIntLE=function(E,_,fe){E=E>>>0,_=_>>>0,fe||We(E,_,this.length);let Ke=this[E],ue=1,le=0;for(;++le<_&&(ue*=256);)Ke+=this[E+le]*ue;return Ke},p.prototype.readUintBE=p.prototype.readUIntBE=function(E,_,fe){E=E>>>0,_=_>>>0,fe||We(E,_,this.length);let Ke=this[E+--_],ue=1;for(;_>0&&(ue*=256);)Ke+=this[E+--_]*ue;return Ke},p.prototype.readUint8=p.prototype.readUInt8=function(E,_){return E=E>>>0,_||We(E,1,this.length),this[E]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(E,_){return E=E>>>0,_||We(E,2,this.length),this[E]|this[E+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(E,_){return E=E>>>0,_||We(E,2,this.length),this[E]<<8|this[E+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(E,_){return E=E>>>0,_||We(E,4,this.length),(this[E]|this[E+1]<<8|this[E+2]<<16)+this[E+3]*16777216},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(E,_){return E=E>>>0,_||We(E,4,this.length),this[E]*16777216+(this[E+1]<<16|this[E+2]<<8|this[E+3])},p.prototype.readBigUInt64LE=ct(function(E){E=E>>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ke=_+this[++E]*2**8+this[++E]*2**16+this[++E]*2**24,ue=this[++E]+this[++E]*2**8+this[++E]*2**16+fe*2**24;return BigInt(Ke)+(BigInt(ue)<>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ke=_*2**24+this[++E]*2**16+this[++E]*2**8+this[++E],ue=this[++E]*2**24+this[++E]*2**16+this[++E]*2**8+fe;return(BigInt(Ke)<>>0,_=_>>>0,fe||We(E,_,this.length);let Ke=this[E],ue=1,le=0;for(;++le<_&&(ue*=256);)Ke+=this[E+le]*ue;return ue*=128,Ke>=ue&&(Ke-=Math.pow(2,8*_)),Ke},p.prototype.readIntBE=function(E,_,fe){E=E>>>0,_=_>>>0,fe||We(E,_,this.length);let Ke=_,ue=1,le=this[E+--Ke];for(;Ke>0&&(ue*=256);)le+=this[E+--Ke]*ue;return ue*=128,le>=ue&&(le-=Math.pow(2,8*_)),le},p.prototype.readInt8=function(E,_){return E=E>>>0,_||We(E,1,this.length),this[E]&128?(255-this[E]+1)*-1:this[E]},p.prototype.readInt16LE=function(E,_){E=E>>>0,_||We(E,2,this.length);const fe=this[E]|this[E+1]<<8;return fe&32768?fe|4294901760:fe},p.prototype.readInt16BE=function(E,_){E=E>>>0,_||We(E,2,this.length);const fe=this[E+1]|this[E]<<8;return fe&32768?fe|4294901760:fe},p.prototype.readInt32LE=function(E,_){return E=E>>>0,_||We(E,4,this.length),this[E]|this[E+1]<<8|this[E+2]<<16|this[E+3]<<24},p.prototype.readInt32BE=function(E,_){return E=E>>>0,_||We(E,4,this.length),this[E]<<24|this[E+1]<<16|this[E+2]<<8|this[E+3]},p.prototype.readBigInt64LE=ct(function(E){E=E>>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ke=this[E+4]+this[E+5]*2**8+this[E+6]*2**16+(fe<<24);return(BigInt(Ke)<>>0,ye(E,"offset");const _=this[E],fe=this[E+7];(_===void 0||fe===void 0)&&He(E,this.length-8);const Ke=(_<<24)+this[++E]*2**16+this[++E]*2**8+this[++E];return(BigInt(Ke)<>>0,_||We(E,4,this.length),d.read(this,E,!0,23,4)},p.prototype.readFloatBE=function(E,_){return E=E>>>0,_||We(E,4,this.length),d.read(this,E,!1,23,4)},p.prototype.readDoubleLE=function(E,_){return E=E>>>0,_||We(E,8,this.length),d.read(this,E,!0,52,8)},p.prototype.readDoubleBE=function(E,_){return E=E>>>0,_||We(E,8,this.length),d.read(this,E,!1,52,8)};function Be(re,E,_,fe,Ke,ue){if(!p.isBuffer(re))throw new TypeError('"buffer" argument must be a Buffer instance');if(E>Ke||Ere.length)throw new RangeError("Index out of range")}p.prototype.writeUintLE=p.prototype.writeUIntLE=function(E,_,fe,Ke){if(E=+E,_=_>>>0,fe=fe>>>0,!Ke){const Ce=Math.pow(2,8*fe)-1;Be(this,E,_,fe,Ce,0)}let ue=1,le=0;for(this[_]=E&255;++le>>0,fe=fe>>>0,!Ke){const Ce=Math.pow(2,8*fe)-1;Be(this,E,_,fe,Ce,0)}let ue=fe-1,le=1;for(this[_+ue]=E&255;--ue>=0&&(le*=256);)this[_+ue]=E/le&255;return _+fe},p.prototype.writeUint8=p.prototype.writeUInt8=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,1,255,0),this[_]=E&255,_+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,65535,0),this[_]=E&255,this[_+1]=E>>>8,_+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,65535,0),this[_]=E>>>8,this[_+1]=E&255,_+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,4294967295,0),this[_+3]=E>>>24,this[_+2]=E>>>16,this[_+1]=E>>>8,this[_]=E&255,_+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,4294967295,0),this[_]=E>>>24,this[_+1]=E>>>16,this[_+2]=E>>>8,this[_+3]=E&255,_+4};function Je(re,E,_,fe,Ke){ae(E,fe,Ke,re,_,7);let ue=Number(E&BigInt(4294967295));re[_++]=ue,ue=ue>>8,re[_++]=ue,ue=ue>>8,re[_++]=ue,ue=ue>>8,re[_++]=ue;let le=Number(E>>BigInt(32)&BigInt(4294967295));return re[_++]=le,le=le>>8,re[_++]=le,le=le>>8,re[_++]=le,le=le>>8,re[_++]=le,_}function Pe(re,E,_,fe,Ke){ae(E,fe,Ke,re,_,7);let ue=Number(E&BigInt(4294967295));re[_+7]=ue,ue=ue>>8,re[_+6]=ue,ue=ue>>8,re[_+5]=ue,ue=ue>>8,re[_+4]=ue;let le=Number(E>>BigInt(32)&BigInt(4294967295));return re[_+3]=le,le=le>>8,re[_+2]=le,le=le>>8,re[_+1]=le,le=le>>8,re[_]=le,_+8}p.prototype.writeBigUInt64LE=ct(function(E,_=0){return Je(this,E,_,BigInt(0),BigInt("0xffffffffffffffff"))}),p.prototype.writeBigUInt64BE=ct(function(E,_=0){return Pe(this,E,_,BigInt(0),BigInt("0xffffffffffffffff"))}),p.prototype.writeIntLE=function(E,_,fe,Ke){if(E=+E,_=_>>>0,!Ke){const oe=Math.pow(2,8*fe-1);Be(this,E,_,fe,oe-1,-oe)}let ue=0,le=1,Ce=0;for(this[_]=E&255;++ue>0)-Ce&255;return _+fe},p.prototype.writeIntBE=function(E,_,fe,Ke){if(E=+E,_=_>>>0,!Ke){const oe=Math.pow(2,8*fe-1);Be(this,E,_,fe,oe-1,-oe)}let ue=fe-1,le=1,Ce=0;for(this[_+ue]=E&255;--ue>=0&&(le*=256);)E<0&&Ce===0&&this[_+ue+1]!==0&&(Ce=1),this[_+ue]=(E/le>>0)-Ce&255;return _+fe},p.prototype.writeInt8=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,1,127,-128),E<0&&(E=255+E+1),this[_]=E&255,_+1},p.prototype.writeInt16LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,32767,-32768),this[_]=E&255,this[_+1]=E>>>8,_+2},p.prototype.writeInt16BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,2,32767,-32768),this[_]=E>>>8,this[_+1]=E&255,_+2},p.prototype.writeInt32LE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,2147483647,-2147483648),this[_]=E&255,this[_+1]=E>>>8,this[_+2]=E>>>16,this[_+3]=E>>>24,_+4},p.prototype.writeInt32BE=function(E,_,fe){return E=+E,_=_>>>0,fe||Be(this,E,_,4,2147483647,-2147483648),E<0&&(E=4294967295+E+1),this[_]=E>>>24,this[_+1]=E>>>16,this[_+2]=E>>>8,this[_+3]=E&255,_+4},p.prototype.writeBigInt64LE=ct(function(E,_=0){return Je(this,E,_,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),p.prototype.writeBigInt64BE=ct(function(E,_=0){return Pe(this,E,_,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function De(re,E,_,fe,Ke,ue){if(_+fe>re.length)throw new RangeError("Index out of range");if(_<0)throw new RangeError("Index out of range")}function Qe(re,E,_,fe,Ke){return E=+E,_=_>>>0,Ke||De(re,E,_,4),d.write(re,E,_,fe,23,4),_+4}p.prototype.writeFloatLE=function(E,_,fe){return Qe(this,E,_,!0,fe)},p.prototype.writeFloatBE=function(E,_,fe){return Qe(this,E,_,!1,fe)};function _e(re,E,_,fe,Ke){return E=+E,_=_>>>0,Ke||De(re,E,_,8),d.write(re,E,_,fe,52,8),_+8}p.prototype.writeDoubleLE=function(E,_,fe){return _e(this,E,_,!0,fe)},p.prototype.writeDoubleBE=function(E,_,fe){return _e(this,E,_,!1,fe)},p.prototype.copy=function(E,_,fe,Ke){if(!p.isBuffer(E))throw new TypeError("argument should be a Buffer");if(fe||(fe=0),!Ke&&Ke!==0&&(Ke=this.length),_>=E.length&&(_=E.length),_||(_=0),Ke>0&&Ke=this.length)throw new RangeError("Index out of range");if(Ke<0)throw new RangeError("sourceEnd out of bounds");Ke>this.length&&(Ke=this.length),E.length-_>>0,fe=fe===void 0?this.length:fe>>>0,E||(E=0);let ue;if(typeof E=="number")for(ue=_;ue2**32?Ke=tt(String(_)):typeof _=="bigint"&&(Ke=String(_),(_>BigInt(2)**BigInt(32)||_<-(BigInt(2)**BigInt(32)))&&(Ke=tt(Ke)),Ke+="n"),fe+=` It must be ${E}. Received ${Ke}`,fe},RangeError);function tt(re){let E="",_=re.length;const fe=re[0]==="-"?1:0;for(;_>=fe+4;_-=3)E=`_${re.slice(_-3,_)}${E}`;return`${re.slice(0,_)}${E}`}function Xe(re,E,_){ye(E,"offset"),(re[E]===void 0||re[E+_]===void 0)&&He(E,re.length-(_+1))}function ae(re,E,_,fe,Ke,ue){if(re>_||re3?E===0||E===BigInt(0)?Ce=`>= 0${le} and < 2${le} ** ${(ue+1)*8}${le}`:Ce=`>= -(2${le} ** ${(ue+1)*8-1}${le}) and < 2 ** ${(ue+1)*8-1}${le}`:Ce=`>= ${E}${le} and <= ${_}${le}`,new gt.ERR_OUT_OF_RANGE("value",Ce,re)}Xe(fe,Ke,ue)}function ye(re,E){if(typeof re!="number")throw new gt.ERR_INVALID_ARG_TYPE(E,"number",re)}function He(re,E,_){throw Math.floor(re)!==re?(ye(re,_),new gt.ERR_OUT_OF_RANGE(_||"offset","an integer",re)):E<0?new gt.ERR_BUFFER_OUT_OF_BOUNDS:new gt.ERR_OUT_OF_RANGE(_||"offset",`>= ${_?1:0} and <= ${E}`,re)}const F=/[^+/0-9A-Za-z-_]/g;function T(re){if(re=re.split("=")[0],re=re.trim().replace(F,""),re.length<2)return"";for(;re.length%4!==0;)re=re+"=";return re}function Y(re,E){E=E||1/0;let _;const fe=re.length;let Ke=null;const ue=[];for(let le=0;le55295&&_<57344){if(!Ke){if(_>56319){(E-=3)>-1&&ue.push(239,191,189);continue}else if(le+1===fe){(E-=3)>-1&&ue.push(239,191,189);continue}Ke=_;continue}if(_<56320){(E-=3)>-1&&ue.push(239,191,189),Ke=_;continue}_=(Ke-55296<<10|_-56320)+65536}else Ke&&(E-=3)>-1&&ue.push(239,191,189);if(Ke=null,_<128){if((E-=1)<0)break;ue.push(_)}else if(_<2048){if((E-=2)<0)break;ue.push(_>>6|192,_&63|128)}else if(_<65536){if((E-=3)<0)break;ue.push(_>>12|224,_>>6&63|128,_&63|128)}else if(_<1114112){if((E-=4)<0)break;ue.push(_>>18|240,_>>12&63|128,_>>6&63|128,_&63|128)}else throw new Error("Invalid code point")}return ue}function ie(re){const E=[];for(let _=0;_>8,Ke=_%256,ue.push(Ke),ue.push(fe);return ue}function Ve(re){return u.toByteArray(T(re))}function we(re,E,_,fe){let Ke;for(Ke=0;Ke=E.length||Ke>=re.length);++Ke)E[Ke+_]=re[Ke];return Ke}function je(re,E){return re instanceof E||re!=null&&re.constructor!=null&&re.constructor.name!=null&&re.constructor.name===E.name}function at(re){return re!==re}const bt=function(){const re="0123456789abcdef",E=new Array(256);for(let _=0;_<16;++_){const fe=_*16;for(let Ke=0;Ke<16;++Ke)E[fe+Ke]=re[_]+re[Ke]}return E}();function ct(re){return typeof BigInt>"u"?Ht:re}function Ht(){throw new Error("BigInt not supported")}})(d1e);var Lc=Ti,Cn=vNt,m1e=d1e.Buffer;globalThis.__TYPEDARRAY_POOL||(globalThis.__TYPEDARRAY_POOL={UINT8:Cn([32,0]),UINT16:Cn([32,0]),UINT32:Cn([32,0]),BIGUINT64:Cn([32,0]),INT8:Cn([32,0]),INT16:Cn([32,0]),INT32:Cn([32,0]),BIGINT64:Cn([32,0]),FLOAT:Cn([32,0]),DOUBLE:Cn([32,0]),DATA:Cn([32,0]),UINT8C:Cn([32,0]),BUFFER:Cn([32,0])});var TNt=typeof Uint8ClampedArray<"u",NNt=typeof BigUint64Array<"u",kNt=typeof BigInt64Array<"u",AI=globalThis.__TYPEDARRAY_POOL;AI.UINT8C||(AI.UINT8C=Cn([32,0]));AI.BIGUINT64||(AI.BIGUINT64=Cn([32,0]));AI.BIGINT64||(AI.BIGINT64=Cn([32,0]));AI.BUFFER||(AI.BUFFER=Cn([32,0]));var Kk=AI.DATA,Fk=AI.BUFFER;lg.free=function(g){if(m1e.isBuffer(g))Fk[Lc.log2(g.length)].push(g);else{if(Object.prototype.toString.call(g)!=="[object ArrayBuffer]"&&(g=g.buffer),!g)return;var i=g.length||g.byteLength,I=Lc.log2(i)|0;Kk[I].push(g)}};function f1e(e){if(e){var g=e.length||e.byteLength,i=Lc.log2(g);Kk[i].push(e)}}function YNt(e){f1e(e.buffer)}lg.freeUint8=lg.freeUint16=lg.freeUint32=lg.freeBigUint64=lg.freeInt8=lg.freeInt16=lg.freeInt32=lg.freeBigInt64=lg.freeFloat32=lg.freeFloat=lg.freeFloat64=lg.freeDouble=lg.freeUint8Clamped=lg.freeDataView=YNt;lg.freeArrayBuffer=f1e;lg.freeBuffer=function(g){Fk[Lc.log2(g.length)].push(g)};lg.malloc=function(g,i){if(i===void 0||i==="arraybuffer")return _r(g);switch(i){case"uint8":return Bj(g);case"uint16":return p1e(g);case"uint32":return b1e(g);case"int8":return y1e(g);case"int16":return Z1e(g);case"int32":return G1e(g);case"float":case"float32":return v1e(g);case"double":case"float64":return B1e(g);case"uint8_clamped":return S1e(g);case"bigint64":return R1e(g);case"biguint64":return w1e(g);case"buffer":return W1e(g);case"data":case"dataview":return V1e(g);default:return null}return null};function _r(g){var g=Lc.nextPow2(g),i=Lc.log2(g),I=Kk[i];return I.length>0?I.pop():new ArrayBuffer(g)}lg.mallocArrayBuffer=_r;function Bj(e){return new Uint8Array(_r(e),0,e)}lg.mallocUint8=Bj;function p1e(e){return new Uint16Array(_r(2*e),0,e)}lg.mallocUint16=p1e;function b1e(e){return new Uint32Array(_r(4*e),0,e)}lg.mallocUint32=b1e;function y1e(e){return new Int8Array(_r(e),0,e)}lg.mallocInt8=y1e;function Z1e(e){return new Int16Array(_r(2*e),0,e)}lg.mallocInt16=Z1e;function G1e(e){return new Int32Array(_r(4*e),0,e)}lg.mallocInt32=G1e;function v1e(e){return new Float32Array(_r(4*e),0,e)}lg.mallocFloat32=lg.mallocFloat=v1e;function B1e(e){return new Float64Array(_r(8*e),0,e)}lg.mallocFloat64=lg.mallocDouble=B1e;function S1e(e){return TNt?new Uint8ClampedArray(_r(e),0,e):Bj(e)}lg.mallocUint8Clamped=S1e;function w1e(e){return NNt?new BigUint64Array(_r(8*e),0,e):null}lg.mallocBigUint64=w1e;function R1e(e){return kNt?new BigInt64Array(_r(8*e),0,e):null}lg.mallocBigInt64=R1e;function V1e(e){return new DataView(_r(e),0,e)}lg.mallocDataView=V1e;function W1e(e){e=Lc.nextPow2(e);var g=Lc.log2(e),i=Fk[g];return i.length>0?i.pop():new m1e(e)}lg.mallocBuffer=W1e;lg.clearCache=function(){for(var g=0;g<32;++g)AI.UINT8[g].length=0,AI.UINT16[g].length=0,AI.UINT32[g].length=0,AI.INT8[g].length=0,AI.INT16[g].length=0,AI.INT32[g].length=0,AI.FLOAT[g].length=0,AI.DOUBLE[g].length=0,AI.BIGUINT64[g].length=0,AI.BIGINT64[g].length=0,AI.UINT8C[g].length=0,Kk[g].length=0,Fk[g].length=0};var KNt=FNt,ZW=32;function FNt(e,g){g<=4*ZW?GW(0,g-1,e):vW(0,g-1,e)}function GW(e,g,i){for(var I=2*(e+1),n=e+1;n<=g;++n){for(var r=i[I++],C=i[I++],o=n,a=I-2;o-- >e;){var s=i[a-2],A=i[a-1];if(si[g+1]:!0}function FV(e,g,i,I){e*=2;var n=I[e];return n>1,o=C-I,a=C+I,s=n,A=o,l=C,c=a,u=r,d=e+1,h=g-1,m=0;_A(s,A,i)&&(m=s,s=A,A=m),_A(c,u,i)&&(m=c,c=u,u=m),_A(s,l,i)&&(m=s,s=l,l=m),_A(A,l,i)&&(m=A,A=l,l=m),_A(s,c,i)&&(m=s,s=c,c=m),_A(l,c,i)&&(m=l,l=c,c=m),_A(A,u,i)&&(m=A,A=u,u=m),_A(A,l,i)&&(m=A,A=l,l=m),_A(c,u,i)&&(m=c,c=u,u=m);for(var f=i[2*A],b=i[2*A+1],p=i[2*c],y=i[2*c+1],Z=2*s,B=2*l,G=2*u,v=2*n,w=2*C,V=2*r,S=0;S<2;++S){var X=i[Z+S],W=i[B+S],R=i[G+S];i[v+S]=X,i[w+S]=W,i[V+S]=R}Soe(o,e,i),Soe(a,g,i);for(var H=d;H<=h;++H)if(FV(H,f,b,i))H!==d&&Boe(H,d,i),++d;else if(!FV(H,p,y,i))for(;;)if(FV(h,p,y,i)){FV(h,f,b,i)?(DNt(H,d,h,i),++d,--h):(Boe(H,h,i),--h);break}else{if(--h>>1;Dk(og,b);for(var p=0,y=0,d=0;d=AC)Z=Z-AC|0,Jp(Xs,Dd,y--,Z);else if(Z>=0)Jp(sn,Ws,p--,Z);else if(Z<=-AC){Z=-Z-AC|0;for(var B=0;B>>1;Dk(og,b);for(var p=0,y=0,Z=0,d=0;d>1===og[2*d+3]>>1&&(G=2,d+=1),B<0){for(var v=-(B>>1)-1,w=0;w>1)-1;G===0?Jp(sn,Ws,p--,v):G===1?Jp(Xs,Dd,y--,v):G===2&&Jp(Pp,Zv,Z--,v)}}}function PNt(e,g,i,I,n,r,C,o,a,s,A,l){var c=0,u=2*e,d=g,h=g+e,m=1,f=1;I?f=AC:m=AC;for(var b=n;b>>1;Dk(og,B);for(var G=0,b=0;b=AC?(w=!I,p-=AC):(w=!!I,p-=1),w)Op(sn,Ws,G++,p);else{var V=l[p],S=u*p,X=A[S+g+1],W=A[S+g+1+e];e:for(var R=0;R>>1;Dk(og,p);for(var y=0,h=0;h=AC)sn[y++]=m-AC;else{m-=1;var B=A[m],G=c*m,v=s[G+g+1],w=s[G+g+1+e];e:for(var V=0;V=0;--V)if(sn[V]===m){for(var R=V+1;R"+Rj+"-"+r2+"){"),e?(r(!0,!1),n.push("}else{"),r(!1,!1)):(n.push("if("+qD+"){"),r(!0,!0),n.push("}else{"),r(!0,!1),n.push("}}else{if("+qD+"){"),r(!1,!0),n.push("}else{"),r(!1,!1),n.push("}")),n.push("}}return "+g);var C=i.join("")+n.join(""),o=new Function(C);return o()}Sj.partial=k1e(!1);Sj.full=k1e(!0);var Y1e=LNt,_Nt="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m";function LNt(e,g){var i="abcdef".split("").concat(g),I=[];return e.indexOf("lo")>=0&&I.push("lo=e[k+n]"),e.indexOf("hi")>=0&&I.push("hi=e[k+o]"),i.push(_Nt.replace("_",I.join()).replace("$",e)),Function.apply(void 0,i)}var UNt=qNt,QNt=Y1e,Roe=QNt("loi&&n[l+g]>s;--A,l-=C){for(var c=l,u=l+C,d=0;d>>1,s=2*e,A=a,l=n[s*a+g];C=m?(A=h,l=m):d>=b?(A=u,l=d):(A=f,l=b):m>=b?(A=h,l=m):b>=d?(A=u,l=d):(A=f,l=b);for(var Z=s*(o-1),B=s*A,p=0;p=p0)&&!(p1>=hi)",["p0","p1"]),Woe=oy("lo===p0",["p0"]),Ckt=oy("lo0;){s-=1;var c=s*Vj,u=qn[c],d=qn[c+1],h=qn[c+2],m=qn[c+3],f=qn[c+4],b=qn[c+5],p=s*Wj,y=xd[p],Z=xd[p+1],B=b&1,G=!!(b&16),v=n,w=r,V=o,S=a;if(B&&(v=o,w=a,V=n,S=r),!(b&2&&(h=Ckt(e,u,d,h,v,w,Z),d>=h))&&!(b&4&&(d=okt(e,u,d,h,v,w,y),d>=h))){var X=h-d,W=f-m;if(G){if(e*X*(X+W)>>1;if(!(C<=0)){var o,a=Sl.mallocDouble(2*C*n),s=Sl.mallocInt32(n);if(n=Hoe(e,C,a,s),n>0){if(C===1&&I)DV.init(n),o=DV.sweepComplete(C,i,0,n,a,s,0,n,a,s);else{var A=Sl.mallocDouble(2*C*r),l=Sl.mallocInt32(r);r=Hoe(g,C,A,l),r>0&&(DV.init(n+r),C===1?o=DV.sweepBipartite(C,i,0,n,a,s,0,r,A,l):o=dkt(C,i,I,n,a,s,r,A,l),Sl.free(A),Sl.free(l))}Sl.free(a),Sl.free(s)}return o}}}var iS;function D1e(e,g){iS.push([e,g])}function mkt(e){return iS=[],C2(e,e,D1e,!0),iS}function fkt(e,g){return iS=[],C2(e,g,D1e,!1),iS}function pkt(e,g,i){switch(arguments.length){case 1:return mkt(e);case 2:return typeof g=="function"?C2(e,e,g,!0):fkt(e,g);case 3:return C2(e,g,i,!1);default:throw new Error("box-intersect: Invalid arguments")}}const yw=Or(ukt);var x1e={exports:{}},E1e=bkt,Toe=+(Math.pow(2,27)+1);function bkt(e,g,i){var I=e*g,n=Toe*e,r=n-e,C=n-r,o=e-C,a=Toe*g,s=a-g,A=a-s,l=g-A,c=I-C*A,u=c-o*A,d=u-C*l,h=o*l-d;return i?(i[0]=h,i[1]=I,i):[h,I]}var ykt=Gkt;function Zkt(e,g){var i=e+g,I=i-e,n=i-I,r=g-I,C=e-n,o=C+r;return o?[o,i]:[i]}function Gkt(e,g){var i=e.length|0,I=g.length|0;if(i===1&&I===1)return Zkt(e[0],g[0]);var n=i+I,r=new Array(n),C=0,o=0,a=0,s=Math.abs,A=e[o],l=s(A),c=g[a],u=s(c),d,h;l=I?(d=A,o+=1,o=I?(d=A,o+=1,o0){if(v<=0)return w;V=G+v}else if(G<0){if(v>=0)return w;V=-(G+v)}else return w;var S=o*V;return w>=S||w<=-S?w:u(y,Z,B)},function(y,Z,B,G){var v=y[0]-G[0],w=Z[0]-G[0],V=B[0]-G[0],S=y[1]-G[1],X=Z[1]-G[1],W=B[1]-G[1],R=y[2]-G[2],H=Z[2]-G[2],k=B[2]-G[2],K=w*W,D=V*X,J=V*S,P=v*W,te=v*X,q=w*S,$=R*(K-D)+H*(J-P)+k*(te-q),j=(Math.abs(K)+Math.abs(D))*Math.abs(R)+(Math.abs(J)+Math.abs(P))*Math.abs(H)+(Math.abs(te)+Math.abs(q))*Math.abs(k),ge=a*j;return $>ge||-$>ge?$:d(y,Z,B,G)}];function m(p){var y=h[p.length];return y||(y=h[p.length]=c(p.length)),y.apply(void 0,p)}function f(p,y,Z,B,G,v,w){return function(S,X,W,R,H){switch(arguments.length){case 0:case 1:return 0;case 2:return B(S,X);case 3:return G(S,X,W);case 4:return v(S,X,W,R);case 5:return w(S,X,W,R,H)}for(var k=new Array(arguments.length),K=0;K0;){var b=(a+n-1)%n,p=e[b];if(p[1]!==I)break;var y=p[0];m=Math.min(m,y),f=Math.max(f,y),a=b}if(a===0)return m<=i&&i<=f?0:1;C=a+1}for(var Z=e[(a+n-1)%n][1];o+1"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function FC(e){return FC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},FC(e)}const koe=16,Yoe=50,Ix=5e3,Koe=5,Jkt=14,Yu={fontSize:`${Jkt}px`,fontFamily:"Arial",stroke:"white",strokeThickness:2,fontWeight:400,dropShadow:!0,dropShadowColor:"white",dropShadowDistance:0,dropShadowBlur:2};let z1e=function(e){xkt(i,e);var g=Ekt(i);function i(I,n){var r;return kkt(this,i),r=g.call(this,I,n),r.valueScaleTransform=JI,r}return Ykt(i,[{key:"initialize",value:function(){this.initialized||([this.prevK,this.vertK,this.vertY]=[1,1,0],this.drawnRects||(this.drawnRects={}),this.colorScale||(this.options.colorRange?this.colorScale=_c(this.options.colorRange):this.colorScale=Yb),this.initialized=!0)}},{key:"initTile",value:function(n){n.texts={},n.rectGraphics=new ot.PIXI.Graphics,n.textGraphics=new ot.PIXI.Graphics,n.graphics.addChild(n.rectGraphics),n.graphics.addChild(n.textGraphics);let r=[],C=[];if(n.tileData&&n.tileData.length){if(n.tileData.sort((o,a)=>a.importance-o.importance),!this.options||!this.options.valueColumn){const o=n.tileData.map(a=>{const s=+a.chrOffset;return{from:+a.fields[1]+s,to:+a.fields[2]+s,value:a,text:a.fields[3],strand:a.fields.length>=6&&a.fields[5]==="-"?"-":"+"}});r=HX(o.filter(a=>a.strand==="+")),C=HX(o.filter(a=>a.strand==="-"))}else r=[n.tileData.map(o=>({value:o}))];n.plusStrandRows=r,n.minusStrandRows=C,this.options.showTexts&&n.tileData.forEach((o,a)=>{const s=o.fields;if(o.importance||(o.importance=Math.random()),n.textWidths={},n.textHeights={},a>=(+this.options.maxTexts||Yoe))return;const A=new ot.PIXI.Text(s[3],{...Yu,fontSize:+this.options.fontSize||Yu.fontSize});this.flipText&&(A.scale.x=-1),A.anchor.x=.5,A.anchor.y=.5,n.texts[o.uid]=A,n.textGraphics.addChild(A)})}n.initialized=!0}},{key:"removeTileRects",value:function(n){const r=+n.tileId.split(".")[0];n.rectGraphics.clear(),n.rendered=!1,n.tileData&&n.tileData.length&&n.tileData.forEach((C,o)=>{this.drawnRects[r]&&this.drawnRects[r][C.uid]&&this.drawnRects[r][C.uid][2]===n.tileId&&delete this.drawnRects[r][C.uid]})}},{key:"destroyTile",value:function(n){this.removeTileRects(n),n.graphics.removeChild(n.textGraphics),n.graphics.removeChild(n.rectGraphics)}},{key:"removeTiles",value:function(n){Da(FC(i.prototype),"removeTiles",this).call(this,n)}},{key:"drawTile",value:function(n){this.options&&this.options.valueColumn&&this.valueScale&&this.drawAxis(this.valueScale)}},{key:"rerender",value:function(n,r){Da(FC(i.prototype),"rerender",this).call(this,n,r),this.valueScale=null,this.drawnRects={},this.options.colorRange?this.colorScale=_c(this.options.colorRange):this.colorScale=Yb;for(const C of this.visibleAndFetchedTiles())this.destroyTile(C),this.initTile(C),this.renderTile(C)}},{key:"updateTile",value:function(n){this.areAllVisibleTilesLoaded()&&this.renderTile(n)}},{key:"allVisibleRects",value:function(){const n={};Object.values(this.fetchedTiles).forEach(a=>{if(a.plusStrandRows)for(const s of a.plusStrandRows[0])n[s.value.uid]||(n[s.value.uid]=s)});const r=Object.values(n).sort((a,s)=>a.from-s.from);let C=0,o=0;for(let a=0;a=0&&r.length;a--)r[a].staggeredStartPosition=(o+C-a)%2;return n}},{key:"drawSegmentStyle",value:function(n,r,C,o,a,s){const l=o+a/2,c=[r,o,r+2*.1,o,r+2*.1,l-.1,C-2*.1,l-.1,C-2*.1,o,C,o,C,o+a,C-2*.1,o+a,C-2*.1,l+.1,r+2*.1,l+.1,r+2*.1,o+a,r,o+a];return n.rectGraphics.drawPolygon(c),c}},{key:"drawPoly",value:function(n,r,C,o,a,s){let A=null;return this.options.annotationStyle==="segment"?this.drawSegmentStyle(n,r,C,o,a,s):((s==="+"||s==="-")&&C-r=(+this.options.maxTexts||Yoe)||!n.texts[h.uid])continue;const X=n.texts[h.uid];X.position.x=this._xScale(y),X.position.y=v+B/2,X.nominalY=v+B/2,S&&(X.alreadyDrawn=!0);const W=this.options.fontColor!==void 0?Kt(this.options.fontColor):s;if(X.style={...Yu,fill:W,fontSize:+this.options.fontSize||Yu.fontSize},!(m[3]in n.textWidths)){X.updateTransform();const R=X.getBounds().width,H=X.getBounds().height,k=5;n.textWidths[m[3]]=R,n.textHeights[m[3]]=H-k}}}},{key:"renderTile",value:function(n){let r=n.plusStrandRows?n.plusStrandRows.length:1,C=n.minusStrandRows?n.minusStrandRows.length:1;for(const o of this.visibleAndFetchedTiles()){if(!o.initialized)return;!o.plusStrandRows&&!o.minusStrandRows||(r=Math.max(o.plusStrandRows.length,r),C=Math.max(o.minusStrandRows.length,C))}if(n.rendered&&this.removeTileRects(n),n.drawnAtScale=this._xScale.copy(),n.rendered=!0,this.setValueScale(),this.setColorValueScale(),n.tileData&&n.tileData.length){const o=this.options.plusStrandColor||this.options.fillColor||"blue",a=this.options.minusStrandColor||this.options.fillColor||"purple",s=0;let A=0;this.options.separatePlusMinusStrands?A=r*this.dimensions[1]/(r+C)-s/2:A=this.dimensions[1],this.renderRows(n,n.plusStrandRows,r,0,A,o),this.renderRows(n,n.minusStrandRows,C,this.options.separatePlusMinusStrands?A+s/2:0,this.dimensions[1],a)}Fd.stretchRects(this,[o=>o.rectGraphics])}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);let r=Math.min(n,this.maxZoom);return r=Math.max(r,0),r}},{key:"minVisibleValueInTiles",value:function(n){let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));let C=Math.min.apply(null,r.map(o=>this.fetchedTiles[o]).filter(o=>o.tileData&&o.tileData.length).map(o=>Math.min.apply(null,o.tileData.sort((a,s)=>s.importance-a.importance).slice(0,Ix).map(a=>+a.fields[n-1]).filter(a=>!Number.isNaN(a)))));return C===Number.MAX_SAFE_INTEGER&&(C=null),C}},{key:"maxVisibleValueInTiles",value:function(n){let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));let C=Math.max.apply(null,r.map(o=>this.fetchedTiles[o]).filter(o=>o.tileData&&o.tileData.length).map(o=>Math.max.apply(null,o.tileData.sort((a,s)=>s.importance-a.importance).slice(0,Ix).map(a=>+a.fields[n-1]).filter(a=>!Number.isNaN(a)))));return C===Number.MIN_SAFE_INTEGER&&(C=null),C}},{key:"calculateMedianVisibleValue",value:function(n){this.areAllVisibleTilesLoaded()&&this.allTilesLoaded();let r=this.visibleAndFetchedIds();r.length===0&&(r=Object.keys(this.fetchedTiles));const C=[].concat(...r.map(o=>this.fetchedTiles[o]).filter(o=>o.tileData&&o.tileData.length).map(o=>o.tileData.sort((a,s)=>s.importance-a.importance).slice(0,Ix).map(a=>+a.fields[n-1]))).filter(o=>o>0);this.medianVisibleValue=_7(C)}},{key:"draw",value:function(){Da(FC(i.prototype),"draw",this).call(this),this.allTexts=[],this.allBoxes=[];for(const n in this.fetchedTiles){const r=this.fetchedTiles[n];if(r.rectGraphics.scale.y=this.vertK,r.rectGraphics.position.y=this.vertY,!r.drawnAtScale)return;Fd.stretchRects(this,[o=>o.rectGraphics]);const C=this.parentInFetched(r);r.initialized&&r.tileData&&r.tileData.length&&r.tileData.forEach(o=>{if(!r.texts)return;const a=o.fields,s=a[3],A=r.texts[o.uid];if(!A)return;const l=+o.chrOffset,c=+a[1]+l,u=+a[2]+l,d=(c+u)/2;if(A.position.x=this._xScale(d),A.position.y=A.nominalY*(this.vertK*this.prevK)+this.vertY,!C&&!A.alreadyDrawn){A.visible=!0;const h=3;this.allBoxes.push([A.position.x-h,A.position.y-r.textHeights[a[3]]/2,A.position.x+r.textWidths[a[3]]+h,A.position.y+r.textHeights[a[3]]/2]),this.allTexts.push({importance:o.importance,text:A,caption:s,strand:a[5]})}else A.visible=!1})}this.hideOverlaps(this.allBoxes,this.allTexts)}},{key:"hideOverlaps",value:function(n,r){yw(n,(C,o)=>{r[C].importance>r[o].importance?r[C].text.visible&&(r[o].text.visible=!1):r[o].text.visible&&(r[C].text.visible=!1)})}},{key:"setPosition",value:function(n){Da(FC(i.prototype),"setPosition",this).call(this,n),[this.pMain.position.x,this.pMain.position.y]=this.position}},{key:"setDimensions",value:function(n){Da(FC(i.prototype),"setDimensions",this).call(this,n)}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.refreshTiles(),this.draw()}},{key:"exportSVG",value:function(){let n=null,r=null;Da(FC(i.prototype),"exportSVG",this)?[r,n]=Da(FC(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r);const C=document.createElement("g");C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(C);const o=document.createElement("g"),a=document.createElement("g");C.appendChild(o),C.appendChild(a);for(const s of this.visibleAndFetchedTiles())s.tileData.length&&s.tileData.forEach(A=>{const l=+s.tileId.split(".")[0],c=document.createElement("g");if(c.setAttribute("transform",`translate(${s.rectGraphics.position.x},${s.rectGraphics.position.y})scale(${s.rectGraphics.scale.x},${s.rectGraphics.scale.y})`),o.appendChild(c),this.drawnRects[l]&&A.uid in this.drawnRects[l]){const u=this.drawnRects[l][A.uid][0],d=document.createElement("path");let h=`M ${u[0]} ${u[1]}`;for(let b=2;b{const C=this.valueScaleTransform,{y:o,k:a}=C,s=this.dimensions[1];o+n/a>-(a-1)*s&&o+n/a<0&&(this.valueScaleTransform=C.translate(0,n/a)),r.rectGraphics.position.y=this.valueScaleTransform.y,this.vertY=this.valueScaleTransform.y}),this.animate()}},{key:"zoomedY",value:function(n,r){const C=Fd.zoomedY(n,r,this.valueScaleTransform,this.dimensions[1]);this.valueScaleTransform=C;let o=C.k;const a=C.y;let s=!1;o/=this.prevK,(o>1.5||o<1/1.5)&&(this.prevK*=o,o=1,s=!0),this.vertK=o,this.vertY=a,Object.values(this.fetchedTiles).forEach(A=>{s&&this.renderTile(A),A.rectGraphics.scale.y=o,A.rectGraphics.position.y=a}),this.draw(),this.animate()}},{key:"getMouseOverHtml",value:function(n,r){if(!this.tilesetInfo)return"";const C=this.calculateZoomLevel(),o=[n,r];if(this.drawnRects[C]){const a=Object.values(this.drawnRects[C]);for(let s=0;s"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eA(e){return eA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},eA(e)}const gYt=(e,g,i,I,n)=>{n.drawRect(e,g,i,I)},iYt=(e,g,i,I,n,{fill:r=0,fillOpacity:C=0,stroke:o=0,strokeWidth:a=0,strokeOpacity:s=0}={})=>{const A=document.createElement("rect");A.setAttribute("x",e),A.setAttribute("y",g),A.setAttribute("width",i),A.setAttribute("height",I),A.setAttribute("fill",`#${yz(r)}`),A.setAttribute("fill-opacity",C),A.setAttribute("stroke",`#${yz(o)}`),A.setAttribute("stroke-opacity",s),A.setAttribute("stroke-width",a),n.appendChild(A)},Ya=(e,g,i,I,n,r)=>{n instanceof HTMLElement?iYt(e,g,i,I,n,r):gYt(e,g,i,I,n)},Doe=(e,g,i,I,n,r,C,o,{isVertical:a=!1,svg:s=null}={})=>{let A=g,l=i,c=I,u=n;const d=o.width*2>I?I/2:o.width,h=o.width*2>n?n/2:o.width,m=s||e,f={fill:0,fillOpacity:0,stroke:0,strokeOpacity:0,strokeWidth:1};if(o.positions&&o.positions.length?(e.lineStyle(1,0,0),e.beginFill(o.color,o.opacity),f.fill=o.color,f.fillOpacity=o.opacity,f.stroke=0,f.strokeOpacity=0,f.strokeWidth=1,o.positions.forEach(b=>{b==="top"&&!a||b==="left"&&a?Ya(g-d,i-h,I+d*2,h,m,f):b==="bottom"&&!a||b==="right"&&a?Ya(g-d,i+n,I+d*2,h,m,f):b==="left"&&!a||b==="top"&&a?Ya(g-d,i-h,d,n+h*2,m,f):(b==="right"&&!a||b==="bottom"&&a)&&Ya(g+I,i-h,d,n+h*2,m,f)})):o.width>0&&o.opacity>0&&(e.lineStyle(o.width,o.color,o.opacity),e.beginFill(0,0),f.fill=0,f.fillOpacity=0,f.stroke=o.color,f.strokeOpacity=o.opacity,f.strokeWidth=o.width,Ya(g-d,i-h,I+d*2,n+h*2,m,f)),C.positions&&C.positions.length){e.lineStyle(1,0,0),e.beginFill(C.color,C.opacity);const b=C.width*2>I?I/2:C.width,p=C.width*2>n?n/2:C.width;f.fill=C.color,f.fillOpacity=C.opacity,f.stroke=0,f.strokeOpacity=0,f.strokeWidth=1,C.positions.forEach(y=>{y==="top"&&!a||y==="left"&&a?(Ya(g,i,I,p,m,f),l+=p,u-=p):y==="bottom"&&!a||y==="right"&&a?(Ya(g,i+n-p,I,p,m,f),u-=p):y==="left"&&!a||y==="top"&&a?(Ya(g,i,b,n,m,f),A+=b,c-=b):(y==="right"&&!a||y==="bottom"&&a)&&(Ya(g+I-b,i,b,n,m,f),c-=b)})}else e.lineStyle(C.width,C.color,C.opacity),f.stroke=C.color,f.strokeOpacity=C.opacity,f.strokeWidth=C.width;e.beginFill(r.color,r.opacity),f.fill=r.color,f.fillOpacity=r.opacity,Ya(A,l,c,u,m,f)};let P1e=function(e){jkt(i,e);var g=$kt(i);function i(I,n){var r;return Okt(this,i),r=g.call(this,I,n),r.options=n||{},r.drawnRects={},r}return _kt(i,[{key:"drawHorizontalOverlay",value:function(n,r,C,o=0,a,s,A,l){if(!C||C.length<2)return;let c=this.position[0]+r.left+this._xScale(C[0]);const u=this.position[1]+r.top,d=r.height;let h=this._xScale(C[1])-this._xScale(C[0]);h=4?C[2]:C[0]);const d=this.position[1]+r.top,h=this.position[1]+r.top+r.height;if(u>h)return;u=4?C[3]:C[1])-u+r.top+this.position[1];f<0||(u+f>h&&(f+=h-(u+f)),f{(l.orientation==="1d-horizontal"||l.orientation==="2d")&&this.options.extent.forEach(c=>this.drawHorizontalOverlay(r,l.position,c,s,C,o,a,n)),(l.orientation==="1d-vertical"||l.orientation==="2d")&&this.options.extent.forEach(c=>this.drawVerticalOverlay(r,l.position,c,A,C,o,a,n))})}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}},{key:"setPosition",value:function(n){tc(eA(i.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){tc(eA(i.prototype),"setDimensions",this).call(this,n),this.draw()}},{key:"exportSVG",value:function(){let n=null,r=null;tc(eA(i.prototype),"exportSVG",this)?[r,n]=tc(eA(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r);const C=document.createElement("g");return n.appendChild(C),this.draw({svg:C}),[r,n]}}]),i}(fr);function IYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function xoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gC(e){return gC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},gC(e)}let ay=function(e){aYt(i,e);var g=AYt(i);function i(){return IYt(this,i),g.apply(this,arguments)}return nYt(i,[{key:"stopHover",value:function(){this.pMouseOver.clear(),this.animate()}},{key:"getMouseOverHtml",value:function(n){if(!this.tilesetInfo||!this.options.showTooltip||!this.valueScale)return"";const r=this.getDataAtPos(n);let C="";r&&(C=mC(".3f")(r));const o=this.pMouseOver,a=0,s=this.valueScale(r);o.clear(),o.beginFill(a,.5),o.lineStyle(1,a,1);const A=4;return o.drawRect(n-A/2,s-A/2,A,A),this.animate(),`${C}`}},{key:"initTile",value:function(n){if(Po(gC(i.prototype),"initTile",this).call(this,n),!n.tileData||!n.tileData.dense){console.warn("emptyTile:",n);return}if(n.xValues=new Array(n.tileData.dense.length),n.yValues=new Array(n.tileData.dense.length),this.isValueScaleLocked()){const r=this.getLockGroupExtrema();r!==null&&(this.minValue(r[0]),this.maxValue(r[1]))}this.drawTile(n)}},{key:"rerender",value:function(n,r){Po(gC(i.prototype),"rerender",this).call(this,n,r),this.options=n,Po(gC(i.prototype),"draw",this).call(this),this.visibleAndFetchedTiles().forEach(C=>{this.renderTile(C)})}},{key:"renderTile",value:function(n){this.drawTile(n),this.drawAxis(this.valueScale)}},{key:"drawTile",value:function(n){if(Po(gC(i.prototype),"drawTile",this).call(this,n),!n.graphics||!n.tileData||!n.tileData.dense)return;const r=n.graphics,{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=n.tileData.dense;if(a.length===0)return;const[s,A]=this.makeValueScale(this.minValue(),this.medianVisibleValue,this.maxValue());if(this.valueScale=s,r.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const l=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue");!this.tilesetInfo.tile_size&&!this.tilesetInfo.bins_per_dimension&&console.warn("No tileset_info.tile_size or tileset_info.bins_per_dimension",this.tilesetInfo);const c=this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension,u=tg().domain([0,c]).range([C,C+o]),d=this.options.lineStrokeWidth?this.options.lineStrokeWidth:1;r.lineStyle(d,l,1),n.segments=[];let h=[];for(let m=0;m1&&n.segments.push(h),h=[];continue}if(u(m)>this.tilesetInfo.max_pos[0])break;h.push([f,b])}h.length>1&&n.segments.push(h);for(const m of n.segments){const f=m[0],b=m.slice(1);r.moveTo(f[0],f[1]);for(const p of b)r.lineTo(p[0],p[1])}}},{key:"setPosition",value:function(n){Po(gC(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0],this.pMouseOver.position.y=this.position[1],this.pMouseOver.position.x=this.position[0]}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.refreshTiles(),this.draw();const C=this.isValueScaleLocked();if(this.continuousScaling&&this.minValue()!==void 0&&this.maxValue()!==void 0){if(this.valueScaleMin===null&&this.valueScaleMax===null&&!C){const o=this.minVisibleValue(),a=this.maxVisibleValue(),s=1e-6;o!==null&&a!==null&&(Math.abs(this.minValue()-o)>s||Math.abs(this.maxValue()-a)>s)&&(this.minValue(o),this.maxValue(a),this.scheduleRerender())}C&&this.onValueScaleChanged()}}},{key:"superSVG",value:function(){return Po(gC(i.prototype),"exportSVG",this).call(this)}},{key:"exportSVG",value:function(){let n=null,r=null;Po(gC(i.prototype),"exportSVG",this)?[r,n]=Po(gC(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r),r.setAttribute("class","exported-line-track");const C=document.createElement("g");n.appendChild(C),C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`);const o=this.options.lineStrokeColor?this.options.lineStrokeColor:"blue";this.visibleAndFetchedTiles().forEach(s=>{const A=document.createElement("path");A.setAttribute("fill","transparent"),A.setAttribute("stroke",o);let l="";for(const c of s.segments){const u=c[0],d=c.slice(1);l+=`M${u[0]} ${u[1]}`;for(const h of d)l+=`L${h[0]} ${h[1]}`}A.setAttribute("d",l),C.appendChild(A)});const a=document.createElement("g");if(a.setAttribute("id","axis"),r.appendChild(a),a.setAttribute("transform",`translate(${this.axis.pAxis.position.x}, ${this.axis.pAxis.position.y})`),this.options.axisPositionHorizontal==="left"||this.options.axisPositionVertical==="top"){const s=this.axis.exportAxisLeftSVG(this.valueScale,this.dimensions[1]);a.appendChild(s)}else if(this.options.axisPositionHorizontal==="right"||this.options.axisPositionVertical==="bottom"){const s=this.axis.exportAxisRightSVG(this.valueScale,this.dimensions[1]);a.appendChild(s)}return[r,n]}},{key:"tileToLocalId",value:function(n){return this.options.aggregationMode&&this.options.aggregationMode!=="mean"?`${n.join(".")}.${this.options.aggregationMode}`:`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return this.tileToLocalId(n)}}]),i}(Cy);function uYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Eoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ys(e){return ys=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},ys(e)}let J1e=function(e){pYt(i,e);var g=bYt(i);function i(){return uYt(this,i),g.apply(this,arguments)}return dYt(i,[{key:"initTile",value:function(n){n.barXValues=new Array(n.tileData.dense.length),n.barYValues=new Array(n.tileData.dense.length),n.barWidths=new Array(n.tileData.dense.length),n.barHeights=new Array(n.tileData.dense.length),md(ys(i.prototype),"initTile",this).call(this,n)}},{key:"drawTile",value:function(n){if(!n.graphics||!n.tileData||!n.tileData.dense)return;const r=n.graphics,{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=n.tileData.dense;if(a.length===0)return;let s=0;if(this.valueScale=null,this.options.valueScaling==="log"){let h=this.medianVisibleValue;this.medianVisibleValue||(h=this.minValue()),this.valueScale=Cu().domain([h,this.maxValue()+h]).range([this.dimensions[1],0]),s=h}else this.valueScale=tg().domain([this.minValue(),this.maxValue()]).range([this.dimensions[1],0]);if(r.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const A=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue"),l=tg().domain([0,this.tilesetInfo.tile_size]).range([C,C+o]),c=0;r.lineStyle(c,A,1);const u=this.options.pointSize?this.options.pointSize:3,d=Kt(this.options.pointColor?this.options.pointColor:"red");r.beginFill(d,1),n.drawnAtScale=this._xScale.copy();for(let h=0;hthis.tilesetInfo.max_pos[0])break;r.drawRect(m-u/2/this.pMain.scale.x,f-u/2/this.pMain.scale.y,u/this.pMain.scale.x,u/this.pMain.scale.y)}}},{key:"draw",value:function(){md(ys(i.prototype),"draw",this).call(this);for(const n of Mg(this.fetchedTiles)){const r=(n.drawnAtScale.domain()[1]-n.drawnAtScale.domain()[0])/(this._xScale.domain()[1]-this._xScale.domain()[0]),o=this._xScale.domain().map(n.drawnAtScale)[0];n.graphics.scale.x=r,n.graphics.position.x=-o*r}}},{key:"zoomed",value:function(n,r,C,o,a){md(ys(i.prototype),"zoomed",this).call(this,n,r)}},{key:"exportSVG",value:function(){let n=null,r=null;[r,n]=md(ys(i.prototype),"superSVG",this).call(this),r.setAttribute("class","exported-line-track");const C=document.createElement("g");n.appendChild(C),C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`);for(const a of this.visibleAndFetchedTiles())for(let s=0;s{g+=+I||0,i.push(g)}),Float64Array.from(i)}const BYt=(e,g)=>{const i=zB(e,g);return vYt(e.map(I=>(Array.isArray(I)&&g?I.length:1)/i))};function SYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Moe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Sh(e){return Sh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Sh(e)}let O1e=function(e){XYt(i,e);var g=HYt(i);function i(I,n){var r;return SYt(this,i),r=g.call(this,I,n),r.pMain=r.pMobile,r.continuousScaling=!1,r.updateDataFetcher(n),r}return wYt(i,[{key:"updateDataFetcher",value:function(n){if(n&&n.selectRows&&n.selectRowsAggregationMethod==="server"){const{pubSub:r,dataFetcher:C}=this,o=C.dataConfig.options,a={aggGroups:n.selectRows,aggFunc:n.selectRowsAggregationMode};if(JSON.stringify(o)!==JSON.stringify(a)){const s={...C.dataConfig,options:a};this.dataFetcher=new C.constructor(s,r),this.dataFetcher.dataConfig.tilesetUid&&this.fetchNewTiles(Object.keys(this.fetchedTiles).map(A=>({tileId:A,remoteId:A})))}}}},{key:"rerender",value:function(n,r){this.updateDataFetcher(n),Gv(Sh(i.prototype),"rerender",this).call(this,n,r),n.selectRows&&(this.selectRowsCumWeights=BYt(n.selectRows,n.selectRowsAggregationWithRelativeHeight))}},{key:"tileDataToCanvas",value:function(n){const r=document.createElement("canvas");this.options.selectRows&&this.tilesetInfo.shape?(r.width=this.tilesetInfo.shape[0],r.height=zB(this.options.selectRows,this.options.selectRowsAggregationWithRelativeHeight)):this.tilesetInfo.shape?(r.width=this.tilesetInfo.shape[0],r.height=this.tilesetInfo.shape[1]):(r.width=this.tilesetInfo.tile_size,r.height=1);const C=r.getContext("2d");if(C.fillStyle="transparent",C.fillRect(0,0,r.width,r.height),n.length!==0&&n.length===4*r.width*r.height){const o=new ImageData(n,r.width,r.height);C.putImageData(o,0,0)}else console.warn("HorizontalMultivecTrack: pixData has an incorrect length.");return r}},{key:"setSpriteProperties",value:function(n,r,C){const{tileX:o,tileWidth:a}=this.getTilePosAndDimensions(r,C,this.tilesetInfo.tile_size),s=o+a;n.width=this._refXScale(s)-this._refXScale(o),n.height=this.dimensions[1],n.x=this._refXScale(o),n.y=0}},{key:"leftTrackZoomed",value:function(n,r,C,o,a){const s=this._xScale(0)-C*this._refXScale(0);this.pMobile.position.x=s+this.position[0],this.pMobile.position.y=this.position[1],this.pMobile.scale.x=C,this.pMobile.scale.y=1}},{key:"zoomed",value:function(n,r,C,o){Gv(Sh(i.prototype),"zoomed",this).call(this,n,r),this.pMain.position.x=o,this.pMain.position.y=this.position[1],this.pMain.scale.x=C,this.pMain.scale.y=1,this.drawColorbar()}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;if(this.zoomLevel=this.calculateZoomLevel(),this.tilesetInfo.resolutions){const r=this.tilesetInfo.resolutions.map(C=>+C).sort((C,o)=>o-C);this.xTiles=vt.calculateTilesFromResolution(r[this.zoomLevel],this._xScale,this.tilesetInfo.min_pos[0],null,this.tilesetInfo.tile_size)}else this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const n=this.xTiles.map(r=>[this.zoomLevel,r]);this.setVisibleTiles(n)}},{key:"calculateZoomLevel",value:function(){if(!this.tilesetInfo)return;const n=this.tilesetInfo.min_pos[0];let r=null;return this.tilesetInfo.resolutions?r=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,n):r=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),r}},{key:"tileToLocalId",value:function(n){return n.join(".")}},{key:"tileToRemoteId",value:function(n){return n.join(".")}},{key:"getTilePosAtPosition",value:function(n,r){if(!this.tilesetInfo)return;const C=this.calculateZoomLevel(),o=vt.calculateTileWidth(this.tilesetInfo,C,this.tilesetInfo.tile_size),a=this._xScale.invert(n)/o;return[C,Math.floor(a)]}},{key:"getVisibleData",value:function(n,r){const C=this.calculateZoomLevel(),o=vt.calculateTileWidth(this.tilesetInfo,C,this.tilesetInfo.tile_size),a=this._xScale.invert(n)/o;let s=this.tilesetInfo.shape?this.tilesetInfo.shape[1]:1;this.options.selectRows&&(s=zB(this.options.selectRows,this.options.selectRowsAggregationWithRelativeHeight));let A=this.tilesetInfo.tile_size*(a-Math.floor(a));const l=r/this.dimensions[1],c=l*s;let u=Math.floor(c),d;this.options.selectRows&&(this.options.selectRowsAggregationWithRelativeHeight&&(u=this.selectRowsCumWeights.findIndex((b,p)=>l<=b&&(p===this.selectRowsCumWeights.length-1||this.selectRowsCumWeights[p+1]>=l))),d=this.options.selectRows[u]);const h=this.tileToLocalId([C,Math.floor(a)]),m=this.fetchedTiles[h];let f="";if(m){this.tilesetInfo.shape||(A=m.tileData.dense.length*(a-Math.floor(a)));let b=null;if(this.tilesetInfo.shape?Array.isArray(d)&&this.options.selectRowsAggregationMethod==="client"?b=d.map(p=>this.tilesetInfo.shape[0]*p+Math.floor(A)):d&&this.options.selectRowsAggregationMethod==="client"?b=this.tilesetInfo.shape[0]*d+Math.floor(A):b=this.tilesetInfo.shape[0]*u+Math.floor(A):b=m.tileData.dense.length*u+Math.floor(A),Array.isArray(b)){const p=C4(this.options.selectRowsAggregationMode),y=b.map(Z=>m.tileData.dense[Z]);f=mC(".3f")(p(y)),f+="
",f+=`${b.length}-item ${this.options.selectRowsAggregationMode}`}else f=mC(".3f")(m.tileData.dense[b]),Array.isArray(d)&&(f+="
",f+=`${d.length}-item ${this.options.selectRowsAggregationMode}`)}if(this.tilesetInfo.row_infos){f+="
";let b="";this.options.selectRows&&!Array.isArray(d)?b=this.tilesetInfo.row_infos[d]:u>=0&&u"),A=this.options.colorRange[parseInt(s[0],10)-1],l=s[1];if(Number.isNaN(A)||A==="NaN"||typeof A>"u"||A==="undefined")return"";o=` ${l}`}else o+=`Data value: ${this.getVisibleData(n,r)}
`,o+=`Zoom level: ${C[0]} tile position: ${C[1]}`;return o}}]),i}(bw);function YYt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function zoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Qo(e){return Qo=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Qo(e)}const OYt=Kt("#FFFFFF");let Xj=function(e){EYt(i,e);var g=MYt(i);function i(...I){var n;return YYt(this,i),n=g.call(this,...I),n.zeroLine=new ot.PIXI.Graphics,n.pMain.addChild(n.zeroLine),n.valueScaleTransform=JI,n.options&&n.options.colorRange&&(n.options.colorRangeGradient?n.setColorGradient(n.options.colorRange):n.setColorScale(n.options.colorRange)),n.initialized=!0,n}return KYt(i,[{key:"setColorScale",value:function(n){n&&(this.colorScale=_c(n),this.colorScale=this.colorScale.map(r=>r.map(C=>C/255)))}},{key:"setColorGradient",value:function(n){if(!n)return;const r=n.length-1;this.colorGradientColors=this.options.align==="bottom"?n.slice().reverse().map((C,o)=>({from:o/r,color:C})):n.map((C,o)=>({from:o/r,color:C}))}},{key:"initTile",value:function(n){this.initialized&&rs(Qo(i.prototype),"initTile",this).call(this,n)}},{key:"updateTile",value:function(n){(!n.valueScale||!this.scale||this.scale.minValue!==n.scale.minValue||this.scale.maxValue!==n.scale.maxValue)&&this.renderTile(n)}},{key:"renderTile",value:function(n){this.initialized&&rs(Qo(i.prototype),"renderTile",this).call(this,n)}},{key:"drawTile",value:function(n){if(!n.graphics||!n.tileData||!n.tileData.dense)return;const{graphics:r}=n;n.svgData=void 0;const{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos,this.tilesetInfo.bins_per_dimension||this.tilesetInfo.tile_size),a=n.tileData.dense;if(a.length===0)return;const[s,A]=this.makeValueScale(this.minValue(),this.medianVisibleValue,this.maxValue(),0);s.clamp(!0),this.valueScale=s;const l=s.copy();if(l.range([254,0]).clamp(!0),r.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const c=Kt(this.options.lineStrokeColor||"blue"),u=tg().domain([0,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension]).range([C,C+o]),d=0;r.lineStyle(d,c,1);const h=this.options.barFillColor||"grey",m=Kt(h),f="barOpacity"in this.options?this.options.barOpacity:1;r.beginFill(m,f),n.drawnAtScale=this._xScale.copy();const b=this.options.align==="top";let p,y,Z,B,G,v;if(this.colorGradientColors){G=new ot.PIXI.Graphics,G.beginFill(OYt,1);const w=ave(this.colorGradientColors,1,this.dimensions[1],0,0,0,this.dimensions[1]);v=new ot.PIXI.Sprite(ot.PIXI.Texture.fromCanvas(w,ot.PIXI.SCALE_MODES.NEAREST)),v.x=this._xScale(C),v.width=this._xScale(C+o)-v.x}for(let w=0;wthis.tilesetInfo.max_pos[0])break;if(this.colorScale&&!this.options.colorRangeGradient){const V=Math.round(l(a[w]+A)),S=this.colorScale[V],X=ot.PIXI.utils.rgb2hex(S);r.beginFill(X,f)}(G||r).drawRect(p,Z,y,B)}this.colorGradientColors&&(v.mask=G,r.removeChildren(),r.addChild(v,G))}},{key:"rerender",value:function(n,r){n&&n.colorRange&&(n.colorRangeGradient?this.setColorGradient(n.colorRange):this.setColorScale(n.colorRange)),rs(Qo(i.prototype),"rerender",this).call(this,n,r)}},{key:"drawZeroLine",value:function(){this.zeroLine.clear();const n=Kt(this.options.barFillColor||"grey"),r=+this.options.barOpacity||1,C=this.options.zeroLineColor?Kt(this.options.zeroLineColor):n,o=Number.isNaN(+this.options.zeroLineOpacity)?r:+this.options.zeroLineOpacity;this.zeroLine.beginFill(C,o),this.zeroLine.drawRect(0,this.dimensions[1]-1,this.dimensions[0],1)}},{key:"drawZeroLineSvg",value:function(n){const r=document.createElement("rect");r.setAttribute("id","zero-line"),r.setAttribute("x",0),r.setAttribute("y",this.dimensions[1]-1),r.setAttribute("height",1),r.setAttribute("width",this.dimensions[0]),r.setAttribute("fill",this.options.zeroLineColor||this.options.barFillColor),r.setAttribute("fill-opacity",this.options.zeroLineOpacity||this.options.barOpacity),n.appendChild(r)}},{key:"getXScaleAndOffset",value:function(n){const r=n.domain(),C=this._xScale.domain(),o=(r[1]-r[0])/(C[1]-C[0]),s=this._xScale.domain().map(n)[0];return[o,-s*o]}},{key:"draw",value:function(){this.initialized&&(rs(Qo(i.prototype),"draw",this).call(this),this.options.zeroLineVisible?this.drawZeroLine():this.zeroLine.clear(),Object.values(this.fetchedTiles).forEach(n=>{const[r,C]=this.getXScaleAndOffset(n.drawnAtScale);n.graphics.scale.x=r,n.graphics.position.x=C}))}},{key:"zoomed",value:function(n,r){rs(Qo(i.prototype),"zoomed",this).call(this,n,r)}},{key:"movedY",value:function(n){}},{key:"zoomedY",value:function(n,r){}},{key:"addSVGInfo",value:function(n,r,C,o,a,s){n.svgData?(n.svgData.barXValues.push(r),n.svgData.barYValues.push(C),n.svgData.barWidths.push(o),n.svgData.barHeights.push(a),n.svgData.barColors.push(s)):n.svgData={barXValues:[r],barYValues:[C],barWidths:[o],barHeights:[a],barColors:[s]}}},{key:"exportSVG",value:function(){let n=null,r=null;[r,n]=rs(Qo(i.prototype),"superSVG",this).call(this),r.setAttribute("class","exported-line-track");const C=document.createElement("g");n.appendChild(C),C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),this.options.zeroLine&&this.drawZeroLineSvg(C),this.visibleAndFetchedTiles().filter(a=>a.svgData&&a.svgData.barXValues).forEach(a=>{const s=a.svgData;for(let A=0;A"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function o2(e){return o2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},o2(e)}let _1e=function(e){jYt(i,e);var g=$Yt(i);function i(){return _Yt(this,i),g.apply(this,arguments)}return LYt(i,[{key:"drawTile",value:function(n){this.renderTile(n)}},{key:"renderTile",value:function(n){if(!n.graphics)return;const r=n.graphics,{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos,this.tilesetInfo.tile_size||this.tilesetInfo.bins_per_dimension),a=n.tileData.dense;if(a.length===0)return;let s=0;if(this.valueScale=null,this.options.valueScaling==="log"){let p=this.medianVisibleValue;this.medianVisibleValue||(p=this.minValue()),this.valueScale=Cu().domain([p,this.maxValue()+p]).range([this.dimensions[1],0]),s=p}else this.valueScale=tg().domain([this.minValue(),this.maxValue()]).range([this.dimensions[1],0]);if(r.clear(),this.drawAxis(this.valueScale),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const A=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue"),l=tg().domain([0,this.tilesetInfo.tile_size]).range([C,C+o]),c=0;r.lineStyle(c,A,1);const u=this.options.barFillColorTop?this.options.barFillColorTop:"green",d=this.options.barFillColorBottom?this.options.barFillColorBottom:"red",h=Kt(u),m=Kt(d),f="barOpacity"in this.options?this.options.barOpacity:1;n.drawnAtScale=this._xScale.copy();let b=0;this.options.valueScaling==="log"?b=this.valueScale(1):b=this.valueScale(0),delete n.svgData;for(let p=0;pb?(r.beginFill(m,f),this.addSVGInfo(n,y,b,B,Z-b,d)):(r.beginFill(h,f),this.addSVGInfo(n,y,Z,B,b-Z,u)),l(p)>this.tilesetInfo.max_pos[0])break;r.drawRect(y,n.svgData.barYValues[p],B,n.svgData.barHeights[p])}}}]),i}(Xj);function gKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Joe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function r0(e){return r0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},r0(e)}let L1e=function(e){CKt(i,e);var g=oKt(i);function i(I,n){var r;return gKt(this,i),r=g.call(this,I,n),r.setColorScale(n.colorRange),r.opacity=n.opacity||1,r}return iKt(i,[{key:"setColorScale",value:function(n){this.colorScale=n?_c(n):Yb,this.colorScale=this.colorScale.map(r=>r.map(C=>C/255))}},{key:"rerender",value:function(n){n&&n.colorRange&&this.setColorScale(n.colorRange),this.opacity=n.opacity||1,BW(r0(i.prototype),"rerender",this).call(this,n)}},{key:"drawAxis",value:function(){}},{key:"drawTile",value:function(n){if(!n.graphics||!n.tileData||!n.tileData.dense)return;const r=n.graphics,{tileX:C,tileWidth:o}=this.getTilePosAndDimensions(n.tileData.zoomLevel,n.tileData.tilePos),a=n.tileData.dense;if(a.length===0)return;const[s,A]=this.makeValueScale(this.minValue(),this.medianVisibleValue,this.maxValue());if(s.range([254,0]).clamp(!0),this.valueScale=s,r.clear(),this.options.valueScaling==="log"&&this.valueScale.domain()[1]<0){console.warn("Negative values present when using a log scale",this.valueScale.domain());return}const l=tg().domain([0,this.tilesetInfo.tile_size]).range([C,C+o]);r.lineStyle(0,0,0);for(let c=0;cthis.tilesetInfo.max_pos[0])break;a[c]!==0&&r.drawRect(d,0,h,m)}}}}]),i}(ay);function lKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Ooe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function a2(e){return a2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},a2(e)}let U1e=function(e){hKt(i,e);var g=mKt(i);function i(I,n){var r;return lKt(this,i),r=g.call(this,I,n),r.seen=new Set,r.pMain=r.pMobile,r.rows=[],r}return cKt(i,[{key:"uid",value:function(n){return n[n.length-2]}},{key:"segmentOverlap",value:function(n,r){}},{key:"drawAll",value:function(n){this.pMain.clear();const r=new Set,C=n.map(a=>r.has(this.uid(a))?null:(r.add(this.uid(a)),{from:+a[1],to:+a[2],type:a[4],uid:this.uid(a)})).filter(a=>a),o=HX(C);this.rows=o,this.draw()}},{key:"draw",value:function(){const n=this.rows;if(!n)return;const r=MS().range([0,this.dimensions[1]]).padding(.1).domain(nr(0,this.maxRows())),C=this.pMain;C.clear(),C.lineStyle(1,255,0),C.beginFill(16740363,.8);for(let o=0;othis.fetchedTiles[o].tileData.discrete),C=[].concat(...r);this.drawAll(C)}},{key:"initTile",value:function(n){}},{key:"maxRows",value:function(){return this.rows.length}},{key:"updateTile",value:function(n){}},{key:"destroyTile",value:function(n){n.tileData.discrete.forEach(r=>{const C=r[r.length-2];this.seen.has(C)&&this.seen.delete(C)})}},{key:"drawTile",value:function(n){}}]),i}(Cy);function yKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function _oe(e,g){for(var i=0;i=this.position[0]&&I<=this.dimensions[0]+this.position[0]&&i>=this.position[1]&&i<=this.dimensions[1]+this.position[1]}}]),e}();function mKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Joe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Lo(e){return Lo=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Lo(e)}const Ooe=11,qD="Arial",_oe="outside",JP=10,wKt=4,RKt=20,VKt=Kt("#ffffff"),DV=2,WKt=2*JP/3,tf=2*WKt/3,XKt=50,HKt=5e3,OP="blue",_P="red",Sj=(e,g,I)=>{I.type!=="filler"&&g.pubSub.publish("app.click",{type:"gene-annotation",event:e,payload:I})},Loe=(e,g)=>{const I=e.concat(g),i=I.map(n=>[n.xStart,1,n.xEnd,1]);pw(i,(n,C)=>{let r=null,o=null;if(I[n].type==="filler"?r=I[n]:o=I[n],I[C].type==="filler"){if(r)return;r=I[C]}else{if(!r)return;o=I[C]}r.xStart>=o.xStart&&r.xEnd<=o.xEnd&&(r.hide=!0)})};function TKt(e,g,I){const{flipText:i,fontSize:n,fontFamily:C,plusStrandColor:r,minusStrandColor:o,maxGeneEntries:a,maxFillerEntries:s,maxTexts:A}=I;if(g.texts={},g.rectGraphics=new ot.PIXI.Graphics,g.textBgGraphics=new ot.PIXI.Graphics,g.textGraphics=new ot.PIXI.Graphics,g.rectMaskGraphics=new ot.PIXI.Graphics,g.graphics.addChild(g.rectGraphics),g.graphics.addChild(g.textBgGraphics),g.graphics.addChild(g.textGraphics),g.graphics.addChild(g.rectMaskGraphics),g.rectGraphics.mask=g.rectMaskGraphics,!g.tileData.sort)return;g.tileData.sort((u,d)=>d.importance-u.importance);const l=g.tileData.filter(u=>u.type!=="filler").slice(0,a),c=g.tileData.filter(u=>u.type==="filler").slice(0,s);g.tileData=l.concat(c),g.tileData.forEach((u,d)=>{if(u.type==="filler")return;const h=u.fields,m=h[3],f=e.geneId(h,u.type),b=u.strand||h[5];u.strand=u.strand||b;let p=r||OP;if(b==="-"&&(p=o||_P),g.textWidths={},g.textHeights={},d>=A)return;const y=new ot.PIXI.Text(m,{fontSize:`${n}px`,fontFamily:C,fill:Kt(p)});y.interactive=!0,i&&(y.scale.x=-1),y.anchor.x=.5,y.anchor.y=1,g.texts[f]=y,g.texts[f].strand=b,g.textGraphics.addChild(y)}),g.initialized=!0}function Uoe(e,g,I,i,n,C,r,o,a){const s=o-a/2,A=0;e.forEach(l=>{const c=new ot.PIXI.Graphics;I.rectGraphics.addChild(c),c.beginFill(C,.1),c.lineStyle(0,C);const u=[n(l.xStart)-A,s,n(l.xEnd)+A,s,n(l.xEnd)+A,s+a,n(l.xStart)-A,s+a,n(l.xStart)-A,s];c.interactive=!0,c.buttonMode=!0,c.mouseup=d=>Sj(d,g,l),c.drawPolygon(u),I.allRects.push([u,l.strand,l])})}function NKt(e,g,I,i,n,C,r,o,a,s){const A=o-a/2,l=n.split(",").map(y=>+y+r),c=C.split(",").map(y=>+y+r),u=e._xScale(I),d=e._xScale(i),h=d-u,m=o,f=[];let b=[u,m-DV/2,u+h,m-DV/2,u+h,m+DV/2,u,m+DV/2];g.drawPolygon(b),f.push(b);const p=2*a;for(let y=Math.max(e.position[0],u)+p;y{const l=g._xScale(A.xStart),c=g._xScale(A.xEnd),u=new ot.PIXI.Graphics;I.rectGraphics.addChild(u),u.beginFill(C,r),u.interactive=!0,u.buttonMode=!0,u.mouseup=m=>Sj(m,g,A);const d=g.geneRectHeight/2;let h=[];if(A.strand==="+"||A.fields[5]==="+"){const m=Math.max(l,c-d),f=m+d;h=[m,s,f,s+g.geneRectHeight/2,m,s+g.geneRectHeight]}else{const m=Math.min(c,l+d),f=m-d;h=[m,s,f,s+g.geneRectHeight/2,m,s+g.geneRectHeight]}u.drawPolygon(h),I.allRects.push([h,A.strand,A])})}function YKt(e,g,I,i,n,C,r,o,a){e.forEach(s=>{const A=s.fields,l=+s.chrOffset,c=A[12],u=A[13],d=new ot.PIXI.Graphics;I.rectGraphics.addChild(d),d.beginFill(C,r),d.interactive=!0,d.buttonMode=!0,d.mouseup=h=>Sj(h,g,s),I.allRects=I.allRects.concat(NKt(g,d,s.xStart,s.xEnd,c,u,l,o,a,s.strand||s.fields[5]).map(h=>[h,s.strand,s]))})}function Qoe(e,g,I,i,n,C,r,o,a){kKt(e,g,I,i,n,C,r,o,a),YKt(e,g,I,i,n,C,r,o,a)}function KKt(e,g){const{tileX:I,tileWidth:i}=Kd.getTilePosAndDimensions(e.tilesetInfo,g.tileId);g.rectMaskGraphics.clear();const n=Math.floor(Math.random()*16**6);g.rectMaskGraphics.beginFill(n,.3);const C=e._xScale(I),r=0,o=e._xScale(I+i)-e._xScale(I),a=e.dimensions[1];g.rectMaskGraphics.drawRect(C,r,o,a)}let z1e=function(e){ZKt(I,e);var g=GKt(I);function I(i,n){var C;mKt(this,I),C=g.call(this,i,n);const{animate:r}=i;return C.animate=r,C.options=n,C.fontSize=+C.options.fontSize||Ooe,C.geneLabelPos=C.options.geneLabelPosition||_oe,C.geneRectHeight=+C.options.geneAnnotationHeight||JP,C.geneRectHeight-=2,C.geneStrandSpacing=+C.options.geneStrandSpacing||wKt,C.geneStrandHSpacing=C.geneStrandSpacing/2,C.geneRectHHeight=C.geneRectHeight/2,C}return fKt(I,[{key:"initTile",value:function(n){TKt(this,n,{flipText:this.flipText,fontSize:this.fontSize,fontFamily:qD,plusStrandColor:this.options.plusStrandColor,minusStrandColor:this.options.minusStrandColor,maxGeneEntries:XKt,maxFillerEntries:HKt,maxTexts:RKt}),this.renderTile(n)}},{key:"destroyTile",value:function(n){n.rectGraphics.destroy(),n.rectMaskGraphics.destroy(),n.textGraphics.destroy(),n.textBgGraphics.destroy(),n.graphics.destroy()}},{key:"rerender",value:function(n,C){const r=JSON.stringify(n);!C&&r===this.prevOptions||(Cs(Lo(I.prototype),"rerender",this).call(this,n,C),this.fontSize=+this.options.fontSize||Ooe,this.geneLabelPos=this.options.geneLabelPosition||_oe,this.geneRectHeight=+this.options.geneAnnotationHeight||JP,this.geneStrandHSpacing=this.geneStrandSpacing/2,this.geneRectHHeight=this.geneRectHeight/2,this.prevOptions=r,this.visibleAndFetchedTiles().forEach(o=>{this.renderTile(o)}))}},{key:"drawTile",value:function(){}},{key:"geneId",value:function(n,C){return`${C}_${n[0]}_${n[1]}_${n[2]}_${n[3]}`}},{key:"renderTile",value:function(n){if(!n.initialized)return;n.allRects=[],n.drawnAtScale=this._xScale.copy(),n.rectGraphics.removeChildren(),n.rectGraphics.clear(),n.textBgGraphics.clear();const C={},r=.3,o=.3;C["+"]=Kt(this.options.plusStrandColor||OP),C["-"]=Kt(this.options.minusStrandColor||_P);let a=n.tileData.filter(f=>f.type==="filler"&&f.strand==="+"),s=n.tileData.filter(f=>f.type==="filler"&&f.strand==="-");const A=n.tileData.filter(f=>f.type!=="filler"&&(f.strand==="+"||f.fields[5]==="+")),l=n.tileData.filter(f=>f.type!=="filler"&&(f.strand==="-"||f.fields[5]==="-"));Loe(A,a),Loe(l,s),a=a.filter(f=>!f.hide),s=s.filter(f=>!f.hide);const c=this.dimensions[1]/2,u=c-this.geneRectHeight/2-this.geneStrandSpacing/2,d=c+this.geneRectHeight/2+this.geneStrandSpacing/2,h=[this,n,n.rectGraphics,this._xScale,C["+"],r,u,this.geneRectHeight],m=[this,n,n.rectGraphics,this._xScale,C["-"],r,d,this.geneRectHeight];Uoe(a,...h),Uoe(s,...m),h[5]=o,m[5]=o,Qoe(A,...h),Qoe(l,...m),KKt(this,n),Kd.stretchRects(this,[f=>f.rectGraphics,f=>f.rectMaskGraphics]);for(const f of Object.values(n.texts))f.style={fontSize:`${this.fontSize}px`,FONT_FAMILY:qD,fill:Kt(f.strand==="-"?this.options.minusStrandColor||_P:this.options.plusStrandColor||OP)}}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);let C=Math.min(n,this.maxZoom);return C=Math.max(C,0),C}},{key:"draw",value:function(){Cs(Lo(I.prototype),"draw",this).call(this),this.allTexts=[],this.allBoxes=[];const n=[];this.geneAreaHeight=this.geneRectHeight;const C=this.fontSize/2;Kd.stretchRects(this,[r=>r.rectGraphics,r=>r.rectMaskGraphics]),Object.values(this.fetchedTiles).filter(r=>r.drawnAtScale).forEach(r=>{r.textBgGraphics.clear(),r.textBgGraphics.beginFill(typeof this.options.labelBackgroundColor<"u"?Kt(this.options.labelBackgroundColor):VKt);const o=this.parentInFetched(r);r.initialized&&r.tileData.forEach(a=>{if(!r.texts||a.type==="filler")return;const s=a.fields,A=s[3],l=this.geneId(s,a.type),c=r.texts[l];if(!c)return;const u=+a.chrOffset,d=+s[1]+u,h=+s[2]+u,m=(d+h)/2;let f=this.dimensions[1]/2;const b=(this.geneAreaHeight-this.fontSize)/2;if(s[5]==="+"?f-=this.geneLabelPos==="inside"?b+this.geneStrandSpacing-2:this.fontSize/2+this.geneAreaHeight-2:f+=this.geneLabelPos==="inside"?this.fontSize+this.geneStrandSpacing/2+b+1:1.5*this.fontSize+this.geneAreaHeight+2,c.position.x=this._xScale(m),c.position.y=f,!r.textWidths[l]){const p=c.getBounds().width,y=c.getBounds().height;r.textHeights[l]=y,r.textWidths[l]=p}if(o)c.visible=!1;else{c.visible=!0;const p=2;this.flipText?this.allBoxes.push([c.position.x-r.textHeights[l]/2-p,f-C-1,c.position.x+r.textHeights[l]/2+p,f+C-1,A]):this.allBoxes.push([c.position.x-r.textWidths[l]/2-p,f-C-1,c.position.x+r.textWidths[l]/2+p,f+C-1,A]),this.allTexts.push({importance:+s[4],text:c,caption:A,strand:s[5]}),n.push(r.textBgGraphics)}})}),this.hideOverlaps(this.allBoxes,this.allTexts),this.renderTextBg(this.allBoxes,this.allTexts,n)}},{key:"renderTextBg",value:function(n,C,r){C.forEach((o,a)=>{if(o.text.visible&&n[a]&&r[a]){const[s,A,l,c]=n[a],u=l-s,d=c-A;r[a].drawRect(s-u/2,A-d/2,u,d)}})}},{key:"hideOverlaps",value:function(n,C){pw(n,(r,o)=>{C[r].importance>C[o].importance?C[o].text.visible=!1:C[r].text.visible=!1})}},{key:"setPosition",value:function(n){Cs(Lo(I.prototype),"setPosition",this).call(this,n),[this.pMain.position.x,this.pMain.position.y]=this.position}},{key:"setDimensions",value:function(n){Cs(Lo(I.prototype),"setDimensions",this).call(this,n),this.halfRectHHeight=this.dimensions[1]/2,this.visibleAndFetchedTiles().forEach(C=>{this.renderTile(C)})}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.refreshTiles(),this.draw()}},{key:"getMouseOverHtml",value:function(n,C){if(!this.tilesetInfo)return"";const r=[n,C];for(const o of this.visibleAndFetchedTiles())for(let a=0;a=this.position[0]&&i<=this.dimensions[0]+this.position[0]&&I>=this.position[1]&&I<=this.dimensions[1]+this.position[1]}}]),e}();function BKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Uoe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jo(e){return jo=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},jo(e)}const Qoe=11,nx="Arial",joe="outside",jP=10,kKt=4,YKt=20,KKt=Kt("#ffffff"),EV=2,FKt=2*jP/3,gf=2*FKt/3,DKt=50,xKt=5e3,$P="blue",qP="red",Hj=(e,g,i)=>{i.type!=="filler"&&g.pubSub.publish("app.click",{type:"gene-annotation",event:e,payload:i})},$oe=(e,g)=>{const i=e.concat(g),I=i.map(n=>[n.xStart,1,n.xEnd,1]);yw(I,(n,r)=>{let C=null,o=null;if(i[n].type==="filler"?C=i[n]:o=i[n],i[r].type==="filler"){if(C)return;C=i[r]}else{if(!C)return;o=i[r]}C.xStart>=o.xStart&&C.xEnd<=o.xEnd&&(C.hide=!0)})};function EKt(e,g,i){const{flipText:I,fontSize:n,fontFamily:r,plusStrandColor:C,minusStrandColor:o,maxGeneEntries:a,maxFillerEntries:s,maxTexts:A}=i;if(g.texts={},g.rectGraphics=new ot.PIXI.Graphics,g.textBgGraphics=new ot.PIXI.Graphics,g.textGraphics=new ot.PIXI.Graphics,g.rectMaskGraphics=new ot.PIXI.Graphics,g.graphics.addChild(g.rectGraphics),g.graphics.addChild(g.textBgGraphics),g.graphics.addChild(g.textGraphics),g.graphics.addChild(g.rectMaskGraphics),g.rectGraphics.mask=g.rectMaskGraphics,!g.tileData.sort)return;g.tileData.sort((u,d)=>d.importance-u.importance);const l=g.tileData.filter(u=>u.type!=="filler").slice(0,a),c=g.tileData.filter(u=>u.type==="filler").slice(0,s);g.tileData=l.concat(c),g.tileData.forEach((u,d)=>{if(u.type==="filler")return;const h=u.fields,m=h[3],f=e.geneId(h,u.type),b=u.strand||h[5];u.strand=u.strand||b;let p=C||$P;if(b==="-"&&(p=o||qP),g.textWidths={},g.textHeights={},d>=A)return;const y=new ot.PIXI.Text(m,{fontSize:`${n}px`,fontFamily:r,fill:Kt(p)});y.interactive=!0,I&&(y.scale.x=-1),y.anchor.x=.5,y.anchor.y=1,g.texts[f]=y,g.texts[f].strand=b,g.textGraphics.addChild(y)}),g.initialized=!0}function qoe(e,g,i,I,n,r,C,o,a){const s=o-a/2,A=0;e.forEach(l=>{const c=new ot.PIXI.Graphics;i.rectGraphics.addChild(c),c.beginFill(r,.1),c.lineStyle(0,r);const u=[n(l.xStart)-A,s,n(l.xEnd)+A,s,n(l.xEnd)+A,s+a,n(l.xStart)-A,s+a,n(l.xStart)-A,s];c.interactive=!0,c.buttonMode=!0,c.mouseup=d=>Hj(d,g,l),c.drawPolygon(u),i.allRects.push([u,l.strand,l])})}function MKt(e,g,i,I,n,r,C,o,a,s){const A=o-a/2,l=n.split(",").map(y=>+y+C),c=r.split(",").map(y=>+y+C),u=e._xScale(i),d=e._xScale(I),h=d-u,m=o,f=[];let b=[u,m-EV/2,u+h,m-EV/2,u+h,m+EV/2,u,m+EV/2];g.drawPolygon(b),f.push(b);const p=2*a;for(let y=Math.max(e.position[0],u)+p;y{const l=g._xScale(A.xStart),c=g._xScale(A.xEnd),u=new ot.PIXI.Graphics;i.rectGraphics.addChild(u),u.beginFill(r,C),u.interactive=!0,u.buttonMode=!0,u.mouseup=m=>Hj(m,g,A);const d=g.geneRectHeight/2;let h=[];if(A.strand==="+"||A.fields[5]==="+"){const m=Math.max(l,c-d),f=m+d;h=[m,s,f,s+g.geneRectHeight/2,m,s+g.geneRectHeight]}else{const m=Math.min(c,l+d),f=m-d;h=[m,s,f,s+g.geneRectHeight/2,m,s+g.geneRectHeight]}u.drawPolygon(h),i.allRects.push([h,A.strand,A])})}function PKt(e,g,i,I,n,r,C,o,a){e.forEach(s=>{const A=s.fields,l=+s.chrOffset,c=A[12],u=A[13],d=new ot.PIXI.Graphics;i.rectGraphics.addChild(d),d.beginFill(r,C),d.interactive=!0,d.buttonMode=!0,d.mouseup=h=>Hj(h,g,s),i.allRects=i.allRects.concat(MKt(g,d,s.xStart,s.xEnd,c,u,l,o,a,s.strand||s.fields[5]).map(h=>[h,s.strand,s]))})}function eae(e,g,i,I,n,r,C,o,a){zKt(e,g,i,I,n,r,C,o,a),PKt(e,g,i,I,n,r,C,o,a)}function JKt(e,g){const{tileX:i,tileWidth:I}=Fd.getTilePosAndDimensions(e.tilesetInfo,g.tileId);g.rectMaskGraphics.clear();const n=Math.floor(Math.random()*16**6);g.rectMaskGraphics.beginFill(n,.3);const r=e._xScale(i),C=0,o=e._xScale(i+I)-e._xScale(i),a=e.dimensions[1];g.rectMaskGraphics.drawRect(r,C,o,a)}let Q1e=function(e){WKt(i,e);var g=XKt(i);function i(I,n){var r;BKt(this,i),r=g.call(this,I,n);const{animate:C}=I;return r.animate=C,r.options=n,r.fontSize=+r.options.fontSize||Qoe,r.geneLabelPos=r.options.geneLabelPosition||joe,r.geneRectHeight=+r.options.geneAnnotationHeight||jP,r.geneRectHeight-=2,r.geneStrandSpacing=+r.options.geneStrandSpacing||kKt,r.geneStrandHSpacing=r.geneStrandSpacing/2,r.geneRectHHeight=r.geneRectHeight/2,r}return SKt(i,[{key:"initTile",value:function(n){EKt(this,n,{flipText:this.flipText,fontSize:this.fontSize,fontFamily:nx,plusStrandColor:this.options.plusStrandColor,minusStrandColor:this.options.minusStrandColor,maxGeneEntries:DKt,maxFillerEntries:xKt,maxTexts:YKt}),this.renderTile(n)}},{key:"destroyTile",value:function(n){n.rectGraphics.destroy(),n.rectMaskGraphics.destroy(),n.textGraphics.destroy(),n.textBgGraphics.destroy(),n.graphics.destroy()}},{key:"rerender",value:function(n,r){const C=JSON.stringify(n);!r&&C===this.prevOptions||(Cs(jo(i.prototype),"rerender",this).call(this,n,r),this.fontSize=+this.options.fontSize||Qoe,this.geneLabelPos=this.options.geneLabelPosition||joe,this.geneRectHeight=+this.options.geneAnnotationHeight||jP,this.geneStrandHSpacing=this.geneStrandSpacing/2,this.geneRectHHeight=this.geneRectHeight/2,this.prevOptions=C,this.visibleAndFetchedTiles().forEach(o=>{this.renderTile(o)}))}},{key:"drawTile",value:function(){}},{key:"geneId",value:function(n,r){return`${r}_${n[0]}_${n[1]}_${n[2]}_${n[3]}`}},{key:"renderTile",value:function(n){if(!n.initialized)return;n.allRects=[],n.drawnAtScale=this._xScale.copy(),n.rectGraphics.removeChildren(),n.rectGraphics.clear(),n.textBgGraphics.clear();const r={},C=.3,o=.3;r["+"]=Kt(this.options.plusStrandColor||$P),r["-"]=Kt(this.options.minusStrandColor||qP);let a=n.tileData.filter(f=>f.type==="filler"&&f.strand==="+"),s=n.tileData.filter(f=>f.type==="filler"&&f.strand==="-");const A=n.tileData.filter(f=>f.type!=="filler"&&(f.strand==="+"||f.fields[5]==="+")),l=n.tileData.filter(f=>f.type!=="filler"&&(f.strand==="-"||f.fields[5]==="-"));$oe(A,a),$oe(l,s),a=a.filter(f=>!f.hide),s=s.filter(f=>!f.hide);const c=this.dimensions[1]/2,u=c-this.geneRectHeight/2-this.geneStrandSpacing/2,d=c+this.geneRectHeight/2+this.geneStrandSpacing/2,h=[this,n,n.rectGraphics,this._xScale,r["+"],C,u,this.geneRectHeight],m=[this,n,n.rectGraphics,this._xScale,r["-"],C,d,this.geneRectHeight];qoe(a,...h),qoe(s,...m),h[5]=o,m[5]=o,eae(A,...h),eae(l,...m),JKt(this,n),Fd.stretchRects(this,[f=>f.rectGraphics,f=>f.rectMaskGraphics]);for(const f of Object.values(n.texts))f.style={fontSize:`${this.fontSize}px`,FONT_FAMILY:nx,fill:Kt(f.strand==="-"?this.options.minusStrandColor||qP:this.options.plusStrandColor||$P)}}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);let r=Math.min(n,this.maxZoom);return r=Math.max(r,0),r}},{key:"draw",value:function(){Cs(jo(i.prototype),"draw",this).call(this),this.allTexts=[],this.allBoxes=[];const n=[];this.geneAreaHeight=this.geneRectHeight;const r=this.fontSize/2;Fd.stretchRects(this,[C=>C.rectGraphics,C=>C.rectMaskGraphics]),Object.values(this.fetchedTiles).filter(C=>C.drawnAtScale).forEach(C=>{C.textBgGraphics.clear(),C.textBgGraphics.beginFill(typeof this.options.labelBackgroundColor<"u"?Kt(this.options.labelBackgroundColor):KKt);const o=this.parentInFetched(C);C.initialized&&C.tileData.forEach(a=>{if(!C.texts||a.type==="filler")return;const s=a.fields,A=s[3],l=this.geneId(s,a.type),c=C.texts[l];if(!c)return;const u=+a.chrOffset,d=+s[1]+u,h=+s[2]+u,m=(d+h)/2;let f=this.dimensions[1]/2;const b=(this.geneAreaHeight-this.fontSize)/2;if(s[5]==="+"?f-=this.geneLabelPos==="inside"?b+this.geneStrandSpacing-2:this.fontSize/2+this.geneAreaHeight-2:f+=this.geneLabelPos==="inside"?this.fontSize+this.geneStrandSpacing/2+b+1:1.5*this.fontSize+this.geneAreaHeight+2,c.position.x=this._xScale(m),c.position.y=f,!C.textWidths[l]){const p=c.getBounds().width,y=c.getBounds().height;C.textHeights[l]=y,C.textWidths[l]=p}if(o)c.visible=!1;else{c.visible=!0;const p=2;this.flipText?this.allBoxes.push([c.position.x-C.textHeights[l]/2-p,f-r-1,c.position.x+C.textHeights[l]/2+p,f+r-1,A]):this.allBoxes.push([c.position.x-C.textWidths[l]/2-p,f-r-1,c.position.x+C.textWidths[l]/2+p,f+r-1,A]),this.allTexts.push({importance:+s[4],text:c,caption:A,strand:s[5]}),n.push(C.textBgGraphics)}})}),this.hideOverlaps(this.allBoxes,this.allTexts),this.renderTextBg(this.allBoxes,this.allTexts,n)}},{key:"renderTextBg",value:function(n,r,C){r.forEach((o,a)=>{if(o.text.visible&&n[a]&&C[a]){const[s,A,l,c]=n[a],u=l-s,d=c-A;C[a].drawRect(s-u/2,A-d/2,u,d)}})}},{key:"hideOverlaps",value:function(n,r){yw(n,(C,o)=>{r[C].importance>r[o].importance?r[o].text.visible=!1:r[C].text.visible=!1})}},{key:"setPosition",value:function(n){Cs(jo(i.prototype),"setPosition",this).call(this,n),[this.pMain.position.x,this.pMain.position.y]=this.position}},{key:"setDimensions",value:function(n){Cs(jo(i.prototype),"setDimensions",this).call(this,n),this.halfRectHHeight=this.dimensions[1]/2,this.visibleAndFetchedTiles().forEach(r=>{this.renderTile(r)})}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.refreshTiles(),this.draw()}},{key:"getMouseOverHtml",value:function(n,r){if(!this.tilesetInfo)return"";const C=[n,r];for(const o of this.visibleAndFetchedTiles())for(let a=0;a ${c.fields[3]}
Position: ${c.fields[0]}:${c.fields[1]}-${c.fields[2]}
Strand: ${c.fields[5]} - `}}return""}},{key:"exportSVG",value:function(){let n=null,C=null;Cs(Lo(I.prototype),"exportSVG",this)?[C,n]=Cs(Lo(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C);const r=document.createElement("g");return r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(r),this.visibleAndFetchedTiles().filter(o=>o.allRects).forEach(o=>{const a=document.createElement("g");a.setAttribute("transform",`translate(${o.rectGraphics.position.x}, + `}}return""}},{key:"exportSVG",value:function(){let n=null,r=null;Cs(jo(i.prototype),"exportSVG",this)?[r,n]=Cs(jo(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r);const C=document.createElement("g");return C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(C),this.visibleAndFetchedTiles().filter(o=>o.allRects).forEach(o=>{const a=document.createElement("g");a.setAttribute("transform",`translate(${o.rectGraphics.position.x}, ${o.rectGraphics.position.y}) scale(${o.rectGraphics.scale.x}, - ${o.rectGraphics.scale.y})`),o.allRects.forEach(s=>{const A=document.createElement("path"),l=s[0];let c=`M ${l[0]} ${l[1]}`;for(let u=2;uo.text.visible).forEach(o=>{const a=document.createElement("g"),s=document.createElement("text");s.setAttribute("text-anchor","middle"),s.setAttribute("font-family",qD),s.setAttribute("font-size",`${this.fontSize}px`),s.setAttribute("dy","-.2em"),a.setAttribute("transform",`scale(${o.text.scale.x},1)`),o.strand==="+"?s.setAttribute("fill",this.options.plusStrandColor):s.setAttribute("fill",this.options.minusStrandColor),s.innerHTML=o.text.text,a.appendChild(s),a.setAttribute("transform",`translate(${o.text.x},${o.text.y})scale(${o.text.scale.x},1)`),r.appendChild(a)}),[C,C]}}]),I}(ny);function FKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function joe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ys(e){return ys=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},ys(e)}function $oe(e,g,I,i,n,C,r,o,a,s){const A=s?e._xScale(I.yStart):e._xScale(I.xStart),l=s?e._xScale(I.yEnd):e._xScale(I.xEnd),c=s?e._yScale(I.xStart):e._yScale(I.yStart),u=s?e._yScale(I.xEnd):e._yScale(I.yEnd),d=I.uid+s,h=l-A,m=u-c;let f={x:A,y:c,width:h,height:m};i&&(hn&&f.xn&&br&&f.yr&&pa||f.height>a)&&(g.drawRect(f.x,f.y,f.width,f.height),e.publish("annotationDrawn",{trackUuid:e.uuid,annotationUuid:d,viewPos:[f.x,f.y,f.width,f.height],dataPos:[I.xStart,I.xEnd,I.yStart,I.yEnd],importance:I.importance,info:{patternType:e.options.patternType}}))}let P1e=function(e){zKt(I,e);var g=PKt(I);function I(...i){var n;FKt(this,I),n=g.call(this,...i),n.drawnRects={};const{publish:C,subscribe:r,unsubscribe:o}=BN();return n.publish=C,n.subscribe=r,n.unsubscribe=o,n}return DKt(I,[{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const C=n.split(".");return C.slice(0,C.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),C=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);let r=Math.max(n,C);return r=Math.min(r,this.maxZoom),r}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C)})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.remoteId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const n=this.xTiles,C=this.yTiles,r=this.zoomLevel,o=[];for(let a=0;a!(d.uid in this.drawnRects)).forEach(d=>{$oe(this,C,d,a,A,l,c,u,s,this.options.flipDiagonal==="yes"),this.options.flipDiagonal&&this.options.flipDiagonal==="copy"&&$oe(this,C,d,a,A,l,c,u,s,!0)})}},{key:"exportSVG",value:function(){let n=null,C=null;md(ys(I.prototype),"exportSVG",this)?[C,n]=md(ys(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C);const r=document.createElement("g");r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(r);for(const o of[!0,!1])for(const a of this.visibleAndFetchedTiles())!a.tileData||!a.tileData.length||a.tileData.forEach(s=>{const A=s.uid+o,l=document.createElement("g");if(l.setAttribute("transform",`translate(${a.graphics.position.x},${a.graphics.position.y})scale(${a.graphics.scale.x},${a.graphics.scale.y})`),r.appendChild(l),A in this.drawnRects){const c=this.drawnRects[A],u=document.createElement("rect");u.setAttribute("x",c.x),u.setAttribute("y",c.y),u.setAttribute("width",c.width),u.setAttribute("height",c.height),u.setAttribute("fill",this.options.rectangleDomainFillColor?this.options.rectangleDomainFillColor:"grey"),u.setAttribute("opacity",.3),u.style.stroke="black",u.style.strokeWidth="1px",l.appendChild(u)}});return[C,C]}},{key:"setPosition",value:function(n){md(ys(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,C){this.xScale().domain()[0]===n.domain()[0]&&this.xScale().domain()[1]===n.domain()[1]&&this.yScale().domain()[0]===C.domain()[0]&&this.yScale().domain()[1]===C.domain()[1]||(this.xScale(n),this.yScale(C),this.refreshTiles(),this.draw())}},{key:"leftTrackDraw",value:function(){this.draw()}}]),I}(hm);function LKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function qoe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Zs(e){return Zs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Zs(e)}const I5t=250;let O1e=function(e){qKt(I,e);var g=e5t(I);function I(i,n){var C;LKt(this,I),C=g.call(this,i,n);const{pubSub:r}=i;C.drawnAnnotations={},C.drawnAnnoGfx={},C.selectedAnno=null,C.options.minSquareSize=+C.options.minSquareSize;const{publish:o,subscribe:a,unsubscribe:s}=BN();return C.publish=o,C.subscribe=a,C.unsubscribe=s,C.sT=0,C.annoSelectedBound=C.annoSelected.bind(J1e(C)),C.pubSubs.push(r.subscribe("annoSelected",C.annoSelectedBound)),C}return UKt(I,[{key:"minX",get:function(){return this.tilesetInfo&&this.tilesetInfo.min_pos?this.tilesetInfo.min_pos[0]:0}},{key:"maxX",get:function(){return this.tilesetInfo&&this.tilesetInfo.max_pos?this.tilesetInfo.max_pos[0]:this.tilesetInfo.max_width||this.tilesetInfo.max_size}},{key:"minY",get:function(){return this.minX}},{key:"maxY",get:function(){return this.maxX}},{key:"maxSize",get:function(){const i=this.tilesetInfo.max_pos&&Math.max(this.tilesetInfo.max_pos[0]-this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[1]-this.tilesetInfo.min_pos[1]);return i||(this.tilesetInfo.max_size?this.tilesetInfo.max_size:0)}},{key:"projection",value:function([n,C]){return[this._xScale(n),this._yScale(C)]}},{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const C=n.split(".");return C.slice(0,C.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.minX,this.maxX),C=vt.calculateZoomLevel(this._yScale,this.minY,this.maxY);return rve(hz(n,C),this.maxZoom)}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C)})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.tileId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.minX,this.maxX,this.tilesetInfo.max_zoom,this.maxSize),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.minY,this.maxY,this.tilesetInfo.max_zoom,this.maxSize);const n=this.zoomLevel,C=[];for(let r=0;r!(a.uid in this.drawnAnnotations)||C).forEach(a=>{const[s,A]=this.projection([a.xStart,a.yStart]),[l,c]=this.projection([a.xEnd,a.yEnd]);this.options.exclude&&this.options.exclude.indexOf(a.uid)>=0||this.drawAnnotation(this.prepAnnotation(o,a.uid,s,A,l-s,c-A,a),r)})}},{key:"prepAnnotation",value:function(n,C,r,o,a,s,A){let l;try{l=JSON.parse(A.fields)}catch{}return{graphics:n,id:A.id,uid:C,annotation:{x:r,y:o,width:a,height:s},dataPos:[A.xStart,A.xEnd,A.yStart,A.yEnd],importance:A.importance,info:l}}},{key:"drawAnnotation",value:function({graphics:n,id:C,uid:r,annotation:o,dataPos:a,importance:s,info:A},l){this.options.minSquareSize&&(o.widththis.hover(u,c,r),u.mouseout=()=>this.blur(u,c,r),u.mousedown=()=>this.mouseDown(),u.mouseup=h=>this.mouseUp(u,c,r,h,d),l||this.publish("annotationDrawn",{trackUuids:this.uuid,annotationUuid:r,annotationId:C,viewPos:c,dataPos:a,importance:s,info:A})}},{key:"_drawRect",value:function(n,C,r){let o=this.options.rectangleDomainStrokeColor,a=this.options.rectangleDomainStrokeWidth,s=this.options.rectangleDomainStrokeOpacity,A=this.options.rectangleDomainFillColor,l=this.options.rectangleDomainFillOpacity;this.hoveredAnno===r&&(o=this.options.hoverColor,a=this.options.rectangleDomainStrokeWidth+1||2,s=1,A=this.options.hoverColor,l=this.options.rectangleDomainFillOpacity),this.selectedAnno&&this.selectedAnno.uid===r&&(o=this.options.selectColor,a=this.options.rectangleDomainStrokeWidth+1||2,s=1,A=this.options.selectColor,l=hz(.33,this.options.rectangleDomainFillOpacity)),n.clear(),this.options.trackBorderBgWidth&&(this.setBorderStyle(n,this.options.trackBorderBgColor,this.options.trackBorderBgWidth,this.options.trackBorderBgAlpha),this.setFill(n,A,0),n.drawRect(...C)),this.setBorderStyle(n,o,a,s),this.setFill(n,A,l),n.drawRect(...C),n.__viewPos__=C}},{key:"context",value:function(n,C,r){return o=>o(n,C,r)}},{key:"click",value:function(n,C,r,o,a){this.select(n,C,r),this.pubSub.publish("app.click",{type:"annotation",event:o,payload:a})}},{key:"mouseDown",value:function(){this.sT=performance.now()}},{key:"mouseUp",value:function(n,C,r,o,a){performance.now()-this.sT<=I5t&&this.click(n,C,r,o,a)}},{key:"hover",value:function(n,C,r){this.hoveredAnno=r,this._drawRect(n,C,r),this.animate()}},{key:"focus",value:function(n,C,r){this._drawRect(n,C,r),this.animate()}},{key:"blur",value:function(n,C,r){this.hoveredAnno=null,this._drawRect(n,C,r),this.animate()}},{key:"select",value:function(n,C,r,o=!1){let a=null,s=null;this.selectedAnno&&(a=this.selectedAnno.graphics,s=this.selectedAnno.uid),this.selectedAnno={graphics:n,uid:r},this.focus(n,C,r),this.options.onSelect&&!o&&(window[this.options.onSelect](r),this.pubSub.publish("annoSelected",r)),a&&s&&this.blur(a,a.__viewPos__,s)}},{key:"unselect",value:function(){const n=this.selectedAnno.graphics,C=this.selectedAnno.uid;this.selectedAnno=null,this.blur(n,n.__viewPos__,C)}},{key:"annoSelected",value:function(n){if(!this.selectedAnno||this.selectedAnno.uid!==n){this.selectedAnno&&this.unselect();const C=this.drawnAnnoGfx[n];C&&this.select(C,C.__viewPos__,n,!0)}}},{key:"exportSVG",value:function(){let n=null,C=null;fd(Zs(I.prototype),"exportSVG",this)?[C,n]=fd(Zs(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C);const r=document.createElement("g");return r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(r),this.visibleAndFetchedTiles().filter(o=>o.tileData&&o.tileData.length).map(o=>({graphics:o.graphics,td:o.tileData})).forEach(({td:o,graphics:a})=>{const s=document.createElement("g");if(s.setAttribute("transform",`translate(${a.position.x},${a.position.y})scale(${a.scale.x},${a.scale.y})`),r.appendChild(s),o.uid in this.drawnAnnotations){const A=this.drawnAnnotations[o.uid],l=document.createElement("rect");l.setAttribute("x",A.x),l.setAttribute("y",A.y),l.setAttribute("width",A.width),l.setAttribute("height",A.height),l.setAttribute("fill",this.options.fillColor||"grey"),l.setAttribute("opacity",.3),l.style.stroke=this.options.fillColor||"grey",l.style.strokeWidth="1px",s.appendChild(l)}}),[C,C]}},{key:"setBorderStyle",value:function(n,C=this.options.rectangleDomainStrokeColor,r=this.options.rectangleDomainStrokeWidth,o=this.options.rectangleDomainStrokeOpacity){n.lineStyle(typeof r<"u"?r:1,Kt(C||"black"),typeof o<"u"?o:1)}},{key:"setFill",value:function(n,C=this.options.rectangleDomainFillColor,r=this.options.rectangleDomainFillOpacity){n.beginFill(Kt(C||"grey"),typeof r<"u"?r:.4)}},{key:"setPosition",value:function(n){fd(Zs(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.refreshTiles(),this.draw()}}]),I}(hm);function i5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function eae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Sh(e){return Sh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Sh(e)}let jP=function(e){a5t(I,e);var g=A5t(I);function I(i,n,C){var r;return i5t(this,I),r=g.call(this,i,n),r.pubSub=i.pubSub,r.options=n,r.isVertical=C,r.rects={},r.defaultColor=Hi("red"),r}return n5t(I,[{key:"draw",value:function(){const n=typeof this.options.minRectWidth<"u"?this.options.minRectWidth:10,C=typeof this.options.fill<"u"?Hi(this.options.fill):this.defaultColor,r=typeof this.options.fillOpacity<"u"?+this.options.fillOpacity:.2,o=typeof this.options.stroke<"u"?Hi(this.options.stroke):this.defaultColor,a=typeof this.options.strokeWidth<"u"?+this.options.strokeWidth:1,s=typeof this.options.strokeOpacity<"u"?+this.options.strokeOpacity:0;let A;this.options.strokePos&&this.options.strokePos.length&&(A=Array.isArray(this.options.strokePos)?this.options.strokePos:[this.options.strokePos]),yv(Sh(I.prototype),"draw",this).call(this);const l=this.pMain;l.clear();const c=performance.now();this.options.regions.forEach(u=>{const d=`${u[0]}-${u[1]}`;this.rects[d]||(this.rects[d]={graphics:new ot.PIXI.Graphics},l.addChild(this.rects[d].graphics)),this.rects[d].timeStamp=c;const h=Hi(u[2])||C;let m=Hi(u[3])||o;m||(m=h);const f=ot.PIXI.utils.rgb2hex([h.r/255,h.g/255,h.b/255]),b=ot.PIXI.utils.rgb2hex([m.r/255,m.g/255,m.b/255]);A?(l.lineStyle(1,b,0),l.beginFill(b,+u[5]||s)):(l.lineStyle(a,b,+u[5]||s),l.beginFill(f,+u[4]||r));const p=this.isVertical?this._yScale:this._xScale;let y=p(+u[0]);const Z=p(+u[1]);let B=Z-y;const G=typeof u[6]<"u"?u[6]:n;B{(v==="top"||v==="around")&&(this.isVertical?l.drawRect(0,y,a,B):l.drawRect(y,0,B,a)),(v==="right"||v==="around")&&(this.isVertical?l.drawRect(0,y,this.dimensions[0],a):l.drawRect(y,0,a,this.dimensions[1])),(v==="bottom"||v==="around")&&(this.isVertical?l.drawRect(this.dimensions[0]-a,y,a,B):l.drawRect(y,this.dimensions[1]-a,B,a)),(v==="left"||v==="around")&&(this.isVertical?l.drawRect(0,y+B-a,this.dimensions[0],a):l.drawRect(y+B-a,0,a,this.dimensions[1]))})):l.lineStyle(a,b,+u[5]||s),this.rects[d].graphics.clear(),this.rects[d].graphics.interactive=!0,this.rects[d].graphics.buttonMode=!0,l.beginFill(f,+u[4]||r),this.isVertical?(l.drawRect(0,y,this.dimensions[0],B),this.rects[d].graphics.hitArea=new ot.PIXI.Rectangle(0,y,this.dimensions[0],B)):(l.drawRect(y,0,B,this.dimensions[1]),this.rects[d].graphics.hitArea=new ot.PIXI.Rectangle(y,0,B,this.dimensions[1])),this.rects[d].graphics.mousedown=()=>{this.rects[d].mouseDownTime=performance.now()},this.rects[d].graphics.mouseup=v=>{performance.now()-this.rects[d].mouseDownTimeu.timeStamp!==c).forEach(u=>l.removeChild(u.graphics))}},{key:"setPosition",value:function(n){yv(Sh(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}}]),I}(mC);function u5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function tae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qa(e){return qa=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},qa(e)}let _1e=function(e){p5t(I,e);var g=b5t(I);function I(i,n){var C;return u5t(this,I),C=g.call(this,i,n),C.drawnRects=new Set,C.pMain=C.pMobile,C}return d5t(I,[{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const C=n.split(".");return C.slice(0,C.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),C=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);let r=Math.max(n,C);return r=Math.min(r,this.maxZoom),this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?r=Math.min(this.options.maxZoom,r):console.error("Invalid maxZoom on track:",this)),r}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C)})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.tileId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel();const n=this._xScale.copy();n.domain([this._xScale.invert(this._xScale.range()[0]-this.dimensions[1]*Math.sqrt(2)),this._xScale.invert(this._xScale.range()[1]+this.dimensions[1]*Math.sqrt(2))]),this.xTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const C=this.xTiles,r=this.yTiles,o=this.zoomLevel,s=this.tilesetInfo.max_width/2**o,A=[];for(let l=0;lthis.dimensions[1])continue;const d=[o,C[l],r[c]];d.mirrored=!1,A.push(d)}this.setVisibleTiles(A)}},{key:"initTile",value:function(n){tc(qa(I.prototype),"initTile",this).call(this,n),this.drawTile(n)}},{key:"destroyTile",value:function(n,C){}},{key:"draw",value:function(){this.delayDrawing||this.drawnRects.clear(),tc(qa(I.prototype),"draw",this).call(this)}},{key:"drawTile",value:function(n){if(!n.graphics)return;const C=n.graphics;C.clear();const r=Kt(this.options.rectangleDomainStrokeColor?this.options.rectangleDomainStrokeColor:"black"),o=Kt(this.options.rectangleDomainFillColor?this.options.rectangleDomainFillColor:"grey");if(C.lineStyle(1/this.pMain.scale.x,r,1),C.beginFill(o,.4),C.alpha=this.options.rectangleDomainOpacity?this.options.rectangleDomainOpacity:.5,!!n.tileData.sort)for(const a of n.tileData){const s=this._refXScale(a.xStart),A=this._refXScale(a.xEnd),l=this._refYScale(a.yStart),c=this._refYScale(a.yEnd),u=a.uid;this.drawnRects.has(u)||(this.drawnRects.add(u),C.drawRect(s,l,A-s,c-l),C.pivot.x=this._refXScale(0),C.pivot.y=this._refYScale(0),C.scale.x=-1/Math.sqrt(2),C.rotation=-3*Math.PI/4,C.scale.y=1/Math.sqrt(2),C.position.x=this._refXScale(0),C.position.y=0)}}},{key:"setPosition",value:function(n){tc(qa(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"refScalesChanged",value:function(n,C){tc(qa(I.prototype),"refScalesChanged",this).call(this,n,C);for(const r in this.fetchedTiles){const o=this.fetchedTiles[r];if(o.sprite){const a=o.graphics;a.pivot.x=this._refXScale(0),a.pivot.y=this._refYScale(0),a.scale.x=-1/Math.sqrt(2),a.rotation=-3*Math.PI/4,a.scale.y=1/Math.sqrt(2),a.position.x=this._refXScale(0),a.position.y=0}}}},{key:"zoomed",value:function(n,C,r,o,a){tc(qa(I.prototype),"zoomed",this).call(this,n,C,r,o,a),this.pMain.position.x=o,this.pMain.position.y=this.position[1]+this.dimensions[1],this.pMain.scale.x=r,this.pMain.scale.y=r,this.options.oneDHeatmapFlipped&&(this.pMain.scale.y=-r,this.pMain.position.y=this.position[1]),this.draw()}},{key:"leftTrackDraw",value:function(){this.draw()}}]),I}(hm);function v5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function gae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function wh(e){return wh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},wh(e)}let L1e=function(e){V5t(I,e);var g=W5t(I);function I(i,n){var C;return v5t(this,I),C=g.call(this,i,n),C.drawnRects=new Set,C}return B5t(I,[{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const C=n.split(".");return C.slice(0,C.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),C=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);let r=Math.max(n,C);return r=Math.min(r,this.maxZoom),r}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C)})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.tileId))}},{key:"calculateVisibleTiles",value:function(n=!0){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const C=this.xTiles,r=this.yTiles,o=this.zoomLevel,a=[];for(let s=0;si.chrPositions?Ti(n,i):null,i.chrToAbs=([n,C]=[])=>i.chrPositions?pX(n,C,i):null,vt.text(e,(n,C)=>{if(n)g&&g(null);else{const r=JQ(C),o=HN(r);Object.keys(o).forEach(a=>{i[a]=o[a]}),g&&g(i)}},I).then(()=>i)}function N5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Iae(e,g){for(var I=0;II.pos).left}return k5t(e,[{key:"scalesToPositionText",value:function(I,i,n=!1){if(this.chromInfo===null||!I||!i)return"";const C=Ti(I.domain()[0],this.chromInfo),r=Ti(I.domain()[1],this.chromInfo),o=Ti(i.domain()[0],this.chromInfo),a=Ti(i.domain()[1],this.chromInfo);let s=null;const A=ur(",d");return C[0]!==r[0]?s=`${C[0]}:${A(Math.floor(C[1]))}-${r[0]}:${A(Math.ceil(r[1]))}`:s=`${C[0]}:${A(Math.floor(C[1]))}-${A(Math.ceil(r[1]))}`,n&&(o[0]!==a[0]?s+=` & ${o[0]}:${A(Math.floor(o[1]))}-${a[0]}:${A(Math.ceil(a[1]))}`:s+=` & ${o[0]}:${A(Math.floor(o[1]))}-${A(Math.ceil(a[1]))}`),(C[2]<=0||r[2]>0||n&&(o[2]<=0||a[2]>0))&&(s+=` [offset ${C[2]},${r[2]}`,n&&(s+=`:${o[2]},${a[2]}`),s+="]"),s}},{key:"convertNumberNotation",value:function(I){let i=I;if(!i.includes("M",i.length-1)&&!i.includes("K",i.length-1))return i;let n=0,C=0;if(i.includes("M",i.length-1)?(n=6,i=i.replace("M","")):(n=3,i=i.replace("K","")),Number.isNaN(+i))return I;i=(+i).toString(),i.includes(".")&&(C=i.length-1-i.indexOf("."),i=(+i.replace(".","")).toString());const r=n-C;return r<0?I:(i+="0".repeat(r),i)}},{key:"parsePosition",value:function(I,i=null){const n=I.split(":");let C=null,r=0;n.length>1?(C=n[0],r=+this.convertNumberNotation(n[1].replace(/,/g,""))):n[0]in this.chromInfo.chrPositions?(C=n[0],r=0,i!==null&&(r=+this.chromInfo.chromLengths[C])):(r=+this.convertNumberNotation(n[0].replace(/,/g,"")),C=null,i&&(C=i));let o=null;return C===null?(C=i,o=r):C in this.chromInfo.chrPositions&&(o=this.chromInfo.chrPositions[C].pos+r),[C,r,o]}},{key:"matchRangesToLarger",value:function(I,i){if(I[1]-I[0]C.length>0);let n=null;if(i[0].indexOf("-")===0&&(i[0]=i[0].slice(3,i[0].length)),i.length>1){let[C,r,o]=this.parsePosition(i[0]),[a,s,A]=this.parsePosition(i[1],C);const l=[o,A];[C,r,o]=this.parsePosition(i[1]),[a,s,A]=this.parsePosition(i[0],C),C===null&&a!==null&&([C,r,o]=this.parsePosition(i[1],a));const c=[o,A];return c[1]-c[0]>l[1]-l[0]?c:l}if(i[0]in this.chromInfo.chrPositions){const C=+this.chromInfo.chrPositions[i[0]].pos;n=[C,C+ +this.chromInfo.chromLengths[i[0]]]}else{const[C,r,o]=this.parsePosition(i[0]);n=[o-8e6,o+8e6]}return n[0]>n[1]?[n[1],n[0]]:n}},{key:"parseOffset",value:function(I){const i=I.split(":");if(i.length===0)return[[0,0],[0,0]];if(i.length===1){const r=i[0].split(",");return[[+r[0],+r[1]],[0,0]]}const n=i[0].split(","),C=i[1].split(",");return[[+n[0],+n[1]],[+C[0],+C[1]]]}},{key:"searchPosition",value:function(I){let i=null,n=null;I=I.trim();const C=/\[offset (.+?)\]/.exec(I);let r=[[0,0],[0,0]];C&&(I=I.replace(C[0],""),r=this.parseOffset(C[1]));const o=I.split(" & ");return o.length>1?(i=this.getSearchRange(o[0].split(" ")[0]),n=this.getSearchRange(o[1].split(" ")[0])):i=this.getSearchRange(o[0]),i!==null&&n!==null&&([i,n]=this.matchRangesToLarger(i,n)),i&&(i[0]+=r[0][0],i[1]+=r[0][1]),n&&(n[0]+=r[1][0],n[1]+=r[1][1]),[i,n]}}]),e}();function F5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function iae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function C0(e){return C0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},C0(e)}let U1e=function(e){z5t(I,e);var g=P5t(I);function I(i,n){var C;F5t(this,I),C=g.call(this,i,n);const{dataConfig:r,animate:o,pubSub:a}=i;C.searchField=null,C.chromInfo=null,C.animate=o;const s=r.server,A=r.tilesetUid,l=`${s}/chrom-sizes/?id=${A}`;return Js(l,c=>{C.chromInfo=c,C.searchField=new n0(C.chromInfo),C.draw(),C.texts=[];for(let u=0;uthis.dimensions[0]?f.x-=h+p-this.dimensions[0]:h-p<0&&(f.x-=h-p),m+y>this.dimensions[1]?f.y-=m+y-this.dimensions[1]:m-y<0&&(f.y-=m-y),f.visible=!0,n.push({importance:this.texts[s][A].hashValue,text:this.texts[s][A],caption:null})}this.hideOverlaps(n)}},{key:"hideOverlaps",value:function(n){let C=[];C=n.map(r=>{const o=r.text;o.updateTransform();const a=o.getBounds();return[a.x,a.y,a.x+a.width,a.y+a.height]}),pw(C,(r,o)=>{n[r].importance>n[o].importance?n[o].text.visible=0:n[r].text.visible=0})}},{key:"setPosition",value:function(n){GW(C0(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}}]),I}(mC);function L5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function nae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function kc(e){return kc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},kc(e)}let CG=function(e){q5t(I,e);var g=eFt(I);function I(i,n){var C;L5t(this,I),C=g.call(this,i,n);const{chromInfoPath:r,dataConfig:o,animate:a,pubSub:s,orientation:A="2d",isOverlay:l=!1}=i;C.searchField=null,C.chromInfo=null,C.animate=a,C.orientation=A,C.isOverlay=l;let c=r;return c||(c=`${o.server}/chrom-sizes/?id=${o.tilesetUid}`),Js(c,u=>{C.chromInfo=u,C.searchField=new n0(C.chromInfo),C.texts=[],C.lineGraphics=new ot.PIXI.Graphics,C.lineGraphics1dH=new ot.PIXI.Graphics,C.lineGraphics1dV=new ot.PIXI.Graphics,C.lineGraphics2d=new ot.PIXI.Graphics,C.mask1dH=new ot.PIXI.Graphics,C.mask1dV=new ot.PIXI.Graphics,C.mask2d=new ot.PIXI.Graphics,C.lineGraphics.addChild(C.lineGraphics1dH),C.lineGraphics1dH.addChild(C.mask1dH),C.lineGraphics.addChild(C.lineGraphics1dV),C.lineGraphics1dV.addChild(C.mask1dV),C.lineGraphics.addChild(C.lineGraphics2d),C.lineGraphics2d.addChild(C.mask2d),C.pMain.addChild(C.lineGraphics),C.draw(),C.animate()},s),C}return U5t(I,[{key:"drawLines",value:function(n=this.orientation,C=0,r=0){let o=this.lineGraphics;this.isOverlay&&n==="1d-horizontal"&&(o=this.lineGraphics1dH),this.isOverlay&&n==="1d-vertical"&&(o=this.lineGraphics1dV),this.isOverlay&&n==="2d"&&(o=this.lineGraphics2d);const a=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue"),s=this.options.lineStrokeWidth?this.options.lineStrokeWidth:1;o.lineStyle(s,a,1),(n==="2d"||n==="1d-horizontal")&&(o.moveTo(this._xScale(0)+C,r),o.lineTo(this._xScale(0)+C,this.dimensions[1]+r)),(n==="2d"||n==="1d-vertical")&&(o.moveTo(C,this._yScale(0)+r),o.lineTo(this.dimensions[0]+C,this._yScale(0)+r));for(let A=0;A0&&c0&&c0&&h0&&h"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Rh(e){return Rh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Rh(e)}const uFt=300;let Q1e=function(e){aFt(I,e);var g=AFt(I);function I(i,n){var C;iFt(this,I),C=g.call(this,i,n);const{chromInfoPath:r,pubSub:o}=i;return C.pubSub=o,C.rects={},Js(r,a=>{C.chromInfo=a,C.draw()},C.pubSub),C}return nFt(I,[{key:"draw",value:function(){if(!this.chromInfo)return;const n=this.options.minRectWidth?this.options.minRectWidth:10,C=this.options.minRectWidth?this.options.minRectHeight:10;Gv(Rh(I.prototype),"draw",this).call(this);const r=this.pMain;r.clear();const o=performance.now();this.options.regions.forEach(a=>{const s=a.slice(0,6).join("-");this.rects[s]||(this.rects[s]={graphics:new ot.PIXI.Graphics},r.addChild(this.rects[s].graphics)),this.rects[s].timeStamp=o;const A=Hi(a[6]);let l=Hi(a[7]);l||(l=A);const c=ot.PIXI.utils.rgb2hex([A.r/255,A.g/255,A.b/255]),u=ot.PIXI.utils.rgb2hex([l.r/255,l.g/255,l.b/255]);r.lineStyle(1,u,l.opacity),r.beginFill(c,A.opacity);let d=this._xScale(this.chromInfo.chrPositions[a[0]].pos+ +a[1]);const h=this._xScale(this.chromInfo.chrPositions[a[0]].pos+ +a[2]);let m=this._yScale(this.chromInfo.chrPositions[a[3]].pos+ +a[4]);const f=this._yScale(this.chromInfo.chrPositions[a[3]].pos+ +a[5]);let b=h-d,p=f-m;const y=typeof a[8]<"u"?a[8]:n,Z=typeof a[9]<"u"?a[9]:C;b{this.rects[s].mouseDownTime=performance.now()},this.rects[s].graphics.mouseup=B=>{performance.now()-this.rects[s].mouseDownTime"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gs(e){return Gs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Gs(e)}const vFt=200,BFt=6,SFt=2,oae=7829367;let $1e=function(e){bFt(I,e);var g=yFt(I);function I(i,n){var C;dFt(this,I),C=g.call(this,i,n);const{dataConfig:r,animate:o,chromInfoPath:a,isShowGlobalMousePosition:s}=i;C.searchField=null,C.chromInfo=null,C.dataConfig=r,C.pTicks=new ot.PIXI.Graphics,C.pMain.addChild(C.pTicks),C.gTicks={},C.tickTexts={},C.options=n,C.isShowGlobalMousePosition=s,C.textFontSize=12,C.textFontFamily="Arial",C.textFontColor="#808080",C.textStrokeColor=C.getTheme()===gI?"#000000":"#ffffff",C.pixiTextConfig={fontSize:+C.options.fontSize?`${+C.options.fontSize}px`:`${C.textFontSize}px`,fontFamily:C.textFontFamily,fill:C.options.color||C.textFontColor,lineJoin:"round",stroke:C.options.stroke||C.textStrokeColor,strokeThickness:2},C.stroke=Kt(C.pixiTextConfig.stroke),C.tickWidth=vFt,C.tickHeight=BFt,C.tickTextSeparation=SFt,C.tickColor=C.options.tickColor?Kt(C.options.tickColor):oae,C.animate=o,C.pubSubs=[],C.options.showMousePosition&&!C.hideMousePosition&&(C.hideMousePosition=Ah(j1e(C),C.is2d,C.isShowGlobalMousePosition()));let A=a;return A||(A=`${r.server}/chrom-sizes/?id=${r.tilesetUid}`),Js(A,l=>{C.chromInfo=l,C.searchField=new n0(C.chromInfo),C.rerender(C.options,!0),C.draw(),C.animate()},C.pubSub),C}return hFt(I,[{key:"initBoundsTicks",value:function(){this.pTicks&&(this.pMain.removeChild(this.pTicks),this.pTicks=null),this.gBoundTicks||(this.gBoundTicks=new ot.PIXI.Graphics,this.leftBoundTick=new ot.PIXI.Text("",this.pixiTextConfig),this.rightBoundTick=new ot.PIXI.Text("",this.pixiTextConfig),this.gBoundTicks.addChild(this.leftBoundTick),this.gBoundTicks.addChild(this.rightBoundTick),this.pMain.addChild(this.gBoundTicks)),this.texts=[]}},{key:"initChromLabels",value:function(){if(this.chromInfo){this.gBoundTicks&&(this.pMain.removeChild(this.gBoundTicks),this.gBoundTicks=null),this.pTicks||(this.pTicks=new ot.PIXI.Graphics,this.pMain.addChild(this.pTicks)),this.texts=[],this.pTicks.removeChildren();for(let n=0;nNumber.isInteger(b)),c=this.tickTexts[n.chr],u=this.options.fontIsLeftAligned?(+this.options.fontSize||this.textFontSize)/2:this.tickHeight,d=this.flipText?-1:1,h=this.options.fontIsLeftAligned?d*4:0;let m=this.options.fontIsLeftAligned?0:u+this.tickTextSeparation;for(this.options.reverseOrientation&&(m=this.dimensions[1]-m);c.lengthl.length;){const b=c.pop();this.gTicks[n.chr].removeChild(b)}let f=0;for(;f{if(this.tickTexts[o])for(let a=0;a{r.updateTransform();const a=r.getBounds();return[a.x,a.y,a.x+a.width,a.y+a.height]}),pw(C,(r,o)=>{n[r].importance>n[o].importance?n[o].text.visible=!1:n[r].text.visible=!1})}},{key:"setPosition",value:function(n){pd(Gs(I.prototype),"setPosition",this).call(this,n),[this.pMain.position.x,this.pMain.position.y]=this.position}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}},{key:"exportSVG",value:function(){let n=null,C=null;pd(Gs(I.prototype),"exportSVG",this)?[C,n]=pd(Gs(I.prototype),"exportSVG",this).call(this):(C=document.createElement("g"),n=C),C.setAttribute("class","chromosome-labels");const r=document.createElement("g");return n.appendChild(r),r.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),this.allTexts.filter(o=>o.text.visible).forEach(o=>{const a=pz(o.text);r.appendChild(a)}),Object.values(this.tickTexts).forEach(o=>{o.filter(a=>a.visible).forEach(a=>{let s=pz(a);r.appendChild(s),s=uve(a.x,this.options.reverseOrientation?0:this.dimensions[1],a.x,this.options.reverseOrientation?this.tickHeight:this.dimensions[1]-this.tickHeight,1,this.tickColor);const A=document.createElement("line");A.setAttribute("x1",a.tickLine[0]),A.setAttribute("y1",a.tickLine[1]),A.setAttribute("x2",a.tickLine[2]),A.setAttribute("y2",a.tickLine[3]),A.setAttribute("style","stroke: grey"),r.appendChild(s),r.appendChild(A)})}),[C,n]}}]),I}(mC);function wFt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function aae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eA(e){return eA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},eA(e)}let q1e=function(e){HFt(I,e);var g=TFt(I);function I(i,n){var C;wFt(this,I),C=g.call(this,i,n);const{animate:r}=i;return C.pMain=C.pMobile,C.colorScale=Nb,C.continuousScaling=!1,n&&n.colorRange&&(C.colorScale=Oc(n.colorRange)),C.animate=r,C.options=n,C.pubSubs=[],C}return RFt(I,[{key:"rerender",value:function(n,C){gc(eA(I.prototype),"rerender",this).call(this,n,C),this.zoomed(this.xScale(),this.yScale(),this.pMain.scale.x,this.pMain.position.x,this.pMain.position.y)}},{key:"calculateZoomLevel",value:function(){let n=null;if(this.tilesetInfo.resolutions){const C=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),r=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);n=Math.min(C,r)}else{const C=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),r=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);n=Math.max(C,r),n=Math.min(n,this.maxZoom)}return this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?n=Math.min(this.options.maxZoom,n):console.error("Invalid maxZoom on track:",this)),n}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel();const n=this._xScale.copy();if(n.domain([this._xScale.invert(this._xScale.range()[0]-this.dimensions[1]*Math.sqrt(2)),this._xScale.invert(this._xScale.range()[1]+this.dimensions[1]*Math.sqrt(2))]),this.tilesetInfo.resolutions){const l=this.tilesetInfo.resolutions.map(c=>+c).sort((c,u)=>u-c);this.xTiles=vt.calculateTilesFromResolution(l[this.zoomLevel],n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),this.yTiles=vt.calculateTilesFromResolution(l[this.zoomLevel],n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0])}else this.xTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const C=this.xTiles,r=this.yTiles,o=this.zoomLevel,s=this.tilesetInfo.max_width/2**o,A=[];for(let l=0;lthis.dimensions[1])continue;const d=[o,C[l],r[c]];d.mirrored=!1,d.dataTransform=this.options.dataTransform?this.options.dataTransform:"default",A.push(d)}this.setVisibleTiles(A)}},{key:"tileDataToCanvas",value:function(n){const C=document.createElement("canvas");C.width=256,C.height=256;const r=C.getContext("2d");r.fillStyle="transparent",r.fillRect(0,0,C.width,C.height);const o=new ImageData(n,C.width,C.height);return r.putImageData(o,0,0),C}},{key:"setSpriteProperties",value:function(n,C,r,o){const{tileX:a,tileY:s,tileWidth:A,tileHeight:l}=this.getTilePosAndDimensions(C,r),c=a+A,u=s+l;n.width=this._refXScale(c)-this._refXScale(a),n.height=this._refYScale(u)-this._refYScale(s),n.x=this._refXScale(a),n.y=this._refYScale(s)}},{key:"pixDataFunction",value:function(n,C){if(C){const r=n.graphics,o=this.tileDataToCanvas(C.pixData),a=ot.PIXI.VERSION[0]==="4"?ot.PIXI.Texture.fromCanvas(o,ot.PIXI.SCALE_MODES.NEAREST):ot.PIXI.Texture.from(o,{scaleMode:ot.PIXI.SCALE_MODES.NEAREST});n.sprite=new ot.PIXI.Sprite(a),n.canvas=o,this.setSpriteProperties(n.sprite,n.tileData.zoomLevel,n.tileData.tilePos,n.mirrored),r.pivot.x=this._refXScale(0),r.pivot.y=this._refYScale(0),r.scale.x=-1/Math.sqrt(2),r.rotation=-3*Math.PI/4,r.scale.y=1/Math.sqrt(2),r.position.x=this._refXScale(0),r.position.y=0,r.removeChildren(),r.addChild(n.sprite)}this.renderingTiles.delete(n.tileId)}},{key:"refScalesChanged",value:function(n,C){gc(eA(I.prototype),"refScalesChanged",this).call(this,n,C);for(const r in this.fetchedTiles){const o=this.fetchedTiles[r];if(o.sprite){this.setSpriteProperties(o.sprite,o.tileData.zoomLevel,o.tileData.tilePos,o.mirrored);const a=o.graphics;a.pivot.x=this._refXScale(0),a.pivot.y=this._refYScale(0),a.scale.x=-1/Math.sqrt(2),a.rotation=-3*Math.PI/4,a.scale.y=1/Math.sqrt(2),a.position.x=this._refXScale(0),a.position.y=0}}}},{key:"zoomed",value:function(n,C,r,o,a){gc(eA(I.prototype),"zoomed",this).call(this,n,C,r,o,a),gc(eA(I.prototype),"draw",this).call(this),this.pMain.position.x=o,this.pMain.position.y=this.position[1]+this.dimensions[1],this.pMain.scale.x=r,this.pMain.scale.y=r,this.options.oneDHeatmapFlipped&&(this.pMain.scale.y=-r,this.pMain.position.y=this.position[1])}},{key:"leftTrackDraw",value:function(){this.draw()}},{key:"exportSVG",value:function(){let n=null,C=null;[C,n]=gc(eA(I.prototype),"superSVG",this).call(this);const r=document.createElement("g");n.appendChild(r),r.setAttribute("transform",`translate(${this.pMain.position.x},${this.pMain.position.y}) scale(${this.pMain.scale.x},${this.pMain.scale.y})`);for(const a of this.visibleAndFetchedTiles()){const s=document.createElement("g"),A=a.graphics,l=A.rotation*180/Math.PI,c=`translate(${A.position.x},${A.position.y}) rotate(${l}) scale(${A.scale.x},${A.scale.y}) translate(${-A.pivot.x},${-A.pivot.y})`;s.setAttribute("transform",c);const u=a.sprite.rotation*180/Math.PI,d=document.createElement("g");d.setAttribute("transform",`translate(${a.sprite.x},${a.sprite.y}) rotate(${u}) scale(${a.sprite.scale.x},${a.sprite.scale.y})`);const h=document.createElement("image");h.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a.canvas.toDataURL()),h.setAttribute("width",256),h.setAttribute("height",256),d.appendChild(h),s.appendChild(d),r.appendChild(s)}const o=this.exportColorBarSVG();return n.appendChild(o),[C,C]}}]),I}(fw);function KFt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Aae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function r2(e){return r2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},r2(e)}let sae=function(e){EFt(I,e);var g=MFt(I);function I(i,n){var C;return KFt(this,I),C=g.call(this,i,n),C.tilesetInfo={},C.errorTextText=`Unknown track type: ${n.type}`,C}return FFt(I,[{key:"zoomed",value:function(){this.draw()}}]),I}(mC);function OFt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function lae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function o2(e){return o2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},o2(e)}let tWe=function(e){QFt(I,e);var g=jFt(I);function I(i,n){var C;return OFt(this,I),C=g.call(this,i,n),C.axis=new Gk(eWe(C)),C.pBase.addChild(C.axis.pAxis),C}return _Ft(I,[{key:"initTile",value:function(n){this.scale.minRawValue=this.minVisibleValueInTiles(),this.scale.maxRawValue=this.minVisibleValueInTiles(),this.scale.minValue=this.scale.minRawValue,this.scale.maxValue=this.scale.maxRawValue,this.drawTile(n)}},{key:"drawTile",value:function(n){if(!n.graphics)return;const C=n.graphics,r=6,o=4;C.clear(),this.valueScale=Cu().domain([this.minValue()+.01,this.maxValue()]).range([this.dimensions[1]-r/2,r/2]);const a=Kt("black");C.lineStyle(1,a,.3),C.beginFill(a,.3),this.drawAxis(this.valueScale),n.tileData.forEach(s=>{const A=s.fields,l=+s.chrOffset,c=+A[1]+l,u=+A[2]+l,d=+A[3],h=this._xScale(c),m=this._xScale(u),f=Math.max(m-h,o),b=this.valueScale(d),p=(m+h)/2;C.drawRect(p-f/2,b-r/2,f,r)})}},{key:"minVisibleValueInTiles",value:function(){let n=this.visibleAndFetchedIds();return n.length===0&&(n=Object.keys(this.fetchedTiles)),Math.min.apply(null,n.map(r=>+Math.min(...this.fetchedTiles[r].tileData.filter(o=>!Number.isNaN(o.fields[3])).map(o=>+o.fields[3]))))}},{key:"maxVisibleValueInTiles",value:function(){let n=this.visibleAndFetchedIds();return n.length===0&&(n=Object.keys(this.fetchedTiles)),Math.max.apply(null,n.map(r=>+Math.max(...this.fetchedTiles[r].tileData.filter(o=>!Number.isNaN(o.fields[3])).map(o=>+o.fields[3]))))}}]),I}(ry);function eDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Yc(e){return Yc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Yc(e)}let gWe=function(e){nDt(I,e);var g=CDt(I);function I(i,n){var C;eDt(this,I),C=g.call(this,i,n);const{registerViewportChanged:r,removeViewportChanged:o,setDomainsCallback:a}=i,s=lg.nice();return C.uid=s,C.options=n,C.hasFromView=!i.projectionXDomain||!i.projectionYDomain,C.removeViewportChanged=o,C.setDomainsCallback=a,C.viewportXDomain=C.hasFromView?null:i.projectionXDomain,C.viewportYDomain=C.hasFromView?null:i.projectionYDomain,C.brush=NQ().on("brush",C.brushed.bind(oJ(C))),C.gBrush=C.gMain.append("g").attr("id",`brush-${C.uid}`).call(C.brush),C.gBrush.selectAll(".overlay").style("pointer-events","none"),C.gBrush.selectAll(".handle--n").style("pointer-events","none"),C.gBrush.selectAll(".handle--s").style("pointer-events","none"),C.gBrush.selectAll(".handle--w").style("pointer-events","none"),C.gBrush.selectAll(".handle--e").style("pointer-events","none"),r(s,C.viewportChanged.bind(oJ(C))),C.rerender(),C.draw(),C}return tDt(I,[{key:"brushed",value:function(n){const C=n.selection;if(!this._xScale||!this._yScale)return;const r=[this._xScale.invert(C[0][0]),this._xScale.invert(C[1][0])],o=[this._yScale.invert(C[0][1]),this._yScale.invert(C[1][1])];this.hasFromView||(this.viewportXDomain=r,this.viewportYDomain=o),this.setDomainsCallback(r,o)}},{key:"viewportChanged",value:function(n,C){const r=n.domain(),o=C.domain();this.viewportXDomain=r,this.viewportYDomain=o,this.draw()}},{key:"remove",value:function(){this.removeViewportChanged(this.uid),_p(Yc(I.prototype),"remove",this).call(this)}},{key:"rerender",value:function(){this.gBrush.selectAll(".selection").attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",this.options.projectionFillOpacity).attr("stroke-opacity",this.options.projectionStrokeOpacity).attr("stroke-width",this.options.strokeWidth)}},{key:"draw",value:function(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._xScale(this.viewportXDomain[0]),C=this._yScale(this.viewportYDomain[0]),r=this._xScale(this.viewportXDomain[1]),o=this._yScale(this.viewportYDomain[1]),a=[[n,C],[r,o]];this.brush.on("brush",null),this.gBrush.call(this.brush.move,a),this.brush.on("brush",this.brushed.bind(this))}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}},{key:"setPosition",value:function(n){_p(Yc(I.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){_p(Yc(I.prototype),"setDimensions",this).call(this,n);const C=this._xScale.range(),r=this._yScale.range(),o=C[1]-C[0],a=r[1]-r[0];this.brush.extent([[C[0]-o,r[0]-a],[C[1]+o,r[1]+a]]),this.gBrush.call(this.brush),this.draw()}}]),I}(mm);function aDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Kc(e){return Kc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Kc(e)}let IWe=function(e){uDt(I,e);var g=dDt(I);function I(i,n){var C;aDt(this,I),C=g.call(this,i,n);const{registerViewportChanged:r,removeViewportChanged:o,setDomainsCallback:a}=i,s=lg.nice();return C.uid=s,C.options=n,C.hasFromView=!i.projectionXDomain,C.removeViewportChanged=o,C.setDomainsCallback=a,C.viewportXDomain=C.hasFromView?null:i.projectionXDomain,C.viewportYDomain=C.hasFromView?null:[0,0],C.brush=WN().on("brush",C.brushed.bind(AJ(C))),C.gBrush=C.gMain.append("g").attr("id",`brush-${C.uid}`).call(C.brush),C.gBrush.selectAll(".overlay").style("pointer-events","none"),C.gBrush.selectAll(".handle--ne").style("pointer-events","none"),C.gBrush.selectAll(".handle--nw").style("pointer-events","none"),C.gBrush.selectAll(".handle--sw").style("pointer-events","none"),C.gBrush.selectAll(".handle--se").style("pointer-events","none"),C.gBrush.selectAll(".handle--n").style("pointer-events","none"),C.gBrush.selectAll(".handle--s").style("pointer-events","none"),r(s,C.viewportChanged.bind(AJ(C))),C.rerender(),C.draw(),C}return ADt(I,[{key:"brushed",value:function(n){const C=n.selection;if(!this._xScale||!this._yScale)return;const r=[this._xScale.invert(C[0]),this._xScale.invert(C[1])],o=this.viewportYDomain;this.hasFromView||(this.viewportXDomain=r),this.setDomainsCallback(r,o)}},{key:"viewportChanged",value:function(n,C,r=!0){const o=n.domain(),a=C.domain();this.viewportXDomain=o,this.viewportYDomain=a,this.draw()}},{key:"remove",value:function(){this.removeViewportChanged(this.uid),Lp(Kc(I.prototype),"remove",this).call(this)}},{key:"rerender",value:function(){this.gBrush.selectAll(".selection").attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",this.options.projectionFillOpacity).attr("stroke-opacity",this.options.projectionStrokeOpacity).attr("stroke-width",this.options.strokeWidth)}},{key:"draw",value:function(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._xScale(this.viewportXDomain[0]),C=this._xScale(this.viewportXDomain[1]),r=[n,C];this.brush.on("brush",null),this.gBrush.call(this.brush.move,r),this.brush.on("brush",this.brushed.bind(this))}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}},{key:"setPosition",value:function(n){Lp(Kc(I.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){Lp(Kc(I.prototype),"setDimensions",this).call(this,n);const C=this._xScale.range(),r=this._yScale.range(),o=C[1]-C[0];this.brush.extent([[C[0]-o,r[0]],[C[1]+o,r[1]]]),this.gBrush.call(this.brush),this.draw()}}]),I}(mm);function fDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function dae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Fc(e){return Fc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Fc(e)}let iWe=function(e){GDt(I,e);var g=vDt(I);function I(i,n){var C;fDt(this,I),C=g.call(this,i,n);const{registerViewportChanged:r,removeViewportChanged:o,setDomainsCallback:a}=i,s=lg.nice();return C.uid=s,C.options=n,C.hasFromView=!i.projectionYDomain,C.removeViewportChanged=o,C.setDomainsCallback=a,C.viewportXDomain=C.hasFromView?null:[0,0],C.viewportYDomain=C.hasFromView?null:i.projectionYDomain,C.brush=LS().on("brush",C.brushed.bind(lJ(C))),C.gBrush=C.gMain.append("g").attr("id",`brush-${C.uid}`).call(C.brush),C.gBrush.selectAll(".overlay").style("pointer-events","none"),C.gBrush.selectAll(".handle--ne").style("pointer-events","none"),C.gBrush.selectAll(".handle--nw").style("pointer-events","none"),C.gBrush.selectAll(".handle--sw").style("pointer-events","none"),C.gBrush.selectAll(".handle--se").style("pointer-events","none"),C.gBrush.selectAll(".handle--e").style("pointer-events","none"),C.gBrush.selectAll(".handle--w").style("pointer-events","none"),r(s,C.viewportChanged.bind(lJ(C))),C.rerender(),C.draw(),C}return pDt(I,[{key:"brushed",value:function(n){const C=n.selection;if(!this._xScale||!this._yScale)return;const r=this.viewportXDomain,o=[this._yScale.invert(C[0]),this._yScale.invert(C[1])];this.hasFromView||(this.viewportYDomain=o),this.setDomainsCallback(r,o)}},{key:"viewportChanged",value:function(n,C,r=!0){const o=n.domain(),a=C.domain();this.viewportXDomain=o,this.viewportYDomain=a,this.draw()}},{key:"remove",value:function(){this.removeViewportChanged(this.uid),Up(Fc(I.prototype),"remove",this).call(this)}},{key:"rerender",value:function(){this.gBrush.selectAll(".selection").attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",this.options.projectionFillOpacity).attr("stroke-opacity",this.options.projectionStrokeOpacity).attr("stroke-width",this.options.strokeWidth)}},{key:"draw",value:function(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._yScale(this.viewportYDomain[0]),C=this._yScale(this.viewportYDomain[1]),r=[n,C];this.brush.on("brush",null),this.gBrush.call(this.brush.move,r),this.brush.on("brush",this.brushed.bind(this))}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}},{key:"setPosition",value:function(n){Up(Fc(I.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){Up(Fc(I.prototype),"setDimensions",this).call(this,n);const C=this._xScale.range(),r=this._yScale.range(),o=r[1]-r[0];this.brush.extent([[C[0],r[0]-o],[C[1],r[1]+o]]),this.gBrush.call(this.brush),this.draw()}}]),I}(mm);function hae(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function mae(e,g){for(var I=0;Ie[uJ]||e,VDt=(e,g)=>{const I=g(e);return I.prototype[cJ]=nWe(g),I},WDt=(e,g)=>e.hasOwnProperty(cJ)&&e[cJ]===nWe(g),XDt=(e,g)=>{for(;e!==null;){if(WDt(e,g))return!0;e=Object.getPrototypeOf(e)}return!1},wj=(e,g)=>(Object.setPrototypeOf(g,e),e[uJ]||(e[uJ]=e),g),ex="__mixwith_cachedApplications",HDt=e=>wj(e,g=>{let I=g[ex];I||(g[ex]=new Map,I=g[ex]);let i=I.get(e);return i||(i=e(g),I.set(e,i)),i}),TDt=e=>wj(e,g=>XDt(g.prototype,e)?g:e(g)),NDt=e=>wj(e,g=>VDt(g,e)),Nk=e=>TDt(HDt(NDt(e)));let kDt=function(){function e(g){hae(this,e),this.superclass=g||function(){function I(){hae(this,I)}return fae(I)}()}return fae(e,[{key:"with",value:function(...I){return I.reduce((i,n)=>n(i),this.superclass)}}]),e}();const oy=e=>new kDt(e);function YDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function pae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Vh(e){return Vh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Vh(e)}const Rj=Nk(e=>function(g){EDt(i,g);var I=MDt(i);function i(n,C){var r;YDt(this,i),r=I.call(this,n,C);const{animate:o}=n;return r.highlighted=!1,r.animate=o,r.MOUSEOVER_RADIUS=4,r.pubSub=n.pubSub,r.pubSubs.push(r.pubSub.subscribe("app.mouseMove",r.mouseMoveHandler.bind(CWe(r)))),r}return KDt(i,[{key:"setPosition",value:function(C){vv(Vh(i.prototype),"setPosition",this).call(this,C),this.pMain.position.x=this.position[0],this.pMain.position.y=this.position[1]}},{key:"zoomed",value:function(C,r){vv(Vh(i.prototype),"zoomed",this).call(this,C,r),this.draw()}},{key:"respondsToPosition",value:function(){return this.highlighted}}]),i}(e));function Bv(){return typeof Reflect<"u"&&Reflect.get?Bv=Reflect.get.bind():Bv=function(g,I,i){var n=JDt(g,I);if(n){var C=Object.getOwnPropertyDescriptor(n,I);return C.get?C.get.call(arguments.length<3?g:i):C.value}},Bv.apply(this,arguments)}function JDt(e,g){for(;!Object.prototype.hasOwnProperty.call(e,g)&&(e=Wh(e),e!==null););return e}function rWe(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function bae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Wh(e){return Wh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Wh(e)}const jDt=Nk(e=>function(g){aWe(i,g);var I=AWe(i);function i(){return rWe(this,i),I.apply(this,arguments)}return oWe(i,[{key:"drawHorizontalRule",value:function(C){let r=Kt(this.options.color||"black");this.highlighted&&(r=Kt("red")),C.lineStyle(this.strokeWidth,r,this.strokeOpacity);let o=0;for(;o"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Xh(e){return Xh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Xh(e)}const hWe=Nk(e=>function(g){uWe(i,g);var I=dWe(i);function i(){return lWe(this,i),I.apply(this,arguments)}return cWe(i,[{key:"drawVerticalRule",value:function(C){let r=Kt(this.options.color||"black");this.highlighted&&(r=Kt("red")),C.lineStyle(this.strokeWidth,r,this.strokeOpacity);let o=0;for(;o"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Hh(e){return Hh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Hh(e)}let fWe=function(e){axt(I,e);var g=Axt(I);function I(i,n){var C;ixt(this,I),C=g.call(this,i,n);const{x:r,y:o}=i;return C.xPosition=r,C.yPosition=o,C.strokeWidth=2,C.strokeOpacity=1,C.dashLength=5,C.dashGap=3,C}return nxt(I,[{key:"draw",value:function(){const n=this.pMain;n.clear(),this.drawHorizontalRule(n),this.drawVerticalRule(n)}},{key:"mouseMoveHandler",value:function(n){this.highlighted=this.isWithin(n.x,n.y)&&(this.isMouseOverHorizontalLine(n)||this.isMouseOverVerticalLine(n)),this.draw()}},{key:"drawHorizontalRule",value:function(n){let C=Kt(this.options.color||"black");this.highlighted&&(C=Kt("red")),n.lineStyle(this.strokeWidth,C,this.strokeOpacity);let r=0;for(;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tA(e){return tA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},tA(e)}let bw=function(e){pxt(I,e);var g=bxt(I);function I(i,n){var C;uxt(this,I),C=g.call(this,i,n);const{animate:r}=i;return C.visibleTiles=new Set,C.visibleTileIds=new Set,C.fetching=new Set,C.fetchedTiles={},C.tileGraphics={},C.minX=typeof C.options.minPos<"u"&&!Number.isNaN(+C.options.minPos)?+C.options.minPos:-180,C.maxX=+C.options.maxPos||180,C.maxX=typeof C.options.maxPos<"u"&&!Number.isNaN(+C.options.maxPos)?+C.options.maxPos:180,C.minY=C.options.minY||C.minX,C.maxY=C.options.maxY||C.maxX,C.maxZoom=19,C.maxWidth=C.maxX-C.minX,C.animate=r,C.uuid=lg.nice(),C.refreshTilesDebounced=MQ(C.refreshTiles.bind(pWe(C)),yX),C}return dxt(I,[{key:"visibleAndFetchedIds",value:function(){return Object.keys(this.fetchedTiles).filter(n=>this.visibleTileIds.has(n))}},{key:"visibleAndFetchedTiles",value:function(){return this.visibleAndFetchedIds().map(n=>this.fetchedTiles[n])}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(C=>({tileId:this.tileToLocalId(C),remoteId:this.tileToRemoteId(C),mirrored:C.mirrored})),this.visibleTileIds=new Set(this.visibleTiles.map(C=>C.tileId))}},{key:"removeAllTiles",value:function(){const n=new Set(Object.keys(this.fetchedTiles));this.removeTiles([...n])}},{key:"refreshTiles",value:function(){this.calculateVisibleTiles();const n=new Set(Object.keys(this.fetchedTiles)),C=[...this.visibleTiles].filter(o=>!this.fetching.has(o.remoteId)&&!n.has(o.tileId));for(let o=0;o!this.visibleTileIds.has(o));this.removeTiles(r),this.fetchNewTiles(C)}},{key:"removeTiles",value:function(n){n.length&&this.areAllVisibleTilesLoaded()&&(n.forEach(C=>{const r=C;this.destroyTile(this.fetchedTiles[r]),r in this.tileGraphics&&(this.pMain.removeChild(this.tileGraphics[r]),delete this.tileGraphics[r]),delete this.fetchedTiles[r]}),this.synchronizeTilesAndGraphics(),this.draw())}},{key:"tileToLocalId",value:function(n){return n.join(".")}},{key:"tileToRemoteId",value:function(n){return n.join(".")}},{key:"localToRemoteId",value:function(n){const C=n.split(".");return C.slice(0,C.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.minX,this.maxX),C=vt.calculateZoomLevel(this._xScale,this.minY,this.maxY);let r=Math.min(Math.max(n,C),this.maxZoom);return this.options.maxZoom&&(this.options.maxZoom>=0?r=Math.min(this.options.maxZoom,r):console.error("Invalid maxZoom on track:",this)),r}},{key:"calculateVisibleTiles",value:function(){this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.minX,this.maxX,this.maxZoom,this.maxWidth),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.minY,this.maxY,this.maxZoom,this.maxWidth);const n=this.xTiles,C=this.yTiles,r=this.zoomLevel,o=[];for(let a=0;a0){const C=[...new Set(n.map(r=>r.remoteId))];for(const r of C){const o=r.split("."),a=this.getTileUrl(o),s=new Image;s.crossOrigin="Anonymous",s.src=a,s.onload=()=>{const A={};A[r]={tileId:r,img:s,zoomLevel:+o[0],tilePos:[+o[1],+o[2]],tileSrc:a},this.receivedTiles(A)}}}}},{key:"receivedTiles",value:function(n){for(let C=0;C"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function r0(e){return r0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},r0(e)}let bWe=function(e){Rxt(I,e);var g=Vxt(I);function I(){return Gxt(this,I),g.apply(this,arguments)}return vxt(I,[{key:"initTile",value:function(n){QVe.bind(this)(n),this.drawTile(n)}},{key:"drawTile",value:function(n){UVe.bind(this)(n)}},{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"fetchNewTiles",value:function(n){n.forEach(C=>{const o=C.remoteId.split("."),a={zoomLevel:o[0],tilePos:o.slice(1,o.length).map(s=>+s)};this.fetchedTiles[C.tileId]=C,this.fetchedTiles[C.tileId].tileData=a,this.fetching.has(C.remoteId)&&this.fetching.delete(C.remoteId)}),this.synchronizeTilesAndGraphics(),this.draw(),this.animate()}},{key:"draw",value:function(){vW(r0(I.prototype),"draw",this).call(this)}}]),I}(bw);function Txt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Bae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function o0(e){return o0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},o0(e)}let yWe=function(e){Fxt(I,e);var g=Dxt(I);function I(i,n){var C;return Txt(this,I),C=g.call(this,i,n),C.style=n.style,C.options.accessToken||(C.errorTextText="No access token provided in the viewconf's track options ('accessToken' option).",C.drawError()),C}return Nxt(I,[{key:"rerender",value:function(n){BW(o0(I.prototype),"rerender",this).call(this,n),n.style!==this.style&&(this.style=n.style,this.removeAllTiles(),this.refreshTiles())}},{key:"getTileUrl",value:function(n){const C=this.options&&this.options.style?this.options.style:"streets-v10",r=this.options&&+this.options.tileSize?+this.options.tileSize:256;return`https://api.mapbox.com/styles/v1/mapbox/${C}/tiles/${r}/${n[0]}/${n[1]}/${n[2]}?access_token=${this.options.accessToken}`}}]),I}(bw);function zxt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Sae(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function a2(e){return a2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},a2(e)}let ZWe=function(e){_xt(I,e);var g=Lxt(I);function I(i,n){var C;return zxt(this,I),C=g.call(this,i,n),C.style=n.style,C.options.tileSource||(C.errorTextText="No tile source string provided in the options. It should be in the form of http://a.com/{z}/{x}/{y}",C.drawError()),C}return Pxt(I,[{key:"getTileUrl",value:function(n){let C=this.options.tileSource.replace("{z}",n[0]);return C=C.replace("{x}",n[1]),C=C.replace("{y}",n[2]),C}}]),I}(bw);const $xt=(e,g,I,i=j2)=>{const n=I[e.type];return n?new n.dataFetcher(i,e,g):e.type==="genbank"?new _Ve(e,g):e.type==="local-tiles"?new LVe(e,g):new Bk(e,g)};var zt=1e-6,gS=1e-12,ag=Math.PI,QI=ag/2,A2=ag/4,AC=ag*2,tI=180/ag,Ot=ag/180,Rg=Math.abs,ay=Math.atan,sC=Math.atan2,Tt=Math.cos,xV=Math.ceil,GWe=Math.exp,GJ=Math.hypot,s2=Math.log,tx=Math.pow,Bt=Math.sin,Qr=Math.sign||function(e){return e>0?1:e<0?-1:0},ji=Math.sqrt,Vj=Math.tan;function vWe(e){return e>1?0:e<-1?ag:Math.acos(e)}function lC(e){return e>1?QI:e<-1?-QI:Math.asin(e)}function wae(e){return(e=Bt(e/2))*e}function xI(){}function l2(e,g){e&&Vae.hasOwnProperty(e.type)&&Vae[e.type](e,g)}var Rae={Feature:function(e,g){l2(e.geometry,g)},FeatureCollection:function(e,g){for(var I=e.features,i=-1,n=I.length;++i=0?1:-1,n=i*I,C=Tt(g),r=Bt(g),o=wJ*r,a=SJ*C+o*Tt(n),s=o*i*Bt(n);c2.add(sC(s,a)),BJ=e,SJ=C,wJ=r}function gEt(e){return u2=new Yi,Uo(e,SA),u2*2}function d2(e){return[sC(e[1],e[0]),lC(e[2])]}function Th(e){var g=e[0],I=e[1],i=Tt(I);return[i*Tt(g),i*Bt(g),Bt(I)]}function EV(e,g){return e[0]*g[0]+e[1]*g[1]+e[2]*g[2]}function a0(e,g){return[e[1]*g[2]-e[2]*g[1],e[2]*g[0]-e[0]*g[2],e[0]*g[1]-e[1]*g[0]]}function gx(e,g){e[0]+=g[0],e[1]+=g[1],e[2]+=g[2]}function MV(e,g){return[e[0]*g,e[1]*g,e[2]*g]}function h2(e){var g=ji(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);e[0]/=g,e[1]/=g,e[2]/=g}var YI,HC,LI,ir,$u,RWe,VWe,Qp,Rv,Ol,Os,rs={point:RJ,lineStart:Xae,lineEnd:Hae,polygonStart:function(){rs.point=XWe,rs.lineStart=IEt,rs.lineEnd=iEt,Rv=new Yi,SA.polygonStart()},polygonEnd:function(){SA.polygonEnd(),rs.point=RJ,rs.lineStart=Xae,rs.lineEnd=Hae,c2<0?(YI=-(LI=180),HC=-(ir=90)):Rv>zt?ir=90:Rv<-zt&&(HC=-90),Os[0]=YI,Os[1]=LI},sphere:function(){YI=-(LI=180),HC=-(ir=90)}};function RJ(e,g){Ol.push(Os=[YI=e,LI=e]),gir&&(ir=g)}function WWe(e,g){var I=Th([e*Ot,g*Ot]);if(Qp){var i=a0(Qp,I),n=[i[1],-i[0],0],C=a0(n,i);h2(C),C=d2(C);var r=e-$u,o=r>0?1:-1,a=C[0]*tI*o,s,A=Rg(r)>180;A^(o*$uir&&(ir=s)):(a=(a+360)%360-180,A^(o*$uir&&(ir=g))),A?e<$u?er(YI,e)>er(YI,LI)&&(LI=e):er(e,LI)>er(YI,LI)&&(YI=e):LI>=YI?(eLI&&(LI=e)):e>$u?er(YI,e)>er(YI,LI)&&(LI=e):er(e,LI)>er(YI,LI)&&(YI=e)}else Ol.push(Os=[YI=e,LI=e]);gir&&(ir=g),Qp=I,$u=e}function Xae(){rs.point=WWe}function Hae(){Os[0]=YI,Os[1]=LI,rs.point=RJ,Qp=null}function XWe(e,g){if(Qp){var I=e-$u;Rv.add(Rg(I)>180?I+(I>0?360:-360):I)}else RWe=e,VWe=g;SA.point(e,g),WWe(e,g)}function IEt(){SA.lineStart()}function iEt(){XWe(RWe,VWe),SA.lineEnd(),Rg(Rv)>zt&&(YI=-(LI=180)),Os[0]=YI,Os[1]=LI,Qp=null}function er(e,g){return(g-=e)<0?g+360:g}function nEt(e,g){return e[0]-g[0]}function Tae(e,g){return e[0]<=e[1]?e[0]<=g&&g<=e[1]:ger(i[0],i[1])&&(i[1]=n[1]),er(n[0],i[1])>er(i[0],i[1])&&(i[0]=n[0])):C.push(i=n);for(r=-1/0,I=C.length-1,g=0,i=C[I];g<=I;i=n,++g)n=C[g],(o=er(i[1],n[0]))>r&&(r=o,YI=n[0],LI=i[1])}return Ol=Os=null,YI===1/0||HC===1/0?[[NaN,NaN],[NaN,NaN]]:[[YI,HC],[LI,ir]]}var rG,m2,f2,p2,b2,y2,Z2,G2,VJ,WJ,XJ,HWe,TWe,eC,tC,gC,qo={sphere:xI,point:Wj,lineStart:Nae,lineEnd:kae,polygonStart:function(){qo.lineStart=aEt,qo.lineEnd=AEt},polygonEnd:function(){qo.lineStart=Nae,qo.lineEnd=kae}};function Wj(e,g){e*=Ot,g*=Ot;var I=Tt(g);yw(I*Tt(e),I*Bt(e),Bt(g))}function yw(e,g,I){++rG,f2+=(e-f2)/rG,p2+=(g-p2)/rG,b2+=(I-b2)/rG}function Nae(){qo.point=rEt}function rEt(e,g){e*=Ot,g*=Ot;var I=Tt(g);eC=I*Tt(e),tC=I*Bt(e),gC=Bt(g),qo.point=oEt,yw(eC,tC,gC)}function oEt(e,g){e*=Ot,g*=Ot;var I=Tt(g),i=I*Tt(e),n=I*Bt(e),C=Bt(g),r=sC(ji((r=tC*C-gC*n)*r+(r=gC*i-eC*C)*r+(r=eC*n-tC*i)*r),eC*i+tC*n+gC*C);m2+=r,y2+=r*(eC+(eC=i)),Z2+=r*(tC+(tC=n)),G2+=r*(gC+(gC=C)),yw(eC,tC,gC)}function kae(){qo.point=Wj}function aEt(){qo.point=sEt}function AEt(){NWe(HWe,TWe),qo.point=Wj}function sEt(e,g){HWe=e,TWe=g,e*=Ot,g*=Ot,qo.point=NWe;var I=Tt(g);eC=I*Tt(e),tC=I*Bt(e),gC=Bt(g),yw(eC,tC,gC)}function NWe(e,g){e*=Ot,g*=Ot;var I=Tt(g),i=I*Tt(e),n=I*Bt(e),C=Bt(g),r=tC*C-gC*n,o=gC*i-eC*C,a=eC*n-tC*i,s=GJ(r,o,a),A=lC(s),l=s&&-A/s;VJ.add(l*r),WJ.add(l*o),XJ.add(l*a),m2+=A,y2+=A*(eC+(eC=i)),Z2+=A*(tC+(tC=n)),G2+=A*(gC+(gC=C)),yw(eC,tC,gC)}function lEt(e){rG=m2=f2=p2=b2=y2=Z2=G2=0,VJ=new Yi,WJ=new Yi,XJ=new Yi,Uo(e,qo);var g=+VJ,I=+WJ,i=+XJ,n=GJ(g,I,i);return nag?e+Math.round(-e/AC)*AC:e,g]}TJ.invert=TJ;function Xj(e,g,I){return(e%=AC)?g||I?HJ(Kae(e),Fae(g,I)):Kae(e):g||I?Fae(g,I):TJ}function Yae(e){return function(g,I){return g+=e,[g>ag?g-AC:g<-ag?g+AC:g,I]}}function Kae(e){var g=Yae(e);return g.invert=Yae(-e),g}function Fae(e,g){var I=Tt(e),i=Bt(e),n=Tt(g),C=Bt(g);function r(o,a){var s=Tt(a),A=Tt(o)*s,l=Bt(o)*s,c=Bt(a),u=c*I+A*i;return[sC(l*n-u*C,A*I-c*i),lC(u*n+l*C)]}return r.invert=function(o,a){var s=Tt(a),A=Tt(o)*s,l=Bt(o)*s,c=Bt(a),u=c*n-l*C;return[sC(l*n+c*C,A*I+u*i),lC(u*I-A*i)]},r}function kWe(e){e=Xj(e[0]*Ot,e[1]*Ot,e.length>2?e[2]*Ot:0);function g(I){return I=e(I[0]*Ot,I[1]*Ot),I[0]*=tI,I[1]*=tI,I}return g.invert=function(I){return I=e.invert(I[0]*Ot,I[1]*Ot),I[0]*=tI,I[1]*=tI,I},g}function YWe(e,g,I,i,n,C){if(I){var r=Tt(g),o=Bt(g),a=i*I;n==null?(n=g+i*AC,C=g-a/2):(n=Dae(r,n),C=Dae(r,C),(i>0?nC)&&(n+=i*AC));for(var s,A=n;i>0?A>C:A1&&e.push(e.pop().concat(e.shift()))},result:function(){var I=e;return e=[],g=null,I}}}function SW(e,g){return Rg(e[0]-g[0])=0;--o)n.point((l=A[o])[0],l[1]);else i(c.x,c.p.x,-1,n);c=c.p}c=c.o,A=c.z,u=!u}while(!c.v);n.lineEnd()}}}function xae(e){if(g=e.length){for(var g,I=0,i=e[0],n;++I=0?1:-1,R=w*v,S=R>ag,X=m*B;if(a.add(sC(X*w*Bt(R),f*G+X*Tt(R))),r+=S?v+w*AC:v,S^d>=I^y>=I){var W=a0(Th(u),Th(p));h2(W);var V=a0(C,W);h2(V);var H=(S^v>=0?-1:1)*lC(V[2]);(i>H||i===H&&(W[0]||W[1]))&&(o+=S^v>=0?1:-1)}}return(r<-zt||r0){for(a||(n.polygonStart(),a=!0),n.lineStart(),B=0;B1&&y&2&&Z.push(Z.pop().concat(Z.shift())),A.push(Z.filter(uEt))}}return c}}function uEt(e){return e.length>1}function dEt(e,g){return((e=e.x)[0]<0?e[1]-QI-zt:QI-e[1])-((g=g.x)[0]<0?g[1]-QI-zt:QI-g[1])}const NJ=xWe(function(){return!0},hEt,fEt,[-ag,-QI]);function hEt(e){var g=NaN,I=NaN,i=NaN,n;return{lineStart:function(){e.lineStart(),n=1},point:function(C,r){var o=C>0?ag:-ag,a=Rg(C-g);Rg(a-ag)0?QI:-QI),e.point(i,I),e.lineEnd(),e.lineStart(),e.point(o,I),e.point(C,I),n=0):i!==o&&a>=ag&&(Rg(g-i)zt?ay((Bt(g)*(C=Tt(i))*Bt(I)-Bt(i)*(n=Tt(g))*Bt(e))/(n*C*r)):(g+i)/2}function fEt(e,g,I,i){var n;if(e==null)n=I*QI,i.point(-ag,n),i.point(0,n),i.point(ag,n),i.point(ag,0),i.point(ag,-n),i.point(0,-n),i.point(-ag,-n),i.point(-ag,0),i.point(-ag,n);else if(Rg(e[0]-g[0])>zt){var C=e[0]0,n=Rg(g)>zt;function C(A,l,c,u){YWe(u,e,I,c,A,l)}function r(A,l){return Tt(A)*Tt(l)>g}function o(A){var l,c,u,d,h;return{lineStart:function(){d=u=!1,h=1},point:function(m,f){var b=[m,f],p,y=r(m,f),Z=i?y?0:s(m,f):y?s(m+(m<0?ag:-ag),f):0;if(!l&&(d=u=y)&&A.lineStart(),y!==u&&(p=a(l,b),(!p||SW(l,p)||SW(b,p))&&(b[2]=1)),y!==u)h=0,y?(A.lineStart(),p=a(b,l),A.point(p[0],p[1])):(p=a(l,b),A.point(p[0],p[1],2),A.lineEnd()),l=p;else if(n&&l&&i^y){var B;!(Z&c)&&(B=a(b,l,!0))&&(h=0,i?(A.lineStart(),A.point(B[0][0],B[0][1]),A.point(B[1][0],B[1][1]),A.lineEnd()):(A.point(B[1][0],B[1][1]),A.lineEnd(),A.lineStart(),A.point(B[0][0],B[0][1],3)))}y&&(!l||!SW(l,b))&&A.point(b[0],b[1]),l=b,u=y,c=Z},lineEnd:function(){u&&A.lineEnd(),l=null},clean:function(){return h|(d&&u)<<1}}}function a(A,l,c){var u=Th(A),d=Th(l),h=[1,0,0],m=a0(u,d),f=EV(m,m),b=m[0],p=f-b*b;if(!p)return!c&&A;var y=g*f/p,Z=-g*b/p,B=a0(h,m),G=MV(h,y),v=MV(m,Z);gx(G,v);var w=B,R=EV(G,w),S=EV(w,w),X=R*R-S*(EV(G,G)-1);if(!(X<0)){var W=ji(X),V=MV(w,(-R-W)/S);if(gx(V,G),V=d2(V),!c)return V;var H=A[0],Y=l[0],K=A[1],x=l[1],J;Y0^V[1]<(Rg(V[0]-H)ag^(H<=V[0]&&V[0]<=Y)){var $=MV(w,(-R+W)/S);return gx($,G),[V,d2($)]}}}function s(A,l){var c=i?e:ag-e,u=0;return A<-c?u|=1:A>c&&(u|=2),l<-c?u|=4:l>c&&(u|=8),u}return xWe(r,o,C,i?[0,-e]:[-ag,e-ag])}function pEt(e,g,I,i,n,C){var r=e[0],o=e[1],a=g[0],s=g[1],A=0,l=1,c=a-r,u=s-o,d;if(d=I-r,!(!c&&d>0)){if(d/=c,c<0){if(d0){if(d>l)return;d>A&&(A=d)}if(d=n-r,!(!c&&d<0)){if(d/=c,c<0){if(d>l)return;d>A&&(A=d)}else if(c>0){if(d0)){if(d/=u,u<0){if(d0){if(d>l)return;d>A&&(A=d)}if(d=C-o,!(!u&&d<0)){if(d/=u,u<0){if(d>l)return;d>A&&(A=d)}else if(u>0){if(d0&&(e[0]=r+A*c,e[1]=o+A*u),l<1&&(g[0]=r+l*c,g[1]=o+l*u),!0}}}}}var oG=1e9,PV=-oG;function kk(e,g,I,i){function n(s,A){return e<=s&&s<=I&&g<=A&&A<=i}function C(s,A,l,c){var u=0,d=0;if(s==null||(u=r(s,l))!==(d=r(A,l))||a(s,A)<0^l>0)do c.point(u===0||u===3?e:I,u>1?i:g);while((u=(u+l+4)%4)!==d);else c.point(A[0],A[1])}function r(s,A){return Rg(s[0]-e)0?0:3:Rg(s[0]-I)0?2:1:Rg(s[1]-g)0?1:0:A>0?3:2}function o(s,A){return a(s.x,A.x)}function a(s,A){var l=r(s,1),c=r(A,1);return l!==c?l-c:l===0?A[1]-s[1]:l===1?s[0]-A[0]:l===2?s[1]-A[1]:A[0]-s[0]}return function(s){var A=s,l=KWe(),c,u,d,h,m,f,b,p,y,Z,B,G={point:v,lineStart:X,lineEnd:W,polygonStart:R,polygonEnd:S};function v(H,Y){n(H,Y)&&A.point(H,Y)}function w(){for(var H=0,Y=0,K=u.length;Yi&&(j-q)*(i-$)>(te-$)*(e-q)&&++H:te<=i&&(j-q)*(i-$)<(te-$)*(e-q)&&--H;return H}function R(){A=l,c=[],u=[],B=!0}function S(){var H=w(),Y=B&&H,K=(c=M7(c)).length;(Y||K)&&(s.polygonStart(),Y&&(s.lineStart(),C(null,null,1,s),s.lineEnd()),K&&FWe(c,o,H,C,s),s.polygonEnd()),A=s,c=u=d=null}function X(){G.point=V,u&&u.push(d=[]),Z=!0,y=!1,b=p=NaN}function W(){c&&(V(h,m),f&&y&&l.rejoin(),c.push(l.result())),G.point=v,y&&A.lineEnd()}function V(H,Y){var K=n(H,Y);if(u&&d.push([H,Y]),Z)h=H,m=Y,f=K,Z=!1,K&&(A.lineStart(),A.point(H,Y));else if(K&&y)A.point(H,Y);else{var x=[b=Math.max(PV,Math.min(oG,b)),p=Math.max(PV,Math.min(oG,p))],J=[H=Math.max(PV,Math.min(oG,H)),Y=Math.max(PV,Math.min(oG,Y))];pEt(x,J,e,g,I,i)?(y||(A.lineStart(),A.point(x[0],x[1])),A.point(J[0],J[1]),K||A.lineEnd(),B=!1):K&&(A.lineStart(),A.point(H,Y),B=!1)}b=H,p=Y,y=K}return G}}function bEt(){var e=0,g=0,I=960,i=500,n,C,r;return r={stream:function(o){return n&&C===o?n:n=kk(e,g,I,i)(C=o)},extent:function(o){return arguments.length?(e=+o[0][0],g=+o[0][1],I=+o[1][0],i=+o[1][1],n=C=null,r):[[e,g],[I,i]]}}}var kJ,YJ,wW,RW,A0={sphere:xI,point:xI,lineStart:yEt,lineEnd:xI,polygonStart:xI,polygonEnd:xI};function yEt(){A0.point=GEt,A0.lineEnd=ZEt}function ZEt(){A0.point=A0.lineEnd=xI}function GEt(e,g){e*=Ot,g*=Ot,YJ=e,wW=Bt(g),RW=Tt(g),A0.point=vEt}function vEt(e,g){e*=Ot,g*=Ot;var I=Bt(g),i=Tt(g),n=Rg(e-YJ),C=Tt(n),r=Bt(n),o=i*r,a=RW*I-wW*i*C,s=wW*I+RW*i*C;kJ.add(sC(ji(o*o+a*a),s)),YJ=e,wW=I,RW=i}function MWe(e){return kJ=new Yi,Uo(e,A0),+kJ}var KJ=[null,null],BEt={type:"LineString",coordinates:KJ};function v2(e,g){return KJ[0]=e,KJ[1]=g,MWe(BEt)}var Eae={Feature:function(e,g){return B2(e.geometry,g)},FeatureCollection:function(e,g){for(var I=e.features,i=-1,n=I.length;++i0&&(n=v2(e[C],e[C-1]),n>0&&I<=n&&i<=n&&(I+i-n)*(1-Math.pow((I-i)/n,2))zt}).map(c)).concat(nC(xV(C/s)*s,n,s).filter(function(p){return Rg(p%l)>zt}).map(u))}return f.lines=function(){return b().map(function(p){return{type:"LineString",coordinates:p}})},f.outline=function(){return{type:"Polygon",coordinates:[d(i).concat(h(r).slice(1),d(I).reverse().slice(1),h(o).reverse().slice(1))]}},f.extent=function(p){return arguments.length?f.extentMajor(p).extentMinor(p):f.extentMinor()},f.extentMajor=function(p){return arguments.length?(i=+p[0][0],I=+p[1][0],o=+p[0][1],r=+p[1][1],i>I&&(p=i,i=I,I=p),o>r&&(p=o,o=r,r=p),f.precision(m)):[[i,o],[I,r]]},f.extentMinor=function(p){return arguments.length?(g=+p[0][0],e=+p[1][0],C=+p[0][1],n=+p[1][1],g>e&&(p=g,g=e,e=p),C>n&&(p=C,C=n,n=p),f.precision(m)):[[g,C],[e,n]]},f.step=function(p){return arguments.length?f.stepMajor(p).stepMinor(p):f.stepMinor()},f.stepMajor=function(p){return arguments.length?(A=+p[0],l=+p[1],f):[A,l]},f.stepMinor=function(p){return arguments.length?(a=+p[0],s=+p[1],f):[a,s]},f.precision=function(p){return arguments.length?(m=+p,c=Oae(C,n,90),u=_ae(g,e,m),d=Oae(o,r,90),h=_ae(i,I,m),f):m},f.extentMajor([[-180,-90+zt],[180,90-zt]]).extentMinor([[-180,-80-zt],[180,80+zt]])}function REt(){return PWe()()}function VEt(e,g){var I=e[0]*Ot,i=e[1]*Ot,n=g[0]*Ot,C=g[1]*Ot,r=Tt(i),o=Bt(i),a=Tt(C),s=Bt(C),A=r*Tt(I),l=r*Bt(I),c=a*Tt(n),u=a*Bt(n),d=2*lC(ji(wae(C-i)+r*a*wae(n-I))),h=Bt(d),m=d?function(f){var b=Bt(f*=d)/h,p=Bt(d-f)/h,y=p*A+b*c,Z=p*l+b*u,B=p*o+b*s;return[sC(Z,y)*tI,sC(B,ji(y*y+Z*Z))*tI]}:function(){return[I*tI,i*tI]};return m.distance=d,m}const IS=e=>e;var ix=new Yi,FJ=new Yi,JWe,OWe,DJ,xJ,ic={point:xI,lineStart:xI,lineEnd:xI,polygonStart:function(){ic.lineStart=WEt,ic.lineEnd=HEt},polygonEnd:function(){ic.lineStart=ic.lineEnd=ic.point=xI,ix.add(Rg(FJ)),FJ=new Yi},result:function(){var e=ix/2;return ix=new Yi,e}};function WEt(){ic.point=XEt}function XEt(e,g){ic.point=_We,JWe=DJ=e,OWe=xJ=g}function _We(e,g){FJ.add(xJ*e-DJ*g),DJ=e,xJ=g}function HEt(){_We(JWe,OWe)}const Lae=ic;var s0=1/0,S2=s0,iS=-s0,w2=iS,TEt={point:NEt,lineStart:xI,lineEnd:xI,polygonStart:xI,polygonEnd:xI,result:function(){var e=[[s0,S2],[iS,w2]];return iS=w2=-(S2=s0=1/0),e}};function NEt(e,g){eiS&&(iS=e),gw2&&(w2=g)}const R2=TEt;var EJ=0,MJ=0,aG=0,V2=0,W2=0,sp=0,zJ=0,PJ=0,AG=0,LWe,UWe,gA,IA,Qo={point:Nh,lineStart:Uae,lineEnd:Qae,polygonStart:function(){Qo.lineStart=KEt,Qo.lineEnd=FEt},polygonEnd:function(){Qo.point=Nh,Qo.lineStart=Uae,Qo.lineEnd=Qae},result:function(){var e=AG?[zJ/AG,PJ/AG]:sp?[V2/sp,W2/sp]:aG?[EJ/aG,MJ/aG]:[NaN,NaN];return EJ=MJ=aG=V2=W2=sp=zJ=PJ=AG=0,e}};function Nh(e,g){EJ+=e,MJ+=g,++aG}function Uae(){Qo.point=kEt}function kEt(e,g){Qo.point=YEt,Nh(gA=e,IA=g)}function YEt(e,g){var I=e-gA,i=g-IA,n=ji(I*I+i*i);V2+=n*(gA+e)/2,W2+=n*(IA+g)/2,sp+=n,Nh(gA=e,IA=g)}function Qae(){Qo.point=Nh}function KEt(){Qo.point=DEt}function FEt(){QWe(LWe,UWe)}function DEt(e,g){Qo.point=QWe,Nh(LWe=gA=e,UWe=IA=g)}function QWe(e,g){var I=e-gA,i=g-IA,n=ji(I*I+i*i);V2+=n*(gA+e)/2,W2+=n*(IA+g)/2,sp+=n,n=IA*e-gA*g,zJ+=n*(gA+e),PJ+=n*(IA+g),AG+=n*3,Nh(gA=e,IA=g)}const jae=Qo;function jWe(e){this._context=e}jWe.prototype={_radius:4.5,pointRadius:function(e){return this._radius=e,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._context.closePath(),this._point=NaN},point:function(e,g){switch(this._point){case 0:{this._context.moveTo(e,g),this._point=1;break}case 1:{this._context.lineTo(e,g);break}default:{this._context.moveTo(e+this._radius,g),this._context.arc(e,g,this._radius,0,AC);break}}},result:xI};var JJ=new Yi,nx,$We,qWe,sG,lG,X2={point:xI,lineStart:function(){X2.point=xEt},lineEnd:function(){nx&&e9e($We,qWe),X2.point=xI},polygonStart:function(){nx=!0},polygonEnd:function(){nx=null},result:function(){var e=+JJ;return JJ=new Yi,e}};function xEt(e,g){X2.point=e9e,$We=sG=e,qWe=lG=g}function e9e(e,g){sG-=e,lG-=g,JJ.add(ji(sG*sG+lG*lG)),sG=e,lG=g}const $ae=X2;function t9e(){this._string=[]}t9e.prototype={_radius:4.5,_circle:qae(4.5),pointRadius:function(e){return(e=+e)!==this._radius&&(this._radius=e,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._string.push("Z"),this._point=NaN},point:function(e,g){switch(this._point){case 0:{this._string.push("M",e,",",g),this._point=1;break}case 1:{this._string.push("L",e,",",g);break}default:{this._circle==null&&(this._circle=qae(this._radius)),this._string.push("M",e,",",g,this._circle);break}}},result:function(){if(this._string.length){var e=this._string.join("");return this._string=[],e}else return null}};function qae(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+-2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}function EEt(e,g){var I=4.5,i,n;function C(r){return r&&(typeof I=="function"&&n.pointRadius(+I.apply(this,arguments)),Uo(r,i(n))),n.result()}return C.area=function(r){return Uo(r,i(Lae)),Lae.result()},C.measure=function(r){return Uo(r,i($ae)),$ae.result()},C.bounds=function(r){return Uo(r,i(R2)),R2.result()},C.centroid=function(r){return Uo(r,i(jae)),jae.result()},C.projection=function(r){return arguments.length?(i=r==null?(e=null,IS):(e=r).stream,C):e},C.context=function(r){return arguments.length?(n=r==null?(g=null,new t9e):new jWe(g=r),typeof I!="function"&&n.pointRadius(I),C):g},C.pointRadius=function(r){return arguments.length?(I=typeof r=="function"?r:(n.pointRadius(+r),+r),C):I},C.projection(e).context(g)}function MEt(e){return{stream:Zw(e)}}function Zw(e){return function(g){var I=new OJ;for(var i in e)I[i]=e[i];return I.stream=g,I}}function OJ(){}OJ.prototype={constructor:OJ,point:function(e,g){this.stream.point(e,g)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};function Hj(e,g,I){var i=e.clipExtent&&e.clipExtent();return e.scale(150).translate([0,0]),i!=null&&e.clipExtent(null),Uo(I,e.stream(R2)),g(R2.result()),i!=null&&e.clipExtent(i),e}function Yk(e,g,I){return Hj(e,function(i){var n=g[1][0]-g[0][0],C=g[1][1]-g[0][1],r=Math.min(n/(i[1][0]-i[0][0]),C/(i[1][1]-i[0][1])),o=+g[0][0]+(n-r*(i[1][0]+i[0][0]))/2,a=+g[0][1]+(C-r*(i[1][1]+i[0][1]))/2;e.scale(150*r).translate([o,a])},I)}function Tj(e,g,I){return Yk(e,[[0,0],g],I)}function Nj(e,g,I){return Hj(e,function(i){var n=+g,C=n/(i[1][0]-i[0][0]),r=(n-C*(i[1][0]+i[0][0]))/2,o=-C*i[0][1];e.scale(150*C).translate([r,o])},I)}function kj(e,g,I){return Hj(e,function(i){var n=+g,C=n/(i[1][1]-i[0][1]),r=-C*i[0][0],o=(n-C*(i[1][1]+i[0][1]))/2;e.scale(150*C).translate([r,o])},I)}var eAe=16,zEt=Tt(30*Ot);function tAe(e,g){return+g?JEt(e,g):PEt(e)}function PEt(e){return Zw({point:function(g,I){g=e(g,I),this.stream.point(g[0],g[1])}})}function JEt(e,g){function I(i,n,C,r,o,a,s,A,l,c,u,d,h,m){var f=s-i,b=A-n,p=f*f+b*b;if(p>4*g&&h--){var y=r+c,Z=o+u,B=a+d,G=ji(y*y+Z*Z+B*B),v=lC(B/=G),w=Rg(Rg(B)-1)g||Rg((f*W+b*V)/p-.5)>.3||r*c+o*u+a*d2?H[2]%360*Ot:0,W()):[o*tI,a*tI,s*tI]},S.angle=function(H){return arguments.length?(l=H%360*Ot,W()):l*tI},S.reflectX=function(H){return arguments.length?(c=H?-1:1,W()):c<0},S.reflectY=function(H){return arguments.length?(u=H?-1:1,W()):u<0},S.precision=function(H){return arguments.length?(B=tAe(G,Z=H*H),V()):ji(Z)},S.fitExtent=function(H,Y){return Yk(S,H,Y)},S.fitSize=function(H,Y){return Tj(S,H,Y)},S.fitWidth=function(H,Y){return Nj(S,H,Y)},S.fitHeight=function(H,Y){return kj(S,H,Y)};function W(){var H=gAe(I,0,0,c,u,l).apply(null,g(C,r)),Y=gAe(I,i-H[0],n-H[1],c,u,l);return A=Xj(o,a,s),G=HJ(g,Y),v=HJ(A,G),B=tAe(G,Z),V()}function V(){return w=R=null,S}return function(){return g=e.apply(this,arguments),S.invert=g.invert&&X,W()}}function Kj(e){var g=0,I=ag/3,i=Yj(e),n=i(g,I);return n.parallels=function(C){return arguments.length?i(g=C[0]*Ot,I=C[1]*Ot):[g*tI,I*tI]},n}function UEt(e){var g=Tt(e);function I(i,n){return[i*g,Bt(n)/g]}return I.invert=function(i,n){return[i/g,lC(n*g)]},I}function g9e(e,g){var I=Bt(e),i=(I+Bt(g))/2;if(Rg(i)=.12&&m<.234&&h>=-.425&&h<-.214?n:m>=.166&&m<.234&&h>=-.214&&h<-.115?r:I).invert(c)},A.stream=function(c){return e&&g===c?e:e=QEt([I.stream(g=c),n.stream(c),r.stream(c)])},A.precision=function(c){return arguments.length?(I.precision(c),n.precision(c),r.precision(c),l()):I.precision()},A.scale=function(c){return arguments.length?(I.scale(c),n.scale(c*.35),r.scale(c),A.translate(I.translate())):I.scale()},A.translate=function(c){if(!arguments.length)return I.translate();var u=I.scale(),d=+c[0],h=+c[1];return i=I.translate(c).clipExtent([[d-.455*u,h-.238*u],[d+.455*u,h+.238*u]]).stream(s),C=n.translate([d-.307*u,h+.201*u]).clipExtent([[d-.425*u+zt,h+.12*u+zt],[d-.214*u-zt,h+.234*u-zt]]).stream(s),o=r.translate([d-.205*u,h+.212*u]).clipExtent([[d-.214*u+zt,h+.166*u+zt],[d-.115*u-zt,h+.234*u-zt]]).stream(s),l()},A.fitExtent=function(c,u){return Yk(A,c,u)},A.fitSize=function(c,u){return Tj(A,c,u)},A.fitWidth=function(c,u){return Nj(A,c,u)},A.fitHeight=function(c,u){return kj(A,c,u)};function l(){return e=g=null,A}return A.scale(1070)}function i9e(e){return function(g,I){var i=Tt(g),n=Tt(I),C=e(i*n);return C===1/0?[2,0]:[C*n*Bt(g),C*Bt(I)]}}function Gw(e){return function(g,I){var i=ji(g*g+I*I),n=e(i),C=Bt(n),r=Tt(n);return[sC(g*C,i*r),lC(i&&I*C/i)]}}var Fj=i9e(function(e){return ji(2/(1+e))});Fj.invert=Gw(function(e){return 2*lC(e/2)});function $Et(){return YA(Fj).scale(124.75).clipAngle(180-.001)}var Dj=i9e(function(e){return(e=vWe(e))&&e/Bt(e)});Dj.invert=Gw(function(e){return e});function qEt(){return YA(Dj).scale(79.4188).clipAngle(180-.001)}function vw(e,g){return[e,s2(Vj((QI+g)/2))]}vw.invert=function(e,g){return[e,2*ay(GWe(g))-QI]};function eMt(){return n9e(vw).scale(961/AC)}function n9e(e){var g=YA(e),I=g.center,i=g.scale,n=g.translate,C=g.clipExtent,r=null,o,a,s;g.scale=function(l){return arguments.length?(i(l),A()):i()},g.translate=function(l){return arguments.length?(n(l),A()):n()},g.center=function(l){return arguments.length?(I(l),A()):I()},g.clipExtent=function(l){return arguments.length?(l==null?r=o=a=s=null:(r=+l[0][0],o=+l[0][1],a=+l[1][0],s=+l[1][1]),A()):r==null?null:[[r,o],[a,s]]};function A(){var l=ag*i(),c=g(kWe(g.rotate()).invert([0,0]));return C(r==null?[[c[0]-l,c[1]-l],[c[0]+l,c[1]+l]]:e===vw?[[Math.max(c[0]-l,r),o],[Math.min(c[0]+l,a),s]]:[[r,Math.max(c[1]-l,o)],[a,Math.min(c[1]+l,s)]])}return A()}function JV(e){return Vj((QI+e)/2)}function C9e(e,g){var I=Tt(e),i=e===g?Bt(e):s2(I/Tt(g))/s2(JV(g)/JV(e)),n=I*tx(JV(e),i)/i;if(!i)return vw;function C(r,o){n>0?o<-QI+zt&&(o=-QI+zt):o>QI-zt&&(o=QI-zt);var a=n/tx(JV(o),i);return[a*Bt(i*r),n-a*Tt(i*r)]}return C.invert=function(r,o){var a=n-o,s=Qr(i)*ji(r*r+a*a),A=sC(r,Rg(a))*Qr(a);return a*i<0&&(A-=ag*Qr(r)*Qr(a)),[A/i,2*ay(tx(n/s,1/i))-QI]},C}function tMt(){return Kj(C9e).scale(109.5).parallels([30,30])}function nS(e,g){return[e,g]}nS.invert=nS;function gMt(){return YA(nS).scale(152.63)}function r9e(e,g){var I=Tt(e),i=e===g?Bt(e):(I-Tt(g))/(g-e),n=I/i+e;if(Rg(i)zt&&--i>0);return[e/(.8707+(C=I*I)*(-.131979+C*(-.013791+C*C*C*(.003971-.001529*C)))),I]};function oMt(){return YA(Mj).scale(175.295)}function zj(e,g){return[Tt(g)*Bt(e),Bt(g)]}zj.invert=Gw(lC);function aMt(){return YA(zj).scale(249.5).clipAngle(90+zt)}function Pj(e,g){var I=Tt(g),i=1+Tt(e)*I;return[I*Bt(e)/i,Bt(g)/i]}Pj.invert=Gw(function(e){return 2*ay(e)});function AMt(){return YA(Pj).scale(250).clipAngle(142)}function Jj(e,g){return[s2(Vj((QI+g)/2)),-e]}Jj.invert=function(e,g){return[-g,2*ay(GWe(e))-QI]};function sMt(){var e=n9e(Jj),g=e.center,I=e.rotate;return e.center=function(i){return arguments.length?g([-i[1],i[0]]):(i=g(),[i[1],-i[0]])},e.rotate=function(i){return arguments.length?I([i[0],i[1],i.length>2?i[2]+90:90]):(i=I(),[i[0],i[1],i[2]-90])},I([0,0,90]).scale(159.155)}const lMt=Object.freeze(Object.defineProperty({__proto__:null,geoAlbers:I9e,geoAlbersUsa:jEt,geoArea:gEt,geoAzimuthalEqualArea:$Et,geoAzimuthalEqualAreaRaw:Fj,geoAzimuthalEquidistant:qEt,geoAzimuthalEquidistantRaw:Dj,geoBounds:CEt,geoCentroid:lEt,geoCircle:cEt,geoClipAntimeridian:NJ,geoClipCircle:EWe,geoClipExtent:bEt,geoClipRectangle:kk,geoConicConformal:tMt,geoConicConformalRaw:C9e,geoConicEqualArea:H2,geoConicEqualAreaRaw:g9e,geoConicEquidistant:IMt,geoConicEquidistantRaw:r9e,geoContains:wEt,geoDistance:v2,geoEqualEarth:nMt,geoEqualEarthRaw:xj,geoEquirectangular:gMt,geoEquirectangularRaw:nS,geoGnomonic:CMt,geoGnomonicRaw:Ej,geoGraticule:PWe,geoGraticule10:REt,geoIdentity:rMt,geoInterpolate:VEt,geoLength:MWe,geoMercator:eMt,geoMercatorRaw:vw,geoNaturalEarth1:oMt,geoNaturalEarth1Raw:Mj,geoOrthographic:aMt,geoOrthographicRaw:zj,geoPath:EEt,geoProjection:YA,geoProjectionMutator:Yj,geoRotation:kWe,geoStereographic:AMt,geoStereographicRaw:Pj,geoStream:Uo,geoTransform:MEt,geoTransverseMercator:sMt,geoTransverseMercatorRaw:Jj},Symbol.toStringTag,{value:"Module"}));var cMt=[].slice,uMt={};function _J(e){this._size=e,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}_J.prototype=a9e.prototype={constructor:_J,defer:function(e){if(typeof e!="function")throw new Error("invalid callback");if(this._call)throw new Error("defer after await");if(this._error!=null)return this;var g=cMt.call(arguments,1);return g.push(e),++this._waiting,this._tasks.push(g),o9e(this),this},abort:function(){return this._error==null&&Oj(this,new Error("abort")),this},await:function(e){if(typeof e!="function")throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=function(g,I){e.apply(null,[g].concat(I))},N2(this),this},awaitAll:function(e){if(typeof e!="function")throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=e,N2(this),this}};function o9e(e){if(!e._start)try{dMt(e)}catch(g){if(e._tasks[e._ended+e._active-1])Oj(e,g);else if(!e._data)throw g}}function dMt(e){for(;e._start=e._waiting&&e._active=0;)if((i=e._tasks[I])&&(e._tasks[I]=null,i.abort))try{i.abort()}catch{}e._active=NaN,N2(e)}function N2(e){if(!e._active&&e._call){var g=e._data;e._data=void 0,e._call(e._error,g)}}function a9e(e){if(e==null)e=1/0;else if(!((e=+e)>=1))throw new Error("invalid concurrency");return new _J(e)}const mMt=Object.freeze(Object.defineProperty({__proto__:null,queue:a9e},Symbol.toStringTag,{value:"Module"}));var wr="$";function k2(){}k2.prototype=_j.prototype={constructor:k2,has:function(e){return wr+e in this},get:function(e){return this[wr+e]},set:function(e,g){return this[wr+e]=g,this},remove:function(e){var g=wr+e;return g in this&&delete this[g]},clear:function(){for(var e in this)e[0]===wr&&delete this[e]},keys:function(){var e=[];for(var g in this)g[0]===wr&&e.push(g.slice(1));return e},values:function(){var e=[];for(var g in this)g[0]===wr&&e.push(this[g]);return e},entries:function(){var e=[];for(var g in this)g[0]===wr&&e.push({key:g.slice(1),value:this[g]});return e},size:function(){var e=0;for(var g in this)g[0]===wr&&++e;return e},empty:function(){for(var e in this)if(e[0]===wr)return!1;return!0},each:function(e){for(var g in this)g[0]===wr&&e(this[g],g.slice(1),this)}};function _j(e,g){var I=new k2;if(e instanceof k2)e.each(function(o,a){I.set(a,o)});else if(Array.isArray(e)){var i=-1,n=e.length,C;if(g==null)for(;++i=0&&(i=I.slice(n+1),I=I.slice(0,n)),I&&!g.hasOwnProperty(I))throw new Error("unknown type: "+I);return{type:I,name:i}})}VW.prototype=A9e.prototype={constructor:VW,on:function(e,g){var I=this._,i=pMt(e+"",I),n,C=-1,r=i.length;if(arguments.length<2){for(;++C0)for(var I=new Array(n),i=0,n,C;i3&&c(u)};function c(u){var d=r.status,h;if(!d&&ZMt(r)||d>=200&&d<300||d===304){if(s)try{h=s.call(I,r)}catch(m){i.call("error",I,m);return}else h=r;i.call("load",I,h)}else i.call("error",I,u)}if(r.onprogress=function(u){i.call("progress",I,u)},I={header:function(u,d){return u=(u+"").toLowerCase(),arguments.length<2?C.get(u):(d==null?C.remove(u):C.set(u,d+""),I)},mimeType:function(u){return arguments.length?(n=u==null?null:u+"",I):n},responseType:function(u){return arguments.length?(A=u,I):A},timeout:function(u){return arguments.length?(l=+u,I):l},user:function(u){return arguments.length<1?o:(o=u==null?null:u+"",I)},password:function(u){return arguments.length<1?a:(a=u==null?null:u+"",I)},response:function(u){return s=u,I},get:function(u,d){return I.send("GET",u,d)},post:function(u,d){return I.send("POST",u,d)},send:function(u,d,h){return r.open(u,e,!0,o,a),n!=null&&!C.has("accept")&&C.set("accept",n+",*/*"),r.setRequestHeader&&C.each(function(m,f){r.setRequestHeader(f,m)}),n!=null&&r.overrideMimeType&&r.overrideMimeType(n),A!=null&&(r.responseType=A),l>0&&(r.timeout=l),h==null&&typeof d=="function"&&(h=d,d=null),h!=null&&h.length===1&&(h=yMt(h)),h!=null&&I.on("error",h).on("load",function(m){h(null,m)}),i.call("beforesend",I,r),r.send(d??null),I},abort:function(){return r.abort(),I},on:function(){var u=i.on.apply(i,arguments);return u===i?I:u}},g!=null){if(typeof g!="function")throw new Error("invalid callback: "+g);return I.get(g)}return I}function yMt(e){return function(g,I){e(g==null?I:null)}}function ZMt(e){var g=e.responseType;return g&&g!=="text"?e.response:e.responseText}function Kk(e,g){return function(I,i){var n=Lj(I).mimeType(e).response(g);if(i!=null){if(typeof i!="function")throw new Error("invalid callback: "+i);return n.get(i)}return n}}const GMt=Kk("text/html",function(e){return document.createRange().createContextualFragment(e.responseText)}),vMt=Kk("application/json",function(e){return JSON.parse(e.responseText)}),BMt=Kk("text/plain",function(e){return e.responseText}),SMt=Kk("application/xml",function(e){var g=e.responseXML;if(!g)throw new Error("parse error");return g});var nAe={},Cx={},rx=34,mZ=10,ox=13;function s9e(e){return new Function("d","return {"+e.map(function(g,I){return JSON.stringify(g)+": d["+I+'] || ""'}).join(",")+"}")}function wMt(e,g){var I=s9e(e);return function(i,n){return g(I(i),n,e)}}function CAe(e){var g=Object.create(null),I=[];return e.forEach(function(i){for(var n in i)n in g||I.push(g[n]=n)}),I}function SC(e,g){var I=e+"",i=I.length;return i9999?"+"+SC(e,6):SC(e,4)}function VMt(e){var g=e.getUTCHours(),I=e.getUTCMinutes(),i=e.getUTCSeconds(),n=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":RMt(e.getUTCFullYear())+"-"+SC(e.getUTCMonth()+1,2)+"-"+SC(e.getUTCDate(),2)+(n?"T"+SC(g,2)+":"+SC(I,2)+":"+SC(i,2)+"."+SC(n,3)+"Z":i?"T"+SC(g,2)+":"+SC(I,2)+":"+SC(i,2)+"Z":I||g?"T"+SC(g,2)+":"+SC(I,2)+"Z":"")}function l9e(e){var g=new RegExp('["'+e+` -\r]`),I=e.charCodeAt(0);function i(l,c){var u,d,h=n(l,function(m,f){if(u)return u(m,f-1);d=m,u=c?wMt(m,c):s9e(m)});return h.columns=d||[],h}function n(l,c){var u=[],d=l.length,h=0,m=0,f,b=d<=0,p=!1;l.charCodeAt(d-1)===mZ&&--d,l.charCodeAt(d-1)===ox&&--d;function y(){if(b)return Cx;if(p)return p=!1,nAe;var B,G=h,v;if(l.charCodeAt(G)===rx){for(;h++=d?b=!0:(v=l.charCodeAt(h++))===mZ?p=!0:v===ox&&(p=!0,l.charCodeAt(h)===mZ&&++h),l.slice(G+1,B-1).replace(/""/g,'"')}for(;h{const A=document.createElement("path"),l=s[0];let c=`M ${l[0]} ${l[1]}`;for(let u=2;uo.text.visible).forEach(o=>{const a=document.createElement("g"),s=document.createElement("text");s.setAttribute("text-anchor","middle"),s.setAttribute("font-family",nx),s.setAttribute("font-size",`${this.fontSize}px`),s.setAttribute("dy","-.2em"),a.setAttribute("transform",`scale(${o.text.scale.x},1)`),o.strand==="+"?s.setAttribute("fill",this.options.plusStrandColor):s.setAttribute("fill",this.options.minusStrandColor),s.innerHTML=o.text.text,a.appendChild(s),a.setAttribute("transform",`translate(${o.text.x},${o.text.y})scale(${o.text.scale.x},1)`),C.appendChild(a)}),[r,r]}}]),i}(Cy);function OKt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function tae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Zs(e){return Zs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Zs(e)}function gae(e,g,i,I,n,r,C,o,a,s){const A=s?e._xScale(i.yStart):e._xScale(i.xStart),l=s?e._xScale(i.yEnd):e._xScale(i.xEnd),c=s?e._yScale(i.xStart):e._yScale(i.yStart),u=s?e._yScale(i.xEnd):e._yScale(i.yEnd),d=i.uid+s,h=l-A,m=u-c;let f={x:A,y:c,width:h,height:m};I&&(hn&&f.xn&&bC&&f.yC&&pa||f.height>a)&&(g.drawRect(f.x,f.y,f.width,f.height),e.publish("annotationDrawn",{trackUuid:e.uuid,annotationUuid:d,viewPos:[f.x,f.y,f.width,f.height],dataPos:[i.xStart,i.xEnd,i.yStart,i.yEnd],importance:i.importance,info:{patternType:e.options.patternType}}))}let j1e=function(e){jKt(i,e);var g=$Kt(i);function i(...I){var n;OKt(this,i),n=g.call(this,...I),n.drawnRects={};const{publish:r,subscribe:C,unsubscribe:o}=XN();return n.publish=r,n.subscribe=C,n.unsubscribe=o,n}return _Kt(i,[{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const r=n.split(".");return r.slice(0,r.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),r=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);let C=Math.max(n,r);return C=Math.min(C,this.maxZoom),C}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r)})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.remoteId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const n=this.xTiles,r=this.yTiles,C=this.zoomLevel,o=[];for(let a=0;a!(d.uid in this.drawnRects)).forEach(d=>{gae(this,r,d,a,A,l,c,u,s,this.options.flipDiagonal==="yes"),this.options.flipDiagonal&&this.options.flipDiagonal==="copy"&&gae(this,r,d,a,A,l,c,u,s,!0)})}},{key:"exportSVG",value:function(){let n=null,r=null;fd(Zs(i.prototype),"exportSVG",this)?[r,n]=fd(Zs(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r);const C=document.createElement("g");C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(C);for(const o of[!0,!1])for(const a of this.visibleAndFetchedTiles())!a.tileData||!a.tileData.length||a.tileData.forEach(s=>{const A=s.uid+o,l=document.createElement("g");if(l.setAttribute("transform",`translate(${a.graphics.position.x},${a.graphics.position.y})scale(${a.graphics.scale.x},${a.graphics.scale.y})`),C.appendChild(l),A in this.drawnRects){const c=this.drawnRects[A],u=document.createElement("rect");u.setAttribute("x",c.x),u.setAttribute("y",c.y),u.setAttribute("width",c.width),u.setAttribute("height",c.height),u.setAttribute("fill",this.options.rectangleDomainFillColor?this.options.rectangleDomainFillColor:"grey"),u.setAttribute("opacity",.3),u.style.stroke="black",u.style.strokeWidth="1px",l.appendChild(u)}});return[r,r]}},{key:"setPosition",value:function(n){fd(Zs(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,r){this.xScale().domain()[0]===n.domain()[0]&&this.xScale().domain()[1]===n.domain()[1]&&this.yScale().domain()[0]===r.domain()[0]&&this.yScale().domain()[1]===r.domain()[1]||(this.xScale(n),this.yScale(r),this.refreshTiles(),this.draw())}},{key:"leftTrackDraw",value:function(){this.draw()}}]),i}(mm);function g5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function iae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gs(e){return Gs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Gs(e)}const s5t=250;let q1e=function(e){C5t(i,e);var g=o5t(i);function i(I,n){var r;g5t(this,i),r=g.call(this,I,n);const{pubSub:C}=I;r.drawnAnnotations={},r.drawnAnnoGfx={},r.selectedAnno=null,r.options.minSquareSize=+r.options.minSquareSize;const{publish:o,subscribe:a,unsubscribe:s}=XN();return r.publish=o,r.subscribe=a,r.unsubscribe=s,r.sT=0,r.annoSelectedBound=r.annoSelected.bind($1e(r)),r.pubSubs.push(C.subscribe("annoSelected",r.annoSelectedBound)),r}return i5t(i,[{key:"minX",get:function(){return this.tilesetInfo&&this.tilesetInfo.min_pos?this.tilesetInfo.min_pos[0]:0}},{key:"maxX",get:function(){return this.tilesetInfo&&this.tilesetInfo.max_pos?this.tilesetInfo.max_pos[0]:this.tilesetInfo.max_width||this.tilesetInfo.max_size}},{key:"minY",get:function(){return this.minX}},{key:"maxY",get:function(){return this.maxX}},{key:"maxSize",get:function(){const I=this.tilesetInfo.max_pos&&Math.max(this.tilesetInfo.max_pos[0]-this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[1]-this.tilesetInfo.min_pos[1]);return I||(this.tilesetInfo.max_size?this.tilesetInfo.max_size:0)}},{key:"projection",value:function([n,r]){return[this._xScale(n),this._yScale(r)]}},{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const r=n.split(".");return r.slice(0,r.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.minX,this.maxX),r=vt.calculateZoomLevel(this._yScale,this.minY,this.maxY);return uve(Zz(n,r),this.maxZoom)}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r)})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.tileId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.minX,this.maxX,this.tilesetInfo.max_zoom,this.maxSize),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.minY,this.maxY,this.tilesetInfo.max_zoom,this.maxSize);const n=this.zoomLevel,r=[];for(let C=0;C!(a.uid in this.drawnAnnotations)||r).forEach(a=>{const[s,A]=this.projection([a.xStart,a.yStart]),[l,c]=this.projection([a.xEnd,a.yEnd]);this.options.exclude&&this.options.exclude.indexOf(a.uid)>=0||this.drawAnnotation(this.prepAnnotation(o,a.uid,s,A,l-s,c-A,a),C)})}},{key:"prepAnnotation",value:function(n,r,C,o,a,s,A){let l;try{l=JSON.parse(A.fields)}catch{}return{graphics:n,id:A.id,uid:r,annotation:{x:C,y:o,width:a,height:s},dataPos:[A.xStart,A.xEnd,A.yStart,A.yEnd],importance:A.importance,info:l}}},{key:"drawAnnotation",value:function({graphics:n,id:r,uid:C,annotation:o,dataPos:a,importance:s,info:A},l){this.options.minSquareSize&&(o.widththis.hover(u,c,C),u.mouseout=()=>this.blur(u,c,C),u.mousedown=()=>this.mouseDown(),u.mouseup=h=>this.mouseUp(u,c,C,h,d),l||this.publish("annotationDrawn",{trackUuids:this.uuid,annotationUuid:C,annotationId:r,viewPos:c,dataPos:a,importance:s,info:A})}},{key:"_drawRect",value:function(n,r,C){let o=this.options.rectangleDomainStrokeColor,a=this.options.rectangleDomainStrokeWidth,s=this.options.rectangleDomainStrokeOpacity,A=this.options.rectangleDomainFillColor,l=this.options.rectangleDomainFillOpacity;this.hoveredAnno===C&&(o=this.options.hoverColor,a=this.options.rectangleDomainStrokeWidth+1||2,s=1,A=this.options.hoverColor,l=this.options.rectangleDomainFillOpacity),this.selectedAnno&&this.selectedAnno.uid===C&&(o=this.options.selectColor,a=this.options.rectangleDomainStrokeWidth+1||2,s=1,A=this.options.selectColor,l=Zz(.33,this.options.rectangleDomainFillOpacity)),n.clear(),this.options.trackBorderBgWidth&&(this.setBorderStyle(n,this.options.trackBorderBgColor,this.options.trackBorderBgWidth,this.options.trackBorderBgAlpha),this.setFill(n,A,0),n.drawRect(...r)),this.setBorderStyle(n,o,a,s),this.setFill(n,A,l),n.drawRect(...r),n.__viewPos__=r}},{key:"context",value:function(n,r,C){return o=>o(n,r,C)}},{key:"click",value:function(n,r,C,o,a){this.select(n,r,C),this.pubSub.publish("app.click",{type:"annotation",event:o,payload:a})}},{key:"mouseDown",value:function(){this.sT=performance.now()}},{key:"mouseUp",value:function(n,r,C,o,a){performance.now()-this.sT<=s5t&&this.click(n,r,C,o,a)}},{key:"hover",value:function(n,r,C){this.hoveredAnno=C,this._drawRect(n,r,C),this.animate()}},{key:"focus",value:function(n,r,C){this._drawRect(n,r,C),this.animate()}},{key:"blur",value:function(n,r,C){this.hoveredAnno=null,this._drawRect(n,r,C),this.animate()}},{key:"select",value:function(n,r,C,o=!1){let a=null,s=null;this.selectedAnno&&(a=this.selectedAnno.graphics,s=this.selectedAnno.uid),this.selectedAnno={graphics:n,uid:C},this.focus(n,r,C),this.options.onSelect&&!o&&(window[this.options.onSelect](C),this.pubSub.publish("annoSelected",C)),a&&s&&this.blur(a,a.__viewPos__,s)}},{key:"unselect",value:function(){const n=this.selectedAnno.graphics,r=this.selectedAnno.uid;this.selectedAnno=null,this.blur(n,n.__viewPos__,r)}},{key:"annoSelected",value:function(n){if(!this.selectedAnno||this.selectedAnno.uid!==n){this.selectedAnno&&this.unselect();const r=this.drawnAnnoGfx[n];r&&this.select(r,r.__viewPos__,n,!0)}}},{key:"exportSVG",value:function(){let n=null,r=null;pd(Gs(i.prototype),"exportSVG",this)?[r,n]=pd(Gs(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r);const C=document.createElement("g");return C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),n.appendChild(C),this.visibleAndFetchedTiles().filter(o=>o.tileData&&o.tileData.length).map(o=>({graphics:o.graphics,td:o.tileData})).forEach(({td:o,graphics:a})=>{const s=document.createElement("g");if(s.setAttribute("transform",`translate(${a.position.x},${a.position.y})scale(${a.scale.x},${a.scale.y})`),C.appendChild(s),o.uid in this.drawnAnnotations){const A=this.drawnAnnotations[o.uid],l=document.createElement("rect");l.setAttribute("x",A.x),l.setAttribute("y",A.y),l.setAttribute("width",A.width),l.setAttribute("height",A.height),l.setAttribute("fill",this.options.fillColor||"grey"),l.setAttribute("opacity",.3),l.style.stroke=this.options.fillColor||"grey",l.style.strokeWidth="1px",s.appendChild(l)}}),[r,r]}},{key:"setBorderStyle",value:function(n,r=this.options.rectangleDomainStrokeColor,C=this.options.rectangleDomainStrokeWidth,o=this.options.rectangleDomainStrokeOpacity){n.lineStyle(typeof C<"u"?C:1,Kt(r||"black"),typeof o<"u"?o:1)}},{key:"setFill",value:function(n,r=this.options.rectangleDomainFillColor,C=this.options.rectangleDomainFillOpacity){n.beginFill(Kt(r||"grey"),typeof C<"u"?C:.4)}},{key:"setPosition",value:function(n){pd(Gs(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.refreshTiles(),this.draw()}}]),i}(mm);function l5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Iae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function wh(e){return wh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},wh(e)}let iJ=function(e){m5t(i,e);var g=f5t(i);function i(I,n,r){var C;return l5t(this,i),C=g.call(this,I,n),C.pubSub=I.pubSub,C.options=n,C.isVertical=r,C.rects={},C.defaultColor=HI("red"),C}return c5t(i,[{key:"draw",value:function(){const n=typeof this.options.minRectWidth<"u"?this.options.minRectWidth:10,r=typeof this.options.fill<"u"?HI(this.options.fill):this.defaultColor,C=typeof this.options.fillOpacity<"u"?+this.options.fillOpacity:.2,o=typeof this.options.stroke<"u"?HI(this.options.stroke):this.defaultColor,a=typeof this.options.strokeWidth<"u"?+this.options.strokeWidth:1,s=typeof this.options.strokeOpacity<"u"?+this.options.strokeOpacity:0;let A;this.options.strokePos&&this.options.strokePos.length&&(A=Array.isArray(this.options.strokePos)?this.options.strokePos:[this.options.strokePos]),vv(wh(i.prototype),"draw",this).call(this);const l=this.pMain;l.clear();const c=performance.now();this.options.regions.forEach(u=>{const d=`${u[0]}-${u[1]}`;this.rects[d]||(this.rects[d]={graphics:new ot.PIXI.Graphics},l.addChild(this.rects[d].graphics)),this.rects[d].timeStamp=c;const h=HI(u[2])||r;let m=HI(u[3])||o;m||(m=h);const f=ot.PIXI.utils.rgb2hex([h.r/255,h.g/255,h.b/255]),b=ot.PIXI.utils.rgb2hex([m.r/255,m.g/255,m.b/255]);A?(l.lineStyle(1,b,0),l.beginFill(b,+u[5]||s)):(l.lineStyle(a,b,+u[5]||s),l.beginFill(f,+u[4]||C));const p=this.isVertical?this._yScale:this._xScale;let y=p(+u[0]);const Z=p(+u[1]);let B=Z-y;const G=typeof u[6]<"u"?u[6]:n;B{(v==="top"||v==="around")&&(this.isVertical?l.drawRect(0,y,a,B):l.drawRect(y,0,B,a)),(v==="right"||v==="around")&&(this.isVertical?l.drawRect(0,y,this.dimensions[0],a):l.drawRect(y,0,a,this.dimensions[1])),(v==="bottom"||v==="around")&&(this.isVertical?l.drawRect(this.dimensions[0]-a,y,a,B):l.drawRect(y,this.dimensions[1]-a,B,a)),(v==="left"||v==="around")&&(this.isVertical?l.drawRect(0,y+B-a,this.dimensions[0],a):l.drawRect(y+B-a,0,a,this.dimensions[1]))})):l.lineStyle(a,b,+u[5]||s),this.rects[d].graphics.clear(),this.rects[d].graphics.interactive=!0,this.rects[d].graphics.buttonMode=!0,l.beginFill(f,+u[4]||C),this.isVertical?(l.drawRect(0,y,this.dimensions[0],B),this.rects[d].graphics.hitArea=new ot.PIXI.Rectangle(0,y,this.dimensions[0],B)):(l.drawRect(y,0,B,this.dimensions[1]),this.rects[d].graphics.hitArea=new ot.PIXI.Rectangle(y,0,B,this.dimensions[1])),this.rects[d].graphics.mousedown=()=>{this.rects[d].mouseDownTime=performance.now()},this.rects[d].graphics.mouseup=v=>{performance.now()-this.rects[d].mouseDownTimeu.timeStamp!==c).forEach(u=>l.removeChild(u.graphics))}},{key:"setPosition",value:function(n){vv(wh(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}}]),i}(fr);function Z5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function nae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tA(e){return tA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},tA(e)}let eWe=function(e){w5t(i,e);var g=R5t(i);function i(I,n){var r;return Z5t(this,i),r=g.call(this,I,n),r.drawnRects=new Set,r.pMain=r.pMobile,r}return G5t(i,[{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const r=n.split(".");return r.slice(0,r.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),r=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);let C=Math.max(n,r);return C=Math.min(C,this.maxZoom),this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?C=Math.min(this.options.maxZoom,C):console.error("Invalid maxZoom on track:",this)),C}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r)})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.tileId))}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel();const n=this._xScale.copy();n.domain([this._xScale.invert(this._xScale.range()[0]-this.dimensions[1]*Math.sqrt(2)),this._xScale.invert(this._xScale.range()[1]+this.dimensions[1]*Math.sqrt(2))]),this.xTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const r=this.xTiles,C=this.yTiles,o=this.zoomLevel,s=this.tilesetInfo.max_width/2**o,A=[];for(let l=0;lthis.dimensions[1])continue;const d=[o,r[l],C[c]];d.mirrored=!1,A.push(d)}this.setVisibleTiles(A)}},{key:"initTile",value:function(n){gc(tA(i.prototype),"initTile",this).call(this,n),this.drawTile(n)}},{key:"destroyTile",value:function(n,r){}},{key:"draw",value:function(){this.delayDrawing||this.drawnRects.clear(),gc(tA(i.prototype),"draw",this).call(this)}},{key:"drawTile",value:function(n){if(!n.graphics)return;const r=n.graphics;r.clear();const C=Kt(this.options.rectangleDomainStrokeColor?this.options.rectangleDomainStrokeColor:"black"),o=Kt(this.options.rectangleDomainFillColor?this.options.rectangleDomainFillColor:"grey");if(r.lineStyle(1/this.pMain.scale.x,C,1),r.beginFill(o,.4),r.alpha=this.options.rectangleDomainOpacity?this.options.rectangleDomainOpacity:.5,!!n.tileData.sort)for(const a of n.tileData){const s=this._refXScale(a.xStart),A=this._refXScale(a.xEnd),l=this._refYScale(a.yStart),c=this._refYScale(a.yEnd),u=a.uid;this.drawnRects.has(u)||(this.drawnRects.add(u),r.drawRect(s,l,A-s,c-l),r.pivot.x=this._refXScale(0),r.pivot.y=this._refYScale(0),r.scale.x=-1/Math.sqrt(2),r.rotation=-3*Math.PI/4,r.scale.y=1/Math.sqrt(2),r.position.x=this._refXScale(0),r.position.y=0)}}},{key:"setPosition",value:function(n){gc(tA(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"refScalesChanged",value:function(n,r){gc(tA(i.prototype),"refScalesChanged",this).call(this,n,r);for(const C in this.fetchedTiles){const o=this.fetchedTiles[C];if(o.sprite){const a=o.graphics;a.pivot.x=this._refXScale(0),a.pivot.y=this._refYScale(0),a.scale.x=-1/Math.sqrt(2),a.rotation=-3*Math.PI/4,a.scale.y=1/Math.sqrt(2),a.position.x=this._refXScale(0),a.position.y=0}}}},{key:"zoomed",value:function(n,r,C,o,a){gc(tA(i.prototype),"zoomed",this).call(this,n,r,C,o,a),this.pMain.position.x=o,this.pMain.position.y=this.position[1]+this.dimensions[1],this.pMain.scale.x=C,this.pMain.scale.y=C,this.options.oneDHeatmapFlipped&&(this.pMain.scale.y=-C,this.pMain.position.y=this.position[1]),this.draw()}},{key:"leftTrackDraw",value:function(){this.draw()}}]),i}(mm);function H5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function rae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Rh(e){return Rh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Rh(e)}let tWe=function(e){K5t(i,e);var g=F5t(i);function i(I,n){var r;return H5t(this,i),r=g.call(this,I,n),r.drawnRects=new Set,r}return T5t(i,[{key:"tileToLocalId",value:function(n){return`${n.join(".")}`}},{key:"tileToRemoteId",value:function(n){return`${n.join(".")}`}},{key:"localToRemoteId",value:function(n){const r=n.split(".");return r.slice(0,r.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),r=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);let C=Math.max(n,r);return C=Math.min(C,this.maxZoom),C}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r)})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.tileId))}},{key:"calculateVisibleTiles",value:function(n=!0){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const r=this.xTiles,C=this.yTiles,o=this.zoomLevel,a=[];for(let s=0;sI.chrPositions?TI(n,I):null,I.chrToAbs=([n,r]=[])=>I.chrPositions?ZX(n,r,I):null,vt.text(e,(n,r)=>{if(n)g&&g(null);else{const C=jQ(r),o=FN(C);Object.keys(o).forEach(a=>{I[a]=o[a]}),g&&g(I)}},i).then(()=>I)}function M5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Cae(e,g){for(var i=0;ii.pos).left}return z5t(e,[{key:"scalesToPositionText",value:function(i,I,n=!1){if(this.chromInfo===null||!i||!I)return"";const r=TI(i.domain()[0],this.chromInfo),C=TI(i.domain()[1],this.chromInfo),o=TI(I.domain()[0],this.chromInfo),a=TI(I.domain()[1],this.chromInfo);let s=null;const A=mC(",d");return r[0]!==C[0]?s=`${r[0]}:${A(Math.floor(r[1]))}-${C[0]}:${A(Math.ceil(C[1]))}`:s=`${r[0]}:${A(Math.floor(r[1]))}-${A(Math.ceil(C[1]))}`,n&&(o[0]!==a[0]?s+=` & ${o[0]}:${A(Math.floor(o[1]))}-${a[0]}:${A(Math.ceil(a[1]))}`:s+=` & ${o[0]}:${A(Math.floor(o[1]))}-${A(Math.ceil(a[1]))}`),(r[2]<=0||C[2]>0||n&&(o[2]<=0||a[2]>0))&&(s+=` [offset ${r[2]},${C[2]}`,n&&(s+=`:${o[2]},${a[2]}`),s+="]"),s}},{key:"convertNumberNotation",value:function(i){let I=i;if(!I.includes("M",I.length-1)&&!I.includes("K",I.length-1))return I;let n=0,r=0;if(I.includes("M",I.length-1)?(n=6,I=I.replace("M","")):(n=3,I=I.replace("K","")),Number.isNaN(+I))return i;I=(+I).toString(),I.includes(".")&&(r=I.length-1-I.indexOf("."),I=(+I.replace(".","")).toString());const C=n-r;return C<0?i:(I+="0".repeat(C),I)}},{key:"parsePosition",value:function(i,I=null){const n=i.split(":");let r=null,C=0;n.length>1?(r=n[0],C=+this.convertNumberNotation(n[1].replace(/,/g,""))):n[0]in this.chromInfo.chrPositions?(r=n[0],C=0,I!==null&&(C=+this.chromInfo.chromLengths[r])):(C=+this.convertNumberNotation(n[0].replace(/,/g,"")),r=null,I&&(r=I));let o=null;return r===null?(r=I,o=C):r in this.chromInfo.chrPositions&&(o=this.chromInfo.chrPositions[r].pos+C),[r,C,o]}},{key:"matchRangesToLarger",value:function(i,I){if(i[1]-i[0]r.length>0);let n=null;if(I[0].indexOf("-")===0&&(I[0]=I[0].slice(3,I[0].length)),I.length>1){let[r,C,o]=this.parsePosition(I[0]),[a,s,A]=this.parsePosition(I[1],r);const l=[o,A];[r,C,o]=this.parsePosition(I[1]),[a,s,A]=this.parsePosition(I[0],r),r===null&&a!==null&&([r,C,o]=this.parsePosition(I[1],a));const c=[o,A];return c[1]-c[0]>l[1]-l[0]?c:l}if(I[0]in this.chromInfo.chrPositions){const r=+this.chromInfo.chrPositions[I[0]].pos;n=[r,r+ +this.chromInfo.chromLengths[I[0]]]}else{const[r,C,o]=this.parsePosition(I[0]);n=[o-8e6,o+8e6]}return n[0]>n[1]?[n[1],n[0]]:n}},{key:"parseOffset",value:function(i){const I=i.split(":");if(I.length===0)return[[0,0],[0,0]];if(I.length===1){const C=I[0].split(",");return[[+C[0],+C[1]],[0,0]]}const n=I[0].split(","),r=I[1].split(",");return[[+n[0],+n[1]],[+r[0],+r[1]]]}},{key:"searchPosition",value:function(i){let I=null,n=null;i=i.trim();const r=/\[offset (.+?)\]/.exec(i);let C=[[0,0],[0,0]];r&&(i=i.replace(r[0],""),C=this.parseOffset(r[1]));const o=i.split(" & ");return o.length>1?(I=this.getSearchRange(o[0].split(" ")[0]),n=this.getSearchRange(o[1].split(" ")[0])):I=this.getSearchRange(o[0]),I!==null&&n!==null&&([I,n]=this.matchRangesToLarger(I,n)),I&&(I[0]+=C[0][0],I[1]+=C[0][1]),n&&(n[0]+=C[1][0],n[1]+=C[1][1]),[I,n]}}]),e}();function O5t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function oae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function o0(e){return o0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},o0(e)}let gWe=function(e){j5t(i,e);var g=$5t(i);function i(I,n){var r;O5t(this,i),r=g.call(this,I,n);const{dataConfig:C,animate:o,pubSub:a}=I;r.searchField=null,r.chromInfo=null,r.animate=o;const s=C.server,A=C.tilesetUid,l=`${s}/chrom-sizes/?id=${A}`;return Os(l,c=>{r.chromInfo=c,r.searchField=new C0(r.chromInfo),r.draw(),r.texts=[];for(let u=0;uthis.dimensions[0]?f.x-=h+p-this.dimensions[0]:h-p<0&&(f.x-=h-p),m+y>this.dimensions[1]?f.y-=m+y-this.dimensions[1]:m-y<0&&(f.y-=m-y),f.visible=!0,n.push({importance:this.texts[s][A].hashValue,text:this.texts[s][A],caption:null})}this.hideOverlaps(n)}},{key:"hideOverlaps",value:function(n){let r=[];r=n.map(C=>{const o=C.text;o.updateTransform();const a=o.getBounds();return[a.x,a.y,a.x+a.width,a.y+a.height]}),yw(r,(C,o)=>{n[C].importance>n[o].importance?n[o].text.visible=0:n[C].text.visible=0})}},{key:"setPosition",value:function(n){SW(o0(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0]}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}}]),i}(fr);function gFt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function aae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Yc(e){return Yc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Yc(e)}let aG=function(e){CFt(i,e);var g=oFt(i);function i(I,n){var r;gFt(this,i),r=g.call(this,I,n);const{chromInfoPath:C,dataConfig:o,animate:a,pubSub:s,orientation:A="2d",isOverlay:l=!1}=I;r.searchField=null,r.chromInfo=null,r.animate=a,r.orientation=A,r.isOverlay=l;let c=C;return c||(c=`${o.server}/chrom-sizes/?id=${o.tilesetUid}`),Os(c,u=>{r.chromInfo=u,r.searchField=new C0(r.chromInfo),r.texts=[],r.lineGraphics=new ot.PIXI.Graphics,r.lineGraphics1dH=new ot.PIXI.Graphics,r.lineGraphics1dV=new ot.PIXI.Graphics,r.lineGraphics2d=new ot.PIXI.Graphics,r.mask1dH=new ot.PIXI.Graphics,r.mask1dV=new ot.PIXI.Graphics,r.mask2d=new ot.PIXI.Graphics,r.lineGraphics.addChild(r.lineGraphics1dH),r.lineGraphics1dH.addChild(r.mask1dH),r.lineGraphics.addChild(r.lineGraphics1dV),r.lineGraphics1dV.addChild(r.mask1dV),r.lineGraphics.addChild(r.lineGraphics2d),r.lineGraphics2d.addChild(r.mask2d),r.pMain.addChild(r.lineGraphics),r.draw(),r.animate()},s),r}return iFt(i,[{key:"drawLines",value:function(n=this.orientation,r=0,C=0){let o=this.lineGraphics;this.isOverlay&&n==="1d-horizontal"&&(o=this.lineGraphics1dH),this.isOverlay&&n==="1d-vertical"&&(o=this.lineGraphics1dV),this.isOverlay&&n==="2d"&&(o=this.lineGraphics2d);const a=Kt(this.options.lineStrokeColor?this.options.lineStrokeColor:"blue"),s=this.options.lineStrokeWidth?this.options.lineStrokeWidth:1;o.lineStyle(s,a,1),(n==="2d"||n==="1d-horizontal")&&(o.moveTo(this._xScale(0)+r,C),o.lineTo(this._xScale(0)+r,this.dimensions[1]+C)),(n==="2d"||n==="1d-vertical")&&(o.moveTo(r,this._yScale(0)+C),o.lineTo(this.dimensions[0]+r,this._yScale(0)+C));for(let A=0;A0&&c0&&c0&&h0&&h"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Vh(e){return Vh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Vh(e)}const ZFt=300;let iWe=function(e){mFt(i,e);var g=fFt(i);function i(I,n){var r;lFt(this,i),r=g.call(this,I,n);const{chromInfoPath:C,pubSub:o}=I;return r.pubSub=o,r.rects={},Os(C,a=>{r.chromInfo=a,r.draw()},r.pubSub),r}return cFt(i,[{key:"draw",value:function(){if(!this.chromInfo)return;const n=this.options.minRectWidth?this.options.minRectWidth:10,r=this.options.minRectWidth?this.options.minRectHeight:10;Sv(Vh(i.prototype),"draw",this).call(this);const C=this.pMain;C.clear();const o=performance.now();this.options.regions.forEach(a=>{const s=a.slice(0,6).join("-");this.rects[s]||(this.rects[s]={graphics:new ot.PIXI.Graphics},C.addChild(this.rects[s].graphics)),this.rects[s].timeStamp=o;const A=HI(a[6]);let l=HI(a[7]);l||(l=A);const c=ot.PIXI.utils.rgb2hex([A.r/255,A.g/255,A.b/255]),u=ot.PIXI.utils.rgb2hex([l.r/255,l.g/255,l.b/255]);C.lineStyle(1,u,l.opacity),C.beginFill(c,A.opacity);let d=this._xScale(this.chromInfo.chrPositions[a[0]].pos+ +a[1]);const h=this._xScale(this.chromInfo.chrPositions[a[0]].pos+ +a[2]);let m=this._yScale(this.chromInfo.chrPositions[a[3]].pos+ +a[4]);const f=this._yScale(this.chromInfo.chrPositions[a[3]].pos+ +a[5]);let b=h-d,p=f-m;const y=typeof a[8]<"u"?a[8]:n,Z=typeof a[9]<"u"?a[9]:r;b{this.rects[s].mouseDownTime=performance.now()},this.rects[s].graphics.mouseup=B=>{performance.now()-this.rects[s].mouseDownTime"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vs(e){return vs=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},vs(e)}const HFt=200,TFt=6,NFt=2,lae=7829367;let nWe=function(e){RFt(i,e);var g=VFt(i);function i(I,n){var r;GFt(this,i),r=g.call(this,I,n);const{dataConfig:C,animate:o,chromInfoPath:a,isShowGlobalMousePosition:s}=I;r.searchField=null,r.chromInfo=null,r.dataConfig=C,r.pTicks=new ot.PIXI.Graphics,r.pMain.addChild(r.pTicks),r.gTicks={},r.tickTexts={},r.options=n,r.isShowGlobalMousePosition=s,r.textFontSize=12,r.textFontFamily="Arial",r.textFontColor="#808080",r.textStrokeColor=r.getTheme()===ii?"#000000":"#ffffff",r.pixiTextConfig={fontSize:+r.options.fontSize?`${+r.options.fontSize}px`:`${r.textFontSize}px`,fontFamily:r.textFontFamily,fill:r.options.color||r.textFontColor,lineJoin:"round",stroke:r.options.stroke||r.textStrokeColor,strokeThickness:2},r.stroke=Kt(r.pixiTextConfig.stroke),r.tickWidth=HFt,r.tickHeight=TFt,r.tickTextSeparation=NFt,r.tickColor=r.options.tickColor?Kt(r.options.tickColor):lae,r.animate=o,r.pubSubs=[],r.options.showMousePosition&&!r.hideMousePosition&&(r.hideMousePosition=sh(IWe(r),r.is2d,r.isShowGlobalMousePosition()));let A=a;return A||(A=`${C.server}/chrom-sizes/?id=${C.tilesetUid}`),Os(A,l=>{r.chromInfo=l,r.searchField=new C0(r.chromInfo),r.rerender(r.options,!0),r.draw(),r.animate()},r.pubSub),r}return vFt(i,[{key:"initBoundsTicks",value:function(){this.pTicks&&(this.pMain.removeChild(this.pTicks),this.pTicks=null),this.gBoundTicks||(this.gBoundTicks=new ot.PIXI.Graphics,this.leftBoundTick=new ot.PIXI.Text("",this.pixiTextConfig),this.rightBoundTick=new ot.PIXI.Text("",this.pixiTextConfig),this.gBoundTicks.addChild(this.leftBoundTick),this.gBoundTicks.addChild(this.rightBoundTick),this.pMain.addChild(this.gBoundTicks)),this.texts=[]}},{key:"initChromLabels",value:function(){if(this.chromInfo){this.gBoundTicks&&(this.pMain.removeChild(this.gBoundTicks),this.gBoundTicks=null),this.pTicks||(this.pTicks=new ot.PIXI.Graphics,this.pMain.addChild(this.pTicks)),this.texts=[],this.pTicks.removeChildren();for(let n=0;nNumber.isInteger(b)),c=this.tickTexts[n.chr],u=this.options.fontIsLeftAligned?(+this.options.fontSize||this.textFontSize)/2:this.tickHeight,d=this.flipText?-1:1,h=this.options.fontIsLeftAligned?d*4:0;let m=this.options.fontIsLeftAligned?0:u+this.tickTextSeparation;for(this.options.reverseOrientation&&(m=this.dimensions[1]-m);c.lengthl.length;){const b=c.pop();this.gTicks[n.chr].removeChild(b)}let f=0;for(;f{if(this.tickTexts[o])for(let a=0;a{C.updateTransform();const a=C.getBounds();return[a.x,a.y,a.x+a.width,a.y+a.height]}),yw(r,(C,o)=>{n[C].importance>n[o].importance?n[o].text.visible=!1:n[C].text.visible=!1})}},{key:"setPosition",value:function(n){bd(vs(i.prototype),"setPosition",this).call(this,n),[this.pMain.position.x,this.pMain.position.y]=this.position}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}},{key:"exportSVG",value:function(){let n=null,r=null;bd(vs(i.prototype),"exportSVG",this)?[r,n]=bd(vs(i.prototype),"exportSVG",this).call(this):(r=document.createElement("g"),n=r),r.setAttribute("class","chromosome-labels");const C=document.createElement("g");return n.appendChild(C),C.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),this.allTexts.filter(o=>o.text.visible).forEach(o=>{const a=Bz(o.text);C.appendChild(a)}),Object.values(this.tickTexts).forEach(o=>{o.filter(a=>a.visible).forEach(a=>{let s=Bz(a);C.appendChild(s),s=yve(a.x,this.options.reverseOrientation?0:this.dimensions[1],a.x,this.options.reverseOrientation?this.tickHeight:this.dimensions[1]-this.tickHeight,1,this.tickColor);const A=document.createElement("line");A.setAttribute("x1",a.tickLine[0]),A.setAttribute("y1",a.tickLine[1]),A.setAttribute("x2",a.tickLine[2]),A.setAttribute("y2",a.tickLine[3]),A.setAttribute("style","stroke: grey"),C.appendChild(s),C.appendChild(A)})}),[r,n]}}]),i}(fr);function kFt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gA(e){return gA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},gA(e)}let rWe=function(e){xFt(i,e);var g=EFt(i);function i(I,n){var r;kFt(this,i),r=g.call(this,I,n);const{animate:C}=I;return r.pMain=r.pMobile,r.colorScale=Yb,r.continuousScaling=!1,n&&n.colorRange&&(r.colorScale=_c(n.colorRange)),r.animate=C,r.options=n,r.pubSubs=[],r}return YFt(i,[{key:"rerender",value:function(n,r){ic(gA(i.prototype),"rerender",this).call(this,n,r),this.zoomed(this.xScale(),this.yScale(),this.pMain.scale.x,this.pMain.position.x,this.pMain.position.y)}},{key:"calculateZoomLevel",value:function(){let n=null;if(this.tilesetInfo.resolutions){const r=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),C=vt.calculateZoomLevelFromResolutions(this.tilesetInfo.resolutions,this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);n=Math.min(r,C)}else{const r=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),C=vt.calculateZoomLevel(this._xScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1]);n=Math.max(r,C),n=Math.min(n,this.maxZoom)}return this.options&&this.options.maxZoom&&(this.options.maxZoom>=0?n=Math.min(this.options.maxZoom,n):console.error("Invalid maxZoom on track:",this)),n}},{key:"calculateVisibleTiles",value:function(){if(!this.tilesetInfo)return;this.zoomLevel=this.calculateZoomLevel();const n=this._xScale.copy();if(n.domain([this._xScale.invert(this._xScale.range()[0]-this.dimensions[1]*Math.sqrt(2)),this._xScale.invert(this._xScale.range()[1]+this.dimensions[1]*Math.sqrt(2))]),this.tilesetInfo.resolutions){const l=this.tilesetInfo.resolutions.map(c=>+c).sort((c,u)=>u-c);this.xTiles=vt.calculateTilesFromResolution(l[this.zoomLevel],n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]),this.yTiles=vt.calculateTilesFromResolution(l[this.zoomLevel],n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0])}else this.xTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width),this.yTiles=vt.calculateTiles(this.zoomLevel,n,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);const r=this.xTiles,C=this.yTiles,o=this.zoomLevel,s=this.tilesetInfo.max_width/2**o,A=[];for(let l=0;lthis.dimensions[1])continue;const d=[o,r[l],C[c]];d.mirrored=!1,d.dataTransform=this.options.dataTransform?this.options.dataTransform:"default",A.push(d)}this.setVisibleTiles(A)}},{key:"tileDataToCanvas",value:function(n){const r=document.createElement("canvas");r.width=256,r.height=256;const C=r.getContext("2d");C.fillStyle="transparent",C.fillRect(0,0,r.width,r.height);const o=new ImageData(n,r.width,r.height);return C.putImageData(o,0,0),r}},{key:"setSpriteProperties",value:function(n,r,C,o){const{tileX:a,tileY:s,tileWidth:A,tileHeight:l}=this.getTilePosAndDimensions(r,C),c=a+A,u=s+l;n.width=this._refXScale(c)-this._refXScale(a),n.height=this._refYScale(u)-this._refYScale(s),n.x=this._refXScale(a),n.y=this._refYScale(s)}},{key:"pixDataFunction",value:function(n,r){if(r){const C=n.graphics,o=this.tileDataToCanvas(r.pixData),a=ot.PIXI.VERSION[0]==="4"?ot.PIXI.Texture.fromCanvas(o,ot.PIXI.SCALE_MODES.NEAREST):ot.PIXI.Texture.from(o,{scaleMode:ot.PIXI.SCALE_MODES.NEAREST});n.sprite=new ot.PIXI.Sprite(a),n.canvas=o,this.setSpriteProperties(n.sprite,n.tileData.zoomLevel,n.tileData.tilePos,n.mirrored),C.pivot.x=this._refXScale(0),C.pivot.y=this._refYScale(0),C.scale.x=-1/Math.sqrt(2),C.rotation=-3*Math.PI/4,C.scale.y=1/Math.sqrt(2),C.position.x=this._refXScale(0),C.position.y=0,C.removeChildren(),C.addChild(n.sprite)}this.renderingTiles.delete(n.tileId)}},{key:"refScalesChanged",value:function(n,r){ic(gA(i.prototype),"refScalesChanged",this).call(this,n,r);for(const C in this.fetchedTiles){const o=this.fetchedTiles[C];if(o.sprite){this.setSpriteProperties(o.sprite,o.tileData.zoomLevel,o.tileData.tilePos,o.mirrored);const a=o.graphics;a.pivot.x=this._refXScale(0),a.pivot.y=this._refYScale(0),a.scale.x=-1/Math.sqrt(2),a.rotation=-3*Math.PI/4,a.scale.y=1/Math.sqrt(2),a.position.x=this._refXScale(0),a.position.y=0}}}},{key:"zoomed",value:function(n,r,C,o,a){ic(gA(i.prototype),"zoomed",this).call(this,n,r,C,o,a),ic(gA(i.prototype),"draw",this).call(this),this.pMain.position.x=o,this.pMain.position.y=this.position[1]+this.dimensions[1],this.pMain.scale.x=C,this.pMain.scale.y=C,this.options.oneDHeatmapFlipped&&(this.pMain.scale.y=-C,this.pMain.position.y=this.position[1])}},{key:"leftTrackDraw",value:function(){this.draw()}},{key:"exportSVG",value:function(){let n=null,r=null;[r,n]=ic(gA(i.prototype),"superSVG",this).call(this);const C=document.createElement("g");n.appendChild(C),C.setAttribute("transform",`translate(${this.pMain.position.x},${this.pMain.position.y}) scale(${this.pMain.scale.x},${this.pMain.scale.y})`);for(const a of this.visibleAndFetchedTiles()){const s=document.createElement("g"),A=a.graphics,l=A.rotation*180/Math.PI,c=`translate(${A.position.x},${A.position.y}) rotate(${l}) scale(${A.scale.x},${A.scale.y}) translate(${-A.pivot.x},${-A.pivot.y})`;s.setAttribute("transform",c);const u=a.sprite.rotation*180/Math.PI,d=document.createElement("g");d.setAttribute("transform",`translate(${a.sprite.x},${a.sprite.y}) rotate(${u}) scale(${a.sprite.scale.x},${a.sprite.scale.y})`);const h=document.createElement("image");h.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a.canvas.toDataURL()),h.setAttribute("width",256),h.setAttribute("height",256),d.appendChild(h),s.appendChild(d),C.appendChild(s)}const o=this.exportColorBarSVG();return n.appendChild(o),[r,r]}}]),i}(bw);function JFt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function A2(e){return A2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},A2(e)}let dae=function(e){UFt(i,e);var g=QFt(i);function i(I,n){var r;return JFt(this,i),r=g.call(this,I,n),r.tilesetInfo={},r.errorTextText=`Unknown track type: ${n.type}`,r}return OFt(i,[{key:"zoomed",value:function(){this.draw()}}]),i}(fr);function eDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function s2(e){return s2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},s2(e)}let oWe=function(e){IDt(i,e);var g=nDt(i);function i(I,n){var r;return eDt(this,i),r=g.call(this,I,n),r.axis=new Vk(CWe(r)),r.pBase.addChild(r.axis.pAxis),r}return tDt(i,[{key:"initTile",value:function(n){this.scale.minRawValue=this.minVisibleValueInTiles(),this.scale.maxRawValue=this.minVisibleValueInTiles(),this.scale.minValue=this.scale.minRawValue,this.scale.maxValue=this.scale.maxRawValue,this.drawTile(n)}},{key:"drawTile",value:function(n){if(!n.graphics)return;const r=n.graphics,C=6,o=4;r.clear(),this.valueScale=Cu().domain([this.minValue()+.01,this.maxValue()]).range([this.dimensions[1]-C/2,C/2]);const a=Kt("black");r.lineStyle(1,a,.3),r.beginFill(a,.3),this.drawAxis(this.valueScale),n.tileData.forEach(s=>{const A=s.fields,l=+s.chrOffset,c=+A[1]+l,u=+A[2]+l,d=+A[3],h=this._xScale(c),m=this._xScale(u),f=Math.max(m-h,o),b=this.valueScale(d),p=(m+h)/2;r.drawRect(p-f/2,b-C/2,f,C)})}},{key:"minVisibleValueInTiles",value:function(){let n=this.visibleAndFetchedIds();return n.length===0&&(n=Object.keys(this.fetchedTiles)),Math.min.apply(null,n.map(C=>+Math.min(...this.fetchedTiles[C].tileData.filter(o=>!Number.isNaN(o.fields[3])).map(o=>+o.fields[3]))))}},{key:"maxVisibleValueInTiles",value:function(){let n=this.visibleAndFetchedIds();return n.length===0&&(n=Object.keys(this.fetchedTiles)),Math.max.apply(null,n.map(C=>+Math.max(...this.fetchedTiles[C].tileData.filter(o=>!Number.isNaN(o.fields[3])).map(o=>+o.fields[3]))))}}]),i}(ay);function oDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function mae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Kc(e){return Kc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Kc(e)}let aWe=function(e){cDt(i,e);var g=uDt(i);function i(I,n){var r;oDt(this,i),r=g.call(this,I,n);const{registerViewportChanged:C,removeViewportChanged:o,setDomainsCallback:a}=I,s=cg.nice();return r.uid=s,r.options=n,r.hasFromView=!I.projectionXDomain||!I.projectionYDomain,r.removeViewportChanged=o,r.setDomainsCallback=a,r.viewportXDomain=r.hasFromView?null:I.projectionXDomain,r.viewportYDomain=r.hasFromView?null:I.projectionYDomain,r.brush=xQ().on("brush",r.brushed.bind(uJ(r))),r.gBrush=r.gMain.append("g").attr("id",`brush-${r.uid}`).call(r.brush),r.gBrush.selectAll(".overlay").style("pointer-events","none"),r.gBrush.selectAll(".handle--n").style("pointer-events","none"),r.gBrush.selectAll(".handle--s").style("pointer-events","none"),r.gBrush.selectAll(".handle--w").style("pointer-events","none"),r.gBrush.selectAll(".handle--e").style("pointer-events","none"),C(s,r.viewportChanged.bind(uJ(r))),r.rerender(),r.draw(),r}return aDt(i,[{key:"brushed",value:function(n){const r=n.selection;if(!this._xScale||!this._yScale)return;const C=[this._xScale.invert(r[0][0]),this._xScale.invert(r[1][0])],o=[this._yScale.invert(r[0][1]),this._yScale.invert(r[1][1])];this.hasFromView||(this.viewportXDomain=C,this.viewportYDomain=o),this.setDomainsCallback(C,o)}},{key:"viewportChanged",value:function(n,r){const C=n.domain(),o=r.domain();this.viewportXDomain=C,this.viewportYDomain=o,this.draw()}},{key:"remove",value:function(){this.removeViewportChanged(this.uid),Lp(Kc(i.prototype),"remove",this).call(this)}},{key:"rerender",value:function(){this.gBrush.selectAll(".selection").attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",this.options.projectionFillOpacity).attr("stroke-opacity",this.options.projectionStrokeOpacity).attr("stroke-width",this.options.strokeWidth)}},{key:"draw",value:function(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._xScale(this.viewportXDomain[0]),r=this._yScale(this.viewportYDomain[0]),C=this._xScale(this.viewportXDomain[1]),o=this._yScale(this.viewportYDomain[1]),a=[[n,r],[C,o]];this.brush.on("brush",null),this.gBrush.call(this.brush.move,a),this.brush.on("brush",this.brushed.bind(this))}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}},{key:"setPosition",value:function(n){Lp(Kc(i.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){Lp(Kc(i.prototype),"setDimensions",this).call(this,n);const r=this._xScale.range(),C=this._yScale.range(),o=r[1]-r[0],a=C[1]-C[0];this.brush.extent([[r[0]-o,C[0]-a],[r[1]+o,C[1]+a]]),this.gBrush.call(this.brush),this.draw()}}]),i}(fm);function mDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function fae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Fc(e){return Fc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Fc(e)}let AWe=function(e){ZDt(i,e);var g=GDt(i);function i(I,n){var r;mDt(this,i),r=g.call(this,I,n);const{registerViewportChanged:C,removeViewportChanged:o,setDomainsCallback:a}=I,s=cg.nice();return r.uid=s,r.options=n,r.hasFromView=!I.projectionXDomain,r.removeViewportChanged=o,r.setDomainsCallback=a,r.viewportXDomain=r.hasFromView?null:I.projectionXDomain,r.viewportYDomain=r.hasFromView?null:[0,0],r.brush=YN().on("brush",r.brushed.bind(hJ(r))),r.gBrush=r.gMain.append("g").attr("id",`brush-${r.uid}`).call(r.brush),r.gBrush.selectAll(".overlay").style("pointer-events","none"),r.gBrush.selectAll(".handle--ne").style("pointer-events","none"),r.gBrush.selectAll(".handle--nw").style("pointer-events","none"),r.gBrush.selectAll(".handle--sw").style("pointer-events","none"),r.gBrush.selectAll(".handle--se").style("pointer-events","none"),r.gBrush.selectAll(".handle--n").style("pointer-events","none"),r.gBrush.selectAll(".handle--s").style("pointer-events","none"),C(s,r.viewportChanged.bind(hJ(r))),r.rerender(),r.draw(),r}return fDt(i,[{key:"brushed",value:function(n){const r=n.selection;if(!this._xScale||!this._yScale)return;const C=[this._xScale.invert(r[0]),this._xScale.invert(r[1])],o=this.viewportYDomain;this.hasFromView||(this.viewportXDomain=C),this.setDomainsCallback(C,o)}},{key:"viewportChanged",value:function(n,r,C=!0){const o=n.domain(),a=r.domain();this.viewportXDomain=o,this.viewportYDomain=a,this.draw()}},{key:"remove",value:function(){this.removeViewportChanged(this.uid),Up(Fc(i.prototype),"remove",this).call(this)}},{key:"rerender",value:function(){this.gBrush.selectAll(".selection").attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",this.options.projectionFillOpacity).attr("stroke-opacity",this.options.projectionStrokeOpacity).attr("stroke-width",this.options.strokeWidth)}},{key:"draw",value:function(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._xScale(this.viewportXDomain[0]),r=this._xScale(this.viewportXDomain[1]),C=[n,r];this.brush.on("brush",null),this.gBrush.call(this.brush.move,C),this.brush.on("brush",this.brushed.bind(this))}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}},{key:"setPosition",value:function(n){Up(Fc(i.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){Up(Fc(i.prototype),"setDimensions",this).call(this,n);const r=this._xScale.range(),C=this._yScale.range(),o=r[1]-r[0];this.brush.extent([[r[0]-o,C[0]],[r[1]+o,C[1]]]),this.gBrush.call(this.brush),this.draw()}}]),i}(fm);function SDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function pae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Dc(e){return Dc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Dc(e)}let sWe=function(e){XDt(i,e);var g=HDt(i);function i(I,n){var r;SDt(this,i),r=g.call(this,I,n);const{registerViewportChanged:C,removeViewportChanged:o,setDomainsCallback:a}=I,s=cg.nice();return r.uid=s,r.options=n,r.hasFromView=!I.projectionYDomain,r.removeViewportChanged=o,r.setDomainsCallback=a,r.viewportXDomain=r.hasFromView?null:[0,0],r.viewportYDomain=r.hasFromView?null:I.projectionYDomain,r.brush=QS().on("brush",r.brushed.bind(fJ(r))),r.gBrush=r.gMain.append("g").attr("id",`brush-${r.uid}`).call(r.brush),r.gBrush.selectAll(".overlay").style("pointer-events","none"),r.gBrush.selectAll(".handle--ne").style("pointer-events","none"),r.gBrush.selectAll(".handle--nw").style("pointer-events","none"),r.gBrush.selectAll(".handle--sw").style("pointer-events","none"),r.gBrush.selectAll(".handle--se").style("pointer-events","none"),r.gBrush.selectAll(".handle--e").style("pointer-events","none"),r.gBrush.selectAll(".handle--w").style("pointer-events","none"),C(s,r.viewportChanged.bind(fJ(r))),r.rerender(),r.draw(),r}return wDt(i,[{key:"brushed",value:function(n){const r=n.selection;if(!this._xScale||!this._yScale)return;const C=this.viewportXDomain,o=[this._yScale.invert(r[0]),this._yScale.invert(r[1])];this.hasFromView||(this.viewportYDomain=o),this.setDomainsCallback(C,o)}},{key:"viewportChanged",value:function(n,r,C=!0){const o=n.domain(),a=r.domain();this.viewportXDomain=o,this.viewportYDomain=a,this.draw()}},{key:"remove",value:function(){this.removeViewportChanged(this.uid),Qp(Dc(i.prototype),"remove",this).call(this)}},{key:"rerender",value:function(){this.gBrush.selectAll(".selection").attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",this.options.projectionFillOpacity).attr("stroke-opacity",this.options.projectionStrokeOpacity).attr("stroke-width",this.options.strokeWidth)}},{key:"draw",value:function(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._yScale(this.viewportYDomain[0]),r=this._yScale(this.viewportYDomain[1]),C=[n,r];this.brush.on("brush",null),this.gBrush.call(this.brush.move,C),this.brush.on("brush",this.brushed.bind(this))}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}},{key:"setPosition",value:function(n){Qp(Dc(i.prototype),"setPosition",this).call(this,n),this.draw()}},{key:"setDimensions",value:function(n){Qp(Dc(i.prototype),"setDimensions",this).call(this,n);const r=this._xScale.range(),C=this._yScale.range(),o=C[1]-C[0];this.brush.extent([[r[0],C[0]-o],[r[1],C[1]+o]]),this.gBrush.call(this.brush),this.draw()}}]),i}(fm);function bae(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function yae(e,g){for(var i=0;ie[bJ]||e,KDt=(e,g)=>{const i=g(e);return i.prototype[pJ]=lWe(g),i},FDt=(e,g)=>e.hasOwnProperty(pJ)&&e[pJ]===lWe(g),DDt=(e,g)=>{for(;e!==null;){if(FDt(e,g))return!0;e=Object.getPrototypeOf(e)}return!1},Tj=(e,g)=>(Object.setPrototypeOf(g,e),e[bJ]||(e[bJ]=e),g),rx="__mixwith_cachedApplications",xDt=e=>Tj(e,g=>{let i=g[rx];i||(g[rx]=new Map,i=g[rx]);let I=i.get(e);return I||(I=e(g),i.set(e,I)),I}),EDt=e=>Tj(e,g=>DDt(g.prototype,e)?g:e(g)),MDt=e=>Tj(e,g=>KDt(g,e)),xk=e=>EDt(xDt(MDt(e)));let zDt=function(){function e(g){bae(this,e),this.superclass=g||function(){function i(){bae(this,i)}return Zae(i)}()}return Zae(e,[{key:"with",value:function(...i){return i.reduce((I,n)=>n(I),this.superclass)}}]),e}();const Ay=e=>new zDt(e);function PDt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Gae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Wh(e){return Wh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Wh(e)}const Nj=xk(e=>function(g){UDt(I,g);var i=QDt(I);function I(n,r){var C;PDt(this,I),C=i.call(this,n,r);const{animate:o}=n;return C.highlighted=!1,C.animate=o,C.MOUSEOVER_RADIUS=4,C.pubSub=n.pubSub,C.pubSubs.push(C.pubSub.subscribe("app.mouseMove",C.mouseMoveHandler.bind(cWe(C)))),C}return JDt(I,[{key:"setPosition",value:function(r){wv(Wh(I.prototype),"setPosition",this).call(this,r),this.pMain.position.x=this.position[0],this.pMain.position.y=this.position[1]}},{key:"zoomed",value:function(r,C){wv(Wh(I.prototype),"zoomed",this).call(this,r,C),this.draw()}},{key:"respondsToPosition",value:function(){return this.highlighted}}]),I}(e));function Rv(){return typeof Reflect<"u"&&Reflect.get?Rv=Reflect.get.bind():Rv=function(g,i,I){var n=qDt(g,i);if(n){var r=Object.getOwnPropertyDescriptor(n,i);return r.get?r.get.call(arguments.length<3?g:I):r.value}},Rv.apply(this,arguments)}function qDt(e,g){for(;!Object.prototype.hasOwnProperty.call(e,g)&&(e=Xh(e),e!==null););return e}function uWe(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function vae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Xh(e){return Xh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Xh(e)}const nxt=xk(e=>function(g){hWe(I,g);var i=mWe(I);function I(){return uWe(this,I),i.apply(this,arguments)}return dWe(I,[{key:"drawHorizontalRule",value:function(r){let C=Kt(this.options.color||"black");this.highlighted&&(C=Kt("red")),r.lineStyle(this.strokeWidth,C,this.strokeOpacity);let o=0;for(;o"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Hh(e){return Hh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Hh(e)}const GWe=xk(e=>function(g){yWe(I,g);var i=ZWe(I);function I(){return pWe(this,I),i.apply(this,arguments)}return bWe(I,[{key:"drawVerticalRule",value:function(r){let C=Kt(this.options.color||"black");this.highlighted&&(C=Kt("red")),r.lineStyle(this.strokeWidth,C,this.strokeOpacity);let o=0;for(;o"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Th(e){return Th=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},Th(e)}let BWe=function(e){mxt(i,e);var g=fxt(i);function i(I,n){var r;lxt(this,i),r=g.call(this,I,n);const{x:C,y:o}=I;return r.xPosition=C,r.yPosition=o,r.strokeWidth=2,r.strokeOpacity=1,r.dashLength=5,r.dashGap=3,r}return cxt(i,[{key:"draw",value:function(){const n=this.pMain;n.clear(),this.drawHorizontalRule(n),this.drawVerticalRule(n)}},{key:"mouseMoveHandler",value:function(n){this.highlighted=this.isWithin(n.x,n.y)&&(this.isMouseOverHorizontalLine(n)||this.isMouseOverVerticalLine(n)),this.draw()}},{key:"drawHorizontalRule",value:function(n){let r=Kt(this.options.color||"black");this.highlighted&&(r=Kt("red")),n.lineStyle(this.strokeWidth,r,this.strokeOpacity);let C=0;for(;C"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iA(e){return iA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},iA(e)}let Zw=function(e){wxt(i,e);var g=Rxt(i);function i(I,n){var r;Zxt(this,i),r=g.call(this,I,n);const{animate:C}=I;return r.visibleTiles=new Set,r.visibleTileIds=new Set,r.fetching=new Set,r.fetchedTiles={},r.tileGraphics={},r.minX=typeof r.options.minPos<"u"&&!Number.isNaN(+r.options.minPos)?+r.options.minPos:-180,r.maxX=+r.options.maxPos||180,r.maxX=typeof r.options.maxPos<"u"&&!Number.isNaN(+r.options.maxPos)?+r.options.maxPos:180,r.minY=r.options.minY||r.minX,r.maxY=r.options.maxY||r.maxX,r.maxZoom=19,r.maxWidth=r.maxX-r.minX,r.animate=C,r.uuid=cg.nice(),r.refreshTilesDebounced=LQ(r.refreshTiles.bind(SWe(r)),vX),r}return Gxt(i,[{key:"visibleAndFetchedIds",value:function(){return Object.keys(this.fetchedTiles).filter(n=>this.visibleTileIds.has(n))}},{key:"visibleAndFetchedTiles",value:function(){return this.visibleAndFetchedIds().map(n=>this.fetchedTiles[n])}},{key:"setVisibleTiles",value:function(n){this.visibleTiles=n.map(r=>({tileId:this.tileToLocalId(r),remoteId:this.tileToRemoteId(r),mirrored:r.mirrored})),this.visibleTileIds=new Set(this.visibleTiles.map(r=>r.tileId))}},{key:"removeAllTiles",value:function(){const n=new Set(Object.keys(this.fetchedTiles));this.removeTiles([...n])}},{key:"refreshTiles",value:function(){this.calculateVisibleTiles();const n=new Set(Object.keys(this.fetchedTiles)),r=[...this.visibleTiles].filter(o=>!this.fetching.has(o.remoteId)&&!n.has(o.tileId));for(let o=0;o!this.visibleTileIds.has(o));this.removeTiles(C),this.fetchNewTiles(r)}},{key:"removeTiles",value:function(n){n.length&&this.areAllVisibleTilesLoaded()&&(n.forEach(r=>{const C=r;this.destroyTile(this.fetchedTiles[C]),C in this.tileGraphics&&(this.pMain.removeChild(this.tileGraphics[C]),delete this.tileGraphics[C]),delete this.fetchedTiles[C]}),this.synchronizeTilesAndGraphics(),this.draw())}},{key:"tileToLocalId",value:function(n){return n.join(".")}},{key:"tileToRemoteId",value:function(n){return n.join(".")}},{key:"localToRemoteId",value:function(n){const r=n.split(".");return r.slice(0,r.length-1).join(".")}},{key:"calculateZoomLevel",value:function(){const n=vt.calculateZoomLevel(this._xScale,this.minX,this.maxX),r=vt.calculateZoomLevel(this._xScale,this.minY,this.maxY);let C=Math.min(Math.max(n,r),this.maxZoom);return this.options.maxZoom&&(this.options.maxZoom>=0?C=Math.min(this.options.maxZoom,C):console.error("Invalid maxZoom on track:",this)),C}},{key:"calculateVisibleTiles",value:function(){this.zoomLevel=this.calculateZoomLevel(),this.xTiles=vt.calculateTiles(this.zoomLevel,this._xScale,this.minX,this.maxX,this.maxZoom,this.maxWidth),this.yTiles=vt.calculateTiles(this.zoomLevel,this._yScale,this.minY,this.maxY,this.maxZoom,this.maxWidth);const n=this.xTiles,r=this.yTiles,C=this.zoomLevel,o=[];for(let a=0;a0){const r=[...new Set(n.map(C=>C.remoteId))];for(const C of r){const o=C.split("."),a=this.getTileUrl(o),s=new Image;s.crossOrigin="Anonymous",s.src=a,s.onload=()=>{const A={};A[C]={tileId:C,img:s,zoomLevel:+o[0],tilePos:[+o[1],+o[2]],tileSrc:a},this.receivedTiles(A)}}}}},{key:"receivedTiles",value:function(n){for(let r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function a0(e){return a0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},a0(e)}let wWe=function(e){Yxt(i,e);var g=Kxt(i);function i(){return Xxt(this,i),g.apply(this,arguments)}return Hxt(i,[{key:"initTile",value:function(n){i1e.bind(this)(n),this.drawTile(n)}},{key:"drawTile",value:function(n){g1e.bind(this)(n)}},{key:"areAllVisibleTilesLoaded",value:function(){return!0}},{key:"fetchNewTiles",value:function(n){n.forEach(r=>{const o=r.remoteId.split("."),a={zoomLevel:o[0],tilePos:o.slice(1,o.length).map(s=>+s)};this.fetchedTiles[r.tileId]=r,this.fetchedTiles[r.tileId].tileData=a,this.fetching.has(r.remoteId)&&this.fetching.delete(r.remoteId)}),this.synchronizeTilesAndGraphics(),this.draw(),this.animate()}},{key:"draw",value:function(){wW(a0(i.prototype),"draw",this).call(this)}}]),i}(Zw);function Ext(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Vae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function A0(e){return A0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},A0(e)}let RWe=function(e){Oxt(i,e);var g=_xt(i);function i(I,n){var r;return Ext(this,i),r=g.call(this,I,n),r.style=n.style,r.options.accessToken||(r.errorTextText="No access token provided in the viewconf's track options ('accessToken' option).",r.drawError()),r}return Mxt(i,[{key:"rerender",value:function(n){RW(A0(i.prototype),"rerender",this).call(this,n),n.style!==this.style&&(this.style=n.style,this.removeAllTiles(),this.refreshTiles())}},{key:"getTileUrl",value:function(n){const r=this.options&&this.options.style?this.options.style:"streets-v10",C=this.options&&+this.options.tileSize?+this.options.tileSize:256;return`https://api.mapbox.com/styles/v1/mapbox/${r}/tiles/${C}/${n[0]}/${n[1]}/${n[2]}?access_token=${this.options.accessToken}`}}]),i}(Zw);function jxt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Wae(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function l2(e){return l2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},l2(e)}let VWe=function(e){tEt(i,e);var g=gEt(i);function i(I,n){var r;return jxt(this,i),r=g.call(this,I,n),r.style=n.style,r.options.tileSource||(r.errorTextText="No tile source string provided in the options. It should be in the form of http://a.com/{z}/{x}/{y}",r.drawError()),r}return $xt(i,[{key:"getTileUrl",value:function(n){let r=this.options.tileSource.replace("{z}",n[0]);return r=r.replace("{x}",n[1]),r=r.replace("{y}",n[2]),r}}]),i}(Zw);const rEt=(e,g,i,I=eH)=>{const n=i[e.type];return n?new n.dataFetcher(I,e,g):e.type==="genbank"?new e1e(e,g):e.type==="local-tiles"?new t1e(e,g):new Xk(e,g)};var zt=1e-6,IS=1e-12,ag=Math.PI,$i=ag/2,c2=ag/4,sr=ag*2,gi=180/ag,Ot=ag/180,Rg=Math.abs,sy=Math.atan,lr=Math.atan2,Tt=Math.cos,MV=Math.ceil,WWe=Math.exp,VJ=Math.hypot,u2=Math.log,Cx=Math.pow,Bt=Math.sin,$C=Math.sign||function(e){return e>0?1:e<0?-1:0},jI=Math.sqrt,kj=Math.tan;function XWe(e){return e>1?0:e<-1?ag:Math.acos(e)}function cr(e){return e>1?$i:e<-1?-$i:Math.asin(e)}function Xae(e){return(e=Bt(e/2))*e}function Ei(){}function d2(e,g){e&&Tae.hasOwnProperty(e.type)&&Tae[e.type](e,g)}var Hae={Feature:function(e,g){d2(e.geometry,g)},FeatureCollection:function(e,g){for(var i=e.features,I=-1,n=i.length;++I=0?1:-1,n=I*i,r=Tt(g),C=Bt(g),o=TJ*C,a=HJ*r+o*Tt(n),s=o*I*Bt(n);h2.add(lr(s,a)),XJ=e,HJ=r,TJ=C}function AEt(e){return m2=new YI,$o(e,wA),m2*2}function f2(e){return[lr(e[1],e[0]),cr(e[2])]}function Nh(e){var g=e[0],i=e[1],I=Tt(i);return[I*Tt(g),I*Bt(g),Bt(i)]}function zV(e,g){return e[0]*g[0]+e[1]*g[1]+e[2]*g[2]}function s0(e,g){return[e[1]*g[2]-e[2]*g[1],e[2]*g[0]-e[0]*g[2],e[0]*g[1]-e[1]*g[0]]}function ox(e,g){e[0]+=g[0],e[1]+=g[1],e[2]+=g[2]}function PV(e,g){return[e[0]*g,e[1]*g,e[2]*g]}function p2(e){var g=jI(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);e[0]/=g,e[1]/=g,e[2]/=g}var Ki,Tr,Qi,CC,qu,kWe,YWe,jp,Xv,_l,_s,os={point:NJ,lineStart:kae,lineEnd:Yae,polygonStart:function(){os.point=FWe,os.lineStart=sEt,os.lineEnd=lEt,Xv=new YI,wA.polygonStart()},polygonEnd:function(){wA.polygonEnd(),os.point=NJ,os.lineStart=kae,os.lineEnd=Yae,h2<0?(Ki=-(Qi=180),Tr=-(CC=90)):Xv>zt?CC=90:Xv<-zt&&(Tr=-90),_s[0]=Ki,_s[1]=Qi},sphere:function(){Ki=-(Qi=180),Tr=-(CC=90)}};function NJ(e,g){_l.push(_s=[Ki=e,Qi=e]),gCC&&(CC=g)}function KWe(e,g){var i=Nh([e*Ot,g*Ot]);if(jp){var I=s0(jp,i),n=[I[1],-I[0],0],r=s0(n,I);p2(r),r=f2(r);var C=e-qu,o=C>0?1:-1,a=r[0]*gi*o,s,A=Rg(C)>180;A^(o*quCC&&(CC=s)):(a=(a+360)%360-180,A^(o*quCC&&(CC=g))),A?eiC(Ki,Qi)&&(Qi=e):iC(e,Qi)>iC(Ki,Qi)&&(Ki=e):Qi>=Ki?(eQi&&(Qi=e)):e>qu?iC(Ki,e)>iC(Ki,Qi)&&(Qi=e):iC(e,Qi)>iC(Ki,Qi)&&(Ki=e)}else _l.push(_s=[Ki=e,Qi=e]);gCC&&(CC=g),jp=i,qu=e}function kae(){os.point=KWe}function Yae(){_s[0]=Ki,_s[1]=Qi,os.point=NJ,jp=null}function FWe(e,g){if(jp){var i=e-qu;Xv.add(Rg(i)>180?i+(i>0?360:-360):i)}else kWe=e,YWe=g;wA.point(e,g),KWe(e,g)}function sEt(){wA.lineStart()}function lEt(){FWe(kWe,YWe),wA.lineEnd(),Rg(Xv)>zt&&(Ki=-(Qi=180)),_s[0]=Ki,_s[1]=Qi,jp=null}function iC(e,g){return(g-=e)<0?g+360:g}function cEt(e,g){return e[0]-g[0]}function Kae(e,g){return e[0]<=e[1]?e[0]<=g&&g<=e[1]:giC(I[0],I[1])&&(I[1]=n[1]),iC(n[0],I[1])>iC(I[0],I[1])&&(I[0]=n[0])):r.push(I=n);for(C=-1/0,i=r.length-1,g=0,I=r[i];g<=i;I=n,++g)n=r[g],(o=iC(I[1],n[0]))>C&&(C=o,Ki=n[0],Qi=I[1])}return _l=_s=null,Ki===1/0||Tr===1/0?[[NaN,NaN],[NaN,NaN]]:[[Ki,Tr],[Qi,CC]]}var AG,b2,y2,Z2,G2,v2,B2,S2,kJ,YJ,KJ,DWe,xWe,er,tr,gr,ga={sphere:Ei,point:Yj,lineStart:Fae,lineEnd:Dae,polygonStart:function(){ga.lineStart=mEt,ga.lineEnd=fEt},polygonEnd:function(){ga.lineStart=Fae,ga.lineEnd=Dae}};function Yj(e,g){e*=Ot,g*=Ot;var i=Tt(g);Gw(i*Tt(e),i*Bt(e),Bt(g))}function Gw(e,g,i){++AG,y2+=(e-y2)/AG,Z2+=(g-Z2)/AG,G2+=(i-G2)/AG}function Fae(){ga.point=dEt}function dEt(e,g){e*=Ot,g*=Ot;var i=Tt(g);er=i*Tt(e),tr=i*Bt(e),gr=Bt(g),ga.point=hEt,Gw(er,tr,gr)}function hEt(e,g){e*=Ot,g*=Ot;var i=Tt(g),I=i*Tt(e),n=i*Bt(e),r=Bt(g),C=lr(jI((C=tr*r-gr*n)*C+(C=gr*I-er*r)*C+(C=er*n-tr*I)*C),er*I+tr*n+gr*r);b2+=C,v2+=C*(er+(er=I)),B2+=C*(tr+(tr=n)),S2+=C*(gr+(gr=r)),Gw(er,tr,gr)}function Dae(){ga.point=Yj}function mEt(){ga.point=pEt}function fEt(){EWe(DWe,xWe),ga.point=Yj}function pEt(e,g){DWe=e,xWe=g,e*=Ot,g*=Ot,ga.point=EWe;var i=Tt(g);er=i*Tt(e),tr=i*Bt(e),gr=Bt(g),Gw(er,tr,gr)}function EWe(e,g){e*=Ot,g*=Ot;var i=Tt(g),I=i*Tt(e),n=i*Bt(e),r=Bt(g),C=tr*r-gr*n,o=gr*I-er*r,a=er*n-tr*I,s=VJ(C,o,a),A=cr(s),l=s&&-A/s;kJ.add(l*C),YJ.add(l*o),KJ.add(l*a),b2+=A,v2+=A*(er+(er=I)),B2+=A*(tr+(tr=n)),S2+=A*(gr+(gr=r)),Gw(er,tr,gr)}function bEt(e){AG=b2=y2=Z2=G2=v2=B2=S2=0,kJ=new YI,YJ=new YI,KJ=new YI,$o(e,ga);var g=+kJ,i=+YJ,I=+KJ,n=VJ(g,i,I);return nag?e+Math.round(-e/sr)*sr:e,g]}DJ.invert=DJ;function Kj(e,g,i){return(e%=sr)?g||i?FJ(Eae(e),Mae(g,i)):Eae(e):g||i?Mae(g,i):DJ}function xae(e){return function(g,i){return g+=e,[g>ag?g-sr:g<-ag?g+sr:g,i]}}function Eae(e){var g=xae(e);return g.invert=xae(-e),g}function Mae(e,g){var i=Tt(e),I=Bt(e),n=Tt(g),r=Bt(g);function C(o,a){var s=Tt(a),A=Tt(o)*s,l=Bt(o)*s,c=Bt(a),u=c*i+A*I;return[lr(l*n-u*r,A*i-c*I),cr(u*n+l*r)]}return C.invert=function(o,a){var s=Tt(a),A=Tt(o)*s,l=Bt(o)*s,c=Bt(a),u=c*n-l*r;return[lr(l*n+c*r,A*i+u*I),cr(u*i-A*I)]},C}function MWe(e){e=Kj(e[0]*Ot,e[1]*Ot,e.length>2?e[2]*Ot:0);function g(i){return i=e(i[0]*Ot,i[1]*Ot),i[0]*=gi,i[1]*=gi,i}return g.invert=function(i){return i=e.invert(i[0]*Ot,i[1]*Ot),i[0]*=gi,i[1]*=gi,i},g}function zWe(e,g,i,I,n,r){if(i){var C=Tt(g),o=Bt(g),a=I*i;n==null?(n=g+I*sr,r=g-a/2):(n=zae(C,n),r=zae(C,r),(I>0?nr)&&(n+=I*sr));for(var s,A=n;I>0?A>r:A1&&e.push(e.pop().concat(e.shift()))},result:function(){var i=e;return e=[],g=null,i}}}function VW(e,g){return Rg(e[0]-g[0])=0;--o)n.point((l=A[o])[0],l[1]);else I(c.x,c.p.x,-1,n);c=c.p}c=c.o,A=c.z,u=!u}while(!c.v);n.lineEnd()}}}function Pae(e){if(g=e.length){for(var g,i=0,I=e[0],n;++i=0?1:-1,V=w*v,S=V>ag,X=m*B;if(a.add(lr(X*w*Bt(V),f*G+X*Tt(V))),C+=S?v+w*sr:v,S^d>=i^y>=i){var W=s0(Nh(u),Nh(p));p2(W);var R=s0(r,W);p2(R);var H=(S^v>=0?-1:1)*cr(R[2]);(I>H||I===H&&(W[0]||W[1]))&&(o+=S^v>=0?1:-1)}}return(C<-zt||C0){for(a||(n.polygonStart(),a=!0),n.lineStart(),B=0;B1&&y&2&&Z.push(Z.pop().concat(Z.shift())),A.push(Z.filter(ZEt))}}return c}}function ZEt(e){return e.length>1}function GEt(e,g){return((e=e.x)[0]<0?e[1]-$i-zt:$i-e[1])-((g=g.x)[0]<0?g[1]-$i-zt:$i-g[1])}const xJ=_We(function(){return!0},vEt,SEt,[-ag,-$i]);function vEt(e){var g=NaN,i=NaN,I=NaN,n;return{lineStart:function(){e.lineStart(),n=1},point:function(r,C){var o=r>0?ag:-ag,a=Rg(r-g);Rg(a-ag)0?$i:-$i),e.point(I,i),e.lineEnd(),e.lineStart(),e.point(o,i),e.point(r,i),n=0):I!==o&&a>=ag&&(Rg(g-I)zt?sy((Bt(g)*(r=Tt(I))*Bt(i)-Bt(I)*(n=Tt(g))*Bt(e))/(n*r*C)):(g+I)/2}function SEt(e,g,i,I){var n;if(e==null)n=i*$i,I.point(-ag,n),I.point(0,n),I.point(ag,n),I.point(ag,0),I.point(ag,-n),I.point(0,-n),I.point(-ag,-n),I.point(-ag,0),I.point(-ag,n);else if(Rg(e[0]-g[0])>zt){var r=e[0]0,n=Rg(g)>zt;function r(A,l,c,u){zWe(u,e,i,c,A,l)}function C(A,l){return Tt(A)*Tt(l)>g}function o(A){var l,c,u,d,h;return{lineStart:function(){d=u=!1,h=1},point:function(m,f){var b=[m,f],p,y=C(m,f),Z=I?y?0:s(m,f):y?s(m+(m<0?ag:-ag),f):0;if(!l&&(d=u=y)&&A.lineStart(),y!==u&&(p=a(l,b),(!p||VW(l,p)||VW(b,p))&&(b[2]=1)),y!==u)h=0,y?(A.lineStart(),p=a(b,l),A.point(p[0],p[1])):(p=a(l,b),A.point(p[0],p[1],2),A.lineEnd()),l=p;else if(n&&l&&I^y){var B;!(Z&c)&&(B=a(b,l,!0))&&(h=0,I?(A.lineStart(),A.point(B[0][0],B[0][1]),A.point(B[1][0],B[1][1]),A.lineEnd()):(A.point(B[1][0],B[1][1]),A.lineEnd(),A.lineStart(),A.point(B[0][0],B[0][1],3)))}y&&(!l||!VW(l,b))&&A.point(b[0],b[1]),l=b,u=y,c=Z},lineEnd:function(){u&&A.lineEnd(),l=null},clean:function(){return h|(d&&u)<<1}}}function a(A,l,c){var u=Nh(A),d=Nh(l),h=[1,0,0],m=s0(u,d),f=zV(m,m),b=m[0],p=f-b*b;if(!p)return!c&&A;var y=g*f/p,Z=-g*b/p,B=s0(h,m),G=PV(h,y),v=PV(m,Z);ox(G,v);var w=B,V=zV(G,w),S=zV(w,w),X=V*V-S*(zV(G,G)-1);if(!(X<0)){var W=jI(X),R=PV(w,(-V-W)/S);if(ox(R,G),R=f2(R),!c)return R;var H=A[0],k=l[0],K=A[1],D=l[1],J;k0^R[1]<(Rg(R[0]-H)ag^(H<=R[0]&&R[0]<=k)){var $=PV(w,(-V+W)/S);return ox($,G),[R,f2($)]}}}function s(A,l){var c=I?e:ag-e,u=0;return A<-c?u|=1:A>c&&(u|=2),l<-c?u|=4:l>c&&(u|=8),u}return _We(C,o,r,I?[0,-e]:[-ag,e-ag])}function wEt(e,g,i,I,n,r){var C=e[0],o=e[1],a=g[0],s=g[1],A=0,l=1,c=a-C,u=s-o,d;if(d=i-C,!(!c&&d>0)){if(d/=c,c<0){if(d0){if(d>l)return;d>A&&(A=d)}if(d=n-C,!(!c&&d<0)){if(d/=c,c<0){if(d>l)return;d>A&&(A=d)}else if(c>0){if(d0)){if(d/=u,u<0){if(d0){if(d>l)return;d>A&&(A=d)}if(d=r-o,!(!u&&d<0)){if(d/=u,u<0){if(d>l)return;d>A&&(A=d)}else if(u>0){if(d0&&(e[0]=C+A*c,e[1]=o+A*u),l<1&&(g[0]=C+l*c,g[1]=o+l*u),!0}}}}}var sG=1e9,OV=-sG;function Ek(e,g,i,I){function n(s,A){return e<=s&&s<=i&&g<=A&&A<=I}function r(s,A,l,c){var u=0,d=0;if(s==null||(u=C(s,l))!==(d=C(A,l))||a(s,A)<0^l>0)do c.point(u===0||u===3?e:i,u>1?I:g);while((u=(u+l+4)%4)!==d);else c.point(A[0],A[1])}function C(s,A){return Rg(s[0]-e)0?0:3:Rg(s[0]-i)0?2:1:Rg(s[1]-g)0?1:0:A>0?3:2}function o(s,A){return a(s.x,A.x)}function a(s,A){var l=C(s,1),c=C(A,1);return l!==c?l-c:l===0?A[1]-s[1]:l===1?s[0]-A[0]:l===2?s[1]-A[1]:A[0]-s[0]}return function(s){var A=s,l=PWe(),c,u,d,h,m,f,b,p,y,Z,B,G={point:v,lineStart:X,lineEnd:W,polygonStart:V,polygonEnd:S};function v(H,k){n(H,k)&&A.point(H,k)}function w(){for(var H=0,k=0,K=u.length;kI&&(j-q)*(I-$)>(ge-$)*(e-q)&&++H:ge<=I&&(j-q)*(I-$)<(ge-$)*(e-q)&&--H;return H}function V(){A=l,c=[],u=[],B=!0}function S(){var H=w(),k=B&&H,K=(c=L7(c)).length;(k||K)&&(s.polygonStart(),k&&(s.lineStart(),r(null,null,1,s),s.lineEnd()),K&&JWe(c,o,H,r,s),s.polygonEnd()),A=s,c=u=d=null}function X(){G.point=R,u&&u.push(d=[]),Z=!0,y=!1,b=p=NaN}function W(){c&&(R(h,m),f&&y&&l.rejoin(),c.push(l.result())),G.point=v,y&&A.lineEnd()}function R(H,k){var K=n(H,k);if(u&&d.push([H,k]),Z)h=H,m=k,f=K,Z=!1,K&&(A.lineStart(),A.point(H,k));else if(K&&y)A.point(H,k);else{var D=[b=Math.max(OV,Math.min(sG,b)),p=Math.max(OV,Math.min(sG,p))],J=[H=Math.max(OV,Math.min(sG,H)),k=Math.max(OV,Math.min(sG,k))];wEt(D,J,e,g,i,I)?(y||(A.lineStart(),A.point(D[0],D[1])),A.point(J[0],J[1]),K||A.lineEnd(),B=!1):K&&(A.lineStart(),A.point(H,k),B=!1)}b=H,p=k,y=K}return G}}function REt(){var e=0,g=0,i=960,I=500,n,r,C;return C={stream:function(o){return n&&r===o?n:n=Ek(e,g,i,I)(r=o)},extent:function(o){return arguments.length?(e=+o[0][0],g=+o[0][1],i=+o[1][0],I=+o[1][1],n=r=null,C):[[e,g],[i,I]]}}}var EJ,MJ,WW,XW,l0={sphere:Ei,point:Ei,lineStart:VEt,lineEnd:Ei,polygonStart:Ei,polygonEnd:Ei};function VEt(){l0.point=XEt,l0.lineEnd=WEt}function WEt(){l0.point=l0.lineEnd=Ei}function XEt(e,g){e*=Ot,g*=Ot,MJ=e,WW=Bt(g),XW=Tt(g),l0.point=HEt}function HEt(e,g){e*=Ot,g*=Ot;var i=Bt(g),I=Tt(g),n=Rg(e-MJ),r=Tt(n),C=Bt(n),o=I*C,a=XW*i-WW*I*r,s=WW*i+XW*I*r;EJ.add(lr(jI(o*o+a*a),s)),MJ=e,WW=i,XW=I}function UWe(e){return EJ=new YI,$o(e,l0),+EJ}var zJ=[null,null],TEt={type:"LineString",coordinates:zJ};function w2(e,g){return zJ[0]=e,zJ[1]=g,UWe(TEt)}var Jae={Feature:function(e,g){return R2(e.geometry,g)},FeatureCollection:function(e,g){for(var i=e.features,I=-1,n=i.length;++I0&&(n=w2(e[r],e[r-1]),n>0&&i<=n&&I<=n&&(i+I-n)*(1-Math.pow((i-I)/n,2))zt}).map(c)).concat(nr(MV(r/s)*s,n,s).filter(function(p){return Rg(p%l)>zt}).map(u))}return f.lines=function(){return b().map(function(p){return{type:"LineString",coordinates:p}})},f.outline=function(){return{type:"Polygon",coordinates:[d(I).concat(h(C).slice(1),d(i).reverse().slice(1),h(o).reverse().slice(1))]}},f.extent=function(p){return arguments.length?f.extentMajor(p).extentMinor(p):f.extentMinor()},f.extentMajor=function(p){return arguments.length?(I=+p[0][0],i=+p[1][0],o=+p[0][1],C=+p[1][1],I>i&&(p=I,I=i,i=p),o>C&&(p=o,o=C,C=p),f.precision(m)):[[I,o],[i,C]]},f.extentMinor=function(p){return arguments.length?(g=+p[0][0],e=+p[1][0],r=+p[0][1],n=+p[1][1],g>e&&(p=g,g=e,e=p),r>n&&(p=r,r=n,n=p),f.precision(m)):[[g,r],[e,n]]},f.step=function(p){return arguments.length?f.stepMajor(p).stepMinor(p):f.stepMinor()},f.stepMajor=function(p){return arguments.length?(A=+p[0],l=+p[1],f):[A,l]},f.stepMinor=function(p){return arguments.length?(a=+p[0],s=+p[1],f):[a,s]},f.precision=function(p){return arguments.length?(m=+p,c=Qae(r,n,90),u=jae(g,e,m),d=Qae(o,C,90),h=jae(I,i,m),f):m},f.extentMajor([[-180,-90+zt],[180,90-zt]]).extentMinor([[-180,-80-zt],[180,80+zt]])}function YEt(){return jWe()()}function KEt(e,g){var i=e[0]*Ot,I=e[1]*Ot,n=g[0]*Ot,r=g[1]*Ot,C=Tt(I),o=Bt(I),a=Tt(r),s=Bt(r),A=C*Tt(i),l=C*Bt(i),c=a*Tt(n),u=a*Bt(n),d=2*cr(jI(Xae(r-I)+C*a*Xae(n-i))),h=Bt(d),m=d?function(f){var b=Bt(f*=d)/h,p=Bt(d-f)/h,y=p*A+b*c,Z=p*l+b*u,B=p*o+b*s;return[lr(Z,y)*gi,lr(B,jI(y*y+Z*Z))*gi]}:function(){return[i*gi,I*gi]};return m.distance=d,m}const nS=e=>e;var Ax=new YI,PJ=new YI,$We,qWe,JJ,OJ,nc={point:Ei,lineStart:Ei,lineEnd:Ei,polygonStart:function(){nc.lineStart=FEt,nc.lineEnd=xEt},polygonEnd:function(){nc.lineStart=nc.lineEnd=nc.point=Ei,Ax.add(Rg(PJ)),PJ=new YI},result:function(){var e=Ax/2;return Ax=new YI,e}};function FEt(){nc.point=DEt}function DEt(e,g){nc.point=e9e,$We=JJ=e,qWe=OJ=g}function e9e(e,g){PJ.add(OJ*e-JJ*g),JJ=e,OJ=g}function xEt(){e9e($We,qWe)}const $ae=nc;var c0=1/0,V2=c0,rS=-c0,W2=rS,EEt={point:MEt,lineStart:Ei,lineEnd:Ei,polygonStart:Ei,polygonEnd:Ei,result:function(){var e=[[c0,V2],[rS,W2]];return rS=W2=-(V2=c0=1/0),e}};function MEt(e,g){erS&&(rS=e),gW2&&(W2=g)}const X2=EEt;var _J=0,LJ=0,lG=0,H2=0,T2=0,lp=0,UJ=0,QJ=0,cG=0,t9e,g9e,IA,nA,qo={point:kh,lineStart:qae,lineEnd:eAe,polygonStart:function(){qo.lineStart=JEt,qo.lineEnd=OEt},polygonEnd:function(){qo.point=kh,qo.lineStart=qae,qo.lineEnd=eAe},result:function(){var e=cG?[UJ/cG,QJ/cG]:lp?[H2/lp,T2/lp]:lG?[_J/lG,LJ/lG]:[NaN,NaN];return _J=LJ=lG=H2=T2=lp=UJ=QJ=cG=0,e}};function kh(e,g){_J+=e,LJ+=g,++lG}function qae(){qo.point=zEt}function zEt(e,g){qo.point=PEt,kh(IA=e,nA=g)}function PEt(e,g){var i=e-IA,I=g-nA,n=jI(i*i+I*I);H2+=n*(IA+e)/2,T2+=n*(nA+g)/2,lp+=n,kh(IA=e,nA=g)}function eAe(){qo.point=kh}function JEt(){qo.point=_Et}function OEt(){i9e(t9e,g9e)}function _Et(e,g){qo.point=i9e,kh(t9e=IA=e,g9e=nA=g)}function i9e(e,g){var i=e-IA,I=g-nA,n=jI(i*i+I*I);H2+=n*(IA+e)/2,T2+=n*(nA+g)/2,lp+=n,n=nA*e-IA*g,UJ+=n*(IA+e),QJ+=n*(nA+g),cG+=n*3,kh(IA=e,nA=g)}const tAe=qo;function I9e(e){this._context=e}I9e.prototype={_radius:4.5,pointRadius:function(e){return this._radius=e,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._context.closePath(),this._point=NaN},point:function(e,g){switch(this._point){case 0:{this._context.moveTo(e,g),this._point=1;break}case 1:{this._context.lineTo(e,g);break}default:{this._context.moveTo(e+this._radius,g),this._context.arc(e,g,this._radius,0,sr);break}}},result:Ei};var jJ=new YI,sx,n9e,r9e,uG,dG,N2={point:Ei,lineStart:function(){N2.point=LEt},lineEnd:function(){sx&&C9e(n9e,r9e),N2.point=Ei},polygonStart:function(){sx=!0},polygonEnd:function(){sx=null},result:function(){var e=+jJ;return jJ=new YI,e}};function LEt(e,g){N2.point=C9e,n9e=uG=e,r9e=dG=g}function C9e(e,g){uG-=e,dG-=g,jJ.add(jI(uG*uG+dG*dG)),uG=e,dG=g}const gAe=N2;function o9e(){this._string=[]}o9e.prototype={_radius:4.5,_circle:iAe(4.5),pointRadius:function(e){return(e=+e)!==this._radius&&(this._radius=e,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._string.push("Z"),this._point=NaN},point:function(e,g){switch(this._point){case 0:{this._string.push("M",e,",",g),this._point=1;break}case 1:{this._string.push("L",e,",",g);break}default:{this._circle==null&&(this._circle=iAe(this._radius)),this._string.push("M",e,",",g,this._circle);break}}},result:function(){if(this._string.length){var e=this._string.join("");return this._string=[],e}else return null}};function iAe(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+-2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}function UEt(e,g){var i=4.5,I,n;function r(C){return C&&(typeof i=="function"&&n.pointRadius(+i.apply(this,arguments)),$o(C,I(n))),n.result()}return r.area=function(C){return $o(C,I($ae)),$ae.result()},r.measure=function(C){return $o(C,I(gAe)),gAe.result()},r.bounds=function(C){return $o(C,I(X2)),X2.result()},r.centroid=function(C){return $o(C,I(tAe)),tAe.result()},r.projection=function(C){return arguments.length?(I=C==null?(e=null,nS):(e=C).stream,r):e},r.context=function(C){return arguments.length?(n=C==null?(g=null,new o9e):new I9e(g=C),typeof i!="function"&&n.pointRadius(i),r):g},r.pointRadius=function(C){return arguments.length?(i=typeof C=="function"?C:(n.pointRadius(+C),+C),r):i},r.projection(e).context(g)}function QEt(e){return{stream:vw(e)}}function vw(e){return function(g){var i=new $J;for(var I in e)i[I]=e[I];return i.stream=g,i}}function $J(){}$J.prototype={constructor:$J,point:function(e,g){this.stream.point(e,g)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};function Fj(e,g,i){var I=e.clipExtent&&e.clipExtent();return e.scale(150).translate([0,0]),I!=null&&e.clipExtent(null),$o(i,e.stream(X2)),g(X2.result()),I!=null&&e.clipExtent(I),e}function Mk(e,g,i){return Fj(e,function(I){var n=g[1][0]-g[0][0],r=g[1][1]-g[0][1],C=Math.min(n/(I[1][0]-I[0][0]),r/(I[1][1]-I[0][1])),o=+g[0][0]+(n-C*(I[1][0]+I[0][0]))/2,a=+g[0][1]+(r-C*(I[1][1]+I[0][1]))/2;e.scale(150*C).translate([o,a])},i)}function Dj(e,g,i){return Mk(e,[[0,0],g],i)}function xj(e,g,i){return Fj(e,function(I){var n=+g,r=n/(I[1][0]-I[0][0]),C=(n-r*(I[1][0]+I[0][0]))/2,o=-r*I[0][1];e.scale(150*r).translate([C,o])},i)}function Ej(e,g,i){return Fj(e,function(I){var n=+g,r=n/(I[1][1]-I[0][1]),C=-r*I[0][0],o=(n-r*(I[1][1]+I[0][1]))/2;e.scale(150*r).translate([C,o])},i)}var IAe=16,jEt=Tt(30*Ot);function nAe(e,g){return+g?qEt(e,g):$Et(e)}function $Et(e){return vw({point:function(g,i){g=e(g,i),this.stream.point(g[0],g[1])}})}function qEt(e,g){function i(I,n,r,C,o,a,s,A,l,c,u,d,h,m){var f=s-I,b=A-n,p=f*f+b*b;if(p>4*g&&h--){var y=C+c,Z=o+u,B=a+d,G=jI(y*y+Z*Z+B*B),v=cr(B/=G),w=Rg(Rg(B)-1)g||Rg((f*W+b*R)/p-.5)>.3||C*c+o*u+a*d2?H[2]%360*Ot:0,W()):[o*gi,a*gi,s*gi]},S.angle=function(H){return arguments.length?(l=H%360*Ot,W()):l*gi},S.reflectX=function(H){return arguments.length?(c=H?-1:1,W()):c<0},S.reflectY=function(H){return arguments.length?(u=H?-1:1,W()):u<0},S.precision=function(H){return arguments.length?(B=nAe(G,Z=H*H),R()):jI(Z)},S.fitExtent=function(H,k){return Mk(S,H,k)},S.fitSize=function(H,k){return Dj(S,H,k)},S.fitWidth=function(H,k){return xj(S,H,k)},S.fitHeight=function(H,k){return Ej(S,H,k)};function W(){var H=rAe(i,0,0,c,u,l).apply(null,g(r,C)),k=rAe(i,I-H[0],n-H[1],c,u,l);return A=Kj(o,a,s),G=FJ(g,k),v=FJ(A,G),B=nAe(G,Z),R()}function R(){return w=V=null,S}return function(){return g=e.apply(this,arguments),S.invert=g.invert&&X,W()}}function zj(e){var g=0,i=ag/3,I=Mj(e),n=I(g,i);return n.parallels=function(r){return arguments.length?I(g=r[0]*Ot,i=r[1]*Ot):[g*gi,i*gi]},n}function iMt(e){var g=Tt(e);function i(I,n){return[I*g,Bt(n)/g]}return i.invert=function(I,n){return[I/g,cr(n*g)]},i}function a9e(e,g){var i=Bt(e),I=(i+Bt(g))/2;if(Rg(I)=.12&&m<.234&&h>=-.425&&h<-.214?n:m>=.166&&m<.234&&h>=-.214&&h<-.115?C:i).invert(c)},A.stream=function(c){return e&&g===c?e:e=IMt([i.stream(g=c),n.stream(c),C.stream(c)])},A.precision=function(c){return arguments.length?(i.precision(c),n.precision(c),C.precision(c),l()):i.precision()},A.scale=function(c){return arguments.length?(i.scale(c),n.scale(c*.35),C.scale(c),A.translate(i.translate())):i.scale()},A.translate=function(c){if(!arguments.length)return i.translate();var u=i.scale(),d=+c[0],h=+c[1];return I=i.translate(c).clipExtent([[d-.455*u,h-.238*u],[d+.455*u,h+.238*u]]).stream(s),r=n.translate([d-.307*u,h+.201*u]).clipExtent([[d-.425*u+zt,h+.12*u+zt],[d-.214*u-zt,h+.234*u-zt]]).stream(s),o=C.translate([d-.205*u,h+.212*u]).clipExtent([[d-.214*u+zt,h+.166*u+zt],[d-.115*u-zt,h+.234*u-zt]]).stream(s),l()},A.fitExtent=function(c,u){return Mk(A,c,u)},A.fitSize=function(c,u){return Dj(A,c,u)},A.fitWidth=function(c,u){return xj(A,c,u)},A.fitHeight=function(c,u){return Ej(A,c,u)};function l(){return e=g=null,A}return A.scale(1070)}function s9e(e){return function(g,i){var I=Tt(g),n=Tt(i),r=e(I*n);return r===1/0?[2,0]:[r*n*Bt(g),r*Bt(i)]}}function Bw(e){return function(g,i){var I=jI(g*g+i*i),n=e(I),r=Bt(n),C=Tt(n);return[lr(g*r,I*C),cr(I&&i*r/I)]}}var Pj=s9e(function(e){return jI(2/(1+e))});Pj.invert=Bw(function(e){return 2*cr(e/2)});function rMt(){return KA(Pj).scale(124.75).clipAngle(180-.001)}var Jj=s9e(function(e){return(e=XWe(e))&&e/Bt(e)});Jj.invert=Bw(function(e){return e});function CMt(){return KA(Jj).scale(79.4188).clipAngle(180-.001)}function Sw(e,g){return[e,u2(kj(($i+g)/2))]}Sw.invert=function(e,g){return[e,2*sy(WWe(g))-$i]};function oMt(){return l9e(Sw).scale(961/sr)}function l9e(e){var g=KA(e),i=g.center,I=g.scale,n=g.translate,r=g.clipExtent,C=null,o,a,s;g.scale=function(l){return arguments.length?(I(l),A()):I()},g.translate=function(l){return arguments.length?(n(l),A()):n()},g.center=function(l){return arguments.length?(i(l),A()):i()},g.clipExtent=function(l){return arguments.length?(l==null?C=o=a=s=null:(C=+l[0][0],o=+l[0][1],a=+l[1][0],s=+l[1][1]),A()):C==null?null:[[C,o],[a,s]]};function A(){var l=ag*I(),c=g(MWe(g.rotate()).invert([0,0]));return r(C==null?[[c[0]-l,c[1]-l],[c[0]+l,c[1]+l]]:e===Sw?[[Math.max(c[0]-l,C),o],[Math.min(c[0]+l,a),s]]:[[C,Math.max(c[1]-l,o)],[a,Math.min(c[1]+l,s)]])}return A()}function _V(e){return kj(($i+e)/2)}function c9e(e,g){var i=Tt(e),I=e===g?Bt(e):u2(i/Tt(g))/u2(_V(g)/_V(e)),n=i*Cx(_V(e),I)/I;if(!I)return Sw;function r(C,o){n>0?o<-$i+zt&&(o=-$i+zt):o>$i-zt&&(o=$i-zt);var a=n/Cx(_V(o),I);return[a*Bt(I*C),n-a*Tt(I*C)]}return r.invert=function(C,o){var a=n-o,s=$C(I)*jI(C*C+a*a),A=lr(C,Rg(a))*$C(a);return a*I<0&&(A-=ag*$C(C)*$C(a)),[A/I,2*sy(Cx(n/s,1/I))-$i]},r}function aMt(){return zj(c9e).scale(109.5).parallels([30,30])}function CS(e,g){return[e,g]}CS.invert=CS;function AMt(){return KA(CS).scale(152.63)}function u9e(e,g){var i=Tt(e),I=e===g?Bt(e):(i-Tt(g))/(g-e),n=i/I+e;if(Rg(I)zt&&--I>0);return[e/(.8707+(r=i*i)*(-.131979+r*(-.013791+r*r*r*(.003971-.001529*r)))),i]};function hMt(){return KA(Lj).scale(175.295)}function Uj(e,g){return[Tt(g)*Bt(e),Bt(g)]}Uj.invert=Bw(cr);function mMt(){return KA(Uj).scale(249.5).clipAngle(90+zt)}function Qj(e,g){var i=Tt(g),I=1+Tt(e)*i;return[i*Bt(e)/I,Bt(g)/I]}Qj.invert=Bw(function(e){return 2*sy(e)});function fMt(){return KA(Qj).scale(250).clipAngle(142)}function jj(e,g){return[u2(kj(($i+g)/2)),-e]}jj.invert=function(e,g){return[-g,2*sy(WWe(e))-$i]};function pMt(){var e=l9e(jj),g=e.center,i=e.rotate;return e.center=function(I){return arguments.length?g([-I[1],I[0]]):(I=g(),[I[1],-I[0]])},e.rotate=function(I){return arguments.length?i([I[0],I[1],I.length>2?I[2]+90:90]):(I=i(),[I[0],I[1],I[2]-90])},i([0,0,90]).scale(159.155)}const bMt=Object.freeze(Object.defineProperty({__proto__:null,geoAlbers:A9e,geoAlbersUsa:nMt,geoArea:AEt,geoAzimuthalEqualArea:rMt,geoAzimuthalEqualAreaRaw:Pj,geoAzimuthalEquidistant:CMt,geoAzimuthalEquidistantRaw:Jj,geoBounds:uEt,geoCentroid:bEt,geoCircle:yEt,geoClipAntimeridian:xJ,geoClipCircle:LWe,geoClipExtent:REt,geoClipRectangle:Ek,geoConicConformal:aMt,geoConicConformalRaw:c9e,geoConicEqualArea:k2,geoConicEqualAreaRaw:a9e,geoConicEquidistant:sMt,geoConicEquidistantRaw:u9e,geoContains:kEt,geoDistance:w2,geoEqualEarth:cMt,geoEqualEarthRaw:Oj,geoEquirectangular:AMt,geoEquirectangularRaw:CS,geoGnomonic:uMt,geoGnomonicRaw:_j,geoGraticule:jWe,geoGraticule10:YEt,geoIdentity:dMt,geoInterpolate:KEt,geoLength:UWe,geoMercator:oMt,geoMercatorRaw:Sw,geoNaturalEarth1:hMt,geoNaturalEarth1Raw:Lj,geoOrthographic:mMt,geoOrthographicRaw:Uj,geoPath:UEt,geoProjection:KA,geoProjectionMutator:Mj,geoRotation:MWe,geoStereographic:fMt,geoStereographicRaw:Qj,geoStream:$o,geoTransform:QEt,geoTransverseMercator:pMt,geoTransverseMercatorRaw:jj},Symbol.toStringTag,{value:"Module"}));var yMt=[].slice,ZMt={};function qJ(e){this._size=e,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}qJ.prototype=h9e.prototype={constructor:qJ,defer:function(e){if(typeof e!="function")throw new Error("invalid callback");if(this._call)throw new Error("defer after await");if(this._error!=null)return this;var g=yMt.call(arguments,1);return g.push(e),++this._waiting,this._tasks.push(g),d9e(this),this},abort:function(){return this._error==null&&$j(this,new Error("abort")),this},await:function(e){if(typeof e!="function")throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=function(g,i){e.apply(null,[g].concat(i))},K2(this),this},awaitAll:function(e){if(typeof e!="function")throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=e,K2(this),this}};function d9e(e){if(!e._start)try{GMt(e)}catch(g){if(e._tasks[e._ended+e._active-1])$j(e,g);else if(!e._data)throw g}}function GMt(e){for(;e._start=e._waiting&&e._active=0;)if((I=e._tasks[i])&&(e._tasks[i]=null,I.abort))try{I.abort()}catch{}e._active=NaN,K2(e)}function K2(e){if(!e._active&&e._call){var g=e._data;e._data=void 0,e._call(e._error,g)}}function h9e(e){if(e==null)e=1/0;else if(!((e=+e)>=1))throw new Error("invalid concurrency");return new qJ(e)}const BMt=Object.freeze(Object.defineProperty({__proto__:null,queue:h9e},Symbol.toStringTag,{value:"Module"}));var VC="$";function F2(){}F2.prototype=qj.prototype={constructor:F2,has:function(e){return VC+e in this},get:function(e){return this[VC+e]},set:function(e,g){return this[VC+e]=g,this},remove:function(e){var g=VC+e;return g in this&&delete this[g]},clear:function(){for(var e in this)e[0]===VC&&delete this[e]},keys:function(){var e=[];for(var g in this)g[0]===VC&&e.push(g.slice(1));return e},values:function(){var e=[];for(var g in this)g[0]===VC&&e.push(this[g]);return e},entries:function(){var e=[];for(var g in this)g[0]===VC&&e.push({key:g.slice(1),value:this[g]});return e},size:function(){var e=0;for(var g in this)g[0]===VC&&++e;return e},empty:function(){for(var e in this)if(e[0]===VC)return!1;return!0},each:function(e){for(var g in this)g[0]===VC&&e(this[g],g.slice(1),this)}};function qj(e,g){var i=new F2;if(e instanceof F2)e.each(function(o,a){i.set(a,o)});else if(Array.isArray(e)){var I=-1,n=e.length,r;if(g==null)for(;++I=0&&(I=i.slice(n+1),i=i.slice(0,n)),i&&!g.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:I}})}HW.prototype=m9e.prototype={constructor:HW,on:function(e,g){var i=this._,I=wMt(e+"",i),n,r=-1,C=I.length;if(arguments.length<2){for(;++r0)for(var i=new Array(n),I=0,n,r;I3&&c(u)};function c(u){var d=C.status,h;if(!d&&WMt(C)||d>=200&&d<300||d===304){if(s)try{h=s.call(i,C)}catch(m){I.call("error",i,m);return}else h=C;I.call("load",i,h)}else I.call("error",i,u)}if(C.onprogress=function(u){I.call("progress",i,u)},i={header:function(u,d){return u=(u+"").toLowerCase(),arguments.length<2?r.get(u):(d==null?r.remove(u):r.set(u,d+""),i)},mimeType:function(u){return arguments.length?(n=u==null?null:u+"",i):n},responseType:function(u){return arguments.length?(A=u,i):A},timeout:function(u){return arguments.length?(l=+u,i):l},user:function(u){return arguments.length<1?o:(o=u==null?null:u+"",i)},password:function(u){return arguments.length<1?a:(a=u==null?null:u+"",i)},response:function(u){return s=u,i},get:function(u,d){return i.send("GET",u,d)},post:function(u,d){return i.send("POST",u,d)},send:function(u,d,h){return C.open(u,e,!0,o,a),n!=null&&!r.has("accept")&&r.set("accept",n+",*/*"),C.setRequestHeader&&r.each(function(m,f){C.setRequestHeader(f,m)}),n!=null&&C.overrideMimeType&&C.overrideMimeType(n),A!=null&&(C.responseType=A),l>0&&(C.timeout=l),h==null&&typeof d=="function"&&(h=d,d=null),h!=null&&h.length===1&&(h=VMt(h)),h!=null&&i.on("error",h).on("load",function(m){h(null,m)}),I.call("beforesend",i,C),C.send(d??null),i},abort:function(){return C.abort(),i},on:function(){var u=I.on.apply(I,arguments);return u===I?i:u}},g!=null){if(typeof g!="function")throw new Error("invalid callback: "+g);return i.get(g)}return i}function VMt(e){return function(g,i){e(g==null?i:null)}}function WMt(e){var g=e.responseType;return g&&g!=="text"?e.response:e.responseText}function zk(e,g){return function(i,I){var n=e$(i).mimeType(e).response(g);if(I!=null){if(typeof I!="function")throw new Error("invalid callback: "+I);return n.get(I)}return n}}const XMt=zk("text/html",function(e){return document.createRange().createContextualFragment(e.responseText)}),HMt=zk("application/json",function(e){return JSON.parse(e.responseText)}),TMt=zk("text/plain",function(e){return e.responseText}),NMt=zk("application/xml",function(e){var g=e.responseXML;if(!g)throw new Error("parse error");return g});var aAe={},lx={},cx=34,pZ=10,ux=13;function f9e(e){return new Function("d","return {"+e.map(function(g,i){return JSON.stringify(g)+": d["+i+'] || ""'}).join(",")+"}")}function kMt(e,g){var i=f9e(e);return function(I,n){return g(i(I),n,e)}}function AAe(e){var g=Object.create(null),i=[];return e.forEach(function(I){for(var n in I)n in g||i.push(g[n]=n)}),i}function wr(e,g){var i=e+"",I=i.length;return I9999?"+"+wr(e,6):wr(e,4)}function KMt(e){var g=e.getUTCHours(),i=e.getUTCMinutes(),I=e.getUTCSeconds(),n=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":YMt(e.getUTCFullYear())+"-"+wr(e.getUTCMonth()+1,2)+"-"+wr(e.getUTCDate(),2)+(n?"T"+wr(g,2)+":"+wr(i,2)+":"+wr(I,2)+"."+wr(n,3)+"Z":I?"T"+wr(g,2)+":"+wr(i,2)+":"+wr(I,2)+"Z":i||g?"T"+wr(g,2)+":"+wr(i,2)+"Z":"")}function p9e(e){var g=new RegExp('["'+e+` +\r]`),i=e.charCodeAt(0);function I(l,c){var u,d,h=n(l,function(m,f){if(u)return u(m,f-1);d=m,u=c?kMt(m,c):f9e(m)});return h.columns=d||[],h}function n(l,c){var u=[],d=l.length,h=0,m=0,f,b=d<=0,p=!1;l.charCodeAt(d-1)===pZ&&--d,l.charCodeAt(d-1)===ux&&--d;function y(){if(b)return lx;if(p)return p=!1,aAe;var B,G=h,v;if(l.charCodeAt(G)===cx){for(;h++=d?b=!0:(v=l.charCodeAt(h++))===pZ?p=!0:v===ux&&(p=!0,l.charCodeAt(h)===pZ&&++h),l.slice(G+1,B-1).replace(/""/g,'"')}for(;h"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Y2(e){return Y2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Y2(e)}let Fk=function(e){MMt(I,e);var g=zMt(I);function I({items:i}){var n;return FMt(this,I),n=g.call(this),n.state={items:i,isSorting:!1},n}return DMt(I,[{key:"UNSAFE_componentWillReceiveProps",value:function(n){this.setState({items:n.items})}},{key:"onSortStart",value:function({node:n,index:C,collection:r},o){o.stopImmediatePropagation();const{onSortStart:a}=this.props;this.setState({isSorting:!0}),a&&a(this.ref),this.sortingIndex=C,this.sortStartTop=o.offsetTop,this.sortStartLeft=o.offsetLeft}},{key:"onSortMove",value:function(){}},{key:"onSortEnd",value:function({oldIndex:n,newIndex:C}){const{onSortEnd:r}=this.props,{items:o}=this.state;this.setState({items:PAt(o,n,C),isSorting:!1}),r&&r(this.state.items),this.sortingIndex=null}},{key:"render",value:function(){const n=this.props.component,{items:C,isSorting:r}=this.state,o={isSorting:r,items:C,onSortEnd:this.onSortEnd.bind(this),onSortStart:this.onSortStart.bind(this),onSortMove:this.onSortMove.bind(this)};return N.createElement(n,LJ({},this.props,o,{ref:a=>{this.ref=a}}))}}]),I}(N.Component);Fk.propTypes={axis:L.string,className:L.string,component:L.func,editable:L.bool,handleConfigTrack:L.func,handleResizeTrack:L.func,height:L.number,helperClass:L.string,itemClass:L.string,itemControlAlignLeft:L.bool,itemReactClass:L.func,items:L.array,onAddSeries:L.func,onCloseTrack:L.func,onCloseTrackMenuOpened:L.func,onConfigTrackMenuOpened:L.func,onSortEnd:L.func,onSortStart:L.func,referenceAncestor:L.string,resizeHandles:L.object,useDragHandle:L.bool,width:L.number};Fk.defaultProps={className:"list stylizedList",itemClass:"item stylizedItem",width:400,height:600};const ax={"top-right-handle":"_top-right-handle_cizw2_1","bottom-right-handle":"_bottom-right-handle_cizw2_2","top-left-handle":"_top-left-handle_cizw2_7","bottom-left-handle":"_bottom-left-handle_cizw2_8","top-draggable-handle":"_top-draggable-handle_cizw2_13","bottom-draggable-handle":"_bottom-draggable-handle_cizw2_14","left-draggable-handle":"_left-draggable-handle_cizw2_15","right-draggable-handle":"_right-draggable-handle_cizw2_16","draggable-div":"_draggable-div_cizw2_22","top-draggable-handle-grabber":"_top-draggable-handle-grabber_cizw2_27","bottom-draggable-handle-grabber":"_bottom-draggable-handle-grabber_cizw2_28","left-draggable-handle-grabber":"_left-draggable-handle-grabber_cizw2_43","right-draggable-handle-grabber":"_right-draggable-handle-grabber_cizw2_44"};function _Mt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function oAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function K2(e){return K2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},K2(e)}let u9e=function(e){jMt(I,e);var g=$Mt(I);function I(i){var n;return _Mt(this,I),n=g.call(this,i),n.dragTopRight=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragTopRightFunc.bind(nn(n))),n.dragTopLeft=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragTopLeftFunc.bind(nn(n))),n.dragBottomRight=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragBottomRightFunc.bind(nn(n))),n.dragBottomLeft=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragBottomLeftFunc.bind(nn(n))),n.dragBottom=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragBottomFunc.bind(nn(n))),n.dragTop=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragTopFunc.bind(nn(n))),n.dragLeft=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragLeftFunc.bind(nn(n))),n.dragRight=QA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragRightFunc.bind(nn(n))),n.minWidth=10,n.minHeight=10,n.bottomHandleWidth=20,n.state={uid:n.props.uid,width:n.props.width,height:n.props.height,top:n.props.top,left:n.props.left},n.domBody=hg("body").node(),n}return LMt(I,[{key:"componentDidMount",value:function(){hg(this.bottomHandle).call(this.dragBottom),hg(this.topHandle).call(this.dragTop),hg(this.leftHandle).call(this.dragLeft),hg(this.rightHandle).call(this.dragRight)}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){"width"in n&&this.setState({width:n.width}),"height"in n&&this.setState({height:n.height})}},{key:"dragBottomFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartHeight+(C[1]-this.dragStartMousePos[1]);r=r>this.minHeight?r:this.minHeight,this.setState({height:r}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragLeftFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartWidth-(C[0]-this.dragStartMousePos[0]);r=r>this.minWidth?r:this.minWidth;let o=this.dragStartLeft+C[0]-this.dragStartMousePos[0];o=r>this.minWidth?o:this.dragStartLeft+this.dragStartWidth-this.minWidth,this.setState({left:o,width:r}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragTopFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartHeight-(C[1]-this.dragStartMousePos[1]);r=r>this.minHeight?r:this.minHeight;let o=this.dragStartTop+C[1]-this.dragStartMousePos[1];o=r>this.minHeight?o:this.dragStartTop+this.dragStartHeight-this.minHeight,this.setState({top:o,height:r}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragRightFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartWidth+(C[0]-this.dragStartMousePos[0]);r=r>this.minWidth?r:this.minWidth,this.setState({width:r}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragBottomLeftFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartHeight+(C[1]-this.dragStartMousePos[1]);r=r>this.minHeight?r:this.minHeight;let o=this.dragStartWidth-(C[0]-this.dragStartMousePos[0]);o=o>this.minWidth?o:this.minWidth;let a=this.dragStartLeft+C[0]-this.dragStartMousePos[0];a=o>this.minWidth?a:this.dragStartLeft+this.dragStartWidth-this.minWidth,this.setState({left:a,width:o,height:r}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragBottomRightFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartWidth+(C[0]-this.dragStartMousePos[0]);r=r>this.minWidth?r:this.minWidth;let o=this.dragStartHeight+(C[1]-this.dragStartMousePos[1]);o=o>this.minHeight?o:this.minHeight,this.setState({width:r,height:o}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragTopRightFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartHeight-(C[1]-this.dragStartMousePos[1]);r=r>this.minHeight?r:this.minHeight;let o=this.dragStartTop+C[1]-this.dragStartMousePos[1];o=r>this.minHeight?o:this.dragStartTop+this.dragStartHeight-this.minHeight;let a=this.dragStartWidth+(C[0]-this.dragStartMousePos[0]);a=a>this.minWidth?a:this.minWidth,this.setState({top:o,width:a,height:r}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragTopLeftFunc",value:function(n){const C=zg(n,this.domBody);let r=this.dragStartWidth-(C[0]-this.dragStartMousePos[0]);r=r>this.minWidth?r:this.minWidth;let o=this.dragStartLeft+C[0]-this.dragStartMousePos[0];o=r>this.minWidth?o:this.dragStartLeft+this.dragStartWidth-this.minWidth;let a=this.dragStartHeight-(C[1]-this.dragStartMousePos[1]);a=a>this.minHeight?a:this.minHeight;let s=this.dragStartTop+C[1]-this.dragStartMousePos[1];s=a>this.minHeight?s:this.dragStartTop+this.dragStartHeight-this.minHeight,this.setState({top:s,left:o,width:r,height:a}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragStart",value:function(n){this.dragStartMousePos=zg(n,this.domBody),this.dragStartWidth=this.state.width,this.dragStartHeight=this.state.height,this.dragStartTop=this.state.top,this.dragStartLeft=this.state.left,n.sourceEvent.stopPropagation()}},{key:"sizeChanged",value:function(){this.props.sizeChanged&&this.props.sizeChanged(this.state)}},{key:"rotateClicked",value:function(){this.props.trackRotated(this.state.uid)}},{key:"closeClicked",value:function(){this.props.trackClosed(this.state.uid)}},{key:"render",value:function(){const n=this.props.theme===gI?"white":"black",C={top:this.state.top,left:this.state.left,width:this.state.width,height:this.state.height,opacity:this.props.opacity},r=24,o=24,a={left:this.state.width/2-r/2,width:r},s={top:this.state.height/2-o/2,height:o},A={bottom:{...a,bottom:1},top:{...a,top:1},left:{...s,left:1},right:{...s,right:1}},l=[...this.props.resizeHandles].map(c=>N.createElement("div",{key:c,ref:u=>{this[`${c}Handle`]=u},className:ax[`${c}-draggable-handle`],style:A[c],title:"Resize track"},N.createElement("div",{className:ax[`${c}-draggable-handle-grabber`],style:{borderColor:n}})));return N.createElement("div",{ref:c=>{this.divContainer=c},className:Xg(this.props.className,ax["draggable-div"]),style:C},l)}}]),I}(N.Component);u9e.propTypes={className:L.string,height:L.number,left:L.number,opacity:L.number,resizeHandles:L.object,sizeChanged:L.func,top:L.number,trackClosed:L.func,trackRotated:L.func,uid:L.string,width:L.number,theme:L.symbol};const t3t=cm(u9e);function g3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function aAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function F2(e){return F2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},F2(e)}let d9e=function(e){C3t(I,e);var g=r3t(I);function I(i){var n;return g3t(this,I),n=g.call(this,i),n.state={controlsVisible:!1},n}return I3t(I,[{key:"shouldComponentUpdate",value:function(){return!this.resizing}},{key:"handleMouseEnter",value:function(){this.setState({controlsVisible:!0})}},{key:"handleMouseLeave",value:function(){this.setState({controlsVisible:!1})}},{key:"handleMouseMove",value:function(){this.setState({controlsVisible:!0})}},{key:"getControls",value:function(){let n=null;return this.moveable?n=sz(()=>N.createElement("svg",{className:"no-zoom",height:"10px",onClick:()=>{},style:this.getMoveImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#move"}))):n=sz(()=>N.createElement("div",null)),N.createElement("div",{style:{position:"absolute",backgroundColor:"rgba(255,255,255,0.7)",right:"3px",top:"3px",pointerEvents:"none",paddingLeft:"5px",paddingRight:"5px",borderRadius:"5px",border:"1px solid #dddddd"}},N.createElement(n,null),N.createElement("svg",{ref:C=>{this.imgConfig=C},className:"no-zoom",height:"10px",onClick:()=>{const r=jI.findDOMNode(this.imgConfig).getBoundingClientRect();this.props.onConfigTrackMenuOpened(this.props.uid,r)},style:this.getSettingsImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#cog"})),N.createElement("svg",{ref:C=>{this.imgAdd=C},className:"no-zoom",height:"10px",onClick:()=>this.props.onAddSeries(this.props.uid),style:this.getAddImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#plus"})),N.createElement("svg",{ref:C=>{this.imgClose=C},className:"no-zoom",height:"10px",onClick:()=>{const r=jI.findDOMNode(this.imgClose).getBoundingClientRect();this.props.onCloseTrackMenuOpened(this.props.uid,r)},style:this.getCloseImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#cross"})))}}]),I}(N.Component);d9e.propTypes={configMenuOpen:L.bool,onConfigTrackMenuOpened:L.func,onCloseTrackMenuOpened:L.func,onAddSeries:L.func,uid:L.string};function s3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function AAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function D2(e){return D2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},D2(e)}let Dk=function(e){d3t(I,e);var g=h3t(I);function I(i){var n;return s3t(this,I),n=g.call(this,i),n.moveable=!0,n}return l3t(I,[{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.el=n},className:this.props.className,onMouseEnter:this.handleMouseEnter.bind(this),onMouseLeave:()=>{this.handleMouseLeave()},style:{height:this.props.height,width:this.props.width}},N.createElement(t3t,{key:this.props.uid,height:this.props.height,resizeHandles:this.props.editable?this.props.resizeHandles:new Set,sizeChanged:n=>this.props.handleResizeTrack(this.props.uid,n.width,n.height),style:{background:"transparent"},uid:this.props.uid,width:this.props.width}),this.props.editable&&this.getControls(this.state.controlsVisible||this.props.item.configMenuVisible))}}]),I}(d9e);Dk.propTypes={className:L.string,uid:L.string,item:L.object,height:L.number,width:L.number};function b3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function sAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function x2(e){return x2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},x2(e)}const OV={pointerEvents:"all"};let h9e=function(e){v3t(I,e);var g=B3t(I);function I(){return b3t(this,I),g.apply(this,arguments)}return y3t(I,[{key:"getControls",value:function(n){return N.createElement(vk,{configMenuVisible:this.props.item.configMenuVisible,imgStyleAdd:OV,imgStyleClose:OV,imgStyleMove:OV,imgStyleSettings:OV,isMoveable:this.moveable,isVisible:n,onAddSeries:this.props.onAddSeries,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,uid:this.props.uid})}}]),I}(Dk);const V3t=SGe(e=>N.createElement(h9e,{className:e.className,editable:e.editable,handleConfigTrack:e.handleConfigTrack,handleResizeTrack:e.handleResizeTrack,height:e.height,item:e.item,onAddSeries:e.onAddSeries,onCloseTrack:e.onCloseTrack,onCloseTrackMenuOpened:e.onCloseTrackMenuOpened,onConfigTrackMenuOpened:e.onConfigTrackMenuOpened,resizeHandles:e.resizeHandles,uid:e.uid,width:e.width}));function eO(){return eO=Object.assign?Object.assign.bind():function(e){for(var g=1;g{const b=g.map((p,y)=>N.createElement(h,{key:`sci-${p.uid}`,className:I,controlAlignLeft:i,sortingIndex:n,index:y,uid:p.uid,height:p.height,width:p.width,item:p,useDragHandle:C,onCloseTrack:s,onCloseTrackMenuOpened:A,onConfigTrackMenuOpened:l,onAddSeries:c,handleConfigTrack:u,editable:d,handleResizeTrack:m,resizeHandles:f}));return N.createElement("div",eO({className:e,style:{height:o,width:a,background:"transparent"}},r),b)}),W3t={"horizontal-tiled-plot":"_horizontal-tiled-plot_1bqkg_1"};function X3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function lAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function E2(e){return E2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},E2(e)}function cAe(e){return e&&e.sourceEvent}let M2=function(e){k3t(I,e);var g=Y3t(I);function I(i){var n;return X3t(this,I),n=g.call(this,i),n.brushBehavior=WN().on("start",n.brushStarted.bind(WW(n))).on("brush",n.brushed.bind(WW(n))).on("end",n.brushedEnded.bind(WW(n))),n}return H3t(I,[{key:"componentDidMount",value:function(){this.props.isRangeSelectionActive&&this.addBrush()}},{key:"shouldComponentUpdate",value:function(n,C){return this.rangeSelectionTriggered?(this.rangeSelectionTriggered=!1,this.rangeSelectionTriggeredEnd&&this.props.rangeSelection!==n.rangeSelection&&this.moveBrush(n.rangeSelection[0]?n.rangeSelection[0]:null,!0),this.rangeSelectionTriggeredEnd=!1,this.state!==C):this.props.rangeSelection!==n.rangeSelection?(this.moveBrush(n.rangeSelection[0]?n.rangeSelection[0]:null,n.rangeSelectionEnd),this.state!==C):!0}},{key:"componentDidUpdate",value:function(){this.props.isRangeSelectionActive?this.addBrush():this.removeBrush()}},{key:"addBrush",value:function(){!this.brushEl||this.brushElAddedBefore===this.brushEl||(this.brushElAddedBefore&&this.brushElAddedBefore.on(".brush",null),this.brushEl.call(this.brushBehavior),this.brushElAddedBefore=this.brushEl,kp(this.brushEl,Jo["track-range-selection-group-brush-selection"]))}},{key:"brushed",value:function(n){const C=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!cAe(n)||!this.props.onRangeSelection||C)&&(this.rangeSelectionTriggered=!0,this.props.onRangeSelection(n.selection))}},{key:"brushStarted",value:function(n){!cAe(n)||!n.selection||this.props.onRangeSelectionStart()}},{key:"brushedEnded",value:function(n){if(!this.props.is1dRangeSelection)return;const C=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,n.selection&&n.sourceEvent&&this.props.onRangeSelection&&!C&&(this.rangeSelectionTriggered=!0,this.rangeSelectionTriggeredEnd=!0,this.props.onRangeSelectionEnd(n.selection)),n.selection||(this.rangeSelectionTriggered=!0,this.props.onRangeSelectionReset())}},{key:"moveBrush",value:function(n,C=!1){if(!this.brushEl)return;const r=n?[this.props.scale(n[0]),this.props.scale(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,C?this.brushEl.transition().call(this.brushBehavior.move,r):this.brushEl.call(this.brushBehavior.move,r)}},{key:"removeBrush",value:function(){this.brushElAddedBefore&&(this.brushElAddedBefore.call(this.brushBehavior.move,null),this.brushElAddedBefore.on(".brush",null),this.brushElAddedBefore=void 0,this.props.onRangeSelectionReset())}},{key:"render",value:function(){const n=this.props.tracks.map(o=>o.height).reduce($l,0),C=this.props.tracks.map(o=>E0(o)).reduce(jS,!1),r=this.props.isRangeSelectionActive?Jo["track-range-selection-active"]:Jo["track-range-selection"];return N.createElement("div",{className:Xg("horizontal-tiled-plot",W3t["horizontal-tiled-plot"])},C&&N.createElement("svg",{ref:o=>{this.brushEl=hg(o)},className:r,style:{height:n,width:this.props.width},xmlns:"http://www.w3.org/2000/svg"}),N.createElement(Fk,{className:Xg(Oo.list,Oo.stylizedList),component:m9e,editable:this.props.editable,handleConfigTrack:this.props.handleConfigTrack,handleResizeTrack:this.props.handleResizeTrack,height:n,helperClass:Oo.stylizedHelper,itemClass:Oo.stylizedItem,itemReactClass:V3t,items:this.props.tracks.map(o=>({configMenuVisible:o.uid===this.props.configTrackMenuId,uid:o.uid||lg.nice(),width:this.props.width,height:o.height,value:o.value})),onAddSeries:this.props.onAddSeries,onCloseTrack:this.props.onCloseTrack,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,onSortEnd:this.props.handleSortEnd,referenceAncestor:this.props.referenceAncestor,resizeHandles:this.props.resizeHandles,useDragHandle:!0,width:this.props.width}))}}]),I}(N.Component);M2.propTypes={configTrackMenuId:L.string,editable:L.bool,handleConfigTrack:L.func,handleResizeTrack:L.func,handleSortEnd:L.func,is1dRangeSelection:L.bool,isRangeSelectionActive:L.bool,onAddSeries:L.func,onCloseTrack:L.func,onCloseTrackMenuOpened:L.func,onConfigTrackMenuOpened:L.func,onRangeSelection:L.func,onRangeSelectionEnd:L.func,onRangeSelectionReset:L.func,onRangeSelectionStart:L.func,rangeSelection:L.array,rangeSelectionEnd:L.bool,referenceAncestor:L.func,resizeHandles:L.object,scale:L.func,tracks:L.array,width:L.number};function D3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function z2(e){return z2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},z2(e)}const _V={pointerEvents:"all"};let f9e=function(e){z3t(I,e);var g=P3t(I);function I(){return D3t(this,I),g.apply(this,arguments)}return x3t(I,[{key:"getControls",value:function(n){return N.createElement(vk,{imgStyleAdd:_V,imgStyleClose:_V,imgStyleMove:_V,imgStyleSettings:_V,isAlignLeft:this.props.controlAlignLeft,isMoveable:this.moveable,isVertical:!0,isVisible:n,onAddSeries:this.props.onAddSeries,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,uid:this.props.uid})}}]),I}(Dk);function L3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function dAe(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function l0(e){return l0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},l0(e)}let Izt=function(e){q3t(I,e);var g=ezt(I);function I(i,n){var C;L3t(this,I),C=g.call(this,i,n);const{registerViewportChanged:r,removeViewportChanged:o}=i,a=lg.nice();return C.uid=a,C.removeViewportChanged=o,C.viewportXDomain=null,C.viewportYDomain=null,r(a,C.viewportChanged.bind(p9e(C))),C}return U3t(I,[{key:"viewportChanged",value:function(n,C){const r=n.domain(),o=C.domain();this.viewportXDomain=r,this.viewportYDomain=o,this.draw()}},{key:"draw",value:function(){const n=this.pMain;if(!this.viewportXDomain||!this.viewportYDomain)return;n.clear(),n.lineStyle(1,255,1),n.beginFill(16740363,1);const C=this._xScale(this.viewportXDomain[0]),r=this._yScale(this.viewportYDomain[0]),o=this._xScale(this.viewportXDomain[1])-this._xScale(this.viewportXDomain[0]),a=this._yScale(this.viewportYDomain[1])-this._yScale(this.viewportYDomain[0]);this.pMain.drawRect(C,r,o,a)}},{key:"zoomed",value:function(n,C){this.xScale(n),this.yScale(C),this.draw()}},{key:"setPosition",value:function(n){XW(l0(I.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0],this.draw()}}]),I}(mC);function b9e(e){this.size=0,this.limit=e,this._keymap={}}function izt(e,g){const I={key:e,value:g};if(this._keymap[e]=I,this.tail?(this.tail.newer=I,I.older=this.tail):this.head=I,this.tail=I,this.size===this.limit)return this.shift();this.size+=1}function nzt(){const e=this.head;return e&&(this.head.newer?(this.head=this.head.newer,this.head.older=void 0):(this.head=void 0,this.tail=void 0),e.newer=void 0,e.older=void 0,delete this._keymap[e.key],this.size-=1),e}function Czt(e,g){const I=this._keymap[e];if(I!==void 0)return I===this.tail||(I.newer&&(I===this.head&&(this.head=I.newer),I.newer.older=I.older),I.older&&(I.older.newer=I.newer),I.newer=void 0,I.older=this.tail,this.tail&&(this.tail.newer=I),this.tail=I),g?I:I.value}function rzt(e){return this._keymap[e]}function ozt(e,g){const I=this.get(e,!0);let i;return I?(i=I.value,I.value=g):(i=this.put(e,g),i&&(i=i.value)),i}function azt(e){const g=this._keymap[e];if(g)return delete this._keymap[g.key],g.newer&&g.older?(g.older.newer=g.newer,g.newer.older=g.older):g.newer?(g.newer.older=void 0,this.head=g.newer):g.older?(g.older.newer=void 0,this.tail=g.older):(this.head=void 0,this.tail=void 0),this.size-=1,g.value}function Azt(){this.head=void 0,this.tail=void 0,this.size=0,this._keymap={}}function szt(){return Object.keys(this._keymap)}function lzt(e,g,I){let i;if(g===!0?(I=!0,g=void 0):typeof g!="object"&&(g=this),I)for(i=this.tail;i;)e.call(g,i.key,i.value,this),i=i.older;else for(i=this.head;i;)e.call(g,i.key,i.value,this),i=i.newer}function czt(){const e=[];let g=this.head;for(;g;)e.push({key:g.key.toJSON(),value:g.value.toJSON()}),g=g.newer;return e}function uzt(){let e="",g=this.head;for(;g;)e+=`${String(g.key)}:${g.value}`,g=g.newer,g&&(e+=" < ");return e}Object.assign(b9e.prototype,{put:izt,get:Czt,find:rzt,keys:szt,set:ozt,shift:nzt,remove:azt,removeAll:Azt,forEach:lzt,toJSON:czt,toString:uzt});const y9e="1.13.3",dzt="_button_1wnjn_1",Ax={button:dzt,"button-shortcut":"_button-shortcut_1wnjn_35"},Xs=N.forwardRef((e,g)=>N.createElement("button",{ref:g,className:Ax[e.styleName]??Ax.button,disabled:e.disable,onBlur:e.onBlur,onClick:e.onClick,onMouseDown:e.onMouseDown,onMouseOut:e.onMouseOut,onMouseUp:e.onMouseUp,type:"button"},e.children,e.shortcut&&N.createElement("span",{className:Ax["button-shortcut"]},e.shortcut)));Xs.defaultProps={onClick:()=>{},styleName:"",type:"button"};Xs.propTypes={children:L.any,disable:L.bool,onBlur:L.func,onClick:L.func,onMouseDown:L.func,onMouseOut:L.func,onMouseUp:L.func,shortcut:L.string,type:L.string,styleName:L.string};const hzt="_cross_2ke8w_1",mzt={cross:hzt};function Z9e(){return N.createElement("div",{className:mzt.cross})}function iO(){return iO=Object.assign?Object.assign.bind():function(e){for(var g=1;gN.forwardRef((g,I)=>N.createElement(pzt,null,i=>N.createElement(e,iO({ref:I},g,{modal:i})))),If={"modal-background":"_modal-background_zzhoe_1","fade-in":"_fade-in_zzhoe_1","modal-hide":"_modal-hide_zzhoe_13","modal-wrap":"_modal-wrap_zzhoe_17","modal-window":"_modal-window_zzhoe_25","fade-scale-in":"_fade-scale-in_zzhoe_1","modal-window-max-height":"_modal-window-max-height_zzhoe_38","modal-content":"_modal-content_zzhoe_42"};function Uj(e){const g=()=>{e.modal.close(),e.onClose&&e.onClose()};return N.createElement("div",{className:Xg(If["modal-background"],{[If["modal-hide"]]:e.hide})},N.createElement("div",{className:If["modal-wrap"]},N.createElement("div",{className:Xg(If["modal-window"],{[If["modal-window-max-height"]]:e.maxHeight})},e.closeButton&&N.createElement(Xs,{onClick:g},N.createElement(Z9e,null)),N.createElement("div",{className:If["modal-content"]},e.children))))}Uj.defaultProps={closeButton:!0,hide:!1,maxHeight:!1};Uj.propTypes={children:L.element.isRequired,closeButton:L.bool,hide:L.bool,maxHeight:L.bool,modal:L.object.isRequired,onClose:L.func};const bzt=xk(Uj),sx={"dialog-header":"_dialog-header_wp50s_1","dialog-main-max-height":"_dialog-main-max-height_wp50s_20","dialog-footer":"_dialog-footer_wp50s_31","dialog-footer-max-height":"_dialog-footer-max-height_wp50s_31"};function Qj(e){const g=()=>{e.modal.close(),e.onCancel&&e.onCancel()},I=()=>{e.modal.close(),e.onOkay&&e.onOkay()};return N.createElement(bzt,{closeButton:!1,hide:e.hide,maxHeight:e.maxHeight},N.createElement(N.Fragment,null,N.createElement("header",{className:sx["dialog-header"]},N.createElement("h3",null,e.title),N.createElement(Xs,{onClick:g},N.createElement(Z9e,null))),e.maxHeight?N.createElement("main",{className:Xg(e.maxHeight&&sx["dialog-main-max-height"])},e.children):N.createElement("main",null,e.children),N.createElement("footer",{className:sx[e.maxHeight?"dialog-footer-max-height":"dialog-footer"]},e.okayOnly?N.createElement("div",null):N.createElement(Xs,{onClick:g,shortcut:e.cancelShortcut},e.cancelTitle),N.createElement(Xs,{onClick:I,shortcut:e.okayShortcut},e.okayTitle))))}Qj.defaultProps={cancelTitle:"Cancel",hide:!1,maxHeight:!1,okayOnly:!1,okayTitle:"Ok"};Qj.propTypes={cancelShortcut:L.string,cancelTitle:L.string,children:L.object,hide:L.bool,maxHeight:L.bool,modal:L.object.isRequired,okayShortcut:L.string,okayTitle:L.string,okayOnly:L.bool,onCancel:L.func.isRequired,onOkay:L.func.isRequired,title:L.string.isRequired};const Bw=xk(Qj);var Jr={},Sw={},yzt=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis;const G9e=yzt;var Zzt=typeof self=="object"&&self&&self.Object===Object&&self,Gzt=G9e||Zzt||Function("return this")();const va=Gzt;var vzt=va.Symbol;const wA=vzt;var v9e=Object.prototype,Bzt=v9e.hasOwnProperty,Szt=v9e.toString,fZ=wA?wA.toStringTag:void 0;function wzt(e){var g=Bzt.call(e,fZ),I=e[fZ];try{e[fZ]=void 0;var i=!0}catch{}var n=Szt.call(e);return i&&(g?e[fZ]=I:delete e[fZ]),n}var Rzt=Object.prototype,Vzt=Rzt.toString;function Wzt(e){return Vzt.call(e)}var Xzt="[object Null]",Hzt="[object Undefined]",hAe=wA?wA.toStringTag:void 0;function du(e){return e==null?e===void 0?Hzt:Xzt:hAe&&hAe in Object(e)?wzt(e):Wzt(e)}var Tzt=Array.isArray;const cC=Tzt;function da(e){return e!=null&&typeof e=="object"}var Nzt="[object String]";function kzt(e){return typeof e=="string"||!cC(e)&&da(e)&&du(e)==Nzt}const Yzt=Object.freeze(Object.defineProperty({__proto__:null,default:kzt},Symbol.toStringTag,{value:"Module"})),Kzt=qs(Yzt);function Fzt(e){return function(g,I,i){for(var n=-1,C=Object(g),r=i(g),o=r.length;o--;){var a=r[e?o:++n];if(I(C[a],a,C)===!1)break}return g}}var Dzt=Fzt();const B9e=Dzt;function xzt(e,g){for(var I=-1,i=Array(e);++I-1&&e%1==0&&e-1&&e%1==0&&e<=jzt}var $zt="[object Arguments]",qzt="[object Array]",ePt="[object Boolean]",tPt="[object Date]",gPt="[object Error]",IPt="[object Function]",iPt="[object Map]",nPt="[object Number]",CPt="[object Object]",rPt="[object RegExp]",oPt="[object Set]",aPt="[object String]",APt="[object WeakMap]",sPt="[object ArrayBuffer]",lPt="[object DataView]",cPt="[object Float32Array]",uPt="[object Float64Array]",dPt="[object Int8Array]",hPt="[object Int16Array]",mPt="[object Int32Array]",fPt="[object Uint8Array]",pPt="[object Uint8ClampedArray]",bPt="[object Uint16Array]",yPt="[object Uint32Array]",hI={};hI[cPt]=hI[uPt]=hI[dPt]=hI[hPt]=hI[mPt]=hI[fPt]=hI[pPt]=hI[bPt]=hI[yPt]=!0;hI[$zt]=hI[qzt]=hI[sPt]=hI[ePt]=hI[lPt]=hI[tPt]=hI[gPt]=hI[IPt]=hI[iPt]=hI[nPt]=hI[CPt]=hI[rPt]=hI[oPt]=hI[aPt]=hI[APt]=!1;function ZPt(e){return da(e)&&$j(e.length)&&!!hI[du(e)]}function qj(e){return function(g){return e(g)}}var R9e=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Tv=R9e&&typeof module=="object"&&module&&!module.nodeType&&module,GPt=Tv&&Tv.exports===R9e,lx=GPt&&G9e.process,vPt=function(){try{var e=Tv&&Tv.require&&Tv.require("util").types;return e||lx&&lx.binding&&lx.binding("util")}catch{}}();const c0=vPt;var bAe=c0&&c0.isTypedArray,BPt=bAe?qj(bAe):ZPt;const e$=BPt;var SPt=Object.prototype,wPt=SPt.hasOwnProperty;function V9e(e,g){var I=cC(e),i=!I&&P2(e),n=!I&&!i&&CS(e),C=!I&&!i&&!n&&e$(e),r=I||i||n||C,o=r?xzt(e.length,String):[],a=o.length;for(var s in e)(g||wPt.call(e,s))&&!(r&&(s=="length"||n&&(s=="offset"||s=="parent")||C&&(s=="buffer"||s=="byteLength"||s=="byteOffset")||jj(s,a)))&&o.push(s);return o}var RPt=Object.prototype;function t$(e){var g=e&&e.constructor,I=typeof g=="function"&&g.prototype||RPt;return e===I}function W9e(e,g){return function(I){return e(g(I))}}var VPt=W9e(Object.keys,Object);const WPt=VPt;var XPt=Object.prototype,HPt=XPt.hasOwnProperty;function TPt(e){if(!t$(e))return WPt(e);var g=[];for(var I in Object(e))HPt.call(e,I)&&I!="constructor"&&g.push(I);return g}function pr(e){var g=typeof e;return e!=null&&(g=="object"||g=="function")}var NPt="[object AsyncFunction]",kPt="[object Function]",YPt="[object GeneratorFunction]",KPt="[object Proxy]";function g$(e){if(!pr(e))return!1;var g=du(e);return g==kPt||g==YPt||g==NPt||g==KPt}function Ay(e){return e!=null&&$j(e.length)&&!g$(e)}function ww(e){return Ay(e)?V9e(e):TPt(e)}function X9e(e,g){return e&&B9e(e,g,ww)}function Ek(e){return e}function H9e(e){return typeof e=="function"?e:Ek}function FPt(e,g){return e&&X9e(e,H9e(g))}const DPt=Object.freeze(Object.defineProperty({__proto__:null,default:FPt},Symbol.toStringTag,{value:"Module"})),I$=qs(DPt);var xPt=W9e(Object.getPrototypeOf,Object);const i$=xPt;var EPt="[object Object]",MPt=Function.prototype,zPt=Object.prototype,T9e=MPt.toString,PPt=zPt.hasOwnProperty,JPt=T9e.call(Object);function N9e(e){if(!da(e)||du(e)!=EPt)return!1;var g=i$(e);if(g===null)return!0;var I=PPt.call(g,"constructor")&&g.constructor;return typeof I=="function"&&I instanceof I&&T9e.call(I)==JPt}const OPt=Object.freeze(Object.defineProperty({__proto__:null,default:N9e},Symbol.toStringTag,{value:"Module"})),_Pt=qs(OPt);function k9e(e,g){for(var I=-1,i=e==null?0:e.length,n=Array(i);++I-1}function eJt(e,g){var I=this.__data__,i=Mk(I,e);return i<0?(++this.size,I.push([e,g])):I[i][1]=g,this}function al(e){var g=-1,I=e==null?0:e.length;for(this.clear();++go))return!1;var s=C.get(e),A=C.get(g);if(s&&A)return s==g&&A==e;var l=-1,c=!0,u=I&JJt?new J2:void 0;for(C.set(e,g),C.set(g,e);++l0&&arguments[0]!==void 0?arguments[0]:[],I=[];return(0,m_t.default)(g,function(i){Array.isArray(i)?e(i).map(function(n){return I.push(n)}):(0,d_t.default)(i)?(0,c_t.default)(i,function(n,C){n===!0&&I.push(C),I.push(C+"-"+n)}):(0,s_t.default)(i)&&I.push(i)}),I};Sw.default=f_t;var Vw={};function O9e(e,g){for(var I=-1,i=e==null?0:e.length;++I1&&arguments[1]!==void 0?arguments[1]:[],i=g.default&&(0,jLt.default)(g.default)||{};return I.map(function(n){var C=g[n];return C&&(0,ULt.default)(C,function(r,o){i[o]||(i[o]={}),i[o]=$Lt({},i[o],C[o])}),n}),i};Vw.default=qLt;var Hw={};Object.defineProperty(Hw,"__esModule",{value:!0});Hw.autoprefix=void 0;var eUt=I$,MAe=gUt(eUt),tUt=Object.assign||function(e){for(var g=1;g1&&arguments[1]!==void 0?arguments[1]:"span";return function(i){aUt(n,i);function n(){var C,r,o,a;oUt(this,n);for(var s=arguments.length,A=Array(s),l=0;l1&&arguments[1]!==void 0?arguments[1]:"span";return function(i){dUt(n,i);function n(){var C,r,o,a;uUt(this,n);for(var s=arguments.length,A=Array(s),l=0;l1&&arguments[1]!==void 0?arguments[1]:!0;i[r]=o};return g===0&&n("first-child"),g===I-1&&n("last-child"),(g===0||g%2===0)&&n("even"),Math.abs(g%2)===1&&n("odd"),n("nth-child",g),i};s$.default=mUt;Object.defineProperty(Jr,"__esModule",{value:!0});Jr.ReactCSS=Jr.loop=Jr.handleActive=l$=Jr.handleHover=Jr.hover=void 0;var fUt=Sw,pUt=sy(fUt),bUt=Vw,yUt=sy(bUt),ZUt=Hw,GUt=sy(ZUt),vUt=Tw,iXe=sy(vUt),BUt=Nw,SUt=sy(BUt),wUt=s$,RUt=sy(wUt);function sy(e){return e&&e.__esModule?e:{default:e}}Jr.hover=iXe.default;var l$=Jr.handleHover=iXe.default;Jr.handleActive=SUt.default;Jr.loop=RUt.default;var VUt=Jr.ReactCSS=function(g){for(var I=arguments.length,i=Array(I>1?I-1:0),n=1;no?c=1:c=Math.round(l*100/o)/100,I.a!==c)return{h:I.h,s:I.s,l:I.l,a:c,source:"rgb"}}else{var u=void 0;if(A<0?u=0:A>r?u=1:u=Math.round(A*100/r)/100,n!==u)return{h:I.h,s:I.s,l:I.l,a:u,source:"rgb"}}return null},mx={},XUt=function(g,I,i,n){if(typeof document>"u"&&!n)return null;var C=n?new n:document.createElement("canvas");C.width=i*2,C.height=i*2;var r=C.getContext("2d");return r?(r.fillStyle=g,r.fillRect(0,0,C.width,C.height),r.fillStyle=I,r.fillRect(0,0,i,i),r.translate(i,i),r.fillRect(0,0,i,i),C.toDataURL()):null},HUt=function(g,I,i,n){var C=g+"-"+I+"-"+i+(n?"-server":"");if(mx[C])return mx[C];var r=XUt(g,I,i,n);return mx[C]=r,r},JAe=Object.assign||function(e){for(var g=1;g"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function D2(e){return D2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},D2(e)}let Pk=function(e){QMt(i,e);var g=jMt(i);function i({items:I}){var n;return OMt(this,i),n=g.call(this),n.state={items:I,isSorting:!1},n}return _Mt(i,[{key:"UNSAFE_componentWillReceiveProps",value:function(n){this.setState({items:n.items})}},{key:"onSortStart",value:function({node:n,index:r,collection:C},o){o.stopImmediatePropagation();const{onSortStart:a}=this.props;this.setState({isSorting:!0}),a&&a(this.ref),this.sortingIndex=r,this.sortStartTop=o.offsetTop,this.sortStartLeft=o.offsetLeft}},{key:"onSortMove",value:function(){}},{key:"onSortEnd",value:function({oldIndex:n,newIndex:r}){const{onSortEnd:C}=this.props,{items:o}=this.state;this.setState({items:$At(o,n,r),isSorting:!1}),C&&C(this.state.items),this.sortingIndex=null}},{key:"render",value:function(){const n=this.props.component,{items:r,isSorting:C}=this.state,o={isSorting:C,items:r,onSortEnd:this.onSortEnd.bind(this),onSortStart:this.onSortStart.bind(this),onSortMove:this.onSortMove.bind(this)};return N.createElement(n,eO({},this.props,o,{ref:a=>{this.ref=a}}))}}]),i}(N.Component);Pk.propTypes={axis:L.string,className:L.string,component:L.func,editable:L.bool,handleConfigTrack:L.func,handleResizeTrack:L.func,height:L.number,helperClass:L.string,itemClass:L.string,itemControlAlignLeft:L.bool,itemReactClass:L.func,items:L.array,onAddSeries:L.func,onCloseTrack:L.func,onCloseTrackMenuOpened:L.func,onConfigTrackMenuOpened:L.func,onSortEnd:L.func,onSortStart:L.func,referenceAncestor:L.string,resizeHandles:L.object,useDragHandle:L.bool,width:L.number};Pk.defaultProps={className:"list stylizedList",itemClass:"item stylizedItem",width:400,height:600};const dx={"top-right-handle":"_top-right-handle_cizw2_1","bottom-right-handle":"_bottom-right-handle_cizw2_2","top-left-handle":"_top-left-handle_cizw2_7","bottom-left-handle":"_bottom-left-handle_cizw2_8","top-draggable-handle":"_top-draggable-handle_cizw2_13","bottom-draggable-handle":"_bottom-draggable-handle_cizw2_14","left-draggable-handle":"_left-draggable-handle_cizw2_15","right-draggable-handle":"_right-draggable-handle_cizw2_16","draggable-div":"_draggable-div_cizw2_22","top-draggable-handle-grabber":"_top-draggable-handle-grabber_cizw2_27","bottom-draggable-handle-grabber":"_bottom-draggable-handle-grabber_cizw2_28","left-draggable-handle-grabber":"_left-draggable-handle-grabber_cizw2_43","right-draggable-handle-grabber":"_right-draggable-handle-grabber_cizw2_44"};function t3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function lAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function x2(e){return x2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},x2(e)}let y9e=function(e){n3t(i,e);var g=r3t(i);function i(I){var n;return t3t(this,i),n=g.call(this,I),n.dragTopRight=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragTopRightFunc.bind(nn(n))),n.dragTopLeft=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragTopLeftFunc.bind(nn(n))),n.dragBottomRight=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragBottomRightFunc.bind(nn(n))),n.dragBottomLeft=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragBottomLeftFunc.bind(nn(n))),n.dragBottom=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragBottomFunc.bind(nn(n))),n.dragTop=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragTopFunc.bind(nn(n))),n.dragLeft=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragLeftFunc.bind(nn(n))),n.dragRight=jA().on("start",n.dragStart.bind(nn(n))).on("drag",n.dragRightFunc.bind(nn(n))),n.minWidth=10,n.minHeight=10,n.bottomHandleWidth=20,n.state={uid:n.props.uid,width:n.props.width,height:n.props.height,top:n.props.top,left:n.props.left},n.domBody=hg("body").node(),n}return g3t(i,[{key:"componentDidMount",value:function(){hg(this.bottomHandle).call(this.dragBottom),hg(this.topHandle).call(this.dragTop),hg(this.leftHandle).call(this.dragLeft),hg(this.rightHandle).call(this.dragRight)}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){"width"in n&&this.setState({width:n.width}),"height"in n&&this.setState({height:n.height})}},{key:"dragBottomFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartHeight+(r[1]-this.dragStartMousePos[1]);C=C>this.minHeight?C:this.minHeight,this.setState({height:C}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragLeftFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartWidth-(r[0]-this.dragStartMousePos[0]);C=C>this.minWidth?C:this.minWidth;let o=this.dragStartLeft+r[0]-this.dragStartMousePos[0];o=C>this.minWidth?o:this.dragStartLeft+this.dragStartWidth-this.minWidth,this.setState({left:o,width:C}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragTopFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartHeight-(r[1]-this.dragStartMousePos[1]);C=C>this.minHeight?C:this.minHeight;let o=this.dragStartTop+r[1]-this.dragStartMousePos[1];o=C>this.minHeight?o:this.dragStartTop+this.dragStartHeight-this.minHeight,this.setState({top:o,height:C}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragRightFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartWidth+(r[0]-this.dragStartMousePos[0]);C=C>this.minWidth?C:this.minWidth,this.setState({width:C}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragBottomLeftFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartHeight+(r[1]-this.dragStartMousePos[1]);C=C>this.minHeight?C:this.minHeight;let o=this.dragStartWidth-(r[0]-this.dragStartMousePos[0]);o=o>this.minWidth?o:this.minWidth;let a=this.dragStartLeft+r[0]-this.dragStartMousePos[0];a=o>this.minWidth?a:this.dragStartLeft+this.dragStartWidth-this.minWidth,this.setState({left:a,width:o,height:C}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragBottomRightFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartWidth+(r[0]-this.dragStartMousePos[0]);C=C>this.minWidth?C:this.minWidth;let o=this.dragStartHeight+(r[1]-this.dragStartMousePos[1]);o=o>this.minHeight?o:this.minHeight,this.setState({width:C,height:o}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragTopRightFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartHeight-(r[1]-this.dragStartMousePos[1]);C=C>this.minHeight?C:this.minHeight;let o=this.dragStartTop+r[1]-this.dragStartMousePos[1];o=C>this.minHeight?o:this.dragStartTop+this.dragStartHeight-this.minHeight;let a=this.dragStartWidth+(r[0]-this.dragStartMousePos[0]);a=a>this.minWidth?a:this.minWidth,this.setState({top:o,width:a,height:C}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragTopLeftFunc",value:function(n){const r=Pg(n,this.domBody);let C=this.dragStartWidth-(r[0]-this.dragStartMousePos[0]);C=C>this.minWidth?C:this.minWidth;let o=this.dragStartLeft+r[0]-this.dragStartMousePos[0];o=C>this.minWidth?o:this.dragStartLeft+this.dragStartWidth-this.minWidth;let a=this.dragStartHeight-(r[1]-this.dragStartMousePos[1]);a=a>this.minHeight?a:this.minHeight;let s=this.dragStartTop+r[1]-this.dragStartMousePos[1];s=a>this.minHeight?s:this.dragStartTop+this.dragStartHeight-this.minHeight,this.setState({top:s,left:o,width:C,height:a}),n.sourceEvent.stopPropagation(),this.sizeChanged()}},{key:"dragStart",value:function(n){this.dragStartMousePos=Pg(n,this.domBody),this.dragStartWidth=this.state.width,this.dragStartHeight=this.state.height,this.dragStartTop=this.state.top,this.dragStartLeft=this.state.left,n.sourceEvent.stopPropagation()}},{key:"sizeChanged",value:function(){this.props.sizeChanged&&this.props.sizeChanged(this.state)}},{key:"rotateClicked",value:function(){this.props.trackRotated(this.state.uid)}},{key:"closeClicked",value:function(){this.props.trackClosed(this.state.uid)}},{key:"render",value:function(){const n=this.props.theme===ii?"white":"black",r={top:this.state.top,left:this.state.left,width:this.state.width,height:this.state.height,opacity:this.props.opacity},C=24,o=24,a={left:this.state.width/2-C/2,width:C},s={top:this.state.height/2-o/2,height:o},A={bottom:{...a,bottom:1},top:{...a,top:1},left:{...s,left:1},right:{...s,right:1}},l=[...this.props.resizeHandles].map(c=>N.createElement("div",{key:c,ref:u=>{this[`${c}Handle`]=u},className:dx[`${c}-draggable-handle`],style:A[c],title:"Resize track"},N.createElement("div",{className:dx[`${c}-draggable-handle-grabber`],style:{borderColor:n}})));return N.createElement("div",{ref:c=>{this.divContainer=c},className:Xg(this.props.className,dx["draggable-div"]),style:r},l)}}]),i}(N.Component);y9e.propTypes={className:L.string,height:L.number,left:L.number,opacity:L.number,resizeHandles:L.object,sizeChanged:L.func,top:L.number,trackClosed:L.func,trackRotated:L.func,uid:L.string,width:L.number,theme:L.symbol};const a3t=um(y9e);function A3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function E2(e){return E2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},E2(e)}let Z9e=function(e){u3t(i,e);var g=d3t(i);function i(I){var n;return A3t(this,i),n=g.call(this,I),n.state={controlsVisible:!1},n}return s3t(i,[{key:"shouldComponentUpdate",value:function(){return!this.resizing}},{key:"handleMouseEnter",value:function(){this.setState({controlsVisible:!0})}},{key:"handleMouseLeave",value:function(){this.setState({controlsVisible:!1})}},{key:"handleMouseMove",value:function(){this.setState({controlsVisible:!0})}},{key:"getControls",value:function(){let n=null;return this.moveable?n=mz(()=>N.createElement("svg",{className:"no-zoom",height:"10px",onClick:()=>{},style:this.getMoveImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#move"}))):n=mz(()=>N.createElement("div",null)),N.createElement("div",{style:{position:"absolute",backgroundColor:"rgba(255,255,255,0.7)",right:"3px",top:"3px",pointerEvents:"none",paddingLeft:"5px",paddingRight:"5px",borderRadius:"5px",border:"1px solid #dddddd"}},N.createElement(n,null),N.createElement("svg",{ref:r=>{this.imgConfig=r},className:"no-zoom",height:"10px",onClick:()=>{const C=qi.findDOMNode(this.imgConfig).getBoundingClientRect();this.props.onConfigTrackMenuOpened(this.props.uid,C)},style:this.getSettingsImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#cog"})),N.createElement("svg",{ref:r=>{this.imgAdd=r},className:"no-zoom",height:"10px",onClick:()=>this.props.onAddSeries(this.props.uid),style:this.getAddImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#plus"})),N.createElement("svg",{ref:r=>{this.imgClose=r},className:"no-zoom",height:"10px",onClick:()=>{const C=qi.findDOMNode(this.imgClose).getBoundingClientRect();this.props.onCloseTrackMenuOpened(this.props.uid,C)},style:this.getCloseImgStyle(),width:"10px"},N.createElement("use",{xlinkHref:"#cross"})))}}]),i}(N.Component);Z9e.propTypes={configMenuOpen:L.bool,onConfigTrackMenuOpened:L.func,onCloseTrackMenuOpened:L.func,onAddSeries:L.func,uid:L.string};function p3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function uAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function M2(e){return M2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},M2(e)}let Jk=function(e){G3t(i,e);var g=v3t(i);function i(I){var n;return p3t(this,i),n=g.call(this,I),n.moveable=!0,n}return b3t(i,[{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.el=n},className:this.props.className,onMouseEnter:this.handleMouseEnter.bind(this),onMouseLeave:()=>{this.handleMouseLeave()},style:{height:this.props.height,width:this.props.width}},N.createElement(a3t,{key:this.props.uid,height:this.props.height,resizeHandles:this.props.editable?this.props.resizeHandles:new Set,sizeChanged:n=>this.props.handleResizeTrack(this.props.uid,n.width,n.height),style:{background:"transparent"},uid:this.props.uid,width:this.props.width}),this.props.editable&&this.getControls(this.state.controlsVisible||this.props.item.configMenuVisible))}}]),i}(Z9e);Jk.propTypes={className:L.string,uid:L.string,item:L.object,height:L.number,width:L.number};function R3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function dAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function z2(e){return z2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},z2(e)}const LV={pointerEvents:"all"};let G9e=function(e){H3t(i,e);var g=T3t(i);function i(){return R3t(this,i),g.apply(this,arguments)}return V3t(i,[{key:"getControls",value:function(n){return N.createElement(Wk,{configMenuVisible:this.props.item.configMenuVisible,imgStyleAdd:LV,imgStyleClose:LV,imgStyleMove:LV,imgStyleSettings:LV,isMoveable:this.moveable,isVisible:n,onAddSeries:this.props.onAddSeries,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,uid:this.props.uid})}}]),i}(Jk);const K3t=TGe(e=>N.createElement(G9e,{className:e.className,editable:e.editable,handleConfigTrack:e.handleConfigTrack,handleResizeTrack:e.handleResizeTrack,height:e.height,item:e.item,onAddSeries:e.onAddSeries,onCloseTrack:e.onCloseTrack,onCloseTrackMenuOpened:e.onCloseTrackMenuOpened,onConfigTrackMenuOpened:e.onConfigTrackMenuOpened,resizeHandles:e.resizeHandles,uid:e.uid,width:e.width}));function rO(){return rO=Object.assign?Object.assign.bind():function(e){for(var g=1;g{const b=g.map((p,y)=>N.createElement(h,{key:`sci-${p.uid}`,className:i,controlAlignLeft:I,sortingIndex:n,index:y,uid:p.uid,height:p.height,width:p.width,item:p,useDragHandle:r,onCloseTrack:s,onCloseTrackMenuOpened:A,onConfigTrackMenuOpened:l,onAddSeries:c,handleConfigTrack:u,editable:d,handleResizeTrack:m,resizeHandles:f}));return N.createElement("div",rO({className:e,style:{height:o,width:a,background:"transparent"}},C),b)}),F3t={"horizontal-tiled-plot":"_horizontal-tiled-plot_1bqkg_1"};function D3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function P2(e){return P2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},P2(e)}function mAe(e){return e&&e.sourceEvent}let J2=function(e){z3t(i,e);var g=P3t(i);function i(I){var n;return D3t(this,i),n=g.call(this,I),n.brushBehavior=YN().on("start",n.brushStarted.bind(TW(n))).on("brush",n.brushed.bind(TW(n))).on("end",n.brushedEnded.bind(TW(n))),n}return x3t(i,[{key:"componentDidMount",value:function(){this.props.isRangeSelectionActive&&this.addBrush()}},{key:"shouldComponentUpdate",value:function(n,r){return this.rangeSelectionTriggered?(this.rangeSelectionTriggered=!1,this.rangeSelectionTriggeredEnd&&this.props.rangeSelection!==n.rangeSelection&&this.moveBrush(n.rangeSelection[0]?n.rangeSelection[0]:null,!0),this.rangeSelectionTriggeredEnd=!1,this.state!==r):this.props.rangeSelection!==n.rangeSelection?(this.moveBrush(n.rangeSelection[0]?n.rangeSelection[0]:null,n.rangeSelectionEnd),this.state!==r):!0}},{key:"componentDidUpdate",value:function(){this.props.isRangeSelectionActive?this.addBrush():this.removeBrush()}},{key:"addBrush",value:function(){!this.brushEl||this.brushElAddedBefore===this.brushEl||(this.brushElAddedBefore&&this.brushElAddedBefore.on(".brush",null),this.brushEl.call(this.brushBehavior),this.brushElAddedBefore=this.brushEl,Yp(this.brushEl,Lo["track-range-selection-group-brush-selection"]))}},{key:"brushed",value:function(n){const r=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!mAe(n)||!this.props.onRangeSelection||r)&&(this.rangeSelectionTriggered=!0,this.props.onRangeSelection(n.selection))}},{key:"brushStarted",value:function(n){!mAe(n)||!n.selection||this.props.onRangeSelectionStart()}},{key:"brushedEnded",value:function(n){if(!this.props.is1dRangeSelection)return;const r=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,n.selection&&n.sourceEvent&&this.props.onRangeSelection&&!r&&(this.rangeSelectionTriggered=!0,this.rangeSelectionTriggeredEnd=!0,this.props.onRangeSelectionEnd(n.selection)),n.selection||(this.rangeSelectionTriggered=!0,this.props.onRangeSelectionReset())}},{key:"moveBrush",value:function(n,r=!1){if(!this.brushEl)return;const C=n?[this.props.scale(n[0]),this.props.scale(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,r?this.brushEl.transition().call(this.brushBehavior.move,C):this.brushEl.call(this.brushBehavior.move,C)}},{key:"removeBrush",value:function(){this.brushElAddedBefore&&(this.brushElAddedBefore.call(this.brushBehavior.move,null),this.brushElAddedBefore.on(".brush",null),this.brushElAddedBefore=void 0,this.props.onRangeSelectionReset())}},{key:"render",value:function(){const n=this.props.tracks.map(o=>o.height).reduce(ql,0),r=this.props.tracks.map(o=>z0(o)).reduce(qS,!1),C=this.props.isRangeSelectionActive?Lo["track-range-selection-active"]:Lo["track-range-selection"];return N.createElement("div",{className:Xg("horizontal-tiled-plot",F3t["horizontal-tiled-plot"])},r&&N.createElement("svg",{ref:o=>{this.brushEl=hg(o)},className:C,style:{height:n,width:this.props.width},xmlns:"http://www.w3.org/2000/svg"}),N.createElement(Pk,{className:Xg(Uo.list,Uo.stylizedList),component:v9e,editable:this.props.editable,handleConfigTrack:this.props.handleConfigTrack,handleResizeTrack:this.props.handleResizeTrack,height:n,helperClass:Uo.stylizedHelper,itemClass:Uo.stylizedItem,itemReactClass:K3t,items:this.props.tracks.map(o=>({configMenuVisible:o.uid===this.props.configTrackMenuId,uid:o.uid||cg.nice(),width:this.props.width,height:o.height,value:o.value})),onAddSeries:this.props.onAddSeries,onCloseTrack:this.props.onCloseTrack,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,onSortEnd:this.props.handleSortEnd,referenceAncestor:this.props.referenceAncestor,resizeHandles:this.props.resizeHandles,useDragHandle:!0,width:this.props.width}))}}]),i}(N.Component);J2.propTypes={configTrackMenuId:L.string,editable:L.bool,handleConfigTrack:L.func,handleResizeTrack:L.func,handleSortEnd:L.func,is1dRangeSelection:L.bool,isRangeSelectionActive:L.bool,onAddSeries:L.func,onCloseTrack:L.func,onCloseTrackMenuOpened:L.func,onConfigTrackMenuOpened:L.func,onRangeSelection:L.func,onRangeSelectionEnd:L.func,onRangeSelectionReset:L.func,onRangeSelectionStart:L.func,rangeSelection:L.array,rangeSelectionEnd:L.bool,referenceAncestor:L.func,resizeHandles:L.object,scale:L.func,tracks:L.array,width:L.number};function _3t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function fAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function O2(e){return O2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},O2(e)}const UV={pointerEvents:"all"};let B9e=function(e){j3t(i,e);var g=$3t(i);function i(){return _3t(this,i),g.apply(this,arguments)}return L3t(i,[{key:"getControls",value:function(n){return N.createElement(Wk,{imgStyleAdd:UV,imgStyleClose:UV,imgStyleMove:UV,imgStyleSettings:UV,isAlignLeft:this.props.controlAlignLeft,isMoveable:this.moveable,isVertical:!0,isVisible:n,onAddSeries:this.props.onAddSeries,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,uid:this.props.uid})}}]),i}(Jk);function gzt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function pAe(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function u0(e){return u0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},u0(e)}let szt=function(e){Czt(i,e);var g=ozt(i);function i(I,n){var r;gzt(this,i),r=g.call(this,I,n);const{registerViewportChanged:C,removeViewportChanged:o}=I,a=cg.nice();return r.uid=a,r.removeViewportChanged=o,r.viewportXDomain=null,r.viewportYDomain=null,C(a,r.viewportChanged.bind(S9e(r))),r}return izt(i,[{key:"viewportChanged",value:function(n,r){const C=n.domain(),o=r.domain();this.viewportXDomain=C,this.viewportYDomain=o,this.draw()}},{key:"draw",value:function(){const n=this.pMain;if(!this.viewportXDomain||!this.viewportYDomain)return;n.clear(),n.lineStyle(1,255,1),n.beginFill(16740363,1);const r=this._xScale(this.viewportXDomain[0]),C=this._yScale(this.viewportYDomain[0]),o=this._xScale(this.viewportXDomain[1])-this._xScale(this.viewportXDomain[0]),a=this._yScale(this.viewportYDomain[1])-this._yScale(this.viewportYDomain[0]);this.pMain.drawRect(r,C,o,a)}},{key:"zoomed",value:function(n,r){this.xScale(n),this.yScale(r),this.draw()}},{key:"setPosition",value:function(n){NW(u0(i.prototype),"setPosition",this).call(this,n),this.pMain.position.y=this.position[1],this.pMain.position.x=this.position[0],this.draw()}}]),i}(fr);function w9e(e){this.size=0,this.limit=e,this._keymap={}}function lzt(e,g){const i={key:e,value:g};if(this._keymap[e]=i,this.tail?(this.tail.newer=i,i.older=this.tail):this.head=i,this.tail=i,this.size===this.limit)return this.shift();this.size+=1}function czt(){const e=this.head;return e&&(this.head.newer?(this.head=this.head.newer,this.head.older=void 0):(this.head=void 0,this.tail=void 0),e.newer=void 0,e.older=void 0,delete this._keymap[e.key],this.size-=1),e}function uzt(e,g){const i=this._keymap[e];if(i!==void 0)return i===this.tail||(i.newer&&(i===this.head&&(this.head=i.newer),i.newer.older=i.older),i.older&&(i.older.newer=i.newer),i.newer=void 0,i.older=this.tail,this.tail&&(this.tail.newer=i),this.tail=i),g?i:i.value}function dzt(e){return this._keymap[e]}function hzt(e,g){const i=this.get(e,!0);let I;return i?(I=i.value,i.value=g):(I=this.put(e,g),I&&(I=I.value)),I}function mzt(e){const g=this._keymap[e];if(g)return delete this._keymap[g.key],g.newer&&g.older?(g.older.newer=g.newer,g.newer.older=g.older):g.newer?(g.newer.older=void 0,this.head=g.newer):g.older?(g.older.newer=void 0,this.tail=g.older):(this.head=void 0,this.tail=void 0),this.size-=1,g.value}function fzt(){this.head=void 0,this.tail=void 0,this.size=0,this._keymap={}}function pzt(){return Object.keys(this._keymap)}function bzt(e,g,i){let I;if(g===!0?(i=!0,g=void 0):typeof g!="object"&&(g=this),i)for(I=this.tail;I;)e.call(g,I.key,I.value,this),I=I.older;else for(I=this.head;I;)e.call(g,I.key,I.value,this),I=I.newer}function yzt(){const e=[];let g=this.head;for(;g;)e.push({key:g.key.toJSON(),value:g.value.toJSON()}),g=g.newer;return e}function Zzt(){let e="",g=this.head;for(;g;)e+=`${String(g.key)}:${g.value}`,g=g.newer,g&&(e+=" < ");return e}Object.assign(w9e.prototype,{put:lzt,get:uzt,find:dzt,keys:pzt,set:hzt,shift:czt,remove:mzt,removeAll:fzt,forEach:bzt,toJSON:yzt,toString:Zzt});const R9e="1.13.3",Gzt="_button_1wnjn_1",hx={button:Gzt,"button-shortcut":"_button-shortcut_1wnjn_35"},Hs=N.forwardRef((e,g)=>N.createElement("button",{ref:g,className:hx[e.styleName]??hx.button,disabled:e.disable,onBlur:e.onBlur,onClick:e.onClick,onMouseDown:e.onMouseDown,onMouseOut:e.onMouseOut,onMouseUp:e.onMouseUp,type:"button"},e.children,e.shortcut&&N.createElement("span",{className:hx["button-shortcut"]},e.shortcut)));Hs.defaultProps={onClick:()=>{},styleName:"",type:"button"};Hs.propTypes={children:L.any,disable:L.bool,onBlur:L.func,onClick:L.func,onMouseDown:L.func,onMouseOut:L.func,onMouseUp:L.func,shortcut:L.string,type:L.string,styleName:L.string};const vzt="_cross_2ke8w_1",Bzt={cross:vzt};function V9e(){return N.createElement("div",{className:Bzt.cross})}function AO(){return AO=Object.assign?Object.assign.bind():function(e){for(var g=1;gN.forwardRef((g,i)=>N.createElement(wzt,null,I=>N.createElement(e,AO({ref:i},g,{modal:I})))),nf={"modal-background":"_modal-background_zzhoe_1","fade-in":"_fade-in_zzhoe_1","modal-hide":"_modal-hide_zzhoe_13","modal-wrap":"_modal-wrap_zzhoe_17","modal-window":"_modal-window_zzhoe_25","fade-scale-in":"_fade-scale-in_zzhoe_1","modal-window-max-height":"_modal-window-max-height_zzhoe_38","modal-content":"_modal-content_zzhoe_42"};function t$(e){const g=()=>{e.modal.close(),e.onClose&&e.onClose()};return N.createElement("div",{className:Xg(nf["modal-background"],{[nf["modal-hide"]]:e.hide})},N.createElement("div",{className:nf["modal-wrap"]},N.createElement("div",{className:Xg(nf["modal-window"],{[nf["modal-window-max-height"]]:e.maxHeight})},e.closeButton&&N.createElement(Hs,{onClick:g},N.createElement(V9e,null)),N.createElement("div",{className:nf["modal-content"]},e.children))))}t$.defaultProps={closeButton:!0,hide:!1,maxHeight:!1};t$.propTypes={children:L.element.isRequired,closeButton:L.bool,hide:L.bool,maxHeight:L.bool,modal:L.object.isRequired,onClose:L.func};const Rzt=Ok(t$),mx={"dialog-header":"_dialog-header_wp50s_1","dialog-main-max-height":"_dialog-main-max-height_wp50s_20","dialog-footer":"_dialog-footer_wp50s_31","dialog-footer-max-height":"_dialog-footer-max-height_wp50s_31"};function g$(e){const g=()=>{e.modal.close(),e.onCancel&&e.onCancel()},i=()=>{e.modal.close(),e.onOkay&&e.onOkay()};return N.createElement(Rzt,{closeButton:!1,hide:e.hide,maxHeight:e.maxHeight},N.createElement(N.Fragment,null,N.createElement("header",{className:mx["dialog-header"]},N.createElement("h3",null,e.title),N.createElement(Hs,{onClick:g},N.createElement(V9e,null))),e.maxHeight?N.createElement("main",{className:Xg(e.maxHeight&&mx["dialog-main-max-height"])},e.children):N.createElement("main",null,e.children),N.createElement("footer",{className:mx[e.maxHeight?"dialog-footer-max-height":"dialog-footer"]},e.okayOnly?N.createElement("div",null):N.createElement(Hs,{onClick:g,shortcut:e.cancelShortcut},e.cancelTitle),N.createElement(Hs,{onClick:i,shortcut:e.okayShortcut},e.okayTitle))))}g$.defaultProps={cancelTitle:"Cancel",hide:!1,maxHeight:!1,okayOnly:!1,okayTitle:"Ok"};g$.propTypes={cancelShortcut:L.string,cancelTitle:L.string,children:L.object,hide:L.bool,maxHeight:L.bool,modal:L.object.isRequired,okayShortcut:L.string,okayTitle:L.string,okayOnly:L.bool,onCancel:L.func.isRequired,onOkay:L.func.isRequired,title:L.string.isRequired};const ww=Ok(g$);var _C={},Rw={},Vzt=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis;const W9e=Vzt;var Wzt=typeof self=="object"&&self&&self.Object===Object&&self,Xzt=W9e||Wzt||Function("return this")();const wa=Xzt;var Hzt=wa.Symbol;const RA=Hzt;var X9e=Object.prototype,Tzt=X9e.hasOwnProperty,Nzt=X9e.toString,bZ=RA?RA.toStringTag:void 0;function kzt(e){var g=Tzt.call(e,bZ),i=e[bZ];try{e[bZ]=void 0;var I=!0}catch{}var n=Nzt.call(e);return I&&(g?e[bZ]=i:delete e[bZ]),n}var Yzt=Object.prototype,Kzt=Yzt.toString;function Fzt(e){return Kzt.call(e)}var Dzt="[object Null]",xzt="[object Undefined]",bAe=RA?RA.toStringTag:void 0;function hu(e){return e==null?e===void 0?xzt:Dzt:bAe&&bAe in Object(e)?kzt(e):Fzt(e)}var Ezt=Array.isArray;const ur=Ezt;function fa(e){return e!=null&&typeof e=="object"}var Mzt="[object String]";function zzt(e){return typeof e=="string"||!ur(e)&&fa(e)&&hu(e)==Mzt}const Pzt=Object.freeze(Object.defineProperty({__proto__:null,default:zzt},Symbol.toStringTag,{value:"Module"})),Jzt=el(Pzt);function Ozt(e){return function(g,i,I){for(var n=-1,r=Object(g),C=I(g),o=C.length;o--;){var a=C[e?o:++n];if(i(r[a],a,r)===!1)break}return g}}var _zt=Ozt();const H9e=_zt;function Lzt(e,g){for(var i=-1,I=Array(e);++i-1&&e%1==0&&e-1&&e%1==0&&e<=nPt}var rPt="[object Arguments]",CPt="[object Array]",oPt="[object Boolean]",aPt="[object Date]",APt="[object Error]",sPt="[object Function]",lPt="[object Map]",cPt="[object Number]",uPt="[object Object]",dPt="[object RegExp]",hPt="[object Set]",mPt="[object String]",fPt="[object WeakMap]",pPt="[object ArrayBuffer]",bPt="[object DataView]",yPt="[object Float32Array]",ZPt="[object Float64Array]",GPt="[object Int8Array]",vPt="[object Int16Array]",BPt="[object Int32Array]",SPt="[object Uint8Array]",wPt="[object Uint8ClampedArray]",RPt="[object Uint16Array]",VPt="[object Uint32Array]",mi={};mi[yPt]=mi[ZPt]=mi[GPt]=mi[vPt]=mi[BPt]=mi[SPt]=mi[wPt]=mi[RPt]=mi[VPt]=!0;mi[rPt]=mi[CPt]=mi[pPt]=mi[oPt]=mi[bPt]=mi[aPt]=mi[APt]=mi[sPt]=mi[lPt]=mi[cPt]=mi[uPt]=mi[dPt]=mi[hPt]=mi[mPt]=mi[fPt]=!1;function WPt(e){return fa(e)&&I$(e.length)&&!!mi[hu(e)]}function n$(e){return function(g){return e(g)}}var k9e=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Yv=k9e&&typeof module=="object"&&module&&!module.nodeType&&module,XPt=Yv&&Yv.exports===k9e,fx=XPt&&W9e.process,HPt=function(){try{var e=Yv&&Yv.require&&Yv.require("util").types;return e||fx&&fx.binding&&fx.binding("util")}catch{}}();const d0=HPt;var vAe=d0&&d0.isTypedArray,TPt=vAe?n$(vAe):WPt;const r$=TPt;var NPt=Object.prototype,kPt=NPt.hasOwnProperty;function Y9e(e,g){var i=ur(e),I=!i&&_2(e),n=!i&&!I&&oS(e),r=!i&&!I&&!n&&r$(e),C=i||I||n||r,o=C?Lzt(e.length,String):[],a=o.length;for(var s in e)(g||kPt.call(e,s))&&!(C&&(s=="length"||n&&(s=="offset"||s=="parent")||r&&(s=="buffer"||s=="byteLength"||s=="byteOffset")||i$(s,a)))&&o.push(s);return o}var YPt=Object.prototype;function C$(e){var g=e&&e.constructor,i=typeof g=="function"&&g.prototype||YPt;return e===i}function K9e(e,g){return function(i){return e(g(i))}}var KPt=K9e(Object.keys,Object);const FPt=KPt;var DPt=Object.prototype,xPt=DPt.hasOwnProperty;function EPt(e){if(!C$(e))return FPt(e);var g=[];for(var i in Object(e))xPt.call(e,i)&&i!="constructor"&&g.push(i);return g}function yC(e){var g=typeof e;return e!=null&&(g=="object"||g=="function")}var MPt="[object AsyncFunction]",zPt="[object Function]",PPt="[object GeneratorFunction]",JPt="[object Proxy]";function o$(e){if(!yC(e))return!1;var g=hu(e);return g==zPt||g==PPt||g==MPt||g==JPt}function ly(e){return e!=null&&I$(e.length)&&!o$(e)}function Vw(e){return ly(e)?Y9e(e):EPt(e)}function F9e(e,g){return e&&H9e(e,g,Vw)}function _k(e){return e}function D9e(e){return typeof e=="function"?e:_k}function OPt(e,g){return e&&F9e(e,D9e(g))}const _Pt=Object.freeze(Object.defineProperty({__proto__:null,default:OPt},Symbol.toStringTag,{value:"Module"})),a$=el(_Pt);var LPt=K9e(Object.getPrototypeOf,Object);const A$=LPt;var UPt="[object Object]",QPt=Function.prototype,jPt=Object.prototype,x9e=QPt.toString,$Pt=jPt.hasOwnProperty,qPt=x9e.call(Object);function E9e(e){if(!fa(e)||hu(e)!=UPt)return!1;var g=A$(e);if(g===null)return!0;var i=$Pt.call(g,"constructor")&&g.constructor;return typeof i=="function"&&i instanceof i&&x9e.call(i)==qPt}const eJt=Object.freeze(Object.defineProperty({__proto__:null,default:E9e},Symbol.toStringTag,{value:"Module"})),tJt=el(eJt);function M9e(e,g){for(var i=-1,I=e==null?0:e.length,n=Array(I);++i-1}function oJt(e,g){var i=this.__data__,I=Lk(i,e);return I<0?(++this.size,i.push([e,g])):i[I][1]=g,this}function Al(e){var g=-1,i=e==null?0:e.length;for(this.clear();++go))return!1;var s=r.get(e),A=r.get(g);if(s&&A)return s==g&&A==e;var l=-1,c=!0,u=i&qJt?new L2:void 0;for(r.set(e,g),r.set(g,e);++l0&&arguments[0]!==void 0?arguments[0]:[],i=[];return(0,B_t.default)(g,function(I){Array.isArray(I)?e(I).map(function(n){return i.push(n)}):(0,G_t.default)(I)?(0,y_t.default)(I,function(n,r){n===!0&&i.push(r),i.push(r+"-"+n)}):(0,p_t.default)(I)&&i.push(I)}),i};Rw.default=S_t;var Xw={};function q9e(e,g){for(var i=-1,I=e==null?0:e.length;++i1&&arguments[1]!==void 0?arguments[1]:[],I=g.default&&(0,nUt.default)(g.default)||{};return i.map(function(n){var r=g[n];return r&&(0,iUt.default)(r,function(C,o){I[o]||(I[o]={}),I[o]=rUt({},I[o],r[o])}),n}),I};Xw.default=CUt;var Nw={};Object.defineProperty(Nw,"__esModule",{value:!0});Nw.autoprefix=void 0;var oUt=a$,OAe=AUt(oUt),aUt=Object.assign||function(e){for(var g=1;g1&&arguments[1]!==void 0?arguments[1]:"span";return function(I){mUt(n,I);function n(){var r,C,o,a;hUt(this,n);for(var s=arguments.length,A=Array(s),l=0;l1&&arguments[1]!==void 0?arguments[1]:"span";return function(I){GUt(n,I);function n(){var r,C,o,a;ZUt(this,n);for(var s=arguments.length,A=Array(s),l=0;l1&&arguments[1]!==void 0?arguments[1]:!0;I[C]=o};return g===0&&n("first-child"),g===i-1&&n("last-child"),(g===0||g%2===0)&&n("even"),Math.abs(g%2)===1&&n("odd"),n("nth-child",g),I};m$.default=BUt;Object.defineProperty(_C,"__esModule",{value:!0});_C.ReactCSS=_C.loop=_C.handleActive=f$=_C.handleHover=_C.hover=void 0;var SUt=Rw,wUt=cy(SUt),RUt=Xw,VUt=cy(RUt),WUt=Nw,XUt=cy(WUt),HUt=kw,sXe=cy(HUt),TUt=Yw,NUt=cy(TUt),kUt=m$,YUt=cy(kUt);function cy(e){return e&&e.__esModule?e:{default:e}}_C.hover=sXe.default;var f$=_C.handleHover=sXe.default;_C.handleActive=NUt.default;_C.loop=YUt.default;var KUt=_C.ReactCSS=function(g){for(var i=arguments.length,I=Array(i>1?i-1:0),n=1;no?c=1:c=Math.round(l*100/o)/100,i.a!==c)return{h:i.h,s:i.s,l:i.l,a:c,source:"rgb"}}else{var u=void 0;if(A<0?u=0:A>C?u=1:u=Math.round(A*100/C)/100,n!==u)return{h:i.h,s:i.s,l:i.l,a:u,source:"rgb"}}return null},Gx={},DUt=function(g,i,I,n){if(typeof document>"u"&&!n)return null;var r=n?new n:document.createElement("canvas");r.width=I*2,r.height=I*2;var C=r.getContext("2d");return C?(C.fillStyle=g,C.fillRect(0,0,r.width,r.height),C.fillStyle=i,C.fillRect(0,0,I,I),C.translate(I,I),C.fillRect(0,0,I,I),r.toDataURL()):null},xUt=function(g,i,I,n){var r=g+"-"+i+"-"+I+(n?"-server":"");if(Gx[r])return Gx[r];var C=DUt(g,i,I,n);return Gx[r]=C,C},UAe=Object.assign||function(e){for(var g=1;g-1},OUt=function(g){return Number(String(g).replace(/%/g,""))},_Ut=1,Sg=function(e){EUt(g,e);function g(I){DUt(this,g);var i=xUt(this,(g.__proto__||Object.getPrototypeOf(g)).call(this));return i.handleBlur=function(){i.state.blurValue&&i.setState({value:i.state.blurValue,blurValue:null})},i.handleChange=function(n){i.setUpdatedValue(n.target.value,n)},i.handleKeyDown=function(n){var C=OUt(n.target.value);if(!isNaN(C)&&JUt(n.keyCode)){var r=i.getArrowOffset(),o=n.keyCode===nXe?C+r:C-r;i.setUpdatedValue(o,n)}},i.handleDrag=function(n){if(i.props.dragLabel){var C=Math.round(i.props.value+n.movementX);C>=0&&C<=i.props.dragMax&&i.props.onChange&&i.props.onChange(i.getValueObjectWithLabel(C),n)}},i.handleMouseDown=function(n){i.props.dragLabel&&(n.preventDefault(),i.handleDrag(n),window.addEventListener("mousemove",i.handleDrag),window.addEventListener("mouseup",i.handleMouseUp))},i.handleMouseUp=function(){i.unbindEventListeners()},i.unbindEventListeners=function(){window.removeEventListener("mousemove",i.handleDrag),window.removeEventListener("mouseup",i.handleMouseUp)},i.state={value:String(I.value).toUpperCase(),blurValue:String(I.value).toUpperCase()},i.inputId="rc-editable-input-"+_Ut++,i}return KUt(g,[{key:"componentDidUpdate",value:function(i,n){this.props.value!==this.state.value&&(i.value!==this.props.value||n.value!==this.state.value)&&(this.input===document.activeElement?this.setState({blurValue:String(this.props.value).toUpperCase()}):this.setState({value:String(this.props.value).toUpperCase(),blurValue:!this.state.blurValue&&String(this.props.value).toUpperCase()}))}},{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"getValueObjectWithLabel",value:function(i){return FUt({},this.props.label,i)}},{key:"getArrowOffset",value:function(){return this.props.arrowOffset||MUt}},{key:"setUpdatedValue",value:function(i,n){var C=this.props.label?this.getValueObjectWithLabel(i):i;this.props.onChange&&this.props.onChange(C,n),this.setState({value:i})}},{key:"render",value:function(){var i=this,n=$t({default:{wrap:{position:"relative"}},"user-override":{wrap:this.props.style&&this.props.style.wrap?this.props.style.wrap:{},input:this.props.style&&this.props.style.input?this.props.style.input:{},label:this.props.style&&this.props.style.label?this.props.style.label:{}},"dragLabel-true":{label:{cursor:"ew-resize"}}},{"user-override":!0},this.props);return N.createElement("div",{style:n.wrap},N.createElement("input",{id:this.inputId,style:n.input,ref:function(r){return i.input=r},value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,onBlur:this.handleBlur,placeholder:this.props.placeholder,spellCheck:"false"}),this.props.label&&!this.props.hideLabel?N.createElement("label",{htmlFor:this.inputId,style:n.label,onMouseDown:this.handleMouseDown},this.props.label):null)}}]),g}(U.PureComponent||U.Component),LUt=function(g,I,i,n){var C=n.clientWidth,r=n.clientHeight,o=typeof g.pageX=="number"?g.pageX:g.touches[0].pageX,a=typeof g.pageY=="number"?g.pageY:g.touches[0].pageY,s=o-(n.getBoundingClientRect().left+window.pageXOffset),A=a-(n.getBoundingClientRect().top+window.pageYOffset);if(I==="vertical"){var l=void 0;if(A<0)l=359;else if(A>r)l=0;else{var c=-(A*100/r)+100;l=360*c/100}if(i.h!==l)return{h:l,s:i.s,l:i.l,a:i.a,source:"hsl"}}else{var u=void 0;if(s<0)u=0;else if(s>C)u=359;else{var d=s*100/C;u=360*d/100}if(i.h!==u)return{h:u,s:i.s,l:i.l,a:i.a,source:"hsl"}}return null},UUt=function(){function e(g,I){for(var i=0;i-1},e7t=function(g){return Number(String(g).replace(/%/g,""))},t7t=1,Sg=function(e){UUt(g,e);function g(i){_Ut(this,g);var I=LUt(this,(g.__proto__||Object.getPrototypeOf(g)).call(this));return I.handleBlur=function(){I.state.blurValue&&I.setState({value:I.state.blurValue,blurValue:null})},I.handleChange=function(n){I.setUpdatedValue(n.target.value,n)},I.handleKeyDown=function(n){var r=e7t(n.target.value);if(!isNaN(r)&&qUt(n.keyCode)){var C=I.getArrowOffset(),o=n.keyCode===lXe?r+C:r-C;I.setUpdatedValue(o,n)}},I.handleDrag=function(n){if(I.props.dragLabel){var r=Math.round(I.props.value+n.movementX);r>=0&&r<=I.props.dragMax&&I.props.onChange&&I.props.onChange(I.getValueObjectWithLabel(r),n)}},I.handleMouseDown=function(n){I.props.dragLabel&&(n.preventDefault(),I.handleDrag(n),window.addEventListener("mousemove",I.handleDrag),window.addEventListener("mouseup",I.handleMouseUp))},I.handleMouseUp=function(){I.unbindEventListeners()},I.unbindEventListeners=function(){window.removeEventListener("mousemove",I.handleDrag),window.removeEventListener("mouseup",I.handleMouseUp)},I.state={value:String(i.value).toUpperCase(),blurValue:String(i.value).toUpperCase()},I.inputId="rc-editable-input-"+t7t++,I}return JUt(g,[{key:"componentDidUpdate",value:function(I,n){this.props.value!==this.state.value&&(I.value!==this.props.value||n.value!==this.state.value)&&(this.input===document.activeElement?this.setState({blurValue:String(this.props.value).toUpperCase()}):this.setState({value:String(this.props.value).toUpperCase(),blurValue:!this.state.blurValue&&String(this.props.value).toUpperCase()}))}},{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"getValueObjectWithLabel",value:function(I){return OUt({},this.props.label,I)}},{key:"getArrowOffset",value:function(){return this.props.arrowOffset||QUt}},{key:"setUpdatedValue",value:function(I,n){var r=this.props.label?this.getValueObjectWithLabel(I):I;this.props.onChange&&this.props.onChange(r,n),this.setState({value:I})}},{key:"render",value:function(){var I=this,n=$t({default:{wrap:{position:"relative"}},"user-override":{wrap:this.props.style&&this.props.style.wrap?this.props.style.wrap:{},input:this.props.style&&this.props.style.input?this.props.style.input:{},label:this.props.style&&this.props.style.label?this.props.style.label:{}},"dragLabel-true":{label:{cursor:"ew-resize"}}},{"user-override":!0},this.props);return N.createElement("div",{style:n.wrap},N.createElement("input",{id:this.inputId,style:n.input,ref:function(C){return I.input=C},value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,onBlur:this.handleBlur,placeholder:this.props.placeholder,spellCheck:"false"}),this.props.label&&!this.props.hideLabel?N.createElement("label",{htmlFor:this.inputId,style:n.label,onMouseDown:this.handleMouseDown},this.props.label):null)}}]),g}(U.PureComponent||U.Component),g7t=function(g,i,I,n){var r=n.clientWidth,C=n.clientHeight,o=typeof g.pageX=="number"?g.pageX:g.touches[0].pageX,a=typeof g.pageY=="number"?g.pageY:g.touches[0].pageY,s=o-(n.getBoundingClientRect().left+window.pageXOffset),A=a-(n.getBoundingClientRect().top+window.pageYOffset);if(i==="vertical"){var l=void 0;if(A<0)l=359;else if(A>C)l=0;else{var c=-(A*100/C)+100;l=360*c/100}if(I.h!==l)return{h:l,s:I.s,l:I.l,a:I.a,source:"hsl"}}else{var u=void 0;if(s<0)u=0;else if(s>r)u=359;else{var d=s*100/r;u=360*d/100}if(I.h!==u)return{h:u,s:I.s,l:I.l,a:I.a,source:"hsl"}}return null},i7t=function(){function e(g,i){for(var I=0;I0){if(++g>=C7t)return arguments[0]}else g=0;return e.apply(void 0,arguments)}}var A7t=a7t(n7t);const s7t=A7t;function l7t(e,g){return s7t(g7t(e,g,Ek),e+"")}function c7t(e,g,I){if(!pr(I))return!1;var i=typeof g;return(i=="number"?Ay(I)&&jj(g,I.length):i=="string"&&g in I)?Rw(I[g],e):!1}function u7t(e){return l7t(function(g,I){var i=-1,n=I.length,C=n>1?I[n-1]:void 0,r=n>2?I[2]:void 0;for(C=e.length>3&&typeof C=="function"?(n--,C):void 0,r&&c7t(I[0],I[1],r)&&(C=n<3?void 0:C,n=1),g=Object(g);++i=g||G<0||l&&v>=C}function f(){var B=fx();if(m(B))return b(B);o=setTimeout(f,h(B))}function b(B){return o=void 0,c&&i?u(B):(i=n=void 0,r)}function p(){o!==void 0&&clearTimeout(o),s=0,i=a=n=o=void 0}function y(){return o===void 0?r:b(fx())}function Z(){var B=fx(),G=m(B);if(i=arguments,n=this,a=B,G){if(o===void 0)return d(a);if(l)return clearTimeout(o),o=setTimeout(f,g),u(a)}return o===void 0&&(o=setTimeout(f,g)),r}return Z.cancel=p,Z.flush=y,Z}var R7t="Expected a function";function V7t(e,g,I){var i=!0,n=!0;if(typeof e!="function")throw new TypeError(R7t);return pr(I)&&(i="leading"in I?!!I.leading:i,n="trailing"in I?!!I.trailing:n),rXe(e,g,{leading:i,maxWait:g,trailing:n})}var W7t=function(g,I,i){var n=i.getBoundingClientRect(),C=n.width,r=n.height,o=typeof g.pageX=="number"?g.pageX:g.touches[0].pageX,a=typeof g.pageY=="number"?g.pageY:g.touches[0].pageY,s=o-(i.getBoundingClientRect().left+window.pageXOffset),A=a-(i.getBoundingClientRect().top+window.pageYOffset);s<0?s=0:s>C&&(s=C),A<0?A=0:A>r&&(A=r);var l=s/C,c=1-A/r;return{h:I.h,s:l,v:c,a:I.a,source:"hsv"}},X7t=function(){function e(g,I){for(var i=0;i0){if(++g>=u7t)return arguments[0]}else g=0;return e.apply(void 0,arguments)}}var f7t=m7t(c7t);const p7t=f7t;function b7t(e,g){return p7t(A7t(e,g,_k),e+"")}function y7t(e,g,i){if(!yC(i))return!1;var I=typeof g;return(I=="number"?ly(i)&&i$(g,i.length):I=="string"&&g in i)?Ww(i[g],e):!1}function Z7t(e){return b7t(function(g,i){var I=-1,n=i.length,r=n>1?i[n-1]:void 0,C=n>2?i[2]:void 0;for(r=e.length>3&&typeof r=="function"?(n--,r):void 0,C&&y7t(i[0],i[1],C)&&(r=n<3?void 0:r,n=1),g=Object(g);++I=g||G<0||l&&v>=r}function f(){var B=vx();if(m(B))return b(B);o=setTimeout(f,h(B))}function b(B){return o=void 0,c&&I?u(B):(I=n=void 0,C)}function p(){o!==void 0&&clearTimeout(o),s=0,I=a=n=o=void 0}function y(){return o===void 0?C:b(vx())}function Z(){var B=vx(),G=m(B);if(I=arguments,n=this,a=B,G){if(o===void 0)return d(a);if(l)return clearTimeout(o),o=setTimeout(f,g),u(a)}return o===void 0&&(o=setTimeout(f,g)),C}return Z.cancel=p,Z.flush=y,Z}var Y7t="Expected a function";function K7t(e,g,i){var I=!0,n=!0;if(typeof e!="function")throw new TypeError(Y7t);return yC(i)&&(I="leading"in i?!!i.leading:I,n="trailing"in i?!!i.trailing:n),uXe(e,g,{leading:I,maxWait:g,trailing:n})}var F7t=function(g,i,I){var n=I.getBoundingClientRect(),r=n.width,C=n.height,o=typeof g.pageX=="number"?g.pageX:g.touches[0].pageX,a=typeof g.pageY=="number"?g.pageY:g.touches[0].pageY,s=o-(I.getBoundingClientRect().left+window.pageXOffset),A=a-(I.getBoundingClientRect().top+window.pageYOffset);s<0?s=0:s>r&&(s=r),A<0?A=0:A>C&&(A=C);var l=s/r,c=1-A/C;return{h:i.h,s:l,v:c,a:i.a,source:"hsv"}},D7t=function(){function e(g,i){for(var I=0;I=0,C=!I&&n&&(g==="hex"||g==="hex6"||g==="hex3"||g==="hex4"||g==="hex8"||g==="name");return C?g==="name"&&this._a===0?this.toName():this.toRgbString():(g==="rgb"&&(i=this.toRgbString()),g==="prgb"&&(i=this.toPercentageRgbString()),(g==="hex"||g==="hex6")&&(i=this.toHexString()),g==="hex3"&&(i=this.toHexString(!0)),g==="hex4"&&(i=this.toHex8String(!0)),g==="hex8"&&(i=this.toHex8String()),g==="name"&&(i=this.toName()),g==="hsl"&&(i=this.toHslString()),g==="hsv"&&(i=this.toHsvString()),i||this.toHexString())},clone:function(){return Nt(this.toString())},_applyModification:function(g,I){var i=g.apply(null,[this].concat([].slice.call(I)));return this._r=i._r,this._g=i._g,this._b=i._b,this.setAlpha(i._a),this},lighten:function(){return this._applyModification(O7t,arguments)},brighten:function(){return this._applyModification(_7t,arguments)},darken:function(){return this._applyModification(L7t,arguments)},desaturate:function(){return this._applyModification(z7t,arguments)},saturate:function(){return this._applyModification(P7t,arguments)},greyscale:function(){return this._applyModification(J7t,arguments)},spin:function(){return this._applyModification(U7t,arguments)},_applyCombination:function(g,I){return g.apply(null,[this].concat([].slice.call(I)))},analogous:function(){return this._applyCombination($7t,arguments)},complement:function(){return this._applyCombination(Q7t,arguments)},monochromatic:function(){return this._applyCombination(q7t,arguments)},splitcomplement:function(){return this._applyCombination(j7t,arguments)},triad:function(){return this._applyCombination(tse,[3])},tetrad:function(){return this._applyCombination(tse,[4])}};Nt.fromRatio=function(e,g){if(L2(e)=="object"){var I={};for(var i in e)e.hasOwnProperty(i)&&(i==="a"?I[i]=e[i]:I[i]=cG(e[i]));e=I}return Nt(e,g)};function F7t(e){var g={r:0,g:0,b:0},I=1,i=null,n=null,C=null,r=!1,o=!1;return typeof e=="string"&&(e=iQt(e)),L2(e)=="object"&&(_A(e.r)&&_A(e.g)&&_A(e.b)?(g=D7t(e.r,e.g,e.b),r=!0,o=String(e.r).substr(-1)==="%"?"prgb":"rgb"):_A(e.h)&&_A(e.s)&&_A(e.v)?(i=cG(e.s),n=cG(e.v),g=E7t(e.h,i,n),r=!0,o="hsv"):_A(e.h)&&_A(e.s)&&_A(e.l)&&(i=cG(e.s),C=cG(e.l),g=x7t(e.h,i,C),r=!0,o="hsl"),e.hasOwnProperty("a")&&(I=e.a)),I=oXe(I),{ok:r,format:e.format||o,r:Math.min(255,Math.max(g.r,0)),g:Math.min(255,Math.max(g.g,0)),b:Math.min(255,Math.max(g.b,0)),a:I}}function D7t(e,g,I){return{r:RI(e,255)*255,g:RI(g,255)*255,b:RI(I,255)*255}}function jAe(e,g,I){e=RI(e,255),g=RI(g,255),I=RI(I,255);var i=Math.max(e,g,I),n=Math.min(e,g,I),C,r,o=(i+n)/2;if(i==n)C=r=0;else{var a=i-n;switch(r=o>.5?a/(2-i-n):a/(i+n),i){case e:C=(g-I)/a+(g1&&(l-=1),l<1/6?s+(A-s)*6*l:l<1/2?A:l<2/3?s+(A-s)*(2/3-l)*6:s}if(g===0)i=n=C=I;else{var o=I<.5?I*(1+g):I+g-I*g,a=2*I-o;i=r(a,o,e+1/3),n=r(a,o,e),C=r(a,o,e-1/3)}return{r:i*255,g:n*255,b:C*255}}function $Ae(e,g,I){e=RI(e,255),g=RI(g,255),I=RI(I,255);var i=Math.max(e,g,I),n=Math.min(e,g,I),C,r,o=i,a=i-n;if(r=i===0?0:a/i,i==n)C=0;else{switch(i){case e:C=(g-I)/a+(g>1)+720)%360;--g;)i.h=(i.h+n)%360,C.push(Nt(i));return C}function q7t(e,g){g=g||6;for(var I=Nt(e).toHsv(),i=I.h,n=I.s,C=I.v,r=[],o=1/g;g--;)r.push(Nt({h:i,s:n,v:C})),C=(C+o)%1;return r}Nt.mix=function(e,g,I){I=I===0?0:I||50;var i=Nt(e).toRgb(),n=Nt(g).toRgb(),C=I/100,r={r:(n.r-i.r)*C+i.r,g:(n.g-i.g)*C+i.g,b:(n.b-i.b)*C+i.b,a:(n.a-i.a)*C+i.a};return Nt(r)};Nt.readability=function(e,g){var I=Nt(e),i=Nt(g);return(Math.max(I.getLuminance(),i.getLuminance())+.05)/(Math.min(I.getLuminance(),i.getLuminance())+.05)};Nt.isReadable=function(e,g,I){var i=Nt.readability(e,g),n,C;switch(C=!1,n=nQt(I),n.level+n.size){case"AAsmall":case"AAAlarge":C=i>=4.5;break;case"AAlarge":C=i>=3;break;case"AAAsmall":C=i>=7;break}return C};Nt.mostReadable=function(e,g,I){var i=null,n=0,C,r,o,a;I=I||{},r=I.includeFallbackColors,o=I.level,a=I.size;for(var s=0;sn&&(n=C,i=Nt(g[s]));return Nt.isReadable(e,i,{level:o,size:a})||!r?i:(I.includeFallbackColors=!1,Nt.mostReadable(e,["#fff","#000"],I))};var lO=Nt.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},eQt=Nt.hexNames=tQt(lO);function tQt(e){var g={};for(var I in e)e.hasOwnProperty(I)&&(g[e[I]]=I);return g}function oXe(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function RI(e,g){gQt(e)&&(e="100%");var I=IQt(e);return e=Math.min(g,Math.max(0,parseFloat(e))),I&&(e=parseInt(e*g,10)/100),Math.abs(e-g)<1e-6?1:e%g/parseFloat(g)}function Lk(e){return Math.min(1,Math.max(0,e))}function jC(e){return parseInt(e,16)}function gQt(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function IQt(e){return typeof e=="string"&&e.indexOf("%")!=-1}function ea(e){return e.length==1?"0"+e:""+e}function cG(e){return e<=1&&(e=e*100+"%"),e}function aXe(e){return Math.round(parseFloat(e)*255).toString(16)}function gse(e){return jC(e)/255}var Ko=function(){var e="[-\\+]?\\d+%?",g="[-\\+]?\\d*\\.\\d+%?",I="(?:"+g+")|(?:"+e+")",i="[\\s|\\(]+("+I+")[,|\\s]+("+I+")[,|\\s]+("+I+")\\s*\\)?",n="[\\s|\\(]+("+I+")[,|\\s]+("+I+")[,|\\s]+("+I+")[,|\\s]+("+I+")\\s*\\)?";return{CSS_UNIT:new RegExp(I),rgb:new RegExp("rgb"+i),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+i),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+i),hsva:new RegExp("hsva"+n),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function _A(e){return!!Ko.CSS_UNIT.exec(e)}function iQt(e){e=e.replace(Y7t,"").replace(K7t,"").toLowerCase();var g=!1;if(lO[e])e=lO[e],g=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var I;return(I=Ko.rgb.exec(e))?{r:I[1],g:I[2],b:I[3]}:(I=Ko.rgba.exec(e))?{r:I[1],g:I[2],b:I[3],a:I[4]}:(I=Ko.hsl.exec(e))?{h:I[1],s:I[2],l:I[3]}:(I=Ko.hsla.exec(e))?{h:I[1],s:I[2],l:I[3],a:I[4]}:(I=Ko.hsv.exec(e))?{h:I[1],s:I[2],v:I[3]}:(I=Ko.hsva.exec(e))?{h:I[1],s:I[2],v:I[3],a:I[4]}:(I=Ko.hex8.exec(e))?{r:jC(I[1]),g:jC(I[2]),b:jC(I[3]),a:gse(I[4]),format:g?"name":"hex8"}:(I=Ko.hex6.exec(e))?{r:jC(I[1]),g:jC(I[2]),b:jC(I[3]),format:g?"name":"hex"}:(I=Ko.hex4.exec(e))?{r:jC(I[1]+""+I[1]),g:jC(I[2]+""+I[2]),b:jC(I[3]+""+I[3]),a:gse(I[4]+""+I[4]),format:g?"name":"hex8"}:(I=Ko.hex3.exec(e))?{r:jC(I[1]+""+I[1]),g:jC(I[2]+""+I[2]),b:jC(I[3]+""+I[3]),format:g?"name":"hex"}:!1}function nQt(e){var g,I;return e=e||{level:"AA",size:"small"},g=(e.level||"AA").toUpperCase(),I=(e.size||"small").toLowerCase(),g!=="AA"&&g!=="AAA"&&(g="AA"),I!=="small"&&I!=="large"&&(I="small"),{level:g,size:I}}var Ise=function(g){var I=["r","g","b","a","h","s","l","v"],i=0,n=0;return k7t(I,function(C){if(g[C]&&(i+=1,isNaN(g[C])||(n+=1),C==="s"||C==="l")){var r=/^\d+%$/;r.test(g[C])&&(n+=1)}}),i===n?g:!1},uG=function(g,I){var i=g.hex?Nt(g.hex):Nt(g),n=i.toHsl(),C=i.toHsv(),r=i.toRgb(),o=i.toHex();n.s===0&&(n.h=I||0,C.h=I||0);var a=o==="000000"&&r.a===0;return{hsl:n,hex:a?"transparent":"#"+o,rgb:r,hsv:C,oldHue:g.h||I||n.h,source:g.source}},mu=function(g){if(g==="transparent")return!0;var I=String(g).charAt(0)==="#"?1:0;return g.length!==4+I&&g.length<7+I&&Nt(g).isValid()},u$=function(g){if(!g)return"#fff";var I=uG(g);if(I.hex==="transparent")return"rgba(0,0,0,0.4)";var i=(I.rgb.r*299+I.rgb.g*587+I.rgb.b*114)/1e3;return i>=128?"#000":"#fff"},px=function(g,I){var i=g.replace("°","");return Nt(I+" ("+i+")")._ok},pZ=Object.assign||function(e){for(var g=1;g1&&arguments[1]!==void 0?arguments[1]:"span";return function(i){cQt(n,i);function n(){var C,r,o,a;lQt(this,n);for(var s=arguments.length,A=Array(s),l=0;l=0||Object.prototype.hasOwnProperty.call(e,i)&&(I[i]=e[i]);return I}var UV=24,vQt=lXe.default=function(e){var g=e.fill,I=g===void 0?"currentColor":g,i=e.width,n=i===void 0?UV:i,C=e.height,r=C===void 0?UV:C,o=e.style,a=o===void 0?{}:o,s=GQt(e,["fill","width","height","style"]);return ose.default.createElement("svg",rse({viewBox:"0 0 "+UV+" "+UV,style:rse({fill:I,width:n,height:r},a)},s),ose.default.createElement("path",{d:"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z"}))},BQt=function(){function e(g,I){for(var i=0;i1&&(n.a=1),i.props.onChange({h:i.props.hsl.h,s:i.props.hsl.s,l:i.props.hsl.l,a:Math.round(n.a*100)/100,source:"rgb"},C)):(n.h||n.s||n.l)&&(typeof n.s=="string"&&n.s.includes("%")&&(n.s=n.s.replace("%","")),typeof n.l=="string"&&n.l.includes("%")&&(n.l=n.l.replace("%","")),n.s==1?n.s=.01:n.l==1&&(n.l=.01),i.props.onChange({h:n.h||i.props.hsl.h,s:Number(Cse(n.s)?i.props.hsl.s:n.s),l:Number(Cse(n.l)?i.props.hsl.l:n.l),source:"hsl"},C))},i.showHighlight=function(n){n.currentTarget.style.background="#eee"},i.hideHighlight=function(n){n.currentTarget.style.background="transparent"},I.hsl.a!==1&&I.view==="hex"?i.state={view:"rgb"}:i.state={view:I.view},i}return BQt(g,[{key:"render",value:function(){var i=this,n=$t({default:{wrap:{paddingTop:"16px",display:"flex"},fields:{flex:"1",display:"flex",marginLeft:"-6px"},field:{paddingLeft:"6px",width:"100%"},alpha:{paddingLeft:"6px",width:"100%"},toggle:{width:"32px",textAlign:"right",position:"relative"},icon:{marginRight:"-4px",marginTop:"12px",cursor:"pointer",position:"relative"},iconHighlight:{position:"absolute",width:"24px",height:"28px",background:"#eee",borderRadius:"4px",top:"10px",left:"12px",display:"none"},input:{fontSize:"11px",color:"#333",width:"100%",borderRadius:"2px",border:"none",boxShadow:"inset 0 0 0 1px #dadada",height:"21px",textAlign:"center"},label:{textTransform:"uppercase",fontSize:"11px",lineHeight:"11px",color:"#969696",textAlign:"center",display:"block",marginTop:"12px"},svg:{fill:"#333",width:"24px",height:"24px",border:"1px transparent solid",borderRadius:"5px"}},disableAlpha:{alpha:{display:"none"}}},this.props,this.state),C=void 0;return this.state.view==="hex"?C=N.createElement("div",{style:n.fields,className:"flexbox-fix"},N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"hex",value:this.props.hex,onChange:this.handleChange}))):this.state.view==="rgb"?C=N.createElement("div",{style:n.fields,className:"flexbox-fix"},N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"r",value:this.props.rgb.r,onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"g",value:this.props.rgb.g,onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"b",value:this.props.rgb.b,onChange:this.handleChange})),N.createElement("div",{style:n.alpha},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"a",value:this.props.rgb.a,arrowOffset:.01,onChange:this.handleChange}))):this.state.view==="hsl"&&(C=N.createElement("div",{style:n.fields,className:"flexbox-fix"},N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"h",value:Math.round(this.props.hsl.h),onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"s",value:Math.round(this.props.hsl.s*100)+"%",onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"l",value:Math.round(this.props.hsl.l*100)+"%",onChange:this.handleChange})),N.createElement("div",{style:n.alpha},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"a",value:this.props.hsl.a,arrowOffset:.01,onChange:this.handleChange})))),N.createElement("div",{style:n.wrap,className:"flexbox-fix"},C,N.createElement("div",{style:n.toggle},N.createElement("div",{style:n.icon,onClick:this.toggleViews,ref:function(o){return i.icon=o}},N.createElement(vQt,{style:n.svg,onMouseOver:this.showHighlight,onMouseEnter:this.showHighlight,onMouseOut:this.hideHighlight}))))}}],[{key:"getDerivedStateFromProps",value:function(i,n){return i.hsl.a!==1&&n.view==="hex"?{view:"rgb"}:null}}]),g}(N.Component);cXe.defaultProps={view:"hex"};var ase=function(){var g=$t({default:{picker:{width:"12px",height:"12px",borderRadius:"6px",transform:"translate(-6px, -1px)",backgroundColor:"rgb(248, 248, 248)",boxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.37)"}}});return N.createElement("div",{style:g.picker})},VQt=function(){var g=$t({default:{picker:{width:"12px",height:"12px",borderRadius:"6px",boxShadow:"inset 0 0 0 1px #fff",transform:"translate(-6px, -6px)"}}});return N.createElement("div",{style:g.picker})},m$=function(g){var I=g.width,i=g.onChange,n=g.disableAlpha,C=g.rgb,r=g.hsl,o=g.hsv,a=g.hex,s=g.renderers,A=g.styles,l=A===void 0?{}:A,c=g.className,u=c===void 0?"":c,d=g.defaultView,h=$t(OC({default:{picker:{width:I,background:"#fff",borderRadius:"2px",boxShadow:"0 0 2px rgba(0,0,0,.3), 0 4px 8px rgba(0,0,0,.3)",boxSizing:"initial",fontFamily:"Menlo"},saturation:{width:"100%",paddingBottom:"55%",position:"relative",borderRadius:"2px 2px 0 0",overflow:"hidden"},Saturation:{radius:"2px 2px 0 0"},body:{padding:"16px 16px 12px"},controls:{display:"flex"},color:{width:"32px"},swatch:{marginTop:"6px",width:"16px",height:"16px",borderRadius:"8px",position:"relative",overflow:"hidden"},active:{absolute:"0px 0px 0px 0px",borderRadius:"8px",boxShadow:"inset 0 0 0 1px rgba(0,0,0,.1)",background:"rgba("+C.r+", "+C.g+", "+C.b+", "+C.a+")",zIndex:"2"},toggles:{flex:"1"},hue:{height:"10px",position:"relative",marginBottom:"8px"},Hue:{radius:"2px"},alpha:{height:"10px",position:"relative"},Alpha:{radius:"2px"}},disableAlpha:{color:{width:"22px"},alpha:{display:"none"},hue:{marginBottom:"0px"},swatch:{width:"10px",height:"10px",marginTop:"0px"}}},l),{disableAlpha:n});return N.createElement("div",{style:h.picker,className:"chrome-picker "+u},N.createElement("div",{style:h.saturation},N.createElement(_k,{style:h.Saturation,hsl:r,hsv:o,pointer:VQt,onChange:i})),N.createElement("div",{style:h.body},N.createElement("div",{style:h.controls,className:"flexbox-fix"},N.createElement("div",{style:h.color},N.createElement("div",{style:h.swatch},N.createElement("div",{style:h.active}),N.createElement(ly,{renderers:s}))),N.createElement("div",{style:h.toggles},N.createElement("div",{style:h.hue},N.createElement(cy,{style:h.Hue,hsl:r,pointer:ase,onChange:i})),N.createElement("div",{style:h.alpha},N.createElement(c$,{style:h.Alpha,rgb:C,hsl:r,pointer:ase,renderers:s,onChange:i})))),N.createElement(cXe,{rgb:C,hsl:r,hex:a,view:d,onChange:i,disableAlpha:n})))};m$.propTypes={width:L.oneOfType([L.string,L.number]),disableAlpha:L.bool,styles:L.object,defaultView:L.oneOf(["hex","rgb","hsl"])};m$.defaultProps={width:225,disableAlpha:!1,styles:{}};_C(m$);var WQt=function(g){var I=g.color,i=g.onClick,n=i===void 0?function(){}:i,C=g.onSwatchHover,r=g.active,o=$t({default:{color:{background:I,width:"15px",height:"15px",float:"left",marginRight:"5px",marginBottom:"5px",position:"relative",cursor:"pointer"},dot:{absolute:"5px 5px 5px 5px",background:u$(I),borderRadius:"50%",opacity:"0"}},active:{dot:{opacity:"1"}},"color-#FFFFFF":{color:{boxShadow:"inset 0 0 0 1px #ddd"},dot:{background:"#000"}},transparent:{dot:{background:"#000"}}},{active:r,"color-#FFFFFF":I==="#FFFFFF",transparent:I==="transparent"});return N.createElement(ym,{style:o.color,color:I,onClick:n,onHover:C,focusStyle:{boxShadow:"0 0 4px "+I}},N.createElement("div",{style:o.dot}))},XQt=function(g){var I=g.hex,i=g.rgb,n=g.onChange,C=$t({default:{fields:{display:"flex",paddingBottom:"6px",paddingRight:"5px",position:"relative"},active:{position:"absolute",top:"6px",left:"5px",height:"9px",width:"9px",background:I},HEXwrap:{flex:"6",position:"relative"},HEXinput:{width:"80%",padding:"0px",paddingLeft:"20%",border:"none",outline:"none",background:"none",fontSize:"12px",color:"#333",height:"16px"},HEXlabel:{display:"none"},RGBwrap:{flex:"3",position:"relative"},RGBinput:{width:"70%",padding:"0px",paddingLeft:"30%",border:"none",outline:"none",background:"none",fontSize:"12px",color:"#333",height:"16px"},RGBlabel:{position:"absolute",top:"3px",left:"0px",lineHeight:"16px",textTransform:"uppercase",fontSize:"12px",color:"#999"}}}),r=function(a,s){a.r||a.g||a.b?n({r:a.r||i.r,g:a.g||i.g,b:a.b||i.b,source:"rgb"},s):n({hex:a.hex,source:"hex"},s)};return N.createElement("div",{style:C.fields,className:"flexbox-fix"},N.createElement("div",{style:C.active}),N.createElement(Sg,{style:{wrap:C.HEXwrap,input:C.HEXinput,label:C.HEXlabel},label:"hex",value:I,onChange:r}),N.createElement(Sg,{style:{wrap:C.RGBwrap,input:C.RGBinput,label:C.RGBlabel},label:"r",value:i.r,onChange:r}),N.createElement(Sg,{style:{wrap:C.RGBwrap,input:C.RGBinput,label:C.RGBlabel},label:"g",value:i.g,onChange:r}),N.createElement(Sg,{style:{wrap:C.RGBwrap,input:C.RGBinput,label:C.RGBlabel},label:"b",value:i.b,onChange:r}))},f$=function(g){var I=g.onChange,i=g.onSwatchHover,n=g.colors,C=g.hex,r=g.rgb,o=g.styles,a=o===void 0?{}:o,s=g.className,A=s===void 0?"":s,l=$t(OC({default:{Compact:{background:"#f6f6f6",radius:"4px"},compact:{paddingTop:"5px",paddingLeft:"5px",boxSizing:"initial",width:"240px"},clear:{clear:"both"}}},a)),c=function(d,h){d.hex?mu(d.hex)&&I({hex:d.hex,source:"hex"},h):I(d,h)};return N.createElement(kw,{style:l.Compact,styles:a},N.createElement("div",{style:l.compact,className:"compact-picker "+A},N.createElement("div",null,hu(n,function(u){return N.createElement(WQt,{key:u,color:u,active:u.toLowerCase()===C,onClick:c,onSwatchHover:i})}),N.createElement("div",{style:l.clear})),N.createElement(XQt,{hex:C,rgb:r,onChange:c})))};f$.propTypes={colors:L.arrayOf(L.string),styles:L.object};f$.defaultProps={colors:["#4D4D4D","#999999","#FFFFFF","#F44E3B","#FE9200","#FCDC00","#DBDF00","#A4DD00","#68CCCA","#73D8FF","#AEA1FF","#FDA1FF","#333333","#808080","#cccccc","#D33115","#E27300","#FCC400","#B0BC00","#68BC00","#16A5A5","#009CE0","#7B64FF","#FA28FF","#000000","#666666","#B3B3B3","#9F0500","#C45100","#FB9E00","#808900","#194D33","#0C797D","#0062B1","#653294","#AB149E"],styles:{}};_C(f$);var HQt=function(g){var I=g.hover,i=g.color,n=g.onClick,C=g.onSwatchHover,r={position:"relative",zIndex:"2",outline:"2px solid #fff",boxShadow:"0 0 5px 2px rgba(0,0,0,0.25)"},o=$t({default:{swatch:{width:"25px",height:"25px",fontSize:"0"}},hover:{swatch:r}},{hover:I});return N.createElement("div",{style:o.swatch},N.createElement(ym,{color:i,onClick:n,onHover:C,focusStyle:r}))};const TQt=l$(HQt);var p$=function(g){var I=g.width,i=g.colors,n=g.onChange,C=g.onSwatchHover,r=g.triangle,o=g.styles,a=o===void 0?{}:o,s=g.className,A=s===void 0?"":s,l=$t(OC({default:{card:{width:I,background:"#fff",border:"1px solid rgba(0,0,0,0.2)",boxShadow:"0 3px 12px rgba(0,0,0,0.15)",borderRadius:"4px",position:"relative",padding:"5px",display:"flex",flexWrap:"wrap"},triangle:{position:"absolute",border:"7px solid transparent",borderBottomColor:"#fff"},triangleShadow:{position:"absolute",border:"8px solid transparent",borderBottomColor:"rgba(0,0,0,0.15)"}},"hide-triangle":{triangle:{display:"none"},triangleShadow:{display:"none"}},"top-left-triangle":{triangle:{top:"-14px",left:"10px"},triangleShadow:{top:"-16px",left:"9px"}},"top-right-triangle":{triangle:{top:"-14px",right:"10px"},triangleShadow:{top:"-16px",right:"9px"}},"bottom-left-triangle":{triangle:{top:"35px",left:"10px",transform:"rotate(180deg)"},triangleShadow:{top:"37px",left:"9px",transform:"rotate(180deg)"}},"bottom-right-triangle":{triangle:{top:"35px",right:"10px",transform:"rotate(180deg)"},triangleShadow:{top:"37px",right:"9px",transform:"rotate(180deg)"}}},a),{"hide-triangle":r==="hide","top-left-triangle":r==="top-left","top-right-triangle":r==="top-right","bottom-left-triangle":r==="bottom-left","bottom-right-triangle":r==="bottom-right"}),c=function(d,h){return n({hex:d,source:"hex"},h)};return N.createElement("div",{style:l.card,className:"github-picker "+A},N.createElement("div",{style:l.triangleShadow}),N.createElement("div",{style:l.triangle}),hu(i,function(u){return N.createElement(TQt,{color:u,key:u,onClick:c,onSwatchHover:C})}))};p$.propTypes={width:L.oneOfType([L.string,L.number]),colors:L.arrayOf(L.string),triangle:L.oneOf(["hide","top-left","top-right","bottom-left","bottom-right"]),styles:L.object};p$.defaultProps={width:200,colors:["#B80000","#DB3E00","#FCCB00","#008B02","#006B76","#1273DE","#004DCF","#5300EB","#EB9694","#FAD0C3","#FEF3BD","#C1E1C5","#BEDADC","#C4DEF6","#BED3F3","#D4C4FB"],triangle:"top-left",styles:{}};_C(p$);var NQt=function(g){var I=g.direction,i=$t({default:{picker:{width:"18px",height:"18px",borderRadius:"50%",transform:"translate(-9px, -1px)",backgroundColor:"rgb(248, 248, 248)",boxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.37)"}},vertical:{picker:{transform:"translate(-3px, -9px)"}}},{vertical:I==="vertical"});return N.createElement("div",{style:i.picker})},kQt=Object.assign||function(e){for(var g=1;g.5});return N.createElement("div",{style:i.picker})},DQt=function(){var g=$t({default:{triangle:{width:0,height:0,borderStyle:"solid",borderWidth:"4px 0 4px 6px",borderColor:"transparent transparent transparent #fff",position:"absolute",top:"1px",left:"1px"},triangleBorder:{width:0,height:0,borderStyle:"solid",borderWidth:"5px 0 5px 8px",borderColor:"transparent transparent transparent #555"},left:{Extend:"triangleBorder",transform:"translate(-13px, -4px)"},leftInside:{Extend:"triangle",transform:"translate(-8px, -5px)"},right:{Extend:"triangleBorder",transform:"translate(20px, -14px) rotate(180deg)"},rightInside:{Extend:"triangle",transform:"translate(-8px, -5px)"}}});return N.createElement("div",{style:g.pointer},N.createElement("div",{style:g.left},N.createElement("div",{style:g.leftInside})),N.createElement("div",{style:g.right},N.createElement("div",{style:g.rightInside})))},Ase=function(g){var I=g.onClick,i=g.label,n=g.children,C=g.active,r=$t({default:{button:{backgroundImage:"linear-gradient(-180deg, #FFFFFF 0%, #E6E6E6 100%)",border:"1px solid #878787",borderRadius:"2px",height:"20px",boxShadow:"0 1px 0 0 #EAEAEA",fontSize:"14px",color:"#000",lineHeight:"20px",textAlign:"center",marginBottom:"10px",cursor:"pointer"}},active:{button:{boxShadow:"0 0 0 1px #878787"}}},{active:C});return N.createElement("div",{style:r.button,onClick:I},i||n)},xQt=function(g){var I=g.rgb,i=g.currentColor,n=$t({default:{swatches:{border:"1px solid #B3B3B3",borderBottom:"1px solid #F0F0F0",marginBottom:"2px",marginTop:"1px"},new:{height:"34px",background:"rgb("+I.r+","+I.g+", "+I.b+")",boxShadow:"inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 1px 0 #000"},current:{height:"34px",background:i,boxShadow:"inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 -1px 0 #000"},label:{fontSize:"14px",color:"#000",textAlign:"center"}}});return N.createElement("div",null,N.createElement("div",{style:n.label},"new"),N.createElement("div",{style:n.swatches},N.createElement("div",{style:n.new}),N.createElement("div",{style:n.current})),N.createElement("div",{style:n.label},"current"))},EQt=function(){function e(g,I){for(var i=0;i100&&(A.a=100),A.a/=100,I({h:n.h,s:n.s,l:n.l,a:A.a,source:"rgb"},l))};return N.createElement("div",{style:o.fields,className:"flexbox-fix"},N.createElement("div",{style:o.double},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"hex",value:C.replace("#",""),onChange:a})),N.createElement("div",{style:o.single},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"r",value:i.r,onChange:a,dragLabel:"true",dragMax:"255"})),N.createElement("div",{style:o.single},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"g",value:i.g,onChange:a,dragLabel:"true",dragMax:"255"})),N.createElement("div",{style:o.single},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"b",value:i.b,onChange:a,dragLabel:"true",dragMax:"255"})),N.createElement("div",{style:o.alpha},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"a",value:Math.round(i.a*100),onChange:a,dragLabel:"true",dragMax:"100"})))},OQt=Object.assign||function(e){for(var g=1;g=0||Object.prototype.hasOwnProperty.call(e,i)&&(I[i]=e[i]);return I}var QV=24,e4t=dXe.default=function(e){var g=e.fill,I=g===void 0?"currentColor":g,i=e.width,n=i===void 0?QV:i,C=e.height,r=C===void 0?QV:C,o=e.style,a=o===void 0?{}:o,s=qQt(e,["fill","width","height","style"]);return lse.default.createElement("svg",sse({viewBox:"0 0 "+QV+" "+QV,style:sse({fill:I,width:n,height:r},a)},s),lse.default.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))},t4t=function(g){var I=g.color,i=g.onClick,n=i===void 0?function(){}:i,C=g.onSwatchHover,r=g.first,o=g.last,a=g.active,s=$t({default:{color:{width:"40px",height:"24px",cursor:"pointer",background:I,marginBottom:"1px"},check:{color:u$(I),marginLeft:"8px",display:"none"}},first:{color:{overflow:"hidden",borderRadius:"2px 2px 0 0"}},last:{color:{overflow:"hidden",borderRadius:"0 0 2px 2px"}},active:{check:{display:"block"}},"color-#FFFFFF":{color:{boxShadow:"inset 0 0 0 1px #ddd"},check:{color:"#333"}},transparent:{check:{color:"#333"}}},{first:r,last:o,active:a,"color-#FFFFFF":I==="#FFFFFF",transparent:I==="transparent"});return N.createElement(ym,{color:I,style:s.color,onClick:n,onHover:C,focusStyle:{boxShadow:"0 0 4px "+I}},N.createElement("div",{style:s.check},N.createElement(e4t,null)))},g4t=function(g){var I=g.onClick,i=g.onSwatchHover,n=g.group,C=g.active,r=$t({default:{group:{paddingBottom:"10px",width:"40px",float:"left",marginRight:"10px"}}});return N.createElement("div",{style:r.group},hu(n,function(o,a){return N.createElement(t4t,{key:o,color:o,active:o.toLowerCase()===C,first:a===0,last:a===n.length-1,onClick:I,onSwatchHover:i})}))},v$=function(g){var I=g.width,i=g.height,n=g.onChange,C=g.onSwatchHover,r=g.colors,o=g.hex,a=g.styles,s=a===void 0?{}:a,A=g.className,l=A===void 0?"":A,c=$t(OC({default:{picker:{width:I,height:i},overflow:{height:i,overflowY:"scroll"},body:{padding:"16px 0 6px 16px"},clear:{clear:"both"}}},s)),u=function(h,m){return n({hex:h,source:"hex"},m)};return N.createElement("div",{style:c.picker,className:"swatches-picker "+l},N.createElement(kw,null,N.createElement("div",{style:c.overflow},N.createElement("div",{style:c.body},hu(r,function(d){return N.createElement(g4t,{key:d.toString(),group:d,active:o,onClick:u,onSwatchHover:C})}),N.createElement("div",{style:c.clear})))))};v$.propTypes={width:L.oneOfType([L.string,L.number]),height:L.oneOfType([L.string,L.number]),colors:L.arrayOf(L.arrayOf(L.string)),styles:L.object};v$.defaultProps={width:320,height:240,colors:[[Zf[900],Zf[700],Zf[500],Zf[300],Zf[100]],[Gf[900],Gf[700],Gf[500],Gf[300],Gf[100]],[vf[900],vf[700],vf[500],vf[300],vf[100]],[Bf[900],Bf[700],Bf[500],Bf[300],Bf[100]],[Sf[900],Sf[700],Sf[500],Sf[300],Sf[100]],[wf[900],wf[700],wf[500],wf[300],wf[100]],[Rf[900],Rf[700],Rf[500],Rf[300],Rf[100]],[Vf[900],Vf[700],Vf[500],Vf[300],Vf[100]],[Wf[900],Wf[700],Wf[500],Wf[300],Wf[100]],["#194D33",dG[700],dG[500],dG[300],dG[100]],[Xf[900],Xf[700],Xf[500],Xf[300],Xf[100]],[Hf[900],Hf[700],Hf[500],Hf[300],Hf[100]],[Tf[900],Tf[700],Tf[500],Tf[300],Tf[100]],[Nf[900],Nf[700],Nf[500],Nf[300],Nf[100]],[kf[900],kf[700],kf[500],kf[300],kf[100]],[Yf[900],Yf[700],Yf[500],Yf[300],Yf[100]],[Kf[900],Kf[700],Kf[500],Kf[300],Kf[100]],[Ff[900],Ff[700],Ff[500],Ff[300],Ff[100]],["#000000","#525252","#969696","#D9D9D9","#FFFFFF"]],styles:{}};_C(v$);var B$=function(g){var I=g.onChange,i=g.onSwatchHover,n=g.hex,C=g.colors,r=g.width,o=g.triangle,a=g.styles,s=a===void 0?{}:a,A=g.className,l=A===void 0?"":A,c=$t(OC({default:{card:{width:r,background:"#fff",border:"0 solid rgba(0,0,0,0.25)",boxShadow:"0 1px 4px rgba(0,0,0,0.25)",borderRadius:"4px",position:"relative"},body:{padding:"15px 9px 9px 15px"},label:{fontSize:"18px",color:"#fff"},triangle:{width:"0px",height:"0px",borderStyle:"solid",borderWidth:"0 9px 10px 9px",borderColor:"transparent transparent #fff transparent",position:"absolute"},triangleShadow:{width:"0px",height:"0px",borderStyle:"solid",borderWidth:"0 9px 10px 9px",borderColor:"transparent transparent rgba(0,0,0,.1) transparent",position:"absolute"},hash:{background:"#F0F0F0",height:"30px",width:"30px",borderRadius:"4px 0 0 4px",float:"left",color:"#98A1A4",display:"flex",alignItems:"center",justifyContent:"center"},input:{width:"100px",fontSize:"14px",color:"#666",border:"0px",outline:"none",height:"28px",boxShadow:"inset 0 0 0 1px #F0F0F0",boxSizing:"content-box",borderRadius:"0 4px 4px 0",float:"left",paddingLeft:"8px"},swatch:{width:"30px",height:"30px",float:"left",borderRadius:"4px",margin:"0 6px 6px 0"},clear:{clear:"both"}},"hide-triangle":{triangle:{display:"none"},triangleShadow:{display:"none"}},"top-left-triangle":{triangle:{top:"-10px",left:"12px"},triangleShadow:{top:"-11px",left:"12px"}},"top-right-triangle":{triangle:{top:"-10px",right:"12px"},triangleShadow:{top:"-11px",right:"12px"}}},s),{"hide-triangle":o==="hide","top-left-triangle":o==="top-left","top-right-triangle":o==="top-right"}),u=function(h,m){mu(h)&&I({hex:h,source:"hex"},m)};return N.createElement("div",{style:c.card,className:"twitter-picker "+l},N.createElement("div",{style:c.triangleShadow}),N.createElement("div",{style:c.triangle}),N.createElement("div",{style:c.body},hu(C,function(d,h){return N.createElement(ym,{key:h,color:d,hex:d,style:c.swatch,onClick:u,onHover:i,focusStyle:{boxShadow:"0 0 4px "+d}})}),N.createElement("div",{style:c.hash},"#"),N.createElement(Sg,{label:null,style:{input:c.input},value:n.replace("#",""),onChange:u}),N.createElement("div",{style:c.clear})))};B$.propTypes={width:L.oneOfType([L.string,L.number]),triangle:L.oneOf(["hide","top-left","top-right"]),colors:L.arrayOf(L.string),styles:L.object};B$.defaultProps={width:276,colors:["#FF6900","#FCB900","#7BDCB5","#00D084","#8ED1FC","#0693E3","#ABB8C3","#EB144C","#F78DA7","#9900EF"],triangle:"top-left",styles:{}};_C(B$);var S$=function(g){var I=$t({default:{picker:{width:"20px",height:"20px",borderRadius:"22px",border:"2px #fff solid",transform:"translate(-12px, -13px)",background:"hsl("+Math.round(g.hsl.h)+", "+Math.round(g.hsl.s*100)+"%, "+Math.round(g.hsl.l*100)+"%)"}}});return N.createElement("div",{style:I.picker})};S$.propTypes={hsl:L.shape({h:L.number,s:L.number,l:L.number,a:L.number})};S$.defaultProps={hsl:{a:1,h:249.94,l:.2,s:.5}};var w$=function(g){var I=$t({default:{picker:{width:"20px",height:"20px",borderRadius:"22px",transform:"translate(-10px, -7px)",background:"hsl("+Math.round(g.hsl.h)+", 100%, 50%)",border:"2px white solid"}}});return N.createElement("div",{style:I.picker})};w$.propTypes={hsl:L.shape({h:L.number,s:L.number,l:L.number,a:L.number})};w$.defaultProps={hsl:{a:1,h:249.94,l:.2,s:.5}};var I4t=function(g){var I=g.onChange,i=g.rgb,n=g.hsl,C=g.hex,r=g.hsv,o=function(u,d){if(u.hex)mu(u.hex)&&I({hex:u.hex,source:"hex"},d);else if(u.rgb){var h=u.rgb.split(",");px(u.rgb,"rgb")&&I({r:h[0],g:h[1],b:h[2],a:1,source:"rgb"},d)}else if(u.hsv){var m=u.hsv.split(",");px(u.hsv,"hsv")&&(m[2]=m[2].replace("%",""),m[1]=m[1].replace("%",""),m[0]=m[0].replace("°",""),m[1]==1?m[1]=.01:m[2]==1&&(m[2]=.01),I({h:Number(m[0]),s:Number(m[1]),v:Number(m[2]),source:"hsv"},d))}else if(u.hsl){var f=u.hsl.split(",");px(u.hsl,"hsl")&&(f[2]=f[2].replace("%",""),f[1]=f[1].replace("%",""),f[0]=f[0].replace("°",""),l[1]==1?l[1]=.01:l[2]==1&&(l[2]=.01),I({h:Number(f[0]),s:Number(f[1]),v:Number(f[2]),source:"hsl"},d))}},a=$t({default:{wrap:{display:"flex",height:"100px",marginTop:"4px"},fields:{width:"100%"},column:{paddingTop:"10px",display:"flex",justifyContent:"space-between"},double:{padding:"0px 4.4px",boxSizing:"border-box"},input:{width:"100%",height:"38px",boxSizing:"border-box",padding:"4px 10% 3px",textAlign:"center",border:"1px solid #dadce0",fontSize:"11px",textTransform:"lowercase",borderRadius:"5px",outline:"none",fontFamily:"Roboto,Arial,sans-serif"},input2:{height:"38px",width:"100%",border:"1px solid #dadce0",boxSizing:"border-box",fontSize:"11px",textTransform:"lowercase",borderRadius:"5px",outline:"none",paddingLeft:"10px",fontFamily:"Roboto,Arial,sans-serif"},label:{textAlign:"center",fontSize:"12px",background:"#fff",position:"absolute",textTransform:"uppercase",color:"#3c4043",width:"35px",top:"-6px",left:"0",right:"0",marginLeft:"auto",marginRight:"auto",fontFamily:"Roboto,Arial,sans-serif"},label2:{left:"10px",textAlign:"center",fontSize:"12px",background:"#fff",position:"absolute",textTransform:"uppercase",color:"#3c4043",width:"32px",top:"-6px",fontFamily:"Roboto,Arial,sans-serif"},single:{flexGrow:"1",margin:"0px 4.4px"}}}),s=i.r+", "+i.g+", "+i.b,A=Math.round(n.h)+"°, "+Math.round(n.s*100)+"%, "+Math.round(n.l*100)+"%",l=Math.round(r.h)+"°, "+Math.round(r.s*100)+"%, "+Math.round(r.v*100)+"%";return N.createElement("div",{style:a.wrap,className:"flexbox-fix"},N.createElement("div",{style:a.fields},N.createElement("div",{style:a.double},N.createElement(Sg,{style:{input:a.input,label:a.label},label:"hex",value:C,onChange:o})),N.createElement("div",{style:a.column},N.createElement("div",{style:a.single},N.createElement(Sg,{style:{input:a.input2,label:a.label2},label:"rgb",value:s,onChange:o})),N.createElement("div",{style:a.single},N.createElement(Sg,{style:{input:a.input2,label:a.label2},label:"hsv",value:l,onChange:o})),N.createElement("div",{style:a.single},N.createElement(Sg,{style:{input:a.input2,label:a.label2},label:"hsl",value:A,onChange:o})))))},R$=function(g){var I=g.width,i=g.onChange,n=g.rgb,C=g.hsl,r=g.hsv,o=g.hex,a=g.header,s=g.styles,A=s===void 0?{}:s,l=g.className,c=l===void 0?"":l,u=$t(OC({default:{picker:{width:I,background:"#fff",border:"1px solid #dfe1e5",boxSizing:"initial",display:"flex",flexWrap:"wrap",borderRadius:"8px 8px 0px 0px"},head:{height:"57px",width:"100%",paddingTop:"16px",paddingBottom:"16px",paddingLeft:"16px",fontSize:"20px",boxSizing:"border-box",fontFamily:"Roboto-Regular,HelveticaNeue,Arial,sans-serif"},saturation:{width:"70%",padding:"0px",position:"relative",overflow:"hidden"},swatch:{width:"30%",height:"228px",padding:"0px",background:"rgba("+n.r+", "+n.g+", "+n.b+", 1)",position:"relative",overflow:"hidden"},body:{margin:"auto",width:"95%"},controls:{display:"flex",boxSizing:"border-box",height:"52px",paddingTop:"22px"},color:{width:"32px"},hue:{height:"8px",position:"relative",margin:"0px 16px 0px 16px",width:"100%"},Hue:{radius:"2px"}}},A));return N.createElement("div",{style:u.picker,className:"google-picker "+c},N.createElement("div",{style:u.head},a),N.createElement("div",{style:u.swatch}),N.createElement("div",{style:u.saturation},N.createElement(_k,{hsl:C,hsv:r,pointer:S$,onChange:i})),N.createElement("div",{style:u.body},N.createElement("div",{style:u.controls,className:"flexbox-fix"},N.createElement("div",{style:u.hue},N.createElement(cy,{style:u.Hue,hsl:C,radius:"4px",pointer:w$,onChange:i}))),N.createElement(I4t,{rgb:n,hsl:C,hex:o,hsv:r,onChange:i})))};R$.propTypes={width:L.oneOfType([L.string,L.number]),styles:L.object,header:L.string};R$.defaultProps={width:652,styles:{},header:"Color picker"};_C(R$);function i4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function U2(e){return U2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},U2(e)}let hXe=function(e){o4t(I,e);var g=a4t(I);function I(i){var n;i4t(this,I),n=g.call(this,i);const C=Sb(i.color);return n.state={displayColorPicker:!1,color:{r:C.r,g:C.g,b:C.b,a:C.opacity}},n}return n4t(I,[{key:"handleClick",value:function(){this.setState(n=>({displayColorPicker:!n.displayColorPicker}))}},{key:"handleClose",value:function(){this.setState({displayColorPicker:!1})}},{key:"handleChange",value:function(n){const C=n.rgb,r=`rgba(${C.r},${C.g},${C.b},${C.a})`;this.props.onChange(r),this.setState({color:n.rgb})}},{key:"render",value:function(){const n=$t({default:{color:{width:"32px",height:"14px",borderRadius:"2px",background:`rgba(${this.state.color.r}, ${this.state.color.g}, ${this.state.color.b}, ${this.state.color.a})`},swatch:{padding:"5px",background:"#fff",cursor:"pointer",borderRadius:"1px"},popover:{position:"absolute",zIndex:"2"},cover:{position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}}});return N.createElement("div",null,N.createElement("div",{onClick:this.handleClick.bind(this),style:n.swatch},N.createElement("div",{style:n.color})),this.state.displayColorPicker?N.createElement("div",{style:n.popover},N.createElement("div",{onClick:this.handleClose.bind(this),style:n.cover}),N.createElement(LQt,{color:this.state.color,onChange:this.handleChange.bind(this)})):null)}}]),I}(N.Component);hXe.propTypes={color:L.string,onChange:L.func};function c4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function use(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Q2(e){return Q2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},Q2(e)}let dO=function(e){m4t(I,e);var g=f4t(I);function I(i){var n;return c4t(this,I),n=g.call(this,i),n.state={colors:i.track.options.colorRange.slice()},n}return u4t(I,[{key:"handleColorsChanged",value:function(n){this.setState({colors:n})}},{key:"handleSubmit",value:function(){const n=this.props.track.options;n.colorRange=this.state.colors,this.props.onSubmit(this.props.track.options)}},{key:"handleAddColor",value:function(){this.setState(n=>({colors:n.colors.concat(n.colors[n.colors.length-1])}))}},{key:"handleRemoveColor",value:function(n){this.setState(C=>({colors:C.colors.slice(0,n).concat(C.colors.slice(n+1))}))}},{key:"render",value:function(){const n=JSON.parse(JSON.stringify(this.props.track)),C=Object.assign(n,{options:{colorRange:this.state.colors}}),r={editable:!1,zoomFixed:!0,views:[{uid:`hmo-${this.props.track.uid}`,initialXDomain:this.props.xScale?this.props.xScale.domain():[0,1],initialYDomain:this.props.yScale?this.props.yScale.domain():[0,1],tracks:{center:[C]},layout:{x:0,y:0,h:12,w:12,i:`hmo-${this.props.track.id}`}}]},o=this.state.colors.map((s,A)=>{const l=this.state.colors.length>2&&A===this.state.colors.length-1?N.createElement("div",{onClick:()=>this.handleRemoveColor(A),style:{background:"white",position:"absolute",top:0,right:0,opacity:1,width:14,height:14,borderRadius:2,cursor:"pointer"}},N.createElement("svg",{height:"10px",style:{position:"absolute",top:2,right:2,opacity:.5,width:10,height:10}},N.createElement("use",{xlinkHref:"#cross"}))):null;return N.createElement("div",{key:`l${A}`,style:{borderRadius:"1px",boxShadow:"0 0 0 1px #E5E5E5",position:"relative",outline:"none"}},l,N.createElement(hXe,{key:A,color:this.state.colors[A],onChange:c=>{this.setState(u=>{const d=u.colors.slice();return d[A]=c,{colors:d}},()=>{this.handleColorsChanged(this.state.colors)})}}))}).reverse(),a=this.state.colors.length<10?N.createElement("div",{onClick:this.handleAddColor.bind(this),style:{position:"relative",outline:"none",height:"25px",padding:"5px",background:"#fff",borderRadius:"1px",boxShadow:"0 0 0 1px #E5E5E5",cursor:"pointer"}},N.createElement("div",{style:{textAlign:"center",width:"32px",height:"14px"}},N.createElement("svg",{height:"100%",style:{opacity:.5,margin:"auto",display:"block"},width:"10px"},N.createElement("use",{xlinkHref:"#plus"})))):null;return N.createElement(Bw,{okayTitle:"Submit",onCancel:this.props.onCancel,onOkay:this.handleSubmit.bind(this),title:"Custom Color Map"},N.createElement("table",{className:"table-track-options"},N.createElement("thead",null),N.createElement("tbody",{style:{verticalAlign:"top"}},N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},N.createElement("table",null,N.createElement("tbody",null,N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},"Preview")),N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},N.createElement("div",{style:{width:200}},N.createElement(dy,{options:{bounded:!1},viewConfig:r}))))))),N.createElement("td",{className:"td-track-options"},N.createElement("table",null,N.createElement("tbody",null,N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},"Colors")),N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},a,N.createElement("div",{style:{position:"relative"}},o))))))))))}}]),I}(N.Component);dO.propTypes={handleCancel:L.func,onCancel:L.func,onSubmit:L.func,track:L.object,xScale:L.object,yScale:L.object};const dse=e=>{if(!e.header)return[];const g=e.header.split(" "),I=[];for(let i=0;ie.reduce((i,n)=>(i[n]={name:`${n*I}${g}`,value:n},i),{}),UC={yes:{name:"Yes",value:!0},no:{name:"No",value:!1}},NI={black:{name:"Black",value:"black"},blue:{name:"Blue",value:"blue"},brown:{name:"Brown",value:"brown"},cyan:{name:"Cyan",value:"cyan"},green:{name:"Green",value:"green"},grey:{name:"Grey",value:"grey"},orange:{name:"Orange",value:"orange"},purple:{name:"Purple",value:"purple"},turquoise:{name:"Turquoise",value:"turquoise"},red:{name:"Red",value:"red"},white:{name:"White",value:"white"}},Z4t={use_stroke:{name:"Glyph color",value:"[glyph-color]"}},hG=u0([1,2,3,5,8,13,21]),G4t=Object.assign(hG,{none:{name:"none",value:"none"}}),jV=u0([0,2,4,8,16,32,64,128,256]),Sl=u0([0,.2,.4,.6,.8,1],"%",100),v4t=u0([.2,.4,.6,.8,1],"%",100),an={axisLabelFormatting:{name:"Axis Label Formatting",inlineOptions:{normal:{name:"normal",value:"normal"},scientific:{name:"scientific",value:"scientific"}}},flipDiagonal:{name:"Flip Across Diagonal",inlineOptions:{none:{name:"No",value:"none"},yes:{name:"Yes",value:"yes"},copy:{name:"Copy",value:"copy"}}},heatmapValueScaling:{name:"Value Scaling",inlineOptions:{linear:{name:"Linear",value:"linear"},log:{name:"Log",value:"log"}}},valueScaling:{name:"Value Scaling",inlineOptions:{linear:{name:"Linear",value:"linear"},log:{name:"Log",value:"log"}}},extent:{name:"Extent",inlineOptions:{full:{name:"Full",value:"full"},upperRight:{name:"Upper Right",value:"upper-right"},lowerLeft:{name:"Lower Left",value:"lower-left"}}},labelLeftMargin:{name:"Label Left Margin",inlineOptions:jV},labelRightMargin:{name:"Label Right Margin",inlineOptions:jV},labelTopMargin:{name:"Label Top Margin",inlineOptions:jV},labelBottomMargin:{name:"Label Bottom Margin",inlineOptions:jV},labelShowResolution:{name:"Label Show Resolution",inlineOptions:UC},labelShowAssembly:{name:"Label Show Assembly",inlineOptions:UC},lineStrokeWidth:{name:"Stroke Width",inlineOptions:hG},strokeWidth:{name:"Stroke Width",inlineOptions:hG},trackBorderWidth:{name:"Track Border Width",inlineOptions:hG},separatePlusMinusStrands:{name:"Separate +/- strands",inlineOptions:UC},sortLargestOnTop:{name:"Sort Largest On Top",inlineOptions:UC},showTexts:{name:"Show texts",inlineOptions:UC},staggered:{name:"Staggered",inlineOptions:UC},minSquareSize:{name:"Minimum size",inlineOptions:G4t},pointSize:{name:"Point Size",inlineOptions:hG},pointColor:{name:"Point Color",inlineOptions:NI},trackBorderColor:{name:"Track Border Color",inlineOptions:NI},backgroundColor:{name:"Background Color",inlineOptions:{white:{name:"White",value:"white"},lightGrey:{name:"Light Grey",value:"#eeeeee"},grey:{name:"Grey",value:"#cccccc"},black:{name:"Black",value:"black"},transparent:{name:"Transparent",value:"transparent"}}},colorScale:{name:"Color Scale",inlineOptions:{epilogos:{name:"Epilogos",values:["#FF0000","#FF4500","#32CD32","#008000","#006400","#C2E105","#FFFF00","#66CDAA","#8A91D0","#CD5C5C","#E9967A","#BDB76B","#808080","#C0C0C0","#FFFFFF"]},category10:{name:"D3 Category10",values:["#1F77B4","#FF7F0E","#2CA02C","#D62728","#9467BD","#8C564B","#E377C2","#7F7F7F","#BCBD22","#17BECF"]}}},minusStrandColor:{name:"- Strand Color",inlineOptions:NI},plusStrandColor:{name:"+ Strand Color",inlineOptions:NI},lineStrokeColor:{name:"Stroke color",inlineOptions:NI},projectionStrokeColor:{name:"Stroke color",inlineOptions:NI},projectionFillColor:{name:"Fill color",inlineOptions:NI},stroke:{name:"Stroke Color",inlineOptions:NI},strokeColor:{name:"Stroke color",inlineOptions:NI},fill:{name:"Fill Color",inlineOptions:NI},color:{name:"Color",inlineOptions:NI},fontColor:{name:"Font color",inlineOptions:NI},fillColor:{name:"Fill color",inlineOptions:NI},barFillColor:{name:"Fill color",inlineOptions:NI},barFillColorTop:{name:"Top Fill color",inlineOptions:NI},barFillColorBottom:{name:"Bottom Fill color",inlineOptions:NI},barOpacity:{name:"Bar opacity",inlineOptions:Sl},zeroLineVisible:{name:"Zero line visible",inlineOptions:UC},zeroLineColor:{name:"Zero line color",inlineOptions:NI},zeroLineOpacity:{name:"Zero line opacity",inlineOptions:v4t},fillOpacity:{name:"Fill Opacity",inlineOptions:Sl},strokeOpacity:{name:"Stroke Opacity",inlineOptions:Sl},strokePos:{name:"Stroke Position",inlineOptions:{aroundInner:{name:"Around Inner",value:"around"},aroundCenter:{name:"Around Center",value:null},hidden:{name:"Hidden",value:"hidden"},top:{name:"Top",value:"top"},right:{name:"Right",value:"right"},bottom:{name:"Bottom",value:"bottom"},left:{name:"Left",value:"left"}}},barBorder:{name:"Bar border",inlineOptions:UC},scaledHeight:{name:"Scaled height",inlineOptions:UC},rectangleDomainStrokeColor:{name:"Stroke color",inlineOptions:NI},rectangleDomainFillColor:{name:"Fill color",inlineOptions:NI},rectangleDomainFillOpacity:{name:"Fill opacity",inlineOptions:Sl},rectangleDomainOpacity:{name:"Opacity",inlineOptions:Sl},mapboxStyle:{name:"Map style",inlineOptions:{streets:{name:"streets",value:"mapbox.streets"},light:{name:"light",value:"mapbox.light"},dark:{name:"dark",value:"mapbox.dark"},satellite:{name:"satellite",value:"mapbox.satellite"},"streets-satellite":{name:"streets-satellite",value:"mapbox.streets-satellite"},wheatpaste:{name:"wheatpaste",value:"mapbox.wheatpaste"},"streets-basic":{name:"streets-basic",value:"mapbox.streets-basic"},comic:{name:"comic",value:"mapbox.comic"},outdoors:{name:"outdoors",value:"mapbox.outdoors"},"run-bike-hike":{name:"run-bike-hike",value:"mapbox.run-bike-hike"},pencil:{name:"pencil",value:"mapbox.pencil"},pirates:{name:"pirates",value:"mapbox.pirates"},emerald:{name:"emerald",value:"mapbox.emerald"},"high-contrast":{name:"high-contrast",value:"mapbox.high-contrast"}}},oneDHeatmapFlipped:{name:"Flip Heatmap",inlineOptions:{yes:{name:"Yes",value:"yes"},no:{name:"No",value:null}}},showMousePosition:{name:"Show Mouse Position",inlineOptions:UC},showTooltip:{name:"Show Tooltip",inlineOptions:UC},fontSize:{name:"Font Size",inlineOptions:u0([8,9,10,11,12,14,16,18,24],"px")},tickPositions:{name:"Tick Positions",inlineOptions:{even:{name:"Even",value:"even"},ends:{name:"Ends",value:"ends"}}},tickFormat:{name:"Tick Format",inlineOptions:{plain:{name:"Plain",value:"plain"},si:{name:"SI",value:"si"}}},colorEncoding:{name:"Color Encode Annotations",inlineOptions:{none:{name:"None",value:null},itemRgb:{name:"itemRgb",value:"itemRgb"}},generateOptions:dse},fontIsAligned:{name:"Left-Align Font",inlineOptions:UC},axisPositionHorizontal:{name:"Axis Position",inlineOptions:{left:{name:"Left",value:"left"},outsideLeft:{name:"Outside left",value:"outsideLeft"},right:{name:"Right",value:"right"},outsideRight:{name:"Outside right",value:"outsideRight"},hidden:{name:"Hidden",value:null}}},axisPositionVertical:{name:"Axis Position",inlineOptions:{top:{name:"Top",value:"top"},outsideTop:{name:"Outside top",value:"outsideTop"},bottom:{name:"Bottom",value:"bottom"},outsideBottom:{name:"Outside bottom",value:"outsideBottom"},hidden:{name:"Hidden",value:null}}},axisMargin:{name:"Axis Margin",inlineOptions:u0([0,10,20,30,40,50,100,200,400],"px")},colorbarPosition:{name:"Colorbar Position",inlineOptions:{topLeft:{name:"Top Left",value:"topLeft"},topRight:{name:"Top Right",value:"topRight"},bottomLeft:{name:"Bottom Left",value:"bottomLeft"},bottomRight:{name:"Bottom Right",value:"bottomRight"},hidden:{name:"Hidden",value:null}}},colorbarBackgroundColor:{name:"Colorbar Background Color",inlineOptions:NI},colorbarBackgroundOpacity:{name:"Colorbar Background Opacity",inlineOptions:Sl},colorbarLabelsPosition:{name:"Colorbar Labels Position",inlineOptions:{inside:{name:"Inside",value:"inside"},outside:{name:"Outside",value:"outside"}}},labelColor:{name:"Label Color",inlineOptions:{...NI,...Z4t}},labelPosition:{name:"Label Position",inlineOptions:{ol:{name:"Outer left",value:"outerLeft"},or:{name:"Outer right",value:"outerRight"},ot:{name:"Outer top",value:"outerTop"},ob:{name:"Outer bottom",value:"outerBottom"},tl:{name:"Top left",value:"topLeft"},tr:{name:"Top right",value:"topRight"},bl:{name:"Bottom left",value:"bottomLeft"},br:{name:"Bottom right",value:"bottomRight"},hidden:{name:"Hidden",value:"hidden"}}},labelTextOpacity:{name:"Label Text Opacity",inlineOptions:Sl},geneAnnotationHeight:{name:"Gene Annotation Height",inlineOptions:{8:{name:"8px",value:8},10:{name:"10px",value:10},12:{name:"12px",value:12},16:{name:"16px",value:16}}},annotationHeight:{name:"Annotation Height",inlineOptions:{5:{name:"5px",value:5},8:{name:"8px",value:8},10:{name:"10px",value:10},12:{name:"12px",value:12},16:{name:"16px",value:16},20:{name:"20px",value:20},scaled:{name:"scaled",value:"scaled"}}},maxAnnotationHeight:{name:"Max Annotation Height",inlineOptions:{5:{name:"5px",value:5},8:{name:"8px",value:8},10:{name:"10px",value:10},12:{name:"12px",value:12},16:{name:"16px",value:16},20:{name:"20px",value:20},none:{name:"none",value:null}}},annotationStyle:{name:"Annotation Style",inlineOptions:{box:{name:"Box",value:"box"},segment:{name:"Segment",value:"segment"}}},geneLabelPosition:{name:"Gene Label Position",inlineOptions:{inside:{name:"Inside",value:"inside"},outside:{name:"Outside",value:"outside"}}},geneStrandSpacing:{name:"Gene Strand Spacing",inlineOptions:{2:{name:"2px",value:2},4:{name:"4px",value:4},8:{name:"8px",value:8}}},labelBackgroundColor:{name:"Label Background Color",inlineOptions:NI},labelBackgroundOpacity:{name:"Label Background Opacity",inlineOptions:Sl},viewResolution:{name:"View Resolution",inlineOptions:{high:{name:"High",value:384},medium:{name:"Medium",value:1024},low:{name:"Low",value:2048}}},colorRange:{name:"Color map",inlineOptions:{afmhot:{name:"afmhot",value:["rgba(0,0,0,1.0)","rgba(128,0,0,1.0)","rgba(256,129,1,1.0)","rgba(256,256,129,1.0)","rgba(256,256,256,1.0)"]},fall:{name:"fall",value:["white","rgba(245,166,35,1.0)","rgba(208,2,27,1.0)","black"]},hot:{name:"hot",value:["rgba(10,0,0,1.0)","rgba(179,0,0,1.0)","rgba(256,91,0,1.0)","rgba(256,256,6,1.0)","rgba(256,256,256,1.0)"]},jet:{name:"jet",value:["rgba(0,0,128,1.0)","rgba(0,129,256,1.0)","rgba(125,256,122,1.0)","rgba(256,148,0,1.0)","rgba(128,0,0,1.0)"]},bwr:{name:"bwr",value:["rgba(0,0,256,1.0)","rgba(128,128,256,1.0)","rgba(256,254,254,1.0)","rgba(256,126,126,1.0)","rgba(256,0,0,1.0)"]},cubehelix:{name:"cubehelix",value:["rgba(0,0,0,1.0)","rgba(21,83,76,1.0)","rgba(162,121,74,1.0)","rgba(199,180,238,1.0)","rgba(256,256,256,1.0)"]},rainbow:{name:"rainbow",value:["rgba(128,0,256,1.0)","rgba(0,181,236,1.0)","rgba(129,255,180,1.0)","rgba(256,179,96,1.0)","rgba(256,0,0,1.0)"]},gray:{name:"greys",value:["rgba(255,255,255,1)","rgba(0,0,0,1)"]},red:{name:"White to red",value:["rgba(255,255,255,1)","rgba(255,0,0,1)"]},green:{name:"White to green",value:["rgba(255,255,255,1)","rgba(0,255,0,1)"]},blue:{name:"White to blue",value:["rgba(255,255,255,1)","rgba(0,0,255,1)"]},custard:{name:"custard",value:["#FFFFFF","#F8E71C","rgba(245,166,35,1)","rgba(0,0,0,1)"]},magma:{name:"magma",value:["rgba(0,0,3,1)","rgba(0,0,4,1)","rgba(0,0,6,1)","rgba(1,0,7,1)","rgba(1,1,9,1)","rgba(1,1,11,1)","rgba(2,2,13,1)","rgba(2,2,15,1)","rgba(3,3,17,1)","rgba(4,3,19,1)","rgba(4,4,21,1)","rgba(5,4,23,1)","rgba(6,5,25,1)","rgba(7,5,27,1)","rgba(8,6,29,1)","rgba(9,7,32,1)","rgba(10,7,34,1)","rgba(11,8,36,1)","rgba(12,9,38,1)","rgba(13,10,40,1)","rgba(14,10,42,1)","rgba(15,11,45,1)","rgba(16,12,47,1)","rgba(17,12,49,1)","rgba(19,13,51,1)","rgba(20,13,54,1)","rgba(21,14,56,1)","rgba(22,14,58,1)","rgba(23,15,61,1)","rgba(25,15,63,1)","rgba(26,16,66,1)","rgba(27,16,68,1)","rgba(28,16,70,1)","rgba(30,17,73,1)","rgba(31,17,75,1)","rgba(33,17,78,1)","rgba(34,17,80,1)","rgba(36,17,83,1)","rgba(37,17,85,1)","rgba(39,17,87,1)","rgba(40,17,90,1)","rgba(42,17,92,1)","rgba(43,17,94,1)","rgba(45,17,97,1)","rgba(47,16,99,1)","rgba(49,16,101,1)","rgba(50,16,103,1)","rgba(52,16,105,1)","rgba(54,15,107,1)","rgba(55,15,108,1)","rgba(57,15,110,1)","rgba(59,15,112,1)","rgba(61,15,113,1)","rgba(62,15,114,1)","rgba(64,15,116,1)","rgba(66,15,117,1)","rgba(67,15,118,1)","rgba(69,15,119,1)","rgba(71,15,120,1)","rgba(72,16,120,1)","rgba(74,16,121,1)","rgba(76,16,122,1)","rgba(77,17,123,1)","rgba(79,17,123,1)","rgba(81,18,124,1)","rgba(82,18,124,1)","rgba(84,19,125,1)","rgba(85,20,125,1)","rgba(87,20,126,1)","rgba(88,21,126,1)","rgba(90,21,126,1)","rgba(92,22,127,1)","rgba(93,23,127,1)","rgba(95,23,127,1)","rgba(96,24,128,1)","rgba(98,25,128,1)","rgba(99,25,128,1)","rgba(101,26,128,1)","rgba(103,26,128,1)","rgba(104,27,129,1)","rgba(106,28,129,1)","rgba(107,28,129,1)","rgba(109,29,129,1)","rgba(110,30,129,1)","rgba(112,30,129,1)","rgba(113,31,129,1)","rgba(115,32,129,1)","rgba(117,32,129,1)","rgba(118,33,129,1)","rgba(120,33,129,1)","rgba(121,34,130,1)","rgba(123,35,130,1)","rgba(124,35,130,1)","rgba(126,36,130,1)","rgba(128,36,130,1)","rgba(129,37,129,1)","rgba(131,37,129,1)","rgba(132,38,129,1)","rgba(134,39,129,1)","rgba(136,39,129,1)","rgba(137,40,129,1)","rgba(139,40,129,1)","rgba(140,41,129,1)","rgba(142,41,129,1)","rgba(144,42,129,1)","rgba(145,42,129,1)","rgba(147,43,128,1)","rgba(148,43,128,1)","rgba(150,44,128,1)","rgba(152,44,128,1)","rgba(153,45,128,1)","rgba(155,46,127,1)","rgba(157,46,127,1)","rgba(158,47,127,1)","rgba(160,47,127,1)","rgba(161,48,126,1)","rgba(163,48,126,1)","rgba(165,49,126,1)","rgba(166,49,125,1)","rgba(168,50,125,1)","rgba(170,50,125,1)","rgba(171,51,124,1)","rgba(173,51,124,1)","rgba(175,52,123,1)","rgba(176,52,123,1)","rgba(178,53,123,1)","rgba(180,53,122,1)","rgba(181,54,122,1)","rgba(183,55,121,1)","rgba(185,55,121,1)","rgba(186,56,120,1)","rgba(188,56,120,1)","rgba(189,57,119,1)","rgba(191,57,118,1)","rgba(193,58,118,1)","rgba(194,59,117,1)","rgba(196,59,117,1)","rgba(198,60,116,1)","rgba(199,61,115,1)","rgba(201,61,115,1)","rgba(202,62,114,1)","rgba(204,63,113,1)","rgba(206,63,113,1)","rgba(207,64,112,1)","rgba(209,65,111,1)","rgba(210,66,110,1)","rgba(212,67,110,1)","rgba(213,67,109,1)","rgba(215,68,108,1)","rgba(216,69,107,1)","rgba(218,70,107,1)","rgba(219,71,106,1)","rgba(221,72,105,1)","rgba(222,73,104,1)","rgba(223,74,103,1)","rgba(225,75,103,1)","rgba(226,76,102,1)","rgba(227,78,101,1)","rgba(229,79,100,1)","rgba(230,80,100,1)","rgba(231,81,99,1)","rgba(232,83,98,1)","rgba(233,84,97,1)","rgba(234,85,97,1)","rgba(236,87,96,1)","rgba(237,88,95,1)","rgba(238,90,95,1)","rgba(239,91,94,1)","rgba(239,93,94,1)","rgba(240,95,93,1)","rgba(241,96,93,1)","rgba(242,98,93,1)","rgba(243,100,92,1)","rgba(243,101,92,1)","rgba(244,103,92,1)","rgba(245,105,92,1)","rgba(246,107,92,1)","rgba(246,108,92,1)","rgba(247,110,92,1)","rgba(247,112,92,1)","rgba(248,114,92,1)","rgba(248,116,92,1)","rgba(249,118,92,1)","rgba(249,120,92,1)","rgba(250,121,93,1)","rgba(250,123,93,1)","rgba(250,125,94,1)","rgba(251,127,94,1)","rgba(251,129,95,1)","rgba(251,131,95,1)","rgba(252,133,96,1)","rgba(252,135,97,1)","rgba(252,137,97,1)","rgba(252,139,98,1)","rgba(253,140,99,1)","rgba(253,142,100,1)","rgba(253,144,101,1)","rgba(253,146,102,1)","rgba(253,148,103,1)","rgba(254,150,104,1)","rgba(254,152,105,1)","rgba(254,154,106,1)","rgba(254,156,107,1)","rgba(254,157,108,1)","rgba(254,159,109,1)","rgba(254,161,110,1)","rgba(254,163,111,1)","rgba(254,165,112,1)","rgba(255,167,114,1)","rgba(255,169,115,1)","rgba(255,171,116,1)","rgba(255,172,118,1)","rgba(255,174,119,1)","rgba(255,176,120,1)","rgba(255,178,122,1)","rgba(255,180,123,1)","rgba(255,182,124,1)","rgba(255,184,126,1)","rgba(255,185,127,1)","rgba(255,187,129,1)","rgba(255,189,130,1)","rgba(255,191,132,1)","rgba(255,193,133,1)","rgba(255,195,135,1)","rgba(255,197,136,1)","rgba(255,198,138,1)","rgba(255,200,140,1)","rgba(255,202,141,1)","rgba(255,204,143,1)","rgba(254,206,144,1)","rgba(254,208,146,1)","rgba(254,209,148,1)","rgba(254,211,149,1)","rgba(254,213,151,1)","rgba(254,215,153,1)","rgba(254,217,155,1)","rgba(254,219,156,1)","rgba(254,220,158,1)","rgba(254,222,160,1)","rgba(254,224,162,1)","rgba(254,226,163,1)","rgba(253,228,165,1)","rgba(253,230,167,1)","rgba(253,231,169,1)","rgba(253,233,171,1)","rgba(253,235,172,1)","rgba(253,237,174,1)","rgba(253,239,176,1)","rgba(253,241,178,1)","rgba(253,242,180,1)","rgba(253,244,182,1)","rgba(253,246,184,1)","rgba(252,248,186,1)","rgba(252,250,188,1)","rgba(252,251,189,1)","rgba(252,253,191,1)"]},viridis:{name:"viridis",value:["rgba(68,1,84,1)","rgba(68,2,85,1)","rgba(69,3,87,1)","rgba(69,5,88,1)","rgba(69,6,90,1)","rgba(70,8,91,1)","rgba(70,9,93,1)","rgba(70,11,94,1)","rgba(70,12,96,1)","rgba(71,14,97,1)","rgba(71,15,98,1)","rgba(71,17,100,1)","rgba(71,18,101,1)","rgba(71,20,102,1)","rgba(72,21,104,1)","rgba(72,22,105,1)","rgba(72,24,106,1)","rgba(72,25,108,1)","rgba(72,26,109,1)","rgba(72,28,110,1)","rgba(72,29,111,1)","rgba(72,30,112,1)","rgba(72,32,113,1)","rgba(72,33,115,1)","rgba(72,34,116,1)","rgba(72,36,117,1)","rgba(72,37,118,1)","rgba(72,38,119,1)","rgba(72,39,120,1)","rgba(71,41,121,1)","rgba(71,42,121,1)","rgba(71,43,122,1)","rgba(71,44,123,1)","rgba(71,46,124,1)","rgba(70,47,125,1)","rgba(70,48,126,1)","rgba(70,49,126,1)","rgba(70,51,127,1)","rgba(69,52,128,1)","rgba(69,53,129,1)","rgba(69,54,129,1)","rgba(68,56,130,1)","rgba(68,57,131,1)","rgba(68,58,131,1)","rgba(67,59,132,1)","rgba(67,60,132,1)","rgba(67,62,133,1)","rgba(66,63,133,1)","rgba(66,64,134,1)","rgba(65,65,134,1)","rgba(65,66,135,1)","rgba(65,67,135,1)","rgba(64,69,136,1)","rgba(64,70,136,1)","rgba(63,71,136,1)","rgba(63,72,137,1)","rgba(62,73,137,1)","rgba(62,74,137,1)","rgba(61,75,138,1)","rgba(61,77,138,1)","rgba(60,78,138,1)","rgba(60,79,138,1)","rgba(59,80,139,1)","rgba(59,81,139,1)","rgba(58,82,139,1)","rgba(58,83,139,1)","rgba(57,84,140,1)","rgba(57,85,140,1)","rgba(56,86,140,1)","rgba(56,87,140,1)","rgba(55,88,140,1)","rgba(55,89,140,1)","rgba(54,91,141,1)","rgba(54,92,141,1)","rgba(53,93,141,1)","rgba(53,94,141,1)","rgba(52,95,141,1)","rgba(52,96,141,1)","rgba(51,97,141,1)","rgba(51,98,141,1)","rgba(51,99,141,1)","rgba(50,100,142,1)","rgba(50,101,142,1)","rgba(49,102,142,1)","rgba(49,103,142,1)","rgba(48,104,142,1)","rgba(48,105,142,1)","rgba(47,106,142,1)","rgba(47,107,142,1)","rgba(47,108,142,1)","rgba(46,109,142,1)","rgba(46,110,142,1)","rgba(45,111,142,1)","rgba(45,112,142,1)","rgba(45,112,142,1)","rgba(44,113,142,1)","rgba(44,114,142,1)","rgba(43,115,142,1)","rgba(43,116,142,1)","rgba(43,117,142,1)","rgba(42,118,142,1)","rgba(42,119,142,1)","rgba(41,120,142,1)","rgba(41,121,142,1)","rgba(41,122,142,1)","rgba(40,123,142,1)","rgba(40,124,142,1)","rgba(40,125,142,1)","rgba(39,126,142,1)","rgba(39,127,142,1)","rgba(38,128,142,1)","rgba(38,129,142,1)","rgba(38,130,142,1)","rgba(37,131,142,1)","rgba(37,131,142,1)","rgba(37,132,142,1)","rgba(36,133,142,1)","rgba(36,134,142,1)","rgba(35,135,142,1)","rgba(35,136,142,1)","rgba(35,137,142,1)","rgba(34,138,141,1)","rgba(34,139,141,1)","rgba(34,140,141,1)","rgba(33,141,141,1)","rgba(33,142,141,1)","rgba(33,143,141,1)","rgba(32,144,141,1)","rgba(32,145,140,1)","rgba(32,146,140,1)","rgba(32,147,140,1)","rgba(31,147,140,1)","rgba(31,148,140,1)","rgba(31,149,139,1)","rgba(31,150,139,1)","rgba(31,151,139,1)","rgba(30,152,139,1)","rgba(30,153,138,1)","rgba(30,154,138,1)","rgba(30,155,138,1)","rgba(30,156,137,1)","rgba(30,157,137,1)","rgba(30,158,137,1)","rgba(30,159,136,1)","rgba(30,160,136,1)","rgba(31,161,136,1)","rgba(31,162,135,1)","rgba(31,163,135,1)","rgba(31,163,134,1)","rgba(32,164,134,1)","rgba(32,165,134,1)","rgba(33,166,133,1)","rgba(33,167,133,1)","rgba(34,168,132,1)","rgba(35,169,131,1)","rgba(35,170,131,1)","rgba(36,171,130,1)","rgba(37,172,130,1)","rgba(38,173,129,1)","rgba(39,174,129,1)","rgba(40,175,128,1)","rgba(41,175,127,1)","rgba(42,176,127,1)","rgba(43,177,126,1)","rgba(44,178,125,1)","rgba(46,179,124,1)","rgba(47,180,124,1)","rgba(48,181,123,1)","rgba(50,182,122,1)","rgba(51,183,121,1)","rgba(53,183,121,1)","rgba(54,184,120,1)","rgba(56,185,119,1)","rgba(57,186,118,1)","rgba(59,187,117,1)","rgba(61,188,116,1)","rgba(62,189,115,1)","rgba(64,190,114,1)","rgba(66,190,113,1)","rgba(68,191,112,1)","rgba(70,192,111,1)","rgba(72,193,110,1)","rgba(73,194,109,1)","rgba(75,194,108,1)","rgba(77,195,107,1)","rgba(79,196,106,1)","rgba(81,197,105,1)","rgba(83,198,104,1)","rgba(85,198,102,1)","rgba(88,199,101,1)","rgba(90,200,100,1)","rgba(92,201,99,1)","rgba(94,201,98,1)","rgba(96,202,96,1)","rgba(98,203,95,1)","rgba(101,204,94,1)","rgba(103,204,92,1)","rgba(105,205,91,1)","rgba(108,206,90,1)","rgba(110,206,88,1)","rgba(112,207,87,1)","rgba(115,208,85,1)","rgba(117,208,84,1)","rgba(119,209,82,1)","rgba(122,210,81,1)","rgba(124,210,79,1)","rgba(127,211,78,1)","rgba(129,212,76,1)","rgba(132,212,75,1)","rgba(134,213,73,1)","rgba(137,213,72,1)","rgba(139,214,70,1)","rgba(142,215,68,1)","rgba(144,215,67,1)","rgba(147,216,65,1)","rgba(149,216,63,1)","rgba(152,217,62,1)","rgba(155,217,60,1)","rgba(157,218,58,1)","rgba(160,218,57,1)","rgba(163,219,55,1)","rgba(165,219,53,1)","rgba(168,220,51,1)","rgba(171,220,50,1)","rgba(173,221,48,1)","rgba(176,221,46,1)","rgba(179,221,45,1)","rgba(181,222,43,1)","rgba(184,222,41,1)","rgba(187,223,39,1)","rgba(189,223,38,1)","rgba(192,223,36,1)","rgba(195,224,35,1)","rgba(197,224,33,1)","rgba(200,225,32,1)","rgba(203,225,30,1)","rgba(205,225,29,1)","rgba(208,226,28,1)","rgba(211,226,27,1)","rgba(213,226,26,1)","rgba(216,227,25,1)","rgba(219,227,24,1)","rgba(221,227,24,1)","rgba(224,228,24,1)","rgba(226,228,24,1)","rgba(229,228,24,1)","rgba(232,229,25,1)","rgba(234,229,25,1)","rgba(237,229,26,1)","rgba(239,230,27,1)","rgba(242,230,28,1)","rgba(244,230,30,1)","rgba(247,230,31,1)","rgba(249,231,33,1)","rgba(251,231,35,1)","rgba(254,231,36,1)"]},custom:{name:"Custom...",componentPickers:{heatmap:dO,"horizontal-heatmap":dO}}}},align:{name:"Align",inlineOptions:{white:{name:"Top",value:"top"},lightGrey:{name:"Bottom",value:"bottom"}}},colorRangeGradient:{name:"Color Gradient",inlineOptions:UC},dataTransform:{name:"Transforms",inlineOptions:{default:{name:"Default",value:"default"},None:{name:"None",value:"None"}},generateOptions:e=>{const g=[];if(e.transforms)for(const I of e.transforms)g.push({name:I.name,value:I.value});return g}},aggregationMode:{name:"Aggregation Mode",inlineOptions:{},generateOptions:e=>{const g=[];return e.aggregationModes?Object.values(e.aggregationModes).forEach(({name:I,value:i})=>{g.push({name:I,value:i})}):g.push({name:"Default",value:"default"}),g}},maxZoom:{name:"Zoom limit",inlineOptions:{none:{name:"None",value:null}},generateOptions:e=>{if(e.maxZoom){const g=[];for(let I=0;I<=e.maxZoom;I++){const{maxWidth:i,binsPerDimension:n,maxZoom:C}=e;let r=1,o=1;if(e.resolutions){const l=e.resolutions.map(c=>+c).sort((c,u)=>u-c);[r]=l,o=l[I]}else o=e.maxWidth/(2**I*e.binsPerDimension),r=i/(2**C*n);const a=D0(r,o),A=tm(`.${a}`,o)(o);g.push({name:A,value:I.toString()})}return g}return[]}},valueColumn:{name:"Value column",inlineOptions:{none:{name:"None",value:null}},generateOptions:dse},zeroValueColor:{name:"Zero Value Color",inlineOptions:NI}},mXe={...Jst,IS_TRACK_RANGE_SELECTABLE:E0,OPTIONS_INFO:an},B4t={d3Array:kIt,d3Axis:FTt,d3Brush:XAt,d3Color:UIt,d3Drag:aat,d3Dsv:ult,d3Format:Git,d3Geo:lMt,d3Queue:mMt,d3Request:KMt,d3Scale:$nt,d3Selection:Ngt,d3Transition:AWt,d3Zoom:mWt,PIXI:mXe.GLOBALS.PIXI,mix:oy,slugid:lg},S4t={Annotations1dTrack:jP,Annotations2dTrack:O1e,ArrowheadDomainsTrack:P1e,BarTrack:Bj,BedLikeTrack:Y1e,CNVIntervalTrack:M1e,Chromosome2DAnnotations:Q1e,Chromosome2DLabels:U1e,ChromosomeGrid:CG,CombinedTrack:QQ,CrossRule:fWe,DivergentBarTrack:x1e,HeatmapTiledPixiTrack:fw,Horizontal1dHeatmapTrack:E1e,Horizontal2DDomainsTrack:_1e,HorizontalChromosomeLabels:$1e,HorizontalGeneAnnotationsTrack:z1e,HorizontalHeatmapTrack:q1e,HorizontalLine1DPixiTrack:ry,HorizontalMultivecTrack:D1e,HorizontalPoint1DPixiTrack:F1e,HorizontalRule:sWe,HorizontalTiled1DPixiTrack:ny,HorizontalTiledPlot:M2,HorizontalTrack:h9e,Id2DTiledPixiTrack:jVe,IdHorizontal1DTiledPixiTrack:qVe,IdVertical1DTiledPixiTrack:t1e,LeftAxisTrack:n1e,MapboxTilesTrack:yWe,MoveableTrack:Dk,OSMTileIdsTrack:bWe,OSMTilesTrack:bw,OverlayTrack:K1e,PixiTrack:mC,RasterTilesTrack:ZWe,SVGTrack:mm,SquareMarkersTrack:L1e,Tiled1DPixiTrack:hj,TiledPixiTrack:hm,TopAxisTrack:i1e,Track:Dp,ValueIntervalTrack:tWe,VerticalRule:mWe,VerticalTiled1DPixiTrack:e1e,VerticalTrack:f9e,ViewportTracker2D:gWe,ViewportTracker2DPixi:Izt,ViewportTrackerHorizontal:IWe,ViewportTrackerVertical:iWe},w4t={ContextMenuItem:ig,DataFetcher:Bk,LruCache:b9e},R4t={ChromosomeInfo:Js,SearchField:n0},V4t={DataFetcher:Bk,GBKDataFetcher:_Ve,LocalDataFetcher:LVe,getDataFetcher:$xt},j2={chromosomes:R4t,libraries:B4t,tracks:S4t,dataFetchers:V4t,factories:w4t,services:Olt,utils:TWt,configs:mXe,VERSION:y9e},bx={"track-renderer":"_track-renderer_11dwb_1","track-renderer-element":"_track-renderer-element_11dwb_5","track-renderer-events":"_track-renderer-events_11dwb_6"};function W4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function hse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function $2(e){return $2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},$2(e)}const{getDataFetcher:F4t}=j2.dataFetchers,D4t=100;let V$=function(e){N4t(I,e);var g=k4t(I);function I(i){var n;if(W4t(this,I),n=g.call(this,i),n.dragging=!1,n.element=null,n.eventTracker=null,n.eventTrackerOld=null,n.closing=!1,n.yPositionOffset=0,n.xPositionOffset=0,n.scrollTop=0,n.scrollTimeout=null,n.activeTransitions=0,n.zoomTransform=Ji,n.windowScrolledBound=n.windowScrolled.bind(Fo(n)),n.zoomStartedBound=n.zoomStarted.bind(Fo(n)),n.zoomedBound=n.zoomed.bind(Fo(n)),n.zoomEndedBound=n.zoomEnded.bind(Fo(n)),n.uid=lg.nice(),n.viewUid=n.props.uid,n.availableForPlugins={...j2,services:{...j2.services,pubSub:n.props.pubSub,pixiRenderer:n.props.pixiRenderer}},n.mounted=!1,n.emptyZoomBehavior=iP(),n.currentProps=i,n.prevPropsStr="",n.zoomBehavior=iP().filter(C=>!(C.target.classList.contains("no-zoom")||C.target.classList.contains("react-resizable-handle"))).on("start",n.zoomStartedBound).on("zoom",n.zoomedBound).on("end",n.zoomEndedBound),n.zoomTransform=Ji,n.prevZoomTransform=Ji,n.initialXDomain=[0,1],n.initialYDomain=[0,1],n.xDomainLimits=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],n.yDomainLimits=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],n.zoomLimits=[0,Number.MAX_SAFE_INTEGER],n.prevCenterX=n.currentProps.paddingLeft+n.currentProps.leftWidth+n.currentProps.centerWidth/2,n.prevCenterY=n.currentProps.paddingTop+n.currentProps.topHeight+n.currentProps.centerHeight/2,n.cumCenterXOffset=0,n.cumCenterYOffset=0,n.setUpInitialScales(n.currentProps.initialXDomain,n.currentProps.initialYDomain,n.currentProps.xDomainLimits,n.currentProps.yDomainLimits,n.currentProps.zoomLimits),n.setUpScales(),n.trackDefObjects={},n.metaTracks={},n.pubSubs=[],window.higlassTracksByType)for(const C in window.higlassTracksByType)Qg[C]=window.higlassTracksByType[C].config;return n.boundForwardEvent=n.forwardEvent.bind(Fo(n)),n.boundScrollEvent=n.scrollEvent.bind(Fo(n)),n.boundForwardContextMenu=n.forwardContextMenu.bind(Fo(n)),n.dispatchEventBound=n.dispatchEvent.bind(Fo(n)),n.zoomToDataPosHandlerBound=n.zoomToDataPosHandler.bind(Fo(n)),n.onScrollHandlerBound=n.onScrollHandler.bind(Fo(n)),n.elementPos={height:0,width:0,left:0,top:0},n.elementSelection=null,n}return X4t(I,[{key:"xScale",get:function(){if(!this._xScale)throw new Error("xScale is not defined");return this._xScale}},{key:"yScale",get:function(){if(!this._yScale)throw new Error("yScale is not defined");return this._yScale}},{key:"UNSAFE_componentWillMount",value:function(){this.pubSubs=[],this.pubSubs.push(this.props.pubSub.subscribe("scroll",this.windowScrolledBound)),this.pubSubs.push(this.props.pubSub.subscribe("app.event",this.dispatchEventBound)),this.pubSubs.push(this.props.pubSub.subscribe("zoomToDataPos",this.zoomToDataPosHandlerBound)),this.pubSubs.push(this.props.pubSub.subscribe("app.scroll",this.onScrollHandlerBound))}},{key:"componentDidMount",value:function(){if(!this.element)throw new Error("Component did not mount, this.element is not defined.");if(this.elementPos=this.element.getBoundingClientRect(),this.elementSelection=hg(this.element),this.pStage=new ot.PIXI.Graphics,this.pMask=new ot.PIXI.Graphics,this.pOutline=new ot.PIXI.Graphics,this.pBackground=new ot.PIXI.Graphics,this.pStage.addChild(this.pMask),this.pStage.addChild(this.pOutline),this.currentProps.pixiStage.addChild(this.pStage),this.pStage.mask=this.pMask,this.props.isRangeSelection||this.addZoom(),!this.currentProps.svgElement||!this.currentProps.canvasElement)return;this.svgElement=this.currentProps.svgElement,this.syncTrackObjects(this.currentProps.positionedTracks),this.syncMetaTracks(this.currentProps.metaTracks),this.currentProps.setCentersFunction(this.setCenter.bind(this)),this.currentProps.registerDraggingChangedListener(this.draggingChanged.bind(this)),this.draggingChanged(!0),this.addEventTracker();const n=[[this.xScale(this.xDomainLimits[0]),this.yScale(this.yDomainLimits[0])],[this.xScale(this.xDomainLimits[1]),this.yScale(this.yDomainLimits[1])]],C=this.svgElement.getBoundingClientRect(),r=[[Math.max(n[0][0],0),Math.max(n[0][1],0)],[Math.min(n[1][0],C.width),Math.min(n[1][1],C.height)]];this.zoomBehavior.extent(r).translateExtent(n).scaleExtent(this.zoomLimits)}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){if(!n.svgElement||!n.canvasElement)return;const C=this.updatablePropsToString(n);if(this.currentProps=n,this.prevPropsStr===C)return;this.setBackground();for(const s in this.trackDefObjects){const A=this.trackDefObjects[s].trackObject;A.delayDrawing=!0}this.prevPropsStr=C,this.setUpInitialScales(n.initialXDomain,n.initialYDomain,n.xDomainLimits,n.yDomainLimits,n.zoomLimits),this.setUpScales(n.width!==this.props.width||n.height!==this.props.height),this.svgElement=n.svgElement;const r=[[this.xScale(this.xDomainLimits[0]),this.yScale(this.yDomainLimits[0])],[this.xScale(this.xDomainLimits[1]),this.yScale(this.yDomainLimits[1])]],o=this.svgElement.getBoundingClientRect(),a=[[Math.max(r[0][0],0),Math.max(r[0][1],0)],[Math.min(r[1][0],o.width),Math.min(r[1][1],o.height)]];this.zoomBehavior.extent(a).translateExtent(r).scaleExtent(this.zoomLimits),this.syncTrackObjects(n.positionedTracks),this.syncMetaTracks(n.metaTracks);for(const s of n.positionedTracks){const A=s.track.options,l=this.trackDefObjects[s.track.uid].trackObject;if(l.rerender(A),Q1(s.track)){const c={};for(const u of s.track.contents)c[u.uid]=u;for(const u in l.createdTracks)l.createdTracks[u].rerender(c[u].options)}}this.props.onNewTilesLoaded();for(const s in this.trackDefObjects){const A=this.trackDefObjects[s].trackObject;A.delayDrawing=!1,A.draw()}}},{key:"componentDidUpdate",value:function(n){(this.props.initialXDomain[0]!==n.initialXDomain[0]||this.props.initialXDomain[1]!==n.initialXDomain[1]||this.props.initialYDomain[0]!==n.initialYDomain[0]||this.props.initialYDomain[1]!==n.initialYDomain[1])&&this.element&&(this.element.__zoom=Ji),n.isRangeSelection!==this.props.isRangeSelection&&(this.props.isRangeSelection?this.removeZoom():this.addZoom()),n.zoomable!==this.props.zoomable&&(this.props.zoomable?this.addZoom():this.removeZoom()),this.addEventTracker()}},{key:"componentWillUnmount",value:function(){var n,C;this.mounted=!1,this.removeTracks(Object.keys(this.trackDefObjects)),this.removeMetaTracks(Object.keys(this.metaTracks)),this.currentProps.removeDraggingChangedListener(this.draggingChanged),this.pStage&&this.currentProps.pixiStage.removeChild(this.pStage),(n=this.pMask)==null||n.destroy(!0),(C=this.pStage)==null||C.destroy(!0),this.pubSubs.forEach(r=>this.props.pubSub.unsubscribe(r)),this.pubSubs=[],this.removeEventTracker()}},{key:"dispatchEvent",value:function(n){n.sourceUid===this.uid&&n.type!=="contextmenu"&&this.element&&BX(n,this.element)}},{key:"isWithin",value:function(n,C){const r=n>=this.elementPos.left&&n<=this.elementPos.width+this.elementPos.left,o=C>=this.elementPos.top&&C<=this.elementPos.height+this.elementPos.top;return r&&o}},{key:"zoomToDataPosHandler",value:function({pos:n,animateTime:C}){this.zoomToDataPos(...n,C)}},{key:"addZoom",value:function(){!this.elementSelection||!this.currentProps.zoomable||(this.elementSelection.call(this.zoomBehavior),this.zoomBehavior.transform(this.elementSelection,this.zoomTransform))}},{key:"removeZoom",value:function(){this.elementSelection&&(this.zoomEnded(),this.elementSelection.on(".zoom",null))}},{key:"setMask",value:function(){var n,C,r,o;(n=this.pMask)==null||n.clear(),(C=this.pMask)==null||C.beginFill(),(r=this.pMask)==null||r.drawRect(this.xPositionOffset,this.yPositionOffset,this.currentProps.width,this.currentProps.height),(o=this.pMask)==null||o.endFill()}},{key:"setBackground",value:function(){var n,C,r,o,a;const s=this.props.theme===gI?"black":"white",A=Kt(((n=this.currentProps.viewOptions)==null?void 0:n.backgroundColor)??s);(C=this.pBackground)==null||C.clear(),(r=this.pBackground)==null||r.beginFill(A),(o=this.pBackground)==null||o.drawRect(this.xPositionOffset,this.yPositionOffset,this.currentProps.width,this.currentProps.height),(a=this.pBackground)==null||a.endFill()}},{key:"windowScrolled",value:function(){this.removeZoom(),this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(()=>{this.addZoom()},D4t)}},{key:"setUpInitialScales",value:function(n=[0,1],C=[0,1],r=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],o=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],a=[0,Number.MAX_SAFE_INTEGER]){a[0]=a[0]===null?0:a[0],a[1]=a[1]===null?1/0:a[1];const s=n[1]-n[0],A=(C[0]+C[1])/2;if(C[0]=A-s/2,C[1]=A+s/2,n[0]===this.initialXDomain[0]&&n[1]===this.initialXDomain[1]&&C[0]===this.initialYDomain[0]&&C[1]===this.initialYDomain[1]&&r[0]===this.xDomainLimits[0]&&r[1]===this.xDomainLimits[1]&&o[0]===this.yDomainLimits[0]&&o[1]===this.yDomainLimits[1]&&a[0]===this.zoomLimits[0]&&a[1]===this.zoomLimits[1])return;this.initialXDomain=n,this.initialYDomain=C,this.xDomainLimits=r,this.yDomainLimits=o,this.zoomLimits=a,this.zoomTransform=Ji,this.prevZoomTransform=Ji,this.cumCenterYOffset=0,this.cumCenterXOffset=0,this.drawableToDomainX=gg().domain([this.currentProps.paddingLeft+this.currentProps.leftWidth,this.currentProps.paddingLeft+this.currentProps.leftWidth+this.currentProps.centerWidth]).range([n[0],n[1]]);let l,c;this.currentProps.centerWidth===0?(l=this.currentProps.paddingTop+this.currentProps.topHeight,c=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight):(l=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2-this.currentProps.centerWidth/2,c=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2+this.currentProps.centerWidth/2),this.drawableToDomainY=gg().domain([l,c]).range([C[0],C[1]]),this.prevCenterX=this.currentProps.paddingLeft+this.currentProps.leftWidth+this.currentProps.centerWidth/2,this.prevCenterY=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2}},{key:"updatablePropsToString",value:function(n){return JSON.stringify({positionedTracks:n.positionedTracks,initialXDomain:n.initialXDomain,initialYDomain:n.initialYDomain,width:n.width,height:n.height,paddingLeft:n.paddingLeft,paddingTop:n.paddingTop,leftWidth:n.leftWidth,topHeight:n.topHeight,dragging:n.dragging,viewOptions:n.viewOptions})}},{key:"draggingChanged",value:function(n){this.dragging=n,this.timedUpdatePositionAndDimensions()}},{key:"setUpScales",value:function(n=!1){const C=this.currentProps.paddingLeft+this.currentProps.leftWidth+this.currentProps.centerWidth/2,r=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2;if(!this.drawableToDomainX||!this.drawableToDomainY)return;const o=(this.drawableToDomainX(C)-this.drawableToDomainX(this.prevCenterX))/this.zoomTransform.k,a=(this.drawableToDomainY(r)-this.drawableToDomainY(this.prevCenterY))/this.zoomTransform.k;this.cumCenterYOffset+=a,this.cumCenterXOffset+=o,this.prevCenterY=r,this.prevCenterX=C;const s=[this.drawableToDomainX(0)-this.cumCenterXOffset,this.drawableToDomainX(this.currentProps.width)-this.cumCenterXOffset],A=[this.drawableToDomainY(0)-this.cumCenterYOffset,this.drawableToDomainY(this.currentProps.height)-this.cumCenterYOffset];this._xScale=gg().domain(s).range([0,this.currentProps.width]),this._yScale=gg().domain(A).range([0,this.currentProps.height]);for(const l in this.trackDefObjects)this.trackDefObjects[l].trackObject.refScalesChanged(this.xScale,this.yScale);this.applyZoomTransform(n)}},{key:"getTrackDef",value:function(n){const C=Nr(this.trackDefObjects);for(const[,{trackDef:r,trackObject:o}]of C){if(o===n)return r.track;if(Q1(r.track)){for(const a of r.track.contents)if(o.createdTracks[a.uid]===n)return a}}return null}},{key:"getTrackObject",value:function(n){const C=Nr(this.trackDefObjects);for(let r=0;ro.uid));this.addMetaTracks(n.filter(o=>!this.metaTracks[o.uid])),this.updateMetaTracks(n.filter(o=>this.metaTracks[o.uid])),this.removeMetaTracks(C.filter(o=>!r.has(o)))}},{key:"syncTrackObjects",value:function(n){this.prevTrackDefinitions=JSON.stringify(n);const C={};for(let l=0;l!r.has(l))),s=new Set([...r].filter(l=>!o.has(l))),A=new Set([...o].filter(l=>r.has(l)));this.updateExistingTrackDefs([...A].map(l=>C[l])),this.addNewTracks([...a].map(l=>C[l])),this.updateExistingTrackDefs([...a].map(l=>C[l])),this.removeTracks([...s])}},{key:"addMetaTracks",value:function(n){n.filter(C=>!this.metaTracks[C.uid]).forEach(C=>{this.metaTracks[C.uid]={trackDef:C,trackObject:this.createMetaTrack(C)}})}},{key:"addNewTracks",value:function(n){if(this.currentProps.pixiStage){for(let C=0;C{this.metaTracks[C].trackObject.remove(),this.metaTracks[C]=void 0,delete this.metaTracks[C]})}},{key:"removeTracks",value:function(n){for(let C=0;C{const p=Ji.translate(h,m).scale(c);this.zoomTransform=p,this.elementSelection&&this.emptyZoomBehavior.transform(this.elementSelection,p),f=this.applyZoomTransform(o)};if(a&&this.elementSelection){let p=this.elementSelection;this.activeTransitions+=1,document.hidden||(p=p.transition().duration(a)),p.call(this.zoomBehavior.transform,Ji.translate(h,m).scale(c)).on("end",()=>{b(),this.activeTransitions-=1})}else b();return f}},{key:"valueScaleMove",value:function(n){if(this.zoomStartPos){for(const C of this.getTracksAtPosition(...this.zoomStartPos))C.movedY(n);this.zoomStartTransform&&(this.zoomTransform=this.zoomStartTransform)}}},{key:"valueScaleZoom",value:function(n,C){if(!Llt(n.sourceEvent))return;const r=n.sourceEvent.deltaY,o=n.sourceEvent.deltaMode,s=((l,c)=>l*(c?120:1)/500)(r,o),A=zg(n.sourceEvent,this.props.canvasElement);for(const l of this.getTracksAtPosition(...A)){const c=C==="1d-horizontal"?A[1]-l.position[1]:A[0]-l.position[0];l.zoomedY(c,2**s)}this.zoomStartTransform&&(this.zoomTransform=this.zoomStartTransform)}},{key:"zoomed",value:function(n){var C;let r=null;if(this.zoomStartPos){const a=this.getTracksAtPosition(...this.zoomStartPos);if(a.length){const s=a[0],A=this.getTrackDef(s);if(!A)return;(C=Qg[A.type])!=null&&C.orientation&&(r=Qg[A.type].orientation),s instanceof Poe&&(r="1d-vertical")}}if(r&&n.sourceEvent){if(n.shiftKey||this.valueScaleZooming){if(n.sourceEvent.deltaY!==void 0){this.valueScaleZoom(n,r);return}r==="1d-horizontal"?this.valueScaleMove(n.sourceEvent.movementY):r==="1d-vertical"&&this.valueScaleMove(n.sourceEvent.movementX)}r==="1d-horizontal"&&n.sourceEvent.movementY?this.valueScaleMove(n.sourceEvent.movementY):r==="1d-vertical"&&n.sourceEvent.movementX&&this.valueScaleMove(n.sourceEvent.movementX)}this.zoomTransform=this.currentProps.zoomable?n.transform:Ji,this.prevZoomTransform.k!==this.zoomTransform.k||(r==="1d-horizontal"?this.zoomTransform=Ji.translate(this.zoomTransform.x,this.prevZoomTransform.y).scale(this.zoomTransform.k):r==="1d-vertical"&&(this.zoomTransform=Ji.translate(this.prevZoomTransform.x,this.zoomTransform.y).scale(this.zoomTransform.k)),this.element&&(this.element.__zoom=this.zoomTransform)),this.applyZoomTransform(!0),this.prevZoomTransform=this.zoomTransform,this.props.pubSub.publish("app.zoom",n),n.sourceEvent&&(n.sourceEvent.stopPropagation(),n.sourceEvent.preventDefault())}},{key:"getTracksAtPosition",value:function(n,C){const r=[];let o=[];for(const a in this.trackDefObjects){const s=this.trackDefObjects[a].trackObject;s.childTracks?o=o.concat(s.childTracks):o.push(s)}for(const a of o){const s=a.position[0]<=n&&n<=a.position[0]+a.dimensions[0],A=a.position[1]<=C&&C<=a.position[1]+a.dimensions[1];s&&A&&r.push(a)}return r}},{key:"zoomStarted",value:function(n){this.zooming=!0,n&&n.sourceEvent&&(this.zoomStartPos=zg(n.sourceEvent,this.props.canvasElement),n.sourceEvent.shiftKey&&(this.valueScaleZooming=!0)),this.zoomStartTransform=this.zoomTransform,this.props.pubSub.publish("app.zoomStart")}},{key:"zoomEnded",value:function(){this.zooming=!1,this.zoomStartPos=null,this.valueScaleZooming&&(this.valueScaleZooming=!1,this.element&&(this.element.__zoom=this.zoomStartTransform)),this.props.pubSub.publish("app.zoomEnd")}},{key:"applyZoomTransform",value:function(n=!0){const C=this.currentProps,r=C.paddingLeft+C.leftWidth,o=C.paddingTop+C.topHeight;if(!this.xScale||!this.yScale)return;this.zoomedXScale=this.zoomTransform.rescaleX(this.xScale),this.zoomedYScale=this.zoomTransform.rescaleY(this.yScale);const a=gg().domain([r,r+C.centerWidth].map(this.zoomedXScale.invert)).range([0,C.centerWidth]),s=gg().domain([o,o+C.centerHeight].map(this.zoomedYScale.invert)).range([0,C.centerHeight]);for(const A in this.trackDefObjects){const l=this.trackDefObjects[A].trackObject,c=this.trackDefObjects[A].trackDef;let u="unknown";if(Qg[c.track.type]&&(u=Qg[c.track.type].orientation),u==="whole"){const d=gg().domain([C.paddingLeft,C.width-C.paddingLeft].map(this.zoomedXScale.invert)).range([0,C.width-2*C.paddingLeft]),h=gg().domain([C.paddingTop,C.height-C.paddingTop].map(this.zoomedYScale.invert)).range([0,C.height-2*C.paddingTop]);l.zoomed(d,h);continue}if(this.trackDefObjects[A].trackDef.track.position==="gallery"){const d=gg().domain([C.paddingLeft+C.leftWidthNoGallery,C.paddingLeft+C.leftWidth+C.centerWidth+C.galleryDim].map(this.zoomedXScale.invert)).range([0,C.centerWidth+2*C.galleryDim]),h=gg().domain([C.paddingTop+C.topHeightNoGallery,C.paddingTop+C.topHeight+C.centerHeight+C.galleryDim].map(this.zoomedYScale.invert)).range([0,C.centerHeight-2*C.galleryDim]);l.zoomed(d.copy(),h.copy(),this.zoomTransform.k);continue}l.zoomed(a.copy(),s.copy(),this.zoomTransform.k,this.zoomTransform.x+this.xPositionOffset,this.zoomTransform.y+this.yPositionOffset,C.paddingLeft+C.leftWidth,C.paddingTop+C.topHeight)}return this.currentXScale=a,this.currentYScale=s,n&&this.currentProps.onScalesChanged(a,s),[a,s]}},{key:"createMetaTrack",value:function(n){switch(n.type){default:{const C=this.props.pluginTracks[n.type];if(C!=null&&C.isMetaTrack){const r={getTrackObject:this.getTrackObject.bind(this),onNewTilesLoaded:()=>{this.currentProps.onNewTilesLoaded(n.uid)},definition:n};try{return new C.track(this.availableForPlugins,r,n.options)}catch(o){console.error("Plugin meta track",n.type,"failed to instantiate.",o)}}return console.warn(`Unknown meta track of type: ${n.type}`),new sae(this.pStage,{name:"Unknown Track Type",type:n.type})}}}},{key:"createTrackObject",value:function(n){const C=this.createLocationAgnosticTrackObject(n);return(n.position==="left"||n.position==="right")&&Qg[n.type].orientation==="1d-horizontal"?new Poe(C):C}},{key:"createLocationAgnosticTrackObject",value:function(n){let C=n.data;C||(C={server:TN(n.server),tilesetUid:n.tilesetUid}),n.coordSystem&&(C.coordSystem=n.coordSystem);const r=F4t(C,this.props.pubSub,this.props.pluginDataFetchers,this.availableForPlugins);if(!this.pStage||!this.svgElement)throw new Error("No PIXI stage or svg element");const o={id:n.uid,trackUid:n.uid,trackType:n.type,viewUid:this.viewUid,pubSub:this.props.pubSub,scene:this.pStage,dataConfig:C,dataFetcher:r,getLockGroupExtrema:()=>this.currentProps.getLockGroupExtrema(n.uid),handleTilesetInfoReceived:a=>{this.currentProps.onTilesetInfoReceived(n.uid,a)},animate:()=>{this.currentProps.onNewTilesLoaded(n.uid)},svgElement:this.svgElement,isValueScaleLocked:()=>this.currentProps.isValueScaleLocked(n.uid),onValueScaleChanged:()=>{this.currentProps.onValueScaleChanged(n.uid)},onTrackOptionsChanged:a=>{this.currentProps.onTrackOptionsChanged(n.uid,a)},onMouseMoveZoom:this.props.onMouseMoveZoom,chromInfoPath:n.chromInfoPath,isShowGlobalMousePosition:()=>this.props.isShowGlobalMousePosition,getTheme:()=>this.props.theme};switch(n.y&&(o.yPosition=n.y),n.x&&(o.xPosition=n.x),n.projectionXDomain&&(o.projectionXDomain=n.projectionXDomain),n.projectionYDomain&&(o.projectionYDomain=n.projectionYDomain),n.type){case"left-axis":return new n1e(o,n.options);case"top-axis":return new i1e(o,n.options);case"heatmap":return new fw(o,n.options);case"multivec":case"vector-heatmap":case"horizontal-multivec":case"horizontal-vector-heatmap":case"vertical-multivec":case"vertical-vector-heatmap":return new D1e(o,n.options);case"1d-heatmap":case"horizontal-1d-heatmap":case"vertical-1d-heatmap":return new E1e(o,n.options);case"line":case"horizontal-line":case"vertical-line":return new ry(o,n.options);case"point":case"horizontal-point":case"vertical-point":return new F1e(o,n.options);case"bar":case"horizontal-bar":case"vertical-bar":return new Bj(o,n.options);case"divergent-bar":case"horizontal-divergent-bar":case"vertical-divergent-bar":return new x1e(o,n.options);case"horizontal-1d-tiles":return new qVe(o,n.options);case"vertical-1d-tiles":return new t1e(o,n.options);case"2d-tiles":return new jVe(o,n.options);case"stacked-interval":case"top-stacked-interval":case"left-stacked-interval":return new M1e(o,n.options);case"viewport-projection-center":return n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback?(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback,new gWe(o,n.options)):new Dp(o,{});case"viewport-projection-horizontal":return n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback?(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback,new IWe(o,n.options)):new Dp(o,{});case"viewport-projection-vertical":return n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback?(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback,new iWe(o,n.options)):new Dp(o,{});case"gene-annotations":case"horizontal-gene-annotations":case"vertical-gene-annotations":return new z1e(o,n.options);case"2d-rectangle-domains":case"arrowhead-domains":return new P1e(o,n.options);case"horizontal-1d-annotations":return new jP(o,n.options);case"vertical-1d-annotations":return new jP(o,n.options,!0);case"2d-annotations":return new O1e(o,n.options);case"linear-2d-rectangle-domains":case"horizontal-2d-rectangle-domains":case"vertical-2d-rectangle-domains":return new _1e(o,n.options);case"square-markers":return new L1e(o,n.options);case"combined":return o.tracks=n.contents,o.createTrackObject=this.createTrackObject.bind(this),new QQ(o);case"2d-chromosome-labels":return new U1e(o,n.options);case"horizontal-chromosome-grid":return o.orientation="1d-horizontal",new CG(o,n.options);case"vertical-chromosome-grid":return o.orientation="1d-vertical",new CG(o,n.options);case"2d-chromosome-grid":return new CG(o,n.options);case"chromosome-labels":case"horizontal-chromosome-labels":case"vertical-chromosome-labels":return new $1e(o,n.options);case"linear-heatmap":case"horizontal-heatmap":case"vertical-heatmap":return new q1e(o,n.options);case"2d-chromosome-annotations":return new Q1e(o,n.options);case"1d-value-interval":case"horizontal-1d-value-interval":case"vertical-1d-value-interval":return new tWe(o,n.options);case"osm":case"osm-tiles":return new bw(o,n.options);case"osm-2d-tile-ids":return new bWe(o,n.options);case"mapbox":case"mapbox-tiles":return new yWe(o,n.options);case"raster-tiles":return new ZWe(o,n.options);case"bedlike":case"vertical-bedlike":return new Y1e(o,n.options);case"overlay-track":return new K1e(o,n.options);case"overlay-chromosome-grid-track":return o.isOverlay=!0,new CG(o,n.options);case"horizontal-rule":return new sWe(o,n.options);case"vertical-rule":return new mWe(o,n.options);case"cross-rule":return o.x=n.x,o.y=n.y,new fWe(o,n.options);case"simple-svg":return new mm(o,n.options);case"empty":{const a=n.options;return new mC(o,a)}default:{const a=this.props.pluginTracks[n.type];if(a&&!a.isMetaTrack){o.AVAILABLE_FOR_PLUGINS=this.availableForPlugins,o.baseEl=this.baseEl,o.definition=n,n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback&&(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback);try{return new a.track(this.availableForPlugins,o,n.options)}catch(s){console.error("Plugin track",n.type,"failed to instantiate.",s)}}return console.warn("Unknown track type:",n.type),new sae(o,{name:"Unknown Track Type",type:n.type})}}}},{key:"zoomToDataPos",value:function(n,C,r,o,a=3e3,s=null){const[A,l,c]=Si(this.xScale.copy().domain([n,C]),this.yScale.copy().domain([r,o])),u=s?s(this.xScale,this.yScale):[this.xScale,this.yScale];this.setCenter(A,l,c,!1,a,u[0],u[1])}},{key:"forwardContextMenu",value:function(n){this.props.disableTrackMenu||n.altKey||(n.preventDefault(),setTimeout(()=>{this.props.pubSub.publish("contextmenu",n)},0))}},{key:"addEventTracker",value:function(){!this.eventTracker||this.eventTracker===this.eventTrackerOld||(this.eventTrackerOld||(this.eventTrackerOld=this.eventTracker),this.eventTracker=this.eventTrackerOld,this.eventTracker.addEventListener("click",this.boundForwardEvent),this.eventTracker.addEventListener("contextmenu",this.boundForwardContextMenu),this.eventTracker.addEventListener("dblclick",this.boundForwardEvent),this.eventTracker.addEventListener("wheel",this.boundForwardEvent),this.eventTracker.addEventListener("dragstart",this.boundForwardEvent),this.eventTracker.addEventListener("selectstart",this.boundForwardEvent),this.eventTracker.addEventListener("mouseover",this.boundForwardEvent),this.eventTracker.addEventListener("mouseenter",this.boundForwardEvent),this.eventTracker.addEventListener("mousedown",this.boundForwardEvent),this.eventTracker.addEventListener("mouseup",this.boundForwardEvent),this.eventTracker.addEventListener("mouseout",this.boundForwardEvent),this.eventTracker.addEventListener("mouseleave",this.boundForwardEvent),this.eventTracker.addEventListener("touchstart",this.boundForwardEvent),this.eventTracker.addEventListener("touchend",this.boundForwardEvent),this.eventTracker.addEventListener("touchmove",this.boundForwardEvent),this.eventTracker.addEventListener("touchcancel",this.boundForwardEvent),this.eventTracker.addEventListener("pointerover",this.boundForwardEvent),this.eventTracker.addEventListener("pointerenter",this.boundForwardEvent),this.eventTracker.addEventListener("pointerdown",this.boundForwardEvent),this.eventTracker.addEventListener("pointerup",this.boundForwardEvent),this.eventTracker.addEventListener("pointercancel",this.boundForwardEvent),this.eventTracker.addEventListener("pointerout",this.boundForwardEvent),this.eventTracker.addEventListener("pointerleave",this.boundForwardEvent),window.addEventListener("scroll",this.boundScrollEvent))}},{key:"removeEventTracker",value:function(){this.eventTracker&&(this.eventTracker.removeEventListener("click",this.boundForwardEvent),this.eventTracker.removeEventListener("contextmenu",this.boundForwardContextMenu),this.eventTracker.removeEventListener("dblclick",this.boundForwardEvent),this.eventTracker.removeEventListener("wheel",this.boundForwardEvent),this.eventTracker.removeEventListener("dragstart",this.boundForwardEvent),this.eventTracker.removeEventListener("selectstart",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseover",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseenter",this.boundForwardEvent),this.eventTracker.removeEventListener("mousedown",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseup",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseout",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseleave",this.boundForwardEvent),this.eventTracker.removeEventListener("touchstart",this.boundForwardEvent),this.eventTracker.removeEventListener("touchend",this.boundForwardEvent),this.eventTracker.removeEventListener("touchcancel",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerover",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerenter",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerdown",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerup",this.boundForwardEvent),this.eventTracker.removeEventListener("pointercancel",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerout",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerleave",this.boundForwardEvent),window.removeEventListener("scroll",this.boundScrollEvent))}},{key:"scrollEvent",value:function(){this.element&&(this.elementPos=this.element.getBoundingClientRect())}},{key:"forwardEvent",value:function(n){n.sourceUid=this.uid,n.forwarded=!0,this.props.pubSub.publish("app.event",n)}},{key:"onScrollHandler",value:function(n){this.scrollTop=n}},{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.baseEl=n},className:Xg("track-renderer-div",bx["track-renderer"]),style:{height:this.currentProps.height,width:this.currentProps.width}},N.createElement("div",{ref:n=>{this.element=n},className:Xg("track-renderer-element",bx["track-renderer-element"])}),N.createElement("div",{ref:n=>{this.eventTracker=n},className:Xg("track-renderer-events",bx["track-renderer-events"])},this.currentProps.children))}}]),I}(N.Component);V$.defaultProps={pluginDataFetchers:{},pluginTracks:{},canvasElement:null,centerHeight:0,centerWidth:0,children:[],galleryDim:0,height:0,initialXDomain:[],initialYDomain:[],isShowGlobalMousePosition:!1,isRangeSelection:!1,leftWidth:0,leftWidthNoGallery:0,paddingLeft:0,paddingTop:0,positionedTracks:[],topHeight:0,topHeightNoGallery:0,width:0,metaTracks:[]};V$.propTypes={canvasElement:L.object,centerHeight:L.number,centerWidth:L.number,children:L.array,disableTrackMenu:L.bool,galleryDim:L.number,height:L.number,initialXDomain:L.array,initialYDomain:L.array,isShowGlobalMousePosition:L.bool,isRangeSelection:L.bool,leftWidth:L.number,leftWidthNoGallery:L.number,paddingLeft:L.number,paddingTop:L.number,metaTracks:L.array,onMouseMoveZoom:L.func,onNewTilesLoaded:L.func.isRequired,onScalesChanged:L.func.isRequired,pixiRenderer:L.object.isRequired,pixiStage:L.object.isRequired,pluginDataFetchers:L.object,pluginTracks:L.object,positionedTracks:L.array,pubSub:L.object.isRequired,setCentersFunction:L.func,svgElement:L.object.isRequired,theme:L.symbol.isRequired,topHeight:L.number,topHeightNoGallery:L.number,viewOptions:L.object,width:L.number,xDomainLimits:L.array,yDomainLimits:L.array,valueScaleZoom:L.bool,zoomable:L.bool.isRequired,zoomDomain:L.array,uid:L.string,zoomLimits:L.array};const x4t=ty(cm(V$));var fXe={exports:{}};/*! react-checkbox-tree - v1.8.0 | 2022 */(function(e,g){/*! For license information please see index.browser.js.LICENSE.txt */(function(I,i){e.exports=i(N)})(self,I=>(()=>{var i={4184:(o,a)=>{var s;(function(){var A={}.hasOwnProperty;function l(){for(var c=[],u=0;u{var A=s(852)(s(5639),"DataView");o.exports=A},1989:(o,a,s)=>{var A=s(1789),l=s(401),c=s(7667),u=s(1327),d=s(1866);function h(m){var f=-1,b=m==null?0:m.length;for(this.clear();++f{var A=s(7040),l=s(4125),c=s(2117),u=s(7518),d=s(4705);function h(m){var f=-1,b=m==null?0:m.length;for(this.clear();++f{var A=s(852)(s(5639),"Map");o.exports=A},3369:(o,a,s)=>{var A=s(4785),l=s(1285),c=s(6e3),u=s(9916),d=s(5265);function h(m){var f=-1,b=m==null?0:m.length;for(this.clear();++f{var A=s(852)(s(5639),"Promise");o.exports=A},8525:(o,a,s)=>{var A=s(852)(s(5639),"Set");o.exports=A},8668:(o,a,s)=>{var A=s(3369),l=s(619),c=s(2385);function u(d){var h=-1,m=d==null?0:d.length;for(this.__data__=new A;++h{var A=s(8407),l=s(7465),c=s(3779),u=s(7599),d=s(4758),h=s(4309);function m(f){var b=this.__data__=new A(f);this.size=b.size}m.prototype.clear=l,m.prototype.delete=c,m.prototype.get=u,m.prototype.has=d,m.prototype.set=h,o.exports=m},2705:(o,a,s)=>{var A=s(5639).Symbol;o.exports=A},1149:(o,a,s)=>{var A=s(5639).Uint8Array;o.exports=A},577:(o,a,s)=>{var A=s(852)(s(5639),"WeakMap");o.exports=A},4963:o=>{o.exports=function(a,s){for(var A=-1,l=a==null?0:a.length,c=0,u=[];++A{var A=s(2545),l=s(5694),c=s(1469),u=s(4144),d=s(5776),h=s(6719),m=Object.prototype.hasOwnProperty;o.exports=function(f,b){var p=c(f),y=!p&&l(f),Z=!p&&!y&&u(f),B=!p&&!y&&!Z&&h(f),G=p||y||Z||B,v=G?A(f.length,String):[],w=v.length;for(var R in f)!b&&!m.call(f,R)||G&&(R=="length"||Z&&(R=="offset"||R=="parent")||B&&(R=="buffer"||R=="byteLength"||R=="byteOffset")||d(R,w))||v.push(R);return v}},2488:o=>{o.exports=function(a,s){for(var A=-1,l=s.length,c=a.length;++A{o.exports=function(a,s){for(var A=-1,l=a==null?0:a.length;++A{var A=s(7813);o.exports=function(l,c){for(var u=l.length;u--;)if(A(l[u][0],c))return u;return-1}},8866:(o,a,s)=>{var A=s(2488),l=s(1469);o.exports=function(c,u,d){var h=u(c);return l(c)?h:A(h,d(c))}},4239:(o,a,s)=>{var A=s(2705),l=s(9607),c=s(2333),u=A?A.toStringTag:void 0;o.exports=function(d){return d==null?d===void 0?"[object Undefined]":"[object Null]":u&&u in Object(d)?l(d):c(d)}},9454:(o,a,s)=>{var A=s(4239),l=s(7005);o.exports=function(c){return l(c)&&A(c)=="[object Arguments]"}},939:(o,a,s)=>{var A=s(2492),l=s(7005);o.exports=function c(u,d,h,m,f){return u===d||(u==null||d==null||!l(u)&&!l(d)?u!=u&&d!=d:A(u,d,h,m,c,f))}},2492:(o,a,s)=>{var A=s(6384),l=s(7114),c=s(8351),u=s(6096),d=s(4160),h=s(1469),m=s(4144),f=s(6719),b="[object Arguments]",p="[object Array]",y="[object Object]",Z=Object.prototype.hasOwnProperty;o.exports=function(B,G,v,w,R,S){var X=h(B),W=h(G),V=X?p:d(B),H=W?p:d(G),Y=(V=V==b?y:V)==y,K=(H=H==b?y:H)==y,x=V==H;if(x&&m(B)){if(!m(G))return!1;X=!0,Y=!1}if(x&&!Y)return S||(S=new A),X||f(B)?l(B,G,v,w,R,S):c(B,G,V,v,w,R,S);if(!(1&v)){var J=Y&&Z.call(B,"__wrapped__"),P=K&&Z.call(G,"__wrapped__");if(J||P){var ge=J?B.value():B,q=P?G.value():G;return S||(S=new A),R(ge,q,v,w,S)}}return!!x&&(S||(S=new A),u(B,G,v,w,R,S))}},8458:(o,a,s)=>{var A=s(3560),l=s(5346),c=s(3218),u=s(346),d=/^\[object .+?Constructor\]$/,h=Function.prototype,m=Object.prototype,f=h.toString,b=m.hasOwnProperty,p=RegExp("^"+f.call(b).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o.exports=function(y){return!(!c(y)||l(y))&&(A(y)?p:d).test(u(y))}},8749:(o,a,s)=>{var A=s(4239),l=s(1780),c=s(7005),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,o.exports=function(d){return c(d)&&l(d.length)&&!!u[A(d)]}},280:(o,a,s)=>{var A=s(5726),l=s(6916),c=Object.prototype.hasOwnProperty;o.exports=function(u){if(!A(u))return l(u);var d=[];for(var h in Object(u))c.call(u,h)&&h!="constructor"&&d.push(h);return d}},2545:o=>{o.exports=function(a,s){for(var A=-1,l=Array(a);++A{o.exports=function(a){return function(s){return a(s)}}},4757:o=>{o.exports=function(a,s){return a.has(s)}},4429:(o,a,s)=>{var A=s(5639)["__core-js_shared__"];o.exports=A},7114:(o,a,s)=>{var A=s(8668),l=s(2908),c=s(4757);o.exports=function(u,d,h,m,f,b){var p=1&h,y=u.length,Z=d.length;if(y!=Z&&!(p&&Z>y))return!1;var B=b.get(u),G=b.get(d);if(B&&G)return B==d&&G==u;var v=-1,w=!0,R=2&h?new A:void 0;for(b.set(u,d),b.set(d,u);++v{var A=s(2705),l=s(1149),c=s(7813),u=s(7114),d=s(8776),h=s(1814),m=A?A.prototype:void 0,f=m?m.valueOf:void 0;o.exports=function(b,p,y,Z,B,G,v){switch(y){case"[object DataView]":if(b.byteLength!=p.byteLength||b.byteOffset!=p.byteOffset)return!1;b=b.buffer,p=p.buffer;case"[object ArrayBuffer]":return!(b.byteLength!=p.byteLength||!G(new l(b),new l(p)));case"[object Boolean]":case"[object Date]":case"[object Number]":return c(+b,+p);case"[object Error]":return b.name==p.name&&b.message==p.message;case"[object RegExp]":case"[object String]":return b==p+"";case"[object Map]":var w=d;case"[object Set]":var R=1&Z;if(w||(w=h),b.size!=p.size&&!R)return!1;var S=v.get(b);if(S)return S==p;Z|=2,v.set(b,p);var X=u(w(b),w(p),Z,B,G,v);return v.delete(b),X;case"[object Symbol]":if(f)return f.call(b)==f.call(p)}return!1}},6096:(o,a,s)=>{var A=s(8234),l=Object.prototype.hasOwnProperty;o.exports=function(c,u,d,h,m,f){var b=1&d,p=A(c),y=p.length;if(y!=A(u).length&&!b)return!1;for(var Z=y;Z--;){var B=p[Z];if(!(b?B in u:l.call(u,B)))return!1}var G=f.get(c),v=f.get(u);if(G&&v)return G==u&&v==c;var w=!0;f.set(c,u),f.set(u,c);for(var R=b;++Z{var A=typeof s.g=="object"&&s.g&&s.g.Object===Object&&s.g;o.exports=A},8234:(o,a,s)=>{var A=s(8866),l=s(9551),c=s(3674);o.exports=function(u){return A(u,c,l)}},5050:(o,a,s)=>{var A=s(7019);o.exports=function(l,c){var u=l.__data__;return A(c)?u[typeof c=="string"?"string":"hash"]:u.map}},852:(o,a,s)=>{var A=s(8458),l=s(7801);o.exports=function(c,u){var d=l(c,u);return A(d)?d:void 0}},9607:(o,a,s)=>{var A=s(2705),l=Object.prototype,c=l.hasOwnProperty,u=l.toString,d=A?A.toStringTag:void 0;o.exports=function(h){var m=c.call(h,d),f=h[d];try{h[d]=void 0;var b=!0}catch{}var p=u.call(h);return b&&(m?h[d]=f:delete h[d]),p}},9551:(o,a,s)=>{var A=s(4963),l=s(479),c=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,d=u?function(h){return h==null?[]:(h=Object(h),A(u(h),function(m){return c.call(h,m)}))}:l;o.exports=d},4160:(o,a,s)=>{var A=s(8552),l=s(7071),c=s(3818),u=s(8525),d=s(577),h=s(4239),m=s(346),f="[object Map]",b="[object Promise]",p="[object Set]",y="[object WeakMap]",Z="[object DataView]",B=m(A),G=m(l),v=m(c),w=m(u),R=m(d),S=h;(A&&S(new A(new ArrayBuffer(1)))!=Z||l&&S(new l)!=f||c&&S(c.resolve())!=b||u&&S(new u)!=p||d&&S(new d)!=y)&&(S=function(X){var W=h(X),V=W=="[object Object]"?X.constructor:void 0,H=V?m(V):"";if(H)switch(H){case B:return Z;case G:return f;case v:return b;case w:return p;case R:return y}return W}),o.exports=S},7801:o=>{o.exports=function(a,s){return a==null?void 0:a[s]}},1789:(o,a,s)=>{var A=s(4536);o.exports=function(){this.__data__=A?A(null):{},this.size=0}},401:o=>{o.exports=function(a){var s=this.has(a)&&delete this.__data__[a];return this.size-=s?1:0,s}},7667:(o,a,s)=>{var A=s(4536),l=Object.prototype.hasOwnProperty;o.exports=function(c){var u=this.__data__;if(A){var d=u[c];return d==="__lodash_hash_undefined__"?void 0:d}return l.call(u,c)?u[c]:void 0}},1327:(o,a,s)=>{var A=s(4536),l=Object.prototype.hasOwnProperty;o.exports=function(c){var u=this.__data__;return A?u[c]!==void 0:l.call(u,c)}},1866:(o,a,s)=>{var A=s(4536);o.exports=function(l,c){var u=this.__data__;return this.size+=this.has(l)?0:1,u[l]=A&&c===void 0?"__lodash_hash_undefined__":c,this}},5776:o=>{var a=/^(?:0|[1-9]\d*)$/;o.exports=function(s,A){var l=typeof s;return!!(A=A??9007199254740991)&&(l=="number"||l!="symbol"&&a.test(s))&&s>-1&&s%1==0&&s{o.exports=function(a){var s=typeof a;return s=="string"||s=="number"||s=="symbol"||s=="boolean"?a!=="__proto__":a===null}},5346:(o,a,s)=>{var A,l=s(4429),c=(A=/[^.]+$/.exec(l&&l.keys&&l.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";o.exports=function(u){return!!c&&c in u}},5726:o=>{var a=Object.prototype;o.exports=function(s){var A=s&&s.constructor;return s===(typeof A=="function"&&A.prototype||a)}},7040:o=>{o.exports=function(){this.__data__=[],this.size=0}},4125:(o,a,s)=>{var A=s(8470),l=Array.prototype.splice;o.exports=function(c){var u=this.__data__,d=A(u,c);return!(d<0||(d==u.length-1?u.pop():l.call(u,d,1),--this.size,0))}},2117:(o,a,s)=>{var A=s(8470);o.exports=function(l){var c=this.__data__,u=A(c,l);return u<0?void 0:c[u][1]}},7518:(o,a,s)=>{var A=s(8470);o.exports=function(l){return A(this.__data__,l)>-1}},4705:(o,a,s)=>{var A=s(8470);o.exports=function(l,c){var u=this.__data__,d=A(u,l);return d<0?(++this.size,u.push([l,c])):u[d][1]=c,this}},4785:(o,a,s)=>{var A=s(1989),l=s(8407),c=s(7071);o.exports=function(){this.size=0,this.__data__={hash:new A,map:new(c||l),string:new A}}},1285:(o,a,s)=>{var A=s(5050);o.exports=function(l){var c=A(this,l).delete(l);return this.size-=c?1:0,c}},6e3:(o,a,s)=>{var A=s(5050);o.exports=function(l){return A(this,l).get(l)}},9916:(o,a,s)=>{var A=s(5050);o.exports=function(l){return A(this,l).has(l)}},5265:(o,a,s)=>{var A=s(5050);o.exports=function(l,c){var u=A(this,l),d=u.size;return u.set(l,c),this.size+=u.size==d?0:1,this}},8776:o=>{o.exports=function(a){var s=-1,A=Array(a.size);return a.forEach(function(l,c){A[++s]=[c,l]}),A}},4536:(o,a,s)=>{var A=s(852)(Object,"create");o.exports=A},6916:(o,a,s)=>{var A=s(5569)(Object.keys,Object);o.exports=A},1167:(o,a,s)=>{o=s.nmd(o);var A=s(1957),l=a&&!a.nodeType&&a,c=l&&o&&!o.nodeType&&o,u=c&&c.exports===l&&A.process,d=function(){try{return c&&c.require&&c.require("util").types||u&&u.binding&&u.binding("util")}catch{}}();o.exports=d},2333:o=>{var a=Object.prototype.toString;o.exports=function(s){return a.call(s)}},5569:o=>{o.exports=function(a,s){return function(A){return a(s(A))}}},5639:(o,a,s)=>{var A=s(1957),l=typeof self=="object"&&self&&self.Object===Object&&self,c=A||l||Function("return this")();o.exports=c},619:o=>{o.exports=function(a){return this.__data__.set(a,"__lodash_hash_undefined__"),this}},2385:o=>{o.exports=function(a){return this.__data__.has(a)}},1814:o=>{o.exports=function(a){var s=-1,A=Array(a.size);return a.forEach(function(l){A[++s]=l}),A}},7465:(o,a,s)=>{var A=s(8407);o.exports=function(){this.__data__=new A,this.size=0}},3779:o=>{o.exports=function(a){var s=this.__data__,A=s.delete(a);return this.size=s.size,A}},7599:o=>{o.exports=function(a){return this.__data__.get(a)}},4758:o=>{o.exports=function(a){return this.__data__.has(a)}},4309:(o,a,s)=>{var A=s(8407),l=s(7071),c=s(3369);o.exports=function(u,d){var h=this.__data__;if(h instanceof A){var m=h.__data__;if(!l||m.length<199)return m.push([u,d]),this.size=++h.size,this;h=this.__data__=new c(m)}return h.set(u,d),this.size=h.size,this}},346:o=>{var a=Function.prototype.toString;o.exports=function(s){if(s!=null){try{return a.call(s)}catch{}try{return s+""}catch{}}return""}},7813:o=>{o.exports=function(a,s){return a===s||a!=a&&s!=s}},5694:(o,a,s)=>{var A=s(9454),l=s(7005),c=Object.prototype,u=c.hasOwnProperty,d=c.propertyIsEnumerable,h=A(function(){return arguments}())?A:function(m){return l(m)&&u.call(m,"callee")&&!d.call(m,"callee")};o.exports=h},1469:o=>{var a=Array.isArray;o.exports=a},8612:(o,a,s)=>{var A=s(3560),l=s(1780);o.exports=function(c){return c!=null&&l(c.length)&&!A(c)}},4144:(o,a,s)=>{o=s.nmd(o);var A=s(5639),l=s(5062),c=a&&!a.nodeType&&a,u=c&&o&&!o.nodeType&&o,d=u&&u.exports===c?A.Buffer:void 0,h=(d?d.isBuffer:void 0)||l;o.exports=h},8446:(o,a,s)=>{var A=s(939);o.exports=function(l,c){return A(l,c)}},3560:(o,a,s)=>{var A=s(4239),l=s(3218);o.exports=function(c){if(!l(c))return!1;var u=A(c);return u=="[object Function]"||u=="[object GeneratorFunction]"||u=="[object AsyncFunction]"||u=="[object Proxy]"}},1780:o=>{o.exports=function(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=9007199254740991}},3218:o=>{o.exports=function(a){var s=typeof a;return a!=null&&(s=="object"||s=="function")}},7005:o=>{o.exports=function(a){return a!=null&&typeof a=="object"}},6719:(o,a,s)=>{var A=s(8749),l=s(1717),c=s(1167),u=c&&c.isTypedArray,d=u?l(u):A;o.exports=d},3674:(o,a,s)=>{var A=s(4636),l=s(280),c=s(8612);o.exports=function(u){return c(u)?A(u):l(u)}},8306:(o,a,s)=>{var A=s(3369);function l(c,u){if(typeof c!="function"||u!=null&&typeof u!="function")throw new TypeError("Expected a function");var d=function(){var h=arguments,m=u?u.apply(this,h):h[0],f=d.cache;if(f.has(m))return f.get(m);var b=c.apply(this,h);return d.cache=f.set(m,b)||f,b};return d.cache=new(l.Cache||A),d}l.Cache=A,o.exports=l},479:o=>{o.exports=function(){return[]}},5062:o=>{o.exports=function(){return!1}},2703:(o,a,s)=>{var A=s(414);function l(){}function c(){}c.resetWarningCache=l,o.exports=function(){function u(m,f,b,p,y,Z){if(Z!==A){var B=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw B.name="Invariant Violation",B}}function d(){return u}u.isRequired=u;var h={array:u,bigint:u,bool:u,func:u,number:u,object:u,string:u,symbol:u,any:u,arrayOf:d,element:u,elementType:u,instanceOf:d,node:u,objectOf:d,oneOf:d,oneOfType:d,shape:d,exact:d,checkPropTypes:c,resetWarningCache:l};return h.PropTypes=h,h}},5697:(o,a,s)=>{o.exports=s(2703)()},414:o=>{o.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},9787:o=>{o.exports=I}},n={};function C(o){var a=n[o];if(a!==void 0)return a.exports;var s=n[o]={id:o,loaded:!1,exports:{}};return i[o](s,s.exports,C),s.loaded=!0,s.exports}C.n=o=>{var a=o&&o.__esModule?()=>o.default:()=>o;return C.d(a,{a}),a},C.d=(o,a)=>{for(var s in a)C.o(a,s)&&!C.o(o,s)&&Object.defineProperty(o,s,{enumerable:!0,get:a[s]})},C.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}(),C.o=(o,a)=>Object.prototype.hasOwnProperty.call(o,a),C.r=o=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},C.nmd=o=>(o.paths=[],o.children||(o.children=[]),o);var r={};return(()=>{C.r(r),C.d(r,{default:()=>Ye,expandNodesToLevel:()=>fe});var o=C(4184),a=C.n(o),s=C(8446),A=C.n(s),l=C(8306),c=C.n(l);let u=(ue=21)=>crypto.getRandomValues(new Uint8Array(ue)).reduce((le,re)=>le+((re&=63)<36?re.toString(36):re<62?(re-26).toString(36).toUpperCase():re>62?"-":"_"),"");var d=C(5697),h=C.n(d),m=C(9787),f=C.n(m);function b(ue){return b=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(le){return typeof le}:function(le){return le&&typeof Symbol=="function"&&le.constructor===Symbol&&le!==Symbol.prototype?"symbol":typeof le},b(ue)}var p=["children","title"];function y(){return y=Object.assign?Object.assign.bind():function(ue){for(var le=1;le"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var Me,ke=w(oe);if(Re){var Ee=w(this).constructor;Me=Reflect.construct(ke,arguments,Ee)}else Me=ke.apply(this,arguments);return v(this,Me)});function Fe(){return Z(this,Fe),xe.apply(this,arguments)}return le=Fe,(re=[{key:"render",value:function(){var Me=this.props,ke=Me.children,Ee=Me.title,O=function(D,ee){if(D==null)return{};var ce,de,Le=function(dt,yt){if(dt==null)return{};var kt,ht,Rt={},xt=Object.keys(dt);for(ht=0;ht=0||(Rt[kt]=dt[kt]);return Rt}(D,ee);if(Object.getOwnPropertySymbols){var Ue=Object.getOwnPropertySymbols(D);for(de=0;de=0||Object.prototype.propertyIsEnumerable.call(D,ce)&&(Le[ce]=D[ce])}return Le}(Me,p);return f().createElement("button",y({"aria-label":Ee,title:Ee,type:"button"},O),ke)}}])&&B(le.prototype,re),Object.defineProperty(le,"prototype",{writable:!1}),Fe}(f().PureComponent);R(S,"propTypes",{children:h().node.isRequired,title:h().string}),R(S,"defaultProps",{title:null});const X=S,W={ALL:"all",PARENT:"parent",LEAF:"leaf"};function V(ue){this.message=ue,this.stack=Error().stack}V.prototype=Object.create(Error.prototype),V.prototype.name="CheckboxTreeError";const H=V;function Y(ue,le){var re=Object.keys(ue);if(Object.getOwnPropertySymbols){var oe=Object.getOwnPropertySymbols(ue);le&&(oe=oe.filter(function(Re){return Object.getOwnPropertyDescriptor(ue,Re).enumerable})),re.push.apply(re,oe)}return re}function K(ue,le,re){return le in ue?Object.defineProperty(ue,le,{value:re,enumerable:!0,configurable:!0,writable:!0}):ue[le]=re,ue}function x(ue,le){if(!(ue instanceof le))throw new TypeError("Cannot call a class as a function")}function J(ue,le){for(var re=0;re1&&arguments[1]!==void 0?arguments[1]:{};x(this,ue),this.props=oe,this.flatNodes=Re}var le,re;return le=ue,re=[{key:"setProps",value:function(oe){this.props=oe}},{key:"clone",value:function(){var oe=this,Re={};return Object.keys(this.flatNodes).forEach(function(xe){var Fe=oe.flatNodes[xe];Re[xe]=function(Me){for(var ke=1;ke1&&arguments[1]!==void 0?arguments[1]:{},Fe=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;if(Array.isArray(oe)&&oe.length!==0){var Me=this.props,ke=Me.disabled,Ee=Me.noCascade;oe.forEach(function(O,D){var ee=Re.nodeHasChildren(O);if(Re.flatNodes[O.value]!==void 0)throw new H("Duplicate value '".concat(O.value,"' detected. All node values must be unique."));Re.flatNodes[O.value]={label:O.label,value:O.value,children:O.children,parent:xe,isChild:xe.value!==void 0,isParent:ee,isLeaf:!ee,showCheckbox:O.showCheckbox===void 0||O.showCheckbox,disabled:Re.getDisabledState(O,xe,ke,Ee),treeDepth:Fe,index:D},Re.flattenNodes(O.children,O,Fe+1)})}}},{key:"nodeHasChildren",value:function(oe){return Array.isArray(oe.children)}},{key:"getDisabledState",value:function(oe,Re,xe,Fe){return!!xe||!(Fe||!Re.disabled)||!!oe.disabled}},{key:"deserializeLists",value:function(oe){var Re=this,xe=["checked","expanded"];Object.keys(this.flatNodes).forEach(function(Fe){xe.forEach(function(Me){Re.flatNodes[Fe][Me]=!1})}),xe.forEach(function(Fe){oe[Fe].forEach(function(Me){Re.flatNodes[Me]!==void 0&&(Re.flatNodes[Me][Fe]=!0)})})}},{key:"serializeList",value:function(oe){var Re=this,xe=[];return Object.keys(this.flatNodes).forEach(function(Fe){Re.flatNodes[Fe][oe]&&xe.push(Fe)}),xe}},{key:"expandAllNodes",value:function(oe){var Re=this;return Object.keys(this.flatNodes).forEach(function(xe){Re.flatNodes[xe].isParent&&(Re.flatNodes[xe].expanded=oe)}),this}},{key:"toggleChecked",value:function(oe,Re,xe,Fe){var Me=this,ke=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],Ee=this.flatNodes[oe.value],O=[P.PARENT,P.ALL].indexOf(xe)>-1,D=[P.LEAF,P.ALL].indexOf(xe)>-1;if(Ee.isLeaf||Fe){if(oe.disabled)return this;this.toggleNode(oe.value,"checked",Re)}else(O||Ee.children.length===0)&&this.toggleNode(oe.value,"checked",Re),D&&Ee.children.forEach(function(ee){Me.toggleChecked(ee,Re,xe,Fe,!1)});return ke&&!Fe&&Ee.isChild&&O&&this.toggleParentStatus(Ee.parent,xe),this}},{key:"toggleParentStatus",value:function(oe,Re){var xe=this.flatNodes[oe.value];xe.isChild?(Re===P.ALL&&this.toggleNode(oe.value,"checked",this.isEveryChildChecked(xe)),this.toggleParentStatus(xe.parent,Re)):this.toggleNode(oe.value,"checked",this.isEveryChildChecked(xe))}},{key:"isEveryChildChecked",value:function(oe){var Re=this;return oe.children.every(function(xe){return Re.getNode(xe.value).checked})}},{key:"toggleNode",value:function(oe,Re,xe){return this.flatNodes[oe][Re]=xe,this}}],re&&J(le.prototype,re),Object.defineProperty(le,"prototype",{writable:!1}),ue}();function q(ue){return q=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(le){return typeof le}:function(le){return le&&typeof Symbol=="function"&&le.constructor===Symbol&&le!==Symbol.prototype?"symbol":typeof le},q(ue)}function $(){return $=Object.assign?Object.assign.bind():function(ue){for(var le=1;le"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var Me,ke=ne(oe);if(Re){var Ee=ne(this).constructor;Me=Reflect.construct(ke,arguments,Ee)}else Me=ke.apply(this,arguments);return he(this,Me)});function Fe(){return te(this,Fe),xe.apply(this,arguments)}return le=Fe,re=[{key:"componentDidMount",value:function(){this.updateDeterminateProperty()}},{key:"componentDidUpdate",value:function(){this.updateDeterminateProperty()}},{key:"updateDeterminateProperty",value:function(){var Me=this.props.indeterminate;this.checkbox.indeterminate=Me}},{key:"render",value:function(){var Me=this,ke=function(Ee){for(var O=1;O"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var Me,ke=gt(oe);if(Re){var Ee=gt(this).constructor;Me=Reflect.construct(ke,arguments,Ee)}else Me=ke.apply(this,arguments);return Qe(this,Me)});function Fe(Me){var ke;return function(Ee,O){if(!(Ee instanceof O))throw new TypeError("Cannot call a class as a function")}(this,Fe),(ke=xe.call(this,Me)).onCheck=ke.onCheck.bind(_e(ke)),ke.onCheckboxKeyPress=ke.onCheckboxKeyPress.bind(_e(ke)),ke.onCheckboxKeyUp=ke.onCheckboxKeyUp.bind(_e(ke)),ke.onClick=ke.onClick.bind(_e(ke)),ke.onExpand=ke.onExpand.bind(_e(ke)),ke}return le=Fe,(re=[{key:"onCheck",value:function(){var Me=this.props,ke=Me.value;(0,Me.onCheck)({value:ke,checked:this.getCheckState({toggle:!0})})}},{key:"onCheckboxKeyPress",value:function(Me){Me.which===32&&Me.preventDefault()}},{key:"onCheckboxKeyUp",value:function(Me){var ke=Me.keyCode;[13,32].includes(ke)&&this.onCheck()}},{key:"onClick",value:function(){var Me=this.props,ke=Me.expandOnClick,Ee=Me.isParent,O=Me.value,D=Me.onClick;Ee&&ke&&this.onExpand(),D({value:O,checked:this.getCheckState({toggle:!1})})}},{key:"onExpand",value:function(){var Me=this.props,ke=Me.expanded,Ee=Me.value;(0,Me.onExpand)({value:Ee,expanded:!ke})}},{key:"getCheckState",value:function(Me){var ke=Me.toggle,Ee=this.props,O=Ee.checked,D=Ee.optimisticToggle;return!(O!==0||!ke)||O===1&&!ke||O===2&&D}},{key:"renderCollapseButton",value:function(){var Me=this.props,ke=Me.expandDisabled,Ee=Me.isLeaf,O=Me.lang;return Ee?f().createElement("span",{className:"rct-collapse"},f().createElement("span",{className:"rct-icon"})):f().createElement(X,{className:"rct-collapse rct-collapse-btn",disabled:ke,title:O.toggle,onClick:this.onExpand},this.renderCollapseIcon())}},{key:"renderCollapseIcon",value:function(){var Me=this.props,ke=Me.expanded,Ee=Me.icons,O=Ee.expandClose,D=Ee.expandOpen;return ke?D:O}},{key:"renderCheckboxIcon",value:function(){var Me=this.props,ke=Me.checked,Ee=Me.icons,O=Ee.uncheck,D=Ee.check,ee=Ee.halfCheck;return ke===0?O:ke===1?D:ee}},{key:"renderNodeIcon",value:function(){var Me=this.props,ke=Me.expanded,Ee=Me.icon,O=Me.icons,D=O.leaf,ee=O.parentClose,ce=O.parentOpen,de=Me.isLeaf;return Ee!==null?Ee:de?D:ke?ce:ee}},{key:"renderBareLabel",value:function(Me){var ke=this.props,Ee=ke.onClick,O=ke.title,D=Ee!==null;return f().createElement("span",{className:"rct-bare-label",title:O},D?f().createElement("span",{className:"rct-node-clickable",onClick:this.onClick,onKeyPress:this.onClick,role:"button",tabIndex:0},Me):Me)}},{key:"renderCheckboxLabel",value:function(Me){var ke=this.props,Ee=ke.checked,O=ke.disabled,D=ke.title,ee=ke.treeId,ce=ke.value,de=ke.onClick!==null,Le="".concat(ee,"-").concat(String(ce).split(" ").join("_")),Ue=[f().createElement("label",{key:0,htmlFor:Le,title:D},f().createElement(ve,{checked:Ee===1,disabled:O,id:Le,indeterminate:Ee===2,onClick:this.onCheck,onChange:function(){}}),f().createElement("span",{"aria-checked":Ee===1,"aria-disabled":O,className:"rct-checkbox",role:"checkbox",tabIndex:0,onKeyPress:this.onCheckboxKeyPress,onKeyUp:this.onCheckboxKeyUp},this.renderCheckboxIcon()),de?null:Me)];return de&&Ue.push(f().createElement("span",{key:1,className:"rct-node-clickable",onClick:this.onClick,onKeyPress:this.onClick,role:"link",tabIndex:0},Me)),Ue}},{key:"renderLabel",value:function(){var Me=this.props,ke=Me.label,Ee=Me.showCheckbox,O=[Me.showNodeIcon?f().createElement("span",{key:0,className:"rct-node-icon"},this.renderNodeIcon()):null,f().createElement("span",{key:1,className:"rct-title"},ke)];return Ee?this.renderCheckboxLabel(O):this.renderBareLabel(O)}},{key:"renderChildren",value:function(){return this.props.expanded?this.props.children:null}},{key:"render",value:function(){var Me=this.props,ke=Me.className,Ee=Me.disabled,O=Me.expanded,D=Me.isLeaf,ee=a()({"rct-node":!0,"rct-node-leaf":D,"rct-node-parent":!D,"rct-node-expanded":!D&&O,"rct-node-collapsed":!D&&!O,"rct-disabled":Ee},ke);return f().createElement("li",{className:ee},f().createElement("span",{className:"rct-text"},this.renderCollapseButton(),this.renderLabel()),this.renderChildren())}}])&&Pe(le.prototype,re),Object.defineProperty(le,"prototype",{writable:!1}),Fe}(f().PureComponent);lt(tt,"propTypes",{checked:h().number.isRequired,disabled:h().bool.isRequired,expandDisabled:h().bool.isRequired,expanded:h().bool.isRequired,icons:We.isRequired,isLeaf:h().bool.isRequired,isParent:h().bool.isRequired,label:h().node.isRequired,lang:Be.isRequired,optimisticToggle:h().bool.isRequired,showNodeIcon:h().bool.isRequired,treeId:h().string.isRequired,value:h().oneOfType([h().string,h().number]).isRequired,onCheck:h().func.isRequired,onExpand:h().func.isRequired,children:h().node,className:h().string,expandOnClick:h().bool,icon:h().node,showCheckbox:h().bool,title:h().string,onClick:h().func}),lt(tt,"defaultProps",{children:null,className:null,expandOnClick:!1,icon:null,showCheckbox:!0,title:null,onClick:function(){}});const Xe=tt,ae=h().oneOfType([h().arrayOf(h().string),h().arrayOf(h().number)]);function ye(ue,le){var re=Object.keys(ue);if(Object.getOwnPropertySymbols){var oe=Object.getOwnPropertySymbols(ue);le&&(oe=oe.filter(function(Re){return Object.getOwnPropertyDescriptor(ue,Re).enumerable})),re.push.apply(re,oe)}return re}function He(ue){for(var le=1;le"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var ke,Ee=ct(Re);if(xe){var O=ct(this).constructor;ke=Reflect.construct(Ee,arguments,O)}else ke=Ee.apply(this,arguments);return at(this,ke)});function Me(ke){var Ee;(function(D,ee){if(!(D instanceof ee))throw new TypeError("Cannot call a class as a function")})(this,Me),Ee=Fe.call(this,ke);var O=new ge(ke);return O.flattenNodes(ke.nodes),O.deserializeLists({checked:ke.checked,expanded:ke.expanded}),Ee.state={id:ke.id||"rct-".concat(u()),model:O,prevProps:ke},Ee.onCheck=Ee.onCheck.bind(bt(Ee)),Ee.onExpand=Ee.onExpand.bind(bt(Ee)),Ee.onNodeClick=Ee.onNodeClick.bind(bt(Ee)),Ee.onExpandAll=Ee.onExpandAll.bind(bt(Ee)),Ee.onCollapseAll=Ee.onCollapseAll.bind(bt(Ee)),Ee.combineMemorized=c()(function(D,ee){return Ve(Ve({},D),ee)}).bind(bt(Ee)),Ee}return le=Me,re=[{key:"onCheck",value:function(ke){var Ee=this.props,O=Ee.checkModel,D=Ee.noCascade,ee=Ee.onCheck,ce=this.state.model.clone(),de=ce.getNode(ke.value);ce.toggleChecked(ke,ke.checked,O,D),ee(ce.serializeList("checked"),Ve(Ve({},de),ke))}},{key:"onExpand",value:function(ke){var Ee=this.props.onExpand,O=this.state.model.clone(),D=O.getNode(ke.value);O.toggleNode(ke.value,"expanded",ke.expanded),Ee(O.serializeList("expanded"),Ve(Ve({},D),ke))}},{key:"onNodeClick",value:function(ke){(0,this.props.onClick)(Ve(Ve({},this.state.model.getNode(ke.value)),ke))}},{key:"onExpandAll",value:function(){this.expandAllNodes()}},{key:"onCollapseAll",value:function(){this.expandAllNodes(!1)}},{key:"expandAllNodes",value:function(){var ke=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0],Ee=this.props.onExpand;Ee(this.state.model.clone().expandAllNodes(ke).serializeList("expanded"))}},{key:"determineShallowCheckState",value:function(ke,Ee){var O=this.state.model.getNode(ke.value);return O.isLeaf||Ee||ke.children.length===0?O.checked?1:0:this.isEveryChildChecked(ke)?1:this.isSomeChildChecked(ke)?2:0}},{key:"isEveryChildChecked",value:function(ke){var Ee=this;return ke.children.every(function(O){return Ee.state.model.getNode(O.value).checkState===1})}},{key:"isSomeChildChecked",value:function(ke){var Ee=this;return ke.children.some(function(O){return Ee.state.model.getNode(O.value).checkState>0})}},{key:"renderTreeNodes",value:function(ke){var Ee=this,O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},D=this.props,ee=D.expandDisabled,ce=D.expandOnClick,de=D.icons,Le=D.lang,Ue=D.noCascade,dt=D.onClick,yt=D.onlyLeafCheckboxes,kt=D.optimisticToggle,ht=D.showNodeTitle,Rt=D.showNodeIcon,xt=this.state,At=xt.id,Xt=xt.model,Pt=Me.defaultProps.icons,Ft=ke.map(function(Vg){var qg=Vg.value,It=Xt.getNode(Vg.value),Zt=It.isParent?Ee.renderTreeNodes(Vg.children,Vg):null;It.checkState=Ee.determineShallowCheckState(Vg,Ue);var Ut=yt?It.isLeaf:It.showCheckbox;return!O.value||Xt.getNode(O.value).expanded?f().createElement(Xe,{key:qg,checked:It.checkState,className:Vg.className,disabled:It.disabled,expandDisabled:ee,expandOnClick:ce,expanded:It.expanded,icon:Vg.icon,icons:Ee.combineMemorized(Pt,de),label:Vg.label,lang:Le,optimisticToggle:kt,isLeaf:It.isLeaf,isParent:It.isParent,showCheckbox:Ut,showNodeIcon:Rt,title:ht?Vg.title||Vg.label:Vg.title,treeId:At,value:Vg.value,onCheck:Ee.onCheck,onClick:dt&&Ee.onNodeClick,onExpand:Ee.onExpand},Zt):null});return f().createElement("ol",null,Ft)}},{key:"renderExpandAll",value:function(){var ke=this.props,Ee=ke.icons,O=Ee.expandAll,D=Ee.collapseAll,ee=ke.lang;return ke.showExpandAll?f().createElement("div",{className:"rct-options"},f().createElement(X,{className:"rct-option rct-option-expand-all",title:ee.expandAll,onClick:this.onExpandAll},O),f().createElement(X,{className:"rct-option rct-option-collapse-all",title:ee.collapseAll,onClick:this.onCollapseAll},D)):null}},{key:"renderHiddenInput",value:function(){var ke=this.props,Ee=ke.name,O=ke.nameAsArray;return Ee===void 0?null:O?this.renderArrayHiddenInput():this.renderJoinedHiddenInput()}},{key:"renderArrayHiddenInput",value:function(){var ke=this.props,Ee=ke.checked,O=ke.name;return Ee.map(function(D){var ee="".concat(O,"[]");return f().createElement("input",{key:D,name:ee,type:"hidden",value:D})})}},{key:"renderJoinedHiddenInput",value:function(){var ke=this.props,Ee=ke.checked,O=ke.name,D=Ee.join(",");return f().createElement("input",{name:O,type:"hidden",value:D})}},{key:"render",value:function(){var ke,Ee=this.props,O=Ee.direction,D=Ee.disabled,ee=Ee.iconsClass,ce=Ee.nodes,de=Ee.nativeCheckboxes,Le=this.state.id,Ue=this.renderTreeNodes(ce),dt=a()((Ht(ke={"react-checkbox-tree":!0,"rct-disabled":D},"rct-icons-".concat(ee),!0),Ht(ke,"rct-native-display",de),Ht(ke,"rct-direction-rtl",O==="rtl"),ke));return f().createElement("div",{className:dt,id:Le},this.renderExpandAll(),this.renderHiddenInput(),Ue)}}],oe=[{key:"getDerivedStateFromProps",value:function(ke,Ee){var O=Ee.model,D=Ee.prevProps,ee=ke.disabled,ce=ke.id,de=ke.nodes,Le=Ve(Ve({},Ee),{},{prevProps:ke});return O.setProps(ke),A()(D.nodes,de)&&D.disabled===ee||(O.reset(),O.flattenNodes(de)),ce!==null&&(Le=Ve(Ve({},Le),{},{id:ce})),O.deserializeLists({checked:ke.checked,expanded:ke.expanded}),Le}}],re&&we(le.prototype,re),oe&&we(le,oe),Object.defineProperty(le,"prototype",{writable:!1}),Me}(f().Component);function E(ue){return function(le){if(Array.isArray(le))return _(le)}(ue)||function(le){if(typeof Symbol<"u"&&le[Symbol.iterator]!=null||le["@@iterator"]!=null)return Array.from(le)}(ue)||function(le,re){if(le){if(typeof le=="string")return _(le,re);var oe=Object.prototype.toString.call(le).slice(8,-1);return oe==="Object"&&le.constructor&&(oe=le.constructor.name),oe==="Map"||oe==="Set"?Array.from(le):oe==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(oe)?_(le,re):void 0}}(ue)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function _(ue,le){(le==null||le>ue.length)&&(le=ue.length);for(var re=0,oe=new Array(le);re2&&arguments[2]!==void 0?arguments[2]:0;if(re>le)return[];var oe=[];return ue.forEach(function(Re){Re.children&&(oe=[].concat(E(oe),[Re.value],E(fe(Re.children,le,re+1))))}),oe}Ht(Ce,"propTypes",{nodes:h().arrayOf(k).isRequired,checkModel:h().oneOf([W.LEAF,W.ALL]),checked:ae,direction:h().string,disabled:h().bool,expandDisabled:h().bool,expandOnClick:h().bool,expanded:ae,icons:We,iconsClass:h().string,id:h().string,lang:Be,name:h().string,nameAsArray:h().bool,nativeCheckboxes:h().bool,noCascade:h().bool,onlyLeafCheckboxes:h().bool,optimisticToggle:h().bool,showExpandAll:h().bool,showNodeIcon:h().bool,showNodeTitle:h().bool,onCheck:h().func,onClick:h().func,onExpand:h().func}),Ht(Ce,"defaultProps",{checkModel:W.LEAF,checked:[],direction:"ltr",disabled:!1,expandDisabled:!1,expandOnClick:!1,expanded:[],icons:{check:f().createElement("span",{className:"rct-icon rct-icon-check"}),uncheck:f().createElement("span",{className:"rct-icon rct-icon-uncheck"}),halfCheck:f().createElement("span",{className:"rct-icon rct-icon-half-check"}),expandClose:f().createElement("span",{className:"rct-icon rct-icon-expand-close"}),expandOpen:f().createElement("span",{className:"rct-icon rct-icon-expand-open"}),expandAll:f().createElement("span",{className:"rct-icon rct-icon-expand-all"}),collapseAll:f().createElement("span",{className:"rct-icon rct-icon-collapse-all"}),parentClose:f().createElement("span",{className:"rct-icon rct-icon-parent-close"}),parentOpen:f().createElement("span",{className:"rct-icon rct-icon-parent-open"}),leaf:f().createElement("span",{className:"rct-icon rct-icon-leaf"})},iconsClass:"fa4",id:null,lang:{collapseAll:"Collapse all",expandAll:"Expand all",toggle:"Toggle"},name:void 0,nameAsArray:!1,nativeCheckboxes:!1,noCascade:!1,onlyLeafCheckboxes:!1,optimisticToggle:!0,showExpandAll:!1,showNodeIcon:!0,showNodeTitle:!1,onCheck:function(){},onClick:null,onExpand:function(){}});const Ye=Ce})(),r})())})(fXe);var E4t=fXe.exports;const M4t=PC(E4t);function z4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function mse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function q2(e){return q2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},q2(e)}let pXe=function(e){_4t(I,e);var g=L4t(I);function I(i){var n;z4t(this,I),n=g.call(this,i),n.localTracks=ah.filter(a=>a.local&&!a.hidden).map(a=>{const s={...a};return s.datatype=a.datatype[0],s}),n.augmentedTracksInfo=ah,window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(a=>{n.augmentedTracksInfo.push(window.higlassTracksByType[a].config)}),i.datatype?n.localTracks=n.localTracks.filter(a=>a.datatype[0]===i.datatype):n.localTracks=n.localTracks.filter(a=>a.orientation===n.props.orientation),n.localTracks.forEach(a=>{a.uuid=lg.nice()});const C=n.prepareNewEntries("",n.localTracks,{}),r=Object.keys(C),o=r.length?[r[0]]:null;return n.mounted=!1,n.state={selectedUuid:o,options:C,filter:"",checked:[],expanded:[]},n.requestTilesetLists(),n}return P4t(I,[{key:"componentDidMount",value:function(){this.mounted=!0,this.requestTilesetLists(),this.searchBox.focus()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"prepareNewEntries",value:function(n,C,r){const o=r;return C.map(s=>({...s,server:n,tilesetUid:s.uuid,serverUidKey:this.serverUidKey(n,s.uuid),datatype:s.datatype,name:s.name,uid:lg.nice()})).forEach(s=>{o[s.serverUidKey]=s}),o}},{key:"serverUidKey",value:function(n,C){return`${n}/${C}`}},{key:"requestTilesetLists",value:function(){let n=null;if(this.props.datatype?n=`dt=${this.props.datatype}`:n=[...new Set([].concat(...this.augmentedTracksInfo.filter(r=>r.datatype).filter(r=>r.orientation===this.props.orientation||this.props.orientation==="1d-vertical"&&r.orientation==="1d-horizontal").map(r=>r.datatype)))].map(r=>`dt=${r}`).join("&"),!this.props.trackSourceServers){console.warn("No track source servers specified in the viewconf");return}this.props.trackSourceServers.forEach(C=>{vt.json(`${C}/tilesets/?limit=10000&${n}`,(r,o)=>{if(r)console.error("ERROR:",r);else{const a=this.prepareNewEntries(C,o.results,this.state.options),s=Object.keys(a);let{selectedUuid:A}=this.state;if(!A){A=s.length?[s[0]]:null;const l=this.state.options[A[0]];this.props.selectedTilesetChanged([l])}this.mounted&&this.setState({selectedUuid:A,options:a})}},this.props.pubSub)})}},{key:"handleOptionDoubleClick",value:function(n){const C=this.state.options[n.target.value];this.props.onDoubleClick(C)}},{key:"handleSelectedOptions",value:function(n){const C=[],r=[];for(let o=0;os.label.toLowerCase().localeCompare(A.label.toLowerCase(),"en")),o.push(r[a]));return o.sort((a,s)=>a.label.toLowerCase().localeCompare(s.label.toLowerCase(),"en")),o}},{key:"handleChecked",value:function(n){this.handleSelectedOptions(n),this.setState({checked:n})}},{key:"handleExpanded",value:function(n){this.setState({expanded:n})}},{key:"render",value:function(){const n=[];for(const s in this.state.options)n.push(this.state.options[s]);const C=this.partitionByGroup(this.state.options,this.state.filter),r={width:15,height:15,top:2,right:2,position:"relative"},o=JSON.parse(JSON.stringify(r));o.opacity=.5;const a=N.createElement("form",{onSubmit:s=>{s.preventDefault()}},N.createElement("div",{className:"tileset-finder-search-bar"},N.createElement("span",{className:"tileset-finder-label"},"Select tileset:"),N.createElement("input",{ref:s=>{this.searchBox=s},className:"tileset-finder-search-box",onChange:this.handleSearchChange.bind(this),placeholder:"Search Term",type:"text"})),N.createElement("div",{className:"tileset-finder-checkbox-tree"},N.createElement(M4t,{checked:this.state.checked,expanded:this.state.expanded,icons:{uncheck:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#square_o"})),check:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#check_square_o"})),halfCheck:N.createElement("svg",{style:o},N.createElement("use",{xlinkHref:"#check_square_o"})),leaf:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#file_o"})),expandClose:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#chevron_right"})),expandOpen:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#chevron_down"})),parentClose:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#folder_o"})),parentOpen:N.createElement("svg",{style:r},N.createElement("use",{xlinkHref:"#folder_open_o"}))},nodes:C,onCheck:this.handleChecked.bind(this),onExpand:this.handleExpanded.bind(this)})));return N.createElement("div",null,a)}}]),I}(N.Component);pXe.propTypes={datatype:L.string,orientation:L.string,onDoubleClick:L.func,pubSub:L.object.isRequired,selectedTilesetChanged:L.func,trackSourceServers:L.array};const $4t=ty(pXe);function q4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function fse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eH(e){return eH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},eH(e)}let bXe=function(e){Ijt(I,e);var g=ijt(I);function I(i){var n;return q4t(this,I),n=g.call(this,i),n.DATATYPE_TO_TRACK_TYPE=xQ(n.props.orientation),n.AVAILABLE_TRACK_TYPES=GX(n.props.datatypes,n.props.orientation),n.state={selectedPlotType:n.AVAILABLE_TRACK_TYPES[0]},n}return ejt(I,[{key:"UNSAFE_componentWillReceiveProps",value:function(n){if(this.AVAILABLE_TRACK_TYPES=GX(n.datatypes,this.props.orientation),!!this.AVAILABLE_TRACK_TYPES&&n.allTracksSameDatatype&&this.AVAILABLE_TRACK_TYPES.length>0&&!this.AVAILABLE_TRACK_TYPES.includes(this.state.selectedPlotType)){const C=zQ(n.datatypes[0][0],this.props.position,this.AVAILABLE_TRACK_TYPES);this.handlePlotTypeSelected(C)}}},{key:"handlePlotTypeSelected",value:function(n){this.setState({selectedPlotType:n}),this.props.onPlotTypeSelected(n.type)}},{key:"render",value:function(){let n="No plot types available for track";const C={};return ah.forEach(r=>{C[r.type]=r}),this.AVAILABLE_TRACK_TYPES&&(n=this.AVAILABLE_TRACK_TYPES.sort((r,o)=>r.type{const o=C[r.type].thumbnail,a=this.state.selectedPlotType.type===r.type?"plot-type-item plot-type-selected":"plot-type-item",s=C[r.type].thumbnail?N.createElement("div",{className:"track-thumbnail",dangerouslySetInnerHTML:{__html:o.outerHTML}}):N.createElement("div",{className:"track-thumbnail"},N.createElement("svg",{height:20,width:30}));return N.createElement("li",{key:r.type,className:a,onClick:A=>{this.setState({selectedPlotType:r}),this.props.onPlotTypeSelected(r.type)},style:{listStyle:"none",paddingLeft:5,paddingBottom:0}},s,N.createElement("span",{style:{verticalAlign:"middle"}},r.type))})),N.createElement("div",null,n.length>0&&this.props.allTracksSameDatatype&&N.createElement("div",{className:"plot-type-container"},n),!this.props.allTracksSameDatatype&&N.createElement("div",{className:"plot-type-container-empty"},"Datasets with multiple datatypes chosen. They will be added with their default track types."))}}]),I}(N.Component);bXe.propTypes={allTracksSameDatatype:L.bool,datatypes:L.array,orientation:L.string,onPlotTypeSelected:L.func,position:L.string};function ojt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function pse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tH(e){return tH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},tH(e)}let gH=function(e){ljt(I,e);var g=cjt(I);function I(i){var n;return ojt(this,I),n=g.call(this,i),n.options={},n.state={selectedTilesets:[{datatype:"none"}],allTracksSameDatatype:!0},n.handleSubmitBound=n.handleSubmit.bind(TW(n)),n.handleTilesetPickerDoubleClickBound=n.handleTilesetPickerDoubleClick.bind(TW(n)),n.selectedTilesetsChangedBound=n.selectedTilesetsChanged.bind(TW(n)),n}return ajt(I,[{key:"getOrientation",value:function(n){let C=null;return n==="top"||n==="bottom"?C="1d-horizontal":n==="left"||n==="right"?C="1d-vertical":C="2d",C}},{key:"handleSubmit",value:function(n){n&&n.preventDefault(),this.props.onTracksChosen(this.state.selectedTilesets,this.props.position,this.props.host)}},{key:"handleTilesetPickerDoubleClick",value:function(n){this.selectedTilesetsChanged([n]),this.props.onTracksChosen(this.state.selectedTilesets,this.props.position,this.props.host)}},{key:"handleOptionsChanged",value:function(n){this.options=n}},{key:"handlePlotTypeSelected",value:function(n){const{selectedTilesets:C}=this.state;for(const r of C)r.type=n;this.selectedPlotType=n,this.setState({selectedTilesets:C})}},{key:"selectedTilesetsChanged",value:function(n){let C=null;n.length===0?C=[{datatype:"none"}]:C=n;let r=!0;const o=C[0].datatype;for(const a of C)a.datatype!==o&&(r=!1);if(r)for(const a of C)a.type=this.selectedPlotType;else for(const a of C){let s=[a.datatype];const A=this.getOrientation(this.props.position);a.filetype==="cooler"&&(s=[a.datatype,"chromsizes"]);const l=GX([s],A),c=zQ(s[0],this.props.position,l);a.type=c.type}this.setState({selectedTilesets:C,allTracksSameDatatype:r})}},{key:"render",value:function(){const n=this.getOrientation(this.props.position),C=N.createElement("div",null,N.createElement($4t,{ref:r=>{this.tilesetFinder=r},datatype:this.props.datatype,onDoubleClick:this.handleTilesetPickerDoubleClick.bind(this),onTracksChosen:r=>this.props.onTracksChosen(r,this.props.position),orientation:n,selectedTilesetChanged:this.selectedTilesetsChanged.bind(this),trackSourceServers:this.props.trackSourceServers}));return N.createElement(Bw,{maxHeight:!0,okayTitle:"Submit",onCancel:this.props.onCancel,onOkay:this.handleSubmitBound,title:"Add Track"},N.createElement(N.Fragment,null,C,N.createElement(bXe,{ref:r=>{this.plotTypeChooser=r},allTracksSameDatatype:this.state.allTracksSameDatatype,datatypes:this.state.selectedTilesets.map(r=>r.filetype==="cooler"?[r.datatype,"chromsizes"]:[r.datatype]),onPlotTypeSelected:this.handlePlotTypeSelected.bind(this),orientation:n,position:this.props.position})))}}]),I}(N.Component);gH.defaultProps={position:"top"};gH.propTypes={datatype:L.string,host:L.string,onCancel:L.func.isRequired,onTracksChosen:L.func.isRequired,position:L.string,trackSourceServers:L.array.isRequired};function bO(){return bO=Object.assign?Object.assign.bind():function(e){for(var g=1;g"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function IH(e){return IH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},IH(e)}let W$=function(e){bjt(I,e);var g=yjt(I);function I(){return hjt(this,I),g.apply(this,arguments)}return mjt(I,[{key:"render",value:function(){const n=[];return this.props.children.forEach((C,r)=>{const o=`customTrackDialog_${r}`;n.push(N.createElement(C,bO({key:o},this.props.bodyProps[r])))}),N.createElement(Bw,{maxHeight:!0,okayOnly:!0,okayTitle:"Close",onCancel:this.props.onCancel,onOkay:this.props.onCancel,title:this.props.title},n)}}]),I}(N.PureComponent);W$.defaultProps={};W$.propTypes={onCancel:L.func.isRequired,title:L.string,bodyProps:L.array,children:L.array};function Bjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function yse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iH(e){return iH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},iH(e)}const Zse=20;let fu=function(e){Vjt(I,e);var g=Wjt(I);function I(i){var n;return Bjt(this,I),n=g.call(this,i),n.adjusted=!1,n.state={orientation:n.props.orientation?n.props.orientation:"right",left:n.props.position.left,top:n.props.position.top,submenuShown:null},n}return Sjt(I,[{key:"componentDidMount",value:function(){this.updateOrientation()}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){this.adjusted=!1,this.setState({left:n.position.left,top:n.position.top})}},{key:"componentDidUpdate",value:function(){this.updateOrientation()}},{key:"handleItemMouseEnterWithRect",value:function(n,C){this.setState({submenuShown:C,submenuSourceBbox:n})}},{key:"handleItemMouseEnter",value:function(n,C){this.handleItemMouseEnterWithRect(n.currentTarget.getBoundingClientRect(),C)}},{key:"handleMouseLeave",value:function(){}},{key:"handleOtherMouseEnter",value:function(){this.setState({submenuShown:null})}},{key:"updateOrientation",value:function(){if(this.adjusted)return;this.adjusted=!0,this.divDom=jI.findDOMNode(this.div);const n=this.divDom.getBoundingClientRect(),C=this.props.parentBbox?this.props.parentBbox:{top:this.props.position.top,left:this.props.position.left,width:0,height:0};let r=this.state.orientation,o=C.top;if(C.top+n.height>window.innerHeight&&(C.top-n.height>0?o=C.top-n.height+Zse:(o=C.top-n.height+Zse,o-=o+n.height-window.innerHeight)),this.state.orientation==="left"){let a=C.left-n.width;a<0&&(C.left+C.width+n.width>window.innerWidth?a=0:(a=C.left+C.width,r="right")),this.setState({left:a,top:o,orientation:r})}else{let a=C.left+C.width;C.left+C.width+n.width>window.innerWidth&&(C.left-n.width<0?(a=0,r="right"):(a=C.left-n.width,r="left")),this.setState({left:a,top:o,orientation:r})}}},{key:"render",value:function(){const n=this.state.left?{left:this.state.left}:{right:this.state.right},C={top:this.state.top},r=Object.assign(n,C);return N.createElement("div",{ref:o=>{this.div=o},className:Xg("context-menu-item",Qt["context-menu"],{[Qt["context-menu-dark"]]:this.props.theme===gI}),style:r},this.props.children)}}]),I}(N.Component);fu.propTypes={children:L.node,orientation:L.string,parentBbox:L.object,position:L.object,theme:L.symbol.isRequired};function Njt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Gse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function nH(e){return nH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},nH(e)}let vO=function(e){Fjt(I,e);var g=Djt(I);function I(){return Njt(this,I),g.apply(this,arguments)}return kjt(I,[{key:"getSubmenu",value:function(){if(this.state.submenuShown){const n=this.state.submenuSourceBbox,C=this.state.orientation==="left"?{left:this.state.left,top:n.top}:{left:this.state.left+n.width+7,top:n.top},r=this.state.submenuShown;return N.createElement(I,{menuItems:r.children,orientation:this.state.orientation,parentBbox:n,position:C,theme:this.props.theme})}return N.createElement("div",null)}},{key:"componentWillUnmount",value:function(){}},{key:"render",value:function(){const n=[];for(const C in this.props.menuItems){const r=this.props.menuItems[C];n.push(N.createElement(ig,{key:C,onClick:r.handler?r.handler:()=>null,onMouseEnter:r.children?o=>this.handleItemMouseEnter(o,r):this.handleOtherMouseEnter.bind(this),onMouseLeave:this.handleMouseLeave},r.name,r.children&&N.createElement("svg",{className:Qt["play-icon"]},N.createElement("use",{xlinkHref:"#play"}))))}return N.createElement("div",{ref:C=>{this.div=C},className:Xg(Qt["context-menu"],{[Qt["context-menu-dark"]]:this.props.theme===gI}),style:{left:this.state.left,top:this.state.top}},n,this.getSubmenu())}}]),I}(fu);function zjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function vse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function CH(e){return CH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},CH(e)}let $jt=function(e){_jt(I,e);var g=Ljt(I);function I(){return zjt(this,I),g.apply(this,arguments)}return Pjt(I,[{key:"getConfigureSeriesMenu",value:function(n,C,r){const o={},a=window.higlassTracksByType&&window.higlassTracksByType[r.type]&&window.higlassTracksByType[r.type].config&&window.higlassTracksByType[r.type].config.optionsInfo;if(a)for(const s of Object.keys(a))an[s]=a[s];if(!Qg[r.type]||!Qg[r.type].availableOptions)return null;for(const s of Qg[r.type].availableOptions)if(s in an){if(o[s]={name:an[s].name},an[s].generateOptions){const A=an[s].generateOptions(r);o[s].children||(o[s].children={});for(const l of A){const c={name:l.name,value:l.value,handler:()=>{r.options[s]=l.value,this.props.onTrackOptionsChanged(r.uid,r.options),this.props.closeMenu()}};o[s].children[l.value]=c}}if(an[s].inlineOptions)for(const A in an[s].inlineOptions){const l=an[s].inlineOptions[A];o[s].children||(o[s].children={});const c={name:l.name,value:l.value};l.componentPickers&&l.componentPickers[r.type]?c.handler=()=>{this.props.onConfigureTrack(r,l.componentPickers[r.type]),this.props.closeMenu()}:c.handler=()=>{r.options[s]=l.value,this.props.onTrackOptionsChanged(r.uid,r.options),this.props.closeMenu()},o[s].children[A]=c}else an[s].componentPickers&&an[s].componentPickers[r.type]&&(o[s].handler=()=>{this.props.onConfigureTrack(r,an[s].componentPickers[r.type]),this.props.closeMenu()})}return N.createElement(vO,{key:"config-series-menu",closeMenu:this.props.closeMenu,menuItems:o,orientation:this.state.orientation,parentBbox:C,position:n,theme:this.props.theme})}},{key:"getTrackTypeItems",value:function(n,C,r){window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(l=>{Qg[l]=window.higlassTracksByType[l].config});let{datatype:o}=r,a=null;r.type in Qg&&(o||(o=Qg[r.type].datatype[0]),{orientation:a}=Qg[r.type]);const s=Object.values(Qg).filter(l=>l.datatype).filter(l=>l.orientation).filter(l=>l.datatype.includes(o)).filter(l=>l.orientation===a).map(l=>l.type),A={};for(let l=0;l{this.props.onChangeTrackType(r.uid,s[l])}};return N.createElement(vO,{key:"track-type-items",closeMenu:this.props.closeMenu,menuItems:A,orientation:this.state.orientation,parentBbox:C,position:n,theme:this.props.theme})}},{key:"getSubmenu",value:function(){if(this.state.submenuShown){const n=this.state.submenuSourceBbox,C=this.state.orientation==="left"?{left:this.state.left,top:n.top}:{left:this.state.left+n.width+7,top:n.top},r=this.state.submenuShown,o=r.value;return r.option==="track-type"?this.getTrackTypeItems(C,n,o):this.getConfigureSeriesMenu(C,n,o)}return N.createElement("div",null)}},{key:"getDivideByMenuItem",value:function(){if(this.props.series.data&&this.props.series.data.type==="divided"){const n={tilesetUid:this.props.series.data.children[0].tilesetUid,server:this.props.series.data.children[0].server};return N.createElement(ig,{className:Qt["context-menu-item"],onClick:()=>this.props.onChangeTrackData(this.props.series.uid,n),onMouseEnter:C=>this.handleOtherMouseEnter(C)},N.createElement("span",{className:Qt["context-menu-span"]},"Remove divisor"))}return N.createElement(ig,{className:Qt["context-menu-item"],onClick:()=>this.props.onAddDivisor(this.props.series),onMouseEnter:n=>this.handleOtherMouseEnter(n)},N.createElement("span",{className:Qt["context-menu-span"]},"Divide by"))}},{key:"componentWillUnmount",value:function(){}},{key:"render",value:function(){let n=null;Qg[this.props.series.type]&&Qg[this.props.series.type].exportable&&(n=N.createElement(ig,{className:Qt["context-menu-item"],onClick:()=>this.props.onExportData(this.props.hostTrack.uid,this.props.track.uid),onMouseEnter:r=>this.handleOtherMouseEnter(r)},N.createElement("span",{className:Qt["context-menu-span"]},"Export Data")));const C=this.props.onAddSeries?N.createElement(ig,{className:Qt["context-menu-item"],onClick:()=>{this.props.onCloseTrack(this.props.series.uid),this.props.onAddSeries(this.props.hostTrack.uid)},onMouseEnter:r=>this.handleOtherMouseEnter(r)},N.createElement("span",{className:Qt["context-menu-span"]},"Replace Series")):null;return N.createElement("div",{ref:r=>{this.div=r},className:Xg(Qt["context-menu"],{[Qt["context-menu-dark"]]:this.props.theme===gI}),"data-menu-type":"SeriesListMenu",onMouseLeave:this.props.handleMouseLeave,style:{left:this.state.left,top:this.state.top}},N.createElement(ig,{onClick:()=>{},onMouseEnter:r=>this.handleItemMouseEnter(r,{option:"configure-series",value:this.props.track}),onMouseLeave:r=>this.handleMouseLeave(r)},"Configure Series",N.createElement("svg",{className:Qt["play-icon"]},N.createElement("use",{xlinkHref:"#play"}))),N.createElement(ig,{className:Qt["context-menu-item"],onClick:()=>{},onMouseEnter:r=>this.handleItemMouseEnter(r,{option:"track-type",value:this.props.track}),onMouseLeave:r=>this.handleMouseLeave(r)},N.createElement("span",{className:Qt["context-menu-span"]},"Track Type",N.createElement("svg",{className:Qt["play-icon"]},N.createElement("use",{xlinkHref:"#play"})))),n,this.getDivideByMenuItem(),N.createElement(ig,{className:Qt["context-menu-item"],onClick:this.props.onCloseTrack,onMouseEnter:r=>this.handleOtherMouseEnter(r)},N.createElement("span",{className:Qt["context-menu-span"]},"Close Series")),C,this.getSubmenu())}}]),I}(fu);const yXe=e=>{let g=[];for(const I of e)I.contents?g=g.concat(I.contents):g.push(I);return g},X$=(e,g,I,i)=>e?(window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(n=>{Qg[n]=window.higlassTracksByType[n].config}),yXe(e).map(n=>{const C=Qg[n.type]?Qg[n.type].thumbnail:null,r=C?N.createElement("div",{className:Qt["context-menu-icon"],dangerouslySetInnerHTML:{__html:C.outerHTML}}):N.createElement("div",{className:Qt["context-menu-icon"]},N.createElement("svg",null));return N.createElement(ig,{key:n.uid,className:Qt["context-menu-item"],onClick:()=>{i&&i(n.uid)},onMouseEnter:o=>{g&&g(o,n)},onMouseLeave:o=>{I&&I(o)}},r,N.createElement("span",{className:Qt["context-menu-span"]},n.options&&n.options.name&&n.options.name.length?n.options.name:n.type,g&&I?N.createElement("svg",{className:Qt["play-icon"]},N.createElement("use",{xlinkHref:"#play"})):null))})):null;function qjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Bse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rH(e){return rH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},rH(e)}const ZXe=Nk(e=>function(g){I$t(i,g);var I=i$t(i);function i(){return qjt(this,i),I.apply(this,arguments)}return e$t(i,[{key:"getSubmenu",value:function(){if(this.state.submenuShown){const C=this.state.submenuSourceBbox;let r=null;this.state.orientation==="left"?r={left:this.state.left,top:C.top}:r={left:this.state.left+C.width+7,top:C.top};const a=yXe(this.props.tracks).filter(A=>A.uid===this.state.submenuShown.uid)[0],s=a&&a.position!=="whole";return N.createElement($jt,{key:`series-list-menu-${a.uid}`,ref:A=>{this.seriesListMenu=A},closeMenu:this.props.closeMenu,hostTrack:this.props.tracks[0],onAddDivisor:this.props.onAddDivisor,onAddSeries:s?this.props.onAddSeries:null,onChangeTrackData:this.props.onChangeTrackData,onChangeTrackType:this.props.onChangeTrackType,onCloseTrack:()=>this.props.onCloseTrack(this.state.submenuShown.uid),onConfigureTrack:this.props.onConfigureTrack,onDivideSeries:this.props.onDivideSeries,onExportData:this.props.onExportData,onLockScales:this.props.onLockScales,onTrackOptionsChanged:this.props.onTrackOptionsChanged,orientation:this.state.orientation,parentBbox:C,position:r,series:this.state.submenuShown,theme:this.props.theme,track:a,trackOrientation:this.props.trackOrientation,trackSourceServers:this.props.trackSourceServers})}return N.createElement("div",null)}}]),i}(e));function o$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Sse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function d0(e){return d0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},d0(e)}let f$t=function(e){c$t(I,e);var g=u$t(I);function I(i){var n;return o$t(this,I),n=g.call(this,i),n.seriesRefs={},n.seriesListMenu=null,n}return a$t(I,[{key:"componentDidMount",value:function(){NW(d0(I.prototype),"componentDidMount",this).call(this)}},{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.div=n},className:Xg(Qt["context-menu"],{[Qt["context-menu-dark"]]:this.props.theme===gI}),"data-menu-type":"ConfigTrackMenu",style:{left:this.state.left,top:this.state.top}},X$(this.props.tracks,this.handleItemMouseEnter.bind(this),this.handleMouseLeave.bind(this),null),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{contextMenu:this,onClick:()=>this.props.onLockValueScale(this.props.tracks[0].uid),onMouseEnter:n=>this.handleOtherMouseEnter(n)},"Lock Value Scale With"),N.createElement(ig,{contextMenu:this,onClick:()=>this.props.onUnlockValueScale(this.props.tracks[0].uid),onMouseEnter:n=>this.handleOtherMouseEnter(n)},"Unlock Value Scale"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{contextMenu:this,onClick:()=>this.props.onAddSeries(this.props.tracks[0].uid),onMouseEnter:n=>this.handleOtherMouseEnter(n)},"Add Series"),N.createElement(ig,{onClick:()=>this.props.onCloseTrack(this.props.tracks[0].uid)},"Close Track"),N.createElement(ig,{onClick:()=>{this.props.onReplaceTrack(this.props.tracks[0].uid,this.props.trackOrientation)}},"Replace Track"),this.getSubmenu())}}]),I}(oy(fu).with(ZXe));function GXe(e){return N.createElement("div",null,X$(e.tracks,null,null,e.onCloseTrack),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:()=>e.onCloseTrack(e.tracks[0].uid)},"Close all series"))}GXe.propTypes={onCloseTrack:L.func.isRequired,tracks:L.array.isRequired};function p$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function wse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oH(e){return oH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},oH(e)}let Dc=function(e){G$t(I,e);var g=v$t(I);function I(i){var n;return p$t(this,I),n=g.call(this,i),n.clickHandlerBound=n.clickHandler.bind(kW(n)),n.contextMenuHandlerBound=n.contextMenuHandler.bind(kW(n)),n.resizeHandlerBound=n.resizeHandler.bind(kW(n)),n}return b$t(I,[{key:"componentDidMount",value:function(){this.popup=document.createElement("div"),document.body.appendChild(this.popup),this.popup.style.zIndex=99,this.popup.style.position="absolute",this.popup.className="hg-popup",document.addEventListener("click",this.clickHandlerBound,!0),document.addEventListener("contextmenu",this.contextMenuHandlerBound,!0),window.addEventListener("resize",this.resizeHandlerBound,!0),this._renderLayer()}},{key:"componentDidUpdate",value:function(){this._renderLayer()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.clickHandlerBound,!0),document.removeEventListener("contextmenu",this.contextMenuHandlerBound,!0),window.removeEventListener("resize",this.resizeHandlerBound,!0),jI.unmountComponentAtNode(this.popup),document.body.removeChild(this.popup)}},{key:"_renderLayer",value:function(){jI.render(this.props.children,this.popup)}},{key:"clickHandler",value:function(n){this.popup.contains(n.target)||this.props.onMenuClosed&&this.props.onMenuClosed(n)}},{key:"contextMenuHandler",value:function(n){n.altKey||(n.preventDefault(),this.clickHandler(n))}},{key:"resizeHandler",value:function(){this.props.onMenuClosed(null)}},{key:"render",value:function(){return N.createElement("div",null)}}]),I}(N.Component);Dc.defaultProps={onMenuClosed:nve};Dc.propTypes={children:L.node.isRequired,onMenuClosed:L.func};const w$t=SGe(e=>N.createElement(f9e,{className:e.className,controlAlignLeft:e.controlAlignLeft,editable:e.editable,handleConfigTrack:e.handleConfigTrack,handleResizeTrack:e.handleResizeTrack,height:e.height,item:e.item,onAddSeries:e.onAddSeries,onCloseTrack:e.onCloseTrack,onCloseTrackMenuOpened:e.onCloseTrackMenuOpened,onConfigTrackMenuOpened:e.onConfigTrackMenuOpened,resizeHandles:e.resizeHandles,uid:e.uid,width:e.width})),R$t={"vertical-tiled-plot":"_vertical-tiled-plot_f3ho8_1"};function V$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Rse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function aH(e){return aH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},aH(e)}function Vse(e){return e&&e.sourceEvent}let WO=function(e){T$t(I,e);var g=N$t(I);function I(i){var n;return V$t(this,I),n=g.call(this,i),n.brushBehavior=LS().on("start",n.brushStarted.bind(YW(n))).on("brush",n.brushed.bind(YW(n))).on("end",n.brushedEnded.bind(YW(n))),n}return W$t(I,[{key:"componentDidMount",value:function(){this.props.isRangeSelectionActive&&this.addBrush()}},{key:"shouldComponentUpdate",value:function(n,C){if(this.rangeSelectionTriggered)return this.rangeSelectionTriggered=!1,this.rangeSelectionTriggeredEnd&&this.props.rangeSelection!==n.rangeSelection&&this.moveBrush(n.rangeSelection[0]?n.rangeSelection[0]:null,!0),this.rangeSelectionTriggeredEnd=!1,this.state!==C;if(this.props.rangeSelection!==n.rangeSelection){const r=this.props.is1dRangeSelection?0:1;return this.moveBrush(n.rangeSelection[r]?n.rangeSelection[r]:null,n.rangeSelectionEnd),this.state!==C}return!0}},{key:"componentDidUpdate",value:function(){this.props.isRangeSelectionActive?this.addBrush():this.removeBrush()}},{key:"addBrush",value:function(){!this.brushEl||this.brushElAddedBefore===this.brushEl||(this.brushElAddedBefore&&this.brushElAddedBefore.on(".brush",null),this.brushEl.call(this.brushBehavior),this.brushElAddedBefore=this.brushEl,kp(this.brushEl,Jo["track-range-selection-group-brush-selection"]))}},{key:"brushed",value:function(n){const C=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Vse(n)||!this.props.onRangeSelection||C)&&(this.rangeSelectionTriggered=!0,this.props.onRangeSelection(n.selection))}},{key:"brushStarted",value:function(n){!Vse(n)||!n.selection||this.props.onRangeSelectionStart()}},{key:"brushedEnded",value:function(n){if(!this.props.is1dRangeSelection)return;const C=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,n.selection&&n.sourceEvent&&this.props.onRangeSelection&&!C&&(this.rangeSelectionTriggered=!0,this.rangeSelectionTriggeredEnd=!0,this.props.onRangeSelectionEnd(n.selection)),n.selection||(this.rangeSelectionTriggered=!0,this.props.onRangeSelectionReset())}},{key:"moveBrush",value:function(n,C=!1){if(!this.brushEl)return;const r=n?[this.props.scale(n[0]),this.props.scale(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,C?this.brushEl.transition().call(this.brushBehavior.move,r):this.brushEl.call(this.brushBehavior.move,r)}},{key:"removeBrush",value:function(){this.brushElAddedBefore&&(this.brushElAddedBefore.call(this.brushBehavior.move,null),this.brushElAddedBefore.on(".brush",null),this.brushElAddedBefore=void 0,this.props.onRangeSelectionReset())}},{key:"render",value:function(){const n=this.props.tracks.map(o=>o.width).reduce($l,0),C=this.props.tracks.map(o=>E0(o)).reduce(jS,!1),r=Jo[this.props.isRangeSelectionActive?"track-range-selection-active":"track-range-selection"];return N.createElement("div",{className:R$t["vertical-tiled-plot"]},C&&N.createElement("svg",{ref:o=>{this.brushEl=hg(o)},className:r,style:{height:this.props.height,width:n},xmlns:"http://www.w3.org/2000/svg"}),N.createElement(Fk,{axis:"x",className:Xg(Oo.list,Oo.stylizedList,Oo.horizontalList),component:m9e,editable:this.props.editable,handleConfigTrack:this.props.handleConfigTrack,handleResizeTrack:this.props.handleResizeTrack,height:this.props.height,helperClass:Oo.stylizedHelper,itemClass:Xg(Oo.stylizedItem,Oo.horizontalItem),itemControlAlignLeft:this.props.tracksControlAlignLeft,itemReactClass:w$t,items:this.props.tracks.map(o=>({configMenuVisible:o.uid===this.props.configTrackMenuId,uid:o.uid||lg.nice(),height:this.props.height,width:o.width,value:o.value})),onAddSeries:this.props.onAddSeries,onCloseTrack:this.props.onCloseTrack,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,onSortEnd:this.props.handleSortEnd,referenceAncestor:this.props.referenceAncestor,resizeHandles:this.props.resizeHandles,useDragHandle:!0,width:n}))}}]),I}(N.Component);WO.propTypes={configTrackMenuId:L.string,editable:L.bool,handleConfigTrack:L.func,handleResizeTrack:L.func,handleSortEnd:L.func,is1dRangeSelection:L.bool,isRangeSelectionActive:L.bool,height:L.number,onAddSeries:L.func,onCloseTrack:L.func,onCloseTrackMenuOpened:L.func,onConfigTrackMenuOpened:L.func,onRangeSelection:L.func,onRangeSelectionEnd:L.func,onRangeSelectionReset:L.func,onRangeSelectionStart:L.func,rangeSelection:L.array,rangeSelectionEnd:L.bool,referenceAncestor:L.func,resizeHandles:L.object,scale:L.func,tracks:L.array,tracksControlAlignLeft:L.bool};function K$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Wse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function AH(e){return AH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},AH(e)}let vXe=function(e){E$t(I,e);var g=M$t(I);function I(){return K$t(this,I),g.apply(this,arguments)}return F$t(I,[{key:"render",value:function(){const n=X$(this.props.tracks,this.handleItemMouseEnter.bind(this),this.handleMouseLeave.bind(this)),C=this.props.customItems?N.Children.map(this.props.customItems,r=>N.cloneElement(r,{onMouseEnter:o=>{this.handleOtherMouseEnter(o)}})):null;return N.createElement("div",{ref:r=>{this.div=r},className:Xg(Qt["context-menu"],{[Qt["context-menu-dark"]]:this.props.theme===gI}),"data-menu-type":"ViewContextMenu",style:{left:this.state.left,top:this.state.top}},C,C&&N.createElement("hr",{className:Qt["context-menu-hr"]}),n,n&&N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:()=>this.props.onAddTrack({type:"horizontal-rule",y:this.props.coords[1],position:"whole"}),onMouseEnter:r=>this.handleOtherMouseEnter(r)},"Add Horizontal Rule"),N.createElement(ig,{onClick:()=>this.props.onAddTrack({type:"vertical-rule",x:this.props.coords[0],position:"whole"}),onMouseEnter:r=>this.handleOtherMouseEnter(r)},"Add Vertical Rule"),N.createElement(ig,{onClick:()=>this.props.onAddTrack({type:"cross-rule",x:this.props.coords[0],y:this.props.coords[1],position:"whole"}),onMouseEnter:r=>this.handleOtherMouseEnter(r)},"Add Cross Rule"),N.createElement("hr",{className:Qt["context-menu-hr"]}),this.hasMatrixTrack(this.props.tracks)&&N.createElement(ig,{onClick:this.handleAddHorizontalSection.bind(this),onMouseEnter:r=>this.handleOtherMouseEnter(r)},"Add Horizontal Cross Section"),this.hasMatrixTrack(this.props.tracks)&&N.createElement(ig,{onClick:this.handleAddVerticalSection.bind(this),onMouseEnter:r=>this.handleOtherMouseEnter(r)},"Add Vertical Cross Section"),this.getSubmenu())}},{key:"hasMatrixTrack",value:function(n){return j1(this.props.tracks).filter(r=>r.type==="heatmap").length>0}},{key:"handleAddHorizontalSection",value:function(){const C=j1(this.props.tracks).filter(r=>r.type==="heatmap")[0];this.props.onAddTrack({type:"horizontal-rule",y:this.props.coords[1],position:"whole"}),this.props.onAddTrack({data:{type:"horizontal-section",server:C.server,tilesetUid:C.tilesetUid,slicePos:this.props.coords[1]},options:{valueScaling:"log"},type:"horizontal-bar",height:30,position:"top"})}},{key:"handleAddVerticalSection",value:function(){const C=j1(this.props.tracks).filter(r=>r.type==="heatmap")[0];this.props.onAddTrack({type:"vertical-rule",x:this.props.coords[0],position:"whole"}),this.props.onAddTrack({data:{type:"vertical-section",server:C.server,tilesetUid:C.tilesetUid,slicePos:this.props.coords[0]},options:{valueScaling:"log"},type:"vertical-bar",height:30,position:"left"})}}]),I}(oy(fu).with(ZXe));vXe.propTypes={coords:L.array,customItems:L.array};function O$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Xse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sH(e){return sH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},sH(e)}let H$=function(e){Q$t(I,e);var g=j$t(I);function I(i){var n;O$t(this,I),n=g.call(this,i),n.closing=!1;const{tracks:C}=n.props;return n.canvasElement=null,n.tracksByUidInit={},[...n.props.tracks.top||[],...n.props.tracks.right||[],...n.props.tracks.bottom||[],...n.props.tracks.left||[],...n.props.tracks.gallery||[],...n.props.tracks.center||[]].forEach(r=>{r.type==="combined"?r.contents.forEach(o=>{n.tracksByUidInit[o.uid]=!1}):n.tracksByUidInit[r.uid]=!1}),n.xScale=null,n.yScale=null,n.addUidsToTracks(C),n.trackToReplace=null,n.trackRenderer=null,n.configTrackMenu=null,n.state={sizeMeasured:!1,height:10,width:10,tracks:C,init:!1,addTrackPosition:null,customDialog:null,mouseOverOverlayUid:null,forceUpdate:0,rangeSelection:[null,null],rangeSelectionEnd:!1,chromInfo:null,defaultChromSizes:null,contextMenuCustomItems:null,contextMenuPosition:null,addDivisorDialog:null},n.reset=!0,window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(r=>{Qg[r]=window.higlassTracksByType[r].config}),n.topHeight=0,n.bottomHeight=0,n.leftWidth=0,n.rightWidth=0,n.centerHeight=0,n.centerWidth=0,n.dragTimeout=null,n.previousPropsStr="",n.contextMenuHandlerBound=n.contextMenuHandler.bind(Cn(n)),n.handleNoTrackAddedBound=n.handleNoTrackAdded.bind(Cn(n)),n.handleTracksAddedBound=n.handleTracksAdded.bind(Cn(n)),n.closeMenusBound=n.closeMenus.bind(Cn(n)),n.handleAddDivisorBound=n.handleAddDivisor.bind(Cn(n)),n.handleAddSeriesBound=n.handleAddSeries.bind(Cn(n)),n.handleChangeTrackDataBound=n.handleChangeTrackData.bind(Cn(n)),n.handleChangeTrackTypeBound=n.handleChangeTrackType.bind(Cn(n)),n.handleCloseTrackBound=n.handleCloseTrack.bind(Cn(n)),n.handleConfigureTrackBound=n.handleConfigureTrack.bind(Cn(n)),n.handleExportTrackDataBound=n.handleExportTrackData.bind(Cn(n)),n.handleLockValueScaleBound=n.handleLockValueScale.bind(Cn(n)),n.handleReplaceTrackBound=n.handleReplaceTrack.bind(Cn(n)),n.handleTrackOptionsChangedBound=n.handleTrackOptionsChanged.bind(Cn(n)),n.handleUnlockValueScaleBound=n.handleUnlockValueScale.bind(Cn(n)),n.onAddTrack=n.handleAddTrack.bind(Cn(n)),n}return _$t(I,[{key:"waitForDOMAttachment",value:function(n){if(!this.mounted)return;const C=jI.findDOMNode(this);document.body.contains(C)?n():requestAnimationFrame(()=>this.waitForDOMAttachment(n))}},{key:"componentDidMount",value:function(){this.mounted=!0,this.element=jI.findDOMNode(this),this.canvasElement=jI.findDOMNode(this.props.canvasElement),this.waitForDOMAttachment(()=>{uX.ElementQueries.listen(),this.resizeSensor=new uX.ResizeSensor(this.element.parentNode,this.measureSize.bind(this)),this.measureSize()}),this.addEventListeners(),this.pubSubs=[],this.pubSubs.push(this.props.pubSub.subscribe("contextmenu",this.contextMenuHandlerBound))}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){this.addUidsToTracks(n.tracks),this.setState({tracks:n.tracks})}},{key:"shouldComponentUpdate",value:function(n,C){const r=this.previousPropsStr,o=this.updatablePropsToString(n),a=JSON.stringify(this.state),s=JSON.stringify(C),A=r!==o||a!==s||this.props.chooseTrackHandler!==n.chooseTrackHandler||this.props.customDialog!==n.customDialog;A&&(this.previousPropsStr=o);const l=this.numTracks;return this.numTracks=0,Is(this.props.tracks,()=>this.numTracks++),this.reset=this.reset||l===0&&this.numTracks>0,this.numTracks||(this.tracksByUidInit={}),A}},{key:"UNSAFE_componentWillUpdate",value:function(){}},{key:"componentDidUpdate",value:function(n,C){if(C.rangeSelection!==this.state.rangeSelection){let r=[null,null];this.state.defaultChromSizes&&this.state.rangeSelection.every(o=>o&&o.length)&&(r=this.state.rangeSelection.map(o=>vX(...o,this.state.defaultChromSizes))),this.props.onRangeSelection({dataRange:this.state.rangeSelection,genomicRange:r})}if(this.state.customDialog||this.props.customDialog){const r=this.state.customDialog||this.props.customDialog;if(r.length>0){const o=[],a=[];r.forEach(s=>{o.push(s.bodyComponent),a.push(s.bodyProps)}),this.props.modal.open(N.createElement(W$,{children:o,bodyProps:a,onCancel:this.props.closeCustomDialog,title:r[0].title}))}}if(n.tracks.center,this.props.tracks.center,(this.state.addTrackPosition||this.props.addTrackPosition)&&this.props.modal.open(N.createElement(gH,{host:this.state.addTrackHost,onCancel:this.handleNoTrackAddedBound,onTracksChosen:this.handleTracksAddedBound,position:this.state.addTrackPosition||this.props.addTrackPosition,trackSourceServers:this.props.trackSourceServers})),this.state.addDivisorDialog){const r=this.state.addDivisorDialog;this.props.modal.open(N.createElement(gH,{datatype:Qg[r.type].datatype[0],host:this.state.addTrackHost,onCancel:()=>{this.setState({addDivisorDialog:null})},onTracksChosen:o=>{this.handleDivisorChosen(r,o)},trackSourceServers:this.props.trackSourceServers}))}}},{key:"componentWillUnmount",value:function(){this.closing=!0,this.removeEventListeners(),this.pubSubs.forEach(n=>this.props.pubSub.unsubscribe(n))}},{key:"addUidsToTracks",value:function(n){Object.keys(n).forEach(C=>{n[C].forEach(r=>{r.uid=r.uid||lg.nice()})})}},{key:"contextMenuHandler",value:function(n){if(!this.divTiledPlot)return;const C=this.divTiledPlot.getBoundingClientRect();if(!jQ(n.clientX,n.clientY,C.left,C.left+C.width,C.top,C.top+C.height))return;const o=[n.clientX,n.clientY],a=zg(n,this.divTiledPlot),s=this.trackRenderer.zoomedXScale.invert(a[0]),A=this.trackRenderer.zoomedYScale.invert(a[1]);let l=null;n.hgCustomItems&&(l=n.hgCustomItems.map(c=>N.createElement(ig,{key:c.key,onClick:c.onClick},c.text))),this.setState({contextMenuCustomItems:l,contextMenuPosition:{left:o[0],top:o[1],canvasLeft:a[0]+this.trackRenderer.xPositionOffset,canvasTop:a[1]+this.trackRenderer.yPositionOffset},contextMenuDataX:s,contextMenuDataY:A})}},{key:"measureSize",value:function(){this.element.clientWidth>0&&this.element.clientHeight>0&&this.setState({sizeMeasured:!0,width:this.element.clientWidth,height:this.element.clientHeight})}},{key:"handleTrackOptionsChanged",value:function(n,C){return this.props.onTrackOptionsChanged(n,C)}},{key:"handleScalesChanged",value:function(n,C){this.xScale=n,this.yScale=C,this.props.onScalesChanged(n,C)}},{key:"handleTilesetInfoReceived",value:function(n,C){const r=gr(this.props.tracks,n);if(!r){console.warn("Strange, track not found:",n);return}this.tracksByUidInit[r.uid]=!0,this.checkAllTilesetInfoReceived(),r.options||(r.options={}),r.name=C.name,r.maxWidth=C.max_width,r.transforms=C.transforms,r.aggregationModes=C.aggregation_modes,r.header=C.header,r.binsPerDimension=C.bins_per_dimension,C.resolutions?(r.maxZoom=C.resolutions.length-1,r.resolutions=C.resolutions):r.maxZoom=C.max_zoom,r.coordSystem=C.coordSystem,r.datatype=C.datatype}},{key:"checkAllTilesetInfoReceived",value:function(){if(this.state.init&&!this.reset||!this.trackRenderer||!this.props.zoomToDataExtentOnInit())return;const n=Object.keys(this.trackRenderer.trackDefObjects).map(r=>{const o=this.trackRenderer.trackDefObjects[r].trackObject;return o.childTracks?o.childTracks:o}).reduce((r,o)=>r.concat(o),[]).filter(({tilesetInfo:r})=>typeof r<"u"&&r!==!0),C=Object.values(this.tracksByUidInit).filter(r=>r).length;n.length===C&&(this.setState({init:!0}),this.reset=!1,this.handleZoomToData())}},{key:"handleOverlayMouseEnter",value:function(n){this.setState({mouseOverOverlayUid:n})}},{key:"handleOverlayMouseLeave",value:function(n){n===this.state.mouseOverOverlayUid&&this.setState({mouseOverOverlayUid:null})}},{key:"handleTrackPositionChosen",value:function(n){this.setState({mouseOverOverlayUid:null}),this.props.chooseTrackHandler(n.track.uid)}},{key:"handleNoTrackAdded",value:function(){this.trackToReplace=null,this.props.onNoTrackAdded(),this.setState({addTrackPosition:null,addTrackHost:null})}},{key:"handleAddDivisor",value:function(n){this.setState({addDivisorDialog:n})}},{key:"handleDivisorChosen",value:function(n,C){this.setState({addDivisorDialog:null});const r=n.data?{server:n.data.server,tilesetUid:n.data.tilesetUid}:{server:n.server,tilesetUid:n.tilesetUid},o={server:C[0].server,tilesetUid:C[0].uuid};this.handleChangeTrackData(n.uid,{type:"divided",children:[r,o]})}},{key:"handleDivideSeries",value:function(n){}},{key:"handleAddSeries",value:function(n){const C=OG(this.props.tracks,n),r=gr(this.props.tracks,n);this.setState({addTrackPosition:C,addTrackHost:r})}},{key:"handleReplaceTrack",value:function(n,C){this.trackToReplace=n,this.handleAddTrack(C)}},{key:"handleAddTrack",value:function(n){this.setState({addTrackPosition:n,addTrackHost:null})}},{key:"handleResizeTrack",value:function(n,C,r){const{tracks:o}=this.state;for(const a in o){const A=o[a].filter(l=>l.uid===n);A.length>0&&(A[0].width=C,A[0].height=r)}this.setState({tracks:o,forceUpdate:Math.random()}),this.props.onResizeTrack()}},{key:"closeMenus",value:function(){this.setState({closeTrackMenuId:null,configTrackMenuId:null,contextMenuPosition:null,contextMenuCustomItems:null})}},{key:"handleLockValueScale",value:function(n){this.closeMenus(),this.props.onLockValueScale(n)}},{key:"handleUnlockValueScale",value:function(n){this.closeMenus(),this.props.onUnlockValueScale(n)}},{key:"handleCloseTrack",value:function(n){this.closeMenus(),this.props.onCloseTrack(n)}},{key:"handleChangeTrackType",value:function(n,C){this.closeMenus(),this.props.onChangeTrackType(n,C)}},{key:"handleChangeTrackData",value:function(n,C){this.closeMenus(),this.props.onChangeTrackData(n,C)}},{key:"handleTracksAdded",value:function(n,C,r){return this.trackToReplace&&(this.handleCloseTrack(this.trackToReplace),this.trackToReplace=null),this.props.onTracksAdded(n,C,r),this.setState({addTrackPosition:null,addTrackHost:null}),n}},{key:"handleCloseTrackMenuOpened",value:function(n,C){this.setState({closeTrackMenuId:n,closeTrackMenuLocation:C})}},{key:"handleCloseContextMenu",value:function(){this.setState({contextMenuCustomItems:null,contextMenuPosition:null,contextMenuDataX:null,contextMenuDataY:null})}},{key:"handleCloseTrackMenuClosed",value:function(){this.setState({closeTrackMenuId:null})}},{key:"handleConfigTrackMenuOpened",value:function(n,C){this.closeMenus(),this.setState({configTrackMenuId:n,configTrackMenuLocation:C})}},{key:"handleConfigureTrack",value:function(n,C){this.setState({configTrackMenuId:null,trackOptions:{track:n,configComponent:C}}),this.closeMenus()}},{key:"handleSortEnd",value:function(n){this.setState(C=>{const r=C.tracks,o={};for(let a=0;a{C[r]&&C[r].forEach(o=>{o.contents&&o.contents.forEach(a=>{a.position=r}),o.position=r,n.push({track:o,location:r})})}),n}},{key:"calculateTrackPosition",value:function(n,C){let r=this.props.paddingTop,o=this.props.paddingBottom,a=this.props.paddingLeft,s=this.props.paddingRight,A=this.centerWidth,l=n.height,c=0,u=0;switch(C){case"top":a+=this.leftWidth;for(let d=0;dr.includes&&r.includes.length).map(r=>{const o=r.type?`overlay-${r.type}-track`:"overlay-track",a={...r,uid:r.uid||lg.nice(),includes:r.includes,type:o,options:Object.assign(r.options,{orientationsAndPositions:r.includes.map(s=>{const A=gr(this.props.tracks,s);if(!A)return console.warn(`OverlayTrack included uid (${s}) not found in the track list`),null;const l=OG(this.props.tracks,A.uid);let c;if((l==="top"||l==="bottom")&&(c="1d-horizontal"),(l==="left"||l==="right")&&(c="1d-vertical"),l==="center"&&(c="2d"),!c)return console.warn("Only top, bottom, left, right, or center tracks can be overlaid at the moment"),null;const u=n.filter(h=>h.track.uid===s);if(!u.length)return null;const d={left:u[0].left-this.props.paddingLeft,top:u[0].top-this.props.paddingTop,width:u[0].width,height:u[0].height};return{orientation:c,position:d}}).filter(s=>s)})};return{top:this.props.paddingTop,left:this.props.paddingLeft,width:this.leftWidth+this.centerWidth+this.rightWidth,height:this.topHeight+this.centerHeight+this.bottomHeight+this.props.marginTop+this.props.marginBottom,track:a}}):[]}},{key:"positionedTracks",value:function(){return this.createTracksAndLocations().map(({track:C,location:r})=>this.calculateTrackPosition(C,r))}},{key:"createTrackPositionTexts",value:function(){const n=this.positionedTracks();return this.createTracksAndLocations(),n.map(r=>{const{track:o}=r;return N.createElement("div",{key:o.uid,style:{left:r.left,top:r.top,width:r.width,height:r.height,position:"absolute"}},o.uid.slice(0,2))})}},{key:"handleExportTrackData",value:function(n,C){const r=gr(this.props.tracks,C);let o=null;n!==C?o=this.trackRenderer.trackDefObjects[n].trackObject.createdTracks[r.uid]:{trackObject:o}=this.trackRenderer.trackDefObjects[n],o.exportData(),this.closeMenus()}},{key:"listTracksAtPosition",value:function(n,C,r=!1){const o=[];if(!this.trackRenderer)return[];for(const a in this.trackRenderer.trackDefObjects){const s=this.trackRenderer.trackDefObjects[a].trackObject;if(s.respondsToPosition(n,C))if(r){if(this.props.tracks.center)if(this.props.tracks.center.contents)for(let A=0;Ao[d]&&(o[d]=u.tilesetInfo.max_pos[d]);const s=this.trackRenderer.currentProps.paddingLeft+this.trackRenderer.currentProps.leftWidth;let A=[s,s+this.trackRenderer.currentProps.centerWidth].map(this.trackRenderer.zoomTransform.rescaleX(this.trackRenderer.xScale).invert);const l=this.trackRenderer.currentProps.paddingTop+this.trackRenderer.currentProps.topHeight;let c=[l,l+this.trackRenderer.currentProps.centerHeight].map(this.trackRenderer.zoomTransform.rescaleY(this.trackRenderer.yScale).invert);this.trackRenderer.zoomTransform.k=1,this.trackRenderer.zoomTransform.x=0,this.trackRenderer.zoomTransform.y=0,this.trackRenderer.applyZoomTransform(),r[0]Number.MIN_SAFE_INTEGER&&(A=[r[0],o[0]]),r[1]Number.MIN_SAFE_INTEGER&&(c=[r[1],o[1]]),this.props.onDataDomainChanged(A,c)}},{key:"resetViewport",value:function(){this.trackRenderer.zoomTransform.k=1,this.trackRenderer.zoomTransform.x=0,this.trackRenderer.zoomTransform.y=0,this.trackRenderer.applyZoomTransform(),this.props.onDataDomainChanged(this.props.initialXDomain,this.props.initialYDomain)}},{key:"updatablePropsToString",value:function(n){return JSON.stringify({tracks:n.tracks,overlays:n.overlays,viewOptions:n.viewOptions,uid:n.uid,addTrackPosition:n.addTrackPosition,editable:n.editable,marginTop:n.marginTop,marginBottom:n.marginBottom,marginLeft:n.marginLeft,marginRight:n.marginRight,paddingTop:n.paddingTop,paddingBottom:n.paddingBottom,paddingLeft:n.paddingLeft,paddingRight:n.paddingRight,mouseTool:n.mouseTool,initialXDomain:n.initialXDomain,initialYDomain:n.initialYDomain,trackSourceServers:n.trackSourceServers,zoomable:n.zoomable,draggingHappening:n.draggingHappening})}},{key:"getXYScales",value:function(){this.trackRenderer&&(this.xScale=this.trackRenderer.currentXScale,this.yScale=this.trackRenderer.currentYScale)}},{key:"rangeViewToDataLoci",value:function(n,C){return C?[parseInt(C.invert(n[0]),10),parseInt(C.invert(n[1]),10)]:[null,null]}},{key:"rangeSelectionResetHandler",value:function(){this.state.rangeSelectionMaster&&this.setState({is1dRangeSelection:null,rangeSelection:[null,null],rangeSelectionMaster:null,rangeSelectionEnd:!1})}},{key:"rangeSelection1dEndHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales();const C=n==="x"?this.xScale:this.yScale;return r=>{this.setState(o=>{const a=o.is1dRangeSelection?[null,null]:o.rangeSelection.slice(),s=!this.state.is1dRangeSelection&&n==="y"?1:0;let A=this.rangeViewToDataLoci(r,C);const l=A[1]-A[0];if(this.props.rangeSelection1dSize[0]>l){const c=A[0]+l/2;A=[c-this.props.rangeSelection1dSize[0]/2,c+this.props.rangeSelection1dSize[0]/2]}else if(this.props.rangeSelection1dSize[1]Math.round(c))),{rangeSelection:a,rangeSelectionEnd:!0}})}}},{key:"rangeSelection1dHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales();const C=n==="x"?this.xScale:this.yScale;return r=>{this.setState(o=>{const a=o.is1dRangeSelection?[null,null]:o.rangeSelection.slice(),s=!o.is1dRangeSelection&&n==="y"?1:0;return a[s]=this.rangeViewToDataLoci(r,C),{rangeSelection:a,rangeSelectionEnd:!1}})}}},{key:"rangeSelection1dStartHandler",value:function(){this.state.rangeSelectionMaster||this.setState({is1dRangeSelection:!0,rangeSelectionMaster:!0,rangeSelectionEnd:!1})}},{key:"rangeSelection2dHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales(),this.setState({rangeSelection:[this.rangeViewToDataLoci(n[0],this.xScale),this.rangeViewToDataLoci(n[1],this.yScale)],rangeSelectionEnd:!1})}},{key:"rangeSelection2dStartHandler",value:function(){this.state.rangeSelectionMaster||this.setState({is1dRangeSelection:!1,rangeSelectionMaster:!0,rangeSelectionEnd:!1})}},{key:"rangeSelection2dEndHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales();const C=this.rangeViewToDataLoci(n[0],this.xScale),r=this.rangeViewToDataLoci(n[1],this.yScale);let o=[C,r];const a=C[1]-C[0],s=r[1]-r[0],A=[a,s];o.forEach((l,c)=>{if(this.props.rangeSelection1dSize[0]>A[c]){const u=l[0]+Math.round(A[c]/2);l[0]=u-this.props.rangeSelection1dSize[0]/2,l[1]=u+this.props.rangeSelection1dSize[0]/2}else if(this.props.rangeSelection1dSize[1]l.map(c=>Math.round(c)))),this.setState({rangeSelection:o,rangeSelectionEnd:!0})}},{key:"getContextMenu",value:function(){if(this.state.contextMenuPosition){const n=this.listTracksAtPosition(this.state.contextMenuPosition.canvasLeft,this.state.contextMenuPosition.canvasTop);return N.createElement(Dc,{onMenuClosed:this.closeMenusBound},N.createElement(vXe,{closeMenu:this.closeMenusBound,coords:[this.state.contextMenuDataX,this.state.contextMenuDataY],customItems:this.state.contextMenuCustomItems,onAddDivisor:this.handleAddDivisorBound,onAddSeries:this.handleAddSeriesBound,onAddTrack:C=>{this.props.onTracksAdded([C],C.position,null),this.handleCloseContextMenu()},onChangeTrackData:this.handleChangeTrackDataBound,onChangeTrackType:this.handleChangeTrackTypeBound,onCloseTrack:this.handleCloseTrackBound,onConfigureTrack:this.handleConfigureTrackBound,onExportData:this.handleExportTrackDataBound,onLockValueScale:this.handleLockValueScaleBound,onReplaceTrack:this.handleReplaceTrackBound,onTrackOptionsChanged:this.handleTrackOptionsChangedBound,onUnlockValueScale:this.handleUnlockValueScaleBound,orientation:"right",position:this.state.contextMenuPosition,theme:this.props.theme,tracks:n,trackSourceServers:this.props.trackSourceServers}))}return null}},{key:"getIdealizedTrackPositionsOverlay",value:function(){const n=this.props.draggingHappening,C=n.datatype;if(!(C in FB)&&!n.defaultTracks){console.warn("unknown data type:",n.higlassTrack);return}const r={"1d-horizontal":["top","bottom","left","right"],"2d":["center"],"1d-vertical":["left","right"]},o=FB[C]||{};if(n.defaultTracks)for(const S of n.defaultTracks)if(!Qg[S])console.warn("unknown track type",S);else for(const X of r[Qg[S].orientation])o[X]=S;const a=new Set(["top","left","right","center","bottom"].filter(S=>S in this.state.tracks&&this.state.tracks[S].length)),s="top"in o,A="left"in o,l="right"in o,c="bottom"in o,u="center"in o,d="center"in o||a.has("left")||a.has("right")||a.has("center"),h="top"in o,m="bottom"in o&&d,f="left"in o&&d,b="right"in o&&d,p=Object.keys(o).length&&("center"in o||d),y=N.createElement("div",{style:{flexGrow:1}}),Z=N.cloneElement(y),B=N.createElement("div",{style:{display:"flex",flexGrow:1}},h&&(p||f)?y:null,N.createElement(VV,{defaultTrackType:o.top,draggingHappening:this.props.draggingHappening,enabled:s,onTrackDropped:S=>this.handleTracksAdded([S],"top"),style:{border:"1px solid black",flexGrow:1}}),h&&(p||f)?Z:null),G=N.createElement("div",{style:{display:"flex",flexGrow:1}},h&&(p||f)?y:null,N.createElement(VV,{defaultTrackType:o.bottom,draggingHappening:this.props.draggingHappening,enabled:c,onTrackDropped:S=>this.handleTracksAdded([S],"bottom"),style:{border:"1px solid black",flexGrow:1}}),h&&(p||f)?Z:null),v=N.createElement(VV,{defaultTrackType:o.left,draggingHappening:this.props.draggingHappening,enabled:A,onTrackDropped:S=>this.handleTracksAdded([S],"left"),style:{border:"1px solid black",flexGrow:1}}),w=N.createElement(VV,{defaultTrackType:o.center,draggingHappening:this.props.draggingHappening,enabled:u,onTrackDropped:S=>this.handleTracksAdded([S],"center"),position:"center",style:{border:"1px solid black",flexGrow:1}}),R=N.cloneElement(v,{defaultTrackType:o.right,enabled:l,onTrackDropped:S=>this.handleTracksAdded([S],"right")});return N.createElement("div",{style:{position:"absolute",left:"0px",top:"0px",width:this.state.width,height:this.state.height}},N.createElement("div",{style:{position:"absolute",width:this.state.width,height:this.state.height,background:"white",opacity:.4}}),N.createElement("div",{style:{width:this.state.width,height:this.state.height,position:"absolute",display:"flex",flexDirection:"column"}},h?B:null,d&&N.createElement("div",{style:{display:"flex",height:h||m?"40%":"100%",width:"100%"}},f?v:null,p?w:null,b?R:null),m?G:null))}},{key:"render",value:function(){this.galleryDim=this.props.tracks.gallery?this.props.tracks.gallery.map(p=>p.height).reduce($l,0):0,this.topHeightNoGallery=this.props.tracks.top.map(p=>p.height).reduce($l,0),this.topHeight=this.topHeightNoGallery+this.galleryDim,this.bottomHeightNoGallery=this.props.tracks.bottom.map(p=>p.height).reduce($l,0),this.bottomHeight=this.bottomHeightNoGallery+this.galleryDim,this.leftWidthNoGallery=this.props.tracks.left.map(p=>p.width).reduce($l,0),this.leftWidth=this.leftWidthNoGallery+this.galleryDim,this.rightWidthNoGallery=this.props.tracks.right.map(p=>p.width).reduce($l,0),this.rightWidth=this.rightWidthNoGallery+this.galleryDim;const n=this.props.paddingTop+this.props.paddingBottom,C=this.props.paddingLeft+this.props.paddingRight;this.centerHeight=Math.max(0,this.state.height-this.topHeight-this.bottomHeight-n),this.centerWidth=Math.max(0,this.state.width-this.leftWidth-this.rightWidth-C);const r="none",o=N.createElement("div",{className:"top-track-container",style:{left:this.leftWidth+this.props.paddingLeft,top:this.props.paddingTop,width:this.centerWidth,height:this.topHeightNoGallery,outline:r,position:"absolute"}},N.createElement(M2,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===zr,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("x").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("x").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["bottom"]),scale:this.xScale,tracks:this.props.tracks.top,width:this.centerWidth})),a=N.createElement("div",{className:"left-track-container",style:{left:this.props.paddingLeft,top:this.topHeight+this.props.paddingTop,width:this.leftWidthNoGallery,height:this.centerHeight,outline:r,position:"absolute"}},N.createElement(WO,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),height:this.centerHeight,is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===zr,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("y").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("y").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["right"]),scale:this.yScale,tracks:this.props.tracks.left})),s=N.createElement("div",{className:"right-track-container",style:{right:this.props.paddingRight,top:this.topHeight+this.props.paddingTop,width:this.rightWidthNoGallery,height:this.centerHeight,outline:r,position:"absolute"}},N.createElement(WO,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),height:this.centerHeight,is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===zr,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("y").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("y").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["left"]),scale:this.yScale,tracks:this.props.tracks.right,tracksControlAlignLeft:!0})),A=N.createElement("div",{className:"bottom-track-container",style:{left:this.leftWidth+this.props.paddingLeft,bottom:this.props.paddingBottom,width:this.centerWidth,height:this.bottomHeightNoGallery,outline:r,position:"absolute"}},N.createElement(M2,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===zr,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("x").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("x").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["top"]),scale:this.xScale,tracks:this.props.tracks.bottom,width:this.centerWidth})),l=N.createElement("div",{key:"galleryTracksDiv",className:"gallery-track-container",style:{left:this.leftWidthNoGallery+this.props.paddingLeft,top:this.topHeightNoGallery+this.props.paddingTop,width:this.centerWidth+2*this.galleryDim,height:this.centerHeight+2*this.galleryDim,outline:r,position:"absolute"}},N.createElement(iVe,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,height:this.centerHeight+2*this.galleryDim,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),tracks:this.props.tracks.gallery,width:this.centerWidth+2*this.galleryDim}));let c=N.createElement("div",{className:["center-track-container",CP["center-track-container"]].join(" "),style:{left:this.leftWidth+this.props.paddingLeft,top:this.topHeight+this.props.paddingTop,width:this.centerWidth,height:this.bottomHeight,outline:r}});this.props.tracks.center.length&&(c=N.createElement("div",{className:["center-track-container",CP["center-track-container"]].join(" "),style:{left:this.leftWidth+this.props.paddingLeft,top:this.topHeight+this.props.paddingTop,width:this.centerWidth,height:this.centerHeight,outline:r}},N.createElement(Cj,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,height:this.centerHeight,is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===zr,onAddSeries:this.handleAddSeries.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection2dStartHandler.bind(this),onRangeSelectionX:this.rangeSelection1dHandler("x").bind(this),onRangeSelectionXEnd:this.rangeSelection1dEndHandler("x").bind(this),onRangeSelectionXY:this.rangeSelection2dHandler.bind(this),onRangeSelectionXYEnd:this.rangeSelection2dEndHandler.bind(this),onRangeSelectionY:this.rangeSelection1dHandler("y").bind(this),onRangeSelectionYEnd:this.rangeSelection1dEndHandler("y").bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,scaleX:this.xScale,scaleY:this.yScale,tracks:this.props.tracks.center,uid:this.props.tracks.center[0].uid,width:this.centerWidth}))),this.createTrackPositionTexts();let u=this.positionedTracks();u=u.concat(this.overlayTracks(u));let d=null;this.state.sizeMeasured&&(d=N.createElement(x4t,{ref:p=>{this.trackRenderer=p,this.checkAllTilesetInfoReceived()},canvasElement:this.canvasElement,centerHeight:this.centerHeight,centerWidth:this.centerWidth,disableTrackMenu:this.props.disableTrackMenu,dragging:this.props.dragging,galleryDim:this.galleryDim,getLockGroupExtrema:this.props.getLockGroupExtrema,height:this.state.height,initialXDomain:this.props.initialXDomain,initialYDomain:this.props.initialYDomain,isRangeSelection:this.props.mouseTool===zr,isShowGlobalMousePosition:this.props.isShowGlobalMousePosition,isValueScaleLocked:this.props.isValueScaleLocked,leftWidth:this.leftWidth,leftWidthNoGallery:this.leftWidthNoGallery,metaTracks:this.props.metaTracks,onMouseMoveZoom:this.props.onMouseMoveZoom,onNewTilesLoaded:this.props.onNewTilesLoaded,onScalesChanged:this.handleScalesChanged.bind(this),onTilesetInfoReceived:this.handleTilesetInfoReceived.bind(this),onTrackOptionsChanged:this.handleTrackOptionsChanged.bind(this),onValueScaleChanged:this.props.onValueScaleChanged,paddingLeft:this.props.paddingLeft,paddingTop:this.props.paddingTop,pixiRenderer:this.props.pixiRenderer,pixiStage:this.props.pixiStage,pluginDataFetchers:this.props.pluginDataFetchers,pluginTracks:this.props.pluginTracks,positionedTracks:u,registerDraggingChangedListener:this.props.registerDraggingChangedListener,removeDraggingChangedListener:this.props.removeDraggingChangedListener,setCentersFunction:this.props.setCentersFunction,svgElement:this.props.svgElement,topHeight:this.topHeight,topHeightNoGallery:this.topHeightNoGallery,uid:this.props.uid,viewOptions:this.props.viewOptions,width:this.state.width,xDomainLimits:this.props.xDomainLimits,yDomainLimits:this.props.yDomainLimits,zoomable:this.props.zoomable,zoomLimits:this.props.zoomLimits},o,a,s,A,l,c));let h=null,m=null;this.state.configTrackMenuId&&(h=N.createElement(Dc,{onMenuClosed:this.closeMenusBound},N.createElement(f$t,{ref:p=>{this.configTrackMenu=p},closeMenu:this.closeMenusBound,onAddDivisor:this.handleAddDivisorBound,onAddSeries:this.handleAddSeriesBound,onAddTrack:this.handleAddTrackBound,onChangeTrackType:this.handleChangeTrackTypeBound,onCloseTrack:this.handleCloseTrackBound,onConfigureTrack:this.handleConfigureTrackBound,onExportData:this.handleExportTrackDataBound,onLockValueScale:this.handleLockValueScaleBound,onReplaceTrack:this.handleReplaceTrackBound,onTrackOptionsChanged:this.handleTrackOptionsChangedBound,onUnlockValueScale:this.handleUnlockValueScaleBound,position:this.state.configTrackMenuLocation,theme:this.props.theme,trackOrientation:OG(this.props.tracks,this.state.configTrackMenuId),tracks:[gr(this.props.tracks,this.state.configTrackMenuId)]}))),this.state.closeTrackMenuId&&(m=N.createElement(Dc,{onMenuClosed:this.handleCloseTrackMenuClosed.bind(this)},N.createElement(fu,{position:this.state.closeTrackMenuLocation,theme:this.props.theme},N.createElement(GXe,{onCloseTrack:this.handleCloseTrack.bind(this),tracks:[gr(this.props.tracks,this.state.closeTrackMenuId)]}))));let f=null;this.props.chooseTrackHandler&&(f=u.filter(p=>p.track.position!=="whole").map(p=>{let y="transparent",Z="none";return this.state.mouseOverOverlayUid===p.track.uid&&(y="yellow",Z="1px solid black"),N.createElement("div",{key:p.track.uid,className:"tiled-plot-track-overlay",onClick:()=>this.handleTrackPositionChosen(p),onDragEnter:B=>{this.handleOverlayMouseEnter(p.track.uid),B.preventDefault()},onDragLeave:()=>this.handleOverlayMouseLeave(p.track.uid),onDragOver:B=>B.preventDefault(),onDrop:()=>this.handleTrackPositionChosen(p),onMouseEnter:()=>this.handleOverlayMouseEnter(p.track.uid),onMouseLeave:()=>this.handleOverlayMouseLeave(p.track.uid),style:{position:"absolute",left:p.left,top:p.top,width:p.width,height:p.height,background:y,opacity:.4,border:Z,zIndex:1}})}));let b=null;if(this.xScale&&this.yScale&&this.props.editable&&this.state.trackOptions){const p=this.state.trackOptions.configComponent,y=this.state.trackOptions.track;b=N.createElement(p,{track:y,xScale:this.xScale,yScale:this.yScale,onCancel:()=>{this.setState({trackOptions:null})},onTrackOptionsChanged:Z=>Z,onSubmit:Z=>{this.handleTrackOptionsChanged(this.state.trackOptions.track.uid,Z),this.setState({trackOptions:null})}})}return N.createElement("div",{ref:p=>{this.divTiledPlot=p},className:["tiled-plot-div",Oo["tiled-plot"]].join(" "),style:{marginBottom:this.props.marginBottom,marginLeft:this.props.marginLeft,marginRight:this.props.marginRight,marginTop:this.props.marginTop}},d,f,h,m,b,this.getContextMenu(),this.props.draggingHappening&&this.getIdealizedTrackPositionsOverlay())}},{key:"addEventListeners",value:function(){this.eventListeners=[],this.eventListeners.forEach(n=>document.addEventListener(n.name,n.callback,!1))}},{key:"removeEventListeners",value:function(){this.eventListeners.forEach(n=>document.removeEventListener(n.name,n.callback))}}]),I}(N.Component);H$.defaultProps={isShowGlobalMousePosition:!1,pluginDataFetchers:{},pluginTracks:{},metaTracks:[],zoomable:!0};H$.propTypes={addTrackPosition:L.string,canvasElement:L.object,chooseTrackHandler:L.func,chromInfoPath:L.string,customDialog:L.array,closeCustomDialog:L.func,disableTrackMenu:L.bool,dragging:L.bool,draggingHappening:L.bool,editable:L.bool,getLockGroupExtrema:L.func,initialXDomain:L.array,initialYDomain:L.array,isShowGlobalMousePosition:L.bool,isValueScaleLocked:L.func,marginBottom:L.number.isRequired,marginLeft:L.number.isRequired,marginRight:L.number.isRequired,marginTop:L.number.isRequired,paddingBottom:L.number.isRequired,paddingLeft:L.number.isRequired,paddingRight:L.number.isRequired,paddingTop:L.number.isRequired,metaTracks:L.array,modal:L.object,mouseTool:L.string,onCloseTrack:L.func,onChangeTrackData:L.func,onChangeTrackType:L.func,onDataDomainChanged:L.func,onLockValueScale:L.func,onMouseMoveZoom:L.func,onNewTilesLoaded:L.func,onNoTrackAdded:L.func,onRangeSelection:L.func.isRequired,onScalesChanged:L.func,onTrackOptionsChanged:L.func,onTrackPositionChosen:L.func,onTracksAdded:L.func,onUnlockValueScale:L.func,onValueScaleChanged:L.func,onResizeTrack:L.func,overlays:L.array,openModal:L.func,pixiRenderer:L.object,pixiStage:L.object,pluginDataFetchers:L.object,pluginTracks:L.object,pubSub:L.object.isRequired,rangeSelection1dSize:L.array,rangeSelectionToInt:L.bool,registerDraggingChangedListener:L.func,removeDraggingChangedListener:L.func,setCentersFunction:L.func,svgElement:L.object,theme:L.symbol.isRequired,tracks:L.object,trackSourceServers:L.array,uid:L.string,viewOptions:L.object,xDomainLimits:L.array,yDomainLimits:L.array,zoomable:L.bool,zoomLimits:L.array,zoomToDataExtentOnInit:L.func};const e8t=ty(xk(cm(H$)));var t8t=Object.assign||function(e){for(var g=1;g"u"?"undefined":g8t(g))==="object"){for(var n in g)g.hasOwnProperty(n)&&jp(e,n,g[n]);return}if(typeof i<"u"){typeof i=="number"&&(i+="px"),e.style[g]=i;return}return Yh(e,g)}T$(["width","height"],function(e){var g=e.charAt(0).toUpperCase()+e.slice(1);rA["outer"+g]=function(i,n){return i&&Tse(i,e,n?l8t:YO)};var I=e==="width"?["Left","Right"]:["Top","Bottom"];rA[e]=function(i,n){if(n!==void 0){if(i){Yh(i);var C=wXe(i);return C&&(n+=mG(i,["padding","border"],I)),jp(i,e,n)}return}return i&&Tse(i,e,kO)}});function d8t(e,g){jp(e,"position")==="static"&&(e.style.position="relative");var I=SXe(e),i={},n=void 0,C=void 0;for(C in g)g.hasOwnProperty(C)&&(n=parseFloat(jp(e,C))||0,i[C]=n+g[C]-I[C]);jp(e,i)}var h8t=t8t({getWindow:function(g){var I=g.ownerDocument||g;return I.defaultView||I.parentWindow},offset:function(g,I){if(typeof I<"u")d8t(g,I);else return SXe(g)},isWindow:KW,each:T$,css:jp,clone:function(g){var I={};for(var i in g)g.hasOwnProperty(i)&&(I[i]=g[i]);var n=g.overflow;if(n)for(var i in g)g.hasOwnProperty(i)&&(I.overflow[i]=g.overflow[i]);return I},scrollLeft:function(g,I){if(KW(g)){if(I===void 0)return TO(g);window.scrollTo(I,NO(g))}else{if(I===void 0)return g.scrollLeft;g.scrollLeft=I}},scrollTop:function(g,I){if(KW(g)){if(I===void 0)return NO(g);window.scrollTo(TO(g),I)}else{if(I===void 0)return g.scrollTop;g.scrollTop=I}},viewportWidth:0,viewportHeight:0},rA),II=h8t;function m8t(e,g,I){I=I||{},g.nodeType===9&&(g=II.getWindow(g));var i=I.allowHorizontalScroll,n=I.onlyScrollIfNeeded,C=I.alignWithTop,r=I.alignWithLeft,o=I.offsetTop||0,a=I.offsetLeft||0,s=I.offsetBottom||0,A=I.offsetRight||0;i=i===void 0?!0:i;var l=II.isWindow(g),c=II.offset(e),u=II.outerHeight(e),d=II.outerWidth(e),h=void 0,m=void 0,f=void 0,b=void 0,p=void 0,y=void 0,Z=void 0,B=void 0,G=void 0,v=void 0;l?(Z=g,v=II.height(Z),G=II.width(Z),B={left:II.scrollLeft(Z),top:II.scrollTop(Z)},p={left:c.left-B.left-a,top:c.top-B.top-o},y={left:c.left+d-(B.left+G)+A,top:c.top+u-(B.top+v)+s},b=B):(h=II.offset(g),m=g.clientHeight,f=g.clientWidth,b={left:g.scrollLeft,top:g.scrollTop},p={left:c.left-(h.left+(parseFloat(II.css(g,"borderLeftWidth"))||0))-a,top:c.top-(h.top+(parseFloat(II.css(g,"borderTopWidth"))||0))-o},y={left:c.left+d-(h.left+f+(parseFloat(II.css(g,"borderRightWidth"))||0))+A,top:c.top+u-(h.top+m+(parseFloat(II.css(g,"borderBottomWidth"))||0))+s}),p.top<0||y.top>0?C===!0?II.scrollTop(g,b.top+p.top):C===!1?II.scrollTop(g,b.top+y.top):p.top<0?II.scrollTop(g,b.top+p.top):II.scrollTop(g,b.top+y.top):n||(C=C===void 0?!0:!!C,C?II.scrollTop(g,b.top+p.top):II.scrollTop(g,b.top+y.top)),i&&(p.left<0||y.left>0?r===!0?II.scrollLeft(g,b.left+p.left):r===!1?II.scrollLeft(g,b.left+y.left):p.left<0?II.scrollLeft(g,b.left+p.left):II.scrollLeft(g,b.left+y.left):n||(r=r===void 0?!0:!!r,r?II.scrollLeft(g,b.left+p.left):II.scrollLeft(g,b.left+y.left)))}var f8t=m8t,p8t=f8t;const b8t=PC(p8t);function lH(){return lH=Object.assign?Object.assign.bind():function(e){for(var g=1;g"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function cH(e){return cH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},cH(e)}const yZ=[];let N$=function(e){B8t(I,e);var g=S8t(I);function I(i){var n;return y8t(this,I),n=g.call(this,i),n.state={highlightedIndex:null,menuTop:0,menuLeft:0,menuWidth:0,isOpen:!1},n.keyDownHandlers={ArrowDown(C){C.preventDefault();const r=this.getFilteredItems().length;if(!r)return;const{highlightedIndex:o}=this.state,a=o===null||o===r-1?0:o+1;this._performAutoCompleteOnKeyUp=!0,this.setState({highlightedIndex:a,isOpen:!0})},ArrowUp(C){C.preventDefault();const r=this.getFilteredItems().length;if(!r)return;const{highlightedIndex:o}=this.state,a=o===0||o===null?r-1:o-1;this._performAutoCompleteOnKeyUp=!0,this.setState({highlightedIndex:a,isOpen:!0})},Enter(C){if(this.state.isOpen!==!1)if(this.state.highlightedIndex===null)this.setState({isOpen:!1},()=>{this.inputEl.select()});else{C.preventDefault();const r=this.getFilteredItems()[this.state.highlightedIndex],o=this.props.getItemValue(r);this.setState({isOpen:!1,highlightedIndex:null},()=>{this.inputEl.setSelectionRange(o.length,o.length),this.props.onSelect(o,r)})}},Escape(){this.setState({highlightedIndex:null,isOpen:!1})}},n}return Z8t(I,[{key:"getInitialState",value:function(){return{isOpen:!1,highlightedIndex:null}}},{key:"UNSAFE_componentWillMount",value:function(){this._ignoreBlur=!1,this._performAutoCompleteOnUpdate=!1,this._performAutoCompleteOnKeyUp=!1}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){this._performAutoCompleteOnUpdate=!0,(this.props.items!==n.items||this.state.highlightedIndex>=n.items.length)&&this.setState({highlightedIndex:null})}},{key:"componentDidUpdate",value:function(n,C){this.state.isOpen===!0&&C.isOpen===!1&&this.setMenuPositions(),this.state.isOpen&&this._performAutoCompleteOnUpdate&&(this._performAutoCompleteOnUpdate=!1,this.maybeAutoCompleteText()),this.maybeScrollItemIntoView(),C.isOpen!==this.state.isOpen&&this.props.onMenuVisibilityChange(this.state.isOpen,this.inputEl)}},{key:"maybeScrollItemIntoView",value:function(){if(this.state.isOpen===!0&&this.state.highlightedIndex!==null){const n=this.refs[`item-${this.state.highlightedIndex}`],C=this.refs.menu;n&&b8t(sa.findDOMNode(n),sa.findDOMNode(C),{onlyScrollIfNeeded:!0})}}},{key:"handleKeyDown",value:function(n){this.keyDownHandlers[n.key]?this.keyDownHandlers[n.key].call(this,n):this.setState({highlightedIndex:null,isOpen:!0})}},{key:"handleChange",value:function(n){this._performAutoCompleteOnKeyUp=!0,this.props.onChange(n,n.target.value)}},{key:"handleKeyUp",value:function(){this._performAutoCompleteOnKeyUp&&(this._performAutoCompleteOnKeyUp=!1,this.maybeAutoCompleteText())}},{key:"getFilteredItems",value:function(){let n=this.props.items;return this.props.shouldItemRender&&(n=n.filter(C=>this.props.shouldItemRender(C,this.props.value))),this.props.sortItems&&n.sort((C,r)=>this.props.sortItems(C,r,this.props.value)),n}},{key:"maybeAutoCompleteText",value:function(){if(!this.props.autoHighlight||this.props.value==="")return;const{highlightedIndex:n}=this.state,C=this.getFilteredItems();if(C.length===0)return;const r=n!==null?C[n]:C[0];this.props.getItemValue(r).toLowerCase().indexOf(this.props.value.toLowerCase())===0&&n===null&&this.setState({highlightedIndex:0})}},{key:"setMenuPositions",value:function(){const n=this.inputEl,C=n.getBoundingClientRect(),r=globalThis.window.getComputedStyle(n),o=parseInt(r.marginBottom,10)||0,a=parseInt(r.marginLeft,10)||0,s=parseInt(r.marginRight,10)||0;this.setState({menuTop:C.bottom+o,menuLeft:C.left+a,menuWidth:C.width+a+s})}},{key:"highlightItemFromMouse",value:function(n){this.setState({highlightedIndex:n})}},{key:"selectItemFromMouse",value:function(n){const C=this.props.getItemValue(n);this.setState({isOpen:!1,highlightedIndex:null},()=>{this.props.onSelect(C,n),this.inputEl.focus()})}},{key:"setIgnoreBlur",value:function(n){this._ignoreBlur=n}},{key:"renderMenu",value:function(){const n=this.getFilteredItems().map((o,a)=>{const s=this.props.renderItem(o,this.state.highlightedIndex===a,{cursor:"default"});return N.cloneElement(s,{onMouseDown:()=>this.setIgnoreBlur(!0),onMouseEnter:()=>this.highlightItemFromMouse(a),onClick:()=>this.selectItemFromMouse(o),ref:`item-${a}`})}),C={left:this.state.menuLeft,top:this.state.menuTop,minWidth:this.state.menuWidth};if(!n.length)return null;const r=this.props.renderMenu(n,this.props.value,C);return N.cloneElement(r,{ref:"menu"})}},{key:"handleInputBlur",value:function(){this.props.onFocus&&this.props.onFocus(),!this._ignoreBlur&&this.setState({isOpen:!1,highlightedIndex:null})}},{key:"handleInputFocus",value:function(){if(this.props.onFocus&&this.props.onFocus(!0),this._ignoreBlur){this.setIgnoreBlur(!1);return}this._ignoreClick=!0,this.setState({isOpen:!0})}},{key:"isInputFocused",value:function(){return this.inputEl.ownerDocument&&this.inputEl===this.inputEl.ownerDocument.activeElement}},{key:"handleInputClick",value:function(){this.isInputFocused()&&this.state.isOpen===!1?this.setState({isOpen:!0}):this.state.highlightedIndex!==null&&!this._ignoreClick&&this.selectItemFromMouse(this.getFilteredItems()[this.state.highlightedIndex]),this._ignoreClick=!1}},{key:"composeEventHandlers",value:function(n,C){return C?r=>{n(r),C(r)}:n}},{key:"render",value:function(){this.props.debug&&yZ.push({id:yZ.length,state:this.state});const{inputProps:n}=this.props;return N.createElement("div",lH({style:{...this.props.wrapperStyle}},this.props.wrapperProps),N.createElement("input",lH({},n,{ref:C=>{this.inputEl=C},"aria-autocomplete":"list",autoComplete:"off",onBlur:this.composeEventHandlers(this.handleInputBlur.bind(this),n.onBlur&&n.onBlur.bind(this)),onChange:this.handleChange.bind(this),onClick:this.composeEventHandlers(this.handleInputClick.bind(this),n.onClick&&n.onClick.bind(this)),onFocus:this.composeEventHandlers(this.handleInputFocus.bind(this),n.onFocus&&n.onFocus.bind(this)),onKeyDown:this.composeEventHandlers(this.handleKeyDown.bind(this),n.onKeyDown&&n.onKeyDown.bind(this)),onKeyUp:this.composeEventHandlers(this.handleKeyUp.bind(this),n.onKeyUp&&n.onKeyUp.bind(this)),role:"combobox",value:this.props.value})),("open"in this.props?this.props.open:this.state.isOpen)&&this.renderMenu(),this.props.debug&&N.createElement("pre",{style:{marginLeft:300}},JSON.stringify(yZ.slice(yZ.length-5,yZ.length),null,2)))}}]),I}(N.Component);N$.defaultProps={value:"",wrapperProps:{},wrapperStyle:{display:"inline-block"},inputProps:{},onChange(){},onSelect(){},renderMenu(e,g,I){return N.createElement("div",{style:{...I,...this.menuStyle}},e)},shouldItemRender(){return!0},menuStyle:{borderRadius:"3px",boxShadow:"0 2px 12px rgba(0, 0, 0, 0.1)",background:"rgba(255, 255, 255, 0.9)",padding:"2px 0",fontSize:"90%",position:"fixed",overflow:"auto",maxHeight:"50%"},autoHighlight:!0,onMenuVisibilityChange(){}};N$.propTypes={autoHighlight:L.bool,debug:L.bool,getItemValue:L.func.isRequired,inputProps:L.object,items:L.array,menuStyle:L.object,onChange:L.func,onFocus:L.func,onMenuVisibilityChange:L.func,onSelect:L.func,open:L.bool,renderItem:L.func.isRequired,renderMenu:L.func,shouldItemRender:L.func,sortItems:L.func,value:L.any,wrapperProps:L.object,wrapperStyle:L.object};const W8t="_btn_1l2sx_95",nf={"genome-position-search":"_genome-position-search_1l2sx_1","genome-position-search-focus":"_genome-position-search-focus_1l2sx_2","genome-position-search-bar":"_genome-position-search-bar_1l2sx_16","genome-position-search-dark":"_genome-position-search-dark_1l2sx_34","genome-position-search-bar-button":"_genome-position-search-bar-button_1l2sx_38","genome-position-search-bar-button-focus":"_genome-position-search-bar-button-focus_1l2sx_39","genome-position-search-bar-icon":"_genome-position-search-bar-icon_1l2sx_62","genome-position-search-bar-icon-focus":"_genome-position-search-bar-icon-focus_1l2sx_63","genome-position-search-bar-suggestions":"_genome-position-search-bar-suggestions_1l2sx_83",btn:W8t,"btn-sm":"_btn-sm_1l2sx_116","btn-default":"_btn-default_1l2sx_122"};function X8t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function kse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function uH(e){return uH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},uH(e)}let VXe=function(e){k8t(I,e);var g=Y8t(I);function I(i){var n;return X8t(this,I),n=g.call(this,i),n.mounted=!1,n.uid=lg.nice(),n.chromInfo=null,n.searchField=null,n.autocompleteMenu=null,n.xScale=null,n.yScale=null,n.prevParts=[],n.props.registerViewportChangedListener(n.scalesChanged.bind(RXe(n))),n.menuPosition={left:0,top:0},n.positionText="chr4:190,998,876-191,000,255",n.state={genes:[],isFocused:!1,autocompleteServer:n.props.autocompleteServer,autocompleteId:n.props.autocompleteId,availableAssemblies:[],selectedAssembly:null},n.styles={item:{padding:"2px 6px",cursor:"default"},highlightedItem:{color:"white",background:"hsl(200, 50%, 50%)",padding:"2px 6px",cursor:"default"},menu:{border:"solid 1px #ccc"}},n.availableAutocompletes={},n.props.autocompleteId&&(n.availableAutocompletes[n.props.chromInfoId]=new Set([{server:n.props.autocompleteServer,acId:n.props.autocompleteId}])),n.availableChromSizes={},n}return H8t(I,[{key:"componentDidMount",value:function(){this.mounted=!0,hg(this.autocompleteMenu.inputEl).on("keypress",this.autocompleteKeyPress.bind(this)),this.findAvailableAutocompleteSources(),this.findAvailableChromSizes(),this.props.chromInfoPath&&(this.searchPosition=!0,Js(this.props.chromInfoPath,n=>{if(!n){this.searchPosition=null;return}this.chromInfo=n,this.searchField=new n0(this.chromInfo),this.setPositionText()})),this.setPositionText()}},{key:"componentWillUnmount",value:function(){this.mounted=!1,this.props.removeViewportChangedListener()}},{key:"onAutocompleteChange",value:function(n,C){this.positionText=C,this.setState({value:C,loading:!0}),this.changedPart=null;const r=C.split(/ /);let o=0;const a=[];let s=!1;for(let A=0;A{if(l)this.setState({loading:!1,genes:[]});else if(this.changedPart>0&&!s){const u=`${this.state.autocompleteServer}/suggest/?d=${this.state.autocompleteId}&ac=${a[this.changedPart-1].toLowerCase()}-${a[this.changedPart].toLowerCase()}`;vt.json(u,(d,h)=>{d?this.setState({loading:!1,genes:c}):this.setState({loading:!1,genes:h.concat(c)})},this.props.pubSub)}else this.setState({loading:!1,genes:c})},this.props.pubSub)}}},{key:"setAvailableAssemblies",value:function(){const n=new Set(Wr(this.availableChromSizes)),C=new Set([...n]);this.gpsbForm&&this.setState({availableAssemblies:[...C]})}},{key:"setSelectedAssembly",value:function(n){if(!this.mounted||!this.availableChromSizes[n])return;const C=[...this.availableChromSizes[n]][0];this.setState({autocompleteServer:C.server});const{server:r}=C;if(this.availableAutocompletes[n]){const o=[...this.availableAutocompletes[n]][0].acId;this.props.onSelectedAssemblyChanged(n,o,r),this.gpsbForm&&this.setState({autocompleteId:o})}else this.props.onSelectedAssemblyChanged(n,null,r),this.gpsbForm&&this.setState({autocompleteId:null});this.fetchChromInfo(C.uuid,C.server)}},{key:"setPositionText",value:function(){if(!this.mounted||!this.searchField)return;const n=this.searchField.scalesToPositionText(this.xScale,this.yScale,this.props.twoD);this.prevParts=n.split(/[ -]/),this.gpsbForm&&(this.positionText=n,this.origPositionText=n,this.autocompleteMenu.inputEl.value=n)}},{key:"scalesChanged",value:function(n,C){this.xScale=n,this.yScale=C,this.setPositionText()}},{key:"findAvailableChromSizes",value:function(){this.props.trackSourceServers&&this.props.trackSourceServers.forEach(n=>{vt.json(`${n}/available-chrom-sizes/`,(C,r)=>{C?console.error(C):(r.results.forEach(o=>{o.coordSystem in this.availableChromSizes||(this.availableChromSizes[o.coordSystem]=new Set),this.availableChromSizes[o.coordSystem].add({server:n,uuid:o.uuid}),this.setAvailableAssemblies()}),this.searchField||this.fetchChromInfo(this.props.chromInfoId in this.availableChromSizes?[...this.availableChromSizes[this.props.chromInfoId]][0].uuid:this.props.chromInfoId,this.props.chromInfoId in this.availableChromSizes?[...this.availableChromSizes[this.props.chromInfoId]][0].server:this.props.chromInfoServer))},this.props.pubSub)})}},{key:"findAvailableAutocompleteSources",value:function(){this.props.trackSourceServers&&this.props.trackSourceServers.forEach(n=>{vt.json(`${n}/tilesets/?limit=100&dt=gene-annotation`,(C,r)=>{C?console.error(C):(r.results.forEach(o=>{o.coordSystem in this.availableAutocompletes||(this.availableAutocompletes[o.coordSystem]=new Set),this.availableAutocompletes[o.coordSystem].add({server:n,acId:o.uuid}),this.setAvailableAssemblies()}),this.state.autocompleteId||this.gpsbForm&&this.availableAutocompletes[this.props.chromInfoId]&&this.setState({autocompleteId:[...this.availableAutocompletes[this.props.chromInfoId]][0].acId}))},this.props.pubSub)})}},{key:"fetchChromInfo",value:function(n,C){Js(`${C}/chrom-sizes/?id=${n}`,r=>{r&&(vt.json(`${C}/tileset_info/?d=${n}`,(o,a)=>{o||this.gpsbForm&&this.setState({selectedAssembly:a[n].coordSystem})},this.props.pubSub),this.chromInfo=r,this.searchField=new n0(this.chromInfo),this.setPositionText())},this.props.pubSub)}},{key:"autocompleteKeyPress",value:function(n){n.keyCode===13&&this.buttonClick()}},{key:"genePositionToSearchBarText",value:function(n){}},{key:"replaceGenesWithLoadedPositions",value:function(n){const C=this.positionText,r=C.split(" ");let o=!1;for(let s=0;sl;){const d=A.slice(l,c).join("-");if(n[d.toLowerCase()]){const h=n[d.toLowerCase()],m=Math.floor((h.txEnd-h.txStart)/4);l===0&&c{if(o){const a={};for(let A=0;Aconsole.error(o))}},{key:"buttonClick",value:function(){this.setState({genes:[]}),this.replaceGenesWithPositions(n=>{const C=this.positionText;if(this.searchField!==null){const r=this.searchField.searchPosition(C),o=r[0];let a=r[1];if(!o){this.setPositionText();return}if(o&&(Number.isNaN(+o[0])||Number.isNaN(+o[1]))||a&&(Number.isNaN(+a[0])||Number.isNaN(+a[1])))return;a||(a=o);const s=this.xScale.copy().domain(o),A=this.yScale.copy().domain(a),[l,c,u]=Si(s,A);n&&this.props.onGeneSearch({geneSymbol:n,range:o,centerX:l,centerY:c}),this.props.setCenters(l,c,u,kGe)}})}},{key:"searchFieldSubmit",value:function(){this.buttonClick()}},{key:"pathJoin",value:function(n,C){const r=C||"/",o=new RegExp(`${r}{1,}`,"g");return n.join(r).replace(o,r)}},{key:"geneSelected",value:function(n,C){const r=this.positionText.split(" ");let o=this.changedPart;for(let a=0;as.length-1)o-=s.length;else{if(s[o]=C.geneName,A.length===2&&o>0&&s[o-1].toLowerCase()===A[0].toLowerCase()){const l=s.slice(0,o-1);l.push(A.join("-")),oN.createElement("option",{key:C,value:C},C));return N.createElement("div",{ref:C=>{this.gpsbForm=C},className:Xg({[nf["genome-position-search-focus"]]:this.state.isFocused,[nf["genome-position-search"]]:!this.state.isFocused,[nf["genome-position-search-dark"]]:this.props.theme===gI})},!this.props.hideAvailableAssemblies&&N.createElement("select",{ref:C=>{this.assemblyPickButton=C},className:nf["genome-position-search-bar-button"],id:this.uid,onChange:this.handleAssemblySelectEvt.bind(this),value:this.state.selectedAssembly||void 0},n),N.createElement(N$,{ref:C=>{this.autocompleteMenu=C},getItemValue:C=>C.geneName,inputProps:{className:nf["genome-position-search-bar"],title:"Current location: enter a symbol or location to change the position of the current view"},items:this.state.genes,menuStyle:{position:"absolute",left:this.menuPosition.left,top:this.menuPosition.top,border:"1px solid black"},onChange:this.onAutocompleteChange.bind(this),onFocus:this.focusHandler.bind(this),onMenuVisibilityChange:this.handleMenuVisibilityChange.bind(this),onSelect:(C,r)=>this.geneSelected(C,r),onSubmit:this.searchFieldSubmit.bind(this),renderItem:(C,r)=>N.createElement("div",{key:C.refseqid,id:C.refseqid,style:r?this.styles.highlightedItem:this.styles.item},C.geneName),renderMenu:this.handleRenderMenu.bind(this),value:this.state.selectedAssembly?this.positionText:"No valid assembly selected",wrapperStyle:{width:"100%"}}),N.createElement(MGe,{onClick:this.buttonClick.bind(this),theStyle:"multitrack-header-icon"}))}}]),I}(N.Component);VXe.propTypes={autocompleteId:L.string,autocompleteServer:L.string,chromInfoId:L.string,chromInfoServer:L.string,chromInfoPath:L.string,hideAvailableAssemblies:L.bool,isFocused:L.bool,pubSub:L.object,onFocus:L.func,onGeneSearch:L.func,onSelectedAssemblyChanged:L.func,registerViewportChangedListener:L.func,removeViewportChangedListener:L.func,setCenters:L.func,theme:L.symbol.isRequired,trackSourceServers:L.array,twoD:L.bool};const D8t=ty(cm(VXe)),x8t={"export-link-dialog-wrapper":"_export-link-dialog-wrapper_p9gxw_1"};function E8t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Yse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function dH(e){return dH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},dH(e)}let k$=function(e){J8t(I,e);var g=O8t(I);function I(){return E8t(this,I),g.apply(this,arguments)}return M8t(I,[{key:"render",value:function(){return N.createElement(Bw,{okayOnly:!0,okayTitle:"Done",onOkay:this.props.onDone,title:"Share view link"},N.createElement("div",{className:x8t["export-link-dialog-wrapper"]},N.createElement("input",{ref:n=>{n&&(this.input=n,n.focus(),n.select())},onClick:n=>{n.target.select()},placeholder:"Generating the link...",readOnly:!0,value:this.props.url}),N.createElement(Xs,{onClick:n=>{this.input.select(),document.execCommand("copy")}},"Copy")))}}]),I}(N.Component);k$.defaultProps={onDone:()=>{},url:""};k$.propTypes={onDone:L.func,url:L.string};function Q8t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Kse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hH(e){return hH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},hH(e)}let WXe=function(e){e6t(I,e);var g=t6t(I);function I(i){var n;return Q8t(this,I),n=g.call(this,i),n.state={submenuShown:!1},n}return j8t(I,[{key:"getConfigureViewMenu",value:function(n,C){const r=["backgroundColor"],o={},a={};for(const s of r)if(s in Object.keys(an)&&(o[s]={name:an[s].name},an[s].inlineOptions))for(const A in an[s].inlineOptions){const l=an[s].inlineOptions[A];o[s].children||(o[s].children={});const c={name:l.name,value:l.value};c.handler=()=>{a[s]=l.value,this.props.onOptionsChanged(a)},o[s].children[A]=c}return N.createElement(vO,{key:"config-series-menu",closeMenu:this.props.closeMenu,menuItems:o,orientation:this.state.orientation,parentBbox:C,position:n,theme:this.props.theme})}},{key:"getSubmenu",value:function(){if(this.state.submenuShown){const n=this.state.submenuSourceBbox,C=this.state.orientation==="left"?{left:this.state.left,top:n.top}:{left:this.state.left+n.width+7,top:n.top};return this.state.submenuShown.option==="options"?this.getConfigureViewMenu(C,n):N.createElement("div",null)}return N.createElement("div",null)}},{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.div=n},className:Xg(Qt["context-menu"],{[Qt["context-menu-dark"]]:this.props.theme===gI}),"data-menu-type":"ConfigViewMenu",style:{left:this.state.left,top:this.state.top}},N.createElement(ig,{onClick:n=>this.props.onTogglePositionSearchBox(n)},"Toggle position search box"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onZoomToData(n)},"Zoom to data extent"),N.createElement(ig,{onClick:n=>this.props.onClearView(n)},"Clear View"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onYankZoom(n)},"Take zoom from"),N.createElement(ig,{onClick:n=>this.props.onYankLocation(n)},"Take location from"),N.createElement(ig,{onClick:n=>this.props.onYankZoomAndLocation(n)},"Take zoom and location from"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:this.props.onLockZoom},"Lock zoom with"),N.createElement(ig,{onClick:this.props.onLockLocation},"Lock location with"),N.createElement(ig,{onClick:this.props.onLockZoomAndLocation},"Lock zoom and location with"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:this.props.onTakeAndLockZoomAndLocation},"Take and lock zoom and location with"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onUnlockZoom(n)},"Unlock zoom"),N.createElement(ig,{onClick:n=>this.props.onUnlockLocation(n)},"Unlock location"),N.createElement(ig,{onClick:n=>this.props.onUnlockZoomAndLocation(n)},"Unlock zoom and location"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onProjectViewport(n)},"Show this viewport on"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onEditViewConfig(n)},"Edit view config"),N.createElement("hr",{className:Qt["context-menu-hr"]}),N.createElement(ig,{onClick:()=>this.props.onExportSVG()},"Export views as SVG"),N.createElement(ig,{onClick:()=>this.props.onExportPNG()},"Export views as PNG"),N.createElement(ig,{onClick:()=>this.props.onExportViewAsJSON()},"Export views as JSON"),N.createElement(ig,{onClick:()=>this.props.onExportViewAsLink()},"Export views as Link"),this.getSubmenu())}}]),I}(fu);WXe.propTypes={onEditViewConfig:L.func.isRequired,onExportSVG:L.func,onExportPNG:L.func,onExportViewAsJSON:L.func,onExportViewAsLink:L.func,onLockLocation:L.func,onLockZoom:L.func,onLockZoomAndLocation:L.func,onProjectViewport:L.func,onTakeAndLockZoomAndLocation:L.func,onTogglePositionSearchBox:L.func,onUnlockLocation:L.func,onUnlockZoom:L.func,onUnlockZoomAndLocation:L.func,onYankLocation:L.func,onYankZoom:L.func,onYankZoomAndLocation:L.func,onZoomToData:L.func,theme:L.symbol};const Br={"add-track-position-table":"_add-track-position-table_wdy5w_1","add-track-position-table-dark":"_add-track-position-table-dark_wdy5w_7","add-track-position-other":"_add-track-position-other_wdy5w_11","add-track-position-top-center":"_add-track-position-top-center_wdy5w_15","add-track-position-middle-left":"_add-track-position-middle-left_wdy5w_30","add-track-position-middle-right":"_add-track-position-middle-right_wdy5w_45","add-track-position-middle-middle":"_add-track-position-middle-middle_wdy5w_60","add-track-position-bottom-middle":"_add-track-position-bottom-middle_wdy5w_71","add-track-position-span":"_add-track-position-span_wdy5w_86"};function XXe(e){return N.createElement("div",null,N.createElement("div",{className:Br["add-track-position-span"]},"Add Track..."),N.createElement("table",{className:Xg(Br["add-track-position-table"],{[Br["add-track-position-table-dark"]]:e.theme===gI})},N.createElement("tbody",null,N.createElement("tr",{style:{height:"30px"}},N.createElement("td",{"aria-hidden":"true",className:Br["add-track-position-other"]}),N.createElement("td",{className:Br["add-track-position-top-center"],onClick:()=>e.onTrackPositionChosen("top")},"top"),N.createElement("td",{"aria-hidden":"true",className:Br["add-track-position-other"]})),N.createElement("tr",{style:{height:"80px"}},N.createElement("td",{className:Br["add-track-position-middle-left"],onClick:()=>e.onTrackPositionChosen("left")},"left"),N.createElement("td",{className:Br["add-track-position-middle-middle"],onClick:()=>e.onTrackPositionChosen("center")},"center"),N.createElement("td",{className:Br["add-track-position-middle-right"],onClick:()=>e.onTrackPositionChosen("right")},"right")),N.createElement("tr",{style:{height:"30px"}},N.createElement("td",{"aria-hidden":"true",className:Br["add-track-position-other"]}),N.createElement("td",{className:Br["add-track-position-bottom-middle"],onClick:()=>e.onTrackPositionChosen("bottom")},"bottom"),N.createElement("td",{"aria-hidden":"true",className:Br["add-track-position-other"]})))))}XXe.propTypes={onTrackPositionChosen:L.func.isRequired,theme:L.symbol.isRequired};const n6t=cm(XXe);function C6t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Fse(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function mH(e){return mH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},mH(e)}let Y$=function(e){A6t(I,e);var g=s6t(I);function I(i){var n;return C6t(this,I),n=g.call(this,i),n.configImg=null,n.plusImg=null,n.state={addTrackPositionMenuUid:null,addTrackPositionMenuPosition:null,configMenuUid:null,configMenuPosition:null,isFocused:!1,width:-1},n.handleTrackPositionChosenBound=n.handleTrackPositionChosen.bind(HXe(n)),n}return r6t(I,[{key:"componentDidMount",value:function(){this.setState({width:this.el.clientWidth})}},{key:"checkWidth",value:function(){const n=this.el.clientWidth;n!==this.state.width&&this.setState({width:n})}},{key:"handleConfigMenuOpened",value:function(n){this.setState({configMenuUid:n,configMenuPosition:this.configImg.getBoundingClientRect()})}},{key:"handleAddTrackPositionMenuOpened",value:function(n){this.setState({addTrackPositionMenuUid:n,addTrackPositionMenuPosition:this.plusImg.getBoundingClientRect()})}},{key:"handleTrackPositionChosen",value:function(n){this.props.onTrackPositionChosen(n),this.setState({addTrackPositionMenuUid:null,addTrackPositionMenuPosition:null})}},{key:"render",value:function(){let n=null,C=null;this.state.addTrackPositionMenuPosition&&(C=N.createElement(Dc,{onMenuClosed:()=>{this.setState({addTrackPositionMenuUid:null,addTrackPositionMenuPosition:null})}},N.createElement(fu,{orientation:"left",position:this.state.addTrackPositionMenuPosition,theme:this.props.theme},N.createElement(n6t,{onTrackPositionChosen:this.handleTrackPositionChosenBound})))),this.state.configMenuUid&&(n=N.createElement(Dc,{onMenuClosed:()=>this.setState({configMenuUid:null})},N.createElement(WXe,{onClearView:()=>{this.setState({configMenuUid:null}),this.props.onClearView()},onEditViewConfig:()=>{this.setState({configMenuUid:null}),this.props.onEditViewConfig(this.state.configMenuUid)},onExportPNG:()=>{this.setState({configMenuUid:null}),this.props.onExportPNG()},onExportSVG:()=>{this.setState({configMenuUid:null}),this.props.onExportSVG()},onExportViewAsJSON:()=>{this.setState({configMenuUid:null}),this.props.onExportViewsAsJSON()},onExportViewAsLink:()=>{this.setState({configMenuUid:null}),this.props.onExportViewsAsLink()},onLockLocation:()=>{this.setState({configMenuUid:null}),this.props.onLockLocation(this.state.configMenuUid)},onLockZoom:()=>{this.setState({configMenuUid:null}),this.props.onLockZoom(this.state.configMenuUid)},onLockZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onLockZoomAndLocation(this.state.configMenuUid)},onOptionsChanged:s=>{this.props.onViewOptionsChanged(s),this.setState({configMenuUid:null})},onProjectViewport:()=>{this.setState({configMenuUid:null}),this.props.onProjectViewport(this.state.configMenuUid)},onTakeAndLockZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onTakeAndLockZoomAndLocation(this.state.configMenuUid)},onTogglePositionSearchBox:()=>{this.setState({configMenuUid:null}),this.props.onTogglePositionSearchBox(this.state.configMenuUid)},onUnlockLocation:()=>{this.setState({configMenuUid:null}),this.props.onUnlockLocation(this.state.configMenuUid)},onUnlockZoom:()=>{this.setState({configMenuUid:null}),this.props.onUnlockZoom(this.state.configMenuUid)},onUnlockZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onUnlockZoomAndLocation(this.state.configMenuUid)},onYankLocation:()=>{this.setState({configMenuUid:null}),this.props.onYankLocation(this.state.configMenuUid)},onYankZoom:()=>{this.setState({configMenuUid:null}),this.props.onYankZoom(this.state.configMenuUid)},onYankZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onYankZoomAndLocation(this.state.configMenuUid)},onZoomToData:()=>{this.setState({configMenuUid:null}),this.props.onZoomToData(this.state.configMenuUid)},orientation:"left",position:this.state.configMenuPosition,theme:this.props.theme})));const r=this.props.getGenomePositionSearchBox(this.state.isFocused,s=>{this.setState({isFocused:s})}),o=Xg(this.state.isFocused?Vr["multitrack-header-focus"]:Vr["multitrack-header"],{[Vr["multitrack-header-dark"]]:this.props.theme===gI}),a=this.state.width<=YGe?Vr["multitrack-header-icon-squeazed"]:Vr["multitrack-header-icon"];return N.createElement("div",{ref:s=>{this.el=s},className:o},N.createElement("div",{className:Vr["multitrack-header-left"]},this.props.mouseTool===zr&&N.createElement("svg",{className:Xg(Vr["mouse-tool-selection"],a),title:"Selection tool active"},N.createElement("use",{xlinkHref:"#select"})),N.createElement("div",{className:Vr["multitrack-header-grabber"],title:"Drag to move the view"},N.createElement("div",null),N.createElement("div",null),N.createElement("div",null)),this.state.width>KGe&&N.createElement("div",{className:Vr["multitrack-header-search"]},this.props.isGenomePositionSearchBoxVisible&&r)),N.createElement("nav",{className:Vr["multitrack-header-nav-list"]},N.createElement("svg",{className:a,onClick:this.props.onAddView},N.createElement("title",null,"Add new view (clone this view)"),N.createElement("use",{xlinkHref:"#copy"})),N.createElement("svg",{ref:s=>{this.configImg=s},className:a,onClick:()=>this.handleConfigMenuOpened(this.props.viewUid)},N.createElement("title",null,"Configure this view"),N.createElement("use",{xlinkHref:"#cog"})),N.createElement("svg",{ref:s=>{this.plusImg=s},className:a,onClick:()=>this.handleAddTrackPositionMenuOpened(this.props.viewUid)},N.createElement("title",null,"Add Track"),N.createElement("use",{xlinkHref:"#plus"})),N.createElement("svg",{className:a,onClick:this.props.onCloseView},N.createElement("title",null,"Close View"),N.createElement("use",{xlinkHref:"#cross"}))),n,C)}}]),I}(N.Component);Y$.defaultProps={isGenomePositionSearchBoxVisible:!1};Y$.propTypes={getGenomePositionSearchBox:L.func.isRequired,isGenomePositionSearchBoxVisible:L.bool,mouseTool:L.string.isRequired,onAddView:L.func.isRequired,onClearView:L.func.isRequired,onCloseView:L.func.isRequired,onEditViewConfig:L.func.isRequired,onExportSVG:L.func.isRequired,onExportPNG:L.func.isRequired,onExportViewsAsJSON:L.func.isRequired,onExportViewsAsLink:L.func.isRequired,onLockLocation:L.func.isRequired,onLockZoom:L.func.isRequired,onLockZoomAndLocation:L.func.isRequired,onProjectViewport:L.func.isRequired,onTakeAndLockZoomAndLocation:L.func.isRequired,onTogglePositionSearchBox:L.func.isRequired,onTrackPositionChosen:L.func.isRequired,onUnlockLocation:L.func.isRequired,onUnlockZoom:L.func.isRequired,onUnlockZoomAndLocation:L.func.isRequired,onViewOptionsChanged:L.func.isRequired,onYankLocation:L.func.isRequired,onYankZoom:L.func.isRequired,onYankZoomAndLocation:L.func.isRequired,onZoomToData:L.func.isRequired,theme:L.symbol.isRequired,viewUid:L.string.isRequired};const u6t=cm(Y$);var TXe={};Object.defineProperty(TXe,"__esModule",{value:!0});var wl=Object.assign||function(e){for(var g=1;g=0||Object.prototype.hasOwnProperty.call(e,i)&&(I[i]=e[i]);return I}function p6t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Dse(e,g){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g&&(typeof g=="object"||typeof g=="function")?g:e}function b6t(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof g);e.prototype=Object.create(g&&g.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),g&&(Object.setPrototypeOf?Object.setPrototypeOf(e,g):e.__proto__=g)}var y6t=13,Z6t=9,G6t=8,v6t=89,$V=90,B6t=77,xse=57,Ese=219,Mse=222,zse=192,S6t=27,Pse=100,w6t=3e3,R6t="navigator"in globalThis&&/Win/i.test(navigator.platform),Gx="navigator"in globalThis&&/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform),FW="npm__react-simple-code-editor__textarea",V6t=` + `),N.createElement("div",{style:A.white,className:"saturation-white"},N.createElement("div",{style:A.black,className:"saturation-black"}),N.createElement("div",{style:A.pointer},this.props.pointer?N.createElement(this.props.pointer,this.props):N.createElement("div",{style:A.circle}))))}}]),g}(U.PureComponent||U.Component);function z7t(e,g){var i=ur(e)?q9e:$9e;return i(e,D9e(g))}function j2(e){"@babel/helpers - typeof";return j2=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g},j2(e)}var P7t=/^\s+/,J7t=/\s+$/;function Nt(e,g){if(e=e||"",g=g||{},e instanceof Nt)return e;if(!(this instanceof Nt))return new Nt(e,g);var i=O7t(e);this._originalInput=e,this._r=i.r,this._g=i.g,this._b=i.b,this._a=i.a,this._roundA=Math.round(100*this._a)/100,this._format=g.format||i.format,this._gradientType=g.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=i.ok}Nt.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var g=this.toRgb();return(g.r*299+g.g*587+g.b*114)/1e3},getLuminance:function(){var g=this.toRgb(),i,I,n,r,C,o;return i=g.r/255,I=g.g/255,n=g.b/255,i<=.03928?r=i/12.92:r=Math.pow((i+.055)/1.055,2.4),I<=.03928?C=I/12.92:C=Math.pow((I+.055)/1.055,2.4),n<=.03928?o=n/12.92:o=Math.pow((n+.055)/1.055,2.4),.2126*r+.7152*C+.0722*o},setAlpha:function(g){return this._a=dXe(g),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var g=gse(this._r,this._g,this._b);return{h:g.h*360,s:g.s,v:g.v,a:this._a}},toHsvString:function(){var g=gse(this._r,this._g,this._b),i=Math.round(g.h*360),I=Math.round(g.s*100),n=Math.round(g.v*100);return this._a==1?"hsv("+i+", "+I+"%, "+n+"%)":"hsva("+i+", "+I+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var g=tse(this._r,this._g,this._b);return{h:g.h*360,s:g.s,l:g.l,a:this._a}},toHslString:function(){var g=tse(this._r,this._g,this._b),i=Math.round(g.h*360),I=Math.round(g.s*100),n=Math.round(g.l*100);return this._a==1?"hsl("+i+", "+I+"%, "+n+"%)":"hsla("+i+", "+I+"%, "+n+"%, "+this._roundA+")"},toHex:function(g){return ise(this._r,this._g,this._b,g)},toHexString:function(g){return"#"+this.toHex(g)},toHex8:function(g){return Q7t(this._r,this._g,this._b,this._a,g)},toHex8String:function(g){return"#"+this.toHex8(g)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(Wi(this._r,255)*100)+"%",g:Math.round(Wi(this._g,255)*100)+"%",b:Math.round(Wi(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(Wi(this._r,255)*100)+"%, "+Math.round(Wi(this._g,255)*100)+"%, "+Math.round(Wi(this._b,255)*100)+"%)":"rgba("+Math.round(Wi(this._r,255)*100)+"%, "+Math.round(Wi(this._g,255)*100)+"%, "+Math.round(Wi(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:oQt[ise(this._r,this._g,this._b,!0)]||!1},toFilter:function(g){var i="#"+Ise(this._r,this._g,this._b,this._a),I=i,n=this._gradientType?"GradientType = 1, ":"";if(g){var r=Nt(g);I="#"+Ise(r._r,r._g,r._b,r._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+i+",endColorstr="+I+")"},toString:function(g){var i=!!g;g=g||this._format;var I=!1,n=this._a<1&&this._a>=0,r=!i&&n&&(g==="hex"||g==="hex6"||g==="hex3"||g==="hex4"||g==="hex8"||g==="name");return r?g==="name"&&this._a===0?this.toName():this.toRgbString():(g==="rgb"&&(I=this.toRgbString()),g==="prgb"&&(I=this.toPercentageRgbString()),(g==="hex"||g==="hex6")&&(I=this.toHexString()),g==="hex3"&&(I=this.toHexString(!0)),g==="hex4"&&(I=this.toHex8String(!0)),g==="hex8"&&(I=this.toHex8String()),g==="name"&&(I=this.toName()),g==="hsl"&&(I=this.toHslString()),g==="hsv"&&(I=this.toHsvString()),I||this.toHexString())},clone:function(){return Nt(this.toString())},_applyModification:function(g,i){var I=g.apply(null,[this].concat([].slice.call(i)));return this._r=I._r,this._g=I._g,this._b=I._b,this.setAlpha(I._a),this},lighten:function(){return this._applyModification(eQt,arguments)},brighten:function(){return this._applyModification(tQt,arguments)},darken:function(){return this._applyModification(gQt,arguments)},desaturate:function(){return this._applyModification(j7t,arguments)},saturate:function(){return this._applyModification($7t,arguments)},greyscale:function(){return this._applyModification(q7t,arguments)},spin:function(){return this._applyModification(iQt,arguments)},_applyCombination:function(g,i){return g.apply(null,[this].concat([].slice.call(i)))},analogous:function(){return this._applyCombination(rQt,arguments)},complement:function(){return this._applyCombination(IQt,arguments)},monochromatic:function(){return this._applyCombination(CQt,arguments)},splitcomplement:function(){return this._applyCombination(nQt,arguments)},triad:function(){return this._applyCombination(nse,[3])},tetrad:function(){return this._applyCombination(nse,[4])}};Nt.fromRatio=function(e,g){if(j2(e)=="object"){var i={};for(var I in e)e.hasOwnProperty(I)&&(I==="a"?i[I]=e[I]:i[I]=hG(e[I]));e=i}return Nt(e,g)};function O7t(e){var g={r:0,g:0,b:0},i=1,I=null,n=null,r=null,C=!1,o=!1;return typeof e=="string"&&(e=lQt(e)),j2(e)=="object"&&(LA(e.r)&&LA(e.g)&&LA(e.b)?(g=_7t(e.r,e.g,e.b),C=!0,o=String(e.r).substr(-1)==="%"?"prgb":"rgb"):LA(e.h)&&LA(e.s)&&LA(e.v)?(I=hG(e.s),n=hG(e.v),g=U7t(e.h,I,n),C=!0,o="hsv"):LA(e.h)&&LA(e.s)&&LA(e.l)&&(I=hG(e.s),r=hG(e.l),g=L7t(e.h,I,r),C=!0,o="hsl"),e.hasOwnProperty("a")&&(i=e.a)),i=dXe(i),{ok:C,format:e.format||o,r:Math.min(255,Math.max(g.r,0)),g:Math.min(255,Math.max(g.g,0)),b:Math.min(255,Math.max(g.b,0)),a:i}}function _7t(e,g,i){return{r:Wi(e,255)*255,g:Wi(g,255)*255,b:Wi(i,255)*255}}function tse(e,g,i){e=Wi(e,255),g=Wi(g,255),i=Wi(i,255);var I=Math.max(e,g,i),n=Math.min(e,g,i),r,C,o=(I+n)/2;if(I==n)r=C=0;else{var a=I-n;switch(C=o>.5?a/(2-I-n):a/(I+n),I){case e:r=(g-i)/a+(g1&&(l-=1),l<1/6?s+(A-s)*6*l:l<1/2?A:l<2/3?s+(A-s)*(2/3-l)*6:s}if(g===0)I=n=r=i;else{var o=i<.5?i*(1+g):i+g-i*g,a=2*i-o;I=C(a,o,e+1/3),n=C(a,o,e),r=C(a,o,e-1/3)}return{r:I*255,g:n*255,b:r*255}}function gse(e,g,i){e=Wi(e,255),g=Wi(g,255),i=Wi(i,255);var I=Math.max(e,g,i),n=Math.min(e,g,i),r,C,o=I,a=I-n;if(C=I===0?0:a/I,I==n)r=0;else{switch(I){case e:r=(g-i)/a+(g>1)+720)%360;--g;)I.h=(I.h+n)%360,r.push(Nt(I));return r}function CQt(e,g){g=g||6;for(var i=Nt(e).toHsv(),I=i.h,n=i.s,r=i.v,C=[],o=1/g;g--;)C.push(Nt({h:I,s:n,v:r})),r=(r+o)%1;return C}Nt.mix=function(e,g,i){i=i===0?0:i||50;var I=Nt(e).toRgb(),n=Nt(g).toRgb(),r=i/100,C={r:(n.r-I.r)*r+I.r,g:(n.g-I.g)*r+I.g,b:(n.b-I.b)*r+I.b,a:(n.a-I.a)*r+I.a};return Nt(C)};Nt.readability=function(e,g){var i=Nt(e),I=Nt(g);return(Math.max(i.getLuminance(),I.getLuminance())+.05)/(Math.min(i.getLuminance(),I.getLuminance())+.05)};Nt.isReadable=function(e,g,i){var I=Nt.readability(e,g),n,r;switch(r=!1,n=cQt(i),n.level+n.size){case"AAsmall":case"AAAlarge":r=I>=4.5;break;case"AAlarge":r=I>=3;break;case"AAAsmall":r=I>=7;break}return r};Nt.mostReadable=function(e,g,i){var I=null,n=0,r,C,o,a;i=i||{},C=i.includeFallbackColors,o=i.level,a=i.size;for(var s=0;sn&&(n=r,I=Nt(g[s]));return Nt.isReadable(e,I,{level:o,size:a})||!C?I:(i.includeFallbackColors=!1,Nt.mostReadable(e,["#fff","#000"],i))};var fO=Nt.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},oQt=Nt.hexNames=aQt(fO);function aQt(e){var g={};for(var i in e)e.hasOwnProperty(i)&&(g[e[i]]=i);return g}function dXe(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function Wi(e,g){AQt(e)&&(e="100%");var i=sQt(e);return e=Math.min(g,Math.max(0,parseFloat(e))),i&&(e=parseInt(e*g,10)/100),Math.abs(e-g)<1e-6?1:e%g/parseFloat(g)}function eY(e){return Math.min(1,Math.max(0,e))}function qr(e){return parseInt(e,16)}function AQt(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function sQt(e){return typeof e=="string"&&e.indexOf("%")!=-1}function ia(e){return e.length==1?"0"+e:""+e}function hG(e){return e<=1&&(e=e*100+"%"),e}function hXe(e){return Math.round(parseFloat(e)*255).toString(16)}function rse(e){return qr(e)/255}var xo=function(){var e="[-\\+]?\\d+%?",g="[-\\+]?\\d*\\.\\d+%?",i="(?:"+g+")|(?:"+e+")",I="[\\s|\\(]+("+i+")[,|\\s]+("+i+")[,|\\s]+("+i+")\\s*\\)?",n="[\\s|\\(]+("+i+")[,|\\s]+("+i+")[,|\\s]+("+i+")[,|\\s]+("+i+")\\s*\\)?";return{CSS_UNIT:new RegExp(i),rgb:new RegExp("rgb"+I),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+I),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+I),hsva:new RegExp("hsva"+n),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function LA(e){return!!xo.CSS_UNIT.exec(e)}function lQt(e){e=e.replace(P7t,"").replace(J7t,"").toLowerCase();var g=!1;if(fO[e])e=fO[e],g=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var i;return(i=xo.rgb.exec(e))?{r:i[1],g:i[2],b:i[3]}:(i=xo.rgba.exec(e))?{r:i[1],g:i[2],b:i[3],a:i[4]}:(i=xo.hsl.exec(e))?{h:i[1],s:i[2],l:i[3]}:(i=xo.hsla.exec(e))?{h:i[1],s:i[2],l:i[3],a:i[4]}:(i=xo.hsv.exec(e))?{h:i[1],s:i[2],v:i[3]}:(i=xo.hsva.exec(e))?{h:i[1],s:i[2],v:i[3],a:i[4]}:(i=xo.hex8.exec(e))?{r:qr(i[1]),g:qr(i[2]),b:qr(i[3]),a:rse(i[4]),format:g?"name":"hex8"}:(i=xo.hex6.exec(e))?{r:qr(i[1]),g:qr(i[2]),b:qr(i[3]),format:g?"name":"hex"}:(i=xo.hex4.exec(e))?{r:qr(i[1]+""+i[1]),g:qr(i[2]+""+i[2]),b:qr(i[3]+""+i[3]),a:rse(i[4]+""+i[4]),format:g?"name":"hex8"}:(i=xo.hex3.exec(e))?{r:qr(i[1]+""+i[1]),g:qr(i[2]+""+i[2]),b:qr(i[3]+""+i[3]),format:g?"name":"hex"}:!1}function cQt(e){var g,i;return e=e||{level:"AA",size:"small"},g=(e.level||"AA").toUpperCase(),i=(e.size||"small").toLowerCase(),g!=="AA"&&g!=="AAA"&&(g="AA"),i!=="small"&&i!=="large"&&(i="small"),{level:g,size:i}}var Cse=function(g){var i=["r","g","b","a","h","s","l","v"],I=0,n=0;return z7t(i,function(r){if(g[r]&&(I+=1,isNaN(g[r])||(n+=1),r==="s"||r==="l")){var C=/^\d+%$/;C.test(g[r])&&(n+=1)}}),I===n?g:!1},mG=function(g,i){var I=g.hex?Nt(g.hex):Nt(g),n=I.toHsl(),r=I.toHsv(),C=I.toRgb(),o=I.toHex();n.s===0&&(n.h=i||0,r.h=i||0);var a=o==="000000"&&C.a===0;return{hsl:n,hex:a?"transparent":"#"+o,rgb:C,hsv:r,oldHue:g.h||i||n.h,source:g.source}},fu=function(g){if(g==="transparent")return!0;var i=String(g).charAt(0)==="#"?1:0;return g.length!==4+i&&g.length<7+i&&Nt(g).isValid()},b$=function(g){if(!g)return"#fff";var i=mG(g);if(i.hex==="transparent")return"rgba(0,0,0,0.4)";var I=(i.rgb.r*299+i.rgb.g*587+i.rgb.b*114)/1e3;return I>=128?"#000":"#fff"},Bx=function(g,i){var I=g.replace("°","");return Nt(i+" ("+I+")")._ok},yZ=Object.assign||function(e){for(var g=1;g1&&arguments[1]!==void 0?arguments[1]:"span";return function(I){yQt(n,I);function n(){var r,C,o,a;bQt(this,n);for(var s=arguments.length,A=Array(s),l=0;l=0||Object.prototype.hasOwnProperty.call(e,I)&&(i[I]=e[I]);return i}var jV=24,HQt=pXe.default=function(e){var g=e.fill,i=g===void 0?"currentColor":g,I=e.width,n=I===void 0?jV:I,r=e.height,C=r===void 0?jV:r,o=e.style,a=o===void 0?{}:o,s=XQt(e,["fill","width","height","style"]);return lse.default.createElement("svg",sse({viewBox:"0 0 "+jV+" "+jV,style:sse({fill:i,width:n,height:C},a)},s),lse.default.createElement("path",{d:"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z"}))},TQt=function(){function e(g,i){for(var I=0;I1&&(n.a=1),I.props.onChange({h:I.props.hsl.h,s:I.props.hsl.s,l:I.props.hsl.l,a:Math.round(n.a*100)/100,source:"rgb"},r)):(n.h||n.s||n.l)&&(typeof n.s=="string"&&n.s.includes("%")&&(n.s=n.s.replace("%","")),typeof n.l=="string"&&n.l.includes("%")&&(n.l=n.l.replace("%","")),n.s==1?n.s=.01:n.l==1&&(n.l=.01),I.props.onChange({h:n.h||I.props.hsl.h,s:Number(Ase(n.s)?I.props.hsl.s:n.s),l:Number(Ase(n.l)?I.props.hsl.l:n.l),source:"hsl"},r))},I.showHighlight=function(n){n.currentTarget.style.background="#eee"},I.hideHighlight=function(n){n.currentTarget.style.background="transparent"},i.hsl.a!==1&&i.view==="hex"?I.state={view:"rgb"}:I.state={view:i.view},I}return TQt(g,[{key:"render",value:function(){var I=this,n=$t({default:{wrap:{paddingTop:"16px",display:"flex"},fields:{flex:"1",display:"flex",marginLeft:"-6px"},field:{paddingLeft:"6px",width:"100%"},alpha:{paddingLeft:"6px",width:"100%"},toggle:{width:"32px",textAlign:"right",position:"relative"},icon:{marginRight:"-4px",marginTop:"12px",cursor:"pointer",position:"relative"},iconHighlight:{position:"absolute",width:"24px",height:"28px",background:"#eee",borderRadius:"4px",top:"10px",left:"12px",display:"none"},input:{fontSize:"11px",color:"#333",width:"100%",borderRadius:"2px",border:"none",boxShadow:"inset 0 0 0 1px #dadada",height:"21px",textAlign:"center"},label:{textTransform:"uppercase",fontSize:"11px",lineHeight:"11px",color:"#969696",textAlign:"center",display:"block",marginTop:"12px"},svg:{fill:"#333",width:"24px",height:"24px",border:"1px transparent solid",borderRadius:"5px"}},disableAlpha:{alpha:{display:"none"}}},this.props,this.state),r=void 0;return this.state.view==="hex"?r=N.createElement("div",{style:n.fields,className:"flexbox-fix"},N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"hex",value:this.props.hex,onChange:this.handleChange}))):this.state.view==="rgb"?r=N.createElement("div",{style:n.fields,className:"flexbox-fix"},N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"r",value:this.props.rgb.r,onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"g",value:this.props.rgb.g,onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"b",value:this.props.rgb.b,onChange:this.handleChange})),N.createElement("div",{style:n.alpha},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"a",value:this.props.rgb.a,arrowOffset:.01,onChange:this.handleChange}))):this.state.view==="hsl"&&(r=N.createElement("div",{style:n.fields,className:"flexbox-fix"},N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"h",value:Math.round(this.props.hsl.h),onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"s",value:Math.round(this.props.hsl.s*100)+"%",onChange:this.handleChange})),N.createElement("div",{style:n.field},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"l",value:Math.round(this.props.hsl.l*100)+"%",onChange:this.handleChange})),N.createElement("div",{style:n.alpha},N.createElement(Sg,{style:{input:n.input,label:n.label},label:"a",value:this.props.hsl.a,arrowOffset:.01,onChange:this.handleChange})))),N.createElement("div",{style:n.wrap,className:"flexbox-fix"},r,N.createElement("div",{style:n.toggle},N.createElement("div",{style:n.icon,onClick:this.toggleViews,ref:function(o){return I.icon=o}},N.createElement(HQt,{style:n.svg,onMouseOver:this.showHighlight,onMouseEnter:this.showHighlight,onMouseOut:this.hideHighlight}))))}}],[{key:"getDerivedStateFromProps",value:function(I,n){return I.hsl.a!==1&&n.view==="hex"?{view:"rgb"}:null}}]),g}(N.Component);bXe.defaultProps={view:"hex"};var cse=function(){var g=$t({default:{picker:{width:"12px",height:"12px",borderRadius:"6px",transform:"translate(-6px, -1px)",backgroundColor:"rgb(248, 248, 248)",boxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.37)"}}});return N.createElement("div",{style:g.picker})},KQt=function(){var g=$t({default:{picker:{width:"12px",height:"12px",borderRadius:"6px",boxShadow:"inset 0 0 0 1px #fff",transform:"translate(-6px, -6px)"}}});return N.createElement("div",{style:g.picker})},G$=function(g){var i=g.width,I=g.onChange,n=g.disableAlpha,r=g.rgb,C=g.hsl,o=g.hsv,a=g.hex,s=g.renderers,A=g.styles,l=A===void 0?{}:A,c=g.className,u=c===void 0?"":c,d=g.defaultView,h=$t(Lr({default:{picker:{width:i,background:"#fff",borderRadius:"2px",boxShadow:"0 0 2px rgba(0,0,0,.3), 0 4px 8px rgba(0,0,0,.3)",boxSizing:"initial",fontFamily:"Menlo"},saturation:{width:"100%",paddingBottom:"55%",position:"relative",borderRadius:"2px 2px 0 0",overflow:"hidden"},Saturation:{radius:"2px 2px 0 0"},body:{padding:"16px 16px 12px"},controls:{display:"flex"},color:{width:"32px"},swatch:{marginTop:"6px",width:"16px",height:"16px",borderRadius:"8px",position:"relative",overflow:"hidden"},active:{absolute:"0px 0px 0px 0px",borderRadius:"8px",boxShadow:"inset 0 0 0 1px rgba(0,0,0,.1)",background:"rgba("+r.r+", "+r.g+", "+r.b+", "+r.a+")",zIndex:"2"},toggles:{flex:"1"},hue:{height:"10px",position:"relative",marginBottom:"8px"},Hue:{radius:"2px"},alpha:{height:"10px",position:"relative"},Alpha:{radius:"2px"}},disableAlpha:{color:{width:"22px"},alpha:{display:"none"},hue:{marginBottom:"0px"},swatch:{width:"10px",height:"10px",marginTop:"0px"}}},l),{disableAlpha:n});return N.createElement("div",{style:h.picker,className:"chrome-picker "+u},N.createElement("div",{style:h.saturation},N.createElement(qk,{style:h.Saturation,hsl:C,hsv:o,pointer:KQt,onChange:I})),N.createElement("div",{style:h.body},N.createElement("div",{style:h.controls,className:"flexbox-fix"},N.createElement("div",{style:h.color},N.createElement("div",{style:h.swatch},N.createElement("div",{style:h.active}),N.createElement(uy,{renderers:s}))),N.createElement("div",{style:h.toggles},N.createElement("div",{style:h.hue},N.createElement(dy,{style:h.Hue,hsl:C,pointer:cse,onChange:I})),N.createElement("div",{style:h.alpha},N.createElement(p$,{style:h.Alpha,rgb:r,hsl:C,pointer:cse,renderers:s,onChange:I})))),N.createElement(bXe,{rgb:r,hsl:C,hex:a,view:d,onChange:I,disableAlpha:n})))};G$.propTypes={width:L.oneOfType([L.string,L.number]),disableAlpha:L.bool,styles:L.object,defaultView:L.oneOf(["hex","rgb","hsl"])};G$.defaultProps={width:225,disableAlpha:!1,styles:{}};Ur(G$);var FQt=function(g){var i=g.color,I=g.onClick,n=I===void 0?function(){}:I,r=g.onSwatchHover,C=g.active,o=$t({default:{color:{background:i,width:"15px",height:"15px",float:"left",marginRight:"5px",marginBottom:"5px",position:"relative",cursor:"pointer"},dot:{absolute:"5px 5px 5px 5px",background:b$(i),borderRadius:"50%",opacity:"0"}},active:{dot:{opacity:"1"}},"color-#FFFFFF":{color:{boxShadow:"inset 0 0 0 1px #ddd"},dot:{background:"#000"}},transparent:{dot:{background:"#000"}}},{active:C,"color-#FFFFFF":i==="#FFFFFF",transparent:i==="transparent"});return N.createElement(Zm,{style:o.color,color:i,onClick:n,onHover:r,focusStyle:{boxShadow:"0 0 4px "+i}},N.createElement("div",{style:o.dot}))},DQt=function(g){var i=g.hex,I=g.rgb,n=g.onChange,r=$t({default:{fields:{display:"flex",paddingBottom:"6px",paddingRight:"5px",position:"relative"},active:{position:"absolute",top:"6px",left:"5px",height:"9px",width:"9px",background:i},HEXwrap:{flex:"6",position:"relative"},HEXinput:{width:"80%",padding:"0px",paddingLeft:"20%",border:"none",outline:"none",background:"none",fontSize:"12px",color:"#333",height:"16px"},HEXlabel:{display:"none"},RGBwrap:{flex:"3",position:"relative"},RGBinput:{width:"70%",padding:"0px",paddingLeft:"30%",border:"none",outline:"none",background:"none",fontSize:"12px",color:"#333",height:"16px"},RGBlabel:{position:"absolute",top:"3px",left:"0px",lineHeight:"16px",textTransform:"uppercase",fontSize:"12px",color:"#999"}}}),C=function(a,s){a.r||a.g||a.b?n({r:a.r||I.r,g:a.g||I.g,b:a.b||I.b,source:"rgb"},s):n({hex:a.hex,source:"hex"},s)};return N.createElement("div",{style:r.fields,className:"flexbox-fix"},N.createElement("div",{style:r.active}),N.createElement(Sg,{style:{wrap:r.HEXwrap,input:r.HEXinput,label:r.HEXlabel},label:"hex",value:i,onChange:C}),N.createElement(Sg,{style:{wrap:r.RGBwrap,input:r.RGBinput,label:r.RGBlabel},label:"r",value:I.r,onChange:C}),N.createElement(Sg,{style:{wrap:r.RGBwrap,input:r.RGBinput,label:r.RGBlabel},label:"g",value:I.g,onChange:C}),N.createElement(Sg,{style:{wrap:r.RGBwrap,input:r.RGBinput,label:r.RGBlabel},label:"b",value:I.b,onChange:C}))},v$=function(g){var i=g.onChange,I=g.onSwatchHover,n=g.colors,r=g.hex,C=g.rgb,o=g.styles,a=o===void 0?{}:o,s=g.className,A=s===void 0?"":s,l=$t(Lr({default:{Compact:{background:"#f6f6f6",radius:"4px"},compact:{paddingTop:"5px",paddingLeft:"5px",boxSizing:"initial",width:"240px"},clear:{clear:"both"}}},a)),c=function(d,h){d.hex?fu(d.hex)&&i({hex:d.hex,source:"hex"},h):i(d,h)};return N.createElement(Kw,{style:l.Compact,styles:a},N.createElement("div",{style:l.compact,className:"compact-picker "+A},N.createElement("div",null,mu(n,function(u){return N.createElement(FQt,{key:u,color:u,active:u.toLowerCase()===r,onClick:c,onSwatchHover:I})}),N.createElement("div",{style:l.clear})),N.createElement(DQt,{hex:r,rgb:C,onChange:c})))};v$.propTypes={colors:L.arrayOf(L.string),styles:L.object};v$.defaultProps={colors:["#4D4D4D","#999999","#FFFFFF","#F44E3B","#FE9200","#FCDC00","#DBDF00","#A4DD00","#68CCCA","#73D8FF","#AEA1FF","#FDA1FF","#333333","#808080","#cccccc","#D33115","#E27300","#FCC400","#B0BC00","#68BC00","#16A5A5","#009CE0","#7B64FF","#FA28FF","#000000","#666666","#B3B3B3","#9F0500","#C45100","#FB9E00","#808900","#194D33","#0C797D","#0062B1","#653294","#AB149E"],styles:{}};Ur(v$);var xQt=function(g){var i=g.hover,I=g.color,n=g.onClick,r=g.onSwatchHover,C={position:"relative",zIndex:"2",outline:"2px solid #fff",boxShadow:"0 0 5px 2px rgba(0,0,0,0.25)"},o=$t({default:{swatch:{width:"25px",height:"25px",fontSize:"0"}},hover:{swatch:C}},{hover:i});return N.createElement("div",{style:o.swatch},N.createElement(Zm,{color:I,onClick:n,onHover:r,focusStyle:C}))};const EQt=f$(xQt);var B$=function(g){var i=g.width,I=g.colors,n=g.onChange,r=g.onSwatchHover,C=g.triangle,o=g.styles,a=o===void 0?{}:o,s=g.className,A=s===void 0?"":s,l=$t(Lr({default:{card:{width:i,background:"#fff",border:"1px solid rgba(0,0,0,0.2)",boxShadow:"0 3px 12px rgba(0,0,0,0.15)",borderRadius:"4px",position:"relative",padding:"5px",display:"flex",flexWrap:"wrap"},triangle:{position:"absolute",border:"7px solid transparent",borderBottomColor:"#fff"},triangleShadow:{position:"absolute",border:"8px solid transparent",borderBottomColor:"rgba(0,0,0,0.15)"}},"hide-triangle":{triangle:{display:"none"},triangleShadow:{display:"none"}},"top-left-triangle":{triangle:{top:"-14px",left:"10px"},triangleShadow:{top:"-16px",left:"9px"}},"top-right-triangle":{triangle:{top:"-14px",right:"10px"},triangleShadow:{top:"-16px",right:"9px"}},"bottom-left-triangle":{triangle:{top:"35px",left:"10px",transform:"rotate(180deg)"},triangleShadow:{top:"37px",left:"9px",transform:"rotate(180deg)"}},"bottom-right-triangle":{triangle:{top:"35px",right:"10px",transform:"rotate(180deg)"},triangleShadow:{top:"37px",right:"9px",transform:"rotate(180deg)"}}},a),{"hide-triangle":C==="hide","top-left-triangle":C==="top-left","top-right-triangle":C==="top-right","bottom-left-triangle":C==="bottom-left","bottom-right-triangle":C==="bottom-right"}),c=function(d,h){return n({hex:d,source:"hex"},h)};return N.createElement("div",{style:l.card,className:"github-picker "+A},N.createElement("div",{style:l.triangleShadow}),N.createElement("div",{style:l.triangle}),mu(I,function(u){return N.createElement(EQt,{color:u,key:u,onClick:c,onSwatchHover:r})}))};B$.propTypes={width:L.oneOfType([L.string,L.number]),colors:L.arrayOf(L.string),triangle:L.oneOf(["hide","top-left","top-right","bottom-left","bottom-right"]),styles:L.object};B$.defaultProps={width:200,colors:["#B80000","#DB3E00","#FCCB00","#008B02","#006B76","#1273DE","#004DCF","#5300EB","#EB9694","#FAD0C3","#FEF3BD","#C1E1C5","#BEDADC","#C4DEF6","#BED3F3","#D4C4FB"],triangle:"top-left",styles:{}};Ur(B$);var MQt=function(g){var i=g.direction,I=$t({default:{picker:{width:"18px",height:"18px",borderRadius:"50%",transform:"translate(-9px, -1px)",backgroundColor:"rgb(248, 248, 248)",boxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.37)"}},vertical:{picker:{transform:"translate(-3px, -9px)"}}},{vertical:i==="vertical"});return N.createElement("div",{style:I.picker})},zQt=Object.assign||function(e){for(var g=1;g.5});return N.createElement("div",{style:I.picker})},_Qt=function(){var g=$t({default:{triangle:{width:0,height:0,borderStyle:"solid",borderWidth:"4px 0 4px 6px",borderColor:"transparent transparent transparent #fff",position:"absolute",top:"1px",left:"1px"},triangleBorder:{width:0,height:0,borderStyle:"solid",borderWidth:"5px 0 5px 8px",borderColor:"transparent transparent transparent #555"},left:{Extend:"triangleBorder",transform:"translate(-13px, -4px)"},leftInside:{Extend:"triangle",transform:"translate(-8px, -5px)"},right:{Extend:"triangleBorder",transform:"translate(20px, -14px) rotate(180deg)"},rightInside:{Extend:"triangle",transform:"translate(-8px, -5px)"}}});return N.createElement("div",{style:g.pointer},N.createElement("div",{style:g.left},N.createElement("div",{style:g.leftInside})),N.createElement("div",{style:g.right},N.createElement("div",{style:g.rightInside})))},use=function(g){var i=g.onClick,I=g.label,n=g.children,r=g.active,C=$t({default:{button:{backgroundImage:"linear-gradient(-180deg, #FFFFFF 0%, #E6E6E6 100%)",border:"1px solid #878787",borderRadius:"2px",height:"20px",boxShadow:"0 1px 0 0 #EAEAEA",fontSize:"14px",color:"#000",lineHeight:"20px",textAlign:"center",marginBottom:"10px",cursor:"pointer"}},active:{button:{boxShadow:"0 0 0 1px #878787"}}},{active:r});return N.createElement("div",{style:C.button,onClick:i},I||n)},LQt=function(g){var i=g.rgb,I=g.currentColor,n=$t({default:{swatches:{border:"1px solid #B3B3B3",borderBottom:"1px solid #F0F0F0",marginBottom:"2px",marginTop:"1px"},new:{height:"34px",background:"rgb("+i.r+","+i.g+", "+i.b+")",boxShadow:"inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 1px 0 #000"},current:{height:"34px",background:I,boxShadow:"inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 -1px 0 #000"},label:{fontSize:"14px",color:"#000",textAlign:"center"}}});return N.createElement("div",null,N.createElement("div",{style:n.label},"new"),N.createElement("div",{style:n.swatches},N.createElement("div",{style:n.new}),N.createElement("div",{style:n.current})),N.createElement("div",{style:n.label},"current"))},UQt=function(){function e(g,i){for(var I=0;I100&&(A.a=100),A.a/=100,i({h:n.h,s:n.s,l:n.l,a:A.a,source:"rgb"},l))};return N.createElement("div",{style:o.fields,className:"flexbox-fix"},N.createElement("div",{style:o.double},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"hex",value:r.replace("#",""),onChange:a})),N.createElement("div",{style:o.single},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"r",value:I.r,onChange:a,dragLabel:"true",dragMax:"255"})),N.createElement("div",{style:o.single},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"g",value:I.g,onChange:a,dragLabel:"true",dragMax:"255"})),N.createElement("div",{style:o.single},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"b",value:I.b,onChange:a,dragLabel:"true",dragMax:"255"})),N.createElement("div",{style:o.alpha},N.createElement(Sg,{style:{input:o.input,label:o.label},label:"a",value:Math.round(I.a*100),onChange:a,dragLabel:"true",dragMax:"100"})))},e4t=Object.assign||function(e){for(var g=1;g=0||Object.prototype.hasOwnProperty.call(e,I)&&(i[I]=e[I]);return i}var $V=24,o4t=ZXe.default=function(e){var g=e.fill,i=g===void 0?"currentColor":g,I=e.width,n=I===void 0?$V:I,r=e.height,C=r===void 0?$V:r,o=e.style,a=o===void 0?{}:o,s=C4t(e,["fill","width","height","style"]);return hse.default.createElement("svg",dse({viewBox:"0 0 "+$V+" "+$V,style:dse({fill:i,width:n,height:C},a)},s),hse.default.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))},a4t=function(g){var i=g.color,I=g.onClick,n=I===void 0?function(){}:I,r=g.onSwatchHover,C=g.first,o=g.last,a=g.active,s=$t({default:{color:{width:"40px",height:"24px",cursor:"pointer",background:i,marginBottom:"1px"},check:{color:b$(i),marginLeft:"8px",display:"none"}},first:{color:{overflow:"hidden",borderRadius:"2px 2px 0 0"}},last:{color:{overflow:"hidden",borderRadius:"0 0 2px 2px"}},active:{check:{display:"block"}},"color-#FFFFFF":{color:{boxShadow:"inset 0 0 0 1px #ddd"},check:{color:"#333"}},transparent:{check:{color:"#333"}}},{first:C,last:o,active:a,"color-#FFFFFF":i==="#FFFFFF",transparent:i==="transparent"});return N.createElement(Zm,{color:i,style:s.color,onClick:n,onHover:r,focusStyle:{boxShadow:"0 0 4px "+i}},N.createElement("div",{style:s.check},N.createElement(o4t,null)))},A4t=function(g){var i=g.onClick,I=g.onSwatchHover,n=g.group,r=g.active,C=$t({default:{group:{paddingBottom:"10px",width:"40px",float:"left",marginRight:"10px"}}});return N.createElement("div",{style:C.group},mu(n,function(o,a){return N.createElement(a4t,{key:o,color:o,active:o.toLowerCase()===r,first:a===0,last:a===n.length-1,onClick:i,onSwatchHover:I})}))},W$=function(g){var i=g.width,I=g.height,n=g.onChange,r=g.onSwatchHover,C=g.colors,o=g.hex,a=g.styles,s=a===void 0?{}:a,A=g.className,l=A===void 0?"":A,c=$t(Lr({default:{picker:{width:i,height:I},overflow:{height:I,overflowY:"scroll"},body:{padding:"16px 0 6px 16px"},clear:{clear:"both"}}},s)),u=function(h,m){return n({hex:h,source:"hex"},m)};return N.createElement("div",{style:c.picker,className:"swatches-picker "+l},N.createElement(Kw,null,N.createElement("div",{style:c.overflow},N.createElement("div",{style:c.body},mu(C,function(d){return N.createElement(A4t,{key:d.toString(),group:d,active:o,onClick:u,onSwatchHover:r})}),N.createElement("div",{style:c.clear})))))};W$.propTypes={width:L.oneOfType([L.string,L.number]),height:L.oneOfType([L.string,L.number]),colors:L.arrayOf(L.arrayOf(L.string)),styles:L.object};W$.defaultProps={width:320,height:240,colors:[[Gf[900],Gf[700],Gf[500],Gf[300],Gf[100]],[vf[900],vf[700],vf[500],vf[300],vf[100]],[Bf[900],Bf[700],Bf[500],Bf[300],Bf[100]],[Sf[900],Sf[700],Sf[500],Sf[300],Sf[100]],[wf[900],wf[700],wf[500],wf[300],wf[100]],[Rf[900],Rf[700],Rf[500],Rf[300],Rf[100]],[Vf[900],Vf[700],Vf[500],Vf[300],Vf[100]],[Wf[900],Wf[700],Wf[500],Wf[300],Wf[100]],[Xf[900],Xf[700],Xf[500],Xf[300],Xf[100]],["#194D33",fG[700],fG[500],fG[300],fG[100]],[Hf[900],Hf[700],Hf[500],Hf[300],Hf[100]],[Tf[900],Tf[700],Tf[500],Tf[300],Tf[100]],[Nf[900],Nf[700],Nf[500],Nf[300],Nf[100]],[kf[900],kf[700],kf[500],kf[300],kf[100]],[Yf[900],Yf[700],Yf[500],Yf[300],Yf[100]],[Kf[900],Kf[700],Kf[500],Kf[300],Kf[100]],[Ff[900],Ff[700],Ff[500],Ff[300],Ff[100]],[Df[900],Df[700],Df[500],Df[300],Df[100]],["#000000","#525252","#969696","#D9D9D9","#FFFFFF"]],styles:{}};Ur(W$);var X$=function(g){var i=g.onChange,I=g.onSwatchHover,n=g.hex,r=g.colors,C=g.width,o=g.triangle,a=g.styles,s=a===void 0?{}:a,A=g.className,l=A===void 0?"":A,c=$t(Lr({default:{card:{width:C,background:"#fff",border:"0 solid rgba(0,0,0,0.25)",boxShadow:"0 1px 4px rgba(0,0,0,0.25)",borderRadius:"4px",position:"relative"},body:{padding:"15px 9px 9px 15px"},label:{fontSize:"18px",color:"#fff"},triangle:{width:"0px",height:"0px",borderStyle:"solid",borderWidth:"0 9px 10px 9px",borderColor:"transparent transparent #fff transparent",position:"absolute"},triangleShadow:{width:"0px",height:"0px",borderStyle:"solid",borderWidth:"0 9px 10px 9px",borderColor:"transparent transparent rgba(0,0,0,.1) transparent",position:"absolute"},hash:{background:"#F0F0F0",height:"30px",width:"30px",borderRadius:"4px 0 0 4px",float:"left",color:"#98A1A4",display:"flex",alignItems:"center",justifyContent:"center"},input:{width:"100px",fontSize:"14px",color:"#666",border:"0px",outline:"none",height:"28px",boxShadow:"inset 0 0 0 1px #F0F0F0",boxSizing:"content-box",borderRadius:"0 4px 4px 0",float:"left",paddingLeft:"8px"},swatch:{width:"30px",height:"30px",float:"left",borderRadius:"4px",margin:"0 6px 6px 0"},clear:{clear:"both"}},"hide-triangle":{triangle:{display:"none"},triangleShadow:{display:"none"}},"top-left-triangle":{triangle:{top:"-10px",left:"12px"},triangleShadow:{top:"-11px",left:"12px"}},"top-right-triangle":{triangle:{top:"-10px",right:"12px"},triangleShadow:{top:"-11px",right:"12px"}}},s),{"hide-triangle":o==="hide","top-left-triangle":o==="top-left","top-right-triangle":o==="top-right"}),u=function(h,m){fu(h)&&i({hex:h,source:"hex"},m)};return N.createElement("div",{style:c.card,className:"twitter-picker "+l},N.createElement("div",{style:c.triangleShadow}),N.createElement("div",{style:c.triangle}),N.createElement("div",{style:c.body},mu(r,function(d,h){return N.createElement(Zm,{key:h,color:d,hex:d,style:c.swatch,onClick:u,onHover:I,focusStyle:{boxShadow:"0 0 4px "+d}})}),N.createElement("div",{style:c.hash},"#"),N.createElement(Sg,{label:null,style:{input:c.input},value:n.replace("#",""),onChange:u}),N.createElement("div",{style:c.clear})))};X$.propTypes={width:L.oneOfType([L.string,L.number]),triangle:L.oneOf(["hide","top-left","top-right"]),colors:L.arrayOf(L.string),styles:L.object};X$.defaultProps={width:276,colors:["#FF6900","#FCB900","#7BDCB5","#00D084","#8ED1FC","#0693E3","#ABB8C3","#EB144C","#F78DA7","#9900EF"],triangle:"top-left",styles:{}};Ur(X$);var H$=function(g){var i=$t({default:{picker:{width:"20px",height:"20px",borderRadius:"22px",border:"2px #fff solid",transform:"translate(-12px, -13px)",background:"hsl("+Math.round(g.hsl.h)+", "+Math.round(g.hsl.s*100)+"%, "+Math.round(g.hsl.l*100)+"%)"}}});return N.createElement("div",{style:i.picker})};H$.propTypes={hsl:L.shape({h:L.number,s:L.number,l:L.number,a:L.number})};H$.defaultProps={hsl:{a:1,h:249.94,l:.2,s:.5}};var T$=function(g){var i=$t({default:{picker:{width:"20px",height:"20px",borderRadius:"22px",transform:"translate(-10px, -7px)",background:"hsl("+Math.round(g.hsl.h)+", 100%, 50%)",border:"2px white solid"}}});return N.createElement("div",{style:i.picker})};T$.propTypes={hsl:L.shape({h:L.number,s:L.number,l:L.number,a:L.number})};T$.defaultProps={hsl:{a:1,h:249.94,l:.2,s:.5}};var s4t=function(g){var i=g.onChange,I=g.rgb,n=g.hsl,r=g.hex,C=g.hsv,o=function(u,d){if(u.hex)fu(u.hex)&&i({hex:u.hex,source:"hex"},d);else if(u.rgb){var h=u.rgb.split(",");Bx(u.rgb,"rgb")&&i({r:h[0],g:h[1],b:h[2],a:1,source:"rgb"},d)}else if(u.hsv){var m=u.hsv.split(",");Bx(u.hsv,"hsv")&&(m[2]=m[2].replace("%",""),m[1]=m[1].replace("%",""),m[0]=m[0].replace("°",""),m[1]==1?m[1]=.01:m[2]==1&&(m[2]=.01),i({h:Number(m[0]),s:Number(m[1]),v:Number(m[2]),source:"hsv"},d))}else if(u.hsl){var f=u.hsl.split(",");Bx(u.hsl,"hsl")&&(f[2]=f[2].replace("%",""),f[1]=f[1].replace("%",""),f[0]=f[0].replace("°",""),l[1]==1?l[1]=.01:l[2]==1&&(l[2]=.01),i({h:Number(f[0]),s:Number(f[1]),v:Number(f[2]),source:"hsl"},d))}},a=$t({default:{wrap:{display:"flex",height:"100px",marginTop:"4px"},fields:{width:"100%"},column:{paddingTop:"10px",display:"flex",justifyContent:"space-between"},double:{padding:"0px 4.4px",boxSizing:"border-box"},input:{width:"100%",height:"38px",boxSizing:"border-box",padding:"4px 10% 3px",textAlign:"center",border:"1px solid #dadce0",fontSize:"11px",textTransform:"lowercase",borderRadius:"5px",outline:"none",fontFamily:"Roboto,Arial,sans-serif"},input2:{height:"38px",width:"100%",border:"1px solid #dadce0",boxSizing:"border-box",fontSize:"11px",textTransform:"lowercase",borderRadius:"5px",outline:"none",paddingLeft:"10px",fontFamily:"Roboto,Arial,sans-serif"},label:{textAlign:"center",fontSize:"12px",background:"#fff",position:"absolute",textTransform:"uppercase",color:"#3c4043",width:"35px",top:"-6px",left:"0",right:"0",marginLeft:"auto",marginRight:"auto",fontFamily:"Roboto,Arial,sans-serif"},label2:{left:"10px",textAlign:"center",fontSize:"12px",background:"#fff",position:"absolute",textTransform:"uppercase",color:"#3c4043",width:"32px",top:"-6px",fontFamily:"Roboto,Arial,sans-serif"},single:{flexGrow:"1",margin:"0px 4.4px"}}}),s=I.r+", "+I.g+", "+I.b,A=Math.round(n.h)+"°, "+Math.round(n.s*100)+"%, "+Math.round(n.l*100)+"%",l=Math.round(C.h)+"°, "+Math.round(C.s*100)+"%, "+Math.round(C.v*100)+"%";return N.createElement("div",{style:a.wrap,className:"flexbox-fix"},N.createElement("div",{style:a.fields},N.createElement("div",{style:a.double},N.createElement(Sg,{style:{input:a.input,label:a.label},label:"hex",value:r,onChange:o})),N.createElement("div",{style:a.column},N.createElement("div",{style:a.single},N.createElement(Sg,{style:{input:a.input2,label:a.label2},label:"rgb",value:s,onChange:o})),N.createElement("div",{style:a.single},N.createElement(Sg,{style:{input:a.input2,label:a.label2},label:"hsv",value:l,onChange:o})),N.createElement("div",{style:a.single},N.createElement(Sg,{style:{input:a.input2,label:a.label2},label:"hsl",value:A,onChange:o})))))},N$=function(g){var i=g.width,I=g.onChange,n=g.rgb,r=g.hsl,C=g.hsv,o=g.hex,a=g.header,s=g.styles,A=s===void 0?{}:s,l=g.className,c=l===void 0?"":l,u=$t(Lr({default:{picker:{width:i,background:"#fff",border:"1px solid #dfe1e5",boxSizing:"initial",display:"flex",flexWrap:"wrap",borderRadius:"8px 8px 0px 0px"},head:{height:"57px",width:"100%",paddingTop:"16px",paddingBottom:"16px",paddingLeft:"16px",fontSize:"20px",boxSizing:"border-box",fontFamily:"Roboto-Regular,HelveticaNeue,Arial,sans-serif"},saturation:{width:"70%",padding:"0px",position:"relative",overflow:"hidden"},swatch:{width:"30%",height:"228px",padding:"0px",background:"rgba("+n.r+", "+n.g+", "+n.b+", 1)",position:"relative",overflow:"hidden"},body:{margin:"auto",width:"95%"},controls:{display:"flex",boxSizing:"border-box",height:"52px",paddingTop:"22px"},color:{width:"32px"},hue:{height:"8px",position:"relative",margin:"0px 16px 0px 16px",width:"100%"},Hue:{radius:"2px"}}},A));return N.createElement("div",{style:u.picker,className:"google-picker "+c},N.createElement("div",{style:u.head},a),N.createElement("div",{style:u.swatch}),N.createElement("div",{style:u.saturation},N.createElement(qk,{hsl:r,hsv:C,pointer:H$,onChange:I})),N.createElement("div",{style:u.body},N.createElement("div",{style:u.controls,className:"flexbox-fix"},N.createElement("div",{style:u.hue},N.createElement(dy,{style:u.Hue,hsl:r,radius:"4px",pointer:T$,onChange:I}))),N.createElement(s4t,{rgb:n,hsl:r,hex:o,hsv:C,onChange:I})))};N$.propTypes={width:L.oneOfType([L.string,L.number]),styles:L.object,header:L.string};N$.defaultProps={width:652,styles:{},header:"Color picker"};Ur(N$);function l4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function mse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function $2(e){return $2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},$2(e)}let GXe=function(e){h4t(i,e);var g=m4t(i);function i(I){var n;l4t(this,i),n=g.call(this,I);const r=Rb(I.color);return n.state={displayColorPicker:!1,color:{r:r.r,g:r.g,b:r.b,a:r.opacity}},n}return c4t(i,[{key:"handleClick",value:function(){this.setState(n=>({displayColorPicker:!n.displayColorPicker}))}},{key:"handleClose",value:function(){this.setState({displayColorPicker:!1})}},{key:"handleChange",value:function(n){const r=n.rgb,C=`rgba(${r.r},${r.g},${r.b},${r.a})`;this.props.onChange(C),this.setState({color:n.rgb})}},{key:"render",value:function(){const n=$t({default:{color:{width:"32px",height:"14px",borderRadius:"2px",background:`rgba(${this.state.color.r}, ${this.state.color.g}, ${this.state.color.b}, ${this.state.color.a})`},swatch:{padding:"5px",background:"#fff",cursor:"pointer",borderRadius:"1px"},popover:{position:"absolute",zIndex:"2"},cover:{position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}}});return N.createElement("div",null,N.createElement("div",{onClick:this.handleClick.bind(this),style:n.swatch},N.createElement("div",{style:n.color})),this.state.displayColorPicker?N.createElement("div",{style:n.popover},N.createElement("div",{onClick:this.handleClose.bind(this),style:n.cover}),N.createElement(g4t,{color:this.state.color,onChange:this.handleChange.bind(this)})):null)}}]),i}(N.Component);GXe.propTypes={color:L.string,onChange:L.func};function y4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function fse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function q2(e){return q2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},q2(e)}let yO=function(e){B4t(i,e);var g=S4t(i);function i(I){var n;return y4t(this,i),n=g.call(this,I),n.state={colors:I.track.options.colorRange.slice()},n}return Z4t(i,[{key:"handleColorsChanged",value:function(n){this.setState({colors:n})}},{key:"handleSubmit",value:function(){const n=this.props.track.options;n.colorRange=this.state.colors,this.props.onSubmit(this.props.track.options)}},{key:"handleAddColor",value:function(){this.setState(n=>({colors:n.colors.concat(n.colors[n.colors.length-1])}))}},{key:"handleRemoveColor",value:function(n){this.setState(r=>({colors:r.colors.slice(0,n).concat(r.colors.slice(n+1))}))}},{key:"render",value:function(){const n=JSON.parse(JSON.stringify(this.props.track)),r=Object.assign(n,{options:{colorRange:this.state.colors}}),C={editable:!1,zoomFixed:!0,views:[{uid:`hmo-${this.props.track.uid}`,initialXDomain:this.props.xScale?this.props.xScale.domain():[0,1],initialYDomain:this.props.yScale?this.props.yScale.domain():[0,1],tracks:{center:[r]},layout:{x:0,y:0,h:12,w:12,i:`hmo-${this.props.track.id}`}}]},o=this.state.colors.map((s,A)=>{const l=this.state.colors.length>2&&A===this.state.colors.length-1?N.createElement("div",{onClick:()=>this.handleRemoveColor(A),style:{background:"white",position:"absolute",top:0,right:0,opacity:1,width:14,height:14,borderRadius:2,cursor:"pointer"}},N.createElement("svg",{height:"10px",style:{position:"absolute",top:2,right:2,opacity:.5,width:10,height:10}},N.createElement("use",{xlinkHref:"#cross"}))):null;return N.createElement("div",{key:`l${A}`,style:{borderRadius:"1px",boxShadow:"0 0 0 1px #E5E5E5",position:"relative",outline:"none"}},l,N.createElement(GXe,{key:A,color:this.state.colors[A],onChange:c=>{this.setState(u=>{const d=u.colors.slice();return d[A]=c,{colors:d}},()=>{this.handleColorsChanged(this.state.colors)})}}))}).reverse(),a=this.state.colors.length<10?N.createElement("div",{onClick:this.handleAddColor.bind(this),style:{position:"relative",outline:"none",height:"25px",padding:"5px",background:"#fff",borderRadius:"1px",boxShadow:"0 0 0 1px #E5E5E5",cursor:"pointer"}},N.createElement("div",{style:{textAlign:"center",width:"32px",height:"14px"}},N.createElement("svg",{height:"100%",style:{opacity:.5,margin:"auto",display:"block"},width:"10px"},N.createElement("use",{xlinkHref:"#plus"})))):null;return N.createElement(ww,{okayTitle:"Submit",onCancel:this.props.onCancel,onOkay:this.handleSubmit.bind(this),title:"Custom Color Map"},N.createElement("table",{className:"table-track-options"},N.createElement("thead",null),N.createElement("tbody",{style:{verticalAlign:"top"}},N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},N.createElement("table",null,N.createElement("tbody",null,N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},"Preview")),N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},N.createElement("div",{style:{width:200}},N.createElement(my,{options:{bounded:!1},viewConfig:C}))))))),N.createElement("td",{className:"td-track-options"},N.createElement("table",null,N.createElement("tbody",null,N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},"Colors")),N.createElement("tr",null,N.createElement("td",{className:"td-track-options"},a,N.createElement("div",{style:{position:"relative"}},o))))))))))}}]),i}(N.Component);yO.propTypes={handleCancel:L.func,onCancel:L.func,onSubmit:L.func,track:L.object,xScale:L.object,yScale:L.object};const pse=e=>{if(!e.header)return[];const g=e.header.split(" "),i=[];for(let I=0;Ie.reduce((I,n)=>(I[n]={name:`${n*i}${g}`,value:n},I),{}),jr={yes:{name:"Yes",value:!0},no:{name:"No",value:!1}},ki={black:{name:"Black",value:"black"},blue:{name:"Blue",value:"blue"},brown:{name:"Brown",value:"brown"},cyan:{name:"Cyan",value:"cyan"},green:{name:"Green",value:"green"},grey:{name:"Grey",value:"grey"},orange:{name:"Orange",value:"orange"},purple:{name:"Purple",value:"purple"},turquoise:{name:"Turquoise",value:"turquoise"},red:{name:"Red",value:"red"},white:{name:"White",value:"white"}},W4t={use_stroke:{name:"Glyph color",value:"[glyph-color]"}},pG=h0([1,2,3,5,8,13,21]),X4t=Object.assign(pG,{none:{name:"none",value:"none"}}),qV=h0([0,2,4,8,16,32,64,128,256]),wl=h0([0,.2,.4,.6,.8,1],"%",100),H4t=h0([.2,.4,.6,.8,1],"%",100),an={axisLabelFormatting:{name:"Axis Label Formatting",inlineOptions:{normal:{name:"normal",value:"normal"},scientific:{name:"scientific",value:"scientific"}}},flipDiagonal:{name:"Flip Across Diagonal",inlineOptions:{none:{name:"No",value:"none"},yes:{name:"Yes",value:"yes"},copy:{name:"Copy",value:"copy"}}},heatmapValueScaling:{name:"Value Scaling",inlineOptions:{linear:{name:"Linear",value:"linear"},log:{name:"Log",value:"log"}}},valueScaling:{name:"Value Scaling",inlineOptions:{linear:{name:"Linear",value:"linear"},log:{name:"Log",value:"log"}}},extent:{name:"Extent",inlineOptions:{full:{name:"Full",value:"full"},upperRight:{name:"Upper Right",value:"upper-right"},lowerLeft:{name:"Lower Left",value:"lower-left"}}},labelLeftMargin:{name:"Label Left Margin",inlineOptions:qV},labelRightMargin:{name:"Label Right Margin",inlineOptions:qV},labelTopMargin:{name:"Label Top Margin",inlineOptions:qV},labelBottomMargin:{name:"Label Bottom Margin",inlineOptions:qV},labelShowResolution:{name:"Label Show Resolution",inlineOptions:jr},labelShowAssembly:{name:"Label Show Assembly",inlineOptions:jr},lineStrokeWidth:{name:"Stroke Width",inlineOptions:pG},strokeWidth:{name:"Stroke Width",inlineOptions:pG},trackBorderWidth:{name:"Track Border Width",inlineOptions:pG},separatePlusMinusStrands:{name:"Separate +/- strands",inlineOptions:jr},sortLargestOnTop:{name:"Sort Largest On Top",inlineOptions:jr},showTexts:{name:"Show texts",inlineOptions:jr},staggered:{name:"Staggered",inlineOptions:jr},minSquareSize:{name:"Minimum size",inlineOptions:X4t},pointSize:{name:"Point Size",inlineOptions:pG},pointColor:{name:"Point Color",inlineOptions:ki},trackBorderColor:{name:"Track Border Color",inlineOptions:ki},backgroundColor:{name:"Background Color",inlineOptions:{white:{name:"White",value:"white"},lightGrey:{name:"Light Grey",value:"#eeeeee"},grey:{name:"Grey",value:"#cccccc"},black:{name:"Black",value:"black"},transparent:{name:"Transparent",value:"transparent"}}},colorScale:{name:"Color Scale",inlineOptions:{epilogos:{name:"Epilogos",values:["#FF0000","#FF4500","#32CD32","#008000","#006400","#C2E105","#FFFF00","#66CDAA","#8A91D0","#CD5C5C","#E9967A","#BDB76B","#808080","#C0C0C0","#FFFFFF"]},category10:{name:"D3 Category10",values:["#1F77B4","#FF7F0E","#2CA02C","#D62728","#9467BD","#8C564B","#E377C2","#7F7F7F","#BCBD22","#17BECF"]}}},minusStrandColor:{name:"- Strand Color",inlineOptions:ki},plusStrandColor:{name:"+ Strand Color",inlineOptions:ki},lineStrokeColor:{name:"Stroke color",inlineOptions:ki},projectionStrokeColor:{name:"Stroke color",inlineOptions:ki},projectionFillColor:{name:"Fill color",inlineOptions:ki},stroke:{name:"Stroke Color",inlineOptions:ki},strokeColor:{name:"Stroke color",inlineOptions:ki},fill:{name:"Fill Color",inlineOptions:ki},color:{name:"Color",inlineOptions:ki},fontColor:{name:"Font color",inlineOptions:ki},fillColor:{name:"Fill color",inlineOptions:ki},barFillColor:{name:"Fill color",inlineOptions:ki},barFillColorTop:{name:"Top Fill color",inlineOptions:ki},barFillColorBottom:{name:"Bottom Fill color",inlineOptions:ki},barOpacity:{name:"Bar opacity",inlineOptions:wl},zeroLineVisible:{name:"Zero line visible",inlineOptions:jr},zeroLineColor:{name:"Zero line color",inlineOptions:ki},zeroLineOpacity:{name:"Zero line opacity",inlineOptions:H4t},fillOpacity:{name:"Fill Opacity",inlineOptions:wl},strokeOpacity:{name:"Stroke Opacity",inlineOptions:wl},strokePos:{name:"Stroke Position",inlineOptions:{aroundInner:{name:"Around Inner",value:"around"},aroundCenter:{name:"Around Center",value:null},hidden:{name:"Hidden",value:"hidden"},top:{name:"Top",value:"top"},right:{name:"Right",value:"right"},bottom:{name:"Bottom",value:"bottom"},left:{name:"Left",value:"left"}}},barBorder:{name:"Bar border",inlineOptions:jr},scaledHeight:{name:"Scaled height",inlineOptions:jr},rectangleDomainStrokeColor:{name:"Stroke color",inlineOptions:ki},rectangleDomainFillColor:{name:"Fill color",inlineOptions:ki},rectangleDomainFillOpacity:{name:"Fill opacity",inlineOptions:wl},rectangleDomainOpacity:{name:"Opacity",inlineOptions:wl},mapboxStyle:{name:"Map style",inlineOptions:{streets:{name:"streets",value:"mapbox.streets"},light:{name:"light",value:"mapbox.light"},dark:{name:"dark",value:"mapbox.dark"},satellite:{name:"satellite",value:"mapbox.satellite"},"streets-satellite":{name:"streets-satellite",value:"mapbox.streets-satellite"},wheatpaste:{name:"wheatpaste",value:"mapbox.wheatpaste"},"streets-basic":{name:"streets-basic",value:"mapbox.streets-basic"},comic:{name:"comic",value:"mapbox.comic"},outdoors:{name:"outdoors",value:"mapbox.outdoors"},"run-bike-hike":{name:"run-bike-hike",value:"mapbox.run-bike-hike"},pencil:{name:"pencil",value:"mapbox.pencil"},pirates:{name:"pirates",value:"mapbox.pirates"},emerald:{name:"emerald",value:"mapbox.emerald"},"high-contrast":{name:"high-contrast",value:"mapbox.high-contrast"}}},oneDHeatmapFlipped:{name:"Flip Heatmap",inlineOptions:{yes:{name:"Yes",value:"yes"},no:{name:"No",value:null}}},showMousePosition:{name:"Show Mouse Position",inlineOptions:jr},showTooltip:{name:"Show Tooltip",inlineOptions:jr},fontSize:{name:"Font Size",inlineOptions:h0([8,9,10,11,12,14,16,18,24],"px")},tickPositions:{name:"Tick Positions",inlineOptions:{even:{name:"Even",value:"even"},ends:{name:"Ends",value:"ends"}}},tickFormat:{name:"Tick Format",inlineOptions:{plain:{name:"Plain",value:"plain"},si:{name:"SI",value:"si"}}},colorEncoding:{name:"Color Encode Annotations",inlineOptions:{none:{name:"None",value:null},itemRgb:{name:"itemRgb",value:"itemRgb"}},generateOptions:pse},fontIsAligned:{name:"Left-Align Font",inlineOptions:jr},axisPositionHorizontal:{name:"Axis Position",inlineOptions:{left:{name:"Left",value:"left"},outsideLeft:{name:"Outside left",value:"outsideLeft"},right:{name:"Right",value:"right"},outsideRight:{name:"Outside right",value:"outsideRight"},hidden:{name:"Hidden",value:null}}},axisPositionVertical:{name:"Axis Position",inlineOptions:{top:{name:"Top",value:"top"},outsideTop:{name:"Outside top",value:"outsideTop"},bottom:{name:"Bottom",value:"bottom"},outsideBottom:{name:"Outside bottom",value:"outsideBottom"},hidden:{name:"Hidden",value:null}}},axisMargin:{name:"Axis Margin",inlineOptions:h0([0,10,20,30,40,50,100,200,400],"px")},colorbarPosition:{name:"Colorbar Position",inlineOptions:{topLeft:{name:"Top Left",value:"topLeft"},topRight:{name:"Top Right",value:"topRight"},bottomLeft:{name:"Bottom Left",value:"bottomLeft"},bottomRight:{name:"Bottom Right",value:"bottomRight"},hidden:{name:"Hidden",value:null}}},colorbarBackgroundColor:{name:"Colorbar Background Color",inlineOptions:ki},colorbarBackgroundOpacity:{name:"Colorbar Background Opacity",inlineOptions:wl},colorbarLabelsPosition:{name:"Colorbar Labels Position",inlineOptions:{inside:{name:"Inside",value:"inside"},outside:{name:"Outside",value:"outside"}}},labelColor:{name:"Label Color",inlineOptions:{...ki,...W4t}},labelPosition:{name:"Label Position",inlineOptions:{ol:{name:"Outer left",value:"outerLeft"},or:{name:"Outer right",value:"outerRight"},ot:{name:"Outer top",value:"outerTop"},ob:{name:"Outer bottom",value:"outerBottom"},tl:{name:"Top left",value:"topLeft"},tr:{name:"Top right",value:"topRight"},bl:{name:"Bottom left",value:"bottomLeft"},br:{name:"Bottom right",value:"bottomRight"},hidden:{name:"Hidden",value:"hidden"}}},labelTextOpacity:{name:"Label Text Opacity",inlineOptions:wl},geneAnnotationHeight:{name:"Gene Annotation Height",inlineOptions:{8:{name:"8px",value:8},10:{name:"10px",value:10},12:{name:"12px",value:12},16:{name:"16px",value:16}}},annotationHeight:{name:"Annotation Height",inlineOptions:{5:{name:"5px",value:5},8:{name:"8px",value:8},10:{name:"10px",value:10},12:{name:"12px",value:12},16:{name:"16px",value:16},20:{name:"20px",value:20},scaled:{name:"scaled",value:"scaled"}}},maxAnnotationHeight:{name:"Max Annotation Height",inlineOptions:{5:{name:"5px",value:5},8:{name:"8px",value:8},10:{name:"10px",value:10},12:{name:"12px",value:12},16:{name:"16px",value:16},20:{name:"20px",value:20},none:{name:"none",value:null}}},annotationStyle:{name:"Annotation Style",inlineOptions:{box:{name:"Box",value:"box"},segment:{name:"Segment",value:"segment"}}},geneLabelPosition:{name:"Gene Label Position",inlineOptions:{inside:{name:"Inside",value:"inside"},outside:{name:"Outside",value:"outside"}}},geneStrandSpacing:{name:"Gene Strand Spacing",inlineOptions:{2:{name:"2px",value:2},4:{name:"4px",value:4},8:{name:"8px",value:8}}},labelBackgroundColor:{name:"Label Background Color",inlineOptions:ki},labelBackgroundOpacity:{name:"Label Background Opacity",inlineOptions:wl},viewResolution:{name:"View Resolution",inlineOptions:{high:{name:"High",value:384},medium:{name:"Medium",value:1024},low:{name:"Low",value:2048}}},colorRange:{name:"Color map",inlineOptions:{afmhot:{name:"afmhot",value:["rgba(0,0,0,1.0)","rgba(128,0,0,1.0)","rgba(256,129,1,1.0)","rgba(256,256,129,1.0)","rgba(256,256,256,1.0)"]},fall:{name:"fall",value:["white","rgba(245,166,35,1.0)","rgba(208,2,27,1.0)","black"]},hot:{name:"hot",value:["rgba(10,0,0,1.0)","rgba(179,0,0,1.0)","rgba(256,91,0,1.0)","rgba(256,256,6,1.0)","rgba(256,256,256,1.0)"]},jet:{name:"jet",value:["rgba(0,0,128,1.0)","rgba(0,129,256,1.0)","rgba(125,256,122,1.0)","rgba(256,148,0,1.0)","rgba(128,0,0,1.0)"]},bwr:{name:"bwr",value:["rgba(0,0,256,1.0)","rgba(128,128,256,1.0)","rgba(256,254,254,1.0)","rgba(256,126,126,1.0)","rgba(256,0,0,1.0)"]},cubehelix:{name:"cubehelix",value:["rgba(0,0,0,1.0)","rgba(21,83,76,1.0)","rgba(162,121,74,1.0)","rgba(199,180,238,1.0)","rgba(256,256,256,1.0)"]},rainbow:{name:"rainbow",value:["rgba(128,0,256,1.0)","rgba(0,181,236,1.0)","rgba(129,255,180,1.0)","rgba(256,179,96,1.0)","rgba(256,0,0,1.0)"]},gray:{name:"greys",value:["rgba(255,255,255,1)","rgba(0,0,0,1)"]},red:{name:"White to red",value:["rgba(255,255,255,1)","rgba(255,0,0,1)"]},green:{name:"White to green",value:["rgba(255,255,255,1)","rgba(0,255,0,1)"]},blue:{name:"White to blue",value:["rgba(255,255,255,1)","rgba(0,0,255,1)"]},custard:{name:"custard",value:["#FFFFFF","#F8E71C","rgba(245,166,35,1)","rgba(0,0,0,1)"]},magma:{name:"magma",value:["rgba(0,0,3,1)","rgba(0,0,4,1)","rgba(0,0,6,1)","rgba(1,0,7,1)","rgba(1,1,9,1)","rgba(1,1,11,1)","rgba(2,2,13,1)","rgba(2,2,15,1)","rgba(3,3,17,1)","rgba(4,3,19,1)","rgba(4,4,21,1)","rgba(5,4,23,1)","rgba(6,5,25,1)","rgba(7,5,27,1)","rgba(8,6,29,1)","rgba(9,7,32,1)","rgba(10,7,34,1)","rgba(11,8,36,1)","rgba(12,9,38,1)","rgba(13,10,40,1)","rgba(14,10,42,1)","rgba(15,11,45,1)","rgba(16,12,47,1)","rgba(17,12,49,1)","rgba(19,13,51,1)","rgba(20,13,54,1)","rgba(21,14,56,1)","rgba(22,14,58,1)","rgba(23,15,61,1)","rgba(25,15,63,1)","rgba(26,16,66,1)","rgba(27,16,68,1)","rgba(28,16,70,1)","rgba(30,17,73,1)","rgba(31,17,75,1)","rgba(33,17,78,1)","rgba(34,17,80,1)","rgba(36,17,83,1)","rgba(37,17,85,1)","rgba(39,17,87,1)","rgba(40,17,90,1)","rgba(42,17,92,1)","rgba(43,17,94,1)","rgba(45,17,97,1)","rgba(47,16,99,1)","rgba(49,16,101,1)","rgba(50,16,103,1)","rgba(52,16,105,1)","rgba(54,15,107,1)","rgba(55,15,108,1)","rgba(57,15,110,1)","rgba(59,15,112,1)","rgba(61,15,113,1)","rgba(62,15,114,1)","rgba(64,15,116,1)","rgba(66,15,117,1)","rgba(67,15,118,1)","rgba(69,15,119,1)","rgba(71,15,120,1)","rgba(72,16,120,1)","rgba(74,16,121,1)","rgba(76,16,122,1)","rgba(77,17,123,1)","rgba(79,17,123,1)","rgba(81,18,124,1)","rgba(82,18,124,1)","rgba(84,19,125,1)","rgba(85,20,125,1)","rgba(87,20,126,1)","rgba(88,21,126,1)","rgba(90,21,126,1)","rgba(92,22,127,1)","rgba(93,23,127,1)","rgba(95,23,127,1)","rgba(96,24,128,1)","rgba(98,25,128,1)","rgba(99,25,128,1)","rgba(101,26,128,1)","rgba(103,26,128,1)","rgba(104,27,129,1)","rgba(106,28,129,1)","rgba(107,28,129,1)","rgba(109,29,129,1)","rgba(110,30,129,1)","rgba(112,30,129,1)","rgba(113,31,129,1)","rgba(115,32,129,1)","rgba(117,32,129,1)","rgba(118,33,129,1)","rgba(120,33,129,1)","rgba(121,34,130,1)","rgba(123,35,130,1)","rgba(124,35,130,1)","rgba(126,36,130,1)","rgba(128,36,130,1)","rgba(129,37,129,1)","rgba(131,37,129,1)","rgba(132,38,129,1)","rgba(134,39,129,1)","rgba(136,39,129,1)","rgba(137,40,129,1)","rgba(139,40,129,1)","rgba(140,41,129,1)","rgba(142,41,129,1)","rgba(144,42,129,1)","rgba(145,42,129,1)","rgba(147,43,128,1)","rgba(148,43,128,1)","rgba(150,44,128,1)","rgba(152,44,128,1)","rgba(153,45,128,1)","rgba(155,46,127,1)","rgba(157,46,127,1)","rgba(158,47,127,1)","rgba(160,47,127,1)","rgba(161,48,126,1)","rgba(163,48,126,1)","rgba(165,49,126,1)","rgba(166,49,125,1)","rgba(168,50,125,1)","rgba(170,50,125,1)","rgba(171,51,124,1)","rgba(173,51,124,1)","rgba(175,52,123,1)","rgba(176,52,123,1)","rgba(178,53,123,1)","rgba(180,53,122,1)","rgba(181,54,122,1)","rgba(183,55,121,1)","rgba(185,55,121,1)","rgba(186,56,120,1)","rgba(188,56,120,1)","rgba(189,57,119,1)","rgba(191,57,118,1)","rgba(193,58,118,1)","rgba(194,59,117,1)","rgba(196,59,117,1)","rgba(198,60,116,1)","rgba(199,61,115,1)","rgba(201,61,115,1)","rgba(202,62,114,1)","rgba(204,63,113,1)","rgba(206,63,113,1)","rgba(207,64,112,1)","rgba(209,65,111,1)","rgba(210,66,110,1)","rgba(212,67,110,1)","rgba(213,67,109,1)","rgba(215,68,108,1)","rgba(216,69,107,1)","rgba(218,70,107,1)","rgba(219,71,106,1)","rgba(221,72,105,1)","rgba(222,73,104,1)","rgba(223,74,103,1)","rgba(225,75,103,1)","rgba(226,76,102,1)","rgba(227,78,101,1)","rgba(229,79,100,1)","rgba(230,80,100,1)","rgba(231,81,99,1)","rgba(232,83,98,1)","rgba(233,84,97,1)","rgba(234,85,97,1)","rgba(236,87,96,1)","rgba(237,88,95,1)","rgba(238,90,95,1)","rgba(239,91,94,1)","rgba(239,93,94,1)","rgba(240,95,93,1)","rgba(241,96,93,1)","rgba(242,98,93,1)","rgba(243,100,92,1)","rgba(243,101,92,1)","rgba(244,103,92,1)","rgba(245,105,92,1)","rgba(246,107,92,1)","rgba(246,108,92,1)","rgba(247,110,92,1)","rgba(247,112,92,1)","rgba(248,114,92,1)","rgba(248,116,92,1)","rgba(249,118,92,1)","rgba(249,120,92,1)","rgba(250,121,93,1)","rgba(250,123,93,1)","rgba(250,125,94,1)","rgba(251,127,94,1)","rgba(251,129,95,1)","rgba(251,131,95,1)","rgba(252,133,96,1)","rgba(252,135,97,1)","rgba(252,137,97,1)","rgba(252,139,98,1)","rgba(253,140,99,1)","rgba(253,142,100,1)","rgba(253,144,101,1)","rgba(253,146,102,1)","rgba(253,148,103,1)","rgba(254,150,104,1)","rgba(254,152,105,1)","rgba(254,154,106,1)","rgba(254,156,107,1)","rgba(254,157,108,1)","rgba(254,159,109,1)","rgba(254,161,110,1)","rgba(254,163,111,1)","rgba(254,165,112,1)","rgba(255,167,114,1)","rgba(255,169,115,1)","rgba(255,171,116,1)","rgba(255,172,118,1)","rgba(255,174,119,1)","rgba(255,176,120,1)","rgba(255,178,122,1)","rgba(255,180,123,1)","rgba(255,182,124,1)","rgba(255,184,126,1)","rgba(255,185,127,1)","rgba(255,187,129,1)","rgba(255,189,130,1)","rgba(255,191,132,1)","rgba(255,193,133,1)","rgba(255,195,135,1)","rgba(255,197,136,1)","rgba(255,198,138,1)","rgba(255,200,140,1)","rgba(255,202,141,1)","rgba(255,204,143,1)","rgba(254,206,144,1)","rgba(254,208,146,1)","rgba(254,209,148,1)","rgba(254,211,149,1)","rgba(254,213,151,1)","rgba(254,215,153,1)","rgba(254,217,155,1)","rgba(254,219,156,1)","rgba(254,220,158,1)","rgba(254,222,160,1)","rgba(254,224,162,1)","rgba(254,226,163,1)","rgba(253,228,165,1)","rgba(253,230,167,1)","rgba(253,231,169,1)","rgba(253,233,171,1)","rgba(253,235,172,1)","rgba(253,237,174,1)","rgba(253,239,176,1)","rgba(253,241,178,1)","rgba(253,242,180,1)","rgba(253,244,182,1)","rgba(253,246,184,1)","rgba(252,248,186,1)","rgba(252,250,188,1)","rgba(252,251,189,1)","rgba(252,253,191,1)"]},viridis:{name:"viridis",value:["rgba(68,1,84,1)","rgba(68,2,85,1)","rgba(69,3,87,1)","rgba(69,5,88,1)","rgba(69,6,90,1)","rgba(70,8,91,1)","rgba(70,9,93,1)","rgba(70,11,94,1)","rgba(70,12,96,1)","rgba(71,14,97,1)","rgba(71,15,98,1)","rgba(71,17,100,1)","rgba(71,18,101,1)","rgba(71,20,102,1)","rgba(72,21,104,1)","rgba(72,22,105,1)","rgba(72,24,106,1)","rgba(72,25,108,1)","rgba(72,26,109,1)","rgba(72,28,110,1)","rgba(72,29,111,1)","rgba(72,30,112,1)","rgba(72,32,113,1)","rgba(72,33,115,1)","rgba(72,34,116,1)","rgba(72,36,117,1)","rgba(72,37,118,1)","rgba(72,38,119,1)","rgba(72,39,120,1)","rgba(71,41,121,1)","rgba(71,42,121,1)","rgba(71,43,122,1)","rgba(71,44,123,1)","rgba(71,46,124,1)","rgba(70,47,125,1)","rgba(70,48,126,1)","rgba(70,49,126,1)","rgba(70,51,127,1)","rgba(69,52,128,1)","rgba(69,53,129,1)","rgba(69,54,129,1)","rgba(68,56,130,1)","rgba(68,57,131,1)","rgba(68,58,131,1)","rgba(67,59,132,1)","rgba(67,60,132,1)","rgba(67,62,133,1)","rgba(66,63,133,1)","rgba(66,64,134,1)","rgba(65,65,134,1)","rgba(65,66,135,1)","rgba(65,67,135,1)","rgba(64,69,136,1)","rgba(64,70,136,1)","rgba(63,71,136,1)","rgba(63,72,137,1)","rgba(62,73,137,1)","rgba(62,74,137,1)","rgba(61,75,138,1)","rgba(61,77,138,1)","rgba(60,78,138,1)","rgba(60,79,138,1)","rgba(59,80,139,1)","rgba(59,81,139,1)","rgba(58,82,139,1)","rgba(58,83,139,1)","rgba(57,84,140,1)","rgba(57,85,140,1)","rgba(56,86,140,1)","rgba(56,87,140,1)","rgba(55,88,140,1)","rgba(55,89,140,1)","rgba(54,91,141,1)","rgba(54,92,141,1)","rgba(53,93,141,1)","rgba(53,94,141,1)","rgba(52,95,141,1)","rgba(52,96,141,1)","rgba(51,97,141,1)","rgba(51,98,141,1)","rgba(51,99,141,1)","rgba(50,100,142,1)","rgba(50,101,142,1)","rgba(49,102,142,1)","rgba(49,103,142,1)","rgba(48,104,142,1)","rgba(48,105,142,1)","rgba(47,106,142,1)","rgba(47,107,142,1)","rgba(47,108,142,1)","rgba(46,109,142,1)","rgba(46,110,142,1)","rgba(45,111,142,1)","rgba(45,112,142,1)","rgba(45,112,142,1)","rgba(44,113,142,1)","rgba(44,114,142,1)","rgba(43,115,142,1)","rgba(43,116,142,1)","rgba(43,117,142,1)","rgba(42,118,142,1)","rgba(42,119,142,1)","rgba(41,120,142,1)","rgba(41,121,142,1)","rgba(41,122,142,1)","rgba(40,123,142,1)","rgba(40,124,142,1)","rgba(40,125,142,1)","rgba(39,126,142,1)","rgba(39,127,142,1)","rgba(38,128,142,1)","rgba(38,129,142,1)","rgba(38,130,142,1)","rgba(37,131,142,1)","rgba(37,131,142,1)","rgba(37,132,142,1)","rgba(36,133,142,1)","rgba(36,134,142,1)","rgba(35,135,142,1)","rgba(35,136,142,1)","rgba(35,137,142,1)","rgba(34,138,141,1)","rgba(34,139,141,1)","rgba(34,140,141,1)","rgba(33,141,141,1)","rgba(33,142,141,1)","rgba(33,143,141,1)","rgba(32,144,141,1)","rgba(32,145,140,1)","rgba(32,146,140,1)","rgba(32,147,140,1)","rgba(31,147,140,1)","rgba(31,148,140,1)","rgba(31,149,139,1)","rgba(31,150,139,1)","rgba(31,151,139,1)","rgba(30,152,139,1)","rgba(30,153,138,1)","rgba(30,154,138,1)","rgba(30,155,138,1)","rgba(30,156,137,1)","rgba(30,157,137,1)","rgba(30,158,137,1)","rgba(30,159,136,1)","rgba(30,160,136,1)","rgba(31,161,136,1)","rgba(31,162,135,1)","rgba(31,163,135,1)","rgba(31,163,134,1)","rgba(32,164,134,1)","rgba(32,165,134,1)","rgba(33,166,133,1)","rgba(33,167,133,1)","rgba(34,168,132,1)","rgba(35,169,131,1)","rgba(35,170,131,1)","rgba(36,171,130,1)","rgba(37,172,130,1)","rgba(38,173,129,1)","rgba(39,174,129,1)","rgba(40,175,128,1)","rgba(41,175,127,1)","rgba(42,176,127,1)","rgba(43,177,126,1)","rgba(44,178,125,1)","rgba(46,179,124,1)","rgba(47,180,124,1)","rgba(48,181,123,1)","rgba(50,182,122,1)","rgba(51,183,121,1)","rgba(53,183,121,1)","rgba(54,184,120,1)","rgba(56,185,119,1)","rgba(57,186,118,1)","rgba(59,187,117,1)","rgba(61,188,116,1)","rgba(62,189,115,1)","rgba(64,190,114,1)","rgba(66,190,113,1)","rgba(68,191,112,1)","rgba(70,192,111,1)","rgba(72,193,110,1)","rgba(73,194,109,1)","rgba(75,194,108,1)","rgba(77,195,107,1)","rgba(79,196,106,1)","rgba(81,197,105,1)","rgba(83,198,104,1)","rgba(85,198,102,1)","rgba(88,199,101,1)","rgba(90,200,100,1)","rgba(92,201,99,1)","rgba(94,201,98,1)","rgba(96,202,96,1)","rgba(98,203,95,1)","rgba(101,204,94,1)","rgba(103,204,92,1)","rgba(105,205,91,1)","rgba(108,206,90,1)","rgba(110,206,88,1)","rgba(112,207,87,1)","rgba(115,208,85,1)","rgba(117,208,84,1)","rgba(119,209,82,1)","rgba(122,210,81,1)","rgba(124,210,79,1)","rgba(127,211,78,1)","rgba(129,212,76,1)","rgba(132,212,75,1)","rgba(134,213,73,1)","rgba(137,213,72,1)","rgba(139,214,70,1)","rgba(142,215,68,1)","rgba(144,215,67,1)","rgba(147,216,65,1)","rgba(149,216,63,1)","rgba(152,217,62,1)","rgba(155,217,60,1)","rgba(157,218,58,1)","rgba(160,218,57,1)","rgba(163,219,55,1)","rgba(165,219,53,1)","rgba(168,220,51,1)","rgba(171,220,50,1)","rgba(173,221,48,1)","rgba(176,221,46,1)","rgba(179,221,45,1)","rgba(181,222,43,1)","rgba(184,222,41,1)","rgba(187,223,39,1)","rgba(189,223,38,1)","rgba(192,223,36,1)","rgba(195,224,35,1)","rgba(197,224,33,1)","rgba(200,225,32,1)","rgba(203,225,30,1)","rgba(205,225,29,1)","rgba(208,226,28,1)","rgba(211,226,27,1)","rgba(213,226,26,1)","rgba(216,227,25,1)","rgba(219,227,24,1)","rgba(221,227,24,1)","rgba(224,228,24,1)","rgba(226,228,24,1)","rgba(229,228,24,1)","rgba(232,229,25,1)","rgba(234,229,25,1)","rgba(237,229,26,1)","rgba(239,230,27,1)","rgba(242,230,28,1)","rgba(244,230,30,1)","rgba(247,230,31,1)","rgba(249,231,33,1)","rgba(251,231,35,1)","rgba(254,231,36,1)"]},custom:{name:"Custom...",componentPickers:{heatmap:yO,"horizontal-heatmap":yO}}}},align:{name:"Align",inlineOptions:{white:{name:"Top",value:"top"},lightGrey:{name:"Bottom",value:"bottom"}}},colorRangeGradient:{name:"Color Gradient",inlineOptions:jr},dataTransform:{name:"Transforms",inlineOptions:{default:{name:"Default",value:"default"},None:{name:"None",value:"None"}},generateOptions:e=>{const g=[];if(e.transforms)for(const i of e.transforms)g.push({name:i.name,value:i.value});return g}},aggregationMode:{name:"Aggregation Mode",inlineOptions:{},generateOptions:e=>{const g=[];return e.aggregationModes?Object.values(e.aggregationModes).forEach(({name:i,value:I})=>{g.push({name:i,value:I})}):g.push({name:"Default",value:"default"}),g}},maxZoom:{name:"Zoom limit",inlineOptions:{none:{name:"None",value:null}},generateOptions:e=>{if(e.maxZoom){const g=[];for(let i=0;i<=e.maxZoom;i++){const{maxWidth:I,binsPerDimension:n,maxZoom:r}=e;let C=1,o=1;if(e.resolutions){const l=e.resolutions.map(c=>+c).sort((c,u)=>u-c);[C]=l,o=l[i]}else o=e.maxWidth/(2**i*e.binsPerDimension),C=I/(2**r*n);const a=E0(C,o),A=gm(`.${a}`,o)(o);g.push({name:A,value:i.toString()})}return g}return[]}},valueColumn:{name:"Value column",inlineOptions:{none:{name:"None",value:null}},generateOptions:pse},zeroValueColor:{name:"Zero Value Color",inlineOptions:ki}},vXe={...qst,IS_TRACK_RANGE_SELECTABLE:z0,OPTIONS_INFO:an},T4t={d3Array:zit,d3Axis:OTt,d3Brush:DAt,d3Color:iIt,d3Drag:mat,d3Dsv:Zlt,d3Format:XIt,d3Geo:bMt,d3Queue:BMt,d3Request:JMt,d3Scale:rrt,d3Selection:Mgt,d3Transition:fWt,d3Zoom:BWt,PIXI:vXe.GLOBALS.PIXI,mix:Ay,slugid:cg},N4t={Annotations1dTrack:iJ,Annotations2dTrack:q1e,ArrowheadDomainsTrack:j1e,BarTrack:Xj,BedLikeTrack:z1e,CNVIntervalTrack:U1e,Chromosome2DAnnotations:iWe,Chromosome2DLabels:gWe,ChromosomeGrid:aG,CombinedTrack:g4,CrossRule:BWe,DivergentBarTrack:_1e,HeatmapTiledPixiTrack:bw,Horizontal1dHeatmapTrack:L1e,Horizontal2DDomainsTrack:eWe,HorizontalChromosomeLabels:nWe,HorizontalGeneAnnotationsTrack:Q1e,HorizontalHeatmapTrack:rWe,HorizontalLine1DPixiTrack:ay,HorizontalMultivecTrack:O1e,HorizontalPoint1DPixiTrack:J1e,HorizontalRule:fWe,HorizontalTiled1DPixiTrack:Cy,HorizontalTiledPlot:J2,HorizontalTrack:G9e,Id2DTiledPixiTrack:I1e,IdHorizontal1DTiledPixiTrack:r1e,IdVertical1DTiledPixiTrack:o1e,LeftAxisTrack:l1e,MapboxTilesTrack:RWe,MoveableTrack:Jk,OSMTileIdsTrack:wWe,OSMTilesTrack:Zw,OverlayTrack:P1e,PixiTrack:fr,RasterTilesTrack:VWe,SVGTrack:fm,SquareMarkersTrack:tWe,Tiled1DPixiTrack:Zj,TiledPixiTrack:mm,TopAxisTrack:s1e,Track:xp,ValueIntervalTrack:oWe,VerticalRule:vWe,VerticalTiled1DPixiTrack:C1e,VerticalTrack:B9e,ViewportTracker2D:aWe,ViewportTracker2DPixi:szt,ViewportTrackerHorizontal:AWe,ViewportTrackerVertical:sWe},k4t={ContextMenuItem:ig,DataFetcher:Xk,LruCache:w9e},Y4t={ChromosomeInfo:Os,SearchField:C0},K4t={DataFetcher:Xk,GBKDataFetcher:e1e,LocalDataFetcher:t1e,getDataFetcher:rEt},eH={chromosomes:Y4t,libraries:T4t,tracks:N4t,dataFetchers:K4t,factories:k4t,services:ect,utils:EWt,configs:vXe,VERSION:R9e},Sx={"track-renderer":"_track-renderer_11dwb_1","track-renderer-element":"_track-renderer-element_11dwb_5","track-renderer-events":"_track-renderer-events_11dwb_6"};function F4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function bse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tH(e){return tH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},tH(e)}const{getDataFetcher:O4t}=eH.dataFetchers,_4t=100;let k$=function(e){M4t(i,e);var g=z4t(i);function i(I){var n;if(F4t(this,i),n=g.call(this,I),n.dragging=!1,n.element=null,n.eventTracker=null,n.eventTrackerOld=null,n.closing=!1,n.yPositionOffset=0,n.xPositionOffset=0,n.scrollTop=0,n.scrollTimeout=null,n.activeTransitions=0,n.zoomTransform=JI,n.windowScrolledBound=n.windowScrolled.bind(Eo(n)),n.zoomStartedBound=n.zoomStarted.bind(Eo(n)),n.zoomedBound=n.zoomed.bind(Eo(n)),n.zoomEndedBound=n.zoomEnded.bind(Eo(n)),n.uid=cg.nice(),n.viewUid=n.props.uid,n.availableForPlugins={...eH,services:{...eH.services,pubSub:n.props.pubSub,pixiRenderer:n.props.pixiRenderer}},n.mounted=!1,n.emptyZoomBehavior=AP(),n.currentProps=I,n.prevPropsStr="",n.zoomBehavior=AP().filter(r=>!(r.target.classList.contains("no-zoom")||r.target.classList.contains("react-resizable-handle"))).on("start",n.zoomStartedBound).on("zoom",n.zoomedBound).on("end",n.zoomEndedBound),n.zoomTransform=JI,n.prevZoomTransform=JI,n.initialXDomain=[0,1],n.initialYDomain=[0,1],n.xDomainLimits=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],n.yDomainLimits=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],n.zoomLimits=[0,Number.MAX_SAFE_INTEGER],n.prevCenterX=n.currentProps.paddingLeft+n.currentProps.leftWidth+n.currentProps.centerWidth/2,n.prevCenterY=n.currentProps.paddingTop+n.currentProps.topHeight+n.currentProps.centerHeight/2,n.cumCenterXOffset=0,n.cumCenterYOffset=0,n.setUpInitialScales(n.currentProps.initialXDomain,n.currentProps.initialYDomain,n.currentProps.xDomainLimits,n.currentProps.yDomainLimits,n.currentProps.zoomLimits),n.setUpScales(),n.trackDefObjects={},n.metaTracks={},n.pubSubs=[],window.higlassTracksByType)for(const r in window.higlassTracksByType)jg[r]=window.higlassTracksByType[r].config;return n.boundForwardEvent=n.forwardEvent.bind(Eo(n)),n.boundScrollEvent=n.scrollEvent.bind(Eo(n)),n.boundForwardContextMenu=n.forwardContextMenu.bind(Eo(n)),n.dispatchEventBound=n.dispatchEvent.bind(Eo(n)),n.zoomToDataPosHandlerBound=n.zoomToDataPosHandler.bind(Eo(n)),n.onScrollHandlerBound=n.onScrollHandler.bind(Eo(n)),n.elementPos={height:0,width:0,left:0,top:0},n.elementSelection=null,n}return D4t(i,[{key:"xScale",get:function(){if(!this._xScale)throw new Error("xScale is not defined");return this._xScale}},{key:"yScale",get:function(){if(!this._yScale)throw new Error("yScale is not defined");return this._yScale}},{key:"UNSAFE_componentWillMount",value:function(){this.pubSubs=[],this.pubSubs.push(this.props.pubSub.subscribe("scroll",this.windowScrolledBound)),this.pubSubs.push(this.props.pubSub.subscribe("app.event",this.dispatchEventBound)),this.pubSubs.push(this.props.pubSub.subscribe("zoomToDataPos",this.zoomToDataPosHandlerBound)),this.pubSubs.push(this.props.pubSub.subscribe("app.scroll",this.onScrollHandlerBound))}},{key:"componentDidMount",value:function(){if(!this.element)throw new Error("Component did not mount, this.element is not defined.");if(this.elementPos=this.element.getBoundingClientRect(),this.elementSelection=hg(this.element),this.pStage=new ot.PIXI.Graphics,this.pMask=new ot.PIXI.Graphics,this.pOutline=new ot.PIXI.Graphics,this.pBackground=new ot.PIXI.Graphics,this.pStage.addChild(this.pMask),this.pStage.addChild(this.pOutline),this.currentProps.pixiStage.addChild(this.pStage),this.pStage.mask=this.pMask,this.props.isRangeSelection||this.addZoom(),!this.currentProps.svgElement||!this.currentProps.canvasElement)return;this.svgElement=this.currentProps.svgElement,this.syncTrackObjects(this.currentProps.positionedTracks),this.syncMetaTracks(this.currentProps.metaTracks),this.currentProps.setCentersFunction(this.setCenter.bind(this)),this.currentProps.registerDraggingChangedListener(this.draggingChanged.bind(this)),this.draggingChanged(!0),this.addEventTracker();const n=[[this.xScale(this.xDomainLimits[0]),this.yScale(this.yDomainLimits[0])],[this.xScale(this.xDomainLimits[1]),this.yScale(this.yDomainLimits[1])]],r=this.svgElement.getBoundingClientRect(),C=[[Math.max(n[0][0],0),Math.max(n[0][1],0)],[Math.min(n[1][0],r.width),Math.min(n[1][1],r.height)]];this.zoomBehavior.extent(C).translateExtent(n).scaleExtent(this.zoomLimits)}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){if(!n.svgElement||!n.canvasElement)return;const r=this.updatablePropsToString(n);if(this.currentProps=n,this.prevPropsStr===r)return;this.setBackground();for(const s in this.trackDefObjects){const A=this.trackDefObjects[s].trackObject;A.delayDrawing=!0}this.prevPropsStr=r,this.setUpInitialScales(n.initialXDomain,n.initialYDomain,n.xDomainLimits,n.yDomainLimits,n.zoomLimits),this.setUpScales(n.width!==this.props.width||n.height!==this.props.height),this.svgElement=n.svgElement;const C=[[this.xScale(this.xDomainLimits[0]),this.yScale(this.yDomainLimits[0])],[this.xScale(this.xDomainLimits[1]),this.yScale(this.yDomainLimits[1])]],o=this.svgElement.getBoundingClientRect(),a=[[Math.max(C[0][0],0),Math.max(C[0][1],0)],[Math.min(C[1][0],o.width),Math.min(C[1][1],o.height)]];this.zoomBehavior.extent(a).translateExtent(C).scaleExtent(this.zoomLimits),this.syncTrackObjects(n.positionedTracks),this.syncMetaTracks(n.metaTracks);for(const s of n.positionedTracks){const A=s.track.options,l=this.trackDefObjects[s.track.uid].trackObject;if(l.rerender(A),q1(s.track)){const c={};for(const u of s.track.contents)c[u.uid]=u;for(const u in l.createdTracks)l.createdTracks[u].rerender(c[u].options)}}this.props.onNewTilesLoaded();for(const s in this.trackDefObjects){const A=this.trackDefObjects[s].trackObject;A.delayDrawing=!1,A.draw()}}},{key:"componentDidUpdate",value:function(n){(this.props.initialXDomain[0]!==n.initialXDomain[0]||this.props.initialXDomain[1]!==n.initialXDomain[1]||this.props.initialYDomain[0]!==n.initialYDomain[0]||this.props.initialYDomain[1]!==n.initialYDomain[1])&&this.element&&(this.element.__zoom=JI),n.isRangeSelection!==this.props.isRangeSelection&&(this.props.isRangeSelection?this.removeZoom():this.addZoom()),n.zoomable!==this.props.zoomable&&(this.props.zoomable?this.addZoom():this.removeZoom()),this.addEventTracker()}},{key:"componentWillUnmount",value:function(){var n,r;this.mounted=!1,this.removeTracks(Object.keys(this.trackDefObjects)),this.removeMetaTracks(Object.keys(this.metaTracks)),this.currentProps.removeDraggingChangedListener(this.draggingChanged),this.pStage&&this.currentProps.pixiStage.removeChild(this.pStage),(n=this.pMask)==null||n.destroy(!0),(r=this.pStage)==null||r.destroy(!0),this.pubSubs.forEach(C=>this.props.pubSub.unsubscribe(C)),this.pubSubs=[],this.removeEventTracker()}},{key:"dispatchEvent",value:function(n){n.sourceUid===this.uid&&n.type!=="contextmenu"&&this.element&&RX(n,this.element)}},{key:"isWithin",value:function(n,r){const C=n>=this.elementPos.left&&n<=this.elementPos.width+this.elementPos.left,o=r>=this.elementPos.top&&r<=this.elementPos.height+this.elementPos.top;return C&&o}},{key:"zoomToDataPosHandler",value:function({pos:n,animateTime:r}){this.zoomToDataPos(...n,r)}},{key:"addZoom",value:function(){!this.elementSelection||!this.currentProps.zoomable||(this.elementSelection.call(this.zoomBehavior),this.zoomBehavior.transform(this.elementSelection,this.zoomTransform))}},{key:"removeZoom",value:function(){this.elementSelection&&(this.zoomEnded(),this.elementSelection.on(".zoom",null))}},{key:"setMask",value:function(){var n,r,C,o;(n=this.pMask)==null||n.clear(),(r=this.pMask)==null||r.beginFill(),(C=this.pMask)==null||C.drawRect(this.xPositionOffset,this.yPositionOffset,this.currentProps.width,this.currentProps.height),(o=this.pMask)==null||o.endFill()}},{key:"setBackground",value:function(){var n,r,C,o,a;const s=this.props.theme===ii?"black":"white",A=Kt(((n=this.currentProps.viewOptions)==null?void 0:n.backgroundColor)??s);(r=this.pBackground)==null||r.clear(),(C=this.pBackground)==null||C.beginFill(A),(o=this.pBackground)==null||o.drawRect(this.xPositionOffset,this.yPositionOffset,this.currentProps.width,this.currentProps.height),(a=this.pBackground)==null||a.endFill()}},{key:"windowScrolled",value:function(){this.removeZoom(),this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(()=>{this.addZoom()},_4t)}},{key:"setUpInitialScales",value:function(n=[0,1],r=[0,1],C=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],o=[-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],a=[0,Number.MAX_SAFE_INTEGER]){a[0]=a[0]===null?0:a[0],a[1]=a[1]===null?1/0:a[1];const s=n[1]-n[0],A=(r[0]+r[1])/2;if(r[0]=A-s/2,r[1]=A+s/2,n[0]===this.initialXDomain[0]&&n[1]===this.initialXDomain[1]&&r[0]===this.initialYDomain[0]&&r[1]===this.initialYDomain[1]&&C[0]===this.xDomainLimits[0]&&C[1]===this.xDomainLimits[1]&&o[0]===this.yDomainLimits[0]&&o[1]===this.yDomainLimits[1]&&a[0]===this.zoomLimits[0]&&a[1]===this.zoomLimits[1])return;this.initialXDomain=n,this.initialYDomain=r,this.xDomainLimits=C,this.yDomainLimits=o,this.zoomLimits=a,this.zoomTransform=JI,this.prevZoomTransform=JI,this.cumCenterYOffset=0,this.cumCenterXOffset=0,this.drawableToDomainX=tg().domain([this.currentProps.paddingLeft+this.currentProps.leftWidth,this.currentProps.paddingLeft+this.currentProps.leftWidth+this.currentProps.centerWidth]).range([n[0],n[1]]);let l,c;this.currentProps.centerWidth===0?(l=this.currentProps.paddingTop+this.currentProps.topHeight,c=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight):(l=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2-this.currentProps.centerWidth/2,c=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2+this.currentProps.centerWidth/2),this.drawableToDomainY=tg().domain([l,c]).range([r[0],r[1]]),this.prevCenterX=this.currentProps.paddingLeft+this.currentProps.leftWidth+this.currentProps.centerWidth/2,this.prevCenterY=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2}},{key:"updatablePropsToString",value:function(n){return JSON.stringify({positionedTracks:n.positionedTracks,initialXDomain:n.initialXDomain,initialYDomain:n.initialYDomain,width:n.width,height:n.height,paddingLeft:n.paddingLeft,paddingTop:n.paddingTop,leftWidth:n.leftWidth,topHeight:n.topHeight,dragging:n.dragging,viewOptions:n.viewOptions})}},{key:"draggingChanged",value:function(n){this.dragging=n,this.timedUpdatePositionAndDimensions()}},{key:"setUpScales",value:function(n=!1){const r=this.currentProps.paddingLeft+this.currentProps.leftWidth+this.currentProps.centerWidth/2,C=this.currentProps.paddingTop+this.currentProps.topHeight+this.currentProps.centerHeight/2;if(!this.drawableToDomainX||!this.drawableToDomainY)return;const o=(this.drawableToDomainX(r)-this.drawableToDomainX(this.prevCenterX))/this.zoomTransform.k,a=(this.drawableToDomainY(C)-this.drawableToDomainY(this.prevCenterY))/this.zoomTransform.k;this.cumCenterYOffset+=a,this.cumCenterXOffset+=o,this.prevCenterY=C,this.prevCenterX=r;const s=[this.drawableToDomainX(0)-this.cumCenterXOffset,this.drawableToDomainX(this.currentProps.width)-this.cumCenterXOffset],A=[this.drawableToDomainY(0)-this.cumCenterYOffset,this.drawableToDomainY(this.currentProps.height)-this.cumCenterYOffset];this._xScale=tg().domain(s).range([0,this.currentProps.width]),this._yScale=tg().domain(A).range([0,this.currentProps.height]);for(const l in this.trackDefObjects)this.trackDefObjects[l].trackObject.refScalesChanged(this.xScale,this.yScale);this.applyZoomTransform(n)}},{key:"getTrackDef",value:function(n){const r=YC(this.trackDefObjects);for(const[,{trackDef:C,trackObject:o}]of r){if(o===n)return C.track;if(q1(C.track)){for(const a of C.track.contents)if(o.createdTracks[a.uid]===n)return a}}return null}},{key:"getTrackObject",value:function(n){const r=YC(this.trackDefObjects);for(let C=0;Co.uid));this.addMetaTracks(n.filter(o=>!this.metaTracks[o.uid])),this.updateMetaTracks(n.filter(o=>this.metaTracks[o.uid])),this.removeMetaTracks(r.filter(o=>!C.has(o)))}},{key:"syncTrackObjects",value:function(n){this.prevTrackDefinitions=JSON.stringify(n);const r={};for(let l=0;l!C.has(l))),s=new Set([...C].filter(l=>!o.has(l))),A=new Set([...o].filter(l=>C.has(l)));this.updateExistingTrackDefs([...A].map(l=>r[l])),this.addNewTracks([...a].map(l=>r[l])),this.updateExistingTrackDefs([...a].map(l=>r[l])),this.removeTracks([...s])}},{key:"addMetaTracks",value:function(n){n.filter(r=>!this.metaTracks[r.uid]).forEach(r=>{this.metaTracks[r.uid]={trackDef:r,trackObject:this.createMetaTrack(r)}})}},{key:"addNewTracks",value:function(n){if(this.currentProps.pixiStage){for(let r=0;r{this.metaTracks[r].trackObject.remove(),this.metaTracks[r]=void 0,delete this.metaTracks[r]})}},{key:"removeTracks",value:function(n){for(let r=0;r{const p=JI.translate(h,m).scale(c);this.zoomTransform=p,this.elementSelection&&this.emptyZoomBehavior.transform(this.elementSelection,p),f=this.applyZoomTransform(o)};if(a&&this.elementSelection){let p=this.elementSelection;this.activeTransitions+=1,document.hidden||(p=p.transition().duration(a)),p.call(this.zoomBehavior.transform,JI.translate(h,m).scale(c)).on("end",()=>{b(),this.activeTransitions-=1})}else b();return f}},{key:"valueScaleMove",value:function(n){if(this.zoomStartPos){for(const r of this.getTracksAtPosition(...this.zoomStartPos))r.movedY(n);this.zoomStartTransform&&(this.zoomTransform=this.zoomStartTransform)}}},{key:"valueScaleZoom",value:function(n,r){if(!gct(n.sourceEvent))return;const C=n.sourceEvent.deltaY,o=n.sourceEvent.deltaMode,s=((l,c)=>l*(c?120:1)/500)(C,o),A=Pg(n.sourceEvent,this.props.canvasElement);for(const l of this.getTracksAtPosition(...A)){const c=r==="1d-horizontal"?A[1]-l.position[1]:A[0]-l.position[0];l.zoomedY(c,2**s)}this.zoomStartTransform&&(this.zoomTransform=this.zoomStartTransform)}},{key:"zoomed",value:function(n){var r;let C=null;if(this.zoomStartPos){const a=this.getTracksAtPosition(...this.zoomStartPos);if(a.length){const s=a[0],A=this.getTrackDef(s);if(!A)return;(r=jg[A.type])!=null&&r.orientation&&(C=jg[A.type].orientation),s instanceof Loe&&(C="1d-vertical")}}if(C&&n.sourceEvent){if(n.shiftKey||this.valueScaleZooming){if(n.sourceEvent.deltaY!==void 0){this.valueScaleZoom(n,C);return}C==="1d-horizontal"?this.valueScaleMove(n.sourceEvent.movementY):C==="1d-vertical"&&this.valueScaleMove(n.sourceEvent.movementX)}C==="1d-horizontal"&&n.sourceEvent.movementY?this.valueScaleMove(n.sourceEvent.movementY):C==="1d-vertical"&&n.sourceEvent.movementX&&this.valueScaleMove(n.sourceEvent.movementX)}this.zoomTransform=this.currentProps.zoomable?n.transform:JI,this.prevZoomTransform.k!==this.zoomTransform.k||(C==="1d-horizontal"?this.zoomTransform=JI.translate(this.zoomTransform.x,this.prevZoomTransform.y).scale(this.zoomTransform.k):C==="1d-vertical"&&(this.zoomTransform=JI.translate(this.prevZoomTransform.x,this.zoomTransform.y).scale(this.zoomTransform.k)),this.element&&(this.element.__zoom=this.zoomTransform)),this.applyZoomTransform(!0),this.prevZoomTransform=this.zoomTransform,this.props.pubSub.publish("app.zoom",n),n.sourceEvent&&(n.sourceEvent.stopPropagation(),n.sourceEvent.preventDefault())}},{key:"getTracksAtPosition",value:function(n,r){const C=[];let o=[];for(const a in this.trackDefObjects){const s=this.trackDefObjects[a].trackObject;s.childTracks?o=o.concat(s.childTracks):o.push(s)}for(const a of o){const s=a.position[0]<=n&&n<=a.position[0]+a.dimensions[0],A=a.position[1]<=r&&r<=a.position[1]+a.dimensions[1];s&&A&&C.push(a)}return C}},{key:"zoomStarted",value:function(n){this.zooming=!0,n&&n.sourceEvent&&(this.zoomStartPos=Pg(n.sourceEvent,this.props.canvasElement),n.sourceEvent.shiftKey&&(this.valueScaleZooming=!0)),this.zoomStartTransform=this.zoomTransform,this.props.pubSub.publish("app.zoomStart")}},{key:"zoomEnded",value:function(){this.zooming=!1,this.zoomStartPos=null,this.valueScaleZooming&&(this.valueScaleZooming=!1,this.element&&(this.element.__zoom=this.zoomStartTransform)),this.props.pubSub.publish("app.zoomEnd")}},{key:"applyZoomTransform",value:function(n=!0){const r=this.currentProps,C=r.paddingLeft+r.leftWidth,o=r.paddingTop+r.topHeight;if(!this.xScale||!this.yScale)return;this.zoomedXScale=this.zoomTransform.rescaleX(this.xScale),this.zoomedYScale=this.zoomTransform.rescaleY(this.yScale);const a=tg().domain([C,C+r.centerWidth].map(this.zoomedXScale.invert)).range([0,r.centerWidth]),s=tg().domain([o,o+r.centerHeight].map(this.zoomedYScale.invert)).range([0,r.centerHeight]);for(const A in this.trackDefObjects){const l=this.trackDefObjects[A].trackObject,c=this.trackDefObjects[A].trackDef;let u="unknown";if(jg[c.track.type]&&(u=jg[c.track.type].orientation),u==="whole"){const d=tg().domain([r.paddingLeft,r.width-r.paddingLeft].map(this.zoomedXScale.invert)).range([0,r.width-2*r.paddingLeft]),h=tg().domain([r.paddingTop,r.height-r.paddingTop].map(this.zoomedYScale.invert)).range([0,r.height-2*r.paddingTop]);l.zoomed(d,h);continue}if(this.trackDefObjects[A].trackDef.track.position==="gallery"){const d=tg().domain([r.paddingLeft+r.leftWidthNoGallery,r.paddingLeft+r.leftWidth+r.centerWidth+r.galleryDim].map(this.zoomedXScale.invert)).range([0,r.centerWidth+2*r.galleryDim]),h=tg().domain([r.paddingTop+r.topHeightNoGallery,r.paddingTop+r.topHeight+r.centerHeight+r.galleryDim].map(this.zoomedYScale.invert)).range([0,r.centerHeight-2*r.galleryDim]);l.zoomed(d.copy(),h.copy(),this.zoomTransform.k);continue}l.zoomed(a.copy(),s.copy(),this.zoomTransform.k,this.zoomTransform.x+this.xPositionOffset,this.zoomTransform.y+this.yPositionOffset,r.paddingLeft+r.leftWidth,r.paddingTop+r.topHeight)}return this.currentXScale=a,this.currentYScale=s,n&&this.currentProps.onScalesChanged(a,s),[a,s]}},{key:"createMetaTrack",value:function(n){switch(n.type){default:{const r=this.props.pluginTracks[n.type];if(r!=null&&r.isMetaTrack){const C={getTrackObject:this.getTrackObject.bind(this),onNewTilesLoaded:()=>{this.currentProps.onNewTilesLoaded(n.uid)},definition:n};try{return new r.track(this.availableForPlugins,C,n.options)}catch(o){console.error("Plugin meta track",n.type,"failed to instantiate.",o)}}return console.warn(`Unknown meta track of type: ${n.type}`),new dae(this.pStage,{name:"Unknown Track Type",type:n.type})}}}},{key:"createTrackObject",value:function(n){const r=this.createLocationAgnosticTrackObject(n);return(n.position==="left"||n.position==="right")&&jg[n.type].orientation==="1d-horizontal"?new Loe(r):r}},{key:"createLocationAgnosticTrackObject",value:function(n){let r=n.data;r||(r={server:DN(n.server),tilesetUid:n.tilesetUid}),n.coordSystem&&(r.coordSystem=n.coordSystem);const C=O4t(r,this.props.pubSub,this.props.pluginDataFetchers,this.availableForPlugins);if(!this.pStage||!this.svgElement)throw new Error("No PIXI stage or svg element");const o={id:n.uid,trackUid:n.uid,trackType:n.type,viewUid:this.viewUid,pubSub:this.props.pubSub,scene:this.pStage,dataConfig:r,dataFetcher:C,getLockGroupExtrema:()=>this.currentProps.getLockGroupExtrema(n.uid),handleTilesetInfoReceived:a=>{this.currentProps.onTilesetInfoReceived(n.uid,a)},animate:()=>{this.currentProps.onNewTilesLoaded(n.uid)},svgElement:this.svgElement,isValueScaleLocked:()=>this.currentProps.isValueScaleLocked(n.uid),onValueScaleChanged:()=>{this.currentProps.onValueScaleChanged(n.uid)},onTrackOptionsChanged:a=>{this.currentProps.onTrackOptionsChanged(n.uid,a)},onMouseMoveZoom:this.props.onMouseMoveZoom,chromInfoPath:n.chromInfoPath,isShowGlobalMousePosition:()=>this.props.isShowGlobalMousePosition,getTheme:()=>this.props.theme};switch(n.y&&(o.yPosition=n.y),n.x&&(o.xPosition=n.x),n.projectionXDomain&&(o.projectionXDomain=n.projectionXDomain),n.projectionYDomain&&(o.projectionYDomain=n.projectionYDomain),n.type){case"left-axis":return new l1e(o,n.options);case"top-axis":return new s1e(o,n.options);case"heatmap":return new bw(o,n.options);case"multivec":case"vector-heatmap":case"horizontal-multivec":case"horizontal-vector-heatmap":case"vertical-multivec":case"vertical-vector-heatmap":return new O1e(o,n.options);case"1d-heatmap":case"horizontal-1d-heatmap":case"vertical-1d-heatmap":return new L1e(o,n.options);case"line":case"horizontal-line":case"vertical-line":return new ay(o,n.options);case"point":case"horizontal-point":case"vertical-point":return new J1e(o,n.options);case"bar":case"horizontal-bar":case"vertical-bar":return new Xj(o,n.options);case"divergent-bar":case"horizontal-divergent-bar":case"vertical-divergent-bar":return new _1e(o,n.options);case"horizontal-1d-tiles":return new r1e(o,n.options);case"vertical-1d-tiles":return new o1e(o,n.options);case"2d-tiles":return new I1e(o,n.options);case"stacked-interval":case"top-stacked-interval":case"left-stacked-interval":return new U1e(o,n.options);case"viewport-projection-center":return n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback?(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback,new aWe(o,n.options)):new xp(o,{});case"viewport-projection-horizontal":return n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback?(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback,new AWe(o,n.options)):new xp(o,{});case"viewport-projection-vertical":return n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback?(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback,new sWe(o,n.options)):new xp(o,{});case"gene-annotations":case"horizontal-gene-annotations":case"vertical-gene-annotations":return new Q1e(o,n.options);case"2d-rectangle-domains":case"arrowhead-domains":return new j1e(o,n.options);case"horizontal-1d-annotations":return new iJ(o,n.options);case"vertical-1d-annotations":return new iJ(o,n.options,!0);case"2d-annotations":return new q1e(o,n.options);case"linear-2d-rectangle-domains":case"horizontal-2d-rectangle-domains":case"vertical-2d-rectangle-domains":return new eWe(o,n.options);case"square-markers":return new tWe(o,n.options);case"combined":return o.tracks=n.contents,o.createTrackObject=this.createTrackObject.bind(this),new g4(o);case"2d-chromosome-labels":return new gWe(o,n.options);case"horizontal-chromosome-grid":return o.orientation="1d-horizontal",new aG(o,n.options);case"vertical-chromosome-grid":return o.orientation="1d-vertical",new aG(o,n.options);case"2d-chromosome-grid":return new aG(o,n.options);case"chromosome-labels":case"horizontal-chromosome-labels":case"vertical-chromosome-labels":return new nWe(o,n.options);case"linear-heatmap":case"horizontal-heatmap":case"vertical-heatmap":return new rWe(o,n.options);case"2d-chromosome-annotations":return new iWe(o,n.options);case"1d-value-interval":case"horizontal-1d-value-interval":case"vertical-1d-value-interval":return new oWe(o,n.options);case"osm":case"osm-tiles":return new Zw(o,n.options);case"osm-2d-tile-ids":return new wWe(o,n.options);case"mapbox":case"mapbox-tiles":return new RWe(o,n.options);case"raster-tiles":return new VWe(o,n.options);case"bedlike":case"vertical-bedlike":return new z1e(o,n.options);case"overlay-track":return new P1e(o,n.options);case"overlay-chromosome-grid-track":return o.isOverlay=!0,new aG(o,n.options);case"horizontal-rule":return new fWe(o,n.options);case"vertical-rule":return new vWe(o,n.options);case"cross-rule":return o.x=n.x,o.y=n.y,new BWe(o,n.options);case"simple-svg":return new fm(o,n.options);case"empty":{const a=n.options;return new fr(o,a)}default:{const a=this.props.pluginTracks[n.type];if(a&&!a.isMetaTrack){o.AVAILABLE_FOR_PLUGINS=this.availableForPlugins,o.baseEl=this.baseEl,o.definition=n,n.registerViewportChanged&&n.removeViewportChanged&&n.setDomainsCallback&&(o.registerViewportChanged=n.registerViewportChanged,o.removeViewportChanged=n.removeViewportChanged,o.setDomainsCallback=n.setDomainsCallback);try{return new a.track(this.availableForPlugins,o,n.options)}catch(s){console.error("Plugin track",n.type,"failed to instantiate.",s)}}return console.warn("Unknown track type:",n.type),new dae(o,{name:"Unknown Track Type",type:n.type})}}}},{key:"zoomToDataPos",value:function(n,r,C,o,a=3e3,s=null){const[A,l,c]=SI(this.xScale.copy().domain([n,r]),this.yScale.copy().domain([C,o])),u=s?s(this.xScale,this.yScale):[this.xScale,this.yScale];this.setCenter(A,l,c,!1,a,u[0],u[1])}},{key:"forwardContextMenu",value:function(n){this.props.disableTrackMenu||n.altKey||(n.preventDefault(),setTimeout(()=>{this.props.pubSub.publish("contextmenu",n)},0))}},{key:"addEventTracker",value:function(){!this.eventTracker||this.eventTracker===this.eventTrackerOld||(this.eventTrackerOld||(this.eventTrackerOld=this.eventTracker),this.eventTracker=this.eventTrackerOld,this.eventTracker.addEventListener("click",this.boundForwardEvent),this.eventTracker.addEventListener("contextmenu",this.boundForwardContextMenu),this.eventTracker.addEventListener("dblclick",this.boundForwardEvent),this.eventTracker.addEventListener("wheel",this.boundForwardEvent),this.eventTracker.addEventListener("dragstart",this.boundForwardEvent),this.eventTracker.addEventListener("selectstart",this.boundForwardEvent),this.eventTracker.addEventListener("mouseover",this.boundForwardEvent),this.eventTracker.addEventListener("mouseenter",this.boundForwardEvent),this.eventTracker.addEventListener("mousedown",this.boundForwardEvent),this.eventTracker.addEventListener("mouseup",this.boundForwardEvent),this.eventTracker.addEventListener("mouseout",this.boundForwardEvent),this.eventTracker.addEventListener("mouseleave",this.boundForwardEvent),this.eventTracker.addEventListener("touchstart",this.boundForwardEvent),this.eventTracker.addEventListener("touchend",this.boundForwardEvent),this.eventTracker.addEventListener("touchmove",this.boundForwardEvent),this.eventTracker.addEventListener("touchcancel",this.boundForwardEvent),this.eventTracker.addEventListener("pointerover",this.boundForwardEvent),this.eventTracker.addEventListener("pointerenter",this.boundForwardEvent),this.eventTracker.addEventListener("pointerdown",this.boundForwardEvent),this.eventTracker.addEventListener("pointerup",this.boundForwardEvent),this.eventTracker.addEventListener("pointercancel",this.boundForwardEvent),this.eventTracker.addEventListener("pointerout",this.boundForwardEvent),this.eventTracker.addEventListener("pointerleave",this.boundForwardEvent),window.addEventListener("scroll",this.boundScrollEvent))}},{key:"removeEventTracker",value:function(){this.eventTracker&&(this.eventTracker.removeEventListener("click",this.boundForwardEvent),this.eventTracker.removeEventListener("contextmenu",this.boundForwardContextMenu),this.eventTracker.removeEventListener("dblclick",this.boundForwardEvent),this.eventTracker.removeEventListener("wheel",this.boundForwardEvent),this.eventTracker.removeEventListener("dragstart",this.boundForwardEvent),this.eventTracker.removeEventListener("selectstart",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseover",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseenter",this.boundForwardEvent),this.eventTracker.removeEventListener("mousedown",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseup",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseout",this.boundForwardEvent),this.eventTracker.removeEventListener("mouseleave",this.boundForwardEvent),this.eventTracker.removeEventListener("touchstart",this.boundForwardEvent),this.eventTracker.removeEventListener("touchend",this.boundForwardEvent),this.eventTracker.removeEventListener("touchcancel",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerover",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerenter",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerdown",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerup",this.boundForwardEvent),this.eventTracker.removeEventListener("pointercancel",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerout",this.boundForwardEvent),this.eventTracker.removeEventListener("pointerleave",this.boundForwardEvent),window.removeEventListener("scroll",this.boundScrollEvent))}},{key:"scrollEvent",value:function(){this.element&&(this.elementPos=this.element.getBoundingClientRect())}},{key:"forwardEvent",value:function(n){n.sourceUid=this.uid,n.forwarded=!0,this.props.pubSub.publish("app.event",n)}},{key:"onScrollHandler",value:function(n){this.scrollTop=n}},{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.baseEl=n},className:Xg("track-renderer-div",Sx["track-renderer"]),style:{height:this.currentProps.height,width:this.currentProps.width}},N.createElement("div",{ref:n=>{this.element=n},className:Xg("track-renderer-element",Sx["track-renderer-element"])}),N.createElement("div",{ref:n=>{this.eventTracker=n},className:Xg("track-renderer-events",Sx["track-renderer-events"])},this.currentProps.children))}}]),i}(N.Component);k$.defaultProps={pluginDataFetchers:{},pluginTracks:{},canvasElement:null,centerHeight:0,centerWidth:0,children:[],galleryDim:0,height:0,initialXDomain:[],initialYDomain:[],isShowGlobalMousePosition:!1,isRangeSelection:!1,leftWidth:0,leftWidthNoGallery:0,paddingLeft:0,paddingTop:0,positionedTracks:[],topHeight:0,topHeightNoGallery:0,width:0,metaTracks:[]};k$.propTypes={canvasElement:L.object,centerHeight:L.number,centerWidth:L.number,children:L.array,disableTrackMenu:L.bool,galleryDim:L.number,height:L.number,initialXDomain:L.array,initialYDomain:L.array,isShowGlobalMousePosition:L.bool,isRangeSelection:L.bool,leftWidth:L.number,leftWidthNoGallery:L.number,paddingLeft:L.number,paddingTop:L.number,metaTracks:L.array,onMouseMoveZoom:L.func,onNewTilesLoaded:L.func.isRequired,onScalesChanged:L.func.isRequired,pixiRenderer:L.object.isRequired,pixiStage:L.object.isRequired,pluginDataFetchers:L.object,pluginTracks:L.object,positionedTracks:L.array,pubSub:L.object.isRequired,setCentersFunction:L.func,svgElement:L.object.isRequired,theme:L.symbol.isRequired,topHeight:L.number,topHeightNoGallery:L.number,viewOptions:L.object,width:L.number,xDomainLimits:L.array,yDomainLimits:L.array,valueScaleZoom:L.bool,zoomable:L.bool.isRequired,zoomDomain:L.array,uid:L.string,zoomLimits:L.array};const L4t=iy(um(k$));var BXe={exports:{}};/*! react-checkbox-tree - v1.8.0 | 2022 */(function(e,g){/*! For license information please see index.browser.js.LICENSE.txt */(function(i,I){e.exports=I(N)})(self,i=>(()=>{var I={4184:(o,a)=>{var s;(function(){var A={}.hasOwnProperty;function l(){for(var c=[],u=0;u{var A=s(852)(s(5639),"DataView");o.exports=A},1989:(o,a,s)=>{var A=s(1789),l=s(401),c=s(7667),u=s(1327),d=s(1866);function h(m){var f=-1,b=m==null?0:m.length;for(this.clear();++f{var A=s(7040),l=s(4125),c=s(2117),u=s(7518),d=s(4705);function h(m){var f=-1,b=m==null?0:m.length;for(this.clear();++f{var A=s(852)(s(5639),"Map");o.exports=A},3369:(o,a,s)=>{var A=s(4785),l=s(1285),c=s(6e3),u=s(9916),d=s(5265);function h(m){var f=-1,b=m==null?0:m.length;for(this.clear();++f{var A=s(852)(s(5639),"Promise");o.exports=A},8525:(o,a,s)=>{var A=s(852)(s(5639),"Set");o.exports=A},8668:(o,a,s)=>{var A=s(3369),l=s(619),c=s(2385);function u(d){var h=-1,m=d==null?0:d.length;for(this.__data__=new A;++h{var A=s(8407),l=s(7465),c=s(3779),u=s(7599),d=s(4758),h=s(4309);function m(f){var b=this.__data__=new A(f);this.size=b.size}m.prototype.clear=l,m.prototype.delete=c,m.prototype.get=u,m.prototype.has=d,m.prototype.set=h,o.exports=m},2705:(o,a,s)=>{var A=s(5639).Symbol;o.exports=A},1149:(o,a,s)=>{var A=s(5639).Uint8Array;o.exports=A},577:(o,a,s)=>{var A=s(852)(s(5639),"WeakMap");o.exports=A},4963:o=>{o.exports=function(a,s){for(var A=-1,l=a==null?0:a.length,c=0,u=[];++A{var A=s(2545),l=s(5694),c=s(1469),u=s(4144),d=s(5776),h=s(6719),m=Object.prototype.hasOwnProperty;o.exports=function(f,b){var p=c(f),y=!p&&l(f),Z=!p&&!y&&u(f),B=!p&&!y&&!Z&&h(f),G=p||y||Z||B,v=G?A(f.length,String):[],w=v.length;for(var V in f)!b&&!m.call(f,V)||G&&(V=="length"||Z&&(V=="offset"||V=="parent")||B&&(V=="buffer"||V=="byteLength"||V=="byteOffset")||d(V,w))||v.push(V);return v}},2488:o=>{o.exports=function(a,s){for(var A=-1,l=s.length,c=a.length;++A{o.exports=function(a,s){for(var A=-1,l=a==null?0:a.length;++A{var A=s(7813);o.exports=function(l,c){for(var u=l.length;u--;)if(A(l[u][0],c))return u;return-1}},8866:(o,a,s)=>{var A=s(2488),l=s(1469);o.exports=function(c,u,d){var h=u(c);return l(c)?h:A(h,d(c))}},4239:(o,a,s)=>{var A=s(2705),l=s(9607),c=s(2333),u=A?A.toStringTag:void 0;o.exports=function(d){return d==null?d===void 0?"[object Undefined]":"[object Null]":u&&u in Object(d)?l(d):c(d)}},9454:(o,a,s)=>{var A=s(4239),l=s(7005);o.exports=function(c){return l(c)&&A(c)=="[object Arguments]"}},939:(o,a,s)=>{var A=s(2492),l=s(7005);o.exports=function c(u,d,h,m,f){return u===d||(u==null||d==null||!l(u)&&!l(d)?u!=u&&d!=d:A(u,d,h,m,c,f))}},2492:(o,a,s)=>{var A=s(6384),l=s(7114),c=s(8351),u=s(6096),d=s(4160),h=s(1469),m=s(4144),f=s(6719),b="[object Arguments]",p="[object Array]",y="[object Object]",Z=Object.prototype.hasOwnProperty;o.exports=function(B,G,v,w,V,S){var X=h(B),W=h(G),R=X?p:d(B),H=W?p:d(G),k=(R=R==b?y:R)==y,K=(H=H==b?y:H)==y,D=R==H;if(D&&m(B)){if(!m(G))return!1;X=!0,k=!1}if(D&&!k)return S||(S=new A),X||f(B)?l(B,G,v,w,V,S):c(B,G,R,v,w,V,S);if(!(1&v)){var J=k&&Z.call(B,"__wrapped__"),P=K&&Z.call(G,"__wrapped__");if(J||P){var te=J?B.value():B,q=P?G.value():G;return S||(S=new A),V(te,q,v,w,S)}}return!!D&&(S||(S=new A),u(B,G,v,w,V,S))}},8458:(o,a,s)=>{var A=s(3560),l=s(5346),c=s(3218),u=s(346),d=/^\[object .+?Constructor\]$/,h=Function.prototype,m=Object.prototype,f=h.toString,b=m.hasOwnProperty,p=RegExp("^"+f.call(b).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o.exports=function(y){return!(!c(y)||l(y))&&(A(y)?p:d).test(u(y))}},8749:(o,a,s)=>{var A=s(4239),l=s(1780),c=s(7005),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,o.exports=function(d){return c(d)&&l(d.length)&&!!u[A(d)]}},280:(o,a,s)=>{var A=s(5726),l=s(6916),c=Object.prototype.hasOwnProperty;o.exports=function(u){if(!A(u))return l(u);var d=[];for(var h in Object(u))c.call(u,h)&&h!="constructor"&&d.push(h);return d}},2545:o=>{o.exports=function(a,s){for(var A=-1,l=Array(a);++A{o.exports=function(a){return function(s){return a(s)}}},4757:o=>{o.exports=function(a,s){return a.has(s)}},4429:(o,a,s)=>{var A=s(5639)["__core-js_shared__"];o.exports=A},7114:(o,a,s)=>{var A=s(8668),l=s(2908),c=s(4757);o.exports=function(u,d,h,m,f,b){var p=1&h,y=u.length,Z=d.length;if(y!=Z&&!(p&&Z>y))return!1;var B=b.get(u),G=b.get(d);if(B&&G)return B==d&&G==u;var v=-1,w=!0,V=2&h?new A:void 0;for(b.set(u,d),b.set(d,u);++v{var A=s(2705),l=s(1149),c=s(7813),u=s(7114),d=s(8776),h=s(1814),m=A?A.prototype:void 0,f=m?m.valueOf:void 0;o.exports=function(b,p,y,Z,B,G,v){switch(y){case"[object DataView]":if(b.byteLength!=p.byteLength||b.byteOffset!=p.byteOffset)return!1;b=b.buffer,p=p.buffer;case"[object ArrayBuffer]":return!(b.byteLength!=p.byteLength||!G(new l(b),new l(p)));case"[object Boolean]":case"[object Date]":case"[object Number]":return c(+b,+p);case"[object Error]":return b.name==p.name&&b.message==p.message;case"[object RegExp]":case"[object String]":return b==p+"";case"[object Map]":var w=d;case"[object Set]":var V=1&Z;if(w||(w=h),b.size!=p.size&&!V)return!1;var S=v.get(b);if(S)return S==p;Z|=2,v.set(b,p);var X=u(w(b),w(p),Z,B,G,v);return v.delete(b),X;case"[object Symbol]":if(f)return f.call(b)==f.call(p)}return!1}},6096:(o,a,s)=>{var A=s(8234),l=Object.prototype.hasOwnProperty;o.exports=function(c,u,d,h,m,f){var b=1&d,p=A(c),y=p.length;if(y!=A(u).length&&!b)return!1;for(var Z=y;Z--;){var B=p[Z];if(!(b?B in u:l.call(u,B)))return!1}var G=f.get(c),v=f.get(u);if(G&&v)return G==u&&v==c;var w=!0;f.set(c,u),f.set(u,c);for(var V=b;++Z{var A=typeof s.g=="object"&&s.g&&s.g.Object===Object&&s.g;o.exports=A},8234:(o,a,s)=>{var A=s(8866),l=s(9551),c=s(3674);o.exports=function(u){return A(u,c,l)}},5050:(o,a,s)=>{var A=s(7019);o.exports=function(l,c){var u=l.__data__;return A(c)?u[typeof c=="string"?"string":"hash"]:u.map}},852:(o,a,s)=>{var A=s(8458),l=s(7801);o.exports=function(c,u){var d=l(c,u);return A(d)?d:void 0}},9607:(o,a,s)=>{var A=s(2705),l=Object.prototype,c=l.hasOwnProperty,u=l.toString,d=A?A.toStringTag:void 0;o.exports=function(h){var m=c.call(h,d),f=h[d];try{h[d]=void 0;var b=!0}catch{}var p=u.call(h);return b&&(m?h[d]=f:delete h[d]),p}},9551:(o,a,s)=>{var A=s(4963),l=s(479),c=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,d=u?function(h){return h==null?[]:(h=Object(h),A(u(h),function(m){return c.call(h,m)}))}:l;o.exports=d},4160:(o,a,s)=>{var A=s(8552),l=s(7071),c=s(3818),u=s(8525),d=s(577),h=s(4239),m=s(346),f="[object Map]",b="[object Promise]",p="[object Set]",y="[object WeakMap]",Z="[object DataView]",B=m(A),G=m(l),v=m(c),w=m(u),V=m(d),S=h;(A&&S(new A(new ArrayBuffer(1)))!=Z||l&&S(new l)!=f||c&&S(c.resolve())!=b||u&&S(new u)!=p||d&&S(new d)!=y)&&(S=function(X){var W=h(X),R=W=="[object Object]"?X.constructor:void 0,H=R?m(R):"";if(H)switch(H){case B:return Z;case G:return f;case v:return b;case w:return p;case V:return y}return W}),o.exports=S},7801:o=>{o.exports=function(a,s){return a==null?void 0:a[s]}},1789:(o,a,s)=>{var A=s(4536);o.exports=function(){this.__data__=A?A(null):{},this.size=0}},401:o=>{o.exports=function(a){var s=this.has(a)&&delete this.__data__[a];return this.size-=s?1:0,s}},7667:(o,a,s)=>{var A=s(4536),l=Object.prototype.hasOwnProperty;o.exports=function(c){var u=this.__data__;if(A){var d=u[c];return d==="__lodash_hash_undefined__"?void 0:d}return l.call(u,c)?u[c]:void 0}},1327:(o,a,s)=>{var A=s(4536),l=Object.prototype.hasOwnProperty;o.exports=function(c){var u=this.__data__;return A?u[c]!==void 0:l.call(u,c)}},1866:(o,a,s)=>{var A=s(4536);o.exports=function(l,c){var u=this.__data__;return this.size+=this.has(l)?0:1,u[l]=A&&c===void 0?"__lodash_hash_undefined__":c,this}},5776:o=>{var a=/^(?:0|[1-9]\d*)$/;o.exports=function(s,A){var l=typeof s;return!!(A=A??9007199254740991)&&(l=="number"||l!="symbol"&&a.test(s))&&s>-1&&s%1==0&&s{o.exports=function(a){var s=typeof a;return s=="string"||s=="number"||s=="symbol"||s=="boolean"?a!=="__proto__":a===null}},5346:(o,a,s)=>{var A,l=s(4429),c=(A=/[^.]+$/.exec(l&&l.keys&&l.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";o.exports=function(u){return!!c&&c in u}},5726:o=>{var a=Object.prototype;o.exports=function(s){var A=s&&s.constructor;return s===(typeof A=="function"&&A.prototype||a)}},7040:o=>{o.exports=function(){this.__data__=[],this.size=0}},4125:(o,a,s)=>{var A=s(8470),l=Array.prototype.splice;o.exports=function(c){var u=this.__data__,d=A(u,c);return!(d<0||(d==u.length-1?u.pop():l.call(u,d,1),--this.size,0))}},2117:(o,a,s)=>{var A=s(8470);o.exports=function(l){var c=this.__data__,u=A(c,l);return u<0?void 0:c[u][1]}},7518:(o,a,s)=>{var A=s(8470);o.exports=function(l){return A(this.__data__,l)>-1}},4705:(o,a,s)=>{var A=s(8470);o.exports=function(l,c){var u=this.__data__,d=A(u,l);return d<0?(++this.size,u.push([l,c])):u[d][1]=c,this}},4785:(o,a,s)=>{var A=s(1989),l=s(8407),c=s(7071);o.exports=function(){this.size=0,this.__data__={hash:new A,map:new(c||l),string:new A}}},1285:(o,a,s)=>{var A=s(5050);o.exports=function(l){var c=A(this,l).delete(l);return this.size-=c?1:0,c}},6e3:(o,a,s)=>{var A=s(5050);o.exports=function(l){return A(this,l).get(l)}},9916:(o,a,s)=>{var A=s(5050);o.exports=function(l){return A(this,l).has(l)}},5265:(o,a,s)=>{var A=s(5050);o.exports=function(l,c){var u=A(this,l),d=u.size;return u.set(l,c),this.size+=u.size==d?0:1,this}},8776:o=>{o.exports=function(a){var s=-1,A=Array(a.size);return a.forEach(function(l,c){A[++s]=[c,l]}),A}},4536:(o,a,s)=>{var A=s(852)(Object,"create");o.exports=A},6916:(o,a,s)=>{var A=s(5569)(Object.keys,Object);o.exports=A},1167:(o,a,s)=>{o=s.nmd(o);var A=s(1957),l=a&&!a.nodeType&&a,c=l&&o&&!o.nodeType&&o,u=c&&c.exports===l&&A.process,d=function(){try{return c&&c.require&&c.require("util").types||u&&u.binding&&u.binding("util")}catch{}}();o.exports=d},2333:o=>{var a=Object.prototype.toString;o.exports=function(s){return a.call(s)}},5569:o=>{o.exports=function(a,s){return function(A){return a(s(A))}}},5639:(o,a,s)=>{var A=s(1957),l=typeof self=="object"&&self&&self.Object===Object&&self,c=A||l||Function("return this")();o.exports=c},619:o=>{o.exports=function(a){return this.__data__.set(a,"__lodash_hash_undefined__"),this}},2385:o=>{o.exports=function(a){return this.__data__.has(a)}},1814:o=>{o.exports=function(a){var s=-1,A=Array(a.size);return a.forEach(function(l){A[++s]=l}),A}},7465:(o,a,s)=>{var A=s(8407);o.exports=function(){this.__data__=new A,this.size=0}},3779:o=>{o.exports=function(a){var s=this.__data__,A=s.delete(a);return this.size=s.size,A}},7599:o=>{o.exports=function(a){return this.__data__.get(a)}},4758:o=>{o.exports=function(a){return this.__data__.has(a)}},4309:(o,a,s)=>{var A=s(8407),l=s(7071),c=s(3369);o.exports=function(u,d){var h=this.__data__;if(h instanceof A){var m=h.__data__;if(!l||m.length<199)return m.push([u,d]),this.size=++h.size,this;h=this.__data__=new c(m)}return h.set(u,d),this.size=h.size,this}},346:o=>{var a=Function.prototype.toString;o.exports=function(s){if(s!=null){try{return a.call(s)}catch{}try{return s+""}catch{}}return""}},7813:o=>{o.exports=function(a,s){return a===s||a!=a&&s!=s}},5694:(o,a,s)=>{var A=s(9454),l=s(7005),c=Object.prototype,u=c.hasOwnProperty,d=c.propertyIsEnumerable,h=A(function(){return arguments}())?A:function(m){return l(m)&&u.call(m,"callee")&&!d.call(m,"callee")};o.exports=h},1469:o=>{var a=Array.isArray;o.exports=a},8612:(o,a,s)=>{var A=s(3560),l=s(1780);o.exports=function(c){return c!=null&&l(c.length)&&!A(c)}},4144:(o,a,s)=>{o=s.nmd(o);var A=s(5639),l=s(5062),c=a&&!a.nodeType&&a,u=c&&o&&!o.nodeType&&o,d=u&&u.exports===c?A.Buffer:void 0,h=(d?d.isBuffer:void 0)||l;o.exports=h},8446:(o,a,s)=>{var A=s(939);o.exports=function(l,c){return A(l,c)}},3560:(o,a,s)=>{var A=s(4239),l=s(3218);o.exports=function(c){if(!l(c))return!1;var u=A(c);return u=="[object Function]"||u=="[object GeneratorFunction]"||u=="[object AsyncFunction]"||u=="[object Proxy]"}},1780:o=>{o.exports=function(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=9007199254740991}},3218:o=>{o.exports=function(a){var s=typeof a;return a!=null&&(s=="object"||s=="function")}},7005:o=>{o.exports=function(a){return a!=null&&typeof a=="object"}},6719:(o,a,s)=>{var A=s(8749),l=s(1717),c=s(1167),u=c&&c.isTypedArray,d=u?l(u):A;o.exports=d},3674:(o,a,s)=>{var A=s(4636),l=s(280),c=s(8612);o.exports=function(u){return c(u)?A(u):l(u)}},8306:(o,a,s)=>{var A=s(3369);function l(c,u){if(typeof c!="function"||u!=null&&typeof u!="function")throw new TypeError("Expected a function");var d=function(){var h=arguments,m=u?u.apply(this,h):h[0],f=d.cache;if(f.has(m))return f.get(m);var b=c.apply(this,h);return d.cache=f.set(m,b)||f,b};return d.cache=new(l.Cache||A),d}l.Cache=A,o.exports=l},479:o=>{o.exports=function(){return[]}},5062:o=>{o.exports=function(){return!1}},2703:(o,a,s)=>{var A=s(414);function l(){}function c(){}c.resetWarningCache=l,o.exports=function(){function u(m,f,b,p,y,Z){if(Z!==A){var B=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw B.name="Invariant Violation",B}}function d(){return u}u.isRequired=u;var h={array:u,bigint:u,bool:u,func:u,number:u,object:u,string:u,symbol:u,any:u,arrayOf:d,element:u,elementType:u,instanceOf:d,node:u,objectOf:d,oneOf:d,oneOfType:d,shape:d,exact:d,checkPropTypes:c,resetWarningCache:l};return h.PropTypes=h,h}},5697:(o,a,s)=>{o.exports=s(2703)()},414:o=>{o.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},9787:o=>{o.exports=i}},n={};function r(o){var a=n[o];if(a!==void 0)return a.exports;var s=n[o]={id:o,loaded:!1,exports:{}};return I[o](s,s.exports,r),s.loaded=!0,s.exports}r.n=o=>{var a=o&&o.__esModule?()=>o.default:()=>o;return r.d(a,{a}),a},r.d=(o,a)=>{for(var s in a)r.o(a,s)&&!r.o(o,s)&&Object.defineProperty(o,s,{enumerable:!0,get:a[s]})},r.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}(),r.o=(o,a)=>Object.prototype.hasOwnProperty.call(o,a),r.r=o=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},r.nmd=o=>(o.paths=[],o.children||(o.children=[]),o);var C={};return(()=>{r.r(C),r.d(C,{default:()=>Ke,expandNodesToLevel:()=>fe});var o=r(4184),a=r.n(o),s=r(8446),A=r.n(s),l=r(8306),c=r.n(l);let u=(ue=21)=>crypto.getRandomValues(new Uint8Array(ue)).reduce((le,Ce)=>le+((Ce&=63)<36?Ce.toString(36):Ce<62?(Ce-26).toString(36).toUpperCase():Ce>62?"-":"_"),"");var d=r(5697),h=r.n(d),m=r(9787),f=r.n(m);function b(ue){return b=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(le){return typeof le}:function(le){return le&&typeof Symbol=="function"&&le.constructor===Symbol&&le!==Symbol.prototype?"symbol":typeof le},b(ue)}var p=["children","title"];function y(){return y=Object.assign?Object.assign.bind():function(ue){for(var le=1;le"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var Me,ke=w(oe);if(Re){var Ee=w(this).constructor;Me=Reflect.construct(ke,arguments,Ee)}else Me=ke.apply(this,arguments);return v(this,Me)});function Fe(){return Z(this,Fe),xe.apply(this,arguments)}return le=Fe,(Ce=[{key:"render",value:function(){var Me=this.props,ke=Me.children,Ee=Me.title,O=function(x,ee){if(x==null)return{};var ce,de,Le=function(dt,yt){if(dt==null)return{};var kt,ht,Rt={},xt=Object.keys(dt);for(ht=0;ht=0||(Rt[kt]=dt[kt]);return Rt}(x,ee);if(Object.getOwnPropertySymbols){var Ue=Object.getOwnPropertySymbols(x);for(de=0;de=0||Object.prototype.propertyIsEnumerable.call(x,ce)&&(Le[ce]=x[ce])}return Le}(Me,p);return f().createElement("button",y({"aria-label":Ee,title:Ee,type:"button"},O),ke)}}])&&B(le.prototype,Ce),Object.defineProperty(le,"prototype",{writable:!1}),Fe}(f().PureComponent);V(S,"propTypes",{children:h().node.isRequired,title:h().string}),V(S,"defaultProps",{title:null});const X=S,W={ALL:"all",PARENT:"parent",LEAF:"leaf"};function R(ue){this.message=ue,this.stack=Error().stack}R.prototype=Object.create(Error.prototype),R.prototype.name="CheckboxTreeError";const H=R;function k(ue,le){var Ce=Object.keys(ue);if(Object.getOwnPropertySymbols){var oe=Object.getOwnPropertySymbols(ue);le&&(oe=oe.filter(function(Re){return Object.getOwnPropertyDescriptor(ue,Re).enumerable})),Ce.push.apply(Ce,oe)}return Ce}function K(ue,le,Ce){return le in ue?Object.defineProperty(ue,le,{value:Ce,enumerable:!0,configurable:!0,writable:!0}):ue[le]=Ce,ue}function D(ue,le){if(!(ue instanceof le))throw new TypeError("Cannot call a class as a function")}function J(ue,le){for(var Ce=0;Ce1&&arguments[1]!==void 0?arguments[1]:{};D(this,ue),this.props=oe,this.flatNodes=Re}var le,Ce;return le=ue,Ce=[{key:"setProps",value:function(oe){this.props=oe}},{key:"clone",value:function(){var oe=this,Re={};return Object.keys(this.flatNodes).forEach(function(xe){var Fe=oe.flatNodes[xe];Re[xe]=function(Me){for(var ke=1;ke1&&arguments[1]!==void 0?arguments[1]:{},Fe=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;if(Array.isArray(oe)&&oe.length!==0){var Me=this.props,ke=Me.disabled,Ee=Me.noCascade;oe.forEach(function(O,x){var ee=Re.nodeHasChildren(O);if(Re.flatNodes[O.value]!==void 0)throw new H("Duplicate value '".concat(O.value,"' detected. All node values must be unique."));Re.flatNodes[O.value]={label:O.label,value:O.value,children:O.children,parent:xe,isChild:xe.value!==void 0,isParent:ee,isLeaf:!ee,showCheckbox:O.showCheckbox===void 0||O.showCheckbox,disabled:Re.getDisabledState(O,xe,ke,Ee),treeDepth:Fe,index:x},Re.flattenNodes(O.children,O,Fe+1)})}}},{key:"nodeHasChildren",value:function(oe){return Array.isArray(oe.children)}},{key:"getDisabledState",value:function(oe,Re,xe,Fe){return!!xe||!(Fe||!Re.disabled)||!!oe.disabled}},{key:"deserializeLists",value:function(oe){var Re=this,xe=["checked","expanded"];Object.keys(this.flatNodes).forEach(function(Fe){xe.forEach(function(Me){Re.flatNodes[Fe][Me]=!1})}),xe.forEach(function(Fe){oe[Fe].forEach(function(Me){Re.flatNodes[Me]!==void 0&&(Re.flatNodes[Me][Fe]=!0)})})}},{key:"serializeList",value:function(oe){var Re=this,xe=[];return Object.keys(this.flatNodes).forEach(function(Fe){Re.flatNodes[Fe][oe]&&xe.push(Fe)}),xe}},{key:"expandAllNodes",value:function(oe){var Re=this;return Object.keys(this.flatNodes).forEach(function(xe){Re.flatNodes[xe].isParent&&(Re.flatNodes[xe].expanded=oe)}),this}},{key:"toggleChecked",value:function(oe,Re,xe,Fe){var Me=this,ke=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],Ee=this.flatNodes[oe.value],O=[P.PARENT,P.ALL].indexOf(xe)>-1,x=[P.LEAF,P.ALL].indexOf(xe)>-1;if(Ee.isLeaf||Fe){if(oe.disabled)return this;this.toggleNode(oe.value,"checked",Re)}else(O||Ee.children.length===0)&&this.toggleNode(oe.value,"checked",Re),x&&Ee.children.forEach(function(ee){Me.toggleChecked(ee,Re,xe,Fe,!1)});return ke&&!Fe&&Ee.isChild&&O&&this.toggleParentStatus(Ee.parent,xe),this}},{key:"toggleParentStatus",value:function(oe,Re){var xe=this.flatNodes[oe.value];xe.isChild?(Re===P.ALL&&this.toggleNode(oe.value,"checked",this.isEveryChildChecked(xe)),this.toggleParentStatus(xe.parent,Re)):this.toggleNode(oe.value,"checked",this.isEveryChildChecked(xe))}},{key:"isEveryChildChecked",value:function(oe){var Re=this;return oe.children.every(function(xe){return Re.getNode(xe.value).checked})}},{key:"toggleNode",value:function(oe,Re,xe){return this.flatNodes[oe][Re]=xe,this}}],Ce&&J(le.prototype,Ce),Object.defineProperty(le,"prototype",{writable:!1}),ue}();function q(ue){return q=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(le){return typeof le}:function(le){return le&&typeof Symbol=="function"&&le.constructor===Symbol&&le!==Symbol.prototype?"symbol":typeof le},q(ue)}function $(){return $=Object.assign?Object.assign.bind():function(ue){for(var le=1;le"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var Me,ke=ne(oe);if(Re){var Ee=ne(this).constructor;Me=Reflect.construct(ke,arguments,Ee)}else Me=ke.apply(this,arguments);return he(this,Me)});function Fe(){return ge(this,Fe),xe.apply(this,arguments)}return le=Fe,Ce=[{key:"componentDidMount",value:function(){this.updateDeterminateProperty()}},{key:"componentDidUpdate",value:function(){this.updateDeterminateProperty()}},{key:"updateDeterminateProperty",value:function(){var Me=this.props.indeterminate;this.checkbox.indeterminate=Me}},{key:"render",value:function(){var Me=this,ke=function(Ee){for(var O=1;O"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var Me,ke=gt(oe);if(Re){var Ee=gt(this).constructor;Me=Reflect.construct(ke,arguments,Ee)}else Me=ke.apply(this,arguments);return Qe(this,Me)});function Fe(Me){var ke;return function(Ee,O){if(!(Ee instanceof O))throw new TypeError("Cannot call a class as a function")}(this,Fe),(ke=xe.call(this,Me)).onCheck=ke.onCheck.bind(_e(ke)),ke.onCheckboxKeyPress=ke.onCheckboxKeyPress.bind(_e(ke)),ke.onCheckboxKeyUp=ke.onCheckboxKeyUp.bind(_e(ke)),ke.onClick=ke.onClick.bind(_e(ke)),ke.onExpand=ke.onExpand.bind(_e(ke)),ke}return le=Fe,(Ce=[{key:"onCheck",value:function(){var Me=this.props,ke=Me.value;(0,Me.onCheck)({value:ke,checked:this.getCheckState({toggle:!0})})}},{key:"onCheckboxKeyPress",value:function(Me){Me.which===32&&Me.preventDefault()}},{key:"onCheckboxKeyUp",value:function(Me){var ke=Me.keyCode;[13,32].includes(ke)&&this.onCheck()}},{key:"onClick",value:function(){var Me=this.props,ke=Me.expandOnClick,Ee=Me.isParent,O=Me.value,x=Me.onClick;Ee&&ke&&this.onExpand(),x({value:O,checked:this.getCheckState({toggle:!1})})}},{key:"onExpand",value:function(){var Me=this.props,ke=Me.expanded,Ee=Me.value;(0,Me.onExpand)({value:Ee,expanded:!ke})}},{key:"getCheckState",value:function(Me){var ke=Me.toggle,Ee=this.props,O=Ee.checked,x=Ee.optimisticToggle;return!(O!==0||!ke)||O===1&&!ke||O===2&&x}},{key:"renderCollapseButton",value:function(){var Me=this.props,ke=Me.expandDisabled,Ee=Me.isLeaf,O=Me.lang;return Ee?f().createElement("span",{className:"rct-collapse"},f().createElement("span",{className:"rct-icon"})):f().createElement(X,{className:"rct-collapse rct-collapse-btn",disabled:ke,title:O.toggle,onClick:this.onExpand},this.renderCollapseIcon())}},{key:"renderCollapseIcon",value:function(){var Me=this.props,ke=Me.expanded,Ee=Me.icons,O=Ee.expandClose,x=Ee.expandOpen;return ke?x:O}},{key:"renderCheckboxIcon",value:function(){var Me=this.props,ke=Me.checked,Ee=Me.icons,O=Ee.uncheck,x=Ee.check,ee=Ee.halfCheck;return ke===0?O:ke===1?x:ee}},{key:"renderNodeIcon",value:function(){var Me=this.props,ke=Me.expanded,Ee=Me.icon,O=Me.icons,x=O.leaf,ee=O.parentClose,ce=O.parentOpen,de=Me.isLeaf;return Ee!==null?Ee:de?x:ke?ce:ee}},{key:"renderBareLabel",value:function(Me){var ke=this.props,Ee=ke.onClick,O=ke.title,x=Ee!==null;return f().createElement("span",{className:"rct-bare-label",title:O},x?f().createElement("span",{className:"rct-node-clickable",onClick:this.onClick,onKeyPress:this.onClick,role:"button",tabIndex:0},Me):Me)}},{key:"renderCheckboxLabel",value:function(Me){var ke=this.props,Ee=ke.checked,O=ke.disabled,x=ke.title,ee=ke.treeId,ce=ke.value,de=ke.onClick!==null,Le="".concat(ee,"-").concat(String(ce).split(" ").join("_")),Ue=[f().createElement("label",{key:0,htmlFor:Le,title:x},f().createElement(ve,{checked:Ee===1,disabled:O,id:Le,indeterminate:Ee===2,onClick:this.onCheck,onChange:function(){}}),f().createElement("span",{"aria-checked":Ee===1,"aria-disabled":O,className:"rct-checkbox",role:"checkbox",tabIndex:0,onKeyPress:this.onCheckboxKeyPress,onKeyUp:this.onCheckboxKeyUp},this.renderCheckboxIcon()),de?null:Me)];return de&&Ue.push(f().createElement("span",{key:1,className:"rct-node-clickable",onClick:this.onClick,onKeyPress:this.onClick,role:"link",tabIndex:0},Me)),Ue}},{key:"renderLabel",value:function(){var Me=this.props,ke=Me.label,Ee=Me.showCheckbox,O=[Me.showNodeIcon?f().createElement("span",{key:0,className:"rct-node-icon"},this.renderNodeIcon()):null,f().createElement("span",{key:1,className:"rct-title"},ke)];return Ee?this.renderCheckboxLabel(O):this.renderBareLabel(O)}},{key:"renderChildren",value:function(){return this.props.expanded?this.props.children:null}},{key:"render",value:function(){var Me=this.props,ke=Me.className,Ee=Me.disabled,O=Me.expanded,x=Me.isLeaf,ee=a()({"rct-node":!0,"rct-node-leaf":x,"rct-node-parent":!x,"rct-node-expanded":!x&&O,"rct-node-collapsed":!x&&!O,"rct-disabled":Ee},ke);return f().createElement("li",{className:ee},f().createElement("span",{className:"rct-text"},this.renderCollapseButton(),this.renderLabel()),this.renderChildren())}}])&&Pe(le.prototype,Ce),Object.defineProperty(le,"prototype",{writable:!1}),Fe}(f().PureComponent);lt(tt,"propTypes",{checked:h().number.isRequired,disabled:h().bool.isRequired,expandDisabled:h().bool.isRequired,expanded:h().bool.isRequired,icons:We.isRequired,isLeaf:h().bool.isRequired,isParent:h().bool.isRequired,label:h().node.isRequired,lang:Be.isRequired,optimisticToggle:h().bool.isRequired,showNodeIcon:h().bool.isRequired,treeId:h().string.isRequired,value:h().oneOfType([h().string,h().number]).isRequired,onCheck:h().func.isRequired,onExpand:h().func.isRequired,children:h().node,className:h().string,expandOnClick:h().bool,icon:h().node,showCheckbox:h().bool,title:h().string,onClick:h().func}),lt(tt,"defaultProps",{children:null,className:null,expandOnClick:!1,icon:null,showCheckbox:!0,title:null,onClick:function(){}});const Xe=tt,ae=h().oneOfType([h().arrayOf(h().string),h().arrayOf(h().number)]);function ye(ue,le){var Ce=Object.keys(ue);if(Object.getOwnPropertySymbols){var oe=Object.getOwnPropertySymbols(ue);le&&(oe=oe.filter(function(Re){return Object.getOwnPropertyDescriptor(ue,Re).enumerable})),Ce.push.apply(Ce,oe)}return Ce}function He(ue){for(var le=1;le"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var ke,Ee=ct(Re);if(xe){var O=ct(this).constructor;ke=Reflect.construct(Ee,arguments,O)}else ke=Ee.apply(this,arguments);return at(this,ke)});function Me(ke){var Ee;(function(x,ee){if(!(x instanceof ee))throw new TypeError("Cannot call a class as a function")})(this,Me),Ee=Fe.call(this,ke);var O=new te(ke);return O.flattenNodes(ke.nodes),O.deserializeLists({checked:ke.checked,expanded:ke.expanded}),Ee.state={id:ke.id||"rct-".concat(u()),model:O,prevProps:ke},Ee.onCheck=Ee.onCheck.bind(bt(Ee)),Ee.onExpand=Ee.onExpand.bind(bt(Ee)),Ee.onNodeClick=Ee.onNodeClick.bind(bt(Ee)),Ee.onExpandAll=Ee.onExpandAll.bind(bt(Ee)),Ee.onCollapseAll=Ee.onCollapseAll.bind(bt(Ee)),Ee.combineMemorized=c()(function(x,ee){return Ve(Ve({},x),ee)}).bind(bt(Ee)),Ee}return le=Me,Ce=[{key:"onCheck",value:function(ke){var Ee=this.props,O=Ee.checkModel,x=Ee.noCascade,ee=Ee.onCheck,ce=this.state.model.clone(),de=ce.getNode(ke.value);ce.toggleChecked(ke,ke.checked,O,x),ee(ce.serializeList("checked"),Ve(Ve({},de),ke))}},{key:"onExpand",value:function(ke){var Ee=this.props.onExpand,O=this.state.model.clone(),x=O.getNode(ke.value);O.toggleNode(ke.value,"expanded",ke.expanded),Ee(O.serializeList("expanded"),Ve(Ve({},x),ke))}},{key:"onNodeClick",value:function(ke){(0,this.props.onClick)(Ve(Ve({},this.state.model.getNode(ke.value)),ke))}},{key:"onExpandAll",value:function(){this.expandAllNodes()}},{key:"onCollapseAll",value:function(){this.expandAllNodes(!1)}},{key:"expandAllNodes",value:function(){var ke=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0],Ee=this.props.onExpand;Ee(this.state.model.clone().expandAllNodes(ke).serializeList("expanded"))}},{key:"determineShallowCheckState",value:function(ke,Ee){var O=this.state.model.getNode(ke.value);return O.isLeaf||Ee||ke.children.length===0?O.checked?1:0:this.isEveryChildChecked(ke)?1:this.isSomeChildChecked(ke)?2:0}},{key:"isEveryChildChecked",value:function(ke){var Ee=this;return ke.children.every(function(O){return Ee.state.model.getNode(O.value).checkState===1})}},{key:"isSomeChildChecked",value:function(ke){var Ee=this;return ke.children.some(function(O){return Ee.state.model.getNode(O.value).checkState>0})}},{key:"renderTreeNodes",value:function(ke){var Ee=this,O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},x=this.props,ee=x.expandDisabled,ce=x.expandOnClick,de=x.icons,Le=x.lang,Ue=x.noCascade,dt=x.onClick,yt=x.onlyLeafCheckboxes,kt=x.optimisticToggle,ht=x.showNodeTitle,Rt=x.showNodeIcon,xt=this.state,At=xt.id,Xt=xt.model,Pt=Me.defaultProps.icons,Ft=ke.map(function(Vg){var ei=Vg.value,it=Xt.getNode(Vg.value),Zt=it.isParent?Ee.renderTreeNodes(Vg.children,Vg):null;it.checkState=Ee.determineShallowCheckState(Vg,Ue);var Lt=yt?it.isLeaf:it.showCheckbox;return!O.value||Xt.getNode(O.value).expanded?f().createElement(Xe,{key:ei,checked:it.checkState,className:Vg.className,disabled:it.disabled,expandDisabled:ee,expandOnClick:ce,expanded:it.expanded,icon:Vg.icon,icons:Ee.combineMemorized(Pt,de),label:Vg.label,lang:Le,optimisticToggle:kt,isLeaf:it.isLeaf,isParent:it.isParent,showCheckbox:Lt,showNodeIcon:Rt,title:ht?Vg.title||Vg.label:Vg.title,treeId:At,value:Vg.value,onCheck:Ee.onCheck,onClick:dt&&Ee.onNodeClick,onExpand:Ee.onExpand},Zt):null});return f().createElement("ol",null,Ft)}},{key:"renderExpandAll",value:function(){var ke=this.props,Ee=ke.icons,O=Ee.expandAll,x=Ee.collapseAll,ee=ke.lang;return ke.showExpandAll?f().createElement("div",{className:"rct-options"},f().createElement(X,{className:"rct-option rct-option-expand-all",title:ee.expandAll,onClick:this.onExpandAll},O),f().createElement(X,{className:"rct-option rct-option-collapse-all",title:ee.collapseAll,onClick:this.onCollapseAll},x)):null}},{key:"renderHiddenInput",value:function(){var ke=this.props,Ee=ke.name,O=ke.nameAsArray;return Ee===void 0?null:O?this.renderArrayHiddenInput():this.renderJoinedHiddenInput()}},{key:"renderArrayHiddenInput",value:function(){var ke=this.props,Ee=ke.checked,O=ke.name;return Ee.map(function(x){var ee="".concat(O,"[]");return f().createElement("input",{key:x,name:ee,type:"hidden",value:x})})}},{key:"renderJoinedHiddenInput",value:function(){var ke=this.props,Ee=ke.checked,O=ke.name,x=Ee.join(",");return f().createElement("input",{name:O,type:"hidden",value:x})}},{key:"render",value:function(){var ke,Ee=this.props,O=Ee.direction,x=Ee.disabled,ee=Ee.iconsClass,ce=Ee.nodes,de=Ee.nativeCheckboxes,Le=this.state.id,Ue=this.renderTreeNodes(ce),dt=a()((Ht(ke={"react-checkbox-tree":!0,"rct-disabled":x},"rct-icons-".concat(ee),!0),Ht(ke,"rct-native-display",de),Ht(ke,"rct-direction-rtl",O==="rtl"),ke));return f().createElement("div",{className:dt,id:Le},this.renderExpandAll(),this.renderHiddenInput(),Ue)}}],oe=[{key:"getDerivedStateFromProps",value:function(ke,Ee){var O=Ee.model,x=Ee.prevProps,ee=ke.disabled,ce=ke.id,de=ke.nodes,Le=Ve(Ve({},Ee),{},{prevProps:ke});return O.setProps(ke),A()(x.nodes,de)&&x.disabled===ee||(O.reset(),O.flattenNodes(de)),ce!==null&&(Le=Ve(Ve({},Le),{},{id:ce})),O.deserializeLists({checked:ke.checked,expanded:ke.expanded}),Le}}],Ce&&we(le.prototype,Ce),oe&&we(le,oe),Object.defineProperty(le,"prototype",{writable:!1}),Me}(f().Component);function E(ue){return function(le){if(Array.isArray(le))return _(le)}(ue)||function(le){if(typeof Symbol<"u"&&le[Symbol.iterator]!=null||le["@@iterator"]!=null)return Array.from(le)}(ue)||function(le,Ce){if(le){if(typeof le=="string")return _(le,Ce);var oe=Object.prototype.toString.call(le).slice(8,-1);return oe==="Object"&&le.constructor&&(oe=le.constructor.name),oe==="Map"||oe==="Set"?Array.from(le):oe==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(oe)?_(le,Ce):void 0}}(ue)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function _(ue,le){(le==null||le>ue.length)&&(le=ue.length);for(var Ce=0,oe=new Array(le);Ce2&&arguments[2]!==void 0?arguments[2]:0;if(Ce>le)return[];var oe=[];return ue.forEach(function(Re){Re.children&&(oe=[].concat(E(oe),[Re.value],E(fe(Re.children,le,Ce+1))))}),oe}Ht(re,"propTypes",{nodes:h().arrayOf(Y).isRequired,checkModel:h().oneOf([W.LEAF,W.ALL]),checked:ae,direction:h().string,disabled:h().bool,expandDisabled:h().bool,expandOnClick:h().bool,expanded:ae,icons:We,iconsClass:h().string,id:h().string,lang:Be,name:h().string,nameAsArray:h().bool,nativeCheckboxes:h().bool,noCascade:h().bool,onlyLeafCheckboxes:h().bool,optimisticToggle:h().bool,showExpandAll:h().bool,showNodeIcon:h().bool,showNodeTitle:h().bool,onCheck:h().func,onClick:h().func,onExpand:h().func}),Ht(re,"defaultProps",{checkModel:W.LEAF,checked:[],direction:"ltr",disabled:!1,expandDisabled:!1,expandOnClick:!1,expanded:[],icons:{check:f().createElement("span",{className:"rct-icon rct-icon-check"}),uncheck:f().createElement("span",{className:"rct-icon rct-icon-uncheck"}),halfCheck:f().createElement("span",{className:"rct-icon rct-icon-half-check"}),expandClose:f().createElement("span",{className:"rct-icon rct-icon-expand-close"}),expandOpen:f().createElement("span",{className:"rct-icon rct-icon-expand-open"}),expandAll:f().createElement("span",{className:"rct-icon rct-icon-expand-all"}),collapseAll:f().createElement("span",{className:"rct-icon rct-icon-collapse-all"}),parentClose:f().createElement("span",{className:"rct-icon rct-icon-parent-close"}),parentOpen:f().createElement("span",{className:"rct-icon rct-icon-parent-open"}),leaf:f().createElement("span",{className:"rct-icon rct-icon-leaf"})},iconsClass:"fa4",id:null,lang:{collapseAll:"Collapse all",expandAll:"Expand all",toggle:"Toggle"},name:void 0,nameAsArray:!1,nativeCheckboxes:!1,noCascade:!1,onlyLeafCheckboxes:!1,optimisticToggle:!0,showExpandAll:!1,showNodeIcon:!0,showNodeTitle:!1,onCheck:function(){},onClick:null,onExpand:function(){}});const Ke=re})(),C})())})(BXe);var U4t=BXe.exports;const Q4t=Or(U4t);function j4t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function yse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gH(e){return gH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},gH(e)}let SXe=function(e){tjt(i,e);var g=gjt(i);function i(I){var n;j4t(this,i),n=g.call(this,I),n.localTracks=Ah.filter(a=>a.local&&!a.hidden).map(a=>{const s={...a};return s.datatype=a.datatype[0],s}),n.augmentedTracksInfo=Ah,window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(a=>{n.augmentedTracksInfo.push(window.higlassTracksByType[a].config)}),I.datatype?n.localTracks=n.localTracks.filter(a=>a.datatype[0]===I.datatype):n.localTracks=n.localTracks.filter(a=>a.orientation===n.props.orientation),n.localTracks.forEach(a=>{a.uuid=cg.nice()});const r=n.prepareNewEntries("",n.localTracks,{}),C=Object.keys(r),o=C.length?[C[0]]:null;return n.mounted=!1,n.state={selectedUuid:o,options:r,filter:"",checked:[],expanded:[]},n.requestTilesetLists(),n}return $4t(i,[{key:"componentDidMount",value:function(){this.mounted=!0,this.requestTilesetLists(),this.searchBox.focus()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"prepareNewEntries",value:function(n,r,C){const o=C;return r.map(s=>({...s,server:n,tilesetUid:s.uuid,serverUidKey:this.serverUidKey(n,s.uuid),datatype:s.datatype,name:s.name,uid:cg.nice()})).forEach(s=>{o[s.serverUidKey]=s}),o}},{key:"serverUidKey",value:function(n,r){return`${n}/${r}`}},{key:"requestTilesetLists",value:function(){let n=null;if(this.props.datatype?n=`dt=${this.props.datatype}`:n=[...new Set([].concat(...this.augmentedTracksInfo.filter(C=>C.datatype).filter(C=>C.orientation===this.props.orientation||this.props.orientation==="1d-vertical"&&C.orientation==="1d-horizontal").map(C=>C.datatype)))].map(C=>`dt=${C}`).join("&"),!this.props.trackSourceServers){console.warn("No track source servers specified in the viewconf");return}this.props.trackSourceServers.forEach(r=>{vt.json(`${r}/tilesets/?limit=10000&${n}`,(C,o)=>{if(C)console.error("ERROR:",C);else{const a=this.prepareNewEntries(r,o.results,this.state.options),s=Object.keys(a);let{selectedUuid:A}=this.state;if(!A){A=s.length?[s[0]]:null;const l=this.state.options[A[0]];this.props.selectedTilesetChanged([l])}this.mounted&&this.setState({selectedUuid:A,options:a})}},this.props.pubSub)})}},{key:"handleOptionDoubleClick",value:function(n){const r=this.state.options[n.target.value];this.props.onDoubleClick(r)}},{key:"handleSelectedOptions",value:function(n){const r=[],C=[];for(let o=0;os.label.toLowerCase().localeCompare(A.label.toLowerCase(),"en")),o.push(C[a]));return o.sort((a,s)=>a.label.toLowerCase().localeCompare(s.label.toLowerCase(),"en")),o}},{key:"handleChecked",value:function(n){this.handleSelectedOptions(n),this.setState({checked:n})}},{key:"handleExpanded",value:function(n){this.setState({expanded:n})}},{key:"render",value:function(){const n=[];for(const s in this.state.options)n.push(this.state.options[s]);const r=this.partitionByGroup(this.state.options,this.state.filter),C={width:15,height:15,top:2,right:2,position:"relative"},o=JSON.parse(JSON.stringify(C));o.opacity=.5;const a=N.createElement("form",{onSubmit:s=>{s.preventDefault()}},N.createElement("div",{className:"tileset-finder-search-bar"},N.createElement("span",{className:"tileset-finder-label"},"Select tileset:"),N.createElement("input",{ref:s=>{this.searchBox=s},className:"tileset-finder-search-box",onChange:this.handleSearchChange.bind(this),placeholder:"Search Term",type:"text"})),N.createElement("div",{className:"tileset-finder-checkbox-tree"},N.createElement(Q4t,{checked:this.state.checked,expanded:this.state.expanded,icons:{uncheck:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#square_o"})),check:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#check_square_o"})),halfCheck:N.createElement("svg",{style:o},N.createElement("use",{xlinkHref:"#check_square_o"})),leaf:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#file_o"})),expandClose:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#chevron_right"})),expandOpen:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#chevron_down"})),parentClose:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#folder_o"})),parentOpen:N.createElement("svg",{style:C},N.createElement("use",{xlinkHref:"#folder_open_o"}))},nodes:r,onCheck:this.handleChecked.bind(this),onExpand:this.handleExpanded.bind(this)})));return N.createElement("div",null,a)}}]),i}(N.Component);SXe.propTypes={datatype:L.string,orientation:L.string,onDoubleClick:L.func,pubSub:L.object.isRequired,selectedTilesetChanged:L.func,trackSourceServers:L.array};const rjt=iy(SXe);function Cjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Zse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iH(e){return iH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},iH(e)}let wXe=function(e){sjt(i,e);var g=ljt(i);function i(I){var n;return Cjt(this,i),n=g.call(this,I),n.DATATYPE_TO_TRACK_TYPE=OQ(n.props.orientation),n.AVAILABLE_TRACK_TYPES=SX(n.props.datatypes,n.props.orientation),n.state={selectedPlotType:n.AVAILABLE_TRACK_TYPES[0]},n}return ojt(i,[{key:"UNSAFE_componentWillReceiveProps",value:function(n){if(this.AVAILABLE_TRACK_TYPES=SX(n.datatypes,this.props.orientation),!!this.AVAILABLE_TRACK_TYPES&&n.allTracksSameDatatype&&this.AVAILABLE_TRACK_TYPES.length>0&&!this.AVAILABLE_TRACK_TYPES.includes(this.state.selectedPlotType)){const r=UQ(n.datatypes[0][0],this.props.position,this.AVAILABLE_TRACK_TYPES);this.handlePlotTypeSelected(r)}}},{key:"handlePlotTypeSelected",value:function(n){this.setState({selectedPlotType:n}),this.props.onPlotTypeSelected(n.type)}},{key:"render",value:function(){let n="No plot types available for track";const r={};return Ah.forEach(C=>{r[C.type]=C}),this.AVAILABLE_TRACK_TYPES&&(n=this.AVAILABLE_TRACK_TYPES.sort((C,o)=>C.type{const o=r[C.type].thumbnail,a=this.state.selectedPlotType.type===C.type?"plot-type-item plot-type-selected":"plot-type-item",s=r[C.type].thumbnail?N.createElement("div",{className:"track-thumbnail",dangerouslySetInnerHTML:{__html:o.outerHTML}}):N.createElement("div",{className:"track-thumbnail"},N.createElement("svg",{height:20,width:30}));return N.createElement("li",{key:C.type,className:a,onClick:A=>{this.setState({selectedPlotType:C}),this.props.onPlotTypeSelected(C.type)},style:{listStyle:"none",paddingLeft:5,paddingBottom:0}},s,N.createElement("span",{style:{verticalAlign:"middle"}},C.type))})),N.createElement("div",null,n.length>0&&this.props.allTracksSameDatatype&&N.createElement("div",{className:"plot-type-container"},n),!this.props.allTracksSameDatatype&&N.createElement("div",{className:"plot-type-container-empty"},"Datasets with multiple datatypes chosen. They will be added with their default track types."))}}]),i}(N.Component);wXe.propTypes={allTracksSameDatatype:L.bool,datatypes:L.array,orientation:L.string,onPlotTypeSelected:L.func,position:L.string};function hjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Gse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function IH(e){return IH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},IH(e)}let nH=function(e){bjt(i,e);var g=yjt(i);function i(I){var n;return hjt(this,i),n=g.call(this,I),n.options={},n.state={selectedTilesets:[{datatype:"none"}],allTracksSameDatatype:!0},n.handleSubmitBound=n.handleSubmit.bind(YW(n)),n.handleTilesetPickerDoubleClickBound=n.handleTilesetPickerDoubleClick.bind(YW(n)),n.selectedTilesetsChangedBound=n.selectedTilesetsChanged.bind(YW(n)),n}return mjt(i,[{key:"getOrientation",value:function(n){let r=null;return n==="top"||n==="bottom"?r="1d-horizontal":n==="left"||n==="right"?r="1d-vertical":r="2d",r}},{key:"handleSubmit",value:function(n){n&&n.preventDefault(),this.props.onTracksChosen(this.state.selectedTilesets,this.props.position,this.props.host)}},{key:"handleTilesetPickerDoubleClick",value:function(n){this.selectedTilesetsChanged([n]),this.props.onTracksChosen(this.state.selectedTilesets,this.props.position,this.props.host)}},{key:"handleOptionsChanged",value:function(n){this.options=n}},{key:"handlePlotTypeSelected",value:function(n){const{selectedTilesets:r}=this.state;for(const C of r)C.type=n;this.selectedPlotType=n,this.setState({selectedTilesets:r})}},{key:"selectedTilesetsChanged",value:function(n){let r=null;n.length===0?r=[{datatype:"none"}]:r=n;let C=!0;const o=r[0].datatype;for(const a of r)a.datatype!==o&&(C=!1);if(C)for(const a of r)a.type=this.selectedPlotType;else for(const a of r){let s=[a.datatype];const A=this.getOrientation(this.props.position);a.filetype==="cooler"&&(s=[a.datatype,"chromsizes"]);const l=SX([s],A),c=UQ(s[0],this.props.position,l);a.type=c.type}this.setState({selectedTilesets:r,allTracksSameDatatype:C})}},{key:"render",value:function(){const n=this.getOrientation(this.props.position),r=N.createElement("div",null,N.createElement(rjt,{ref:C=>{this.tilesetFinder=C},datatype:this.props.datatype,onDoubleClick:this.handleTilesetPickerDoubleClick.bind(this),onTracksChosen:C=>this.props.onTracksChosen(C,this.props.position),orientation:n,selectedTilesetChanged:this.selectedTilesetsChanged.bind(this),trackSourceServers:this.props.trackSourceServers}));return N.createElement(ww,{maxHeight:!0,okayTitle:"Submit",onCancel:this.props.onCancel,onOkay:this.handleSubmitBound,title:"Add Track"},N.createElement(N.Fragment,null,r,N.createElement(wXe,{ref:C=>{this.plotTypeChooser=C},allTracksSameDatatype:this.state.allTracksSameDatatype,datatypes:this.state.selectedTilesets.map(C=>C.filetype==="cooler"?[C.datatype,"chromsizes"]:[C.datatype]),onPlotTypeSelected:this.handlePlotTypeSelected.bind(this),orientation:n,position:this.props.position})))}}]),i}(N.Component);nH.defaultProps={position:"top"};nH.propTypes={datatype:L.string,host:L.string,onCancel:L.func.isRequired,onTracksChosen:L.func.isRequired,position:L.string,trackSourceServers:L.array.isRequired};function SO(){return SO=Object.assign?Object.assign.bind():function(e){for(var g=1;g"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rH(e){return rH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},rH(e)}let Y$=function(e){Rjt(i,e);var g=Vjt(i);function i(){return vjt(this,i),g.apply(this,arguments)}return Bjt(i,[{key:"render",value:function(){const n=[];return this.props.children.forEach((r,C)=>{const o=`customTrackDialog_${C}`;n.push(N.createElement(r,SO({key:o},this.props.bodyProps[C])))}),N.createElement(ww,{maxHeight:!0,okayOnly:!0,okayTitle:"Close",onCancel:this.props.onCancel,onOkay:this.props.onCancel,title:this.props.title},n)}}]),i}(N.PureComponent);Y$.defaultProps={};Y$.propTypes={onCancel:L.func.isRequired,title:L.string,bodyProps:L.array,children:L.array};function Tjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Bse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function CH(e){return CH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},CH(e)}const Sse=20;let pu=function(e){Kjt(i,e);var g=Fjt(i);function i(I){var n;return Tjt(this,i),n=g.call(this,I),n.adjusted=!1,n.state={orientation:n.props.orientation?n.props.orientation:"right",left:n.props.position.left,top:n.props.position.top,submenuShown:null},n}return Njt(i,[{key:"componentDidMount",value:function(){this.updateOrientation()}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){this.adjusted=!1,this.setState({left:n.position.left,top:n.position.top})}},{key:"componentDidUpdate",value:function(){this.updateOrientation()}},{key:"handleItemMouseEnterWithRect",value:function(n,r){this.setState({submenuShown:r,submenuSourceBbox:n})}},{key:"handleItemMouseEnter",value:function(n,r){this.handleItemMouseEnterWithRect(n.currentTarget.getBoundingClientRect(),r)}},{key:"handleMouseLeave",value:function(){}},{key:"handleOtherMouseEnter",value:function(){this.setState({submenuShown:null})}},{key:"updateOrientation",value:function(){if(this.adjusted)return;this.adjusted=!0,this.divDom=qi.findDOMNode(this.div);const n=this.divDom.getBoundingClientRect(),r=this.props.parentBbox?this.props.parentBbox:{top:this.props.position.top,left:this.props.position.left,width:0,height:0};let C=this.state.orientation,o=r.top;if(r.top+n.height>window.innerHeight&&(r.top-n.height>0?o=r.top-n.height+Sse:(o=r.top-n.height+Sse,o-=o+n.height-window.innerHeight)),this.state.orientation==="left"){let a=r.left-n.width;a<0&&(r.left+r.width+n.width>window.innerWidth?a=0:(a=r.left+r.width,C="right")),this.setState({left:a,top:o,orientation:C})}else{let a=r.left+r.width;r.left+r.width+n.width>window.innerWidth&&(r.left-n.width<0?(a=0,C="right"):(a=r.left-n.width,C="left")),this.setState({left:a,top:o,orientation:C})}}},{key:"render",value:function(){const n=this.state.left?{left:this.state.left}:{right:this.state.right},r={top:this.state.top},C=Object.assign(n,r);return N.createElement("div",{ref:o=>{this.div=o},className:Xg("context-menu-item",jt["context-menu"],{[jt["context-menu-dark"]]:this.props.theme===ii}),style:C},this.props.children)}}]),i}(N.Component);pu.propTypes={children:L.node,orientation:L.string,parentBbox:L.object,position:L.object,theme:L.symbol.isRequired};function Mjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function wse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oH(e){return oH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},oH(e)}let WO=function(e){Ojt(i,e);var g=_jt(i);function i(){return Mjt(this,i),g.apply(this,arguments)}return zjt(i,[{key:"getSubmenu",value:function(){if(this.state.submenuShown){const n=this.state.submenuSourceBbox,r=this.state.orientation==="left"?{left:this.state.left,top:n.top}:{left:this.state.left+n.width+7,top:n.top},C=this.state.submenuShown;return N.createElement(i,{menuItems:C.children,orientation:this.state.orientation,parentBbox:n,position:r,theme:this.props.theme})}return N.createElement("div",null)}},{key:"componentWillUnmount",value:function(){}},{key:"render",value:function(){const n=[];for(const r in this.props.menuItems){const C=this.props.menuItems[r];n.push(N.createElement(ig,{key:r,onClick:C.handler?C.handler:()=>null,onMouseEnter:C.children?o=>this.handleItemMouseEnter(o,C):this.handleOtherMouseEnter.bind(this),onMouseLeave:this.handleMouseLeave},C.name,C.children&&N.createElement("svg",{className:jt["play-icon"]},N.createElement("use",{xlinkHref:"#play"}))))}return N.createElement("div",{ref:r=>{this.div=r},className:Xg(jt["context-menu"],{[jt["context-menu-dark"]]:this.props.theme===ii}),style:{left:this.state.left,top:this.state.top}},n,this.getSubmenu())}}]),i}(pu);function jjt(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Rse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function aH(e){return aH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},aH(e)}let r$t=function(e){t$t(i,e);var g=g$t(i);function i(){return jjt(this,i),g.apply(this,arguments)}return $jt(i,[{key:"getConfigureSeriesMenu",value:function(n,r,C){const o={},a=window.higlassTracksByType&&window.higlassTracksByType[C.type]&&window.higlassTracksByType[C.type].config&&window.higlassTracksByType[C.type].config.optionsInfo;if(a)for(const s of Object.keys(a))an[s]=a[s];if(!jg[C.type]||!jg[C.type].availableOptions)return null;for(const s of jg[C.type].availableOptions)if(s in an){if(o[s]={name:an[s].name},an[s].generateOptions){const A=an[s].generateOptions(C);o[s].children||(o[s].children={});for(const l of A){const c={name:l.name,value:l.value,handler:()=>{C.options[s]=l.value,this.props.onTrackOptionsChanged(C.uid,C.options),this.props.closeMenu()}};o[s].children[l.value]=c}}if(an[s].inlineOptions)for(const A in an[s].inlineOptions){const l=an[s].inlineOptions[A];o[s].children||(o[s].children={});const c={name:l.name,value:l.value};l.componentPickers&&l.componentPickers[C.type]?c.handler=()=>{this.props.onConfigureTrack(C,l.componentPickers[C.type]),this.props.closeMenu()}:c.handler=()=>{C.options[s]=l.value,this.props.onTrackOptionsChanged(C.uid,C.options),this.props.closeMenu()},o[s].children[A]=c}else an[s].componentPickers&&an[s].componentPickers[C.type]&&(o[s].handler=()=>{this.props.onConfigureTrack(C,an[s].componentPickers[C.type]),this.props.closeMenu()})}return N.createElement(WO,{key:"config-series-menu",closeMenu:this.props.closeMenu,menuItems:o,orientation:this.state.orientation,parentBbox:r,position:n,theme:this.props.theme})}},{key:"getTrackTypeItems",value:function(n,r,C){window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(l=>{jg[l]=window.higlassTracksByType[l].config});let{datatype:o}=C,a=null;C.type in jg&&(o||(o=jg[C.type].datatype[0]),{orientation:a}=jg[C.type]);const s=Object.values(jg).filter(l=>l.datatype).filter(l=>l.orientation).filter(l=>l.datatype.includes(o)).filter(l=>l.orientation===a).map(l=>l.type),A={};for(let l=0;l{this.props.onChangeTrackType(C.uid,s[l])}};return N.createElement(WO,{key:"track-type-items",closeMenu:this.props.closeMenu,menuItems:A,orientation:this.state.orientation,parentBbox:r,position:n,theme:this.props.theme})}},{key:"getSubmenu",value:function(){if(this.state.submenuShown){const n=this.state.submenuSourceBbox,r=this.state.orientation==="left"?{left:this.state.left,top:n.top}:{left:this.state.left+n.width+7,top:n.top},C=this.state.submenuShown,o=C.value;return C.option==="track-type"?this.getTrackTypeItems(r,n,o):this.getConfigureSeriesMenu(r,n,o)}return N.createElement("div",null)}},{key:"getDivideByMenuItem",value:function(){if(this.props.series.data&&this.props.series.data.type==="divided"){const n={tilesetUid:this.props.series.data.children[0].tilesetUid,server:this.props.series.data.children[0].server};return N.createElement(ig,{className:jt["context-menu-item"],onClick:()=>this.props.onChangeTrackData(this.props.series.uid,n),onMouseEnter:r=>this.handleOtherMouseEnter(r)},N.createElement("span",{className:jt["context-menu-span"]},"Remove divisor"))}return N.createElement(ig,{className:jt["context-menu-item"],onClick:()=>this.props.onAddDivisor(this.props.series),onMouseEnter:n=>this.handleOtherMouseEnter(n)},N.createElement("span",{className:jt["context-menu-span"]},"Divide by"))}},{key:"componentWillUnmount",value:function(){}},{key:"render",value:function(){let n=null;jg[this.props.series.type]&&jg[this.props.series.type].exportable&&(n=N.createElement(ig,{className:jt["context-menu-item"],onClick:()=>this.props.onExportData(this.props.hostTrack.uid,this.props.track.uid),onMouseEnter:C=>this.handleOtherMouseEnter(C)},N.createElement("span",{className:jt["context-menu-span"]},"Export Data")));const r=this.props.onAddSeries?N.createElement(ig,{className:jt["context-menu-item"],onClick:()=>{this.props.onCloseTrack(this.props.series.uid),this.props.onAddSeries(this.props.hostTrack.uid)},onMouseEnter:C=>this.handleOtherMouseEnter(C)},N.createElement("span",{className:jt["context-menu-span"]},"Replace Series")):null;return N.createElement("div",{ref:C=>{this.div=C},className:Xg(jt["context-menu"],{[jt["context-menu-dark"]]:this.props.theme===ii}),"data-menu-type":"SeriesListMenu",onMouseLeave:this.props.handleMouseLeave,style:{left:this.state.left,top:this.state.top}},N.createElement(ig,{onClick:()=>{},onMouseEnter:C=>this.handleItemMouseEnter(C,{option:"configure-series",value:this.props.track}),onMouseLeave:C=>this.handleMouseLeave(C)},"Configure Series",N.createElement("svg",{className:jt["play-icon"]},N.createElement("use",{xlinkHref:"#play"}))),N.createElement(ig,{className:jt["context-menu-item"],onClick:()=>{},onMouseEnter:C=>this.handleItemMouseEnter(C,{option:"track-type",value:this.props.track}),onMouseLeave:C=>this.handleMouseLeave(C)},N.createElement("span",{className:jt["context-menu-span"]},"Track Type",N.createElement("svg",{className:jt["play-icon"]},N.createElement("use",{xlinkHref:"#play"})))),n,this.getDivideByMenuItem(),N.createElement(ig,{className:jt["context-menu-item"],onClick:this.props.onCloseTrack,onMouseEnter:C=>this.handleOtherMouseEnter(C)},N.createElement("span",{className:jt["context-menu-span"]},"Close Series")),r,this.getSubmenu())}}]),i}(pu);const RXe=e=>{let g=[];for(const i of e)i.contents?g=g.concat(i.contents):g.push(i);return g},K$=(e,g,i,I)=>e?(window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(n=>{jg[n]=window.higlassTracksByType[n].config}),RXe(e).map(n=>{const r=jg[n.type]?jg[n.type].thumbnail:null,C=r?N.createElement("div",{className:jt["context-menu-icon"],dangerouslySetInnerHTML:{__html:r.outerHTML}}):N.createElement("div",{className:jt["context-menu-icon"]},N.createElement("svg",null));return N.createElement(ig,{key:n.uid,className:jt["context-menu-item"],onClick:()=>{I&&I(n.uid)},onMouseEnter:o=>{g&&g(o,n)},onMouseLeave:o=>{i&&i(o)}},C,N.createElement("span",{className:jt["context-menu-span"]},n.options&&n.options.name&&n.options.name.length?n.options.name:n.type,g&&i?N.createElement("svg",{className:jt["play-icon"]},N.createElement("use",{xlinkHref:"#play"})):null))})):null;function C$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Vse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function AH(e){return AH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},AH(e)}const VXe=xk(e=>function(g){s$t(I,g);var i=l$t(I);function I(){return C$t(this,I),i.apply(this,arguments)}return o$t(I,[{key:"getSubmenu",value:function(){if(this.state.submenuShown){const r=this.state.submenuSourceBbox;let C=null;this.state.orientation==="left"?C={left:this.state.left,top:r.top}:C={left:this.state.left+r.width+7,top:r.top};const a=RXe(this.props.tracks).filter(A=>A.uid===this.state.submenuShown.uid)[0],s=a&&a.position!=="whole";return N.createElement(r$t,{key:`series-list-menu-${a.uid}`,ref:A=>{this.seriesListMenu=A},closeMenu:this.props.closeMenu,hostTrack:this.props.tracks[0],onAddDivisor:this.props.onAddDivisor,onAddSeries:s?this.props.onAddSeries:null,onChangeTrackData:this.props.onChangeTrackData,onChangeTrackType:this.props.onChangeTrackType,onCloseTrack:()=>this.props.onCloseTrack(this.state.submenuShown.uid),onConfigureTrack:this.props.onConfigureTrack,onDivideSeries:this.props.onDivideSeries,onExportData:this.props.onExportData,onLockScales:this.props.onLockScales,onTrackOptionsChanged:this.props.onTrackOptionsChanged,orientation:this.state.orientation,parentBbox:r,position:C,series:this.state.submenuShown,theme:this.props.theme,track:a,trackOrientation:this.props.trackOrientation,trackSourceServers:this.props.trackSourceServers})}return N.createElement("div",null)}}]),I}(e));function h$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Wse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function m0(e){return m0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},m0(e)}let S$t=function(e){y$t(i,e);var g=Z$t(i);function i(I){var n;return h$t(this,i),n=g.call(this,I),n.seriesRefs={},n.seriesListMenu=null,n}return m$t(i,[{key:"componentDidMount",value:function(){KW(m0(i.prototype),"componentDidMount",this).call(this)}},{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.div=n},className:Xg(jt["context-menu"],{[jt["context-menu-dark"]]:this.props.theme===ii}),"data-menu-type":"ConfigTrackMenu",style:{left:this.state.left,top:this.state.top}},K$(this.props.tracks,this.handleItemMouseEnter.bind(this),this.handleMouseLeave.bind(this),null),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{contextMenu:this,onClick:()=>this.props.onLockValueScale(this.props.tracks[0].uid),onMouseEnter:n=>this.handleOtherMouseEnter(n)},"Lock Value Scale With"),N.createElement(ig,{contextMenu:this,onClick:()=>this.props.onUnlockValueScale(this.props.tracks[0].uid),onMouseEnter:n=>this.handleOtherMouseEnter(n)},"Unlock Value Scale"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{contextMenu:this,onClick:()=>this.props.onAddSeries(this.props.tracks[0].uid),onMouseEnter:n=>this.handleOtherMouseEnter(n)},"Add Series"),N.createElement(ig,{onClick:()=>this.props.onCloseTrack(this.props.tracks[0].uid)},"Close Track"),N.createElement(ig,{onClick:()=>{this.props.onReplaceTrack(this.props.tracks[0].uid,this.props.trackOrientation)}},"Replace Track"),this.getSubmenu())}}]),i}(Ay(pu).with(VXe));function WXe(e){return N.createElement("div",null,K$(e.tracks,null,null,e.onCloseTrack),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:()=>e.onCloseTrack(e.tracks[0].uid)},"Close all series"))}WXe.propTypes={onCloseTrack:L.func.isRequired,tracks:L.array.isRequired};function w$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Xse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sH(e){return sH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},sH(e)}let xc=function(e){X$t(i,e);var g=H$t(i);function i(I){var n;return w$t(this,i),n=g.call(this,I),n.clickHandlerBound=n.clickHandler.bind(FW(n)),n.contextMenuHandlerBound=n.contextMenuHandler.bind(FW(n)),n.resizeHandlerBound=n.resizeHandler.bind(FW(n)),n}return R$t(i,[{key:"componentDidMount",value:function(){this.popup=document.createElement("div"),document.body.appendChild(this.popup),this.popup.style.zIndex=99,this.popup.style.position="absolute",this.popup.className="hg-popup",document.addEventListener("click",this.clickHandlerBound,!0),document.addEventListener("contextmenu",this.contextMenuHandlerBound,!0),window.addEventListener("resize",this.resizeHandlerBound,!0),this._renderLayer()}},{key:"componentDidUpdate",value:function(){this._renderLayer()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.clickHandlerBound,!0),document.removeEventListener("contextmenu",this.contextMenuHandlerBound,!0),window.removeEventListener("resize",this.resizeHandlerBound,!0),qi.unmountComponentAtNode(this.popup),document.body.removeChild(this.popup)}},{key:"_renderLayer",value:function(){qi.render(this.props.children,this.popup)}},{key:"clickHandler",value:function(n){this.popup.contains(n.target)||this.props.onMenuClosed&&this.props.onMenuClosed(n)}},{key:"contextMenuHandler",value:function(n){n.altKey||(n.preventDefault(),this.clickHandler(n))}},{key:"resizeHandler",value:function(){this.props.onMenuClosed(null)}},{key:"render",value:function(){return N.createElement("div",null)}}]),i}(N.Component);xc.defaultProps={onMenuClosed:lve};xc.propTypes={children:L.node.isRequired,onMenuClosed:L.func};const k$t=TGe(e=>N.createElement(B9e,{className:e.className,controlAlignLeft:e.controlAlignLeft,editable:e.editable,handleConfigTrack:e.handleConfigTrack,handleResizeTrack:e.handleResizeTrack,height:e.height,item:e.item,onAddSeries:e.onAddSeries,onCloseTrack:e.onCloseTrack,onCloseTrackMenuOpened:e.onCloseTrackMenuOpened,onConfigTrackMenuOpened:e.onConfigTrackMenuOpened,resizeHandles:e.resizeHandles,uid:e.uid,width:e.width})),Y$t={"vertical-tiled-plot":"_vertical-tiled-plot_f3ho8_1"};function K$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Hse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function lH(e){return lH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},lH(e)}function Tse(e){return e&&e.sourceEvent}let YO=function(e){E$t(i,e);var g=M$t(i);function i(I){var n;return K$t(this,i),n=g.call(this,I),n.brushBehavior=QS().on("start",n.brushStarted.bind(DW(n))).on("brush",n.brushed.bind(DW(n))).on("end",n.brushedEnded.bind(DW(n))),n}return F$t(i,[{key:"componentDidMount",value:function(){this.props.isRangeSelectionActive&&this.addBrush()}},{key:"shouldComponentUpdate",value:function(n,r){if(this.rangeSelectionTriggered)return this.rangeSelectionTriggered=!1,this.rangeSelectionTriggeredEnd&&this.props.rangeSelection!==n.rangeSelection&&this.moveBrush(n.rangeSelection[0]?n.rangeSelection[0]:null,!0),this.rangeSelectionTriggeredEnd=!1,this.state!==r;if(this.props.rangeSelection!==n.rangeSelection){const C=this.props.is1dRangeSelection?0:1;return this.moveBrush(n.rangeSelection[C]?n.rangeSelection[C]:null,n.rangeSelectionEnd),this.state!==r}return!0}},{key:"componentDidUpdate",value:function(){this.props.isRangeSelectionActive?this.addBrush():this.removeBrush()}},{key:"addBrush",value:function(){!this.brushEl||this.brushElAddedBefore===this.brushEl||(this.brushElAddedBefore&&this.brushElAddedBefore.on(".brush",null),this.brushEl.call(this.brushBehavior),this.brushElAddedBefore=this.brushEl,Yp(this.brushEl,Lo["track-range-selection-group-brush-selection"]))}},{key:"brushed",value:function(n){const r=this.rangeSelectionMoved;this.rangeSelectionMoved=!1,!(!Tse(n)||!this.props.onRangeSelection||r)&&(this.rangeSelectionTriggered=!0,this.props.onRangeSelection(n.selection))}},{key:"brushStarted",value:function(n){!Tse(n)||!n.selection||this.props.onRangeSelectionStart()}},{key:"brushedEnded",value:function(n){if(!this.props.is1dRangeSelection)return;const r=this.rangeSelectionMovedEnd;this.rangeSelectionMovedEnd=!1,n.selection&&n.sourceEvent&&this.props.onRangeSelection&&!r&&(this.rangeSelectionTriggered=!0,this.rangeSelectionTriggeredEnd=!0,this.props.onRangeSelectionEnd(n.selection)),n.selection||(this.rangeSelectionTriggered=!0,this.props.onRangeSelectionReset())}},{key:"moveBrush",value:function(n,r=!1){if(!this.brushEl)return;const C=n?[this.props.scale(n[0]),this.props.scale(n[1])]:null;this.rangeSelectionMoved=!0,this.rangeSelectionMovedEnd=!0,r?this.brushEl.transition().call(this.brushBehavior.move,C):this.brushEl.call(this.brushBehavior.move,C)}},{key:"removeBrush",value:function(){this.brushElAddedBefore&&(this.brushElAddedBefore.call(this.brushBehavior.move,null),this.brushElAddedBefore.on(".brush",null),this.brushElAddedBefore=void 0,this.props.onRangeSelectionReset())}},{key:"render",value:function(){const n=this.props.tracks.map(o=>o.width).reduce(ql,0),r=this.props.tracks.map(o=>z0(o)).reduce(qS,!1),C=Lo[this.props.isRangeSelectionActive?"track-range-selection-active":"track-range-selection"];return N.createElement("div",{className:Y$t["vertical-tiled-plot"]},r&&N.createElement("svg",{ref:o=>{this.brushEl=hg(o)},className:C,style:{height:this.props.height,width:n},xmlns:"http://www.w3.org/2000/svg"}),N.createElement(Pk,{axis:"x",className:Xg(Uo.list,Uo.stylizedList,Uo.horizontalList),component:v9e,editable:this.props.editable,handleConfigTrack:this.props.handleConfigTrack,handleResizeTrack:this.props.handleResizeTrack,height:this.props.height,helperClass:Uo.stylizedHelper,itemClass:Xg(Uo.stylizedItem,Uo.horizontalItem),itemControlAlignLeft:this.props.tracksControlAlignLeft,itemReactClass:k$t,items:this.props.tracks.map(o=>({configMenuVisible:o.uid===this.props.configTrackMenuId,uid:o.uid||cg.nice(),height:this.props.height,width:o.width,value:o.value})),onAddSeries:this.props.onAddSeries,onCloseTrack:this.props.onCloseTrack,onCloseTrackMenuOpened:this.props.onCloseTrackMenuOpened,onConfigTrackMenuOpened:this.props.onConfigTrackMenuOpened,onSortEnd:this.props.handleSortEnd,referenceAncestor:this.props.referenceAncestor,resizeHandles:this.props.resizeHandles,useDragHandle:!0,width:n}))}}]),i}(N.Component);YO.propTypes={configTrackMenuId:L.string,editable:L.bool,handleConfigTrack:L.func,handleResizeTrack:L.func,handleSortEnd:L.func,is1dRangeSelection:L.bool,isRangeSelectionActive:L.bool,height:L.number,onAddSeries:L.func,onCloseTrack:L.func,onCloseTrackMenuOpened:L.func,onConfigTrackMenuOpened:L.func,onRangeSelection:L.func,onRangeSelectionEnd:L.func,onRangeSelectionReset:L.func,onRangeSelectionStart:L.func,rangeSelection:L.array,rangeSelectionEnd:L.bool,referenceAncestor:L.func,resizeHandles:L.object,scale:L.func,tracks:L.array,tracksControlAlignLeft:L.bool};function J$t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Nse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function cH(e){return cH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},cH(e)}let XXe=function(e){U$t(i,e);var g=Q$t(i);function i(){return J$t(this,i),g.apply(this,arguments)}return O$t(i,[{key:"render",value:function(){const n=K$(this.props.tracks,this.handleItemMouseEnter.bind(this),this.handleMouseLeave.bind(this)),r=this.props.customItems?N.Children.map(this.props.customItems,C=>N.cloneElement(C,{onMouseEnter:o=>{this.handleOtherMouseEnter(o)}})):null;return N.createElement("div",{ref:C=>{this.div=C},className:Xg(jt["context-menu"],{[jt["context-menu-dark"]]:this.props.theme===ii}),"data-menu-type":"ViewContextMenu",style:{left:this.state.left,top:this.state.top}},r,r&&N.createElement("hr",{className:jt["context-menu-hr"]}),n,n&&N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:()=>this.props.onAddTrack({type:"horizontal-rule",y:this.props.coords[1],position:"whole"}),onMouseEnter:C=>this.handleOtherMouseEnter(C)},"Add Horizontal Rule"),N.createElement(ig,{onClick:()=>this.props.onAddTrack({type:"vertical-rule",x:this.props.coords[0],position:"whole"}),onMouseEnter:C=>this.handleOtherMouseEnter(C)},"Add Vertical Rule"),N.createElement(ig,{onClick:()=>this.props.onAddTrack({type:"cross-rule",x:this.props.coords[0],y:this.props.coords[1],position:"whole"}),onMouseEnter:C=>this.handleOtherMouseEnter(C)},"Add Cross Rule"),N.createElement("hr",{className:jt["context-menu-hr"]}),this.hasMatrixTrack(this.props.tracks)&&N.createElement(ig,{onClick:this.handleAddHorizontalSection.bind(this),onMouseEnter:C=>this.handleOtherMouseEnter(C)},"Add Horizontal Cross Section"),this.hasMatrixTrack(this.props.tracks)&&N.createElement(ig,{onClick:this.handleAddVerticalSection.bind(this),onMouseEnter:C=>this.handleOtherMouseEnter(C)},"Add Vertical Cross Section"),this.getSubmenu())}},{key:"hasMatrixTrack",value:function(n){return eW(this.props.tracks).filter(C=>C.type==="heatmap").length>0}},{key:"handleAddHorizontalSection",value:function(){const r=eW(this.props.tracks).filter(C=>C.type==="heatmap")[0];this.props.onAddTrack({type:"horizontal-rule",y:this.props.coords[1],position:"whole"}),this.props.onAddTrack({data:{type:"horizontal-section",server:r.server,tilesetUid:r.tilesetUid,slicePos:this.props.coords[1]},options:{valueScaling:"log"},type:"horizontal-bar",height:30,position:"top"})}},{key:"handleAddVerticalSection",value:function(){const r=eW(this.props.tracks).filter(C=>C.type==="heatmap")[0];this.props.onAddTrack({type:"vertical-rule",x:this.props.coords[0],position:"whole"}),this.props.onAddTrack({data:{type:"vertical-section",server:r.server,tilesetUid:r.tilesetUid,slicePos:this.props.coords[0]},options:{valueScaling:"log"},type:"vertical-bar",height:30,position:"left"})}}]),i}(Ay(pu).with(VXe));XXe.propTypes={coords:L.array,customItems:L.array};function e8t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function kse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function uH(e){return uH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},uH(e)}let F$=function(e){I8t(i,e);var g=n8t(i);function i(I){var n;e8t(this,i),n=g.call(this,I),n.closing=!1;const{tracks:r}=n.props;return n.canvasElement=null,n.tracksByUidInit={},[...n.props.tracks.top||[],...n.props.tracks.right||[],...n.props.tracks.bottom||[],...n.props.tracks.left||[],...n.props.tracks.gallery||[],...n.props.tracks.center||[]].forEach(C=>{C.type==="combined"?C.contents.forEach(o=>{n.tracksByUidInit[o.uid]=!1}):n.tracksByUidInit[C.uid]=!1}),n.xScale=null,n.yScale=null,n.addUidsToTracks(r),n.trackToReplace=null,n.trackRenderer=null,n.configTrackMenu=null,n.state={sizeMeasured:!1,height:10,width:10,tracks:r,init:!1,addTrackPosition:null,customDialog:null,mouseOverOverlayUid:null,forceUpdate:0,rangeSelection:[null,null],rangeSelectionEnd:!1,chromInfo:null,defaultChromSizes:null,contextMenuCustomItems:null,contextMenuPosition:null,addDivisorDialog:null},n.reset=!0,window.higlassTracksByType&&Object.keys(window.higlassTracksByType).forEach(C=>{jg[C]=window.higlassTracksByType[C].config}),n.topHeight=0,n.bottomHeight=0,n.leftWidth=0,n.rightWidth=0,n.centerHeight=0,n.centerWidth=0,n.dragTimeout=null,n.previousPropsStr="",n.contextMenuHandlerBound=n.contextMenuHandler.bind(rn(n)),n.handleNoTrackAddedBound=n.handleNoTrackAdded.bind(rn(n)),n.handleTracksAddedBound=n.handleTracksAdded.bind(rn(n)),n.closeMenusBound=n.closeMenus.bind(rn(n)),n.handleAddDivisorBound=n.handleAddDivisor.bind(rn(n)),n.handleAddSeriesBound=n.handleAddSeries.bind(rn(n)),n.handleChangeTrackDataBound=n.handleChangeTrackData.bind(rn(n)),n.handleChangeTrackTypeBound=n.handleChangeTrackType.bind(rn(n)),n.handleCloseTrackBound=n.handleCloseTrack.bind(rn(n)),n.handleConfigureTrackBound=n.handleConfigureTrack.bind(rn(n)),n.handleExportTrackDataBound=n.handleExportTrackData.bind(rn(n)),n.handleLockValueScaleBound=n.handleLockValueScale.bind(rn(n)),n.handleReplaceTrackBound=n.handleReplaceTrack.bind(rn(n)),n.handleTrackOptionsChangedBound=n.handleTrackOptionsChanged.bind(rn(n)),n.handleUnlockValueScaleBound=n.handleUnlockValueScale.bind(rn(n)),n.onAddTrack=n.handleAddTrack.bind(rn(n)),n}return t8t(i,[{key:"waitForDOMAttachment",value:function(n){if(!this.mounted)return;const r=qi.findDOMNode(this);document.body.contains(r)?n():requestAnimationFrame(()=>this.waitForDOMAttachment(n))}},{key:"componentDidMount",value:function(){this.mounted=!0,this.element=qi.findDOMNode(this),this.canvasElement=qi.findDOMNode(this.props.canvasElement),this.waitForDOMAttachment(()=>{mX.ElementQueries.listen(),this.resizeSensor=new mX.ResizeSensor(this.element.parentNode,this.measureSize.bind(this)),this.measureSize()}),this.addEventListeners(),this.pubSubs=[],this.pubSubs.push(this.props.pubSub.subscribe("contextmenu",this.contextMenuHandlerBound))}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){this.addUidsToTracks(n.tracks),this.setState({tracks:n.tracks})}},{key:"shouldComponentUpdate",value:function(n,r){const C=this.previousPropsStr,o=this.updatablePropsToString(n),a=JSON.stringify(this.state),s=JSON.stringify(r),A=C!==o||a!==s||this.props.chooseTrackHandler!==n.chooseTrackHandler||this.props.customDialog!==n.customDialog;A&&(this.previousPropsStr=o);const l=this.numTracks;return this.numTracks=0,Is(this.props.tracks,()=>this.numTracks++),this.reset=this.reset||l===0&&this.numTracks>0,this.numTracks||(this.tracksByUidInit={}),A}},{key:"UNSAFE_componentWillUpdate",value:function(){}},{key:"componentDidUpdate",value:function(n,r){if(r.rangeSelection!==this.state.rangeSelection){let C=[null,null];this.state.defaultChromSizes&&this.state.rangeSelection.every(o=>o&&o.length)&&(C=this.state.rangeSelection.map(o=>wX(...o,this.state.defaultChromSizes))),this.props.onRangeSelection({dataRange:this.state.rangeSelection,genomicRange:C})}if(this.state.customDialog||this.props.customDialog){const C=this.state.customDialog||this.props.customDialog;if(C.length>0){const o=[],a=[];C.forEach(s=>{o.push(s.bodyComponent),a.push(s.bodyProps)}),this.props.modal.open(N.createElement(Y$,{children:o,bodyProps:a,onCancel:this.props.closeCustomDialog,title:C[0].title}))}}if(n.tracks.center,this.props.tracks.center,(this.state.addTrackPosition||this.props.addTrackPosition)&&this.props.modal.open(N.createElement(nH,{host:this.state.addTrackHost,onCancel:this.handleNoTrackAddedBound,onTracksChosen:this.handleTracksAddedBound,position:this.state.addTrackPosition||this.props.addTrackPosition,trackSourceServers:this.props.trackSourceServers})),this.state.addDivisorDialog){const C=this.state.addDivisorDialog;this.props.modal.open(N.createElement(nH,{datatype:jg[C.type].datatype[0],host:this.state.addTrackHost,onCancel:()=>{this.setState({addDivisorDialog:null})},onTracksChosen:o=>{this.handleDivisorChosen(C,o)},trackSourceServers:this.props.trackSourceServers}))}}},{key:"componentWillUnmount",value:function(){this.closing=!0,this.removeEventListeners(),this.pubSubs.forEach(n=>this.props.pubSub.unsubscribe(n))}},{key:"addUidsToTracks",value:function(n){Object.keys(n).forEach(r=>{n[r].forEach(C=>{C.uid=C.uid||cg.nice()})})}},{key:"contextMenuHandler",value:function(n){if(!this.divTiledPlot)return;const r=this.divTiledPlot.getBoundingClientRect();if(!i4(n.clientX,n.clientY,r.left,r.left+r.width,r.top,r.top+r.height))return;const o=[n.clientX,n.clientY],a=Pg(n,this.divTiledPlot),s=this.trackRenderer.zoomedXScale.invert(a[0]),A=this.trackRenderer.zoomedYScale.invert(a[1]);let l=null;n.hgCustomItems&&(l=n.hgCustomItems.map(c=>N.createElement(ig,{key:c.key,onClick:c.onClick},c.text))),this.setState({contextMenuCustomItems:l,contextMenuPosition:{left:o[0],top:o[1],canvasLeft:a[0]+this.trackRenderer.xPositionOffset,canvasTop:a[1]+this.trackRenderer.yPositionOffset},contextMenuDataX:s,contextMenuDataY:A})}},{key:"measureSize",value:function(){this.element.clientWidth>0&&this.element.clientHeight>0&&this.setState({sizeMeasured:!0,width:this.element.clientWidth,height:this.element.clientHeight})}},{key:"handleTrackOptionsChanged",value:function(n,r){return this.props.onTrackOptionsChanged(n,r)}},{key:"handleScalesChanged",value:function(n,r){this.xScale=n,this.yScale=r,this.props.onScalesChanged(n,r)}},{key:"handleTilesetInfoReceived",value:function(n,r){const C=nC(this.props.tracks,n);if(!C){console.warn("Strange, track not found:",n);return}this.tracksByUidInit[C.uid]=!0,this.checkAllTilesetInfoReceived(),C.options||(C.options={}),C.name=r.name,C.maxWidth=r.max_width,C.transforms=r.transforms,C.aggregationModes=r.aggregation_modes,C.header=r.header,C.binsPerDimension=r.bins_per_dimension,r.resolutions?(C.maxZoom=r.resolutions.length-1,C.resolutions=r.resolutions):C.maxZoom=r.max_zoom,C.coordSystem=r.coordSystem,C.datatype=r.datatype}},{key:"checkAllTilesetInfoReceived",value:function(){if(this.state.init&&!this.reset||!this.trackRenderer||!this.props.zoomToDataExtentOnInit())return;const n=Object.keys(this.trackRenderer.trackDefObjects).map(C=>{const o=this.trackRenderer.trackDefObjects[C].trackObject;return o.childTracks?o.childTracks:o}).reduce((C,o)=>C.concat(o),[]).filter(({tilesetInfo:C})=>typeof C<"u"&&C!==!0),r=Object.values(this.tracksByUidInit).filter(C=>C).length;n.length===r&&(this.setState({init:!0}),this.reset=!1,this.handleZoomToData())}},{key:"handleOverlayMouseEnter",value:function(n){this.setState({mouseOverOverlayUid:n})}},{key:"handleOverlayMouseLeave",value:function(n){n===this.state.mouseOverOverlayUid&&this.setState({mouseOverOverlayUid:null})}},{key:"handleTrackPositionChosen",value:function(n){this.setState({mouseOverOverlayUid:null}),this.props.chooseTrackHandler(n.track.uid)}},{key:"handleNoTrackAdded",value:function(){this.trackToReplace=null,this.props.onNoTrackAdded(),this.setState({addTrackPosition:null,addTrackHost:null})}},{key:"handleAddDivisor",value:function(n){this.setState({addDivisorDialog:n})}},{key:"handleDivisorChosen",value:function(n,r){this.setState({addDivisorDialog:null});const C=n.data?{server:n.data.server,tilesetUid:n.data.tilesetUid}:{server:n.server,tilesetUid:n.tilesetUid},o={server:r[0].server,tilesetUid:r[0].uuid};this.handleChangeTrackData(n.uid,{type:"divided",children:[C,o]})}},{key:"handleDivideSeries",value:function(n){}},{key:"handleAddSeries",value:function(n){const r=UG(this.props.tracks,n),C=nC(this.props.tracks,n);this.setState({addTrackPosition:r,addTrackHost:C})}},{key:"handleReplaceTrack",value:function(n,r){this.trackToReplace=n,this.handleAddTrack(r)}},{key:"handleAddTrack",value:function(n){this.setState({addTrackPosition:n,addTrackHost:null})}},{key:"handleResizeTrack",value:function(n,r,C){const{tracks:o}=this.state;for(const a in o){const A=o[a].filter(l=>l.uid===n);A.length>0&&(A[0].width=r,A[0].height=C)}this.setState({tracks:o,forceUpdate:Math.random()}),this.props.onResizeTrack()}},{key:"closeMenus",value:function(){this.setState({closeTrackMenuId:null,configTrackMenuId:null,contextMenuPosition:null,contextMenuCustomItems:null})}},{key:"handleLockValueScale",value:function(n){this.closeMenus(),this.props.onLockValueScale(n)}},{key:"handleUnlockValueScale",value:function(n){this.closeMenus(),this.props.onUnlockValueScale(n)}},{key:"handleCloseTrack",value:function(n){this.closeMenus(),this.props.onCloseTrack(n)}},{key:"handleChangeTrackType",value:function(n,r){this.closeMenus(),this.props.onChangeTrackType(n,r)}},{key:"handleChangeTrackData",value:function(n,r){this.closeMenus(),this.props.onChangeTrackData(n,r)}},{key:"handleTracksAdded",value:function(n,r,C){return this.trackToReplace&&(this.handleCloseTrack(this.trackToReplace),this.trackToReplace=null),this.props.onTracksAdded(n,r,C),this.setState({addTrackPosition:null,addTrackHost:null}),n}},{key:"handleCloseTrackMenuOpened",value:function(n,r){this.setState({closeTrackMenuId:n,closeTrackMenuLocation:r})}},{key:"handleCloseContextMenu",value:function(){this.setState({contextMenuCustomItems:null,contextMenuPosition:null,contextMenuDataX:null,contextMenuDataY:null})}},{key:"handleCloseTrackMenuClosed",value:function(){this.setState({closeTrackMenuId:null})}},{key:"handleConfigTrackMenuOpened",value:function(n,r){this.closeMenus(),this.setState({configTrackMenuId:n,configTrackMenuLocation:r})}},{key:"handleConfigureTrack",value:function(n,r){this.setState({configTrackMenuId:null,trackOptions:{track:n,configComponent:r}}),this.closeMenus()}},{key:"handleSortEnd",value:function(n){this.setState(r=>{const C=r.tracks,o={};for(let a=0;a{r[C]&&r[C].forEach(o=>{o.contents&&o.contents.forEach(a=>{a.position=C}),o.position=C,n.push({track:o,location:C})})}),n}},{key:"calculateTrackPosition",value:function(n,r){let C=this.props.paddingTop,o=this.props.paddingBottom,a=this.props.paddingLeft,s=this.props.paddingRight,A=this.centerWidth,l=n.height,c=0,u=0;switch(r){case"top":a+=this.leftWidth;for(let d=0;dC.includes&&C.includes.length).map(C=>{const o=C.type?`overlay-${C.type}-track`:"overlay-track",a={...C,uid:C.uid||cg.nice(),includes:C.includes,type:o,options:Object.assign(C.options,{orientationsAndPositions:C.includes.map(s=>{const A=nC(this.props.tracks,s);if(!A)return console.warn(`OverlayTrack included uid (${s}) not found in the track list`),null;const l=UG(this.props.tracks,A.uid);let c;if((l==="top"||l==="bottom")&&(c="1d-horizontal"),(l==="left"||l==="right")&&(c="1d-vertical"),l==="center"&&(c="2d"),!c)return console.warn("Only top, bottom, left, right, or center tracks can be overlaid at the moment"),null;const u=n.filter(h=>h.track.uid===s);if(!u.length)return null;const d={left:u[0].left-this.props.paddingLeft,top:u[0].top-this.props.paddingTop,width:u[0].width,height:u[0].height};return{orientation:c,position:d}}).filter(s=>s)})};return{top:this.props.paddingTop,left:this.props.paddingLeft,width:this.leftWidth+this.centerWidth+this.rightWidth,height:this.topHeight+this.centerHeight+this.bottomHeight+this.props.marginTop+this.props.marginBottom,track:a}}):[]}},{key:"positionedTracks",value:function(){return this.createTracksAndLocations().map(({track:r,location:C})=>this.calculateTrackPosition(r,C))}},{key:"createTrackPositionTexts",value:function(){const n=this.positionedTracks();return this.createTracksAndLocations(),n.map(C=>{const{track:o}=C;return N.createElement("div",{key:o.uid,style:{left:C.left,top:C.top,width:C.width,height:C.height,position:"absolute"}},o.uid.slice(0,2))})}},{key:"handleExportTrackData",value:function(n,r){const C=nC(this.props.tracks,r);let o=null;n!==r?o=this.trackRenderer.trackDefObjects[n].trackObject.createdTracks[C.uid]:{trackObject:o}=this.trackRenderer.trackDefObjects[n],o.exportData(),this.closeMenus()}},{key:"listTracksAtPosition",value:function(n,r,C=!1){const o=[];if(!this.trackRenderer)return[];for(const a in this.trackRenderer.trackDefObjects){const s=this.trackRenderer.trackDefObjects[a].trackObject;if(s.respondsToPosition(n,r))if(C){if(this.props.tracks.center)if(this.props.tracks.center.contents)for(let A=0;Ao[d]&&(o[d]=u.tilesetInfo.max_pos[d]);const s=this.trackRenderer.currentProps.paddingLeft+this.trackRenderer.currentProps.leftWidth;let A=[s,s+this.trackRenderer.currentProps.centerWidth].map(this.trackRenderer.zoomTransform.rescaleX(this.trackRenderer.xScale).invert);const l=this.trackRenderer.currentProps.paddingTop+this.trackRenderer.currentProps.topHeight;let c=[l,l+this.trackRenderer.currentProps.centerHeight].map(this.trackRenderer.zoomTransform.rescaleY(this.trackRenderer.yScale).invert);this.trackRenderer.zoomTransform.k=1,this.trackRenderer.zoomTransform.x=0,this.trackRenderer.zoomTransform.y=0,this.trackRenderer.applyZoomTransform(),C[0]Number.MIN_SAFE_INTEGER&&(A=[C[0],o[0]]),C[1]Number.MIN_SAFE_INTEGER&&(c=[C[1],o[1]]),this.props.onDataDomainChanged(A,c)}},{key:"resetViewport",value:function(){this.trackRenderer.zoomTransform.k=1,this.trackRenderer.zoomTransform.x=0,this.trackRenderer.zoomTransform.y=0,this.trackRenderer.applyZoomTransform(),this.props.onDataDomainChanged(this.props.initialXDomain,this.props.initialYDomain)}},{key:"updatablePropsToString",value:function(n){return JSON.stringify({tracks:n.tracks,overlays:n.overlays,viewOptions:n.viewOptions,uid:n.uid,addTrackPosition:n.addTrackPosition,editable:n.editable,marginTop:n.marginTop,marginBottom:n.marginBottom,marginLeft:n.marginLeft,marginRight:n.marginRight,paddingTop:n.paddingTop,paddingBottom:n.paddingBottom,paddingLeft:n.paddingLeft,paddingRight:n.paddingRight,mouseTool:n.mouseTool,initialXDomain:n.initialXDomain,initialYDomain:n.initialYDomain,trackSourceServers:n.trackSourceServers,zoomable:n.zoomable,draggingHappening:n.draggingHappening})}},{key:"getXYScales",value:function(){this.trackRenderer&&(this.xScale=this.trackRenderer.currentXScale,this.yScale=this.trackRenderer.currentYScale)}},{key:"rangeViewToDataLoci",value:function(n,r){return r?[parseInt(r.invert(n[0]),10),parseInt(r.invert(n[1]),10)]:[null,null]}},{key:"rangeSelectionResetHandler",value:function(){this.state.rangeSelectionMaster&&this.setState({is1dRangeSelection:null,rangeSelection:[null,null],rangeSelectionMaster:null,rangeSelectionEnd:!1})}},{key:"rangeSelection1dEndHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales();const r=n==="x"?this.xScale:this.yScale;return C=>{this.setState(o=>{const a=o.is1dRangeSelection?[null,null]:o.rangeSelection.slice(),s=!this.state.is1dRangeSelection&&n==="y"?1:0;let A=this.rangeViewToDataLoci(C,r);const l=A[1]-A[0];if(this.props.rangeSelection1dSize[0]>l){const c=A[0]+l/2;A=[c-this.props.rangeSelection1dSize[0]/2,c+this.props.rangeSelection1dSize[0]/2]}else if(this.props.rangeSelection1dSize[1]Math.round(c))),{rangeSelection:a,rangeSelectionEnd:!0}})}}},{key:"rangeSelection1dHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales();const r=n==="x"?this.xScale:this.yScale;return C=>{this.setState(o=>{const a=o.is1dRangeSelection?[null,null]:o.rangeSelection.slice(),s=!o.is1dRangeSelection&&n==="y"?1:0;return a[s]=this.rangeViewToDataLoci(C,r),{rangeSelection:a,rangeSelectionEnd:!1}})}}},{key:"rangeSelection1dStartHandler",value:function(){this.state.rangeSelectionMaster||this.setState({is1dRangeSelection:!0,rangeSelectionMaster:!0,rangeSelectionEnd:!1})}},{key:"rangeSelection2dHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales(),this.setState({rangeSelection:[this.rangeViewToDataLoci(n[0],this.xScale),this.rangeViewToDataLoci(n[1],this.yScale)],rangeSelectionEnd:!1})}},{key:"rangeSelection2dStartHandler",value:function(){this.state.rangeSelectionMaster||this.setState({is1dRangeSelection:!1,rangeSelectionMaster:!0,rangeSelectionEnd:!1})}},{key:"rangeSelection2dEndHandler",value:function(n){(!this.xScale||!this.yScale)&&this.getXYScales();const r=this.rangeViewToDataLoci(n[0],this.xScale),C=this.rangeViewToDataLoci(n[1],this.yScale);let o=[r,C];const a=r[1]-r[0],s=C[1]-C[0],A=[a,s];o.forEach((l,c)=>{if(this.props.rangeSelection1dSize[0]>A[c]){const u=l[0]+Math.round(A[c]/2);l[0]=u-this.props.rangeSelection1dSize[0]/2,l[1]=u+this.props.rangeSelection1dSize[0]/2}else if(this.props.rangeSelection1dSize[1]l.map(c=>Math.round(c)))),this.setState({rangeSelection:o,rangeSelectionEnd:!0})}},{key:"getContextMenu",value:function(){if(this.state.contextMenuPosition){const n=this.listTracksAtPosition(this.state.contextMenuPosition.canvasLeft,this.state.contextMenuPosition.canvasTop);return N.createElement(xc,{onMenuClosed:this.closeMenusBound},N.createElement(XXe,{closeMenu:this.closeMenusBound,coords:[this.state.contextMenuDataX,this.state.contextMenuDataY],customItems:this.state.contextMenuCustomItems,onAddDivisor:this.handleAddDivisorBound,onAddSeries:this.handleAddSeriesBound,onAddTrack:r=>{this.props.onTracksAdded([r],r.position,null),this.handleCloseContextMenu()},onChangeTrackData:this.handleChangeTrackDataBound,onChangeTrackType:this.handleChangeTrackTypeBound,onCloseTrack:this.handleCloseTrackBound,onConfigureTrack:this.handleConfigureTrackBound,onExportData:this.handleExportTrackDataBound,onLockValueScale:this.handleLockValueScaleBound,onReplaceTrack:this.handleReplaceTrackBound,onTrackOptionsChanged:this.handleTrackOptionsChangedBound,onUnlockValueScale:this.handleUnlockValueScaleBound,orientation:"right",position:this.state.contextMenuPosition,theme:this.props.theme,tracks:n,trackSourceServers:this.props.trackSourceServers}))}return null}},{key:"getIdealizedTrackPositionsOverlay",value:function(){const n=this.props.draggingHappening,r=n.datatype;if(!(r in xB)&&!n.defaultTracks){console.warn("unknown data type:",n.higlassTrack);return}const C={"1d-horizontal":["top","bottom","left","right"],"2d":["center"],"1d-vertical":["left","right"]},o=xB[r]||{};if(n.defaultTracks)for(const S of n.defaultTracks)if(!jg[S])console.warn("unknown track type",S);else for(const X of C[jg[S].orientation])o[X]=S;const a=new Set(["top","left","right","center","bottom"].filter(S=>S in this.state.tracks&&this.state.tracks[S].length)),s="top"in o,A="left"in o,l="right"in o,c="bottom"in o,u="center"in o,d="center"in o||a.has("left")||a.has("right")||a.has("center"),h="top"in o,m="bottom"in o&&d,f="left"in o&&d,b="right"in o&&d,p=Object.keys(o).length&&("center"in o||d),y=N.createElement("div",{style:{flexGrow:1}}),Z=N.cloneElement(y),B=N.createElement("div",{style:{display:"flex",flexGrow:1}},h&&(p||f)?y:null,N.createElement(XV,{defaultTrackType:o.top,draggingHappening:this.props.draggingHappening,enabled:s,onTrackDropped:S=>this.handleTracksAdded([S],"top"),style:{border:"1px solid black",flexGrow:1}}),h&&(p||f)?Z:null),G=N.createElement("div",{style:{display:"flex",flexGrow:1}},h&&(p||f)?y:null,N.createElement(XV,{defaultTrackType:o.bottom,draggingHappening:this.props.draggingHappening,enabled:c,onTrackDropped:S=>this.handleTracksAdded([S],"bottom"),style:{border:"1px solid black",flexGrow:1}}),h&&(p||f)?Z:null),v=N.createElement(XV,{defaultTrackType:o.left,draggingHappening:this.props.draggingHappening,enabled:A,onTrackDropped:S=>this.handleTracksAdded([S],"left"),style:{border:"1px solid black",flexGrow:1}}),w=N.createElement(XV,{defaultTrackType:o.center,draggingHappening:this.props.draggingHappening,enabled:u,onTrackDropped:S=>this.handleTracksAdded([S],"center"),position:"center",style:{border:"1px solid black",flexGrow:1}}),V=N.cloneElement(v,{defaultTrackType:o.right,enabled:l,onTrackDropped:S=>this.handleTracksAdded([S],"right")});return N.createElement("div",{style:{position:"absolute",left:"0px",top:"0px",width:this.state.width,height:this.state.height}},N.createElement("div",{style:{position:"absolute",width:this.state.width,height:this.state.height,background:"white",opacity:.4}}),N.createElement("div",{style:{width:this.state.width,height:this.state.height,position:"absolute",display:"flex",flexDirection:"column"}},h?B:null,d&&N.createElement("div",{style:{display:"flex",height:h||m?"40%":"100%",width:"100%"}},f?v:null,p?w:null,b?V:null),m?G:null))}},{key:"render",value:function(){this.galleryDim=this.props.tracks.gallery?this.props.tracks.gallery.map(p=>p.height).reduce(ql,0):0,this.topHeightNoGallery=this.props.tracks.top.map(p=>p.height).reduce(ql,0),this.topHeight=this.topHeightNoGallery+this.galleryDim,this.bottomHeightNoGallery=this.props.tracks.bottom.map(p=>p.height).reduce(ql,0),this.bottomHeight=this.bottomHeightNoGallery+this.galleryDim,this.leftWidthNoGallery=this.props.tracks.left.map(p=>p.width).reduce(ql,0),this.leftWidth=this.leftWidthNoGallery+this.galleryDim,this.rightWidthNoGallery=this.props.tracks.right.map(p=>p.width).reduce(ql,0),this.rightWidth=this.rightWidthNoGallery+this.galleryDim;const n=this.props.paddingTop+this.props.paddingBottom,r=this.props.paddingLeft+this.props.paddingRight;this.centerHeight=Math.max(0,this.state.height-this.topHeight-this.bottomHeight-n),this.centerWidth=Math.max(0,this.state.width-this.leftWidth-this.rightWidth-r);const C="none",o=N.createElement("div",{className:"top-track-container",style:{left:this.leftWidth+this.props.paddingLeft,top:this.props.paddingTop,width:this.centerWidth,height:this.topHeightNoGallery,outline:C,position:"absolute"}},N.createElement(J2,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===JC,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("x").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("x").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["bottom"]),scale:this.xScale,tracks:this.props.tracks.top,width:this.centerWidth})),a=N.createElement("div",{className:"left-track-container",style:{left:this.props.paddingLeft,top:this.topHeight+this.props.paddingTop,width:this.leftWidthNoGallery,height:this.centerHeight,outline:C,position:"absolute"}},N.createElement(YO,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),height:this.centerHeight,is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===JC,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("y").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("y").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["right"]),scale:this.yScale,tracks:this.props.tracks.left})),s=N.createElement("div",{className:"right-track-container",style:{right:this.props.paddingRight,top:this.topHeight+this.props.paddingTop,width:this.rightWidthNoGallery,height:this.centerHeight,outline:C,position:"absolute"}},N.createElement(YO,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),height:this.centerHeight,is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===JC,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("y").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("y").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["left"]),scale:this.yScale,tracks:this.props.tracks.right,tracksControlAlignLeft:!0})),A=N.createElement("div",{className:"bottom-track-container",style:{left:this.leftWidth+this.props.paddingLeft,bottom:this.props.paddingBottom,width:this.centerWidth,height:this.bottomHeightNoGallery,outline:C,position:"absolute"}},N.createElement(J2,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,handleConfigTrack:this.handleConfigTrackMenuOpened.bind(this),handleResizeTrack:this.handleResizeTrack.bind(this),handleSortEnd:this.handleSortEnd.bind(this),is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===JC,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelection:this.rangeSelection1dHandler("x").bind(this),onRangeSelectionEnd:this.rangeSelection1dEndHandler("x").bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection1dStartHandler.bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,resizeHandles:new Set(["top"]),scale:this.xScale,tracks:this.props.tracks.bottom,width:this.centerWidth})),l=N.createElement("div",{key:"galleryTracksDiv",className:"gallery-track-container",style:{left:this.leftWidthNoGallery+this.props.paddingLeft,top:this.topHeightNoGallery+this.props.paddingTop,width:this.centerWidth+2*this.galleryDim,height:this.centerHeight+2*this.galleryDim,outline:C,position:"absolute"}},N.createElement(sVe,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,height:this.centerHeight+2*this.galleryDim,onAddSeries:this.handleAddSeries.bind(this),onCloseTrack:this.handleCloseTrack.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),tracks:this.props.tracks.gallery,width:this.centerWidth+2*this.galleryDim}));let c=N.createElement("div",{className:["center-track-container",lP["center-track-container"]].join(" "),style:{left:this.leftWidth+this.props.paddingLeft,top:this.topHeight+this.props.paddingTop,width:this.centerWidth,height:this.bottomHeight,outline:C}});this.props.tracks.center.length&&(c=N.createElement("div",{className:["center-track-container",lP["center-track-container"]].join(" "),style:{left:this.leftWidth+this.props.paddingLeft,top:this.topHeight+this.props.paddingTop,width:this.centerWidth,height:this.centerHeight,outline:C}},N.createElement(lj,{configTrackMenuId:this.state.configTrackMenuId,editable:this.props.editable,height:this.centerHeight,is1dRangeSelection:this.state.is1dRangeSelection,isRangeSelectionActive:this.props.mouseTool===JC,onAddSeries:this.handleAddSeries.bind(this),onCloseTrackMenuOpened:this.handleCloseTrackMenuOpened.bind(this),onConfigTrackMenuOpened:this.handleConfigTrackMenuOpened.bind(this),onRangeSelectionReset:this.rangeSelectionResetHandler.bind(this),onRangeSelectionStart:this.rangeSelection2dStartHandler.bind(this),onRangeSelectionX:this.rangeSelection1dHandler("x").bind(this),onRangeSelectionXEnd:this.rangeSelection1dEndHandler("x").bind(this),onRangeSelectionXY:this.rangeSelection2dHandler.bind(this),onRangeSelectionXYEnd:this.rangeSelection2dEndHandler.bind(this),onRangeSelectionY:this.rangeSelection1dHandler("y").bind(this),onRangeSelectionYEnd:this.rangeSelection1dEndHandler("y").bind(this),rangeSelection:this.state.rangeSelection,rangeSelectionEnd:this.state.rangeSelectionEnd,scaleX:this.xScale,scaleY:this.yScale,tracks:this.props.tracks.center,uid:this.props.tracks.center[0].uid,width:this.centerWidth}))),this.createTrackPositionTexts();let u=this.positionedTracks();u=u.concat(this.overlayTracks(u));let d=null;this.state.sizeMeasured&&(d=N.createElement(L4t,{ref:p=>{this.trackRenderer=p,this.checkAllTilesetInfoReceived()},canvasElement:this.canvasElement,centerHeight:this.centerHeight,centerWidth:this.centerWidth,disableTrackMenu:this.props.disableTrackMenu,dragging:this.props.dragging,galleryDim:this.galleryDim,getLockGroupExtrema:this.props.getLockGroupExtrema,height:this.state.height,initialXDomain:this.props.initialXDomain,initialYDomain:this.props.initialYDomain,isRangeSelection:this.props.mouseTool===JC,isShowGlobalMousePosition:this.props.isShowGlobalMousePosition,isValueScaleLocked:this.props.isValueScaleLocked,leftWidth:this.leftWidth,leftWidthNoGallery:this.leftWidthNoGallery,metaTracks:this.props.metaTracks,onMouseMoveZoom:this.props.onMouseMoveZoom,onNewTilesLoaded:this.props.onNewTilesLoaded,onScalesChanged:this.handleScalesChanged.bind(this),onTilesetInfoReceived:this.handleTilesetInfoReceived.bind(this),onTrackOptionsChanged:this.handleTrackOptionsChanged.bind(this),onValueScaleChanged:this.props.onValueScaleChanged,paddingLeft:this.props.paddingLeft,paddingTop:this.props.paddingTop,pixiRenderer:this.props.pixiRenderer,pixiStage:this.props.pixiStage,pluginDataFetchers:this.props.pluginDataFetchers,pluginTracks:this.props.pluginTracks,positionedTracks:u,registerDraggingChangedListener:this.props.registerDraggingChangedListener,removeDraggingChangedListener:this.props.removeDraggingChangedListener,setCentersFunction:this.props.setCentersFunction,svgElement:this.props.svgElement,topHeight:this.topHeight,topHeightNoGallery:this.topHeightNoGallery,uid:this.props.uid,viewOptions:this.props.viewOptions,width:this.state.width,xDomainLimits:this.props.xDomainLimits,yDomainLimits:this.props.yDomainLimits,zoomable:this.props.zoomable,zoomLimits:this.props.zoomLimits},o,a,s,A,l,c));let h=null,m=null;this.state.configTrackMenuId&&(h=N.createElement(xc,{onMenuClosed:this.closeMenusBound},N.createElement(S$t,{ref:p=>{this.configTrackMenu=p},closeMenu:this.closeMenusBound,onAddDivisor:this.handleAddDivisorBound,onAddSeries:this.handleAddSeriesBound,onAddTrack:this.handleAddTrackBound,onChangeTrackType:this.handleChangeTrackTypeBound,onCloseTrack:this.handleCloseTrackBound,onConfigureTrack:this.handleConfigureTrackBound,onExportData:this.handleExportTrackDataBound,onLockValueScale:this.handleLockValueScaleBound,onReplaceTrack:this.handleReplaceTrackBound,onTrackOptionsChanged:this.handleTrackOptionsChangedBound,onUnlockValueScale:this.handleUnlockValueScaleBound,position:this.state.configTrackMenuLocation,theme:this.props.theme,trackOrientation:UG(this.props.tracks,this.state.configTrackMenuId),tracks:[nC(this.props.tracks,this.state.configTrackMenuId)]}))),this.state.closeTrackMenuId&&(m=N.createElement(xc,{onMenuClosed:this.handleCloseTrackMenuClosed.bind(this)},N.createElement(pu,{position:this.state.closeTrackMenuLocation,theme:this.props.theme},N.createElement(WXe,{onCloseTrack:this.handleCloseTrack.bind(this),tracks:[nC(this.props.tracks,this.state.closeTrackMenuId)]}))));let f=null;this.props.chooseTrackHandler&&(f=u.filter(p=>p.track.position!=="whole").map(p=>{let y="transparent",Z="none";return this.state.mouseOverOverlayUid===p.track.uid&&(y="yellow",Z="1px solid black"),N.createElement("div",{key:p.track.uid,className:"tiled-plot-track-overlay",onClick:()=>this.handleTrackPositionChosen(p),onDragEnter:B=>{this.handleOverlayMouseEnter(p.track.uid),B.preventDefault()},onDragLeave:()=>this.handleOverlayMouseLeave(p.track.uid),onDragOver:B=>B.preventDefault(),onDrop:()=>this.handleTrackPositionChosen(p),onMouseEnter:()=>this.handleOverlayMouseEnter(p.track.uid),onMouseLeave:()=>this.handleOverlayMouseLeave(p.track.uid),style:{position:"absolute",left:p.left,top:p.top,width:p.width,height:p.height,background:y,opacity:.4,border:Z,zIndex:1}})}));let b=null;if(this.xScale&&this.yScale&&this.props.editable&&this.state.trackOptions){const p=this.state.trackOptions.configComponent,y=this.state.trackOptions.track;b=N.createElement(p,{track:y,xScale:this.xScale,yScale:this.yScale,onCancel:()=>{this.setState({trackOptions:null})},onTrackOptionsChanged:Z=>Z,onSubmit:Z=>{this.handleTrackOptionsChanged(this.state.trackOptions.track.uid,Z),this.setState({trackOptions:null})}})}return N.createElement("div",{ref:p=>{this.divTiledPlot=p},className:["tiled-plot-div",Uo["tiled-plot"]].join(" "),style:{marginBottom:this.props.marginBottom,marginLeft:this.props.marginLeft,marginRight:this.props.marginRight,marginTop:this.props.marginTop}},d,f,h,m,b,this.getContextMenu(),this.props.draggingHappening&&this.getIdealizedTrackPositionsOverlay())}},{key:"addEventListeners",value:function(){this.eventListeners=[],this.eventListeners.forEach(n=>document.addEventListener(n.name,n.callback,!1))}},{key:"removeEventListeners",value:function(){this.eventListeners.forEach(n=>document.removeEventListener(n.name,n.callback))}}]),i}(N.Component);F$.defaultProps={isShowGlobalMousePosition:!1,pluginDataFetchers:{},pluginTracks:{},metaTracks:[],zoomable:!0};F$.propTypes={addTrackPosition:L.string,canvasElement:L.object,chooseTrackHandler:L.func,chromInfoPath:L.string,customDialog:L.array,closeCustomDialog:L.func,disableTrackMenu:L.bool,dragging:L.bool,draggingHappening:L.bool,editable:L.bool,getLockGroupExtrema:L.func,initialXDomain:L.array,initialYDomain:L.array,isShowGlobalMousePosition:L.bool,isValueScaleLocked:L.func,marginBottom:L.number.isRequired,marginLeft:L.number.isRequired,marginRight:L.number.isRequired,marginTop:L.number.isRequired,paddingBottom:L.number.isRequired,paddingLeft:L.number.isRequired,paddingRight:L.number.isRequired,paddingTop:L.number.isRequired,metaTracks:L.array,modal:L.object,mouseTool:L.string,onCloseTrack:L.func,onChangeTrackData:L.func,onChangeTrackType:L.func,onDataDomainChanged:L.func,onLockValueScale:L.func,onMouseMoveZoom:L.func,onNewTilesLoaded:L.func,onNoTrackAdded:L.func,onRangeSelection:L.func.isRequired,onScalesChanged:L.func,onTrackOptionsChanged:L.func,onTrackPositionChosen:L.func,onTracksAdded:L.func,onUnlockValueScale:L.func,onValueScaleChanged:L.func,onResizeTrack:L.func,overlays:L.array,openModal:L.func,pixiRenderer:L.object,pixiStage:L.object,pluginDataFetchers:L.object,pluginTracks:L.object,pubSub:L.object.isRequired,rangeSelection1dSize:L.array,rangeSelectionToInt:L.bool,registerDraggingChangedListener:L.func,removeDraggingChangedListener:L.func,setCentersFunction:L.func,svgElement:L.object,theme:L.symbol.isRequired,tracks:L.object,trackSourceServers:L.array,uid:L.string,viewOptions:L.object,xDomainLimits:L.array,yDomainLimits:L.array,zoomable:L.bool,zoomLimits:L.array,zoomToDataExtentOnInit:L.func};const o8t=iy(Ok(um(F$)));var a8t=Object.assign||function(e){for(var g=1;g"u"?"undefined":A8t(g))==="object"){for(var n in g)g.hasOwnProperty(n)&&$p(e,n,g[n]);return}if(typeof I<"u"){typeof I=="number"&&(I+="px"),e.style[g]=I;return}return Kh(e,g)}D$(["width","height"],function(e){var g=e.charAt(0).toUpperCase()+e.slice(1);aA["outer"+g]=function(I,n){return I&&Kse(I,e,n?b8t:MO)};var i=e==="width"?["Left","Right"]:["Top","Bottom"];aA[e]=function(I,n){if(n!==void 0){if(I){Kh(I);var r=NXe(I);return r&&(n+=bG(I,["padding","border"],i)),$p(I,e,n)}return}return I&&Kse(I,e,EO)}});function G8t(e,g){$p(e,"position")==="static"&&(e.style.position="relative");var i=TXe(e),I={},n=void 0,r=void 0;for(r in g)g.hasOwnProperty(r)&&(n=parseFloat($p(e,r))||0,I[r]=n+g[r]-i[r]);$p(e,I)}var v8t=a8t({getWindow:function(g){var i=g.ownerDocument||g;return i.defaultView||i.parentWindow},offset:function(g,i){if(typeof i<"u")G8t(g,i);else return TXe(g)},isWindow:xW,each:D$,css:$p,clone:function(g){var i={};for(var I in g)g.hasOwnProperty(I)&&(i[I]=g[I]);var n=g.overflow;if(n)for(var I in g)g.hasOwnProperty(I)&&(i.overflow[I]=g.overflow[I]);return i},scrollLeft:function(g,i){if(xW(g)){if(i===void 0)return DO(g);window.scrollTo(i,xO(g))}else{if(i===void 0)return g.scrollLeft;g.scrollLeft=i}},scrollTop:function(g,i){if(xW(g)){if(i===void 0)return xO(g);window.scrollTo(DO(g),i)}else{if(i===void 0)return g.scrollTop;g.scrollTop=i}},viewportWidth:0,viewportHeight:0},aA),Ii=v8t;function B8t(e,g,i){i=i||{},g.nodeType===9&&(g=Ii.getWindow(g));var I=i.allowHorizontalScroll,n=i.onlyScrollIfNeeded,r=i.alignWithTop,C=i.alignWithLeft,o=i.offsetTop||0,a=i.offsetLeft||0,s=i.offsetBottom||0,A=i.offsetRight||0;I=I===void 0?!0:I;var l=Ii.isWindow(g),c=Ii.offset(e),u=Ii.outerHeight(e),d=Ii.outerWidth(e),h=void 0,m=void 0,f=void 0,b=void 0,p=void 0,y=void 0,Z=void 0,B=void 0,G=void 0,v=void 0;l?(Z=g,v=Ii.height(Z),G=Ii.width(Z),B={left:Ii.scrollLeft(Z),top:Ii.scrollTop(Z)},p={left:c.left-B.left-a,top:c.top-B.top-o},y={left:c.left+d-(B.left+G)+A,top:c.top+u-(B.top+v)+s},b=B):(h=Ii.offset(g),m=g.clientHeight,f=g.clientWidth,b={left:g.scrollLeft,top:g.scrollTop},p={left:c.left-(h.left+(parseFloat(Ii.css(g,"borderLeftWidth"))||0))-a,top:c.top-(h.top+(parseFloat(Ii.css(g,"borderTopWidth"))||0))-o},y={left:c.left+d-(h.left+f+(parseFloat(Ii.css(g,"borderRightWidth"))||0))+A,top:c.top+u-(h.top+m+(parseFloat(Ii.css(g,"borderBottomWidth"))||0))+s}),p.top<0||y.top>0?r===!0?Ii.scrollTop(g,b.top+p.top):r===!1?Ii.scrollTop(g,b.top+y.top):p.top<0?Ii.scrollTop(g,b.top+p.top):Ii.scrollTop(g,b.top+y.top):n||(r=r===void 0?!0:!!r,r?Ii.scrollTop(g,b.top+p.top):Ii.scrollTop(g,b.top+y.top)),I&&(p.left<0||y.left>0?C===!0?Ii.scrollLeft(g,b.left+p.left):C===!1?Ii.scrollLeft(g,b.left+y.left):p.left<0?Ii.scrollLeft(g,b.left+p.left):Ii.scrollLeft(g,b.left+y.left):n||(C=C===void 0?!0:!!C,C?Ii.scrollLeft(g,b.left+p.left):Ii.scrollLeft(g,b.left+y.left)))}var S8t=B8t,w8t=S8t;const R8t=Or(w8t);function dH(){return dH=Object.assign?Object.assign.bind():function(e){for(var g=1;g"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hH(e){return hH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},hH(e)}const GZ=[];let x$=function(e){T8t(i,e);var g=N8t(i);function i(I){var n;return V8t(this,i),n=g.call(this,I),n.state={highlightedIndex:null,menuTop:0,menuLeft:0,menuWidth:0,isOpen:!1},n.keyDownHandlers={ArrowDown(r){r.preventDefault();const C=this.getFilteredItems().length;if(!C)return;const{highlightedIndex:o}=this.state,a=o===null||o===C-1?0:o+1;this._performAutoCompleteOnKeyUp=!0,this.setState({highlightedIndex:a,isOpen:!0})},ArrowUp(r){r.preventDefault();const C=this.getFilteredItems().length;if(!C)return;const{highlightedIndex:o}=this.state,a=o===0||o===null?C-1:o-1;this._performAutoCompleteOnKeyUp=!0,this.setState({highlightedIndex:a,isOpen:!0})},Enter(r){if(this.state.isOpen!==!1)if(this.state.highlightedIndex===null)this.setState({isOpen:!1},()=>{this.inputEl.select()});else{r.preventDefault();const C=this.getFilteredItems()[this.state.highlightedIndex],o=this.props.getItemValue(C);this.setState({isOpen:!1,highlightedIndex:null},()=>{this.inputEl.setSelectionRange(o.length,o.length),this.props.onSelect(o,C)})}},Escape(){this.setState({highlightedIndex:null,isOpen:!1})}},n}return W8t(i,[{key:"getInitialState",value:function(){return{isOpen:!1,highlightedIndex:null}}},{key:"UNSAFE_componentWillMount",value:function(){this._ignoreBlur=!1,this._performAutoCompleteOnUpdate=!1,this._performAutoCompleteOnKeyUp=!1}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){this._performAutoCompleteOnUpdate=!0,(this.props.items!==n.items||this.state.highlightedIndex>=n.items.length)&&this.setState({highlightedIndex:null})}},{key:"componentDidUpdate",value:function(n,r){this.state.isOpen===!0&&r.isOpen===!1&&this.setMenuPositions(),this.state.isOpen&&this._performAutoCompleteOnUpdate&&(this._performAutoCompleteOnUpdate=!1,this.maybeAutoCompleteText()),this.maybeScrollItemIntoView(),r.isOpen!==this.state.isOpen&&this.props.onMenuVisibilityChange(this.state.isOpen,this.inputEl)}},{key:"maybeScrollItemIntoView",value:function(){if(this.state.isOpen===!0&&this.state.highlightedIndex!==null){const n=this.refs[`item-${this.state.highlightedIndex}`],r=this.refs.menu;n&&R8t(ua.findDOMNode(n),ua.findDOMNode(r),{onlyScrollIfNeeded:!0})}}},{key:"handleKeyDown",value:function(n){this.keyDownHandlers[n.key]?this.keyDownHandlers[n.key].call(this,n):this.setState({highlightedIndex:null,isOpen:!0})}},{key:"handleChange",value:function(n){this._performAutoCompleteOnKeyUp=!0,this.props.onChange(n,n.target.value)}},{key:"handleKeyUp",value:function(){this._performAutoCompleteOnKeyUp&&(this._performAutoCompleteOnKeyUp=!1,this.maybeAutoCompleteText())}},{key:"getFilteredItems",value:function(){let n=this.props.items;return this.props.shouldItemRender&&(n=n.filter(r=>this.props.shouldItemRender(r,this.props.value))),this.props.sortItems&&n.sort((r,C)=>this.props.sortItems(r,C,this.props.value)),n}},{key:"maybeAutoCompleteText",value:function(){if(!this.props.autoHighlight||this.props.value==="")return;const{highlightedIndex:n}=this.state,r=this.getFilteredItems();if(r.length===0)return;const C=n!==null?r[n]:r[0];this.props.getItemValue(C).toLowerCase().indexOf(this.props.value.toLowerCase())===0&&n===null&&this.setState({highlightedIndex:0})}},{key:"setMenuPositions",value:function(){const n=this.inputEl,r=n.getBoundingClientRect(),C=globalThis.window.getComputedStyle(n),o=parseInt(C.marginBottom,10)||0,a=parseInt(C.marginLeft,10)||0,s=parseInt(C.marginRight,10)||0;this.setState({menuTop:r.bottom+o,menuLeft:r.left+a,menuWidth:r.width+a+s})}},{key:"highlightItemFromMouse",value:function(n){this.setState({highlightedIndex:n})}},{key:"selectItemFromMouse",value:function(n){const r=this.props.getItemValue(n);this.setState({isOpen:!1,highlightedIndex:null},()=>{this.props.onSelect(r,n),this.inputEl.focus()})}},{key:"setIgnoreBlur",value:function(n){this._ignoreBlur=n}},{key:"renderMenu",value:function(){const n=this.getFilteredItems().map((o,a)=>{const s=this.props.renderItem(o,this.state.highlightedIndex===a,{cursor:"default"});return N.cloneElement(s,{onMouseDown:()=>this.setIgnoreBlur(!0),onMouseEnter:()=>this.highlightItemFromMouse(a),onClick:()=>this.selectItemFromMouse(o),ref:`item-${a}`})}),r={left:this.state.menuLeft,top:this.state.menuTop,minWidth:this.state.menuWidth};if(!n.length)return null;const C=this.props.renderMenu(n,this.props.value,r);return N.cloneElement(C,{ref:"menu"})}},{key:"handleInputBlur",value:function(){this.props.onFocus&&this.props.onFocus(),!this._ignoreBlur&&this.setState({isOpen:!1,highlightedIndex:null})}},{key:"handleInputFocus",value:function(){if(this.props.onFocus&&this.props.onFocus(!0),this._ignoreBlur){this.setIgnoreBlur(!1);return}this._ignoreClick=!0,this.setState({isOpen:!0})}},{key:"isInputFocused",value:function(){return this.inputEl.ownerDocument&&this.inputEl===this.inputEl.ownerDocument.activeElement}},{key:"handleInputClick",value:function(){this.isInputFocused()&&this.state.isOpen===!1?this.setState({isOpen:!0}):this.state.highlightedIndex!==null&&!this._ignoreClick&&this.selectItemFromMouse(this.getFilteredItems()[this.state.highlightedIndex]),this._ignoreClick=!1}},{key:"composeEventHandlers",value:function(n,r){return r?C=>{n(C),r(C)}:n}},{key:"render",value:function(){this.props.debug&&GZ.push({id:GZ.length,state:this.state});const{inputProps:n}=this.props;return N.createElement("div",dH({style:{...this.props.wrapperStyle}},this.props.wrapperProps),N.createElement("input",dH({},n,{ref:r=>{this.inputEl=r},"aria-autocomplete":"list",autoComplete:"off",onBlur:this.composeEventHandlers(this.handleInputBlur.bind(this),n.onBlur&&n.onBlur.bind(this)),onChange:this.handleChange.bind(this),onClick:this.composeEventHandlers(this.handleInputClick.bind(this),n.onClick&&n.onClick.bind(this)),onFocus:this.composeEventHandlers(this.handleInputFocus.bind(this),n.onFocus&&n.onFocus.bind(this)),onKeyDown:this.composeEventHandlers(this.handleKeyDown.bind(this),n.onKeyDown&&n.onKeyDown.bind(this)),onKeyUp:this.composeEventHandlers(this.handleKeyUp.bind(this),n.onKeyUp&&n.onKeyUp.bind(this)),role:"combobox",value:this.props.value})),("open"in this.props?this.props.open:this.state.isOpen)&&this.renderMenu(),this.props.debug&&N.createElement("pre",{style:{marginLeft:300}},JSON.stringify(GZ.slice(GZ.length-5,GZ.length),null,2)))}}]),i}(N.Component);x$.defaultProps={value:"",wrapperProps:{},wrapperStyle:{display:"inline-block"},inputProps:{},onChange(){},onSelect(){},renderMenu(e,g,i){return N.createElement("div",{style:{...i,...this.menuStyle}},e)},shouldItemRender(){return!0},menuStyle:{borderRadius:"3px",boxShadow:"0 2px 12px rgba(0, 0, 0, 0.1)",background:"rgba(255, 255, 255, 0.9)",padding:"2px 0",fontSize:"90%",position:"fixed",overflow:"auto",maxHeight:"50%"},autoHighlight:!0,onMenuVisibilityChange(){}};x$.propTypes={autoHighlight:L.bool,debug:L.bool,getItemValue:L.func.isRequired,inputProps:L.object,items:L.array,menuStyle:L.object,onChange:L.func,onFocus:L.func,onMenuVisibilityChange:L.func,onSelect:L.func,open:L.bool,renderItem:L.func.isRequired,renderMenu:L.func,shouldItemRender:L.func,sortItems:L.func,value:L.any,wrapperProps:L.object,wrapperStyle:L.object};const F8t="_btn_1l2sx_95",rf={"genome-position-search":"_genome-position-search_1l2sx_1","genome-position-search-focus":"_genome-position-search-focus_1l2sx_2","genome-position-search-bar":"_genome-position-search-bar_1l2sx_16","genome-position-search-dark":"_genome-position-search-dark_1l2sx_34","genome-position-search-bar-button":"_genome-position-search-bar-button_1l2sx_38","genome-position-search-bar-button-focus":"_genome-position-search-bar-button-focus_1l2sx_39","genome-position-search-bar-icon":"_genome-position-search-bar-icon_1l2sx_62","genome-position-search-bar-icon-focus":"_genome-position-search-bar-icon-focus_1l2sx_63","genome-position-search-bar-suggestions":"_genome-position-search-bar-suggestions_1l2sx_83",btn:F8t,"btn-sm":"_btn-sm_1l2sx_116","btn-default":"_btn-default_1l2sx_122"};function D8t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Dse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function mH(e){return mH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},mH(e)}let YXe=function(e){z8t(i,e);var g=P8t(i);function i(I){var n;return D8t(this,i),n=g.call(this,I),n.mounted=!1,n.uid=cg.nice(),n.chromInfo=null,n.searchField=null,n.autocompleteMenu=null,n.xScale=null,n.yScale=null,n.prevParts=[],n.props.registerViewportChangedListener(n.scalesChanged.bind(kXe(n))),n.menuPosition={left:0,top:0},n.positionText="chr4:190,998,876-191,000,255",n.state={genes:[],isFocused:!1,autocompleteServer:n.props.autocompleteServer,autocompleteId:n.props.autocompleteId,availableAssemblies:[],selectedAssembly:null},n.styles={item:{padding:"2px 6px",cursor:"default"},highlightedItem:{color:"white",background:"hsl(200, 50%, 50%)",padding:"2px 6px",cursor:"default"},menu:{border:"solid 1px #ccc"}},n.availableAutocompletes={},n.props.autocompleteId&&(n.availableAutocompletes[n.props.chromInfoId]=new Set([{server:n.props.autocompleteServer,acId:n.props.autocompleteId}])),n.availableChromSizes={},n}return x8t(i,[{key:"componentDidMount",value:function(){this.mounted=!0,hg(this.autocompleteMenu.inputEl).on("keypress",this.autocompleteKeyPress.bind(this)),this.findAvailableAutocompleteSources(),this.findAvailableChromSizes(),this.props.chromInfoPath&&(this.searchPosition=!0,Os(this.props.chromInfoPath,n=>{if(!n){this.searchPosition=null;return}this.chromInfo=n,this.searchField=new C0(this.chromInfo),this.setPositionText()})),this.setPositionText()}},{key:"componentWillUnmount",value:function(){this.mounted=!1,this.props.removeViewportChangedListener()}},{key:"onAutocompleteChange",value:function(n,r){this.positionText=r,this.setState({value:r,loading:!0}),this.changedPart=null;const C=r.split(/ /);let o=0;const a=[];let s=!1;for(let A=0;A{if(l)this.setState({loading:!1,genes:[]});else if(this.changedPart>0&&!s){const u=`${this.state.autocompleteServer}/suggest/?d=${this.state.autocompleteId}&ac=${a[this.changedPart-1].toLowerCase()}-${a[this.changedPart].toLowerCase()}`;vt.json(u,(d,h)=>{d?this.setState({loading:!1,genes:c}):this.setState({loading:!1,genes:h.concat(c)})},this.props.pubSub)}else this.setState({loading:!1,genes:c})},this.props.pubSub)}}},{key:"setAvailableAssemblies",value:function(){const n=new Set(HC(this.availableChromSizes)),r=new Set([...n]);this.gpsbForm&&this.setState({availableAssemblies:[...r]})}},{key:"setSelectedAssembly",value:function(n){if(!this.mounted||!this.availableChromSizes[n])return;const r=[...this.availableChromSizes[n]][0];this.setState({autocompleteServer:r.server});const{server:C}=r;if(this.availableAutocompletes[n]){const o=[...this.availableAutocompletes[n]][0].acId;this.props.onSelectedAssemblyChanged(n,o,C),this.gpsbForm&&this.setState({autocompleteId:o})}else this.props.onSelectedAssemblyChanged(n,null,C),this.gpsbForm&&this.setState({autocompleteId:null});this.fetchChromInfo(r.uuid,r.server)}},{key:"setPositionText",value:function(){if(!this.mounted||!this.searchField)return;const n=this.searchField.scalesToPositionText(this.xScale,this.yScale,this.props.twoD);this.prevParts=n.split(/[ -]/),this.gpsbForm&&(this.positionText=n,this.origPositionText=n,this.autocompleteMenu.inputEl.value=n)}},{key:"scalesChanged",value:function(n,r){this.xScale=n,this.yScale=r,this.setPositionText()}},{key:"findAvailableChromSizes",value:function(){this.props.trackSourceServers&&this.props.trackSourceServers.forEach(n=>{vt.json(`${n}/available-chrom-sizes/`,(r,C)=>{r?console.error(r):(C.results.forEach(o=>{o.coordSystem in this.availableChromSizes||(this.availableChromSizes[o.coordSystem]=new Set),this.availableChromSizes[o.coordSystem].add({server:n,uuid:o.uuid}),this.setAvailableAssemblies()}),this.searchField||this.fetchChromInfo(this.props.chromInfoId in this.availableChromSizes?[...this.availableChromSizes[this.props.chromInfoId]][0].uuid:this.props.chromInfoId,this.props.chromInfoId in this.availableChromSizes?[...this.availableChromSizes[this.props.chromInfoId]][0].server:this.props.chromInfoServer))},this.props.pubSub)})}},{key:"findAvailableAutocompleteSources",value:function(){this.props.trackSourceServers&&this.props.trackSourceServers.forEach(n=>{vt.json(`${n}/tilesets/?limit=100&dt=gene-annotation`,(r,C)=>{r?console.error(r):(C.results.forEach(o=>{o.coordSystem in this.availableAutocompletes||(this.availableAutocompletes[o.coordSystem]=new Set),this.availableAutocompletes[o.coordSystem].add({server:n,acId:o.uuid}),this.setAvailableAssemblies()}),this.state.autocompleteId||this.gpsbForm&&this.availableAutocompletes[this.props.chromInfoId]&&this.setState({autocompleteId:[...this.availableAutocompletes[this.props.chromInfoId]][0].acId}))},this.props.pubSub)})}},{key:"fetchChromInfo",value:function(n,r){Os(`${r}/chrom-sizes/?id=${n}`,C=>{C&&(vt.json(`${r}/tileset_info/?d=${n}`,(o,a)=>{o||this.gpsbForm&&this.setState({selectedAssembly:a[n].coordSystem})},this.props.pubSub),this.chromInfo=C,this.searchField=new C0(this.chromInfo),this.setPositionText())},this.props.pubSub)}},{key:"autocompleteKeyPress",value:function(n){n.keyCode===13&&this.buttonClick()}},{key:"genePositionToSearchBarText",value:function(n){}},{key:"replaceGenesWithLoadedPositions",value:function(n){const r=this.positionText,C=r.split(" ");let o=!1;for(let s=0;sl;){const d=A.slice(l,c).join("-");if(n[d.toLowerCase()]){const h=n[d.toLowerCase()],m=Math.floor((h.txEnd-h.txStart)/4);l===0&&c{if(o){const a={};for(let A=0;Aconsole.error(o))}},{key:"buttonClick",value:function(){this.setState({genes:[]}),this.replaceGenesWithPositions(n=>{const r=this.positionText;if(this.searchField!==null){const C=this.searchField.searchPosition(r),o=C[0];let a=C[1];if(!o){this.setPositionText();return}if(o&&(Number.isNaN(+o[0])||Number.isNaN(+o[1]))||a&&(Number.isNaN(+a[0])||Number.isNaN(+a[1])))return;a||(a=o);const s=this.xScale.copy().domain(o),A=this.yScale.copy().domain(a),[l,c,u]=SI(s,A);n&&this.props.onGeneSearch({geneSymbol:n,range:o,centerX:l,centerY:c}),this.props.setCenters(l,c,u,MGe)}})}},{key:"searchFieldSubmit",value:function(){this.buttonClick()}},{key:"pathJoin",value:function(n,r){const C=r||"/",o=new RegExp(`${C}{1,}`,"g");return n.join(C).replace(o,C)}},{key:"geneSelected",value:function(n,r){const C=this.positionText.split(" ");let o=this.changedPart;for(let a=0;as.length-1)o-=s.length;else{if(s[o]=r.geneName,A.length===2&&o>0&&s[o-1].toLowerCase()===A[0].toLowerCase()){const l=s.slice(0,o-1);l.push(A.join("-")),oN.createElement("option",{key:r,value:r},r));return N.createElement("div",{ref:r=>{this.gpsbForm=r},className:Xg({[rf["genome-position-search-focus"]]:this.state.isFocused,[rf["genome-position-search"]]:!this.state.isFocused,[rf["genome-position-search-dark"]]:this.props.theme===ii})},!this.props.hideAvailableAssemblies&&N.createElement("select",{ref:r=>{this.assemblyPickButton=r},className:rf["genome-position-search-bar-button"],id:this.uid,onChange:this.handleAssemblySelectEvt.bind(this),value:this.state.selectedAssembly||void 0},n),N.createElement(x$,{ref:r=>{this.autocompleteMenu=r},getItemValue:r=>r.geneName,inputProps:{className:rf["genome-position-search-bar"],title:"Current location: enter a symbol or location to change the position of the current view"},items:this.state.genes,menuStyle:{position:"absolute",left:this.menuPosition.left,top:this.menuPosition.top,border:"1px solid black"},onChange:this.onAutocompleteChange.bind(this),onFocus:this.focusHandler.bind(this),onMenuVisibilityChange:this.handleMenuVisibilityChange.bind(this),onSelect:(r,C)=>this.geneSelected(r,C),onSubmit:this.searchFieldSubmit.bind(this),renderItem:(r,C)=>N.createElement("div",{key:r.refseqid,id:r.refseqid,style:C?this.styles.highlightedItem:this.styles.item},r.geneName),renderMenu:this.handleRenderMenu.bind(this),value:this.state.selectedAssembly?this.positionText:"No valid assembly selected",wrapperStyle:{width:"100%"}}),N.createElement(UGe,{onClick:this.buttonClick.bind(this),theStyle:"multitrack-header-icon"}))}}]),i}(N.Component);YXe.propTypes={autocompleteId:L.string,autocompleteServer:L.string,chromInfoId:L.string,chromInfoServer:L.string,chromInfoPath:L.string,hideAvailableAssemblies:L.bool,isFocused:L.bool,pubSub:L.object,onFocus:L.func,onGeneSearch:L.func,onSelectedAssemblyChanged:L.func,registerViewportChangedListener:L.func,removeViewportChangedListener:L.func,setCenters:L.func,theme:L.symbol.isRequired,trackSourceServers:L.array,twoD:L.bool};const _8t=iy(um(YXe)),L8t={"export-link-dialog-wrapper":"_export-link-dialog-wrapper_p9gxw_1"};function U8t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function xse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fH(e){return fH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},fH(e)}let E$=function(e){q8t(i,e);var g=e6t(i);function i(){return U8t(this,i),g.apply(this,arguments)}return Q8t(i,[{key:"render",value:function(){return N.createElement(ww,{okayOnly:!0,okayTitle:"Done",onOkay:this.props.onDone,title:"Share view link"},N.createElement("div",{className:L8t["export-link-dialog-wrapper"]},N.createElement("input",{ref:n=>{n&&(this.input=n,n.focus(),n.select())},onClick:n=>{n.target.select()},placeholder:"Generating the link...",readOnly:!0,value:this.props.url}),N.createElement(Hs,{onClick:n=>{this.input.select(),document.execCommand("copy")}},"Copy")))}}]),i}(N.Component);E$.defaultProps={onDone:()=>{},url:""};E$.propTypes={onDone:L.func,url:L.string};function I6t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Ese(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function pH(e){return pH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},pH(e)}let KXe=function(e){o6t(i,e);var g=a6t(i);function i(I){var n;return I6t(this,i),n=g.call(this,I),n.state={submenuShown:!1},n}return n6t(i,[{key:"getConfigureViewMenu",value:function(n,r){const C=["backgroundColor"],o={},a={};for(const s of C)if(s in Object.keys(an)&&(o[s]={name:an[s].name},an[s].inlineOptions))for(const A in an[s].inlineOptions){const l=an[s].inlineOptions[A];o[s].children||(o[s].children={});const c={name:l.name,value:l.value};c.handler=()=>{a[s]=l.value,this.props.onOptionsChanged(a)},o[s].children[A]=c}return N.createElement(WO,{key:"config-series-menu",closeMenu:this.props.closeMenu,menuItems:o,orientation:this.state.orientation,parentBbox:r,position:n,theme:this.props.theme})}},{key:"getSubmenu",value:function(){if(this.state.submenuShown){const n=this.state.submenuSourceBbox,r=this.state.orientation==="left"?{left:this.state.left,top:n.top}:{left:this.state.left+n.width+7,top:n.top};return this.state.submenuShown.option==="options"?this.getConfigureViewMenu(r,n):N.createElement("div",null)}return N.createElement("div",null)}},{key:"render",value:function(){return N.createElement("div",{ref:n=>{this.div=n},className:Xg(jt["context-menu"],{[jt["context-menu-dark"]]:this.props.theme===ii}),"data-menu-type":"ConfigViewMenu",style:{left:this.state.left,top:this.state.top}},N.createElement(ig,{onClick:n=>this.props.onTogglePositionSearchBox(n)},"Toggle position search box"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onZoomToData(n)},"Zoom to data extent"),N.createElement(ig,{onClick:n=>this.props.onClearView(n)},"Clear View"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onYankZoom(n)},"Take zoom from"),N.createElement(ig,{onClick:n=>this.props.onYankLocation(n)},"Take location from"),N.createElement(ig,{onClick:n=>this.props.onYankZoomAndLocation(n)},"Take zoom and location from"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:this.props.onLockZoom},"Lock zoom with"),N.createElement(ig,{onClick:this.props.onLockLocation},"Lock location with"),N.createElement(ig,{onClick:this.props.onLockZoomAndLocation},"Lock zoom and location with"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:this.props.onTakeAndLockZoomAndLocation},"Take and lock zoom and location with"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onUnlockZoom(n)},"Unlock zoom"),N.createElement(ig,{onClick:n=>this.props.onUnlockLocation(n)},"Unlock location"),N.createElement(ig,{onClick:n=>this.props.onUnlockZoomAndLocation(n)},"Unlock zoom and location"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onProjectViewport(n)},"Show this viewport on"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:n=>this.props.onEditViewConfig(n)},"Edit view config"),N.createElement("hr",{className:jt["context-menu-hr"]}),N.createElement(ig,{onClick:()=>this.props.onExportSVG()},"Export views as SVG"),N.createElement(ig,{onClick:()=>this.props.onExportPNG()},"Export views as PNG"),N.createElement(ig,{onClick:()=>this.props.onExportViewAsJSON()},"Export views as JSON"),N.createElement(ig,{onClick:()=>this.props.onExportViewAsLink()},"Export views as Link"),this.getSubmenu())}}]),i}(pu);KXe.propTypes={onEditViewConfig:L.func.isRequired,onExportSVG:L.func,onExportPNG:L.func,onExportViewAsJSON:L.func,onExportViewAsLink:L.func,onLockLocation:L.func,onLockZoom:L.func,onLockZoomAndLocation:L.func,onProjectViewport:L.func,onTakeAndLockZoomAndLocation:L.func,onTogglePositionSearchBox:L.func,onUnlockLocation:L.func,onUnlockZoom:L.func,onUnlockZoomAndLocation:L.func,onYankLocation:L.func,onYankZoom:L.func,onYankZoomAndLocation:L.func,onZoomToData:L.func,theme:L.symbol};const wC={"add-track-position-table":"_add-track-position-table_wdy5w_1","add-track-position-table-dark":"_add-track-position-table-dark_wdy5w_7","add-track-position-other":"_add-track-position-other_wdy5w_11","add-track-position-top-center":"_add-track-position-top-center_wdy5w_15","add-track-position-middle-left":"_add-track-position-middle-left_wdy5w_30","add-track-position-middle-right":"_add-track-position-middle-right_wdy5w_45","add-track-position-middle-middle":"_add-track-position-middle-middle_wdy5w_60","add-track-position-bottom-middle":"_add-track-position-bottom-middle_wdy5w_71","add-track-position-span":"_add-track-position-span_wdy5w_86"};function FXe(e){return N.createElement("div",null,N.createElement("div",{className:wC["add-track-position-span"]},"Add Track..."),N.createElement("table",{className:Xg(wC["add-track-position-table"],{[wC["add-track-position-table-dark"]]:e.theme===ii})},N.createElement("tbody",null,N.createElement("tr",{style:{height:"30px"}},N.createElement("td",{"aria-hidden":"true",className:wC["add-track-position-other"]}),N.createElement("td",{className:wC["add-track-position-top-center"],onClick:()=>e.onTrackPositionChosen("top")},"top"),N.createElement("td",{"aria-hidden":"true",className:wC["add-track-position-other"]})),N.createElement("tr",{style:{height:"80px"}},N.createElement("td",{className:wC["add-track-position-middle-left"],onClick:()=>e.onTrackPositionChosen("left")},"left"),N.createElement("td",{className:wC["add-track-position-middle-middle"],onClick:()=>e.onTrackPositionChosen("center")},"center"),N.createElement("td",{className:wC["add-track-position-middle-right"],onClick:()=>e.onTrackPositionChosen("right")},"right")),N.createElement("tr",{style:{height:"30px"}},N.createElement("td",{"aria-hidden":"true",className:wC["add-track-position-other"]}),N.createElement("td",{className:wC["add-track-position-bottom-middle"],onClick:()=>e.onTrackPositionChosen("bottom")},"bottom"),N.createElement("td",{"aria-hidden":"true",className:wC["add-track-position-other"]})))))}FXe.propTypes={onTrackPositionChosen:L.func.isRequired,theme:L.symbol.isRequired};const c6t=um(FXe);function u6t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Mse(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bH(e){return bH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},bH(e)}let M$=function(e){f6t(i,e);var g=p6t(i);function i(I){var n;return u6t(this,i),n=g.call(this,I),n.configImg=null,n.plusImg=null,n.state={addTrackPositionMenuUid:null,addTrackPositionMenuPosition:null,configMenuUid:null,configMenuPosition:null,isFocused:!1,width:-1},n.handleTrackPositionChosenBound=n.handleTrackPositionChosen.bind(DXe(n)),n}return d6t(i,[{key:"componentDidMount",value:function(){this.setState({width:this.el.clientWidth})}},{key:"checkWidth",value:function(){const n=this.el.clientWidth;n!==this.state.width&&this.setState({width:n})}},{key:"handleConfigMenuOpened",value:function(n){this.setState({configMenuUid:n,configMenuPosition:this.configImg.getBoundingClientRect()})}},{key:"handleAddTrackPositionMenuOpened",value:function(n){this.setState({addTrackPositionMenuUid:n,addTrackPositionMenuPosition:this.plusImg.getBoundingClientRect()})}},{key:"handleTrackPositionChosen",value:function(n){this.props.onTrackPositionChosen(n),this.setState({addTrackPositionMenuUid:null,addTrackPositionMenuPosition:null})}},{key:"render",value:function(){let n=null,r=null;this.state.addTrackPositionMenuPosition&&(r=N.createElement(xc,{onMenuClosed:()=>{this.setState({addTrackPositionMenuUid:null,addTrackPositionMenuPosition:null})}},N.createElement(pu,{orientation:"left",position:this.state.addTrackPositionMenuPosition,theme:this.props.theme},N.createElement(c6t,{onTrackPositionChosen:this.handleTrackPositionChosenBound})))),this.state.configMenuUid&&(n=N.createElement(xc,{onMenuClosed:()=>this.setState({configMenuUid:null})},N.createElement(KXe,{onClearView:()=>{this.setState({configMenuUid:null}),this.props.onClearView()},onEditViewConfig:()=>{this.setState({configMenuUid:null}),this.props.onEditViewConfig(this.state.configMenuUid)},onExportPNG:()=>{this.setState({configMenuUid:null}),this.props.onExportPNG()},onExportSVG:()=>{this.setState({configMenuUid:null}),this.props.onExportSVG()},onExportViewAsJSON:()=>{this.setState({configMenuUid:null}),this.props.onExportViewsAsJSON()},onExportViewAsLink:()=>{this.setState({configMenuUid:null}),this.props.onExportViewsAsLink()},onLockLocation:()=>{this.setState({configMenuUid:null}),this.props.onLockLocation(this.state.configMenuUid)},onLockZoom:()=>{this.setState({configMenuUid:null}),this.props.onLockZoom(this.state.configMenuUid)},onLockZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onLockZoomAndLocation(this.state.configMenuUid)},onOptionsChanged:s=>{this.props.onViewOptionsChanged(s),this.setState({configMenuUid:null})},onProjectViewport:()=>{this.setState({configMenuUid:null}),this.props.onProjectViewport(this.state.configMenuUid)},onTakeAndLockZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onTakeAndLockZoomAndLocation(this.state.configMenuUid)},onTogglePositionSearchBox:()=>{this.setState({configMenuUid:null}),this.props.onTogglePositionSearchBox(this.state.configMenuUid)},onUnlockLocation:()=>{this.setState({configMenuUid:null}),this.props.onUnlockLocation(this.state.configMenuUid)},onUnlockZoom:()=>{this.setState({configMenuUid:null}),this.props.onUnlockZoom(this.state.configMenuUid)},onUnlockZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onUnlockZoomAndLocation(this.state.configMenuUid)},onYankLocation:()=>{this.setState({configMenuUid:null}),this.props.onYankLocation(this.state.configMenuUid)},onYankZoom:()=>{this.setState({configMenuUid:null}),this.props.onYankZoom(this.state.configMenuUid)},onYankZoomAndLocation:()=>{this.setState({configMenuUid:null}),this.props.onYankZoomAndLocation(this.state.configMenuUid)},onZoomToData:()=>{this.setState({configMenuUid:null}),this.props.onZoomToData(this.state.configMenuUid)},orientation:"left",position:this.state.configMenuPosition,theme:this.props.theme})));const C=this.props.getGenomePositionSearchBox(this.state.isFocused,s=>{this.setState({isFocused:s})}),o=Xg(this.state.isFocused?XC["multitrack-header-focus"]:XC["multitrack-header"],{[XC["multitrack-header-dark"]]:this.props.theme===ii}),a=this.state.width<=zGe?XC["multitrack-header-icon-squeazed"]:XC["multitrack-header-icon"];return N.createElement("div",{ref:s=>{this.el=s},className:o},N.createElement("div",{className:XC["multitrack-header-left"]},this.props.mouseTool===JC&&N.createElement("svg",{className:Xg(XC["mouse-tool-selection"],a),title:"Selection tool active"},N.createElement("use",{xlinkHref:"#select"})),N.createElement("div",{className:XC["multitrack-header-grabber"],title:"Drag to move the view"},N.createElement("div",null),N.createElement("div",null),N.createElement("div",null)),this.state.width>PGe&&N.createElement("div",{className:XC["multitrack-header-search"]},this.props.isGenomePositionSearchBoxVisible&&C)),N.createElement("nav",{className:XC["multitrack-header-nav-list"]},N.createElement("svg",{className:a,onClick:this.props.onAddView},N.createElement("title",null,"Add new view (clone this view)"),N.createElement("use",{xlinkHref:"#copy"})),N.createElement("svg",{ref:s=>{this.configImg=s},className:a,onClick:()=>this.handleConfigMenuOpened(this.props.viewUid)},N.createElement("title",null,"Configure this view"),N.createElement("use",{xlinkHref:"#cog"})),N.createElement("svg",{ref:s=>{this.plusImg=s},className:a,onClick:()=>this.handleAddTrackPositionMenuOpened(this.props.viewUid)},N.createElement("title",null,"Add Track"),N.createElement("use",{xlinkHref:"#plus"})),N.createElement("svg",{className:a,onClick:this.props.onCloseView},N.createElement("title",null,"Close View"),N.createElement("use",{xlinkHref:"#cross"}))),n,r)}}]),i}(N.Component);M$.defaultProps={isGenomePositionSearchBoxVisible:!1};M$.propTypes={getGenomePositionSearchBox:L.func.isRequired,isGenomePositionSearchBoxVisible:L.bool,mouseTool:L.string.isRequired,onAddView:L.func.isRequired,onClearView:L.func.isRequired,onCloseView:L.func.isRequired,onEditViewConfig:L.func.isRequired,onExportSVG:L.func.isRequired,onExportPNG:L.func.isRequired,onExportViewsAsJSON:L.func.isRequired,onExportViewsAsLink:L.func.isRequired,onLockLocation:L.func.isRequired,onLockZoom:L.func.isRequired,onLockZoomAndLocation:L.func.isRequired,onProjectViewport:L.func.isRequired,onTakeAndLockZoomAndLocation:L.func.isRequired,onTogglePositionSearchBox:L.func.isRequired,onTrackPositionChosen:L.func.isRequired,onUnlockLocation:L.func.isRequired,onUnlockZoom:L.func.isRequired,onUnlockZoomAndLocation:L.func.isRequired,onViewOptionsChanged:L.func.isRequired,onYankLocation:L.func.isRequired,onYankZoom:L.func.isRequired,onYankZoomAndLocation:L.func.isRequired,onZoomToData:L.func.isRequired,theme:L.symbol.isRequired,viewUid:L.string.isRequired};const Z6t=um(M$);var xXe={};Object.defineProperty(xXe,"__esModule",{value:!0});var Rl=Object.assign||function(e){for(var g=1;g=0||Object.prototype.hasOwnProperty.call(e,I)&&(i[I]=e[I]);return i}function w6t(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function zse(e,g){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g&&(typeof g=="object"||typeof g=="function")?g:e}function R6t(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof g);e.prototype=Object.create(g&&g.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),g&&(Object.setPrototypeOf?Object.setPrototypeOf(e,g):e.__proto__=g)}var V6t=13,W6t=9,X6t=8,H6t=89,e1=90,T6t=77,Pse=57,Jse=219,Ose=222,_se=192,N6t=27,Lse=100,k6t=3e3,Y6t="navigator"in globalThis&&/Win/i.test(navigator.platform),Vx="navigator"in globalThis&&/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform),EW="npm__react-simple-code-editor__textarea",K6t=` /** * Reset the text fill color so that placeholder is visible */ -.`+FW+`:empty { +.`+EW+`:empty { -webkit-text-fill-color: inherit !important; } @@ -1940,36 +1940,36 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho * So we use 'color: transparent' to make the text transparent on IE * Unlike other browsers, it doesn't affect caret color in IE */ - .`+FW+` { + .`+EW+` { color: transparent !important; } - .`+FW+`::selection { + .`+EW+`::selection { background-color: #accef7 !important; color: transparent !important; } } -`,NXe=function(e){b6t(g,e);function g(){var I,i,n,C;p6t(this,g);for(var r=arguments.length,o=Array(r),a=0;a1&&arguments[1]!==void 0?arguments[1]:!1,l=n._history,c=l.stack,u=l.offset;if(c.length&&u>-1){n._history.stack=c.slice(0,u+1);var d=n._history.stack.length;if(d>Pse){var h=d-Pse;n._history.stack=c.slice(h,d),n._history.offset=Math.max(n._history.offset-h,0)}}var m=Date.now();if(A){var f=n._history.stack[n._history.offset];if(f&&m-f.timestamp1&&arguments[1]!==void 0?arguments[1]:!1,l=n._history,c=l.stack,u=l.offset;if(c.length&&u>-1){n._history.stack=c.slice(0,u+1);var d=n._history.stack.length;if(d>Lse){var h=d-Lse;n._history.stack=c.slice(h,d),n._history.offset=Math.max(n._history.offset-h,0)}}var m=Date.now();if(A){var f=n._history.stack[n._history.offset];if(f&&m-f.timestamp=Z&&$<=B&&q.startsWith(p)?q.substring(p.length):q}).join(` -`);if(m!==G){var v=y[Z];n._applyEdits({value:G,selectionStart:v.startsWith(p)?f-p.length:f,selectionEnd:b-(m.length-G.length)})}}else if(f!==b){var w=n._getLines(m,f),R=w.length-1,S=n._getLines(m,b).length-1,X=w[R];n._applyEdits({value:m.split(` -`).map(function(q,$){return $>=R&&$<=S?p+q:q}).join(` -`),selectionStart:/\S/.test(X)?f+p.length:f,selectionEnd:b+p.length*(S-R+1)})}else{var W=f+p.length;n._applyEdits({value:m.substring(0,f)+p+m.substring(b),selectionStart:W,selectionEnd:W})}else if(s.keyCode===G6t){var V=f!==b,H=m.substring(0,f);if(H.endsWith(p)&&!V){s.preventDefault();var Y=f-p.length;n._applyEdits({value:m.substring(0,f-p.length)+m.substring(b),selectionStart:Y,selectionEnd:Y})}}else if(s.keyCode===y6t){if(f===b){var K=n._getLines(m,f).pop(),x=K.match(/^\s+/);if(x&&x[0]){s.preventDefault();var J=` -`+x[0],P=f+J.length;n._applyEdits({value:m.substring(0,f)+J+m.substring(b),selectionStart:P,selectionEnd:P})}}}else if(s.keyCode===xse||s.keyCode===Ese||s.keyCode===Mse||s.keyCode===zse){var ge=void 0;s.keyCode===xse&&s.shiftKey?ge=["(",")"]:s.keyCode===Ese?s.shiftKey?ge=["{","}"]:ge=["[","]"]:s.keyCode===Mse?s.shiftKey?ge=['"','"']:ge=["'","'"]:s.keyCode===zse&&!s.shiftKey&&(ge=["`","`"]),f!==b&&ge&&(s.preventDefault(),n._applyEdits({value:m.substring(0,f)+ge[0]+m.substring(f,b)+ge[1]+m.substring(b),selectionStart:f,selectionEnd:b+2}))}else(Gx?s.metaKey&&s.keyCode===$V:s.ctrlKey&&s.keyCode===$V)&&!s.shiftKey&&!s.altKey?(s.preventDefault(),n._undoEdit()):(Gx?s.metaKey&&s.keyCode===$V&&s.shiftKey:R6t?s.ctrlKey&&s.keyCode===v6t:s.ctrlKey&&s.keyCode===$V&&s.shiftKey)&&!s.altKey?(s.preventDefault(),n._redoEdit()):s.keyCode===B6t&&s.ctrlKey&&(!Gx||s.shiftKey)&&(s.preventDefault(),n.setState(function(q){return{capture:!q.capture}}))}},n._handleChange=function(s){var A=s.target,l=A.value,c=A.selectionStart,u=A.selectionEnd;n._recordChange({value:l,selectionStart:c,selectionEnd:u},!0),n.props.onValueChange(l)},n._history={stack:[],offset:-1},i),Dse(n,C)}return d6t(g,[{key:"componentDidMount",value:function(){this._recordCurrentState()}},{key:"render",value:function(){var i=this,n=this.props,C=n.value,r=n.style,o=n.padding,a=n.highlight,s=n.textareaId,A=n.autoFocus,l=n.disabled,c=n.form,u=n.maxLength,d=n.minLength,h=n.name,m=n.placeholder,f=n.readOnly,b=n.required,p=n.onClick,y=n.onFocus,Z=n.onBlur,B=n.onKeyUp;n.onKeyDown,n.onValueChange,n.tabSize,n.insertSpaces,n.ignoreTabKey;var G=f6t(n,["value","style","padding","highlight","textareaId","autoFocus","disabled","form","maxLength","minLength","name","placeholder","readOnly","required","onClick","onFocus","onBlur","onKeyUp","onKeyDown","onValueChange","tabSize","insertSpaces","ignoreTabKey"]),v={paddingTop:o,paddingRight:o,paddingBottom:o,paddingLeft:o},w=a(C);return ZZ.createElement("div",wl({},G,{style:wl({},GZ.container,r)}),ZZ.createElement("textarea",{ref:function(S){return i._input=S},style:wl({},GZ.editor,GZ.textarea,v),className:FW,id:s,value:C,onChange:this._handleChange,onKeyDown:this._handleKeyDown,onClick:p,onKeyUp:B,onFocus:y,onBlur:Z,disabled:l,form:c,maxLength:u,minLength:d,name:h,placeholder:m,readOnly:f,required:b,autoFocus:A,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),ZZ.createElement("pre",wl({"aria-hidden":"true",style:wl({},GZ.editor,GZ.highlight,v)},typeof w=="string"?{dangerouslySetInnerHTML:{__html:w+"
"}}:{children:w})),ZZ.createElement("style",{type:"text/css",dangerouslySetInnerHTML:{__html:V6t}}))}},{key:"session",get:function(){return{history:this._history}},set:function(i){this._history=i.history}}]),g}(ZZ.Component);NXe.defaultProps={tabSize:2,insertSpaces:!0,ignoreTabKey:!1,padding:0};var W6t=TXe.default=NXe,GZ={container:{position:"relative",textAlign:"left",boxSizing:"border-box",padding:0,overflow:"hidden"},textarea:{position:"absolute",top:0,left:0,height:"100%",width:"100%",resize:"none",color:"inherit",overflow:"hidden",MozOsxFontSmoothing:"grayscale",WebkitFontSmoothing:"antialiased",WebkitTextFillColor:"transparent"},highlight:{position:"relative",pointerEvents:"none"},editor:{margin:0,border:0,background:"none",boxSizing:"inherit",display:"inherit",fontFamily:"inherit",fontSize:"inherit",fontStyle:"inherit",fontVariantLigatures:"inherit",fontWeight:"inherit",letterSpacing:"inherit",lineHeight:"inherit",tabSize:"inherit",textIndent:"inherit",textRendering:"inherit",textTransform:"inherit",whiteSpace:"pre-wrap",wordBreak:"keep-all",overflowWrap:"break-word"}},kXe={exports:{}};(function(e){var g=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** +`);if(m!==G){var v=y[Z];n._applyEdits({value:G,selectionStart:v.startsWith(p)?f-p.length:f,selectionEnd:b-(m.length-G.length)})}}else if(f!==b){var w=n._getLines(m,f),V=w.length-1,S=n._getLines(m,b).length-1,X=w[V];n._applyEdits({value:m.split(` +`).map(function(q,$){return $>=V&&$<=S?p+q:q}).join(` +`),selectionStart:/\S/.test(X)?f+p.length:f,selectionEnd:b+p.length*(S-V+1)})}else{var W=f+p.length;n._applyEdits({value:m.substring(0,f)+p+m.substring(b),selectionStart:W,selectionEnd:W})}else if(s.keyCode===X6t){var R=f!==b,H=m.substring(0,f);if(H.endsWith(p)&&!R){s.preventDefault();var k=f-p.length;n._applyEdits({value:m.substring(0,f-p.length)+m.substring(b),selectionStart:k,selectionEnd:k})}}else if(s.keyCode===V6t){if(f===b){var K=n._getLines(m,f).pop(),D=K.match(/^\s+/);if(D&&D[0]){s.preventDefault();var J=` +`+D[0],P=f+J.length;n._applyEdits({value:m.substring(0,f)+J+m.substring(b),selectionStart:P,selectionEnd:P})}}}else if(s.keyCode===Pse||s.keyCode===Jse||s.keyCode===Ose||s.keyCode===_se){var te=void 0;s.keyCode===Pse&&s.shiftKey?te=["(",")"]:s.keyCode===Jse?s.shiftKey?te=["{","}"]:te=["[","]"]:s.keyCode===Ose?s.shiftKey?te=['"','"']:te=["'","'"]:s.keyCode===_se&&!s.shiftKey&&(te=["`","`"]),f!==b&&te&&(s.preventDefault(),n._applyEdits({value:m.substring(0,f)+te[0]+m.substring(f,b)+te[1]+m.substring(b),selectionStart:f,selectionEnd:b+2}))}else(Vx?s.metaKey&&s.keyCode===e1:s.ctrlKey&&s.keyCode===e1)&&!s.shiftKey&&!s.altKey?(s.preventDefault(),n._undoEdit()):(Vx?s.metaKey&&s.keyCode===e1&&s.shiftKey:Y6t?s.ctrlKey&&s.keyCode===H6t:s.ctrlKey&&s.keyCode===e1&&s.shiftKey)&&!s.altKey?(s.preventDefault(),n._redoEdit()):s.keyCode===T6t&&s.ctrlKey&&(!Vx||s.shiftKey)&&(s.preventDefault(),n.setState(function(q){return{capture:!q.capture}}))}},n._handleChange=function(s){var A=s.target,l=A.value,c=A.selectionStart,u=A.selectionEnd;n._recordChange({value:l,selectionStart:c,selectionEnd:u},!0),n.props.onValueChange(l)},n._history={stack:[],offset:-1},I),zse(n,r)}return G6t(g,[{key:"componentDidMount",value:function(){this._recordCurrentState()}},{key:"render",value:function(){var I=this,n=this.props,r=n.value,C=n.style,o=n.padding,a=n.highlight,s=n.textareaId,A=n.autoFocus,l=n.disabled,c=n.form,u=n.maxLength,d=n.minLength,h=n.name,m=n.placeholder,f=n.readOnly,b=n.required,p=n.onClick,y=n.onFocus,Z=n.onBlur,B=n.onKeyUp;n.onKeyDown,n.onValueChange,n.tabSize,n.insertSpaces,n.ignoreTabKey;var G=S6t(n,["value","style","padding","highlight","textareaId","autoFocus","disabled","form","maxLength","minLength","name","placeholder","readOnly","required","onClick","onFocus","onBlur","onKeyUp","onKeyDown","onValueChange","tabSize","insertSpaces","ignoreTabKey"]),v={paddingTop:o,paddingRight:o,paddingBottom:o,paddingLeft:o},w=a(r);return vZ.createElement("div",Rl({},G,{style:Rl({},BZ.container,C)}),vZ.createElement("textarea",{ref:function(S){return I._input=S},style:Rl({},BZ.editor,BZ.textarea,v),className:EW,id:s,value:r,onChange:this._handleChange,onKeyDown:this._handleKeyDown,onClick:p,onKeyUp:B,onFocus:y,onBlur:Z,disabled:l,form:c,maxLength:u,minLength:d,name:h,placeholder:m,readOnly:f,required:b,autoFocus:A,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),vZ.createElement("pre",Rl({"aria-hidden":"true",style:Rl({},BZ.editor,BZ.highlight,v)},typeof w=="string"?{dangerouslySetInnerHTML:{__html:w+"
"}}:{children:w})),vZ.createElement("style",{type:"text/css",dangerouslySetInnerHTML:{__html:K6t}}))}},{key:"session",get:function(){return{history:this._history}},set:function(I){this._history=I.history}}]),g}(vZ.Component);EXe.defaultProps={tabSize:2,insertSpaces:!0,ignoreTabKey:!1,padding:0};var F6t=xXe.default=EXe,BZ={container:{position:"relative",textAlign:"left",boxSizing:"border-box",padding:0,overflow:"hidden"},textarea:{position:"absolute",top:0,left:0,height:"100%",width:"100%",resize:"none",color:"inherit",overflow:"hidden",MozOsxFontSmoothing:"grayscale",WebkitFontSmoothing:"antialiased",WebkitTextFillColor:"transparent"},highlight:{position:"relative",pointerEvents:"none"},editor:{margin:0,border:0,background:"none",boxSizing:"inherit",display:"inherit",fontFamily:"inherit",fontSize:"inherit",fontStyle:"inherit",fontVariantLigatures:"inherit",fontWeight:"inherit",letterSpacing:"inherit",lineHeight:"inherit",tabSize:"inherit",textIndent:"inherit",textRendering:"inherit",textTransform:"inherit",whiteSpace:"pre-wrap",wordBreak:"keep-all",overflowWrap:"break-word"}},MXe={exports:{}};(function(e){var g=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** * Prism: Lightweight, robust, elegant syntax highlighting * * @license MIT * @author Lea Verou * @namespace * @public - */var I=function(i){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,C=0,r={},o={manual:i.Prism&&i.Prism.manual,disableWorkerMessageHandler:i.Prism&&i.Prism.disableWorkerMessageHandler,util:{encode:function b(p){return p instanceof a?new a(p.type,b(p.content),p.alias):Array.isArray(p)?p.map(b):p.replace(/&/g,"&").replace(/"u")return null;if("currentScript"in document&&1<2)return document.currentScript;try{throw new Error}catch(Z){var b=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(Z.stack)||[])[1];if(b){var p=document.getElementsByTagName("script");for(var y in p)if(p[y].src==b)return p[y]}return null}},isActive:function(b,p,y){for(var Z="no-"+p;b;){var B=b.classList;if(B.contains(p))return!0;if(B.contains(Z))return!1;b=b.parentElement}return!!y}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(b,p){var y=o.util.clone(o.languages[b]);for(var Z in p)y[Z]=p[Z];return y},insertBefore:function(b,p,y,Z){Z=Z||o.languages;var B=Z[b],G={};for(var v in B)if(B.hasOwnProperty(v)){if(v==p)for(var w in y)y.hasOwnProperty(w)&&(G[w]=y[w]);y.hasOwnProperty(v)||(G[v]=B[v])}var R=Z[b];return Z[b]=G,o.languages.DFS(o.languages,function(S,X){X===R&&S!=b&&(this[S]=G)}),G},DFS:function b(p,y,Z,B){B=B||{};var G=o.util.objId;for(var v in p)if(p.hasOwnProperty(v)){y.call(p,v,p[v],Z||v);var w=p[v],R=o.util.type(w);R==="Object"&&!B[G(w)]?(B[G(w)]=!0,b(w,y,null,B)):R==="Array"&&!B[G(w)]&&(B[G(w)]=!0,b(w,y,v,B))}}},plugins:{},highlightAll:function(b,p){o.highlightAllUnder(document,b,p)},highlightAllUnder:function(b,p,y){var Z={callback:y,container:b,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",Z),Z.elements=Array.prototype.slice.apply(Z.container.querySelectorAll(Z.selector)),o.hooks.run("before-all-elements-highlight",Z);for(var B=0,G;G=Z.elements[B++];)o.highlightElement(G,p===!0,Z.callback)},highlightElement:function(b,p,y){var Z=o.util.getLanguage(b),B=o.languages[Z];o.util.setLanguage(b,Z);var G=b.parentElement;G&&G.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(G,Z);var v=b.textContent,w={element:b,language:Z,grammar:B,code:v};function R(X){w.highlightedCode=X,o.hooks.run("before-insert",w),w.element.innerHTML=w.highlightedCode,o.hooks.run("after-highlight",w),o.hooks.run("complete",w),y&&y.call(w.element)}if(o.hooks.run("before-sanity-check",w),G=w.element.parentElement,G&&G.nodeName.toLowerCase()==="pre"&&!G.hasAttribute("tabindex")&&G.setAttribute("tabindex","0"),!w.code){o.hooks.run("complete",w),y&&y.call(w.element);return}if(o.hooks.run("before-highlight",w),!w.grammar){R(o.util.encode(w.code));return}if(p&&i.Worker){var S=new Worker(o.filename);S.onmessage=function(X){R(X.data)},S.postMessage(JSON.stringify({language:w.language,code:w.code,immediateClose:!0}))}else R(o.highlight(w.code,w.grammar,w.language))},highlight:function(b,p,y){var Z={code:b,grammar:p,language:y};if(o.hooks.run("before-tokenize",Z),!Z.grammar)throw new Error('The language "'+Z.language+'" has no grammar.');return Z.tokens=o.tokenize(Z.code,Z.grammar),o.hooks.run("after-tokenize",Z),a.stringify(o.util.encode(Z.tokens),Z.language)},tokenize:function(b,p){var y=p.rest;if(y){for(var Z in y)p[Z]=y[Z];delete p.rest}var B=new l;return c(B,B.head,b),A(b,B,p,B.head,0),d(B)},hooks:{all:{},add:function(b,p){var y=o.hooks.all;y[b]=y[b]||[],y[b].push(p)},run:function(b,p){var y=o.hooks.all[b];if(!(!y||!y.length))for(var Z=0,B;B=y[Z++];)B(p)}},Token:a};i.Prism=o;function a(b,p,y,Z){this.type=b,this.content=p,this.alias=y,this.length=(Z||"").length|0}a.stringify=function b(p,y){if(typeof p=="string")return p;if(Array.isArray(p)){var Z="";return p.forEach(function(R){Z+=b(R,y)}),Z}var B={type:p.type,content:b(p.content,y),tag:"span",classes:["token",p.type],attributes:{},language:y},G=p.alias;G&&(Array.isArray(G)?Array.prototype.push.apply(B.classes,G):B.classes.push(G)),o.hooks.run("wrap",B);var v="";for(var w in B.attributes)v+=" "+w+'="'+(B.attributes[w]||"").replace(/"/g,""")+'"';return"<"+B.tag+' class="'+B.classes.join(" ")+'"'+v+">"+B.content+""};function s(b,p,y,Z){b.lastIndex=p;var B=b.exec(y);if(B&&Z&&B[1]){var G=B[1].length;B.index+=G,B[0]=B[0].slice(G)}return B}function A(b,p,y,Z,B,G){for(var v in y)if(!(!y.hasOwnProperty(v)||!y[v])){var w=y[v];w=Array.isArray(w)?w:[w];for(var R=0;R=G.reach);J+=x.value.length,x=x.next){var P=x.value;if(p.length>b.length)return;if(!(P instanceof a)){var ge=1,q;if(V){if(q=s(K,J,b,W),!q||q.index>=b.length)break;var Q=q.index,$=q.index+q[0].length,j=J;for(j+=x.value.length;Q>=j;)x=x.next,j+=x.value.length;if(j-=x.value.length,J=j,x.value instanceof a)continue;for(var te=x;te!==p.tail&&(j<$||typeof te.value=="string");te=te.next)ge++,j+=te.value.length;ge--,P=b.slice(J,j),q.index-=J}else if(q=s(K,0,P,W),!q)continue;var Q=q.index,ie=q[0],he=P.slice(0,Q),ne=P.slice(Q+ie.length),be=J+P.length;G&&be>G.reach&&(G.reach=be);var pe=x.prev;he&&(pe=c(p,pe,he),J+=he.length),u(p,pe,ge);var ve=new a(v,X?o.tokenize(ie,X):ie,H,ie);if(x=c(p,pe,ve),ne&&c(p,x,ne),ge>1){var We={cause:v+","+R,reach:be};A(b,p,y,x.prev,J,We),G&&We.reach>G.reach&&(G.reach=We.reach)}}}}}}function l(){var b={value:null,prev:null,next:null},p={value:null,prev:b,next:null};b.next=p,this.head=b,this.tail=p,this.length=0}function c(b,p,y){var Z=p.next,B={value:y,prev:p,next:Z};return p.next=B,Z.prev=B,b.length++,B}function u(b,p,y){for(var Z=p.next,B=0;B1){D[0]=D[0].slice(0,-1);for(var ce=D.length-1,de=1;de= 0x80 (not a basic code point)","invalid-input":"Invalid input"},S=h-m,X=Math.floor,W=String.fromCharCode;function V(O){throw new RangeError(R[O])}function H(O,D){for(var ee=[],ce=O.length;ce--;)ee[ce]=D(O[ce]);return ee}function Y(O,D){var ee=O.split("@"),ce="";ee.length>1&&(ce=ee[0]+"@",O=ee[1]),O=O.replace(w,".");var de=O.split("."),Le=H(de,D).join(".");return ce+Le}function K(O){for(var D=[],ee=0,ce=O.length;ee=55296&&de<=56319&&ee>1,D+=X(D/ee);D>S*f>>1;de+=h)D=X(D/S);return X(de+(S+1)*D/(D+b))},q=function(D){var ee=[],ce=D.length,de=0,Le=Z,Ue=y,dt=D.lastIndexOf(B);dt<0&&(dt=0);for(var yt=0;yt=128&&V("not-basic"),ee.push(D.charCodeAt(yt));for(var kt=dt>0?dt+1:0;kt=ce&&V("invalid-input");var At=J(D.charCodeAt(kt++));(At>=h||At>X((d-de)/Rt))&&V("overflow"),de+=At*Rt;var Xt=xt<=Ue?m:xt>=Ue+f?f:xt-Ue;if(AtX(d/Pt)&&V("overflow"),Rt*=Pt}var Ft=ee.length+1;Ue=ge(de-ht,Ft,ht==0),X(de/Ft)>d-Le&&V("overflow"),Le+=X(de/Ft),de%=Ft,ee.splice(de++,0,Le)}return String.fromCodePoint.apply(String,ee)},$=function(D){var ee=[];D=K(D);var ce=D.length,de=Z,Le=0,Ue=y,dt=!0,yt=!1,kt=void 0;try{for(var ht=D[Symbol.iterator](),Rt;!(dt=(Rt=ht.next()).done);dt=!0){var xt=Rt.value;xt<128&&ee.push(W(xt))}}catch(fC){yt=!0,kt=fC}finally{try{!dt&&ht.return&&ht.return()}finally{if(yt)throw kt}}var At=ee.length,Xt=At;for(At&&ee.push(B);Xt=de&&UtX((d-Le)/Yt)&&V("overflow"),Le+=(Pt-de)*Yt,de=Pt;var Wt=!0,tg=!1,_t=void 0;try{for(var qt=D[Symbol.iterator](),Ag;!(Wt=(Ag=qt.next()).done);Wt=!0){var Wg=Ag.value;if(Wgd&&V("overflow"),Wg==de){for(var mg=Le,PI=h;;PI+=h){var en=PI<=Ue?m:PI>=Ue+f?f:PI-Ue;if(mg>6|192).toString(16).toUpperCase()+"%"+(D&63|128).toString(16).toUpperCase():ee="%"+(D>>12|224).toString(16).toUpperCase()+"%"+(D>>6&63|128).toString(16).toUpperCase()+"%"+(D&63|128).toString(16).toUpperCase(),ee}function ne(O){for(var D="",ee=0,ce=O.length;ee=194&&de<224){if(ce-ee>=6){var Le=parseInt(O.substr(ee+4,2),16);D+=String.fromCharCode((de&31)<<6|Le&63)}else D+=O.substr(ee,6);ee+=6}else if(de>=224){if(ce-ee>=9){var Ue=parseInt(O.substr(ee+4,2),16),dt=parseInt(O.substr(ee+7,2),16);D+=String.fromCharCode((de&15)<<12|(Ue&63)<<6|dt&63)}else D+=O.substr(ee,9);ee+=9}else D+=O.substr(ee,3),ee+=3}return D}function be(O,D){function ee(ce){var de=ne(ce);return de.match(D.UNRESERVED)?de:ce}return O.scheme&&(O.scheme=String(O.scheme).replace(D.PCT_ENCODED,ee).toLowerCase().replace(D.NOT_SCHEME,"")),O.userinfo!==void 0&&(O.userinfo=String(O.userinfo).replace(D.PCT_ENCODED,ee).replace(D.NOT_USERINFO,he).replace(D.PCT_ENCODED,r)),O.host!==void 0&&(O.host=String(O.host).replace(D.PCT_ENCODED,ee).toLowerCase().replace(D.NOT_HOST,he).replace(D.PCT_ENCODED,r)),O.path!==void 0&&(O.path=String(O.path).replace(D.PCT_ENCODED,ee).replace(O.scheme?D.NOT_PATH:D.NOT_PATH_NOSCHEME,he).replace(D.PCT_ENCODED,r)),O.query!==void 0&&(O.query=String(O.query).replace(D.PCT_ENCODED,ee).replace(D.NOT_QUERY,he).replace(D.PCT_ENCODED,r)),O.fragment!==void 0&&(O.fragment=String(O.fragment).replace(D.PCT_ENCODED,ee).replace(D.NOT_FRAGMENT,he).replace(D.PCT_ENCODED,r)),O}function pe(O){return O.replace(/^0*(.*)/,"$1")||"0"}function ve(O,D){var ee=O.match(D.IPV4ADDRESS)||[],ce=c(ee,2),de=ce[1];return de?de.split(".").map(pe).join("."):O}function We(O,D){var ee=O.match(D.IPV6ADDRESS)||[],ce=c(ee,3),de=ce[1],Le=ce[2];if(de){for(var Ue=de.toLowerCase().split("::").reverse(),dt=c(Ue,2),yt=dt[0],kt=dt[1],ht=kt?kt.split(":").map(pe):[],Rt=yt.split(":").map(pe),xt=D.IPV4ADDRESS.test(Rt[Rt.length-1]),At=xt?7:8,Xt=Rt.length-At,Pt=Array(At),Ft=0;Ft1){var Zt=Pt.slice(0,qg.index),Ut=Pt.slice(qg.index+qg.length);It=Zt.join(":")+"::"+Ut.join(":")}else It=Pt.join(":");return Le&&(It+="%"+Le),It}else return O}var Be=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Je="".match(/(){0}/)[1]===void 0;function Pe(O){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee={},ce=D.iri!==!1?l:A;D.reference==="suffix"&&(O=(D.scheme?D.scheme+":":"")+"//"+O);var de=O.match(Be);if(de){Je?(ee.scheme=de[1],ee.userinfo=de[3],ee.host=de[4],ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=de[7],ee.fragment=de[8],isNaN(ee.port)&&(ee.port=de[5])):(ee.scheme=de[1]||void 0,ee.userinfo=O.indexOf("@")!==-1?de[3]:void 0,ee.host=O.indexOf("//")!==-1?de[4]:void 0,ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=O.indexOf("?")!==-1?de[7]:void 0,ee.fragment=O.indexOf("#")!==-1?de[8]:void 0,isNaN(ee.port)&&(ee.port=O.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?de[4]:void 0)),ee.host&&(ee.host=We(ve(ee.host,ce),ce)),ee.scheme===void 0&&ee.userinfo===void 0&&ee.host===void 0&&ee.port===void 0&&!ee.path&&ee.query===void 0?ee.reference="same-document":ee.scheme===void 0?ee.reference="relative":ee.fragment===void 0?ee.reference="absolute":ee.reference="uri",D.reference&&D.reference!=="suffix"&&D.reference!==ee.reference&&(ee.error=ee.error||"URI is not a "+D.reference+" reference.");var Le=ie[(D.scheme||ee.scheme||"").toLowerCase()];if(!D.unicodeSupport&&(!Le||!Le.unicodeSupport)){if(ee.host&&(D.domainHost||Le&&Le.domainHost))try{ee.host=Q.toASCII(ee.host.replace(ce.PCT_ENCODED,ne).toLowerCase())}catch(Ue){ee.error=ee.error||"Host's domain name can not be converted to ASCII via punycode: "+Ue}be(ee,A)}else be(ee,ce);Le&&Le.parse&&Le.parse(ee,D)}else ee.error=ee.error||"URI can not be parsed.";return ee}function De(O,D){var ee=D.iri!==!1?l:A,ce=[];return O.userinfo!==void 0&&(ce.push(O.userinfo),ce.push("@")),O.host!==void 0&&ce.push(We(ve(String(O.host),ee),ee).replace(ee.IPV6ADDRESS,function(de,Le,Ue){return"["+Le+(Ue?"%25"+Ue:"")+"]"})),(typeof O.port=="number"||typeof O.port=="string")&&(ce.push(":"),ce.push(String(O.port))),ce.length?ce.join(""):void 0}var Qe=/^\.\.?\//,_e=/^\/\.(\/|$)/,gt=/^\/\.\.(\/|$)/,lt=/^\/?(?:.|\n)*?(?=\/|$)/;function tt(O){for(var D=[];O.length;)if(O.match(Qe))O=O.replace(Qe,"");else if(O.match(_e))O=O.replace(_e,"/");else if(O.match(gt))O=O.replace(gt,"/"),D.pop();else if(O==="."||O==="..")O="";else{var ee=O.match(lt);if(ee){var ce=ee[0];O=O.slice(ce.length),D.push(ce)}else throw new Error("Unexpected dot segment condition")}return D.join("")}function Xe(O){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee=D.iri?l:A,ce=[],de=ie[(D.scheme||O.scheme||"").toLowerCase()];if(de&&de.serialize&&de.serialize(O,D),O.host&&!ee.IPV6ADDRESS.test(O.host)){if(D.domainHost||de&&de.domainHost)try{O.host=D.iri?Q.toUnicode(O.host):Q.toASCII(O.host.replace(ee.PCT_ENCODED,ne).toLowerCase())}catch(dt){O.error=O.error||"Host's domain name can not be converted to "+(D.iri?"Unicode":"ASCII")+" via punycode: "+dt}}be(O,ee),D.reference!=="suffix"&&O.scheme&&(ce.push(O.scheme),ce.push(":"));var Le=De(O,D);if(Le!==void 0&&(D.reference!=="suffix"&&ce.push("//"),ce.push(Le),O.path&&O.path.charAt(0)!=="/"&&ce.push("/")),O.path!==void 0){var Ue=O.path;!D.absolutePath&&(!de||!de.absolutePath)&&(Ue=tt(Ue)),Le===void 0&&(Ue=Ue.replace(/^\/\//,"/%2F")),ce.push(Ue)}return O.query!==void 0&&(ce.push("?"),ce.push(O.query)),O.fragment!==void 0&&(ce.push("#"),ce.push(O.fragment)),ce.join("")}function ae(O,D){var ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},ce=arguments[3],de={};return ce||(O=Pe(Xe(O,ee),ee),D=Pe(Xe(D,ee),ee)),ee=ee||{},!ee.tolerant&&D.scheme?(de.scheme=D.scheme,de.userinfo=D.userinfo,de.host=D.host,de.port=D.port,de.path=tt(D.path||""),de.query=D.query):(D.userinfo!==void 0||D.host!==void 0||D.port!==void 0?(de.userinfo=D.userinfo,de.host=D.host,de.port=D.port,de.path=tt(D.path||""),de.query=D.query):(D.path?(D.path.charAt(0)==="/"?de.path=tt(D.path):((O.userinfo!==void 0||O.host!==void 0||O.port!==void 0)&&!O.path?de.path="/"+D.path:O.path?de.path=O.path.slice(0,O.path.lastIndexOf("/")+1)+D.path:de.path=D.path,de.path=tt(de.path)),de.query=D.query):(de.path=O.path,D.query!==void 0?de.query=D.query:de.query=O.query),de.userinfo=O.userinfo,de.host=O.host,de.port=O.port),de.scheme=O.scheme),de.fragment=D.fragment,de}function ye(O,D,ee){var ce=a({scheme:"null"},ee);return Xe(ae(Pe(O,ce),Pe(D,ce),ce,!0),ce)}function He(O,D){return typeof O=="string"?O=Xe(Pe(O,D),D):C(O)==="object"&&(O=Pe(Xe(O,D),D)),O}function F(O,D,ee){return typeof O=="string"?O=Xe(Pe(O,ee),ee):C(O)==="object"&&(O=Xe(O,ee)),typeof D=="string"?D=Xe(Pe(D,ee),ee):C(D)==="object"&&(D=Xe(D,ee)),O===D}function T(O,D){return O&&O.toString().replace(!D||!D.iri?A.ESCAPE:l.ESCAPE,he)}function k(O,D){return O&&O.toString().replace(!D||!D.iri?A.PCT_ENCODED:l.PCT_ENCODED,ne)}var Ie={scheme:"http",domainHost:!0,parse:function(D,ee){return D.host||(D.error=D.error||"HTTP URIs must have a host."),D},serialize:function(D,ee){var ce=String(D.scheme).toLowerCase()==="https";return(D.port===(ce?443:80)||D.port==="")&&(D.port=void 0),D.path||(D.path="/"),D}},me={scheme:"https",domainHost:Ie.domainHost,parse:Ie.parse,serialize:Ie.serialize};function Ve(O){return typeof O.secure=="boolean"?O.secure:String(O.scheme).toLowerCase()==="wss"}var we={scheme:"ws",domainHost:!0,parse:function(D,ee){var ce=D;return ce.secure=Ve(ce),ce.resourceName=(ce.path||"/")+(ce.query?"?"+ce.query:""),ce.path=void 0,ce.query=void 0,ce},serialize:function(D,ee){if((D.port===(Ve(D)?443:80)||D.port==="")&&(D.port=void 0),typeof D.secure=="boolean"&&(D.scheme=D.secure?"wss":"ws",D.secure=void 0),D.resourceName){var ce=D.resourceName.split("?"),de=c(ce,2),Le=de[0],Ue=de[1];D.path=Le&&Le!=="/"?Le:void 0,D.query=Ue,D.resourceName=void 0}return D.fragment=void 0,D}},je={scheme:"wss",domainHost:we.domainHost,parse:we.parse,serialize:we.serialize},at={},bt="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",ct="[0-9A-Fa-f]",Ht=n(n("%[EFef]"+ct+"%"+ct+ct+"%"+ct+ct)+"|"+n("%[89A-Fa-f]"+ct+"%"+ct+ct)+"|"+n("%"+ct+ct)),Ce="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",E="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",_=i(E,'[\\"\\\\]'),fe="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Ye=new RegExp(bt,"g"),ue=new RegExp(Ht,"g"),le=new RegExp(i("[^]",Ce,"[\\.]",'[\\"]',_),"g"),re=new RegExp(i("[^]",bt,fe),"g"),oe=re;function Re(O){var D=ne(O);return D.match(Ye)?D:O}var xe={scheme:"mailto",parse:function(D,ee){var ce=D,de=ce.to=ce.path?ce.path.split(","):[];if(ce.path=void 0,ce.query){for(var Le=!1,Ue={},dt=ce.query.split("&"),yt=0,kt=dt.length;yt=55296&&C<=56319&&n=g)throw new Error("Cannot access property/index "+i+" levels up, current level is "+g);return I[g-i]}if(i>g)throw new Error("Cannot access data "+i+" levels up, current level is "+g);if(C="data"+(g-i||""),!n)return C}for(var o=C,a=n.split("/"),s=0;s=0?{index:i,compiling:!0}:(i=this._compilations.length,this._compilations[i]={schema:e,root:g,baseId:I},{index:i,compiling:!1})}function cqt(e,g,I){var i=PXe.call(this,e,g,I);i>=0&&this._compilations.splice(i,1)}function PXe(e,g,I){for(var i=0;i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,LXe=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,UXe=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,QXe=/^(?:\/(?:[^~/]|~0|~1)*)*$/,jXe=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,$Xe=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,Bqt=$k;function $k(e){return e=e=="full"?"full":"fast",pqt.copy($k[e])}$k.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":_Xe,url:LXe,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:OXe,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:t2e,uuid:UXe,"json-pointer":QXe,"json-pointer-uri-fragment":jXe,"relative-json-pointer":$Xe};$k.full={date:qXe,time:e2e,"date-time":Rqt,uri:Wqt,"uri-reference":vqt,"uri-template":_Xe,url:LXe,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:OXe,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:t2e,uuid:UXe,"json-pointer":QXe,"json-pointer-uri-fragment":jXe,"relative-json-pointer":$Xe};function Sqt(e){return e%4===0&&(e%100!==0||e%400===0)}function qXe(e){var g=e.match(bqt);if(!g)return!1;var I=+g[1],i=+g[2],n=+g[3];return i>=1&&i<=12&&n>=1&&n<=(i==2&&Sqt(I)?29:yqt[i])}function e2e(e,g){var I=e.match(Zqt);if(!I)return!1;var i=I[1],n=I[2],C=I[3],r=I[5];return(i<=23&&n<=59&&C<=59||i==23&&n==59&&C==60)&&(!g||r)}var wqt=/t|\s/i;function Rqt(e){var g=e.split(wqt);return g.length==2&&qXe(g[0])&&e2e(g[1],!0)}var Vqt=/\/|:/;function Wqt(e){return Vqt.test(e)&&Gqt.test(e)}var Xqt=/[^\\]\\Z/;function t2e(e){if(Xqt.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}var Hqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.errSchemaPath+"/"+I,s=!g.opts.allErrors,A="data"+(r||""),l="valid"+C,c,u;if(o=="#"||o=="#/")g.isRoot?(c=g.async,u="validate"):(c=g.root.schema.$async===!0,u="root.refVal[0]");else{var d=g.resolveRef(g.baseId,o,g.isRoot);if(d===void 0){var h=g.MissingRefError.message(g.baseId,o);if(g.opts.missingRefs=="fail"){g.logger.error(h);var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(a)+" , params: { ref: '"+g.util.escapeQuotes(o)+"' } ",g.opts.messages!==!1&&(n+=" , message: 'can\\'t resolve reference "+g.util.escapeQuotes(o)+"' "),g.opts.verbose&&(n+=" , schema: "+g.util.toQuotedString(o)+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+A+" "),n+=" } "):n+=" {} ";var f=n;n=m.pop(),!g.compositeRule&&s?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s&&(n+=" if (false) { ")}else if(g.opts.missingRefs=="ignore")g.logger.warn(h),s&&(n+=" if (true) { ");else throw new g.MissingRefError(g.baseId,o,h)}else if(d.inline){var b=g.util.copy(g);b.level++;var p="valid"+b.level;b.schema=d.schema,b.schemaPath="",b.errSchemaPath=o;var y=g.validate(b).replace(/validate\.schema/g,d.code);n+=" "+y+" ",s&&(n+=" if ("+p+") { ")}else c=d.$async===!0||g.async&&d.$async!==!1,u=d.code}if(u){var m=m||[];m.push(n),n="",g.opts.passContext?n+=" "+u+".call(this, ":n+=" "+u+"( ",n+=" "+A+", (dataPath || '')",g.errorPath!='""'&&(n+=" + "+g.errorPath);var Z=r?"data"+(r-1||""):"parentData",B=r?g.dataPathArr[r]:"parentDataProperty";n+=" , "+Z+" , "+B+", rootData) ";var G=n;if(n=m.pop(),c){if(!g.async)throw new Error("async schema referenced by sync schema");s&&(n+=" var "+l+"; "),n+=" try { await "+G+"; ",s&&(n+=" "+l+" = true; "),n+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",s&&(n+=" "+l+" = false; "),n+=" } ",s&&(n+=" if ("+l+") { ")}else n+=" if (!"+G+") { if (vErrors === null) vErrors = "+u+".errors; else vErrors = vErrors.concat("+u+".errors); errors = vErrors.length; } ",s&&(n+=" else { ")}return n},Tqt=function(g,I,i){var n=" ",C=g.schema[I],r=g.schemaPath+g.util.getProperty(I),o=g.errSchemaPath+"/"+I,a=!g.opts.allErrors,s=g.util.copy(g),A="";s.level++;var l="valid"+s.level,c=s.baseId,u=!0,d=C;if(d)for(var h,m=-1,f=d.length-1;m0||h===!1:g.util.schemaHasRules(h,g.RULES.all))&&(u=!1,s.schema=h,s.schemaPath=r+"["+m+"]",s.errSchemaPath=o+"/"+m,n+=" "+g.validate(s)+" ",s.baseId=c,a&&(n+=" if ("+l+") { ",A+="}"));return a&&(u?n+=" if (true) { ":n+=" "+A.slice(0,-1)+" "),n},Nqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=o.every(function(v){return g.opts.strictKeywords?typeof v=="object"&&Object.keys(v).length>0||v===!1:g.util.schemaHasRules(v,g.RULES.all)});if(f){var b=d.baseId;n+=" var "+u+" = errors; var "+c+" = false; ";var p=g.compositeRule;g.compositeRule=d.compositeRule=!0;var y=o;if(y)for(var Z,B=-1,G=y.length-1;B0||o===!1:g.util.schemaHasRules(o,g.RULES.all);if(n+="var "+u+" = errors;var "+c+";",Z){var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+m+" = false; for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var G=l+"["+f+"]";d.dataPathArr[b]=f;var v=g.validate(d);d.baseId=y,g.util.varOccurences(v,p)<2?n+=" "+g.util.varReplace(v,p,G)+" ":n+=" var "+p+" = "+G+"; "+v+" ",n+=" if ("+m+") break; } ",g.compositeRule=d.compositeRule=B,n+=" "+h+" if (!"+m+") {"}else n+=" if ("+l+".length == 0) {";var w=w||[];w.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should contain a valid item' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var R=n;return n=w.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+R+"]); ":n+=" validate.errors = ["+R+"]; return false; ":n+=" var err = "+R+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { ",Z&&(n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } "),g.opts.allErrors&&(n+=" } "),n},Fqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m={},f={},b=g.opts.ownProperties;for(B in o)if(B!="__proto__"){var p=o[B],y=Array.isArray(p)?f:m;y[B]=p}n+="var "+c+" = errors;";var Z=g.errorPath;n+="var missing"+C+";";for(var B in f)if(y=f[B],y.length){if(n+=" if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),A){n+=" && ( ";var G=y;if(G)for(var v,w=-1,R=G.length-1;w0||p===!1:g.util.schemaHasRules(p,g.RULES.all))&&(n+=" "+h+" = true; if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),n+=") { ",u.schema=p,u.schemaPath=a+g.util.getProperty(B),u.errSchemaPath=s+"/"+g.util.escapeFragment(B),n+=" "+g.validate(u)+" ",u.baseId=P,n+=" } ",A&&(n+=" if ("+h+") { ",d+="}"))}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},Dqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u=g.opts.$data&&o&&o.$data;u&&(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ");var d="i"+C,h="schema"+C;u||(n+=" var "+h+" = validate.schema"+a+";"),n+="var "+c+";",u&&(n+=" if (schema"+C+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+C+")) "+c+" = false; else {"),n+=""+c+" = false;for (var "+d+"=0; "+d+"<"+h+".length; "+d+"++) if (equal("+l+", "+h+"["+d+"])) { "+c+" = true; break; }",u&&(n+=" } "),n+=" if (!"+c+") { ";var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { allowedValues: schema"+C+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be equal to one of the allowed values' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",A&&(n+=" else { "),n},xqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||"");if(g.opts.format===!1)return A&&(n+=" if (true) { "),n;var c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o;var d=g.opts.unknownFormats,h=Array.isArray(d);if(c){var m="format"+C,f="isObject"+C,b="formatType"+C;n+=" var "+m+" = formats["+u+"]; var "+f+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+b+" = "+f+" && "+m+".type || 'string'; if ("+f+") { ",g.async&&(n+=" var async"+C+" = "+m+".async; "),n+=" "+m+" = "+m+".validate; } if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" (",d!="ignore"&&(n+=" ("+u+" && !"+m+" ",h&&(n+=" && self._opts.unknownFormats.indexOf("+u+") == -1 "),n+=") || "),n+=" ("+m+" && "+b+" == '"+i+"' && !(typeof "+m+" == 'function' ? ",g.async?n+=" (async"+C+" ? await "+m+"("+l+") : "+m+"("+l+")) ":n+=" "+m+"("+l+") ",n+=" : "+m+".test("+l+"))))) {"}else{var m=g.formats[o];if(!m){if(d=="ignore")return g.logger.warn('unknown format "'+o+'" ignored in schema at path "'+g.errSchemaPath+'"'),A&&(n+=" if (true) { "),n;if(h&&d.indexOf(o)>=0)return A&&(n+=" if (true) { "),n;throw new Error('unknown format "'+o+'" is used in schema at path "'+g.errSchemaPath+'"')}var f=typeof m=="object"&&!(m instanceof RegExp)&&m.validate,b=f&&m.type||"string";if(f){var p=m.async===!0;m=m.validate}if(b!=i)return A&&(n+=" if (true) { "),n;if(p){if(!g.async)throw new Error("async format in sync schema");var y="formats"+g.util.getProperty(o)+".validate";n+=" if (!(await "+y+"("+l+"))) { "}else{n+=" if (! ";var y="formats"+g.util.getProperty(o);f&&(y+=".validate"),typeof m=="function"?n+=" "+y+"("+l+") ":n+=" "+y+".test("+l+") ",n+=") { "}}var Z=Z||[];Z.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'format' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { format: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match format "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var B=n;return n=Z.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+B+"]); ":n+=" validate.errors = ["+B+"]; return false; ":n+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},Eqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g);d.level++;var h="valid"+d.level,m=g.schema.then,f=g.schema.else,b=m!==void 0&&(g.opts.strictKeywords?typeof m=="object"&&Object.keys(m).length>0||m===!1:g.util.schemaHasRules(m,g.RULES.all)),p=f!==void 0&&(g.opts.strictKeywords?typeof f=="object"&&Object.keys(f).length>0||f===!1:g.util.schemaHasRules(f,g.RULES.all)),y=d.baseId;if(b||p){var Z;d.createErrors=!1,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+u+" = errors; var "+c+" = true; ";var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,n+=" "+g.validate(d)+" ",d.baseId=y,d.createErrors=!0,n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",g.compositeRule=d.compositeRule=B,b?(n+=" if ("+h+") { ",d.schema=g.schema.then,d.schemaPath=g.schemaPath+".then",d.errSchemaPath=g.errSchemaPath+"/then",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+C,n+=" var "+Z+" = 'then'; "):Z="'then'",n+=" } ",p&&(n+=" else { ")):n+=" if (!"+h+") { ",p&&(d.schema=g.schema.else,d.schemaPath=g.schemaPath+".else",d.errSchemaPath=g.errSchemaPath+"/else",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+C,n+=" var "+Z+" = 'else'; "):Z="'else'",n+=" } "),n+=" if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'if' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { failingKeyword: "+Z+" } ",g.opts.messages!==!1&&(n+=` , message: 'should match "' + `+Z+` + '" schema' `),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},Mqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f="i"+C,b=d.dataLevel=g.dataLevel+1,p="data"+b,y=g.baseId;if(n+="var "+u+" = errors;var "+c+";",Array.isArray(o)){var Z=g.schema.additionalItems;if(Z===!1){n+=" "+c+" = "+l+".length <= "+o.length+"; ";var B=s;s=g.errSchemaPath+"/additionalItems",n+=" if (!"+c+") { ";var G=G||[];G.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+o.length+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have more than "+o.length+" items' "),g.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var v=n;n=G.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+v+"]); ":n+=" validate.errors = ["+v+"]; return false; ":n+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",s=B,A&&(h+="}",n+=" else { ")}var w=o;if(w){for(var R,S=-1,X=w.length-1;S0||R===!1:g.util.schemaHasRules(R,g.RULES.all)){n+=" "+m+" = true; if ("+l+".length > "+S+") { ";var W=l+"["+S+"]";d.schema=R,d.schemaPath=a+"["+S+"]",d.errSchemaPath=s+"/"+S,d.errorPath=g.util.getPathExpr(g.errorPath,S,g.opts.jsonPointers,!0),d.dataPathArr[b]=S;var V=g.validate(d);d.baseId=y,g.util.varOccurences(V,p)<2?n+=" "+g.util.varReplace(V,p,W)+" ":n+=" var "+p+" = "+W+"; "+V+" ",n+=" } ",A&&(n+=" if ("+m+") { ",h+="}")}}if(typeof Z=="object"&&(g.opts.strictKeywords?typeof Z=="object"&&Object.keys(Z).length>0||Z===!1:g.util.schemaHasRules(Z,g.RULES.all))){d.schema=Z,d.schemaPath=g.schemaPath+".additionalItems",d.errSchemaPath=g.errSchemaPath+"/additionalItems",n+=" "+m+" = true; if ("+l+".length > "+o.length+") { for (var "+f+" = "+o.length+"; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var V=g.validate(d);d.baseId=y,g.util.varOccurences(V,p)<2?n+=" "+g.util.varReplace(V,p,W)+" ":n+=" var "+p+" = "+W+"; "+V+" ",A&&(n+=" if (!"+m+") break; "),n+=" } } ",A&&(n+=" if ("+m+") { ",h+="}")}}else if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var V=g.validate(d);d.baseId=y,g.util.varOccurences(V,p)<2?n+=" "+g.util.varReplace(V,p,W)+" ":n+=" var "+p+" = "+W+"; "+V+" ",A&&(n+=" if (!"+m+") break; "),n+=" }"}return A&&(n+=" "+h+" if ("+u+" == errors) {"),n},Qse=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,y,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o;var d=I=="maximum",h=d?"exclusiveMaximum":"exclusiveMinimum",m=g.schema[h],f=g.opts.$data&&m&&m.$data,b=d?"<":">",p=d?">":"<",y=void 0;if(!(c||typeof o=="number"||o===void 0))throw new Error(I+" must be number");if(!(f||m===void 0||typeof m=="number"||typeof m=="boolean"))throw new Error(h+" must be number or boolean");if(f){var Z=g.util.getData(m.$data,r,g.dataPathArr),B="exclusive"+C,G="exclType"+C,v="exclIsNumber"+C,w="op"+C,R="' + "+w+" + '";n+=" var schemaExcl"+C+" = "+Z+"; ",Z="schemaExcl"+C,n+=" var "+B+"; var "+G+" = typeof "+Z+"; if ("+G+" != 'boolean' && "+G+" != 'undefined' && "+G+" != 'number') { ";var y=h,S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: '"+h+" should be boolean' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+G+" == 'number' ? ( ("+B+" = "+u+" === undefined || "+Z+" "+b+"= "+u+") ? "+l+" "+p+"= "+Z+" : "+l+" "+p+" "+u+" ) : ( ("+B+" = "+Z+" === true) ? "+l+" "+p+"= "+u+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { var op"+C+" = "+B+" ? '"+b+"' : '"+b+"='; ",o===void 0&&(y=h,s=g.errSchemaPath+"/"+h,u=Z,c=f)}else{var v=typeof m=="number",R=b;if(v&&c){var w="'"+R+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" ( "+u+" === undefined || "+m+" "+b+"= "+u+" ? "+l+" "+p+"= "+m+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { "}else{v&&o===void 0?(B=!0,y=h,s=g.errSchemaPath+"/"+h,u=m,p+="="):(v&&(u=Math[d?"min":"max"](m,o)),m===(v?u:!0)?(B=!0,y=h,s=g.errSchemaPath+"/"+h,p+="="):(B=!1,R+="="));var w="'"+R+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+" "+p+" "+u+" || "+l+" !== "+l+") { "}}y=y||I;var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_limit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { comparison: "+w+", limit: "+u+", exclusive: "+B+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be "+R+" ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;return n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},jse=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,h,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");var d=I=="maxItems"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+".length "+d+" "+u+") { ";var h=I,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitItems")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",I=="maxItems"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" items' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},$se=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,h,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");var d=I=="maxLength"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),g.opts.unicode===!1?n+=" "+l+".length ":n+=" ucs2length("+l+") ",n+=" "+d+" "+u+") { ";var h=I,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitLength")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be ",I=="maxLength"?n+="longer":n+="shorter",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" characters' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},qse=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,h,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");var d=I=="maxProperties"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" Object.keys("+l+").length "+d+" "+u+") { ";var h=I,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitProperties")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",I=="maxProperties"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" properties' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},zqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o,!(c||typeof o=="number"))throw new Error(I+" must be number");n+="var division"+C+";if (",c&&(n+=" "+u+" !== undefined && ( typeof "+u+" != 'number' || "),n+=" (division"+C+" = "+l+" / "+u+", ",g.opts.multipleOfPrecision?n+=" Math.abs(Math.round(division"+C+") - division"+C+") > 1e-"+g.opts.multipleOfPrecision+" ":n+=" division"+C+" !== parseInt(division"+C+") ",n+=" ) ",c&&(n+=" ) "),n+=" ) { ";var d=d||[];d.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { multipleOf: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be multiple of ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var h=n;return n=d.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+h+"]); ":n+=" validate.errors = ["+h+"]; return false; ":n+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},Pqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g);u.level++;var d="valid"+u.level;if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s,n+=" var "+c+" = errors; ";var h=g.compositeRule;g.compositeRule=u.compositeRule=!0,u.createErrors=!1;var m;u.opts.allErrors&&(m=u.opts.allErrors,u.opts.allErrors=!1),n+=" "+g.validate(u)+" ",u.createErrors=!0,m&&(u.opts.allErrors=m),g.compositeRule=u.compositeRule=h,n+=" if ("+d+") { ";var f=f||[];f.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var b=n;n=f.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+b+"]); ":n+=" validate.errors = ["+b+"]; return false; ":n+=" var err = "+b+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { errors = "+c+"; if (vErrors !== null) { if ("+c+") vErrors.length = "+c+"; else vErrors = null; } ",g.opts.allErrors&&(n+=" } ")}else n+=" var err = ",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",A&&(n+=" if (false) { ");return n},Jqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="valid"+C,u="errs__"+C,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=d.baseId,b="prevValid"+C,p="passingSchemas"+C;n+="var "+u+" = errors , "+b+" = false , "+c+" = false , "+p+" = null; ";var y=g.compositeRule;g.compositeRule=d.compositeRule=!0;var Z=o;if(Z)for(var B,G=-1,v=Z.length-1;G0||B===!1:g.util.schemaHasRules(B,g.RULES.all))?(d.schema=B,d.schemaPath=a+"["+G+"]",d.errSchemaPath=s+"/"+G,n+=" "+g.validate(d)+" ",d.baseId=f):n+=" var "+m+" = true; ",G&&(n+=" if ("+m+" && "+b+") { "+c+" = false; "+p+" = ["+p+", "+G+"]; } else { ",h+="}"),n+=" if ("+m+") { "+c+" = "+b+" = true; "+p+" = "+G+"; }";return g.compositeRule=d.compositeRule=y,n+=""+h+"if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { passingSchemas: "+p+" } ",g.opts.messages!==!1&&(n+=" , message: 'should match exactly one schema in oneOf' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+="} else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; }",g.opts.allErrors&&(n+=" } "),n},Oqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+C+" = "+g.util.getData(o.$data,r,g.dataPathArr)+"; ",u="schema"+C):u=o;var d=c?"(new RegExp("+u+"))":g.usePattern(o);n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" !"+d+".test("+l+") ) { ";var h=h||[];h.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { pattern: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match pattern "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var m=n;return n=h.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},_qt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m="key"+C,f="idx"+C,b=u.dataLevel=g.dataLevel+1,p="data"+b,y="dataProperties"+C,Z=Object.keys(o||{}).filter(x),B=g.schema.patternProperties||{},G=Object.keys(B).filter(x),v=g.schema.additionalProperties,w=Z.length||G.length,R=v===!1,S=typeof v=="object"&&Object.keys(v).length,X=g.opts.removeAdditional,W=R||S||X,V=g.opts.ownProperties,H=g.baseId,Y=g.schema.required;if(Y&&!(g.opts.$data&&Y.$data)&&Y.length8)n+=" || validate.schema"+a+".hasOwnProperty("+m+") ";else{var J=Z;if(J)for(var P,ge=-1,q=J.length-1;ge0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){var gt=g.util.getProperty(P),We=l+gt,lt=Je&&_e.default!==void 0;u.schema=_e,u.schemaPath=a+gt,u.errSchemaPath=s+"/"+g.util.escapeFragment(P),u.errorPath=g.util.getPath(g.errorPath,P,g.opts.jsonPointers),u.dataPathArr[b]=g.util.toQuotedString(P);var Be=g.validate(u);if(u.baseId=H,g.util.varOccurences(Be,p)<2){Be=g.util.varReplace(Be,p,We);var tt=We}else{var tt=p;n+=" var "+p+" = "+We+"; "}if(lt)n+=" "+Be+" ";else{if(K&&K[P]){n+=" if ( "+tt+" === undefined ",V&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = false; ";var ie=g.errorPath,ne=s,Xe=g.util.escapeQuotes(P);g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPath(ie,P,g.opts.jsonPointers)),s=g.errSchemaPath+"/required";var be=be||[];be.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+Xe+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+Xe+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var pe=n;n=be.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+pe+"]); ":n+=" validate.errors = ["+pe+"]; return false; ":n+=" var err = "+pe+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s=ne,g.errorPath=ie,n+=" } else { "}else A?(n+=" if ( "+tt+" === undefined ",V&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = true; } else { "):(n+=" if ("+tt+" !== undefined ",V&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=" ) { ");n+=" "+Be+" } "}}A&&(n+=" if ("+h+") { ",d+="}")}}if(G.length){var ae=G;if(ae)for(var j,ye=-1,He=ae.length-1;ye0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){u.schema=_e,u.schemaPath=g.schemaPath+".patternProperties"+g.util.getProperty(j),u.errSchemaPath=g.errSchemaPath+"/patternProperties/"+g.util.escapeFragment(j),V?n+=" "+y+" = "+y+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+y+".length; "+f+"++) { var "+m+" = "+y+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" if ("+g.usePattern(j)+".test("+m+")) { ",u.errorPath=g.util.getPathExpr(g.errorPath,m,g.opts.jsonPointers);var We=l+"["+m+"]";u.dataPathArr[b]=m;var Be=g.validate(u);u.baseId=H,g.util.varOccurences(Be,p)<2?n+=" "+g.util.varReplace(Be,p,We)+" ":n+=" var "+p+" = "+We+"; "+Be+" ",A&&(n+=" if (!"+h+") break; "),n+=" } ",A&&(n+=" else "+h+" = true; "),n+=" } ",A&&(n+=" if ("+h+") { ",d+="}")}}}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},Lqt=function(g,I,i){var n=" ",C=g.level,r=g.dataLevel,o=g.schema[I],a=g.schemaPath+g.util.getProperty(I),s=g.errSchemaPath+"/"+I,A=!g.opts.allErrors,l="data"+(r||""),c="errs__"+C,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level;if(n+="var "+c+" = errors;",g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s;var m="key"+C,f="idx"+C,b="i"+C,p="' + "+m+" + '",y=u.dataLevel=g.dataLevel+1,Z="data"+y,B="dataProperties"+C,G=g.opts.ownProperties,v=g.baseId;G&&(n+=" var "+B+" = undefined; "),G?n+=" "+B+" = "+B+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+B+".length; "+f+"++) { var "+m+" = "+B+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" var startErrs"+C+" = errors; ";var w=m,R=g.compositeRule;g.compositeRule=u.compositeRule=!0;var S=g.validate(u);u.baseId=v,g.util.varOccurences(S,Z)<2?n+=" "+g.util.varReplace(S,Z,w)+" ":n+=" var "+Z+" = "+w+"; "+S+" ",g.compositeRule=u.compositeRule=R,n+=" if (!"+h+") { for (var "+b+"=startErrs"+C+"; "+b+"0||y===!1:g.util.schemaHasRules(y,g.RULES.all))||(h[h.length]=f)}}else var h=o;if(u||h.length){var Z=g.errorPath,B=u||h.length>=g.opts.loopRequired,G=g.opts.ownProperties;if(A)if(n+=" var missing"+C+"; ",B){u||(n+=" var "+d+" = validate.schema"+a+"; ");var v="i"+C,w="schema"+C+"["+v+"]",R="' + "+w+" + '";g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPathExpr(Z,w,g.opts.jsonPointers)),n+=" var "+c+" = true; ",u&&(n+=" if (schema"+C+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+C+")) "+c+" = false; else {"),n+=" for (var "+v+" = 0; "+v+" < "+d+".length; "+v+"++) { "+c+" = "+l+"["+d+"["+v+"]] !== undefined ",G&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", "+d+"["+v+"]) "),n+="; if (!"+c+") break; } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+R+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+R+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else{n+=" if ( ";var W=h;if(W)for(var V,v=-1,H=W.length-1;v 1) { ";var h=g.schema.items&&g.schema.items.type,m=Array.isArray(h);if(!h||h=="object"||h=="array"||m&&(h.indexOf("object")>=0||h.indexOf("array")>=0))n+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+l+"[i], "+l+"[j])) { "+c+" = false; break outer; } } } ";else{n+=" var itemIndices = {}, item; for (;i--;) { var item = "+l+"[i]; ";var f="checkDataType"+(m?"s":"");n+=" if ("+g.util[f](h,"item",g.opts.strictNumbers,!0)+") continue; ",m&&(n+=` if (typeof item == 'string') item = '"' + item; `),n+=" if (typeof itemIndices[item] == 'number') { "+c+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}n+=" } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var b=b||[];b.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { i: i, j: j } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),g.opts.verbose&&(n+=" , schema: ",u?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var p=n;n=b.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+p+"]); ":n+=" validate.errors = ["+p+"]; return false; ":n+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},jqt={$ref:Hqt,allOf:Tqt,anyOf:Nqt,$comment:kqt,const:Yqt,contains:Kqt,dependencies:Fqt,enum:Dqt,format:xqt,if:Eqt,items:Mqt,maximum:Qse,minimum:Qse,maxItems:jse,minItems:jse,maxLength:$se,minLength:$se,maxProperties:qse,minProperties:qse,multipleOf:zqt,not:Pqt,oneOf:Jqt,pattern:Oqt,properties:_qt,propertyNames:Lqt,required:Uqt,uniqueItems:Qqt,validate:MXe},ele=jqt,Bx=uy.toHash,$qt=function(){var g=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],I=["type","$comment"],i=["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"],n=["number","integer","string","array","object","boolean","null"];return g.all=Bx(I),g.types=Bx(n),g.forEach(function(C){C.rules=C.rules.map(function(r){var o;if(typeof r=="object"){var a=Object.keys(r)[0];o=r[a],r=a,o.forEach(function(A){I.push(A),g.all[A]=!0})}I.push(r);var s=g.all[r]={keyword:r,code:ele[r],implements:o};return s}),g.all.$comment={keyword:"$comment",code:ele.$comment},C.type&&(g.types[C.type]=C)}),g.keywords=Bx(I.concat(i)),g.custom={},g},tle=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"],qqt=function(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function GH(e){return GH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},GH(e)}let c2e=function(e){dtg(I,e);var g=htg(I);function I(i){var n;return stg(this,I),n=g.call(this,i),n.state={code:i.viewConfig,hide:!1,showLog:!1,logMsgs:n.getLogMsgs(i.viewConfig)},n.handleChangeBound=n.handleChange.bind(xl(n)),n.handleKeyDownBound=n.handleKeyDown.bind(xl(n)),n.handleKeyUpBound=n.handleKeyUp.bind(xl(n)),n.handleSubmitBound=n.handleSubmit.bind(xl(n)),n.hideBound=n.hide.bind(xl(n)),n.showBound=n.show.bind(xl(n)),n.toggleLogBound=n.toggleLog.bind(xl(n)),n.pubSubs=[],n.pubSubs.push(n.props.pubSub.subscribe("keydown",n.handleKeyDownBound)),n.pubSubs.push(n.props.pubSub.subscribe("keyup",n.handleKeyUpBound)),n}return ltg(I,[{key:"componentDidMount",value:async function(){this.editor&&(this.editor._input.focus(),this.editor._input.setSelectionRange(0,0),await $Q(0),this.editorWrap&&(this.editorWrap.scrollTop=0))}},{key:"componentWillUnmount",value:function(){this.pubSubs.forEach(n=>this.props.pubSub.unsubscribe(n)),this.pubSubs=[]}},{key:"handleChange",value:function(n){const C=this.getLogMsgs(n);this.setState({code:n,logMsgs:C})}},{key:"handleKeyDown",value:function(n){n.key==="s"&&(n.ctrlKey||n.metaKey)&&(n.preventDefault(),this.props.onChange(this.state.code)),n.key==="Enter"&&(n.ctrlKey||n.metaKey)&&(n.preventDefault(),this.props.onChange(this.state.code),this.props.modal.close())}},{key:"handleKeyUp",value:function(n){this.setState({hide:!1}),n.key==="Escape"&&(n.preventDefault(),this.props.modal.close(),this.props.onCancel())}},{key:"handleSubmit",value:function(n){n&&n.preventDefault(),this.props.onSave(this.state.code)}},{key:"getLogMsgs",value:function(n){const C=[];let r;try{r=JSON.parse(n)}catch(s){return console.warn(s),C.push({type:"Error",msg:s.toString()}),C}const o=new s2e().compile(l2e);return o(r)||(console.warn("Invalid viewconf"),C.push({type:"Warning",msg:"Invalid viewconf"})),o.errors&&(console.warn(JSON.stringify(o.errors,null,2)),o.errors.forEach(s=>{C.push({type:"Warning",msg:JSON.stringify(s,null,2)})})),C.length===0&&C.push({type:"Success",msg:"No error or warnings"}),C}},{key:"hide",value:function(){this.setState({hide:!0})}},{key:"show",value:function(){this.setState({hide:!1})}},{key:"hideLog",value:function(){this.setState({showLog:!1})}},{key:"showLog",value:function(){this.setState({showLog:!0})}},{key:"toggleLog",value:function(){this.state.showLog?this.hideLog():this.showLog()}},{key:"render",value:function(){const n=this.state.logMsgs.map((C,r)=>{const o=`${r}-${C.msg}`;return N.createElement("tr",{key:o},N.createElement("td",{className:Xg(Fu.title,Fu[C.type])},`[${r}] ${C.type}`),N.createElement("td",null,N.createElement("pre",null,C.msg)))});return N.createElement(Bw,{cancelShortcut:"ESC",cancelTitle:"Discard Changes",hide:this.state.hide,maxHeight:!0,okayShortcut:"⌘+Enter",okayTitle:"Save and Close",onCancel:this.props.onCancel,onOkay:this.handleSubmitBound,title:"Edit View Config"},N.createElement(N.Fragment,null,N.createElement("header",{className:Fu["view-config-editor-header"]},N.createElement(Xs,{onBlur:this.showBound,onMouseDown:this.hideBound,onMouseOut:this.showBound,onMouseUp:this.showBound},"Hide While Mousedown"),N.createElement(Xs,{onClick:()=>{this.props.onChange(this.state.code)},shortcut:"⌘+S"},"Save")),N.createElement("div",{ref:C=>{this.editorWrap=C},className:Fu["view-config-editor"]},N.createElement(W6t,{ref:C=>{this.editor=C},highlight:C=>Jse.highlight(C,Jse.languages.json),onValueChange:this.handleChangeBound,padding:10,style:{fontFamily:'"Fira code", "Fira Mono", monospace',fontSize:"inherit"},value:this.state.code})),N.createElement("div",{className:Fu["view-config-log"],style:{height:this.state.showLog?"50%":"30px"}},N.createElement("div",{className:Fu["view-config-log-header"],onClick:()=>this.toggleLogBound()},`Log Messages (${this.state.logMsgs.filter(C=>C.type!=="Success").length})`),N.createElement("div",{className:Fu["view-config-log-msg"],style:{padding:this.state.showLog?"10px":0}},N.createElement("table",null,N.createElement("tbody",null,n))))))}}]),I}(N.Component);c2e.propTypes={modal:L.object.isRequired,onCancel:L.func.isRequired,onChange:L.func.isRequired,onSave:L.func.isRequired,pubSub:L.object.isRequired,viewConfig:L.string.isRequired};const ptg=ty(xk(c2e));function btg(e,g,I,i){const n=e.append("symbol").attr("id",g).attr("viewBox",i);I.forEach(C=>n.append("path").attr("d",C).attr("fill","currentColor"))}const ytg=e=>{e.setState(e.state)},Ztg=function(g,I){const i=g;let n=[];const C=BN(),r=()=>{n.forEach(o=>I.unsubscribe(o)),n=[]};return{destroy:r,publish:C.publish,stack:C.stack,public:{get version(){return y9e},setBroadcastMousePositionGlobally(o=!1){i.setBroadcastMousePositionGlobally(o)},setShowGlobalMousePosition(o=!1){i.setShowGlobalMousePosition(o)},setGlobalMousePosition(o=!1){i.setBroadcastMousePositionGlobally(o),i.setShowGlobalMousePosition(o)},setAuthHeader(o){xB(o),i.reload()},getAuthHeader(){return xB()},getComponent(){return i},reload(o){let a;o?a=o.flatMap(s=>typeof s=="string"?i.iterateOverTracksInView(s):s):a=i.iterateOverTracks();for(const{viewId:s,trackId:A}of a){const l=i.getTrackObject(s,A);for(const c of l.childTracks||[l])c.fetchedTiles&&(c.removeTiles(Object.keys(c.fetchedTiles)),c.fetching.clear(),c.refreshTiles()),c.rerender(c.options,!0)}},destroy(){r(),jI.unmountComponentAtNode(i.topDiv.parentNode)},setRangeSelectionToInt(){i.setState({rangeSelectionToInt:!0})},setRangeSelectionToFloat(){i.setState({rangeSelectionToInt:!1})},setRangeSelection1dSize(o=0,a=1/0){i.setState({rangeSelection1dSize:[o,a]})},setViewConfig(o,a=!1){const s=i.processViewConfig(o);return new Promise(l=>{this.requestsInFlight=0,n.push(I.subscribe("requestSent",()=>{this.requestsInFlight+=1})),n.push(I.subscribe("requestReceived",()=>{this.requestsInFlight-=1,this.requestsInFlight===0&&l()})),i.setState({viewConfig:o,views:s},()=>{a&&l()})})},getViewConfig(){return i.getViewsAsJson()},validateViewConfig(o,{verbose:a=!1}={}){const s=new s2e().compile(l2e),A=s(o);return a&&s.errors&&console.warn(JSON.stringify(s.errors,null,2)),A},getMinMaxValue(o,a,s=!1,A=!1){return i.getMinMaxValue(o,a,s,A)},shareViewConfigAsLink(o){return i.handleExportViewsAsLink(o,!0)},showAvailableTrackPositions(o){i.setState({draggingHappening:o})},hideAvailableTrackPositions(){i.setState({draggingHappening:null})},showTrackChooser(o){i.setState({chooseTrackHandler:(...a)=>{i.setState({chooseTrackHandler:null}),o(...a)}})},hideTrackChooser(){this.setState({chooseTrackHandler:null})},setTrackValueScaleLimits(o,a,s,A){i.setTrackValueScaleLimits(o,a,s,A)},setDarkTheme(o){console.warn('`setDarkTheme(true)` is deprecated. Please use `setTheme("dark")`.');const a=o?"dark":"light";i.setTheme(a)},setTheme(o){console.warn("Please note that theming is still in beta!"),i.setTheme(o)},zoomTo(o,a,s,A,l,c=0){i.zoomTo(o,a,s,A,l,c)},zoomToGene(o,a,s=0,A=0){i.zoomToGene(o,a,s,A)},suggestGene(o,a,s){return i.suggestGene(o,a,s)},zoomToDataExtent(o){i.handleZoomToData(o)},resetViewport(o){i.resetViewport(o)},activateTool(o){switch(o){case"select":i.setMouseTool(zr);break;default:i.setMouseTool(bX);break}},exportAsPngBlobPromise(){return i.createPNGBlobPromise()},exportAsSvg(){return i.createSVGString()},exportAsViewConfString(){return i.getViewsAsString()},getRangeSelection(){return i.rangeSelection},getLocation(o){const a=o?i.xScales[o]&&i.yScales[o]&&o:Object.values(i.tiledPlots)[0]&&Object.values(i.tiledPlots)[0].props.uid;return a?{xDomain:i.xScales[a].domain(),yDomain:i.yScales[a].domain(),xRange:i.xScales[a].range(),yRange:i.yScales[a].range()}:"Please provide a valid view UUID sweetheart 😙"},getTrackObject(o,a){let s=o,A=a;return a||(s=Object.values(i.state.views)[0].uid,A=o),g4(i,s,A)},option(o,a){if(typeof a>"u")return i.props.options[o];switch(o){case"sizeMode":i.props.options[o]=a,ytg(i);break;default:console.warn(`This option "${o}" is either unknown or not settable.`)}},off(o,a,s){const A=typeof a=="object"?a.callback:a;switch(o){case"click":C.unsubscribe("click",A);break;case"cursorLocation":C.unsubscribe("cursorLocation",A);break;case"location":i.offLocationChange(s,a);break;case"mouseMoveZoom":C.unsubscribe("mouseMoveZoom",A);break;case"wheel":C.unsubscribe("wheel",A);break;case"rangeSelection":C.unsubscribe("rangeSelection",A);break;case"viewConfig":i.offViewChange(a);break;case"createSVG":i.offPostCreateSVG();break;case"geneSearch":C.unsubscribe("geneSearch",A);break}},on(o,a,s,A){switch(o){case"click":return C.subscribe("click",a);case"cursorLocation":return C.subscribe("cursorLocation",a);case"location":return i.onLocationChange(s,a,A);case"mouseMoveZoom":return C.subscribe("mouseMoveZoom",a);case"wheel":return C.subscribe("wheel",a);case"rangeSelection":return C.subscribe("rangeSelection",a);case"viewConfig":return i.onViewChange(a);case"createSVG":return i.onPostCreateSVG(a);case"geneSearch":return C.subscribe("geneSearch",a);default:return}}}}},Gtg="_higlass_1uoq8_1",Cf={higlass:Gtg,"higlass-dark-theme":"_higlass-dark-theme_1uoq8_5","higlass-container-overflow":"_higlass-container-overflow_1uoq8_9","higlass-scroll-container-overflow":"_higlass-scroll-container-overflow_1uoq8_10","higlass-scroll-container-scroll":"_higlass-scroll-container-scroll_1uoq8_11","higlass-canvas":"_higlass-canvas_1uoq8_28","higlass-drawing-surface":"_higlass-drawing-surface_1uoq8_34","higlass-svg":"_higlass-svg_1uoq8_38","tiled-area":"_tiled-area_1uoq8_47","track-mouseover-menu":"_track-mouseover-menu_1uoq8_52"};function vtg(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function nle(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vH(e){return vH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},vH(e)}const Cle=12,Htg=12,Ttg=20,Ntg="default",rle="bounded",ole="overflow",vZ="scroll";let dy=function(e){Rtg(I,e);var g=Vtg(I);function I(i){var n;vtg(this,I),n=g.call(this,i),lve(N.version)<15.6&&console.warn("HiGlass requires React v15.6 or higher. Current version: ",N.version),n.pubSub=BN(),n.domEvent=UGe(n.pubSub),n.pubSubs=[],n.minHorizontalHeight=20,n.minVerticalWidth=20,n.resizeSensor=null,n.uid=lg.nice(),n.tiledPlots={},n.genomePositionSearchBoxes={},n.xScales={},n.yScales={},n.projectionXDomains={},n.projectionYDomains={},n.topDiv=null,n.zoomToDataExtentOnInit=new Set,n.viewTrackUidsToCombinedUid={},n.combinedUidToViewTrack={},n.scalesChangedListeners={},n.draggingChangedListeners={},n.valueScalesChangedListeners={},n.zoomLocks={},n.locationLocks={},n.locationLocksAxisWise={x:{},y:{}},n.valueScaleLocks={},n.prevAuthToken=i.options.authToken,n.setCenters={},n.plusImg={},n.configImg={},ot.PIXI=i.options&&i.options.PIXI||Hpe,n.viewMarginTop=+i.options.viewMarginTop>=0?+i.options.viewMarginTop:JZ,n.viewMarginBottom=+i.options.viewMarginBottom>=0?+i.options.viewMarginBottom:JZ,n.viewMarginLeft=+i.options.viewMarginLeft>=0?+i.options.viewMarginLeft:JZ,n.viewMarginRight=+i.options.viewMarginRight>=0?+i.options.viewMarginRight:JZ,n.viewPaddingTop=+i.options.viewPaddingTop>=0?+i.options.viewPaddingTop:OZ,n.viewPaddingBottom=+i.options.viewPaddingBottom>=0?+i.options.viewPaddingBottom:OZ,n.viewPaddingLeft=+i.options.viewPaddingLeft>=0?+i.options.viewPaddingLeft:OZ,n.viewPaddingRight=+i.options.viewPaddingRight>=0?+i.options.viewPaddingRight:OZ,n.genomePositionSearchBox=null,n.viewHeaders={},n.boundRefreshView=()=>{n.refreshView(_Z)},n.unsetOnLocationChange=[],n.setTheme(i.options.theme,i.options.isDarkTheme),n.viewconfLoaded=!1;const{viewConfig:C}=n.props,r=n.loadIfRemoteViewConfig(n.props.viewConfig);i.options.authToken&&xB(i.options.authToken),n.pixiRoot=new ot.PIXI.Container,n.pixiRoot.interactive=!0,n.pixiStage=new ot.PIXI.Container,n.pixiStage.interactive=!0,n.pixiRoot.addChild(n.pixiStage),n.pixiMask=new ot.PIXI.Graphics,n.pixiRoot.addChild(n.pixiMask),n.pixiStage.mask=n.pixiMask,n.element=null,n.scrollTop=0;let o=bX;if(n.props.options)switch(n.props.options.mouseTool){case zr:o=zr;break}n.props.options.pluginTracks&&(window.higlassTracksByType=Object.assign(window.higlassTracksByType||{},n.props.options.pluginTracks));const a={};try{window.higlassTracksByType&&Object.entries(window.higlassTracksByType).forEach(([h,m])=>{a[h]=m})}catch{console.warn("Broken config of a plugin track")}n.props.options.pluginDataFetchers&&(window.higlassDataFetchersByType=Object.assign(window.higlassDataFetchersByType||{},n.props.options.pluginDataFetchers));const s=window.higlassDataFetchersByType,A=n.props.options.pixelPreciseMarginPadding?1:30;n.mounted=!1,n.pluginTracks=a,n.pluginDataFetchers=s,n.state={currentBreakpoint:"lg",width:0,height:0,rowHeight:A,svgElement:null,canvasElement:null,customDialog:null,views:r,viewConfig:C,addTrackPositionMenuPosition:null,typedEditable:void 0,mouseOverOverlayUid:null,mouseTool:o,isDarkTheme:!1,rangeSelection1dSize:[0,1/0],rangeSelectionToInt:!1,modal:null},n.attachedToDOM=!1;const{public:l,destroy:c,publish:u,stack:d}=Ztg(eI(n),n.pubSub);return n.api=l,n.apiDestroy=c,n.apiPublish=u,n.apiStack=d,n.viewChangeListener=[],n.triggerViewChangeDb=MQ(n.triggerViewChange.bind(eI(n)),250),n.pubSubs=[],n.rangeSelection=[null,null],n.prevMouseHoverTrack=null,n.zooming=!1,n.appClickHandlerBound=n.appClickHandler.bind(eI(n)),n.canvasClickHandlerBound=n.canvasClickHandler.bind(eI(n)),n.keyDownHandlerBound=n.keyDownHandler.bind(eI(n)),n.keyUpHandlerBound=n.keyUpHandler.bind(eI(n)),n.resizeHandlerBound=n.resizeHandler.bind(eI(n)),n.resizeHandlerBound=n.resizeHandler.bind(eI(n)),n.dispatchEventBound=n.dispatchEvent.bind(eI(n)),n.animateOnMouseMoveHandlerBound=n.animateOnMouseMoveHandler.bind(eI(n)),n.zoomStartHandlerBound=n.zoomStartHandler.bind(eI(n)),n.zoomEndHandlerBound=n.zoomEndHandler.bind(eI(n)),n.zoomHandlerBound=n.zoomHandler.bind(eI(n)),n.trackDroppedHandlerBound=n.trackDroppedHandler.bind(eI(n)),n.trackDimensionsModifiedHandlerBound=n.trackDimensionsModifiedHandler.bind(eI(n)),n.animateBound=n.animate.bind(eI(n)),n.animateOnGlobalEventBound=n.animateOnGlobalEvent.bind(eI(n)),n.requestReceivedHandlerBound=n.requestReceivedHandler.bind(eI(n)),n.wheelHandlerBound=n.wheelHandler.bind(eI(n)),n.mouseMoveHandlerBound=n.mouseMoveHandler.bind(eI(n)),n.onMouseLeaveHandlerBound=n.onMouseLeaveHandler.bind(eI(n)),n.onBlurHandlerBound=n.onBlurHandler.bind(eI(n)),n.openModalBound=n.openModal.bind(eI(n)),n.closeModalBound=n.closeModal.bind(eI(n)),n.handleEditViewConfigBound=n.handleEditViewConfig.bind(eI(n)),n.onScrollHandlerBound=n.onScrollHandler.bind(eI(n)),n.typedText="",n.typedTextTimeout=null,n.modal={open:n.openModalBound,close:n.closeModalBound},n.setBroadcastMousePositionGlobally(n.props.options.broadcastMousePositionGlobally||n.props.options.globalMousePosition),n.setShowGlobalMousePosition(n.props.options.showGlobalMousePosition||n.props.options.globalMousePosition),n}return Btg(I,[{key:"UNSAFE_componentWillMount",value:function(){this.domEvent.register("keydown",document),this.domEvent.register("keyup",document),this.domEvent.register("scroll",document),this.domEvent.register("resize",window),this.domEvent.register("orientationchange",window),this.domEvent.register("wheel",window),this.domEvent.register("mousedown",window,!0),this.domEvent.register("mouseup",window,!0),this.domEvent.register("click",window,!0),this.domEvent.register("mousemove",window),this.domEvent.register("touchmove",window),this.domEvent.register("touchstart",window),this.domEvent.register("touchend",window),this.domEvent.register("touchcancel",window),this.domEvent.register("blur",window),this.pubSubs.push(this.pubSub.subscribe("app.click",this.appClickHandlerBound),this.pubSub.subscribe("blur",this.onBlurHandlerBound),this.pubSub.subscribe("keydown",this.keyDownHandlerBound),this.pubSub.subscribe("keyup",this.keyUpHandlerBound),this.pubSub.subscribe("resize",this.resizeHandlerBound),this.pubSub.subscribe("wheel",this.wheelHandlerBound),this.pubSub.subscribe("orientationchange",this.resizeHandlerBound),this.pubSub.subscribe("app.event",this.dispatchEventBound),this.pubSub.subscribe("app.animateOnMouseMove",this.animateOnMouseMoveHandlerBound),this.pubSub.subscribe("trackDropped",this.trackDroppedHandlerBound),this.pubSub.subscribe("trackDimensionsModified",this.trackDimensionsModifiedHandlerBound),this.pubSub.subscribe("app.zoomStart",this.zoomStartHandlerBound),this.pubSub.subscribe("app.zoomEnd",this.zoomEndHandlerBound),this.pubSub.subscribe("app.zoom",this.zoomHandlerBound),this.pubSub.subscribe("requestReceived",this.requestReceivedHandlerBound)),this.props.getApi&&this.props.getApi(this.api)}},{key:"sizeMode",get:function(){return typeof this.props.options.sizeMode>"u"?this.props.options.bounded?"bounded":Ntg:this.props.options.sizeMode}},{key:"setBroadcastMousePositionGlobally",value:function(n=!1){this.isBroadcastMousePositionGlobally=n}},{key:"setShowGlobalMousePosition",value:function(n=!1){if(this.isShowGlobalMousePosition=n,this.isShowGlobalMousePosition&&!this.globalMousePositionListener&&(this.globalMousePositionListener=PG.subscribe("higlass.mouseMove",this.animateOnGlobalEventBound),this.pubSubs.push(this.globalMousePositionListener)),this.isShowGlobalMousePosition&&!this.globalMousePositionListener){const C=this.pubSubs.findIndex(r=>r===this.globalMousePositionListener);PG.unsubscribe(this.globalMousePositionListener),C>=0&&this.pubSubs.splice(C,1),this.globalMousePositionListener=void 0}}},{key:"zoomStartHandler",value:function(){this.hideHoverMenu(),this.zooming=!0}},{key:"zoomEndHandler",value:function(){this.zooming=!1}},{key:"zoomHandler",value:function(n){n.sourceEvent&&this.mouseMoveHandler(n.sourceEvent)}},{key:"waitForDOMAttachment",value:function(n){if(!this.mounted)return;const C=jI.findDOMNode(this);document.body.contains(C)?n():requestAnimationFrame(()=>this.waitForDOMAttachment(n))}},{key:"componentDidMount",value:function(){this.mounted=!0,this.element=jI.findDOMNode(this),window.addEventListener("focus",this.boundRefreshView),Object.values(this.state.views).forEach(o=>{this.adjustLayoutToTrackSizes(o),o.layout?o.layout.i=o.uid:o.layout=this.generateViewLayout(o)});const n={width:this.state.width,height:this.state.height,view:this.canvasElement,antialias:!0,transparent:!0,resolution:2,autoResize:!0},C=parseInt(Kfe[0],10);C===4?(console.warn("Deprecation warning: please update Pixi.js to version 5 or above!"),this.props.options.renderer==="canvas"?this.pixiRenderer=new ot.PIXI.CanvasRenderer(n):this.pixiRenderer=new ot.PIXI.WebGLRenderer(n)):(C<4&&console.warn("Deprecation warning: please update Pixi.js to version 5 or above! This version of Pixi.js is unsupported. Good luck 🤞"),this.props.options.renderer==="canvas"?this.pixiRenderer=new ot.PIXI.CanvasRenderer(n):this.pixiRenderer=new ot.PIXI.Renderer(n)),this.fitPixiToParentContainer(),this.setState({svgElement:this.svgElement,canvasElement:this.canvasElement}),this.waitForDOMAttachment(()=>{uX.ElementQueries.listen(),this.resizeSensor=new uX.ResizeSensor(this.element.parentNode,this.updateAfterResize.bind(this)),this.updateAfterResize()}),this.handleDragStart(),this.handleDragStop(),this.animate();const r=hg(this.element).append("svg").style("display","none");Vst.forEach(o=>btg(r,o.id,o.paths,o.viewBox))}},{key:"getTrackObject",value:function(n,C){return this.tiledPlots[n].trackRenderer.getTrackObject(C)}},{key:"getTrackRenderer",value:function(n){return this.tiledPlots[n].trackRenderer}},{key:"loadIfRemoteViewConfig",value:function(n){let C={};return typeof n=="string"?vt.json(n,(r,o)=>{n=o,this.setState({views:this.processViewConfig(JSON.parse(JSON.stringify(o))),viewConfig:o}),this.unsetOnLocationChange.forEach(({viewId:a,callback:s,callbackId:A})=>{this.onLocationChange(a,s,A)})},this.pubSub):(C=this.processViewConfig(JSON.parse(JSON.stringify(n))),this.mounted&&this.setState({viewConfig:n})),C}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){const C=this.loadIfRemoteViewConfig(n.viewConfig);if(n.options.authToken!==this.prevAuthToken){xB(n.options.authToken);for(const r of this.iterateOverViews()){const o=this.getTrackRenderer(r),a=JSON.parse(o.prevTrackDefinitions);o.syncTrackObjects([]),o.syncTrackObjects(a)}this.prevAuthToken=n.options.authToken}for(const r of Eg(C))this.adjustLayoutToTrackSizes(r);this.setState({views:C})}},{key:"UNSAFE_componentWillUpdate",value:function(){this.pixiRenderer.render(this.pixiRoot)}},{key:"componentDidUpdate",value:function(){this.setTheme(this.props.options.theme,this.props.options.isDarkTheme),this.animate(),this.triggerViewChangeDb()}},{key:"componentWillUnmount",value:function(){this.mounted=!1,this.pixiStage.destroy(!1),this.pixiStage=null,this.pixiRenderer.destroy(!0),this.pixiRenderer=null,window.removeEventListener("focus",this.boundRefreshView),this.resizeSensor&&this.resizeSensor.detach(),this.domEvent.unregister("keydown",document),this.domEvent.unregister("keyup",document),this.domEvent.unregister("scroll",document),this.domEvent.unregister("wheel",window),this.domEvent.unregister("mousedown",window),this.domEvent.unregister("mouseup",window),this.domEvent.unregister("click",window),this.domEvent.unregister("mousemove",window),this.domEvent.unregister("touchmove",window),this.domEvent.unregister("touchstart",window),this.domEvent.unregister("touchend",window),this.domEvent.unregister("touchcancel",window),this.pubSubs.forEach(n=>this.pubSub.unsubscribe(n)),this.pubSubs=[],this.apiDestroy()}},{key:"setTheme",value:function(n=this.props.options.theme,C=this.props.options.isDarkTheme){if(typeof C<"u")console.warn("The option `isDarkTheme` is deprecated. Please use `theme` instead."),this.theme=C?"dark":"light";else switch(n){case"dark":this.theme=gI;break;case"light":case void 0:this.theme=ZX;break;default:console.warn(`Unknown theme "${n}". Using light theme.`),this.theme=ZX;break}}},{key:"dispatchEvent",value:function(n){this.canvasElement&&BX(n,this.canvasElement)}},{key:"trackDroppedHandler",value:function(){this.setState({draggingHappening:null})}},{key:"requestReceivedHandler",value:function(){!this.viewconfLoaded&&DB===0&&(this.viewconfLoaded=!0,this.props.options.onViewConfLoaded&&this.props.options.onViewConfLoaded())}},{key:"animateOnMouseMoveHandler",value:function(n){n&&!this.animateOnMouseMove&&this.pubSubs.push(this.pubSub.subscribe("app.mouseMove",this.animateBound)),this.animateOnMouseMove=n}},{key:"fitPixiToParentContainer",value:function(){if(!this.element||!this.element.parentNode){console.warn("No parentNode:",this.element);return}const n=this.element.parentNode.clientWidth,C=this.element.parentNode.clientHeight;this.pixiMask.beginFill(16777215).drawRect(0,0,n,C).endFill(),this.pixiRenderer.resize(n,C),this.pixiRenderer.view.style.width=`${n}px`,this.pixiRenderer.view.style.height=`${C}px`,this.pixiRenderer.render(this.pixiRoot)}},{key:"addDefaultTrackOptions",value:function(n){const C=this.getTrackInfo(n.type);if(!C)return;typeof n.options>"u"&&(n.options={});const r=n.options?n.options:{};if(this.props.options.defaultTrackOptions){if(this.props.options.defaultTrackOptions.trackSpecific&&this.props.options.defaultTrackOptions.trackSpecific[n.type]){const o=this.props.options.defaultTrackOptions.trackSpecific[n.type];for(const a in o)n.options[a]=typeof n.options[a]<"u"?n.options[a]:JSON.parse(JSON.stringify(o[a]))}if(this.props.options.defaultTrackOptions.all){const o=this.props.options.defaultTrackOptions.all;for(const a in o)n.options[a]=typeof n.options[a]<"u"?n.options[a]:JSON.parse(JSON.stringify(o[a]))}}if(C.defaultOptions){const o=C.defaultOptionsByTheme&&C.defaultOptionsByTheme[this.theme]?C.defaultOptionsByTheme[this.theme]:{},a={...C.defaultOptions,...o};if(!n.options)n.options=JSON.parse(JSON.stringify(a));else for(const s in a)n.options[s]=typeof n.options[s]<"u"?n.options[s]:JSON.parse(JSON.stringify(a[s]))}else n.options=r}},{key:"toggleTypedEditable",value:function(){this.setState({typedEditable:!this.isEditable()})}},{key:"typedTextHandler",value:function(n){if(!this.props.options.cheatCodesEnabled)return;this.typedText=this.typedText.concat(n.key),this.typedText.endsWith("hgedit")&&(this.toggleTypedEditable(),this.typedText="");const C=750;this.typedTextTimeout&&clearTimeout(this.typedTextTimeout),this.typedTextTimeout=setTimeout(()=>{this.typedText=""},C)}},{key:"keyDownHandler",value:function(n){this.typedTextHandler(n),this.props.options.rangeSelectionOnAlt&&n.key==="Alt"&&this.setState({mouseTool:zr})}},{key:"keyUpHandler",value:function(n){this.props.options.rangeSelectionOnAlt&&n.key==="Alt"&&this.setState({mouseTool:bX})}},{key:"openModal",value:function(n){this.setState({modal:N.cloneElement(n,{ref:C=>{this.modalRef=C}})})}},{key:"closeModal",value:function(){this.modalRef=null,this.setState({modal:null})}},{key:"handleEditViewConfig",value:function(){const{viewConfig:n}=this.state;this.setState({viewConfigTmp:n}),this.openModal(N.createElement(ptg,{onCancel:()=>{const{viewConfigTmp:C}=this.state,r=this.processViewConfig(C);for(const o of Eg(r))this.adjustLayoutToTrackSizes(o);this.setState({views:r,viewConfig:C,viewConfigTmp:null})},onChange:C=>{const r=JSON.parse(C),o=this.processViewConfig(r);for(const a of Eg(o))this.adjustLayoutToTrackSizes(a);this.setState({views:o,viewConfig:r})},onSave:C=>{const r=JSON.parse(C),o=this.processViewConfig(r);for(const a of Eg(o))this.adjustLayoutToTrackSizes(a);this.setState({views:o,viewConfig:r,viewConfigTmp:null})},viewConfig:this.getViewsAsString()}))}},{key:"animate",value:function(){this.isRequestingAnimationFrame||(this.isRequestingAnimationFrame=!0,requestAnimationFrame(()=>{this.pixiRenderer&&(this.pixiRenderer.render(this.pixiRoot),this.isRequestingAnimationFrame=!1)}))}},{key:"animateOnGlobalEvent",value:function({sourceUid:n}={}){n!==this.uid&&this.animateOnMouseMove&&this.animate()}},{key:"measureSize",value:function(){const[n,C]=qGe(this.element);n>0&&C>0&&this.setState({sizeMeasured:!0,width:n,height:C})}},{key:"updateAfterResize",value:function(){this.measureSize(),this.updateRowHeight(),this.fitPixiToParentContainer(),this.refreshView(_Z),this.resizeHandler()}},{key:"onBreakpointChange",value:function(n){this.setState({currentBreakpoint:n})}},{key:"handleOverlayMouseEnter",value:function(n){this.setState({mouseOverOverlayUid:n})}},{key:"handleOverlayMouseLeave",value:function(){this.setState({mouseOverOverlayUid:null})}},{key:"handleLockLocation",value:function(n){this.setState({chooseViewHandler:C=>this.handleLocationLockChosen(n,C),mouseOverOverlayUid:n})}},{key:"isEditable",value:function(){return this.state.typedEditable!==void 0?this.state.typedEditable:!this.props.options||!("editable"in this.props.options)?this.state.viewConfig.editable:this.props.options.editable&&this.state.viewConfig.editable}},{key:"isTrackMenuDisabled",value:function(){return this.props.options&&(this.props.options.editable===!1||this.props.options.tracksEditable===!1)?!0:this.state.viewConfig&&(this.state.viewConfig.tracksEditable===!1||this.state.viewConfig.editable===!1)}},{key:"isViewHeaderDisabled",value:function(){return this.props.options&&(this.props.options.editable===!1||this.props.options.viewEditable===!1)?!0:this.state.viewConfig&&(this.state.viewConfig.viewEditable===!1||this.state.viewConfig.editable===!1)}},{key:"iterateOverViews",value:function(){const n=[];for(const C in Object.keys(this.state.views))n.push(C);return n}},{key:"iterateOverTracksInView",value:function(n){const C=[],{tracks:r}=this.state.views[n];for(const o in r)for(const a of r[o])if(a.type==="combined"&&a.contents)for(const s of a.contents)C.push({viewId:n,trackId:s.uid,track:s});else C.push({viewId:n,trackId:a.uid,track:a});return C}},{key:"iterateOverTracks",value:function(){const n=[];for(const C in this.state.views){const{tracks:r}=this.state.views[C];for(const o in r)for(const a of r[o])if(a.type==="combined"&&a.contents)for(const s of a.contents)n.push({viewId:C,trackId:s.uid,track:s});else n.push({viewId:C,trackId:a.uid,track:a})}return n}},{key:"setMouseTool",value:function(n){this.setState({mouseTool:n})}},{key:"isValueScaleLocked",value:function(n,C){const r=this.combineViewAndTrackUid(n,C);return this.state.views[n]?!!this.valueScaleLocks[r]:!1}},{key:"getLockGroupExtrema",value:function(n,C){const r=this.combineViewAndTrackUid(n,C);if(!this.state.views[n]||!this.valueScaleLocks[r])return null;const o=this.valueScaleLocks[r],a=Object.values(o).filter(u=>this.tiledPlots[u.view]).map(u=>this.tiledPlots[u.view].trackRenderer.getTrackObject(u.track)).filter(u=>u).map(u=>u.originalTrack===void 0?u:u.originalTrack),s=a.filter(u=>u.minRawValue&&u.maxRawValue).map(u=>o.ignoreOffScreenValues?u.minVisibleValue(!0):u.minVisibleValueInTiles(!0)),A=a.filter(u=>u.minRawValue&&u.maxRawValue).map(u=>o.ignoreOffScreenValues?u.maxVisibleValue(!0):u.maxVisibleValueInTiles(!0));if(s.length===0||s.filter(u=>u===null||u===1/0).length>0||A.length===0||A.filter(u=>u===null||u===-1/0).length>0)return null;const l=Math.min(...s),c=Math.max(...A);return[l,c]}},{key:"syncValueScales",value:function(n,C){const r=this.combineViewAndTrackUid(n,C);if(!this.state.views[n])return;const o=gr(this.state.views[n].tracks,C);if(this.valueScaleLocks[r]){const a=this.valueScaleLocks[r],s=Object.values(a).filter(d=>this.tiledPlots[d.view]).map(d=>this.tiledPlots[d.view].trackRenderer.getTrackObject(d.track)).filter(d=>d).map(d=>d.originalTrack===void 0?d:d.originalTrack),A=this.getLockGroupExtrema(n,C);if(A===null)return;const l=A[0],c=A[1],u=1e-6;for(const d of s){if(d.minValue&&d.minValue(l),d.maxValue&&d.maxValue(c),!d.valueScale)continue;const h=Math.abs(d.minValue()-d.valueScale.domain()[0])>u||Math.abs(d.maxValue()-d.valueScale.domain()[1])>u,m=o.options&&d.options&&typeof o.options.scaleStartPercent<"u"&&typeof o.options.scaleEndPercent<"u"&&(Math.abs(d.options.scaleStartPercent-o.options.scaleStartPercent)>u||Math.abs(d.options.scaleEndPercent-o.options.scaleEndPercent)>u);d.continuousScaling&&!h&&!m||(d.valueScale.domain([l,c]),d.prevValueScale=d.valueScale.copy(),m&&(d.options.scaleStartPercent=o.options.scaleStartPercent,d.options.scaleEndPercent=o.options.scaleEndPercent),d.rerender(d.options,!0))}}}},{key:"handleNewTilesLoaded",value:function(n,C){this.animate()}},{key:"notifyDragChangedListeners",value:function(n){Eg(this.draggingChangedListeners).forEach(C=>{Eg(C).forEach(r=>r(n))})}},{key:"addDraggingChangedListener",value:function(n,C,r){this.draggingChangedListeners.hasOwnProperty(n)||(this.draggingChangedListeners[n]={}),this.draggingChangedListeners[n][C]=r,r(!0),r(!1)}},{key:"removeDraggingChangedListener",value:function(n,C){if(this.draggingChangedListeners.hasOwnProperty(n)){const r=this.draggingChangedListeners[n];r.hasOwnProperty(C)&&(r[C](!1),delete r[C])}}},{key:"addScalesChangedListener",value:function(n,C,r){this.scalesChangedListeners[n]||(this.scalesChangedListeners[n]={}),this.scalesChangedListeners[n][C]=r,!(!this.xScales[n]||!this.yScales[n])&&r(this.xScales[n],this.yScales[n])}},{key:"removeScalesChangedListener",value:function(n,C){if(this.scalesChangedListeners[n]){const r=this.scalesChangedListeners[n];r[C]&&delete r[C]}}},{key:"createSVG",value:function(){const n=document.createElement("svg");n.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.setAttribute("version","1.1");for(const C of Eg(this.tiledPlots))if(C){for(const r of Eg(C.trackRenderer.trackDefObjects))if(r.trackObject.exportSVG){const o=r.trackObject.exportSVG();o&&n.appendChild(o[0])}}return n.setAttribute("width",this.canvasElement.style.width),n.setAttribute("height",this.canvasElement.style.height),this.postCreateSVGCallback?this.postCreateSVGCallback(n):n}},{key:"createSVGString",value:function(){const n=this.createSVG();let C=Eot.xml(new window.XMLSerializer().serializeToString(n));return C=C.replace(/ + */var i=function(I){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,r=0,C={},o={manual:I.Prism&&I.Prism.manual,disableWorkerMessageHandler:I.Prism&&I.Prism.disableWorkerMessageHandler,util:{encode:function b(p){return p instanceof a?new a(p.type,b(p.content),p.alias):Array.isArray(p)?p.map(b):p.replace(/&/g,"&").replace(/"u")return null;if("currentScript"in document&&1<2)return document.currentScript;try{throw new Error}catch(Z){var b=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(Z.stack)||[])[1];if(b){var p=document.getElementsByTagName("script");for(var y in p)if(p[y].src==b)return p[y]}return null}},isActive:function(b,p,y){for(var Z="no-"+p;b;){var B=b.classList;if(B.contains(p))return!0;if(B.contains(Z))return!1;b=b.parentElement}return!!y}},languages:{plain:C,plaintext:C,text:C,txt:C,extend:function(b,p){var y=o.util.clone(o.languages[b]);for(var Z in p)y[Z]=p[Z];return y},insertBefore:function(b,p,y,Z){Z=Z||o.languages;var B=Z[b],G={};for(var v in B)if(B.hasOwnProperty(v)){if(v==p)for(var w in y)y.hasOwnProperty(w)&&(G[w]=y[w]);y.hasOwnProperty(v)||(G[v]=B[v])}var V=Z[b];return Z[b]=G,o.languages.DFS(o.languages,function(S,X){X===V&&S!=b&&(this[S]=G)}),G},DFS:function b(p,y,Z,B){B=B||{};var G=o.util.objId;for(var v in p)if(p.hasOwnProperty(v)){y.call(p,v,p[v],Z||v);var w=p[v],V=o.util.type(w);V==="Object"&&!B[G(w)]?(B[G(w)]=!0,b(w,y,null,B)):V==="Array"&&!B[G(w)]&&(B[G(w)]=!0,b(w,y,v,B))}}},plugins:{},highlightAll:function(b,p){o.highlightAllUnder(document,b,p)},highlightAllUnder:function(b,p,y){var Z={callback:y,container:b,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",Z),Z.elements=Array.prototype.slice.apply(Z.container.querySelectorAll(Z.selector)),o.hooks.run("before-all-elements-highlight",Z);for(var B=0,G;G=Z.elements[B++];)o.highlightElement(G,p===!0,Z.callback)},highlightElement:function(b,p,y){var Z=o.util.getLanguage(b),B=o.languages[Z];o.util.setLanguage(b,Z);var G=b.parentElement;G&&G.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(G,Z);var v=b.textContent,w={element:b,language:Z,grammar:B,code:v};function V(X){w.highlightedCode=X,o.hooks.run("before-insert",w),w.element.innerHTML=w.highlightedCode,o.hooks.run("after-highlight",w),o.hooks.run("complete",w),y&&y.call(w.element)}if(o.hooks.run("before-sanity-check",w),G=w.element.parentElement,G&&G.nodeName.toLowerCase()==="pre"&&!G.hasAttribute("tabindex")&&G.setAttribute("tabindex","0"),!w.code){o.hooks.run("complete",w),y&&y.call(w.element);return}if(o.hooks.run("before-highlight",w),!w.grammar){V(o.util.encode(w.code));return}if(p&&I.Worker){var S=new Worker(o.filename);S.onmessage=function(X){V(X.data)},S.postMessage(JSON.stringify({language:w.language,code:w.code,immediateClose:!0}))}else V(o.highlight(w.code,w.grammar,w.language))},highlight:function(b,p,y){var Z={code:b,grammar:p,language:y};if(o.hooks.run("before-tokenize",Z),!Z.grammar)throw new Error('The language "'+Z.language+'" has no grammar.');return Z.tokens=o.tokenize(Z.code,Z.grammar),o.hooks.run("after-tokenize",Z),a.stringify(o.util.encode(Z.tokens),Z.language)},tokenize:function(b,p){var y=p.rest;if(y){for(var Z in y)p[Z]=y[Z];delete p.rest}var B=new l;return c(B,B.head,b),A(b,B,p,B.head,0),d(B)},hooks:{all:{},add:function(b,p){var y=o.hooks.all;y[b]=y[b]||[],y[b].push(p)},run:function(b,p){var y=o.hooks.all[b];if(!(!y||!y.length))for(var Z=0,B;B=y[Z++];)B(p)}},Token:a};I.Prism=o;function a(b,p,y,Z){this.type=b,this.content=p,this.alias=y,this.length=(Z||"").length|0}a.stringify=function b(p,y){if(typeof p=="string")return p;if(Array.isArray(p)){var Z="";return p.forEach(function(V){Z+=b(V,y)}),Z}var B={type:p.type,content:b(p.content,y),tag:"span",classes:["token",p.type],attributes:{},language:y},G=p.alias;G&&(Array.isArray(G)?Array.prototype.push.apply(B.classes,G):B.classes.push(G)),o.hooks.run("wrap",B);var v="";for(var w in B.attributes)v+=" "+w+'="'+(B.attributes[w]||"").replace(/"/g,""")+'"';return"<"+B.tag+' class="'+B.classes.join(" ")+'"'+v+">"+B.content+""};function s(b,p,y,Z){b.lastIndex=p;var B=b.exec(y);if(B&&Z&&B[1]){var G=B[1].length;B.index+=G,B[0]=B[0].slice(G)}return B}function A(b,p,y,Z,B,G){for(var v in y)if(!(!y.hasOwnProperty(v)||!y[v])){var w=y[v];w=Array.isArray(w)?w:[w];for(var V=0;V=G.reach);J+=D.value.length,D=D.next){var P=D.value;if(p.length>b.length)return;if(!(P instanceof a)){var te=1,q;if(R){if(q=s(K,J,b,W),!q||q.index>=b.length)break;var Q=q.index,$=q.index+q[0].length,j=J;for(j+=D.value.length;Q>=j;)D=D.next,j+=D.value.length;if(j-=D.value.length,J=j,D.value instanceof a)continue;for(var ge=D;ge!==p.tail&&(j<$||typeof ge.value=="string");ge=ge.next)te++,j+=ge.value.length;te--,P=b.slice(J,j),q.index-=J}else if(q=s(K,0,P,W),!q)continue;var Q=q.index,Ie=q[0],he=P.slice(0,Q),ne=P.slice(Q+Ie.length),be=J+P.length;G&&be>G.reach&&(G.reach=be);var pe=D.prev;he&&(pe=c(p,pe,he),J+=he.length),u(p,pe,te);var ve=new a(v,X?o.tokenize(Ie,X):Ie,H,Ie);if(D=c(p,pe,ve),ne&&c(p,D,ne),te>1){var We={cause:v+","+V,reach:be};A(b,p,y,D.prev,J,We),G&&We.reach>G.reach&&(G.reach=We.reach)}}}}}}function l(){var b={value:null,prev:null,next:null},p={value:null,prev:b,next:null};b.next=p,this.head=b,this.tail=p,this.length=0}function c(b,p,y){var Z=p.next,B={value:y,prev:p,next:Z};return p.next=B,Z.prev=B,b.length++,B}function u(b,p,y){for(var Z=p.next,B=0;B1){x[0]=x[0].slice(0,-1);for(var ce=x.length-1,de=1;de= 0x80 (not a basic code point)","invalid-input":"Invalid input"},S=h-m,X=Math.floor,W=String.fromCharCode;function R(O){throw new RangeError(V[O])}function H(O,x){for(var ee=[],ce=O.length;ce--;)ee[ce]=x(O[ce]);return ee}function k(O,x){var ee=O.split("@"),ce="";ee.length>1&&(ce=ee[0]+"@",O=ee[1]),O=O.replace(w,".");var de=O.split("."),Le=H(de,x).join(".");return ce+Le}function K(O){for(var x=[],ee=0,ce=O.length;ee=55296&&de<=56319&&ee>1,x+=X(x/ee);x>S*f>>1;de+=h)x=X(x/S);return X(de+(S+1)*x/(x+b))},q=function(x){var ee=[],ce=x.length,de=0,Le=Z,Ue=y,dt=x.lastIndexOf(B);dt<0&&(dt=0);for(var yt=0;yt=128&&R("not-basic"),ee.push(x.charCodeAt(yt));for(var kt=dt>0?dt+1:0;kt=ce&&R("invalid-input");var At=J(x.charCodeAt(kt++));(At>=h||At>X((d-de)/Rt))&&R("overflow"),de+=At*Rt;var Xt=xt<=Ue?m:xt>=Ue+f?f:xt-Ue;if(AtX(d/Pt)&&R("overflow"),Rt*=Pt}var Ft=ee.length+1;Ue=te(de-ht,Ft,ht==0),X(de/Ft)>d-Le&&R("overflow"),Le+=X(de/Ft),de%=Ft,ee.splice(de++,0,Le)}return String.fromCodePoint.apply(String,ee)},$=function(x){var ee=[];x=K(x);var ce=x.length,de=Z,Le=0,Ue=y,dt=!0,yt=!1,kt=void 0;try{for(var ht=x[Symbol.iterator](),Rt;!(dt=(Rt=ht.next()).done);dt=!0){var xt=Rt.value;xt<128&&ee.push(W(xt))}}catch(pr){yt=!0,kt=pr}finally{try{!dt&&ht.return&&ht.return()}finally{if(yt)throw kt}}var At=ee.length,Xt=At;for(At&&ee.push(B);Xt=de&&LtX((d-Le)/Yt)&&R("overflow"),Le+=(Pt-de)*Yt,de=Pt;var Wt=!0,eg=!1,_t=void 0;try{for(var qt=x[Symbol.iterator](),sg;!(Wt=(sg=qt.next()).done);Wt=!0){var Wg=sg.value;if(Wgd&&R("overflow"),Wg==de){for(var mg=Le,Oi=h;;Oi+=h){var en=Oi<=Ue?m:Oi>=Ue+f?f:Oi-Ue;if(mg>6|192).toString(16).toUpperCase()+"%"+(x&63|128).toString(16).toUpperCase():ee="%"+(x>>12|224).toString(16).toUpperCase()+"%"+(x>>6&63|128).toString(16).toUpperCase()+"%"+(x&63|128).toString(16).toUpperCase(),ee}function ne(O){for(var x="",ee=0,ce=O.length;ee=194&&de<224){if(ce-ee>=6){var Le=parseInt(O.substr(ee+4,2),16);x+=String.fromCharCode((de&31)<<6|Le&63)}else x+=O.substr(ee,6);ee+=6}else if(de>=224){if(ce-ee>=9){var Ue=parseInt(O.substr(ee+4,2),16),dt=parseInt(O.substr(ee+7,2),16);x+=String.fromCharCode((de&15)<<12|(Ue&63)<<6|dt&63)}else x+=O.substr(ee,9);ee+=9}else x+=O.substr(ee,3),ee+=3}return x}function be(O,x){function ee(ce){var de=ne(ce);return de.match(x.UNRESERVED)?de:ce}return O.scheme&&(O.scheme=String(O.scheme).replace(x.PCT_ENCODED,ee).toLowerCase().replace(x.NOT_SCHEME,"")),O.userinfo!==void 0&&(O.userinfo=String(O.userinfo).replace(x.PCT_ENCODED,ee).replace(x.NOT_USERINFO,he).replace(x.PCT_ENCODED,C)),O.host!==void 0&&(O.host=String(O.host).replace(x.PCT_ENCODED,ee).toLowerCase().replace(x.NOT_HOST,he).replace(x.PCT_ENCODED,C)),O.path!==void 0&&(O.path=String(O.path).replace(x.PCT_ENCODED,ee).replace(O.scheme?x.NOT_PATH:x.NOT_PATH_NOSCHEME,he).replace(x.PCT_ENCODED,C)),O.query!==void 0&&(O.query=String(O.query).replace(x.PCT_ENCODED,ee).replace(x.NOT_QUERY,he).replace(x.PCT_ENCODED,C)),O.fragment!==void 0&&(O.fragment=String(O.fragment).replace(x.PCT_ENCODED,ee).replace(x.NOT_FRAGMENT,he).replace(x.PCT_ENCODED,C)),O}function pe(O){return O.replace(/^0*(.*)/,"$1")||"0"}function ve(O,x){var ee=O.match(x.IPV4ADDRESS)||[],ce=c(ee,2),de=ce[1];return de?de.split(".").map(pe).join("."):O}function We(O,x){var ee=O.match(x.IPV6ADDRESS)||[],ce=c(ee,3),de=ce[1],Le=ce[2];if(de){for(var Ue=de.toLowerCase().split("::").reverse(),dt=c(Ue,2),yt=dt[0],kt=dt[1],ht=kt?kt.split(":").map(pe):[],Rt=yt.split(":").map(pe),xt=x.IPV4ADDRESS.test(Rt[Rt.length-1]),At=xt?7:8,Xt=Rt.length-At,Pt=Array(At),Ft=0;Ft1){var Zt=Pt.slice(0,ei.index),Lt=Pt.slice(ei.index+ei.length);it=Zt.join(":")+"::"+Lt.join(":")}else it=Pt.join(":");return Le&&(it+="%"+Le),it}else return O}var Be=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Je="".match(/(){0}/)[1]===void 0;function Pe(O){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee={},ce=x.iri!==!1?l:A;x.reference==="suffix"&&(O=(x.scheme?x.scheme+":":"")+"//"+O);var de=O.match(Be);if(de){Je?(ee.scheme=de[1],ee.userinfo=de[3],ee.host=de[4],ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=de[7],ee.fragment=de[8],isNaN(ee.port)&&(ee.port=de[5])):(ee.scheme=de[1]||void 0,ee.userinfo=O.indexOf("@")!==-1?de[3]:void 0,ee.host=O.indexOf("//")!==-1?de[4]:void 0,ee.port=parseInt(de[5],10),ee.path=de[6]||"",ee.query=O.indexOf("?")!==-1?de[7]:void 0,ee.fragment=O.indexOf("#")!==-1?de[8]:void 0,isNaN(ee.port)&&(ee.port=O.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?de[4]:void 0)),ee.host&&(ee.host=We(ve(ee.host,ce),ce)),ee.scheme===void 0&&ee.userinfo===void 0&&ee.host===void 0&&ee.port===void 0&&!ee.path&&ee.query===void 0?ee.reference="same-document":ee.scheme===void 0?ee.reference="relative":ee.fragment===void 0?ee.reference="absolute":ee.reference="uri",x.reference&&x.reference!=="suffix"&&x.reference!==ee.reference&&(ee.error=ee.error||"URI is not a "+x.reference+" reference.");var Le=Ie[(x.scheme||ee.scheme||"").toLowerCase()];if(!x.unicodeSupport&&(!Le||!Le.unicodeSupport)){if(ee.host&&(x.domainHost||Le&&Le.domainHost))try{ee.host=Q.toASCII(ee.host.replace(ce.PCT_ENCODED,ne).toLowerCase())}catch(Ue){ee.error=ee.error||"Host's domain name can not be converted to ASCII via punycode: "+Ue}be(ee,A)}else be(ee,ce);Le&&Le.parse&&Le.parse(ee,x)}else ee.error=ee.error||"URI can not be parsed.";return ee}function De(O,x){var ee=x.iri!==!1?l:A,ce=[];return O.userinfo!==void 0&&(ce.push(O.userinfo),ce.push("@")),O.host!==void 0&&ce.push(We(ve(String(O.host),ee),ee).replace(ee.IPV6ADDRESS,function(de,Le,Ue){return"["+Le+(Ue?"%25"+Ue:"")+"]"})),(typeof O.port=="number"||typeof O.port=="string")&&(ce.push(":"),ce.push(String(O.port))),ce.length?ce.join(""):void 0}var Qe=/^\.\.?\//,_e=/^\/\.(\/|$)/,gt=/^\/\.\.(\/|$)/,lt=/^\/?(?:.|\n)*?(?=\/|$)/;function tt(O){for(var x=[];O.length;)if(O.match(Qe))O=O.replace(Qe,"");else if(O.match(_e))O=O.replace(_e,"/");else if(O.match(gt))O=O.replace(gt,"/"),x.pop();else if(O==="."||O==="..")O="";else{var ee=O.match(lt);if(ee){var ce=ee[0];O=O.slice(ce.length),x.push(ce)}else throw new Error("Unexpected dot segment condition")}return x.join("")}function Xe(O){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ee=x.iri?l:A,ce=[],de=Ie[(x.scheme||O.scheme||"").toLowerCase()];if(de&&de.serialize&&de.serialize(O,x),O.host&&!ee.IPV6ADDRESS.test(O.host)){if(x.domainHost||de&&de.domainHost)try{O.host=x.iri?Q.toUnicode(O.host):Q.toASCII(O.host.replace(ee.PCT_ENCODED,ne).toLowerCase())}catch(dt){O.error=O.error||"Host's domain name can not be converted to "+(x.iri?"Unicode":"ASCII")+" via punycode: "+dt}}be(O,ee),x.reference!=="suffix"&&O.scheme&&(ce.push(O.scheme),ce.push(":"));var Le=De(O,x);if(Le!==void 0&&(x.reference!=="suffix"&&ce.push("//"),ce.push(Le),O.path&&O.path.charAt(0)!=="/"&&ce.push("/")),O.path!==void 0){var Ue=O.path;!x.absolutePath&&(!de||!de.absolutePath)&&(Ue=tt(Ue)),Le===void 0&&(Ue=Ue.replace(/^\/\//,"/%2F")),ce.push(Ue)}return O.query!==void 0&&(ce.push("?"),ce.push(O.query)),O.fragment!==void 0&&(ce.push("#"),ce.push(O.fragment)),ce.join("")}function ae(O,x){var ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},ce=arguments[3],de={};return ce||(O=Pe(Xe(O,ee),ee),x=Pe(Xe(x,ee),ee)),ee=ee||{},!ee.tolerant&&x.scheme?(de.scheme=x.scheme,de.userinfo=x.userinfo,de.host=x.host,de.port=x.port,de.path=tt(x.path||""),de.query=x.query):(x.userinfo!==void 0||x.host!==void 0||x.port!==void 0?(de.userinfo=x.userinfo,de.host=x.host,de.port=x.port,de.path=tt(x.path||""),de.query=x.query):(x.path?(x.path.charAt(0)==="/"?de.path=tt(x.path):((O.userinfo!==void 0||O.host!==void 0||O.port!==void 0)&&!O.path?de.path="/"+x.path:O.path?de.path=O.path.slice(0,O.path.lastIndexOf("/")+1)+x.path:de.path=x.path,de.path=tt(de.path)),de.query=x.query):(de.path=O.path,x.query!==void 0?de.query=x.query:de.query=O.query),de.userinfo=O.userinfo,de.host=O.host,de.port=O.port),de.scheme=O.scheme),de.fragment=x.fragment,de}function ye(O,x,ee){var ce=a({scheme:"null"},ee);return Xe(ae(Pe(O,ce),Pe(x,ce),ce,!0),ce)}function He(O,x){return typeof O=="string"?O=Xe(Pe(O,x),x):r(O)==="object"&&(O=Pe(Xe(O,x),x)),O}function F(O,x,ee){return typeof O=="string"?O=Xe(Pe(O,ee),ee):r(O)==="object"&&(O=Xe(O,ee)),typeof x=="string"?x=Xe(Pe(x,ee),ee):r(x)==="object"&&(x=Xe(x,ee)),O===x}function T(O,x){return O&&O.toString().replace(!x||!x.iri?A.ESCAPE:l.ESCAPE,he)}function Y(O,x){return O&&O.toString().replace(!x||!x.iri?A.PCT_ENCODED:l.PCT_ENCODED,ne)}var ie={scheme:"http",domainHost:!0,parse:function(x,ee){return x.host||(x.error=x.error||"HTTP URIs must have a host."),x},serialize:function(x,ee){var ce=String(x.scheme).toLowerCase()==="https";return(x.port===(ce?443:80)||x.port==="")&&(x.port=void 0),x.path||(x.path="/"),x}},me={scheme:"https",domainHost:ie.domainHost,parse:ie.parse,serialize:ie.serialize};function Ve(O){return typeof O.secure=="boolean"?O.secure:String(O.scheme).toLowerCase()==="wss"}var we={scheme:"ws",domainHost:!0,parse:function(x,ee){var ce=x;return ce.secure=Ve(ce),ce.resourceName=(ce.path||"/")+(ce.query?"?"+ce.query:""),ce.path=void 0,ce.query=void 0,ce},serialize:function(x,ee){if((x.port===(Ve(x)?443:80)||x.port==="")&&(x.port=void 0),typeof x.secure=="boolean"&&(x.scheme=x.secure?"wss":"ws",x.secure=void 0),x.resourceName){var ce=x.resourceName.split("?"),de=c(ce,2),Le=de[0],Ue=de[1];x.path=Le&&Le!=="/"?Le:void 0,x.query=Ue,x.resourceName=void 0}return x.fragment=void 0,x}},je={scheme:"wss",domainHost:we.domainHost,parse:we.parse,serialize:we.serialize},at={},bt="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",ct="[0-9A-Fa-f]",Ht=n(n("%[EFef]"+ct+"%"+ct+ct+"%"+ct+ct)+"|"+n("%[89A-Fa-f]"+ct+"%"+ct+ct)+"|"+n("%"+ct+ct)),re="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",E="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",_=I(E,'[\\"\\\\]'),fe="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Ke=new RegExp(bt,"g"),ue=new RegExp(Ht,"g"),le=new RegExp(I("[^]",re,"[\\.]",'[\\"]',_),"g"),Ce=new RegExp(I("[^]",bt,fe),"g"),oe=Ce;function Re(O){var x=ne(O);return x.match(Ke)?x:O}var xe={scheme:"mailto",parse:function(x,ee){var ce=x,de=ce.to=ce.path?ce.path.split(","):[];if(ce.path=void 0,ce.query){for(var Le=!1,Ue={},dt=ce.query.split("&"),yt=0,kt=dt.length;yt=55296&&r<=56319&&n=g)throw new Error("Cannot access property/index "+I+" levels up, current level is "+g);return i[g-I]}if(I>g)throw new Error("Cannot access data "+I+" levels up, current level is "+g);if(r="data"+(g-I||""),!n)return r}for(var o=r,a=n.split("/"),s=0;s=0?{index:I,compiling:!0}:(I=this._compilations.length,this._compilations[I]={schema:e,root:g,baseId:i},{index:I,compiling:!1})}function yqt(e,g,i){var I=jXe.call(this,e,g,i);I>=0&&this._compilations.splice(I,1)}function jXe(e,g,i){for(var I=0;I%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,t2e=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,g2e=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,i2e=/^(?:\/(?:[^~/]|~0|~1)*)*$/,I2e=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,n2e=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,Tqt=IY;function IY(e){return e=e=="full"?"full":"fast",wqt.copy(IY[e])}IY.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":e2e,url:t2e,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:qXe,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:o2e,uuid:g2e,"json-pointer":i2e,"json-pointer-uri-fragment":I2e,"relative-json-pointer":n2e};IY.full={date:r2e,time:C2e,"date-time":Yqt,uri:Fqt,"uri-reference":Hqt,"uri-template":e2e,url:t2e,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:qXe,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:o2e,uuid:g2e,"json-pointer":i2e,"json-pointer-uri-fragment":I2e,"relative-json-pointer":n2e};function Nqt(e){return e%4===0&&(e%100!==0||e%400===0)}function r2e(e){var g=e.match(Rqt);if(!g)return!1;var i=+g[1],I=+g[2],n=+g[3];return I>=1&&I<=12&&n>=1&&n<=(I==2&&Nqt(i)?29:Vqt[I])}function C2e(e,g){var i=e.match(Wqt);if(!i)return!1;var I=i[1],n=i[2],r=i[3],C=i[5];return(I<=23&&n<=59&&r<=59||I==23&&n==59&&r==60)&&(!g||C)}var kqt=/t|\s/i;function Yqt(e){var g=e.split(kqt);return g.length==2&&r2e(g[0])&&C2e(g[1],!0)}var Kqt=/\/|:/;function Fqt(e){return Kqt.test(e)&&Xqt.test(e)}var Dqt=/[^\\]\\Z/;function o2e(e){if(Dqt.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}var xqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.errSchemaPath+"/"+i,s=!g.opts.allErrors,A="data"+(C||""),l="valid"+r,c,u;if(o=="#"||o=="#/")g.isRoot?(c=g.async,u="validate"):(c=g.root.schema.$async===!0,u="root.refVal[0]");else{var d=g.resolveRef(g.baseId,o,g.isRoot);if(d===void 0){var h=g.MissingRefError.message(g.baseId,o);if(g.opts.missingRefs=="fail"){g.logger.error(h);var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(a)+" , params: { ref: '"+g.util.escapeQuotes(o)+"' } ",g.opts.messages!==!1&&(n+=" , message: 'can\\'t resolve reference "+g.util.escapeQuotes(o)+"' "),g.opts.verbose&&(n+=" , schema: "+g.util.toQuotedString(o)+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+A+" "),n+=" } "):n+=" {} ";var f=n;n=m.pop(),!g.compositeRule&&s?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s&&(n+=" if (false) { ")}else if(g.opts.missingRefs=="ignore")g.logger.warn(h),s&&(n+=" if (true) { ");else throw new g.MissingRefError(g.baseId,o,h)}else if(d.inline){var b=g.util.copy(g);b.level++;var p="valid"+b.level;b.schema=d.schema,b.schemaPath="",b.errSchemaPath=o;var y=g.validate(b).replace(/validate\.schema/g,d.code);n+=" "+y+" ",s&&(n+=" if ("+p+") { ")}else c=d.$async===!0||g.async&&d.$async!==!1,u=d.code}if(u){var m=m||[];m.push(n),n="",g.opts.passContext?n+=" "+u+".call(this, ":n+=" "+u+"( ",n+=" "+A+", (dataPath || '')",g.errorPath!='""'&&(n+=" + "+g.errorPath);var Z=C?"data"+(C-1||""):"parentData",B=C?g.dataPathArr[C]:"parentDataProperty";n+=" , "+Z+" , "+B+", rootData) ";var G=n;if(n=m.pop(),c){if(!g.async)throw new Error("async schema referenced by sync schema");s&&(n+=" var "+l+"; "),n+=" try { await "+G+"; ",s&&(n+=" "+l+" = true; "),n+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",s&&(n+=" "+l+" = false; "),n+=" } ",s&&(n+=" if ("+l+") { ")}else n+=" if (!"+G+") { if (vErrors === null) vErrors = "+u+".errors; else vErrors = vErrors.concat("+u+".errors); errors = vErrors.length; } ",s&&(n+=" else { ")}return n},Eqt=function(g,i,I){var n=" ",r=g.schema[i],C=g.schemaPath+g.util.getProperty(i),o=g.errSchemaPath+"/"+i,a=!g.opts.allErrors,s=g.util.copy(g),A="";s.level++;var l="valid"+s.level,c=s.baseId,u=!0,d=r;if(d)for(var h,m=-1,f=d.length-1;m0||h===!1:g.util.schemaHasRules(h,g.RULES.all))&&(u=!1,s.schema=h,s.schemaPath=C+"["+m+"]",s.errSchemaPath=o+"/"+m,n+=" "+g.validate(s)+" ",s.baseId=c,a&&(n+=" if ("+l+") { ",A+="}"));return a&&(u?n+=" if (true) { ":n+=" "+A.slice(0,-1)+" "),n},Mqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=o.every(function(v){return g.opts.strictKeywords?typeof v=="object"&&Object.keys(v).length>0||v===!1:g.util.schemaHasRules(v,g.RULES.all)});if(f){var b=d.baseId;n+=" var "+u+" = errors; var "+c+" = false; ";var p=g.compositeRule;g.compositeRule=d.compositeRule=!0;var y=o;if(y)for(var Z,B=-1,G=y.length-1;B0||o===!1:g.util.schemaHasRules(o,g.RULES.all);if(n+="var "+u+" = errors;var "+c+";",Z){var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+m+" = false; for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var G=l+"["+f+"]";d.dataPathArr[b]=f;var v=g.validate(d);d.baseId=y,g.util.varOccurences(v,p)<2?n+=" "+g.util.varReplace(v,p,G)+" ":n+=" var "+p+" = "+G+"; "+v+" ",n+=" if ("+m+") break; } ",g.compositeRule=d.compositeRule=B,n+=" "+h+" if (!"+m+") {"}else n+=" if ("+l+".length == 0) {";var w=w||[];w.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should contain a valid item' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var V=n;return n=w.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+V+"]); ":n+=" validate.errors = ["+V+"]; return false; ":n+=" var err = "+V+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { ",Z&&(n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } "),g.opts.allErrors&&(n+=" } "),n},Oqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m={},f={},b=g.opts.ownProperties;for(B in o)if(B!="__proto__"){var p=o[B],y=Array.isArray(p)?f:m;y[B]=p}n+="var "+c+" = errors;";var Z=g.errorPath;n+="var missing"+r+";";for(var B in f)if(y=f[B],y.length){if(n+=" if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),A){n+=" && ( ";var G=y;if(G)for(var v,w=-1,V=G.length-1;w0||p===!1:g.util.schemaHasRules(p,g.RULES.all))&&(n+=" "+h+" = true; if ( "+l+g.util.getProperty(B)+" !== undefined ",b&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(B)+"') "),n+=") { ",u.schema=p,u.schemaPath=a+g.util.getProperty(B),u.errSchemaPath=s+"/"+g.util.escapeFragment(B),n+=" "+g.validate(u)+" ",u.baseId=P,n+=" } ",A&&(n+=" if ("+h+") { ",d+="}"))}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},_qt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u=g.opts.$data&&o&&o.$data;u&&(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ");var d="i"+r,h="schema"+r;u||(n+=" var "+h+" = validate.schema"+a+";"),n+="var "+c+";",u&&(n+=" if (schema"+r+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+r+")) "+c+" = false; else {"),n+=""+c+" = false;for (var "+d+"=0; "+d+"<"+h+".length; "+d+"++) if (equal("+l+", "+h+"["+d+"])) { "+c+" = true; break; }",u&&(n+=" } "),n+=" if (!"+c+") { ";var m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { allowedValues: schema"+r+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be equal to one of the allowed values' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",A&&(n+=" else { "),n},Lqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||"");if(g.opts.format===!1)return A&&(n+=" if (true) { "),n;var c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o;var d=g.opts.unknownFormats,h=Array.isArray(d);if(c){var m="format"+r,f="isObject"+r,b="formatType"+r;n+=" var "+m+" = formats["+u+"]; var "+f+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+b+" = "+f+" && "+m+".type || 'string'; if ("+f+") { ",g.async&&(n+=" var async"+r+" = "+m+".async; "),n+=" "+m+" = "+m+".validate; } if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" (",d!="ignore"&&(n+=" ("+u+" && !"+m+" ",h&&(n+=" && self._opts.unknownFormats.indexOf("+u+") == -1 "),n+=") || "),n+=" ("+m+" && "+b+" == '"+I+"' && !(typeof "+m+" == 'function' ? ",g.async?n+=" (async"+r+" ? await "+m+"("+l+") : "+m+"("+l+")) ":n+=" "+m+"("+l+") ",n+=" : "+m+".test("+l+"))))) {"}else{var m=g.formats[o];if(!m){if(d=="ignore")return g.logger.warn('unknown format "'+o+'" ignored in schema at path "'+g.errSchemaPath+'"'),A&&(n+=" if (true) { "),n;if(h&&d.indexOf(o)>=0)return A&&(n+=" if (true) { "),n;throw new Error('unknown format "'+o+'" is used in schema at path "'+g.errSchemaPath+'"')}var f=typeof m=="object"&&!(m instanceof RegExp)&&m.validate,b=f&&m.type||"string";if(f){var p=m.async===!0;m=m.validate}if(b!=I)return A&&(n+=" if (true) { "),n;if(p){if(!g.async)throw new Error("async format in sync schema");var y="formats"+g.util.getProperty(o)+".validate";n+=" if (!(await "+y+"("+l+"))) { "}else{n+=" if (! ";var y="formats"+g.util.getProperty(o);f&&(y+=".validate"),typeof m=="function"?n+=" "+y+"("+l+") ":n+=" "+y+".test("+l+") ",n+=") { "}}var Z=Z||[];Z.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'format' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { format: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match format "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var B=n;return n=Z.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+B+"]); ":n+=" validate.errors = ["+B+"]; return false; ":n+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},Uqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g);d.level++;var h="valid"+d.level,m=g.schema.then,f=g.schema.else,b=m!==void 0&&(g.opts.strictKeywords?typeof m=="object"&&Object.keys(m).length>0||m===!1:g.util.schemaHasRules(m,g.RULES.all)),p=f!==void 0&&(g.opts.strictKeywords?typeof f=="object"&&Object.keys(f).length>0||f===!1:g.util.schemaHasRules(f,g.RULES.all)),y=d.baseId;if(b||p){var Z;d.createErrors=!1,d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" var "+u+" = errors; var "+c+" = true; ";var B=g.compositeRule;g.compositeRule=d.compositeRule=!0,n+=" "+g.validate(d)+" ",d.baseId=y,d.createErrors=!0,n+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",g.compositeRule=d.compositeRule=B,b?(n+=" if ("+h+") { ",d.schema=g.schema.then,d.schemaPath=g.schemaPath+".then",d.errSchemaPath=g.errSchemaPath+"/then",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+r,n+=" var "+Z+" = 'then'; "):Z="'then'",n+=" } ",p&&(n+=" else { ")):n+=" if (!"+h+") { ",p&&(d.schema=g.schema.else,d.schemaPath=g.schemaPath+".else",d.errSchemaPath=g.errSchemaPath+"/else",n+=" "+g.validate(d)+" ",d.baseId=y,n+=" "+c+" = "+h+"; ",b&&p?(Z="ifClause"+r,n+=" var "+Z+" = 'else'; "):Z="'else'",n+=" } "),n+=" if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'if' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { failingKeyword: "+Z+" } ",g.opts.messages!==!1&&(n+=` , message: 'should match "' + `+Z+` + '" schema' `),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},Qqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f="i"+r,b=d.dataLevel=g.dataLevel+1,p="data"+b,y=g.baseId;if(n+="var "+u+" = errors;var "+c+";",Array.isArray(o)){var Z=g.schema.additionalItems;if(Z===!1){n+=" "+c+" = "+l+".length <= "+o.length+"; ";var B=s;s=g.errSchemaPath+"/additionalItems",n+=" if (!"+c+") { ";var G=G||[];G.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+o.length+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have more than "+o.length+" items' "),g.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var v=n;n=G.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+v+"]); ":n+=" validate.errors = ["+v+"]; return false; ":n+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",s=B,A&&(h+="}",n+=" else { ")}var w=o;if(w){for(var V,S=-1,X=w.length-1;S0||V===!1:g.util.schemaHasRules(V,g.RULES.all)){n+=" "+m+" = true; if ("+l+".length > "+S+") { ";var W=l+"["+S+"]";d.schema=V,d.schemaPath=a+"["+S+"]",d.errSchemaPath=s+"/"+S,d.errorPath=g.util.getPathExpr(g.errorPath,S,g.opts.jsonPointers,!0),d.dataPathArr[b]=S;var R=g.validate(d);d.baseId=y,g.util.varOccurences(R,p)<2?n+=" "+g.util.varReplace(R,p,W)+" ":n+=" var "+p+" = "+W+"; "+R+" ",n+=" } ",A&&(n+=" if ("+m+") { ",h+="}")}}if(typeof Z=="object"&&(g.opts.strictKeywords?typeof Z=="object"&&Object.keys(Z).length>0||Z===!1:g.util.schemaHasRules(Z,g.RULES.all))){d.schema=Z,d.schemaPath=g.schemaPath+".additionalItems",d.errSchemaPath=g.errSchemaPath+"/additionalItems",n+=" "+m+" = true; if ("+l+".length > "+o.length+") { for (var "+f+" = "+o.length+"; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var R=g.validate(d);d.baseId=y,g.util.varOccurences(R,p)<2?n+=" "+g.util.varReplace(R,p,W)+" ":n+=" var "+p+" = "+W+"; "+R+" ",A&&(n+=" if (!"+m+") break; "),n+=" } } ",A&&(n+=" if ("+m+") { ",h+="}")}}else if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){d.schema=o,d.schemaPath=a,d.errSchemaPath=s,n+=" for (var "+f+" = 0; "+f+" < "+l+".length; "+f+"++) { ",d.errorPath=g.util.getPathExpr(g.errorPath,f,g.opts.jsonPointers,!0);var W=l+"["+f+"]";d.dataPathArr[b]=f;var R=g.validate(d);d.baseId=y,g.util.varOccurences(R,p)<2?n+=" "+g.util.varReplace(R,p,W)+" ":n+=" var "+p+" = "+W+"; "+R+" ",A&&(n+=" if (!"+m+") break; "),n+=" }"}return A&&(n+=" "+h+" if ("+u+" == errors) {"),n},ele=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,y,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o;var d=i=="maximum",h=d?"exclusiveMaximum":"exclusiveMinimum",m=g.schema[h],f=g.opts.$data&&m&&m.$data,b=d?"<":">",p=d?">":"<",y=void 0;if(!(c||typeof o=="number"||o===void 0))throw new Error(i+" must be number");if(!(f||m===void 0||typeof m=="number"||typeof m=="boolean"))throw new Error(h+" must be number or boolean");if(f){var Z=g.util.getData(m.$data,C,g.dataPathArr),B="exclusive"+r,G="exclType"+r,v="exclIsNumber"+r,w="op"+r,V="' + "+w+" + '";n+=" var schemaExcl"+r+" = "+Z+"; ",Z="schemaExcl"+r,n+=" var "+B+"; var "+G+" = typeof "+Z+"; if ("+G+" != 'boolean' && "+G+" != 'undefined' && "+G+" != 'number') { ";var y=h,S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: '"+h+" should be boolean' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+G+" == 'number' ? ( ("+B+" = "+u+" === undefined || "+Z+" "+b+"= "+u+") ? "+l+" "+p+"= "+Z+" : "+l+" "+p+" "+u+" ) : ( ("+B+" = "+Z+" === true) ? "+l+" "+p+"= "+u+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { var op"+r+" = "+B+" ? '"+b+"' : '"+b+"='; ",o===void 0&&(y=h,s=g.errSchemaPath+"/"+h,u=Z,c=f)}else{var v=typeof m=="number",V=b;if(v&&c){var w="'"+V+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" ( "+u+" === undefined || "+m+" "+b+"= "+u+" ? "+l+" "+p+"= "+m+" : "+l+" "+p+" "+u+" ) || "+l+" !== "+l+") { "}else{v&&o===void 0?(B=!0,y=h,s=g.errSchemaPath+"/"+h,u=m,p+="="):(v&&(u=Math[d?"min":"max"](m,o)),m===(v?u:!0)?(B=!0,y=h,s=g.errSchemaPath+"/"+h,p+="="):(B=!1,V+="="));var w="'"+V+"'";n+=" if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+" "+p+" "+u+" || "+l+" !== "+l+") { "}}y=y||i;var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(y||"_limit")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { comparison: "+w+", limit: "+u+", exclusive: "+B+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be "+V+" ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;return n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { "),n},tle=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,h,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");var d=i=="maxItems"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+l+".length "+d+" "+u+") { ";var h=i,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitItems")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",i=="maxItems"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" items' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},gle=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,h,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");var d=i=="maxLength"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),g.opts.unicode===!1?n+=" "+l+".length ":n+=" ucs2length("+l+") ",n+=" "+d+" "+u+") { ";var h=i,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitLength")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be ",i=="maxLength"?n+="longer":n+="shorter",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" characters' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},ile=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,h,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");var d=i=="maxProperties"?">":"<";n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" Object.keys("+l+").length "+d+" "+u+") { ";var h=i,m=m||[];m.push(n),n="",g.createErrors!==!1?(n+=" { keyword: '"+(h||"_limitProperties")+"' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { limit: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have ",i=="maxProperties"?n+="more":n+="fewer",n+=" than ",c?n+="' + "+u+" + '":n+=""+o,n+=" properties' "),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var f=n;return n=m.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+f+"]); ":n+=" validate.errors = ["+f+"]; return false; ":n+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},jqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;if(c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o,!(c||typeof o=="number"))throw new Error(i+" must be number");n+="var division"+r+";if (",c&&(n+=" "+u+" !== undefined && ( typeof "+u+" != 'number' || "),n+=" (division"+r+" = "+l+" / "+u+", ",g.opts.multipleOfPrecision?n+=" Math.abs(Math.round(division"+r+") - division"+r+") > 1e-"+g.opts.multipleOfPrecision+" ":n+=" division"+r+" !== parseInt(division"+r+") ",n+=" ) ",c&&(n+=" ) "),n+=" ) { ";var d=d||[];d.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { multipleOf: "+u+" } ",g.opts.messages!==!1&&(n+=" , message: 'should be multiple of ",c?n+="' + "+u:n+=""+u+"'"),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var h=n;return n=d.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+h+"]); ":n+=" validate.errors = ["+h+"]; return false; ":n+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},$qt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g);u.level++;var d="valid"+u.level;if(g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s,n+=" var "+c+" = errors; ";var h=g.compositeRule;g.compositeRule=u.compositeRule=!0,u.createErrors=!1;var m;u.opts.allErrors&&(m=u.opts.allErrors,u.opts.allErrors=!1),n+=" "+g.validate(u)+" ",u.createErrors=!0,m&&(u.opts.allErrors=m),g.compositeRule=u.compositeRule=h,n+=" if ("+d+") { ";var f=f||[];f.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var b=n;n=f.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+b+"]); ":n+=" validate.errors = ["+b+"]; return false; ":n+=" var err = "+b+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { errors = "+c+"; if (vErrors !== null) { if ("+c+") vErrors.length = "+c+"; else vErrors = null; } ",g.opts.allErrors&&(n+=" } ")}else n+=" var err = ",g.createErrors!==!1?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: {} ",g.opts.messages!==!1&&(n+=" , message: 'should NOT be valid' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",A&&(n+=" if (false) { ");return n},qqt=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="valid"+r,u="errs__"+r,d=g.util.copy(g),h="";d.level++;var m="valid"+d.level,f=d.baseId,b="prevValid"+r,p="passingSchemas"+r;n+="var "+u+" = errors , "+b+" = false , "+c+" = false , "+p+" = null; ";var y=g.compositeRule;g.compositeRule=d.compositeRule=!0;var Z=o;if(Z)for(var B,G=-1,v=Z.length-1;G0||B===!1:g.util.schemaHasRules(B,g.RULES.all))?(d.schema=B,d.schemaPath=a+"["+G+"]",d.errSchemaPath=s+"/"+G,n+=" "+g.validate(d)+" ",d.baseId=f):n+=" var "+m+" = true; ",G&&(n+=" if ("+m+" && "+b+") { "+c+" = false; "+p+" = ["+p+", "+G+"]; } else { ",h+="}"),n+=" if ("+m+") { "+c+" = "+b+" = true; "+p+" = "+G+"; }";return g.compositeRule=d.compositeRule=y,n+=""+h+"if (!"+c+") { var err = ",g.createErrors!==!1?(n+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { passingSchemas: "+p+" } ",g.opts.messages!==!1&&(n+=" , message: 'should match exactly one schema in oneOf' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!g.compositeRule&&A&&(g.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+="} else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; }",g.opts.allErrors&&(n+=" } "),n},eeg=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c=g.opts.$data&&o&&o.$data,u;c?(n+=" var schema"+r+" = "+g.util.getData(o.$data,C,g.dataPathArr)+"; ",u="schema"+r):u=o;var d=c?"(new RegExp("+u+"))":g.usePattern(o);n+="if ( ",c&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'string') || "),n+=" !"+d+".test("+l+") ) { ";var h=h||[];h.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { pattern: ",c?n+=""+u:n+=""+g.util.toQuotedString(o),n+=" } ",g.opts.messages!==!1&&(n+=` , message: 'should match pattern "`,c?n+="' + "+u+" + '":n+=""+g.util.escapeQuotes(o),n+=`"' `),g.opts.verbose&&(n+=" , schema: ",c?n+="validate.schema"+a:n+=""+g.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var m=n;return n=h.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",A&&(n+=" else { "),n},teg=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level,m="key"+r,f="idx"+r,b=u.dataLevel=g.dataLevel+1,p="data"+b,y="dataProperties"+r,Z=Object.keys(o||{}).filter(D),B=g.schema.patternProperties||{},G=Object.keys(B).filter(D),v=g.schema.additionalProperties,w=Z.length||G.length,V=v===!1,S=typeof v=="object"&&Object.keys(v).length,X=g.opts.removeAdditional,W=V||S||X,R=g.opts.ownProperties,H=g.baseId,k=g.schema.required;if(k&&!(g.opts.$data&&k.$data)&&k.length8)n+=" || validate.schema"+a+".hasOwnProperty("+m+") ";else{var J=Z;if(J)for(var P,te=-1,q=J.length-1;te0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){var gt=g.util.getProperty(P),We=l+gt,lt=Je&&_e.default!==void 0;u.schema=_e,u.schemaPath=a+gt,u.errSchemaPath=s+"/"+g.util.escapeFragment(P),u.errorPath=g.util.getPath(g.errorPath,P,g.opts.jsonPointers),u.dataPathArr[b]=g.util.toQuotedString(P);var Be=g.validate(u);if(u.baseId=H,g.util.varOccurences(Be,p)<2){Be=g.util.varReplace(Be,p,We);var tt=We}else{var tt=p;n+=" var "+p+" = "+We+"; "}if(lt)n+=" "+Be+" ";else{if(K&&K[P]){n+=" if ( "+tt+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = false; ";var Ie=g.errorPath,ne=s,Xe=g.util.escapeQuotes(P);g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPath(Ie,P,g.opts.jsonPointers)),s=g.errSchemaPath+"/required";var be=be||[];be.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+Xe+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+Xe+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var pe=n;n=be.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+pe+"]); ":n+=" validate.errors = ["+pe+"]; return false; ":n+=" var err = "+pe+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s=ne,g.errorPath=Ie,n+=" } else { "}else A?(n+=" if ( "+tt+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=") { "+h+" = true; } else { "):(n+=" if ("+tt+" !== undefined ",R&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+g.util.escapeQuotes(P)+"') "),n+=" ) { ");n+=" "+Be+" } "}}A&&(n+=" if ("+h+") { ",d+="}")}}if(G.length){var ae=G;if(ae)for(var j,ye=-1,He=ae.length-1;ye0||_e===!1:g.util.schemaHasRules(_e,g.RULES.all)){u.schema=_e,u.schemaPath=g.schemaPath+".patternProperties"+g.util.getProperty(j),u.errSchemaPath=g.errSchemaPath+"/patternProperties/"+g.util.escapeFragment(j),R?n+=" "+y+" = "+y+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+y+".length; "+f+"++) { var "+m+" = "+y+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" if ("+g.usePattern(j)+".test("+m+")) { ",u.errorPath=g.util.getPathExpr(g.errorPath,m,g.opts.jsonPointers);var We=l+"["+m+"]";u.dataPathArr[b]=m;var Be=g.validate(u);u.baseId=H,g.util.varOccurences(Be,p)<2?n+=" "+g.util.varReplace(Be,p,We)+" ":n+=" var "+p+" = "+We+"; "+Be+" ",A&&(n+=" if (!"+h+") break; "),n+=" } ",A&&(n+=" else "+h+" = true; "),n+=" } ",A&&(n+=" if ("+h+") { ",d+="}")}}}return A&&(n+=" "+d+" if ("+c+" == errors) {"),n},geg=function(g,i,I){var n=" ",r=g.level,C=g.dataLevel,o=g.schema[i],a=g.schemaPath+g.util.getProperty(i),s=g.errSchemaPath+"/"+i,A=!g.opts.allErrors,l="data"+(C||""),c="errs__"+r,u=g.util.copy(g),d="";u.level++;var h="valid"+u.level;if(n+="var "+c+" = errors;",g.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===!1:g.util.schemaHasRules(o,g.RULES.all)){u.schema=o,u.schemaPath=a,u.errSchemaPath=s;var m="key"+r,f="idx"+r,b="i"+r,p="' + "+m+" + '",y=u.dataLevel=g.dataLevel+1,Z="data"+y,B="dataProperties"+r,G=g.opts.ownProperties,v=g.baseId;G&&(n+=" var "+B+" = undefined; "),G?n+=" "+B+" = "+B+" || Object.keys("+l+"); for (var "+f+"=0; "+f+"<"+B+".length; "+f+"++) { var "+m+" = "+B+"["+f+"]; ":n+=" for (var "+m+" in "+l+") { ",n+=" var startErrs"+r+" = errors; ";var w=m,V=g.compositeRule;g.compositeRule=u.compositeRule=!0;var S=g.validate(u);u.baseId=v,g.util.varOccurences(S,Z)<2?n+=" "+g.util.varReplace(S,Z,w)+" ":n+=" var "+Z+" = "+w+"; "+S+" ",g.compositeRule=u.compositeRule=V,n+=" if (!"+h+") { for (var "+b+"=startErrs"+r+"; "+b+"0||y===!1:g.util.schemaHasRules(y,g.RULES.all))||(h[h.length]=f)}}else var h=o;if(u||h.length){var Z=g.errorPath,B=u||h.length>=g.opts.loopRequired,G=g.opts.ownProperties;if(A)if(n+=" var missing"+r+"; ",B){u||(n+=" var "+d+" = validate.schema"+a+"; ");var v="i"+r,w="schema"+r+"["+v+"]",V="' + "+w+" + '";g.opts._errorDataPathProperty&&(g.errorPath=g.util.getPathExpr(Z,w,g.opts.jsonPointers)),n+=" var "+c+" = true; ",u&&(n+=" if (schema"+r+" === undefined) "+c+" = true; else if (!Array.isArray(schema"+r+")) "+c+" = false; else {"),n+=" for (var "+v+" = 0; "+v+" < "+d+".length; "+v+"++) { "+c+" = "+l+"["+d+"["+v+"]] !== undefined ",G&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", "+d+"["+v+"]) "),n+="; if (!"+c+") break; } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var S=S||[];S.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { missingProperty: '"+V+"' } ",g.opts.messages!==!1&&(n+=" , message: '",g.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+V+"\\'",n+="' "),g.opts.verbose&&(n+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var X=n;n=S.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+X+"]); ":n+=" validate.errors = ["+X+"]; return false; ":n+=" var err = "+X+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else{n+=" if ( ";var W=h;if(W)for(var R,v=-1,H=W.length-1;v 1) { ";var h=g.schema.items&&g.schema.items.type,m=Array.isArray(h);if(!h||h=="object"||h=="array"||m&&(h.indexOf("object")>=0||h.indexOf("array")>=0))n+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+l+"[i], "+l+"[j])) { "+c+" = false; break outer; } } } ";else{n+=" var itemIndices = {}, item; for (;i--;) { var item = "+l+"[i]; ";var f="checkDataType"+(m?"s":"");n+=" if ("+g.util[f](h,"item",g.opts.strictNumbers,!0)+") continue; ",m&&(n+=` if (typeof item == 'string') item = '"' + item; `),n+=" if (typeof itemIndices[item] == 'number') { "+c+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}n+=" } ",u&&(n+=" } "),n+=" if (!"+c+") { ";var b=b||[];b.push(n),n="",g.createErrors!==!1?(n+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+g.errorPath+" , schemaPath: "+g.util.toQuotedString(s)+" , params: { i: i, j: j } ",g.opts.messages!==!1&&(n+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),g.opts.verbose&&(n+=" , schema: ",u?n+="validate.schema"+a:n+=""+o,n+=" , parentSchema: validate.schema"+g.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var p=n;n=b.pop(),!g.compositeRule&&A?g.async?n+=" throw new ValidationError(["+p+"]); ":n+=" validate.errors = ["+p+"]; return false; ":n+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",A&&(n+=" else { ")}else A&&(n+=" if (true) { ");return n},neg={$ref:xqt,allOf:Eqt,anyOf:Mqt,$comment:zqt,const:Pqt,contains:Jqt,dependencies:Oqt,enum:_qt,format:Lqt,if:Uqt,items:Qqt,maximum:ele,minimum:ele,maxItems:tle,minItems:tle,maxLength:gle,minLength:gle,maxProperties:ile,minProperties:ile,multipleOf:jqt,not:$qt,oneOf:qqt,pattern:eeg,properties:teg,propertyNames:geg,required:ieg,uniqueItems:Ieg,validate:UXe},Ile=neg,Xx=hy.toHash,reg=function(){var g=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],i=["type","$comment"],I=["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"],n=["number","integer","string","array","object","boolean","null"];return g.all=Xx(i),g.types=Xx(n),g.forEach(function(r){r.rules=r.rules.map(function(C){var o;if(typeof C=="object"){var a=Object.keys(C)[0];o=C[a],C=a,o.forEach(function(A){i.push(A),g.all[A]=!0})}i.push(C);var s=g.all[C]={keyword:C,code:Ile[C],implements:o};return s}),g.all.$comment={keyword:"$comment",code:Ile.$comment},r.type&&(g.types[r.type]=r)}),g.keywords=Xx(i.concat(I)),g.custom={},g},nle=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"],Ceg=function(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function SH(e){return SH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},SH(e)}let b2e=function(e){Gtg(i,e);var g=vtg(i);function i(I){var n;return ptg(this,i),n=g.call(this,I),n.state={code:I.viewConfig,hide:!1,showLog:!1,logMsgs:n.getLogMsgs(I.viewConfig)},n.handleChangeBound=n.handleChange.bind(El(n)),n.handleKeyDownBound=n.handleKeyDown.bind(El(n)),n.handleKeyUpBound=n.handleKeyUp.bind(El(n)),n.handleSubmitBound=n.handleSubmit.bind(El(n)),n.hideBound=n.hide.bind(El(n)),n.showBound=n.show.bind(El(n)),n.toggleLogBound=n.toggleLog.bind(El(n)),n.pubSubs=[],n.pubSubs.push(n.props.pubSub.subscribe("keydown",n.handleKeyDownBound)),n.pubSubs.push(n.props.pubSub.subscribe("keyup",n.handleKeyUpBound)),n}return btg(i,[{key:"componentDidMount",value:async function(){this.editor&&(this.editor._input.focus(),this.editor._input.setSelectionRange(0,0),await I4(0),this.editorWrap&&(this.editorWrap.scrollTop=0))}},{key:"componentWillUnmount",value:function(){this.pubSubs.forEach(n=>this.props.pubSub.unsubscribe(n)),this.pubSubs=[]}},{key:"handleChange",value:function(n){const r=this.getLogMsgs(n);this.setState({code:n,logMsgs:r})}},{key:"handleKeyDown",value:function(n){n.key==="s"&&(n.ctrlKey||n.metaKey)&&(n.preventDefault(),this.props.onChange(this.state.code)),n.key==="Enter"&&(n.ctrlKey||n.metaKey)&&(n.preventDefault(),this.props.onChange(this.state.code),this.props.modal.close())}},{key:"handleKeyUp",value:function(n){this.setState({hide:!1}),n.key==="Escape"&&(n.preventDefault(),this.props.modal.close(),this.props.onCancel())}},{key:"handleSubmit",value:function(n){n&&n.preventDefault(),this.props.onSave(this.state.code)}},{key:"getLogMsgs",value:function(n){const r=[];let C;try{C=JSON.parse(n)}catch(s){return console.warn(s),r.push({type:"Error",msg:s.toString()}),r}const o=new f2e().compile(p2e);return o(C)||(console.warn("Invalid viewconf"),r.push({type:"Warning",msg:"Invalid viewconf"})),o.errors&&(console.warn(JSON.stringify(o.errors,null,2)),o.errors.forEach(s=>{r.push({type:"Warning",msg:JSON.stringify(s,null,2)})})),r.length===0&&r.push({type:"Success",msg:"No error or warnings"}),r}},{key:"hide",value:function(){this.setState({hide:!0})}},{key:"show",value:function(){this.setState({hide:!1})}},{key:"hideLog",value:function(){this.setState({showLog:!1})}},{key:"showLog",value:function(){this.setState({showLog:!0})}},{key:"toggleLog",value:function(){this.state.showLog?this.hideLog():this.showLog()}},{key:"render",value:function(){const n=this.state.logMsgs.map((r,C)=>{const o=`${C}-${r.msg}`;return N.createElement("tr",{key:o},N.createElement("td",{className:Xg(Du.title,Du[r.type])},`[${C}] ${r.type}`),N.createElement("td",null,N.createElement("pre",null,r.msg)))});return N.createElement(ww,{cancelShortcut:"ESC",cancelTitle:"Discard Changes",hide:this.state.hide,maxHeight:!0,okayShortcut:"⌘+Enter",okayTitle:"Save and Close",onCancel:this.props.onCancel,onOkay:this.handleSubmitBound,title:"Edit View Config"},N.createElement(N.Fragment,null,N.createElement("header",{className:Du["view-config-editor-header"]},N.createElement(Hs,{onBlur:this.showBound,onMouseDown:this.hideBound,onMouseOut:this.showBound,onMouseUp:this.showBound},"Hide While Mousedown"),N.createElement(Hs,{onClick:()=>{this.props.onChange(this.state.code)},shortcut:"⌘+S"},"Save")),N.createElement("div",{ref:r=>{this.editorWrap=r},className:Du["view-config-editor"]},N.createElement(F6t,{ref:r=>{this.editor=r},highlight:r=>Use.highlight(r,Use.languages.json),onValueChange:this.handleChangeBound,padding:10,style:{fontFamily:'"Fira code", "Fira Mono", monospace',fontSize:"inherit"},value:this.state.code})),N.createElement("div",{className:Du["view-config-log"],style:{height:this.state.showLog?"50%":"30px"}},N.createElement("div",{className:Du["view-config-log-header"],onClick:()=>this.toggleLogBound()},`Log Messages (${this.state.logMsgs.filter(r=>r.type!=="Success").length})`),N.createElement("div",{className:Du["view-config-log-msg"],style:{padding:this.state.showLog?"10px":0}},N.createElement("table",null,N.createElement("tbody",null,n))))))}}]),i}(N.Component);b2e.propTypes={modal:L.object.isRequired,onCancel:L.func.isRequired,onChange:L.func.isRequired,onSave:L.func.isRequired,pubSub:L.object.isRequired,viewConfig:L.string.isRequired};const wtg=iy(Ok(b2e));function Rtg(e,g,i,I){const n=e.append("symbol").attr("id",g).attr("viewBox",I);i.forEach(r=>n.append("path").attr("d",r).attr("fill","currentColor"))}const Vtg=e=>{e.setState(e.state)},Wtg=function(g,i){const I=g;let n=[];const r=XN(),C=()=>{n.forEach(o=>i.unsubscribe(o)),n=[]};return{destroy:C,publish:r.publish,stack:r.stack,public:{get version(){return R9e},setBroadcastMousePositionGlobally(o=!1){I.setBroadcastMousePositionGlobally(o)},setShowGlobalMousePosition(o=!1){I.setShowGlobalMousePosition(o)},setGlobalMousePosition(o=!1){I.setBroadcastMousePositionGlobally(o),I.setShowGlobalMousePosition(o)},setAuthHeader(o){MB(o),I.reload()},getAuthHeader(){return MB()},getComponent(){return I},reload(o){let a;o?a=o.flatMap(s=>typeof s=="string"?I.iterateOverTracksInView(s):s):a=I.iterateOverTracks();for(const{viewId:s,trackId:A}of a){const l=I.getTrackObject(s,A);for(const c of l.childTracks||[l])c.fetchedTiles&&(c.removeTiles(Object.keys(c.fetchedTiles)),c.fetching.clear(),c.refreshTiles()),c.rerender(c.options,!0)}},destroy(){C(),qi.unmountComponentAtNode(I.topDiv.parentNode)},setRangeSelectionToInt(){I.setState({rangeSelectionToInt:!0})},setRangeSelectionToFloat(){I.setState({rangeSelectionToInt:!1})},setRangeSelection1dSize(o=0,a=1/0){I.setState({rangeSelection1dSize:[o,a]})},setViewConfig(o,a=!1){const s=I.processViewConfig(o);return new Promise(l=>{this.requestsInFlight=0,n.push(i.subscribe("requestSent",()=>{this.requestsInFlight+=1})),n.push(i.subscribe("requestReceived",()=>{this.requestsInFlight-=1,this.requestsInFlight===0&&l()})),I.setState({viewConfig:o,views:s},()=>{a&&l()})})},getViewConfig(){return I.getViewsAsJson()},validateViewConfig(o,{verbose:a=!1}={}){const s=new f2e().compile(p2e),A=s(o);return a&&s.errors&&console.warn(JSON.stringify(s.errors,null,2)),A},getMinMaxValue(o,a,s=!1,A=!1){return I.getMinMaxValue(o,a,s,A)},shareViewConfigAsLink(o){return I.handleExportViewsAsLink(o,!0)},showAvailableTrackPositions(o){I.setState({draggingHappening:o})},hideAvailableTrackPositions(){I.setState({draggingHappening:null})},showTrackChooser(o){I.setState({chooseTrackHandler:(...a)=>{I.setState({chooseTrackHandler:null}),o(...a)}})},hideTrackChooser(){this.setState({chooseTrackHandler:null})},setTrackValueScaleLimits(o,a,s,A){I.setTrackValueScaleLimits(o,a,s,A)},setDarkTheme(o){console.warn('`setDarkTheme(true)` is deprecated. Please use `setTheme("dark")`.');const a=o?"dark":"light";I.setTheme(a)},setTheme(o){console.warn("Please note that theming is still in beta!"),I.setTheme(o)},zoomTo(o,a,s,A,l,c=0){I.zoomTo(o,a,s,A,l,c)},zoomToGene(o,a,s=0,A=0){I.zoomToGene(o,a,s,A)},suggestGene(o,a,s){return I.suggestGene(o,a,s)},zoomToDataExtent(o){I.handleZoomToData(o)},resetViewport(o){I.resetViewport(o)},activateTool(o){switch(o){case"select":I.setMouseTool(JC);break;default:I.setMouseTool(GX);break}},exportAsPngBlobPromise(){return I.createPNGBlobPromise()},exportAsSvg(){return I.createSVGString()},exportAsViewConfString(){return I.getViewsAsString()},getRangeSelection(){return I.rangeSelection},getLocation(o){const a=o?I.xScales[o]&&I.yScales[o]&&o:Object.values(I.tiledPlots)[0]&&Object.values(I.tiledPlots)[0].props.uid;return a?{xDomain:I.xScales[a].domain(),yDomain:I.yScales[a].domain(),xRange:I.xScales[a].range(),yRange:I.yScales[a].range()}:"Please provide a valid view UUID sweetheart 😙"},getTrackObject(o,a){let s=o,A=a;return a||(s=Object.values(I.state.views)[0].uid,A=o),o4(I,s,A)},option(o,a){if(typeof a>"u")return I.props.options[o];switch(o){case"sizeMode":I.props.options[o]=a,Vtg(I);break;default:console.warn(`This option "${o}" is either unknown or not settable.`)}},off(o,a,s){const A=typeof a=="object"?a.callback:a;switch(o){case"click":r.unsubscribe("click",A);break;case"cursorLocation":r.unsubscribe("cursorLocation",A);break;case"location":I.offLocationChange(s,a);break;case"mouseMoveZoom":r.unsubscribe("mouseMoveZoom",A);break;case"wheel":r.unsubscribe("wheel",A);break;case"rangeSelection":r.unsubscribe("rangeSelection",A);break;case"viewConfig":I.offViewChange(a);break;case"createSVG":I.offPostCreateSVG();break;case"geneSearch":r.unsubscribe("geneSearch",A);break}},on(o,a,s,A){switch(o){case"click":return r.subscribe("click",a);case"cursorLocation":return r.subscribe("cursorLocation",a);case"location":return I.onLocationChange(s,a,A);case"mouseMoveZoom":return r.subscribe("mouseMoveZoom",a);case"wheel":return r.subscribe("wheel",a);case"rangeSelection":return r.subscribe("rangeSelection",a);case"viewConfig":return I.onViewChange(a);case"createSVG":return I.onPostCreateSVG(a);case"geneSearch":return r.subscribe("geneSearch",a);default:return}}}}},Xtg="_higlass_1uoq8_1",Cf={higlass:Xtg,"higlass-dark-theme":"_higlass-dark-theme_1uoq8_5","higlass-container-overflow":"_higlass-container-overflow_1uoq8_9","higlass-scroll-container-overflow":"_higlass-scroll-container-overflow_1uoq8_10","higlass-scroll-container-scroll":"_higlass-scroll-container-scroll_1uoq8_11","higlass-canvas":"_higlass-canvas_1uoq8_28","higlass-drawing-surface":"_higlass-drawing-surface_1uoq8_34","higlass-svg":"_higlass-svg_1uoq8_38","tiled-area":"_tiled-area_1uoq8_47","track-mouseover-menu":"_track-mouseover-menu_1uoq8_52"};function Htg(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function ale(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function wH(e){return wH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},wH(e)}const Ale=12,xtg=12,Etg=20,Mtg="default",sle="bounded",lle="overflow",SZ="scroll";let my=function(e){Ytg(i,e);var g=Ktg(i);function i(I){var n;Htg(this,i),n=g.call(this,I),pve(N.version)<15.6&&console.warn("HiGlass requires React v15.6 or higher. Current version: ",N.version),n.pubSub=XN(),n.domEvent=gve(n.pubSub),n.pubSubs=[],n.minHorizontalHeight=20,n.minVerticalWidth=20,n.resizeSensor=null,n.uid=cg.nice(),n.tiledPlots={},n.genomePositionSearchBoxes={},n.xScales={},n.yScales={},n.projectionXDomains={},n.projectionYDomains={},n.topDiv=null,n.zoomToDataExtentOnInit=new Set,n.viewTrackUidsToCombinedUid={},n.combinedUidToViewTrack={},n.scalesChangedListeners={},n.draggingChangedListeners={},n.valueScalesChangedListeners={},n.zoomLocks={},n.locationLocks={},n.locationLocksAxisWise={x:{},y:{}},n.valueScaleLocks={},n.prevAuthToken=I.options.authToken,n.setCenters={},n.plusImg={},n.configImg={},ot.PIXI=I.options&&I.options.PIXI||Dpe,n.viewMarginTop=+I.options.viewMarginTop>=0?+I.options.viewMarginTop:LZ,n.viewMarginBottom=+I.options.viewMarginBottom>=0?+I.options.viewMarginBottom:LZ,n.viewMarginLeft=+I.options.viewMarginLeft>=0?+I.options.viewMarginLeft:LZ,n.viewMarginRight=+I.options.viewMarginRight>=0?+I.options.viewMarginRight:LZ,n.viewPaddingTop=+I.options.viewPaddingTop>=0?+I.options.viewPaddingTop:UZ,n.viewPaddingBottom=+I.options.viewPaddingBottom>=0?+I.options.viewPaddingBottom:UZ,n.viewPaddingLeft=+I.options.viewPaddingLeft>=0?+I.options.viewPaddingLeft:UZ,n.viewPaddingRight=+I.options.viewPaddingRight>=0?+I.options.viewPaddingRight:UZ,n.genomePositionSearchBox=null,n.viewHeaders={},n.boundRefreshView=()=>{n.refreshView(QZ)},n.unsetOnLocationChange=[],n.setTheme(I.options.theme,I.options.isDarkTheme),n.viewconfLoaded=!1;const{viewConfig:r}=n.props,C=n.loadIfRemoteViewConfig(n.props.viewConfig);I.options.authToken&&MB(I.options.authToken),n.pixiRoot=new ot.PIXI.Container,n.pixiRoot.interactive=!0,n.pixiStage=new ot.PIXI.Container,n.pixiStage.interactive=!0,n.pixiRoot.addChild(n.pixiStage),n.pixiMask=new ot.PIXI.Graphics,n.pixiRoot.addChild(n.pixiMask),n.pixiStage.mask=n.pixiMask,n.element=null,n.scrollTop=0;let o=GX;if(n.props.options)switch(n.props.options.mouseTool){case JC:o=JC;break}n.props.options.pluginTracks&&(window.higlassTracksByType=Object.assign(window.higlassTracksByType||{},n.props.options.pluginTracks));const a={};try{window.higlassTracksByType&&Object.entries(window.higlassTracksByType).forEach(([h,m])=>{a[h]=m})}catch{console.warn("Broken config of a plugin track")}n.props.options.pluginDataFetchers&&(window.higlassDataFetchersByType=Object.assign(window.higlassDataFetchersByType||{},n.props.options.pluginDataFetchers));const s=window.higlassDataFetchersByType,A=n.props.options.pixelPreciseMarginPadding?1:30;n.mounted=!1,n.pluginTracks=a,n.pluginDataFetchers=s,n.state={currentBreakpoint:"lg",width:0,height:0,rowHeight:A,svgElement:null,canvasElement:null,customDialog:null,views:C,viewConfig:r,addTrackPositionMenuPosition:null,typedEditable:void 0,mouseOverOverlayUid:null,mouseTool:o,isDarkTheme:!1,rangeSelection1dSize:[0,1/0],rangeSelectionToInt:!1,modal:null},n.attachedToDOM=!1;const{public:l,destroy:c,publish:u,stack:d}=Wtg(ti(n),n.pubSub);return n.api=l,n.apiDestroy=c,n.apiPublish=u,n.apiStack=d,n.viewChangeListener=[],n.triggerViewChangeDb=LQ(n.triggerViewChange.bind(ti(n)),250),n.pubSubs=[],n.rangeSelection=[null,null],n.prevMouseHoverTrack=null,n.zooming=!1,n.appClickHandlerBound=n.appClickHandler.bind(ti(n)),n.canvasClickHandlerBound=n.canvasClickHandler.bind(ti(n)),n.keyDownHandlerBound=n.keyDownHandler.bind(ti(n)),n.keyUpHandlerBound=n.keyUpHandler.bind(ti(n)),n.resizeHandlerBound=n.resizeHandler.bind(ti(n)),n.resizeHandlerBound=n.resizeHandler.bind(ti(n)),n.dispatchEventBound=n.dispatchEvent.bind(ti(n)),n.animateOnMouseMoveHandlerBound=n.animateOnMouseMoveHandler.bind(ti(n)),n.zoomStartHandlerBound=n.zoomStartHandler.bind(ti(n)),n.zoomEndHandlerBound=n.zoomEndHandler.bind(ti(n)),n.zoomHandlerBound=n.zoomHandler.bind(ti(n)),n.trackDroppedHandlerBound=n.trackDroppedHandler.bind(ti(n)),n.trackDimensionsModifiedHandlerBound=n.trackDimensionsModifiedHandler.bind(ti(n)),n.animateBound=n.animate.bind(ti(n)),n.animateOnGlobalEventBound=n.animateOnGlobalEvent.bind(ti(n)),n.requestReceivedHandlerBound=n.requestReceivedHandler.bind(ti(n)),n.wheelHandlerBound=n.wheelHandler.bind(ti(n)),n.mouseMoveHandlerBound=n.mouseMoveHandler.bind(ti(n)),n.onMouseLeaveHandlerBound=n.onMouseLeaveHandler.bind(ti(n)),n.onBlurHandlerBound=n.onBlurHandler.bind(ti(n)),n.openModalBound=n.openModal.bind(ti(n)),n.closeModalBound=n.closeModal.bind(ti(n)),n.handleEditViewConfigBound=n.handleEditViewConfig.bind(ti(n)),n.onScrollHandlerBound=n.onScrollHandler.bind(ti(n)),n.typedText="",n.typedTextTimeout=null,n.modal={open:n.openModalBound,close:n.closeModalBound},n.setBroadcastMousePositionGlobally(n.props.options.broadcastMousePositionGlobally||n.props.options.globalMousePosition),n.setShowGlobalMousePosition(n.props.options.showGlobalMousePosition||n.props.options.globalMousePosition),n}return Ttg(i,[{key:"UNSAFE_componentWillMount",value:function(){this.domEvent.register("keydown",document),this.domEvent.register("keyup",document),this.domEvent.register("scroll",document),this.domEvent.register("resize",window),this.domEvent.register("orientationchange",window),this.domEvent.register("wheel",window),this.domEvent.register("mousedown",window,!0),this.domEvent.register("mouseup",window,!0),this.domEvent.register("click",window,!0),this.domEvent.register("mousemove",window),this.domEvent.register("touchmove",window),this.domEvent.register("touchstart",window),this.domEvent.register("touchend",window),this.domEvent.register("touchcancel",window),this.domEvent.register("blur",window),this.pubSubs.push(this.pubSub.subscribe("app.click",this.appClickHandlerBound),this.pubSub.subscribe("blur",this.onBlurHandlerBound),this.pubSub.subscribe("keydown",this.keyDownHandlerBound),this.pubSub.subscribe("keyup",this.keyUpHandlerBound),this.pubSub.subscribe("resize",this.resizeHandlerBound),this.pubSub.subscribe("wheel",this.wheelHandlerBound),this.pubSub.subscribe("orientationchange",this.resizeHandlerBound),this.pubSub.subscribe("app.event",this.dispatchEventBound),this.pubSub.subscribe("app.animateOnMouseMove",this.animateOnMouseMoveHandlerBound),this.pubSub.subscribe("trackDropped",this.trackDroppedHandlerBound),this.pubSub.subscribe("trackDimensionsModified",this.trackDimensionsModifiedHandlerBound),this.pubSub.subscribe("app.zoomStart",this.zoomStartHandlerBound),this.pubSub.subscribe("app.zoomEnd",this.zoomEndHandlerBound),this.pubSub.subscribe("app.zoom",this.zoomHandlerBound),this.pubSub.subscribe("requestReceived",this.requestReceivedHandlerBound)),this.props.getApi&&this.props.getApi(this.api)}},{key:"sizeMode",get:function(){return typeof this.props.options.sizeMode>"u"?this.props.options.bounded?"bounded":Mtg:this.props.options.sizeMode}},{key:"setBroadcastMousePositionGlobally",value:function(n=!1){this.isBroadcastMousePositionGlobally=n}},{key:"setShowGlobalMousePosition",value:function(n=!1){if(this.isShowGlobalMousePosition=n,this.isShowGlobalMousePosition&&!this.globalMousePositionListener&&(this.globalMousePositionListener=_G.subscribe("higlass.mouseMove",this.animateOnGlobalEventBound),this.pubSubs.push(this.globalMousePositionListener)),this.isShowGlobalMousePosition&&!this.globalMousePositionListener){const r=this.pubSubs.findIndex(C=>C===this.globalMousePositionListener);_G.unsubscribe(this.globalMousePositionListener),r>=0&&this.pubSubs.splice(r,1),this.globalMousePositionListener=void 0}}},{key:"zoomStartHandler",value:function(){this.hideHoverMenu(),this.zooming=!0}},{key:"zoomEndHandler",value:function(){this.zooming=!1}},{key:"zoomHandler",value:function(n){n.sourceEvent&&this.mouseMoveHandler(n.sourceEvent)}},{key:"waitForDOMAttachment",value:function(n){if(!this.mounted)return;const r=qi.findDOMNode(this);document.body.contains(r)?n():requestAnimationFrame(()=>this.waitForDOMAttachment(n))}},{key:"componentDidMount",value:function(){this.mounted=!0,this.element=qi.findDOMNode(this),window.addEventListener("focus",this.boundRefreshView),Object.values(this.state.views).forEach(o=>{this.adjustLayoutToTrackSizes(o),o.layout?o.layout.i=o.uid:o.layout=this.generateViewLayout(o)});const n={width:this.state.width,height:this.state.height,view:this.canvasElement,antialias:!0,transparent:!0,resolution:2,autoResize:!0},r=parseInt(Pfe[0],10);r===4?(console.warn("Deprecation warning: please update Pixi.js to version 5 or above!"),this.props.options.renderer==="canvas"?this.pixiRenderer=new ot.PIXI.CanvasRenderer(n):this.pixiRenderer=new ot.PIXI.WebGLRenderer(n)):(r<4&&console.warn("Deprecation warning: please update Pixi.js to version 5 or above! This version of Pixi.js is unsupported. Good luck 🤞"),this.props.options.renderer==="canvas"?this.pixiRenderer=new ot.PIXI.CanvasRenderer(n):this.pixiRenderer=new ot.PIXI.Renderer(n)),this.fitPixiToParentContainer(),this.setState({svgElement:this.svgElement,canvasElement:this.canvasElement}),this.waitForDOMAttachment(()=>{mX.ElementQueries.listen(),this.resizeSensor=new mX.ResizeSensor(this.element.parentNode,this.updateAfterResize.bind(this)),this.updateAfterResize()}),this.handleDragStart(),this.handleDragStop(),this.animate();const C=hg(this.element).append("svg").style("display","none");Kst.forEach(o=>Rtg(C,o.id,o.paths,o.viewBox))}},{key:"getTrackObject",value:function(n,r){return this.tiledPlots[n].trackRenderer.getTrackObject(r)}},{key:"getTrackRenderer",value:function(n){return this.tiledPlots[n].trackRenderer}},{key:"loadIfRemoteViewConfig",value:function(n){let r={};return typeof n=="string"?vt.json(n,(C,o)=>{n=o,this.setState({views:this.processViewConfig(JSON.parse(JSON.stringify(o))),viewConfig:o}),this.unsetOnLocationChange.forEach(({viewId:a,callback:s,callbackId:A})=>{this.onLocationChange(a,s,A)})},this.pubSub):(r=this.processViewConfig(JSON.parse(JSON.stringify(n))),this.mounted&&this.setState({viewConfig:n})),r}},{key:"UNSAFE_componentWillReceiveProps",value:function(n){const r=this.loadIfRemoteViewConfig(n.viewConfig);if(n.options.authToken!==this.prevAuthToken){MB(n.options.authToken);for(const C of this.iterateOverViews()){const o=this.getTrackRenderer(C),a=JSON.parse(o.prevTrackDefinitions);o.syncTrackObjects([]),o.syncTrackObjects(a)}this.prevAuthToken=n.options.authToken}for(const C of Mg(r))this.adjustLayoutToTrackSizes(C);this.setState({views:r})}},{key:"UNSAFE_componentWillUpdate",value:function(){this.pixiRenderer.render(this.pixiRoot)}},{key:"componentDidUpdate",value:function(){this.setTheme(this.props.options.theme,this.props.options.isDarkTheme),this.animate(),this.triggerViewChangeDb()}},{key:"componentWillUnmount",value:function(){this.mounted=!1,this.pixiStage.destroy(!1),this.pixiStage=null,this.pixiRenderer.destroy(!0),this.pixiRenderer=null,window.removeEventListener("focus",this.boundRefreshView),this.resizeSensor&&this.resizeSensor.detach(),this.domEvent.unregister("keydown",document),this.domEvent.unregister("keyup",document),this.domEvent.unregister("scroll",document),this.domEvent.unregister("wheel",window),this.domEvent.unregister("mousedown",window),this.domEvent.unregister("mouseup",window),this.domEvent.unregister("click",window),this.domEvent.unregister("mousemove",window),this.domEvent.unregister("touchmove",window),this.domEvent.unregister("touchstart",window),this.domEvent.unregister("touchend",window),this.domEvent.unregister("touchcancel",window),this.pubSubs.forEach(n=>this.pubSub.unsubscribe(n)),this.pubSubs=[],this.apiDestroy()}},{key:"setTheme",value:function(n=this.props.options.theme,r=this.props.options.isDarkTheme){if(typeof r<"u")console.warn("The option `isDarkTheme` is deprecated. Please use `theme` instead."),this.theme=r?"dark":"light";else switch(n){case"dark":this.theme=ii;break;case"light":case void 0:this.theme=BX;break;default:console.warn(`Unknown theme "${n}". Using light theme.`),this.theme=BX;break}}},{key:"dispatchEvent",value:function(n){this.canvasElement&&RX(n,this.canvasElement)}},{key:"trackDroppedHandler",value:function(){this.setState({draggingHappening:null})}},{key:"requestReceivedHandler",value:function(){!this.viewconfLoaded&&EB===0&&(this.viewconfLoaded=!0,this.props.options.onViewConfLoaded&&this.props.options.onViewConfLoaded())}},{key:"animateOnMouseMoveHandler",value:function(n){n&&!this.animateOnMouseMove&&this.pubSubs.push(this.pubSub.subscribe("app.mouseMove",this.animateBound)),this.animateOnMouseMove=n}},{key:"fitPixiToParentContainer",value:function(){if(!this.element||!this.element.parentNode){console.warn("No parentNode:",this.element);return}const n=this.element.parentNode.clientWidth,r=this.element.parentNode.clientHeight;this.pixiMask.beginFill(16777215).drawRect(0,0,n,r).endFill(),this.pixiRenderer.resize(n,r),this.pixiRenderer.view.style.width=`${n}px`,this.pixiRenderer.view.style.height=`${r}px`,this.pixiRenderer.render(this.pixiRoot)}},{key:"addDefaultTrackOptions",value:function(n){const r=this.getTrackInfo(n.type);if(!r)return;typeof n.options>"u"&&(n.options={});const C=n.options?n.options:{};if(this.props.options.defaultTrackOptions){if(this.props.options.defaultTrackOptions.trackSpecific&&this.props.options.defaultTrackOptions.trackSpecific[n.type]){const o=this.props.options.defaultTrackOptions.trackSpecific[n.type];for(const a in o)n.options[a]=typeof n.options[a]<"u"?n.options[a]:JSON.parse(JSON.stringify(o[a]))}if(this.props.options.defaultTrackOptions.all){const o=this.props.options.defaultTrackOptions.all;for(const a in o)n.options[a]=typeof n.options[a]<"u"?n.options[a]:JSON.parse(JSON.stringify(o[a]))}}if(r.defaultOptions){const o=r.defaultOptionsByTheme&&r.defaultOptionsByTheme[this.theme]?r.defaultOptionsByTheme[this.theme]:{},a={...r.defaultOptions,...o};if(!n.options)n.options=JSON.parse(JSON.stringify(a));else for(const s in a)n.options[s]=typeof n.options[s]<"u"?n.options[s]:JSON.parse(JSON.stringify(a[s]))}else n.options=C}},{key:"toggleTypedEditable",value:function(){this.setState({typedEditable:!this.isEditable()})}},{key:"typedTextHandler",value:function(n){if(!this.props.options.cheatCodesEnabled)return;this.typedText=this.typedText.concat(n.key),this.typedText.endsWith("hgedit")&&(this.toggleTypedEditable(),this.typedText="");const r=750;this.typedTextTimeout&&clearTimeout(this.typedTextTimeout),this.typedTextTimeout=setTimeout(()=>{this.typedText=""},r)}},{key:"keyDownHandler",value:function(n){this.typedTextHandler(n),this.props.options.rangeSelectionOnAlt&&n.key==="Alt"&&this.setState({mouseTool:JC})}},{key:"keyUpHandler",value:function(n){this.props.options.rangeSelectionOnAlt&&n.key==="Alt"&&this.setState({mouseTool:GX})}},{key:"openModal",value:function(n){this.setState({modal:N.cloneElement(n,{ref:r=>{this.modalRef=r}})})}},{key:"closeModal",value:function(){this.modalRef=null,this.setState({modal:null})}},{key:"handleEditViewConfig",value:function(){const{viewConfig:n}=this.state;this.setState({viewConfigTmp:n}),this.openModal(N.createElement(wtg,{onCancel:()=>{const{viewConfigTmp:r}=this.state,C=this.processViewConfig(r);for(const o of Mg(C))this.adjustLayoutToTrackSizes(o);this.setState({views:C,viewConfig:r,viewConfigTmp:null})},onChange:r=>{const C=JSON.parse(r),o=this.processViewConfig(C);for(const a of Mg(o))this.adjustLayoutToTrackSizes(a);this.setState({views:o,viewConfig:C})},onSave:r=>{const C=JSON.parse(r),o=this.processViewConfig(C);for(const a of Mg(o))this.adjustLayoutToTrackSizes(a);this.setState({views:o,viewConfig:C,viewConfigTmp:null})},viewConfig:this.getViewsAsString()}))}},{key:"animate",value:function(){this.isRequestingAnimationFrame||(this.isRequestingAnimationFrame=!0,requestAnimationFrame(()=>{this.pixiRenderer&&(this.pixiRenderer.render(this.pixiRoot),this.isRequestingAnimationFrame=!1)}))}},{key:"animateOnGlobalEvent",value:function({sourceUid:n}={}){n!==this.uid&&this.animateOnMouseMove&&this.animate()}},{key:"measureSize",value:function(){const[n,r]=rve(this.element);n>0&&r>0&&this.setState({sizeMeasured:!0,width:n,height:r})}},{key:"updateAfterResize",value:function(){this.measureSize(),this.updateRowHeight(),this.fitPixiToParentContainer(),this.refreshView(QZ),this.resizeHandler()}},{key:"onBreakpointChange",value:function(n){this.setState({currentBreakpoint:n})}},{key:"handleOverlayMouseEnter",value:function(n){this.setState({mouseOverOverlayUid:n})}},{key:"handleOverlayMouseLeave",value:function(){this.setState({mouseOverOverlayUid:null})}},{key:"handleLockLocation",value:function(n){this.setState({chooseViewHandler:r=>this.handleLocationLockChosen(n,r),mouseOverOverlayUid:n})}},{key:"isEditable",value:function(){return this.state.typedEditable!==void 0?this.state.typedEditable:!this.props.options||!("editable"in this.props.options)?this.state.viewConfig.editable:this.props.options.editable&&this.state.viewConfig.editable}},{key:"isTrackMenuDisabled",value:function(){return this.props.options&&(this.props.options.editable===!1||this.props.options.tracksEditable===!1)?!0:this.state.viewConfig&&(this.state.viewConfig.tracksEditable===!1||this.state.viewConfig.editable===!1)}},{key:"isViewHeaderDisabled",value:function(){return this.props.options&&(this.props.options.editable===!1||this.props.options.viewEditable===!1)?!0:this.state.viewConfig&&(this.state.viewConfig.viewEditable===!1||this.state.viewConfig.editable===!1)}},{key:"iterateOverViews",value:function(){const n=[];for(const r in Object.keys(this.state.views))n.push(r);return n}},{key:"iterateOverTracksInView",value:function(n){const r=[],{tracks:C}=this.state.views[n];for(const o in C)for(const a of C[o])if(a.type==="combined"&&a.contents)for(const s of a.contents)r.push({viewId:n,trackId:s.uid,track:s});else r.push({viewId:n,trackId:a.uid,track:a});return r}},{key:"iterateOverTracks",value:function(){const n=[];for(const r in this.state.views){const{tracks:C}=this.state.views[r];for(const o in C)for(const a of C[o])if(a.type==="combined"&&a.contents)for(const s of a.contents)n.push({viewId:r,trackId:s.uid,track:s});else n.push({viewId:r,trackId:a.uid,track:a})}return n}},{key:"setMouseTool",value:function(n){this.setState({mouseTool:n})}},{key:"isValueScaleLocked",value:function(n,r){const C=this.combineViewAndTrackUid(n,r);return this.state.views[n]?!!this.valueScaleLocks[C]:!1}},{key:"getLockGroupExtrema",value:function(n,r){const C=this.combineViewAndTrackUid(n,r);if(!this.state.views[n]||!this.valueScaleLocks[C])return null;const o=this.valueScaleLocks[C],a=Object.values(o).filter(u=>this.tiledPlots[u.view]).map(u=>this.tiledPlots[u.view].trackRenderer.getTrackObject(u.track)).filter(u=>u).map(u=>u.originalTrack===void 0?u:u.originalTrack),s=a.filter(u=>u.minRawValue&&u.maxRawValue).map(u=>o.ignoreOffScreenValues?u.minVisibleValue(!0):u.minVisibleValueInTiles(!0)),A=a.filter(u=>u.minRawValue&&u.maxRawValue).map(u=>o.ignoreOffScreenValues?u.maxVisibleValue(!0):u.maxVisibleValueInTiles(!0));if(s.length===0||s.filter(u=>u===null||u===1/0).length>0||A.length===0||A.filter(u=>u===null||u===-1/0).length>0)return null;const l=Math.min(...s),c=Math.max(...A);return[l,c]}},{key:"syncValueScales",value:function(n,r){const C=this.combineViewAndTrackUid(n,r);if(!this.state.views[n])return;const o=nC(this.state.views[n].tracks,r);if(this.valueScaleLocks[C]){const a=this.valueScaleLocks[C],s=Object.values(a).filter(d=>this.tiledPlots[d.view]).map(d=>this.tiledPlots[d.view].trackRenderer.getTrackObject(d.track)).filter(d=>d).map(d=>d.originalTrack===void 0?d:d.originalTrack),A=this.getLockGroupExtrema(n,r);if(A===null)return;const l=A[0],c=A[1],u=1e-6;for(const d of s){if(d.minValue&&d.minValue(l),d.maxValue&&d.maxValue(c),!d.valueScale)continue;const h=Math.abs(d.minValue()-d.valueScale.domain()[0])>u||Math.abs(d.maxValue()-d.valueScale.domain()[1])>u,m=o.options&&d.options&&typeof o.options.scaleStartPercent<"u"&&typeof o.options.scaleEndPercent<"u"&&(Math.abs(d.options.scaleStartPercent-o.options.scaleStartPercent)>u||Math.abs(d.options.scaleEndPercent-o.options.scaleEndPercent)>u);d.continuousScaling&&!h&&!m||(d.valueScale.domain([l,c]),d.prevValueScale=d.valueScale.copy(),m&&(d.options.scaleStartPercent=o.options.scaleStartPercent,d.options.scaleEndPercent=o.options.scaleEndPercent),d.rerender(d.options,!0))}}}},{key:"handleNewTilesLoaded",value:function(n,r){this.animate()}},{key:"notifyDragChangedListeners",value:function(n){Mg(this.draggingChangedListeners).forEach(r=>{Mg(r).forEach(C=>C(n))})}},{key:"addDraggingChangedListener",value:function(n,r,C){this.draggingChangedListeners.hasOwnProperty(n)||(this.draggingChangedListeners[n]={}),this.draggingChangedListeners[n][r]=C,C(!0),C(!1)}},{key:"removeDraggingChangedListener",value:function(n,r){if(this.draggingChangedListeners.hasOwnProperty(n)){const C=this.draggingChangedListeners[n];C.hasOwnProperty(r)&&(C[r](!1),delete C[r])}}},{key:"addScalesChangedListener",value:function(n,r,C){this.scalesChangedListeners[n]||(this.scalesChangedListeners[n]={}),this.scalesChangedListeners[n][r]=C,!(!this.xScales[n]||!this.yScales[n])&&C(this.xScales[n],this.yScales[n])}},{key:"removeScalesChangedListener",value:function(n,r){if(this.scalesChangedListeners[n]){const C=this.scalesChangedListeners[n];C[r]&&delete C[r]}}},{key:"createSVG",value:function(){const n=document.createElement("svg");n.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.setAttribute("version","1.1");for(const r of Mg(this.tiledPlots))if(r){for(const C of Mg(r.trackRenderer.trackDefObjects))if(C.trackObject.exportSVG){const o=C.trackObject.exportSVG();o&&n.appendChild(o[0])}}return n.setAttribute("width",this.canvasElement.style.width),n.setAttribute("height",this.canvasElement.style.height),this.postCreateSVGCallback?this.postCreateSVGCallback(n):n}},{key:"createSVGString",value:function(){const n=this.createSVG();let r=Uot.xml(new window.XMLSerializer().serializeToString(n));return r=r.replace(/ -${C}`}},{key:"handleExportSVG",value:function(){JG("export.svg",new Blob([this.createSVGString()],{type:"image/svg+xml"}))}},{key:"offPostCreateSVG",value:function(){this.postCreateSVGCallback=null}},{key:"onPostCreateSVG",value:function(n){this.postCreateSVGCallback=n}},{key:"createPNGBlobPromise",value:function(){return new Promise(n=>{const C=this.createSVGString(),r=new Image(this.canvasElement.width,this.canvasElement.height);r.src=`data:image/svg+xml;base64,${btoa(C)}`,r.onload=()=>{const o=document.createElement("canvas");o.width=this.canvasElement.width/2,o.height=this.canvasElement.height/2,o.getContext("2d").drawImage(r,0,0),o.toBlob(a=>{n(a)})}})}},{key:"handleExportPNG",value:function(){this.createPNGBlobPromise().then(n=>{JG("export.png",n)})}},{key:"handleScalesChanged",value:function(n,C,r,o=!0){if(this.xScales[n]=C,this.yScales[n]=r,o&&n in this.scalesChangedListeners&&Eg(this.scalesChangedListeners[n]).forEach(a=>{a(C,r)}),this.zoomLocks[n]){const a=this.zoomLocks[n],s=Nr(a),[A,l,c]=Si(this.xScales[n],this.yScales[n]);for(let u=0;u{G(Z,B)})}}if(this.locationLocks[n]){const a=this.locationLocks[n],s=Nr(a),[A,l,c]=Si(this.xScales[n],this.yScales[n]);for(let u=0;u{w(G,v)})}}if(this.locationLocksAxisWise.x[n]){const a=this.locationLocksAxisWise.x[n].lock,s=Nr(a),A=this.locationLocksAxisWise.x[n].axis!=="x",[l,c,u]=Si(this.xScales[n],this.yScales[n]);for(let d=0;d{v(B,G)})}}if(this.locationLocksAxisWise.y[n]){const a=this.locationLocksAxisWise.y[n].lock,s=Nr(a),A=this.locationLocksAxisWise.y[n].axis!=="y",[l,c,u]=Si(this.xScales[n],this.yScales[n]);for(let d=0;d{v(B,G)})}}this.animate(),this.triggerViewChangeDb()}},{key:"handleProjectViewport",value:function(n){this.setState({chooseTrackHandler:(C,r)=>this.handleViewportProjected(n,C,r)})}},{key:"handleZoomToData",value:function(n){if(n&&!this.tiledPlots[n])throw new Error(`View uid ${n} does not exist in the current viewConfig`);n?this.tiledPlots[n].handleZoomToData():Object.values(this.tiledPlots).forEach(C=>C.handleZoomToData())}},{key:"resetViewport",value:function(n){if(n&&!this.tiledPlots[n])throw new Error(`View uid ${n} does not exist in the current viewConfig`);n?this.tiledPlots[n].resetViewport():Object.values(this.tiledPlots).forEach(C=>C.resetViewport())}},{key:"handleYankFunction",value:function(n,C){this.setState({chooseViewHandler:r=>C(n,r),mouseOverOverlayUid:n})}},{key:"handleUnlock",value:function(n,C){const r=C[n],o=Wr(r);if(o.length===2){delete C[o[0]],delete C[o[1]];return}C[n]&&C[n][n]&&delete C[n][n],C[n]&&delete C[n]}},{key:"viewScalesLockData",value:function(n){return!this.xScales[n]||!this.yScales[n]?(console.warn("View scale lock doesn't correspond to existing uid: ",n),null):Si(this.xScales[n],this.yScales[n])}},{key:"addLock",value:function(n,C,r,o){let a=[],s=[];r[n]?a=Nr(r[n]).filter(c=>o(c[0])).map(c=>[c[0],o(c[0])]):a=[[n,o.bind(this)(n)]],r[C]?s=Nr(r[C]).filter(c=>o.bind(this)(c[0])).map(c=>[c[0],o.bind(this)(c[0])]):s=[[C,o.bind(this)(C)]];const A=a.concat(s),l=JGe(A);A.forEach(c=>{r[c[0]]=l})}},{key:"handleLocationLockChosen",value:function(n,C){if(n===C){this.setState({chooseViewHandler:null});return}this.addLock(n,C,this.locationLocks,this.viewScalesLockData.bind(this)),this.setState({chooseViewHandler:null})}},{key:"handleZoomLockChosen",value:function(n,C){if(n===C){this.setState({chooseViewHandler:null});return}this.addLock(n,C,this.zoomLocks,this.viewScalesLockData.bind(this)),this.setState({chooseViewHandler:null})}},{key:"handleViewportProjected",value:function(n,C,r){let o=null;if(n===C)console.warn("A view can not show its own viewport.");else{const a=gr(this.state.views[C].tracks,r),s=OG(this.state.views[C].tracks,r);o=lg.nice();const l={uid:o,type:`viewport-projection-${{top:"horizontal",bottom:"horizontal",center:"center",left:"vertical",right:"vertical"}[s]}`,fromViewUid:n};this.addCallbacks(C,l),this.handleTrackAdded(C,l,s,a)}return this.setState({chooseTrackHandler:null}),o}},{key:"handleLocationYanked",value:function(n,C){const r=this.xScales[C],o=this.yScales[C],a=this.xScales[n],s=this.yScales[n],[A,l,c]=Si(a,s),[u,d,h]=Si(r,o);this.setCenters[n](u,d,c,!0),this.setState({chooseViewHandler:null})}},{key:"handleZoomYanked",value:function(n,C){const r=this.xScales[C],o=this.yScales[C],a=this.xScales[n],s=this.yScales[n],[A,l,c]=Si(a,s),[u,d,h]=Si(r,o);this.setCenters[n](A,l,h,!0),this.setState({chooseViewHandler:null})}},{key:"handleTrackPositionChosen",value:function(n,C){this.setState({addTrackPosition:C,addTrackPositionView:n})}},{key:"updateRowHeight",value:function(){if(!this.props.options||this.sizeMode!==rle||this.props.options.pixelPreciseMarginPadding)return;const n=this.element.parentNode.clientHeight;let C=0;for(const l of Eg(this.state.views))C=Math.max(C,l.layout.y+l.layout.h);this.handleDragStart(),this.handleDragStop();const o=(this.isEditable()?10:0)*C-1,s=(n-o)/C,A=Math.floor(s);this.setState({rowHeight:A})}},{key:"handleLayoutChange",value:function(n){this.element&&(n.forEach(C=>{const r=this.state.views[C.i];r&&(r.layout.x=C.x,r.layout.y=C.y,r.layout.w=C.w,r.layout.h=C.h,r.layout.i=C.i)}),this.updateRowHeight(),this.refreshView(_Z))}},{key:"clearDragTimeout",value:function(){this.dragTimeout&&(clearTimeout(this.dragTimeout),this.dragTimeout=null)}},{key:"getTrackInfo",value:function(n){if(Qg[n])return Qg[n];if(this.pluginTracks&&this.pluginTracks[n])return this.pluginTracks[n].config;if(window.higlassTracksByType&&window.higlassTracksByType[n])return window.higlassTracksByType[n].config;console.warn("Track type not found:",n,"(check app/scripts/config/ for a list of defined track types)")}},{key:"forceRefreshView",value:function(){this.setState(this.state)}},{key:"refreshView",value:function(n=NGe){this.clearDragTimeout(),this.notifyDragChangedListeners(!0),this.clearDragTimeout(),this.dragTimeout=setTimeout(()=>{this.notifyDragChangedListeners(!1)},n)}},{key:"handleDragStart",value:function(){this.clearDragTimeout(),this.notifyDragChangedListeners(!0)}},{key:"handleDragStop",value:function(){this.clearDragTimeout(),this.dragTimeout=setTimeout(()=>{this.notifyDragChangedListeners(!1)},_Z)}},{key:"resizeHandler",value:function(){XN(this.viewHeaders).filter(n=>n).forEach(n=>n.checkWidth())}},{key:"calculateViewDimensions",value:function(n){let s=this.viewMarginTop+this.viewMarginBottom+this.viewPaddingTop+this.viewPaddingBottom,A=this.viewMarginLeft+this.viewMarginRight+this.viewPaddingLeft+this.viewPaddingRight,l=0;l+=10;const c=20;if(n.tracks.top)for(let B=0;B0||n.tracks.right&&n.tracks.right.length>0||n.tracks.center&&n.tracks.center.length>0)&&(l+=c);let u=0;if(n.tracks.left)for(let B=0;B0){if(!n.tracks.center[0].contents||n.tracks.center[0].contents.length>0){let B=null,G=null;if(n.tracks.center[0].contents)for(const v of n.tracks.center[0].contents)B=Math.max(B,v.height?v.height:100),G=Math.max(G,v.width?v.width:100);else B=n.tracks.center[0].height?n.tracks.center[0].height:100,G=n.tracks.center[0].width?n.tracks.center[0].width:100;s+=B,A+=G}}else(n.tracks.top&&Eg(n.tracks.top).length>1||n.tracks.bottom&&Eg(n.tracks.bottom).length>1)&&(n.tracks.left&&Eg(n.tracks.left).length||n.tracks.right&&Eg(n.tracks.right).length)&&(f=100,m=100);h>m?s+=h:s+=m;let b=0,p=0,y=0,Z=0;return"top"in n.tracks&&(b=n.tracks.top.map(B=>B.height?B.height:20).reduce((B,G)=>B+G,0)),"bottom"in n.tracks&&(p=n.tracks.bottom.map(B=>B.height?B.height:20).reduce((B,G)=>B+G,0)),"left"in n.tracks&&(y=n.tracks.left.map(B=>B.width?B.width:0).reduce((B,G)=>B+G,0)),"right"in n.tracks&&(Z=n.tracks.right.map(B=>B.width?B.width:0).reduce((B,G)=>B+G,0)),{totalWidth:A,totalHeight:s,topHeight:b,bottomHeight:p,leftWidth:y,rightWidth:Z,centerWidth:f,centerHeight:m,minNecessaryHeight:l}}},{key:"calculateZoomLimits",value:function(n,C){const r=[0,1/0],o=n.zoomLimits||[1,null],a=C[1]-C[0];if(o.length!==2)return r;if(o[0]!==null&&o[0]>0){const s=a/o[0];r[1]=Math.max(s,1),s<1&&console.warn(`Invalid zoom limits. Lower limit set to ${a}`)}if(o[1]!==null&&o[1]>o[0]){const s=a/o[1];r[0]=Math.min(s,1),s>1&&console.warn(`Invalid zoom limits. Upper limit set to ${a}`)}return r}},{key:"generateViewLayout",value:function(n){let C=null;return"layout"in n?{layout:C}=n.layout:C={x:0,y:0,w:Cle,h:Htg},C}},{key:"handleClearView",value:function(n){const{views:C}=this.state;C[n].tracks.top=[],C[n].tracks.bottom=[],C[n].tracks.center=[],C[n].tracks.left=[],C[n].tracks.right=[],C[n].tracks.whole=[],this.setState({views:C})}},{key:"handleCloseView",value:function(n){Eg(this.state.views).length!==1&&(this.handleUnlock(n,this.zoomLocks),this.setState(C=>(delete C.views[n],{views:this.removeInvalidTracks(C.views)})))}},{key:"handleSeriesAdded",value:function(n,C,r,o){const{tracks:a}=this.state.views[n];if(o.type==="combined")o.contents.push(C),C.type==="heatmap"&&this.compatibilityfyStackedHeatmaps(C,o);else{const s={type:"combined",uid:lg.nice(),height:o.height,width:o.width,contents:[o,C]},A=a[r];for(let l=0;l({views:s.views}))}},{key:"handleNoTrackAdded",value:function(){this.state.addTrackPosition&&this.setState({addTrackPosition:null})}},{key:"handleTracksAdded",value:function(n,C,r,o){this.storeTrackSizes(n);for(const a of C)this.handleTrackAdded(n,a,r,o)}},{key:"handleChangeTrackType",value:function(n,C,r){const o=this.state.views[n],a=gr(o.tracks,C),s=a.uid;a.uid=lg.nice(),a.type=r;const A=a.uid;this.updateTrackLocks(n,s,A),this.setState(l=>({views:l.views}))}},{key:"handleChangeTrackData",value:function(n,C,r){const o=this.state.views[n],a=gr(o.tracks,C);a.uid=lg.nice(),a.data=r,this.setState(s=>({views:s.views}))}},{key:"handleTrackAdded",value:function(n,C,r,o=null){if(this.addDefaultTrackOptions(C),C.uid||(C.uid=lg.nice()),C.contents)for(const l of C.contents)this.addDefaultTrackOptions(l);if(this.state.addTrackPosition&&this.setState({addTrackPosition:null}),o)return this.handleSeriesAdded(n,C,r,o),null;C.position=r;const a=this.getTrackInfo(C.type);C.width=a.defaultWidth||a.defaultOptions&&a.defaultOptions.minWidth||this.minVerticalWidth,C.height=a.defaultHeight||a.defaultOptions&&a.defaultOptions.minHeight||this.minHorizontalHeight;const{tracks:s}=this.state.views[n];let A=0;if(Is(s,()=>A++),r==="left"||r==="top")s[r].unshift(C);else if(r==="center")if(s.center.length===0){const l={uid:lg.nice(),type:"combined",contents:[C]};s.center=[l]}else if(s.center[0].type==="combined")s.center[0].contents.push(C),C.type==="heatmap"&&this.compatibilityfyStackedHeatmaps(C,s.center[0]);else{const l={uid:lg.nice(),type:"combined",contents:[s.center[0],C]};s.center=[l],C.type==="heatmap"&&this.compatibilityfyStackedHeatmaps(C,l)}else s[r]||(s[r]=[]),s[r].push(C);return this.adjustLayoutToTrackSizes(this.state.views[n]),Object.keys(this.state.views).length===1&&A===0&&(this.handleZoomToData(n),this.zoomToDataExtentOnInit.add(n)),C}},{key:"compatibilityfyStackedHeatmaps",value:function(n,C){let r;C.contents.some(a=>(r=a,a.type==="heatmap"))&&(n.options.backgroundColor="transparent",n.options.showTooltip=r.options.showTooltip,n.options.showMousePosition=r.options.showMousePosition,n.options.mousePositionColor=r.options.mousePositionColor)}},{key:"storeTrackSizes",value:function(n){Is(this.state.views[n].tracks,C=>{const r=this.tiledPlots[n].trackRenderer.getTrackObject(C.uid);r&&([C.width,C.height]=r.dimensions)})}},{key:"adjustLayoutToTrackSizes",value:function(n){if(!n.layout)return;const C=this.isEditable();let r=0;C&&(r+=Ttg);const{totalHeight:o}=this.calculateViewDimensions(n);r+=o;const a=this.isEditable()?10:0;r+=a;const s=this.state.rowHeight+a;this.sizeMode!==rle&&(n.layout.h=Math.ceil(r/s))}},{key:"handleCloseTrack",value:function(n,C){const{tracks:r}=this.state.views[n];this.handleUnlockValueScale(n,C);for(const o in r){const a=r[o],s=a.filter(A=>A.uid!==C);s.length===a.length?s.filter(l=>l.type==="combined").forEach(l=>{l.contents=l.contents.filter(c=>c.uid!==C)}):r[o]=s}return this.storeTrackSizes(n),this.adjustLayoutToTrackSizes(this.state.views[n]),this.setState(o=>({views:o.views})),this.state.views}},{key:"handleLockValueScale",value:function(n,C){this.setState({chooseTrackHandler:(r,o)=>this.handleValueScaleLocked(n,C,r,o)})}},{key:"combineViewAndTrackUid",value:function(n,C){const r=`${n}.${C}`;if(this.combinedUidToViewTrack[r]={view:n,track:C},this.viewTrackUidsToCombinedUid[n]){if(this.viewTrackUidsToCombinedUid[C])return this.viewTrackUidsToCombinedUid[n][C];this.viewTrackUidsToCombinedUid[n][C]=r}else this.viewTrackUidsToCombinedUid[n]={},this.viewTrackUidsToCombinedUid[n][C]=r;return r}},{key:"updateTrackLocks",value:function(n,C,r){const o=this.combineViewAndTrackUid(n,C),a=this.combineViewAndTrackUid(n,r);if(this.valueScaleLocks[o]){const s=this.valueScaleLocks[o];this.valueScaleLocks[a]=s,delete this.valueScaleLocks[o]}for(const s in this.valueScaleLocks)if(this.valueScaleLocks[s][o]){const A=this.valueScaleLocks[s][o];this.valueScaleLocks[s][a]=A,A.track=r,delete this.valueScaleLocks[s][o]}}},{key:"handleUnlockValueScale",value:function(n,C){if(this.tiledPlots[n].trackRenderer.getTrackObject(C).createdTracks){const r=Wr(this.tiledPlots[n].trackRenderer.getTrackObject(C).createdTracks);for(const o of r)this.handleUnlock(this.combineViewAndTrackUid(n,o),this.valueScaleLocks)}else this.handleUnlock(this.combineViewAndTrackUid(n,C),this.valueScaleLocks)}},{key:"handleValueScaleLocked",value:function(n,C,r,o){if(this.tiledPlots[n].trackRenderer.getTrackObject(C).createdTracks){const A=Wr(this.tiledPlots[n].trackRenderer.getTrackObject(C).createdTracks);for(const l of A)this.handleValueScaleLocked(n,l,r,o);return}if(this.tiledPlots[r].trackRenderer.getTrackObject(o).createdTracks){const A=Wr(this.tiledPlots[r].trackRenderer.getTrackObject(o).createdTracks);for(const l of A)this.handleValueScaleLocked(n,C,r,l);return}const a=this.combineViewAndTrackUid(n,C),s=this.combineViewAndTrackUid(r,o);this.addLock(a,s,this.valueScaleLocks,A=>this.combinedUidToViewTrack[A]),this.syncValueScales(n,C),this.setState({chooseTrackHandler:null})}},{key:"addCallbacks",value:function(n,C){const r=this.getTrackInfo(C.type);if(C.type==="viewport-projection-center"||C.type==="viewport-projection-horizontal"||C.type==="viewport-projection-vertical"||r&&r.projection){const o=C.fromViewUid;C.registerViewportChanged=(a,s)=>this.addScalesChangedListener(o,a,s),C.removeViewportChanged=a=>this.removeScalesChangedListener(o,a),C.setDomainsCallback=(a,s)=>{if(!o){this.projectionXDomains[n]||(this.projectionXDomains[n]={}),this.projectionYDomains[n]||(this.projectionYDomains[n]={}),(C.type==="viewport-projection-horizontal"||C.type==="viewport-projection-center")&&(this.projectionXDomains[n][C.uid]=a),(C.type==="viewport-projection-vertical"||C.type==="viewport-projection-center")&&(this.projectionYDomains[n][C.uid]=s),this.triggerViewChangeDb();return}const A=gg().domain(a).range(this.xScales[o].range()),l=gg().domain(s).range(this.yScales[o].range()),[c,u,d]=Si(A,l);this.setCenters[o](c,u,d,!1);let h=!1,m=!1;n in this.zoomLocks&&(h=o in this.zoomLocks[n]),h&&this.handleUnlock(n,this.zoomLocks),n in this.locationLocks&&(m=o in this.locationLocks[n]),m&&this.handleUnlock(n,this.locationLocks),this.handleScalesChanged(o,A,l,!0),h&&this.addLock(n,o,this.zoomLocks,this.viewScalesLockData),m&&this.addLock(n,o,this.locationLocks,this.viewScalesLockData)}}}},{key:"validateLocks",value:function(n){const C=[];for(const r of Wr(n))(!n[r]||!n[r][r])&&C.push(r);for(const r of C)n[r]&&(console.warn(`View ${r} not present in lock group. Removing...`),this.handleUnlock(r,n),delete n[r])}},{key:"deserializeLocationLocks",value:function(n){if(this.locationLocks={},n.locationLocks)for(const C of Wr(n.locationLocks.locksByViewUid))if(typeof n.locationLocks.locksByViewUid[C]!="object")this.locationLocks[C]=n.locationLocks.locksDict[n.locationLocks.locksByViewUid[C]];else{if("x"in n.locationLocks.locksByViewUid[C]){const r=n.locationLocks.locksDict[n.locationLocks.locksByViewUid[C].x.lock];this.locationLocksAxisWise.x[C]={lock:r,axis:n.locationLocks.locksByViewUid[C].x.axis}}if("y"in n.locationLocks.locksByViewUid[C]){const r=n.locationLocks.locksDict[n.locationLocks.locksByViewUid[C].y.lock];this.locationLocksAxisWise.y[C]={lock:r,axis:n.locationLocks.locksByViewUid[C].y.axis}}}this.validateLocks(this.locationLocks)}},{key:"deserializeZoomLocks",value:function(n){if(this.zoomLocks={},n.zoomLocks)for(const C of Wr(n.zoomLocks.locksByViewUid))this.zoomLocks[C]=n.zoomLocks.locksDict[n.zoomLocks.locksByViewUid[C]];this.validateLocks(this.zoomLocks)}},{key:"deserializeValueScaleLocks",value:function(n){if(this.valueScaleLocks={},n.valueScaleLocks)for(const C of Wr(n.valueScaleLocks.locksByViewUid))this.valueScaleLocks[C]=n.valueScaleLocks.locksDict[n.valueScaleLocks.locksByViewUid[C]]}},{key:"serializeLocks",value:function(n){const C={},r={};for(const o of Wr(n)){let a=n[o]&&n[o].uid;a||(a=lg.nice()),n[o].uid=a,C[a]=n[o],r[o]=n[o].uid}return{locksByViewUid:r,locksDict:C}}},{key:"getViewsAsJson",value:function(){const n=JSON.parse(JSON.stringify(this.state.viewConfig));return n.views=Object.values(this.state.views).map(C=>{const r=JSON.parse(JSON.stringify(C));return Is(r.tracks,o=>{if(o.server){const a=tat(o.server,{});if(!a.hostname.length){const s=window.location.host,{protocol:A}=window.location,l=`${A}//${s}${a.pathname}`;o.server=l}}(o.type==="viewport-projection-center"||o.type==="viewport-projection-horizontal")&&this.projectionXDomains[C.uid]&&this.projectionXDomains[C.uid][o.uid]&&(o.projectionXDomain=this.projectionXDomains[C.uid][o.uid]),(o.type==="viewport-projection-center"||o.type==="viewport-projection-vertical")&&this.projectionYDomains[C.uid]&&this.projectionYDomains[C.uid][o.uid]&&(o.projectionYDomain=this.projectionYDomains[C.uid][o.uid]),delete o.name,delete o.position,delete o.header,delete o.description,delete o.created,delete o.project,delete o.project_name,delete o.serverUidKey,delete o.uuid,delete o.private,delete o.maxZoom,delete o.coordSystem,delete o.coordSystem2,delete o.datatype,delete o.maxWidth,delete o.datafile,delete o.binsPerDimension,delete o.resolutions,delete o.aggregationModes}),r.uid=C.uid,r.initialXDomain=this.xScales[C.uid].domain(),r.initialYDomain=this.yScales[C.uid].domain(),delete r.layout.i,r}),n.zoomLocks=this.serializeLocks(this.zoomLocks),n.locationLocks=this.serializeLocks(this.locationLocks),n.valueScaleLocks=this.serializeLocks(this.valueScaleLocks),n}},{key:"getViewsAsString",value:function(){return JSON.stringify(this.getViewsAsJson(),null,2)}},{key:"handleExportViewAsJSON",value:function(){const n=this.getViewsAsString();JG("viewconf.json",n)}},{key:"handleExportViewsAsLink",value:function(n=this.state.viewConfig.exportViewUrl,C=!1){const r=new URL(n,window.location.origin),o=fetch(n,{method:"POST",headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:`{"viewconf":${this.getViewsAsString()}}`,credentials:"same-origin"}).then(a=>{if(!a.ok)throw a;return a.json()}).catch(a=>{console.warn("err:",a)}).then(a=>({id:a.uid,url:`${r.origin}/l/?d=${a.uid}`}));return C||o.then(a=>{this.openModal(N.createElement(k$,{onDone:()=>{this.closeModalBound()},url:a.url}))}).catch(a=>console.error("Exporting view config as link failed:",a)),o}},{key:"handleDataDomainChanged",value:function(n,C,r){const{views:o}=this.state;if(o[n].initialXDomain=C,o[n].initialYDomain=r,this.xScales[n]=gg().domain(C),this.yScales[n]=gg().domain(r),this.zoomLocks[n]){const a=this.zoomLocks[n],s=Nr(a);for(let A=0;ACle)return!1;const A=Eg(this.state.views);for(let l=0;lc&&Cu)return!1}return!0}},{key:"handleAddView",value:function(n){const C=Eg(this.state.views),r=n,o=[];n.layout.w===12&&(n.layout.w=6);for(let A=0;A{const c=A[1]-l[1];return c===0?A[0]-l[0]:c});const a=JSON.stringify(r),s=JSON.parse(a);s.initialXDomain=this.xScales[s.uid].domain(),s.initialYDomain=this.yScales[s.uid].domain(),[[s.layout.x,s.layout.y]]=o,s.uid=lg.nice(),s.layout.i=s.uid,Is(s.tracks,A=>{this.addCallbacks(s.uid,A)}),this.setState(A=>{const l=JSON.parse(JSON.stringify(A.views));return l[s.uid]=s,{views:l}})}},{key:"handleSelectedAssemblyChanged",value:function(n,C,r,o){const{views:a}=this.state;a[n].genomePositionSearchBox.chromInfoId=C,a[n].genomePositionSearchBox.autocompleteId=r,a[n].genomePositionSearchBox.autocompleteServer=o}},{key:"createGenomePostionSearchBoxEntry",value:function(n,C){let r=n;const o={autocompleteServer:cz,chromInfoServer:cz,visible:!1};return r||(r=JSON.parse(JSON.stringify(o))),r.autocompleteServer||(r.autocompleteServer=o.autocompleteServer),r.chromInfoId||(r.chromInfoId=C),r.chromInfoServer||(r.chromInfoServer=o.chromInfoServer),r.visible||(r.visible=!1),r}},{key:"handleTogglePositionSearchBox",value:function(n){const C=this.state.views[n];C.genomePositionSearchBoxVisible=!C.genomePositionSearchBoxVisible;const r={};Is(C.tracks,s=>{s.coordSystem&&(r[s.coordSystem]||(r[s.coordSystem]=0),r[s.coordSystem]+=1)});const o=Nr(r).sort((s,A)=>A[1]-s[1]);let a="hg19";o.length&&(a=o[0][0]),C.genomePositionSearchBox=this.createGenomePostionSearchBoxEntry(C.genomePositionSearchBox,a),C.genomePositionSearchBox.visible=!C.genomePositionSearchBox.visible,this.refreshView(),this.setState({configMenuUid:null})}},{key:"handleTrackOptionsChanged",value:function(n,C,r){const o=this.state.views[n],a=gr(o.tracks,C);a&&(a.options=Object.assign(a.options,r),this.mounted&&(this.setState(s=>({views:s.views})),this.adjustSplitHeatmapTrackOptions(a,r,o.tracks,n)))}},{key:"adjustSplitHeatmapTrackOptions",value:function(n,C,r,o){n.type==="heatmap"&&(C.extent==="upper-right"&&r.center[0].type==="combined"&&r.center[0].contents.length>1&&r.center[0].contents.some(a=>{if(a.type==="heatmap"&&a.uid!==n.uid&&a.options.extent!=="lower-left"){const s={...a.options,extent:"lower-left",labelPosition:"bottomLeft",colorbarPosition:"bottomLeft"},A={...C,labelPosition:"topRight",colorbarPosition:"topRight"};return this.handleTrackOptionsChanged(o,a.uid,s),this.handleTrackOptionsChanged(o,n.uid,A),!0}return!1}),C.extent==="lower-left"&&C.extent==="lower-left"&&r.center[0].type==="combined"&&r.center[0].contents.length>1&&r.center[0].contents.some(a=>{if(a.type==="heatmap"&&a.uid!==n.uid&&a.options.extent!=="upper-right"){const s={...a.options,extent:"upper-right",labelPosition:"topRight",colorbarPosition:"topRight"},A={...C,labelPosition:"bottomLeft",colorbarPosition:"bottomLeft"};return this.handleTrackOptionsChanged(o,a.uid,s),this.handleTrackOptionsChanged(o,n.uid,A),!0}return!1}))}},{key:"handleViewOptionsChanged",value:function(n,C){const r=this.state.views[n];r&&(r.options=Object.assign(r.options||{},C),this.mounted&&this.setState(o=>({views:o.views})))}},{key:"isTrackValid",value:function(n,C){return!(n.type==="viewport-projection-center"&&!C.has(n.fromViewUid))}},{key:"removeInvalidTracks",value:function(n){const C=new Set(Wr(n));for(const r of Eg(n))for(const o of["left","top","center","right","bottom"])r.tracks&&r.tracks.hasOwnProperty(o)&&(r.tracks[o]=r.tracks[o].filter(a=>this.isTrackValid(a,C)),r.tracks[o].forEach(a=>{a.type==="combined"&&(a.contents=a.contents.filter(s=>this.isTrackValid(s,C)))}));return n}},{key:"processViewConfig",value:function(n){let{views:C}=n,r={};return(!n.views||n.views.length===0)&&(console.warn("No views provided in viewConfig"),C=[{editable:!0,tracks:{}}]),C.forEach(o=>{o.tracks&&OGe(o.tracks),o.uid||(o.uid=lg.nice()),r[o.uid]=o,this.zoomToDataExtentOnInit.has(o.uid)&&this.zoomToDataExtentOnInit.delete(o.uid),o.initialXDomain?(o.initialXDomain[0]=+o.initialXDomain[0],o.initialXDomain[1]=+o.initialXDomain[1]):(o.initialXDomain=[0,100],this.zoomToDataExtentOnInit.add(o.uid)),o.initialYDomain?(o.initialXDomain[0]=+o.initialXDomain[0],o.initialXDomain[1]=+o.initialXDomain[1]):o.initialYDomain=[o.initialXDomain[0],o.initialXDomain[1]],this.xScales[o.uid]||(this.xScales[o.uid]=gg().domain(o.initialXDomain)),this.yScales[o.uid]||(this.yScales[o.uid]=gg().domain(o.initialYDomain)),Is(o.tracks,a=>{if(a.uid||(a.uid=lg.nice()),this.addCallbacks(o.uid,a),this.addDefaultTrackOptions(a),a.contents)for(const s of a.contents)this.addDefaultTrackOptions(s)}),o.layout?o.layout.i=o.uid:o.layout=this.generateViewLayout(o)}),this.deserializeZoomLocks(n),this.deserializeLocationLocks(n),this.deserializeValueScaleLocks(n),r=this.removeInvalidTracks(r),r}},{key:"handleWindowFocused",value:function(){}},{key:"rangeSelectionHandler",value:function(n){this.rangeSelection=n,this.apiPublish("rangeSelection",n)}},{key:"offViewChange",value:function(n){this.viewChangeListener.splice(n,1)}},{key:"onViewChange",value:function(n){return this.viewChangeListener.push(n)-1}},{key:"triggerViewChange",value:function(){this.viewChangeListener.forEach(n=>n(this.getViewsAsString()))}},{key:"getGenomeLocation",value:function(n){return OQ.get(this.state.views[n].chromInfoPath).then(C=>cve(this.xScales[n],this.yScales[n],C))}},{key:"offLocationChange",value:function(n,C){this.removeScalesChangedListener(n,C)}},{key:"zoomTo",value:function(n,C,r,o,a,s){if(!(n in this.setCenters))throw Error(`Invalid viewUid. Current uuids: ${Object.keys(this.setCenters).join(",")}`);if(Number.isNaN(+C)||Number.isNaN(+r)){const u=[C,r].join(", ");console.warn([`Invalid coordinates (${u}). All coordinates need to be numbers +${r}`}},{key:"handleExportSVG",value:function(){LG("export.svg",new Blob([this.createSVGString()],{type:"image/svg+xml"}))}},{key:"offPostCreateSVG",value:function(){this.postCreateSVGCallback=null}},{key:"onPostCreateSVG",value:function(n){this.postCreateSVGCallback=n}},{key:"createPNGBlobPromise",value:function(){return new Promise(n=>{const r=this.createSVGString(),C=new Image(this.canvasElement.width,this.canvasElement.height);C.src=`data:image/svg+xml;base64,${btoa(r)}`,C.onload=()=>{const o=document.createElement("canvas");o.width=this.canvasElement.width/2,o.height=this.canvasElement.height/2,o.getContext("2d").drawImage(C,0,0),o.toBlob(a=>{n(a)})}})}},{key:"handleExportPNG",value:function(){this.createPNGBlobPromise().then(n=>{LG("export.png",n)})}},{key:"handleScalesChanged",value:function(n,r,C,o=!0){if(this.xScales[n]=r,this.yScales[n]=C,o&&n in this.scalesChangedListeners&&Mg(this.scalesChangedListeners[n]).forEach(a=>{a(r,C)}),this.zoomLocks[n]){const a=this.zoomLocks[n],s=YC(a),[A,l,c]=SI(this.xScales[n],this.yScales[n]);for(let u=0;u{G(Z,B)})}}if(this.locationLocks[n]){const a=this.locationLocks[n],s=YC(a),[A,l,c]=SI(this.xScales[n],this.yScales[n]);for(let u=0;u{w(G,v)})}}if(this.locationLocksAxisWise.x[n]){const a=this.locationLocksAxisWise.x[n].lock,s=YC(a),A=this.locationLocksAxisWise.x[n].axis!=="x",[l,c,u]=SI(this.xScales[n],this.yScales[n]);for(let d=0;d{v(B,G)})}}if(this.locationLocksAxisWise.y[n]){const a=this.locationLocksAxisWise.y[n].lock,s=YC(a),A=this.locationLocksAxisWise.y[n].axis!=="y",[l,c,u]=SI(this.xScales[n],this.yScales[n]);for(let d=0;d{v(B,G)})}}this.animate(),this.triggerViewChangeDb()}},{key:"handleProjectViewport",value:function(n){this.setState({chooseTrackHandler:(r,C)=>this.handleViewportProjected(n,r,C)})}},{key:"handleZoomToData",value:function(n){if(n&&!this.tiledPlots[n])throw new Error(`View uid ${n} does not exist in the current viewConfig`);n?this.tiledPlots[n].handleZoomToData():Object.values(this.tiledPlots).forEach(r=>r.handleZoomToData())}},{key:"resetViewport",value:function(n){if(n&&!this.tiledPlots[n])throw new Error(`View uid ${n} does not exist in the current viewConfig`);n?this.tiledPlots[n].resetViewport():Object.values(this.tiledPlots).forEach(r=>r.resetViewport())}},{key:"handleYankFunction",value:function(n,r){this.setState({chooseViewHandler:C=>r(n,C),mouseOverOverlayUid:n})}},{key:"handleUnlock",value:function(n,r){const C=r[n],o=HC(C);if(o.length===2){delete r[o[0]],delete r[o[1]];return}r[n]&&r[n][n]&&delete r[n][n],r[n]&&delete r[n]}},{key:"viewScalesLockData",value:function(n){return!this.xScales[n]||!this.yScales[n]?(console.warn("View scale lock doesn't correspond to existing uid: ",n),null):SI(this.xScales[n],this.yScales[n])}},{key:"addLock",value:function(n,r,C,o){let a=[],s=[];C[n]?a=YC(C[n]).filter(c=>o(c[0])).map(c=>[c[0],o(c[0])]):a=[[n,o.bind(this)(n)]],C[r]?s=YC(C[r]).filter(c=>o.bind(this)(c[0])).map(c=>[c[0],o.bind(this)(c[0])]):s=[[r,o.bind(this)(r)]];const A=a.concat(s),l=$Ge(A);A.forEach(c=>{C[c[0]]=l})}},{key:"handleLocationLockChosen",value:function(n,r){if(n===r){this.setState({chooseViewHandler:null});return}this.addLock(n,r,this.locationLocks,this.viewScalesLockData.bind(this)),this.setState({chooseViewHandler:null})}},{key:"handleZoomLockChosen",value:function(n,r){if(n===r){this.setState({chooseViewHandler:null});return}this.addLock(n,r,this.zoomLocks,this.viewScalesLockData.bind(this)),this.setState({chooseViewHandler:null})}},{key:"handleViewportProjected",value:function(n,r,C){let o=null;if(n===r)console.warn("A view can not show its own viewport.");else{const a=nC(this.state.views[r].tracks,C),s=UG(this.state.views[r].tracks,C);o=cg.nice();const l={uid:o,type:`viewport-projection-${{top:"horizontal",bottom:"horizontal",center:"center",left:"vertical",right:"vertical"}[s]}`,fromViewUid:n};this.addCallbacks(r,l),this.handleTrackAdded(r,l,s,a)}return this.setState({chooseTrackHandler:null}),o}},{key:"handleLocationYanked",value:function(n,r){const C=this.xScales[r],o=this.yScales[r],a=this.xScales[n],s=this.yScales[n],[A,l,c]=SI(a,s),[u,d,h]=SI(C,o);this.setCenters[n](u,d,c,!0),this.setState({chooseViewHandler:null})}},{key:"handleZoomYanked",value:function(n,r){const C=this.xScales[r],o=this.yScales[r],a=this.xScales[n],s=this.yScales[n],[A,l,c]=SI(a,s),[u,d,h]=SI(C,o);this.setCenters[n](A,l,h,!0),this.setState({chooseViewHandler:null})}},{key:"handleTrackPositionChosen",value:function(n,r){this.setState({addTrackPosition:r,addTrackPositionView:n})}},{key:"updateRowHeight",value:function(){if(!this.props.options||this.sizeMode!==sle||this.props.options.pixelPreciseMarginPadding)return;const n=this.element.parentNode.clientHeight;let r=0;for(const l of Mg(this.state.views))r=Math.max(r,l.layout.y+l.layout.h);this.handleDragStart(),this.handleDragStop();const o=(this.isEditable()?10:0)*r-1,s=(n-o)/r,A=Math.floor(s);this.setState({rowHeight:A})}},{key:"handleLayoutChange",value:function(n){this.element&&(n.forEach(r=>{const C=this.state.views[r.i];C&&(C.layout.x=r.x,C.layout.y=r.y,C.layout.w=r.w,C.layout.h=r.h,C.layout.i=r.i)}),this.updateRowHeight(),this.refreshView(QZ))}},{key:"clearDragTimeout",value:function(){this.dragTimeout&&(clearTimeout(this.dragTimeout),this.dragTimeout=null)}},{key:"getTrackInfo",value:function(n){if(jg[n])return jg[n];if(this.pluginTracks&&this.pluginTracks[n])return this.pluginTracks[n].config;if(window.higlassTracksByType&&window.higlassTracksByType[n])return window.higlassTracksByType[n].config;console.warn("Track type not found:",n,"(check app/scripts/config/ for a list of defined track types)")}},{key:"forceRefreshView",value:function(){this.setState(this.state)}},{key:"refreshView",value:function(n=EGe){this.clearDragTimeout(),this.notifyDragChangedListeners(!0),this.clearDragTimeout(),this.dragTimeout=setTimeout(()=>{this.notifyDragChangedListeners(!1)},n)}},{key:"handleDragStart",value:function(){this.clearDragTimeout(),this.notifyDragChangedListeners(!0)}},{key:"handleDragStop",value:function(){this.clearDragTimeout(),this.dragTimeout=setTimeout(()=>{this.notifyDragChangedListeners(!1)},QZ)}},{key:"resizeHandler",value:function(){KN(this.viewHeaders).filter(n=>n).forEach(n=>n.checkWidth())}},{key:"calculateViewDimensions",value:function(n){let s=this.viewMarginTop+this.viewMarginBottom+this.viewPaddingTop+this.viewPaddingBottom,A=this.viewMarginLeft+this.viewMarginRight+this.viewPaddingLeft+this.viewPaddingRight,l=0;l+=10;const c=20;if(n.tracks.top)for(let B=0;B0||n.tracks.right&&n.tracks.right.length>0||n.tracks.center&&n.tracks.center.length>0)&&(l+=c);let u=0;if(n.tracks.left)for(let B=0;B0){if(!n.tracks.center[0].contents||n.tracks.center[0].contents.length>0){let B=null,G=null;if(n.tracks.center[0].contents)for(const v of n.tracks.center[0].contents)B=Math.max(B,v.height?v.height:100),G=Math.max(G,v.width?v.width:100);else B=n.tracks.center[0].height?n.tracks.center[0].height:100,G=n.tracks.center[0].width?n.tracks.center[0].width:100;s+=B,A+=G}}else(n.tracks.top&&Mg(n.tracks.top).length>1||n.tracks.bottom&&Mg(n.tracks.bottom).length>1)&&(n.tracks.left&&Mg(n.tracks.left).length||n.tracks.right&&Mg(n.tracks.right).length)&&(f=100,m=100);h>m?s+=h:s+=m;let b=0,p=0,y=0,Z=0;return"top"in n.tracks&&(b=n.tracks.top.map(B=>B.height?B.height:20).reduce((B,G)=>B+G,0)),"bottom"in n.tracks&&(p=n.tracks.bottom.map(B=>B.height?B.height:20).reduce((B,G)=>B+G,0)),"left"in n.tracks&&(y=n.tracks.left.map(B=>B.width?B.width:0).reduce((B,G)=>B+G,0)),"right"in n.tracks&&(Z=n.tracks.right.map(B=>B.width?B.width:0).reduce((B,G)=>B+G,0)),{totalWidth:A,totalHeight:s,topHeight:b,bottomHeight:p,leftWidth:y,rightWidth:Z,centerWidth:f,centerHeight:m,minNecessaryHeight:l}}},{key:"calculateZoomLimits",value:function(n,r){const C=[0,1/0],o=n.zoomLimits||[1,null],a=r[1]-r[0];if(o.length!==2)return C;if(o[0]!==null&&o[0]>0){const s=a/o[0];C[1]=Math.max(s,1),s<1&&console.warn(`Invalid zoom limits. Lower limit set to ${a}`)}if(o[1]!==null&&o[1]>o[0]){const s=a/o[1];C[0]=Math.min(s,1),s>1&&console.warn(`Invalid zoom limits. Upper limit set to ${a}`)}return C}},{key:"generateViewLayout",value:function(n){let r=null;return"layout"in n?{layout:r}=n.layout:r={x:0,y:0,w:Ale,h:xtg},r}},{key:"handleClearView",value:function(n){const{views:r}=this.state;r[n].tracks.top=[],r[n].tracks.bottom=[],r[n].tracks.center=[],r[n].tracks.left=[],r[n].tracks.right=[],r[n].tracks.whole=[],this.setState({views:r})}},{key:"handleCloseView",value:function(n){Mg(this.state.views).length!==1&&(this.handleUnlock(n,this.zoomLocks),this.setState(r=>(delete r.views[n],{views:this.removeInvalidTracks(r.views)})))}},{key:"handleSeriesAdded",value:function(n,r,C,o){const{tracks:a}=this.state.views[n];if(o.type==="combined")o.contents.push(r),r.type==="heatmap"&&this.compatibilityfyStackedHeatmaps(r,o);else{const s={type:"combined",uid:cg.nice(),height:o.height,width:o.width,contents:[o,r]},A=a[C];for(let l=0;l({views:s.views}))}},{key:"handleNoTrackAdded",value:function(){this.state.addTrackPosition&&this.setState({addTrackPosition:null})}},{key:"handleTracksAdded",value:function(n,r,C,o){this.storeTrackSizes(n);for(const a of r)this.handleTrackAdded(n,a,C,o)}},{key:"handleChangeTrackType",value:function(n,r,C){const o=this.state.views[n],a=nC(o.tracks,r),s=a.uid;a.uid=cg.nice(),a.type=C;const A=a.uid;this.updateTrackLocks(n,s,A),this.setState(l=>({views:l.views}))}},{key:"handleChangeTrackData",value:function(n,r,C){const o=this.state.views[n],a=nC(o.tracks,r);a.uid=cg.nice(),a.data=C,this.setState(s=>({views:s.views}))}},{key:"handleTrackAdded",value:function(n,r,C,o=null){if(this.addDefaultTrackOptions(r),r.uid||(r.uid=cg.nice()),r.contents)for(const l of r.contents)this.addDefaultTrackOptions(l);if(this.state.addTrackPosition&&this.setState({addTrackPosition:null}),o)return this.handleSeriesAdded(n,r,C,o),null;r.position=C;const a=this.getTrackInfo(r.type);r.width=a.defaultWidth||a.defaultOptions&&a.defaultOptions.minWidth||this.minVerticalWidth,r.height=a.defaultHeight||a.defaultOptions&&a.defaultOptions.minHeight||this.minHorizontalHeight;const{tracks:s}=this.state.views[n];let A=0;if(Is(s,()=>A++),C==="left"||C==="top")s[C].unshift(r);else if(C==="center")if(s.center.length===0){const l={uid:cg.nice(),type:"combined",contents:[r]};s.center=[l]}else if(s.center[0].type==="combined")s.center[0].contents.push(r),r.type==="heatmap"&&this.compatibilityfyStackedHeatmaps(r,s.center[0]);else{const l={uid:cg.nice(),type:"combined",contents:[s.center[0],r]};s.center=[l],r.type==="heatmap"&&this.compatibilityfyStackedHeatmaps(r,l)}else s[C]||(s[C]=[]),s[C].push(r);return this.adjustLayoutToTrackSizes(this.state.views[n]),Object.keys(this.state.views).length===1&&A===0&&(this.handleZoomToData(n),this.zoomToDataExtentOnInit.add(n)),r}},{key:"compatibilityfyStackedHeatmaps",value:function(n,r){let C;r.contents.some(a=>(C=a,a.type==="heatmap"))&&(n.options.backgroundColor="transparent",n.options.showTooltip=C.options.showTooltip,n.options.showMousePosition=C.options.showMousePosition,n.options.mousePositionColor=C.options.mousePositionColor)}},{key:"storeTrackSizes",value:function(n){Is(this.state.views[n].tracks,r=>{const C=this.tiledPlots[n].trackRenderer.getTrackObject(r.uid);C&&([r.width,r.height]=C.dimensions)})}},{key:"adjustLayoutToTrackSizes",value:function(n){if(!n.layout)return;const r=this.isEditable();let C=0;r&&(C+=Etg);const{totalHeight:o}=this.calculateViewDimensions(n);C+=o;const a=this.isEditable()?10:0;C+=a;const s=this.state.rowHeight+a;this.sizeMode!==sle&&(n.layout.h=Math.ceil(C/s))}},{key:"handleCloseTrack",value:function(n,r){const{tracks:C}=this.state.views[n];this.handleUnlockValueScale(n,r);for(const o in C){const a=C[o],s=a.filter(A=>A.uid!==r);s.length===a.length?s.filter(l=>l.type==="combined").forEach(l=>{l.contents=l.contents.filter(c=>c.uid!==r)}):C[o]=s}return this.storeTrackSizes(n),this.adjustLayoutToTrackSizes(this.state.views[n]),this.setState(o=>({views:o.views})),this.state.views}},{key:"handleLockValueScale",value:function(n,r){this.setState({chooseTrackHandler:(C,o)=>this.handleValueScaleLocked(n,r,C,o)})}},{key:"combineViewAndTrackUid",value:function(n,r){const C=`${n}.${r}`;if(this.combinedUidToViewTrack[C]={view:n,track:r},this.viewTrackUidsToCombinedUid[n]){if(this.viewTrackUidsToCombinedUid[r])return this.viewTrackUidsToCombinedUid[n][r];this.viewTrackUidsToCombinedUid[n][r]=C}else this.viewTrackUidsToCombinedUid[n]={},this.viewTrackUidsToCombinedUid[n][r]=C;return C}},{key:"updateTrackLocks",value:function(n,r,C){const o=this.combineViewAndTrackUid(n,r),a=this.combineViewAndTrackUid(n,C);if(this.valueScaleLocks[o]){const s=this.valueScaleLocks[o];this.valueScaleLocks[a]=s,delete this.valueScaleLocks[o]}for(const s in this.valueScaleLocks)if(this.valueScaleLocks[s][o]){const A=this.valueScaleLocks[s][o];this.valueScaleLocks[s][a]=A,A.track=C,delete this.valueScaleLocks[s][o]}}},{key:"handleUnlockValueScale",value:function(n,r){if(this.tiledPlots[n].trackRenderer.getTrackObject(r).createdTracks){const C=HC(this.tiledPlots[n].trackRenderer.getTrackObject(r).createdTracks);for(const o of C)this.handleUnlock(this.combineViewAndTrackUid(n,o),this.valueScaleLocks)}else this.handleUnlock(this.combineViewAndTrackUid(n,r),this.valueScaleLocks)}},{key:"handleValueScaleLocked",value:function(n,r,C,o){if(this.tiledPlots[n].trackRenderer.getTrackObject(r).createdTracks){const A=HC(this.tiledPlots[n].trackRenderer.getTrackObject(r).createdTracks);for(const l of A)this.handleValueScaleLocked(n,l,C,o);return}if(this.tiledPlots[C].trackRenderer.getTrackObject(o).createdTracks){const A=HC(this.tiledPlots[C].trackRenderer.getTrackObject(o).createdTracks);for(const l of A)this.handleValueScaleLocked(n,r,C,l);return}const a=this.combineViewAndTrackUid(n,r),s=this.combineViewAndTrackUid(C,o);this.addLock(a,s,this.valueScaleLocks,A=>this.combinedUidToViewTrack[A]),this.syncValueScales(n,r),this.setState({chooseTrackHandler:null})}},{key:"addCallbacks",value:function(n,r){const C=this.getTrackInfo(r.type);if(r.type==="viewport-projection-center"||r.type==="viewport-projection-horizontal"||r.type==="viewport-projection-vertical"||C&&C.projection){const o=r.fromViewUid;r.registerViewportChanged=(a,s)=>this.addScalesChangedListener(o,a,s),r.removeViewportChanged=a=>this.removeScalesChangedListener(o,a),r.setDomainsCallback=(a,s)=>{if(!o){this.projectionXDomains[n]||(this.projectionXDomains[n]={}),this.projectionYDomains[n]||(this.projectionYDomains[n]={}),(r.type==="viewport-projection-horizontal"||r.type==="viewport-projection-center")&&(this.projectionXDomains[n][r.uid]=a),(r.type==="viewport-projection-vertical"||r.type==="viewport-projection-center")&&(this.projectionYDomains[n][r.uid]=s),this.triggerViewChangeDb();return}const A=tg().domain(a).range(this.xScales[o].range()),l=tg().domain(s).range(this.yScales[o].range()),[c,u,d]=SI(A,l);this.setCenters[o](c,u,d,!1);let h=!1,m=!1;n in this.zoomLocks&&(h=o in this.zoomLocks[n]),h&&this.handleUnlock(n,this.zoomLocks),n in this.locationLocks&&(m=o in this.locationLocks[n]),m&&this.handleUnlock(n,this.locationLocks),this.handleScalesChanged(o,A,l,!0),h&&this.addLock(n,o,this.zoomLocks,this.viewScalesLockData),m&&this.addLock(n,o,this.locationLocks,this.viewScalesLockData)}}}},{key:"validateLocks",value:function(n){const r=[];for(const C of HC(n))(!n[C]||!n[C][C])&&r.push(C);for(const C of r)n[C]&&(console.warn(`View ${C} not present in lock group. Removing...`),this.handleUnlock(C,n),delete n[C])}},{key:"deserializeLocationLocks",value:function(n){if(this.locationLocks={},n.locationLocks)for(const r of HC(n.locationLocks.locksByViewUid))if(typeof n.locationLocks.locksByViewUid[r]!="object")this.locationLocks[r]=n.locationLocks.locksDict[n.locationLocks.locksByViewUid[r]];else{if("x"in n.locationLocks.locksByViewUid[r]){const C=n.locationLocks.locksDict[n.locationLocks.locksByViewUid[r].x.lock];this.locationLocksAxisWise.x[r]={lock:C,axis:n.locationLocks.locksByViewUid[r].x.axis}}if("y"in n.locationLocks.locksByViewUid[r]){const C=n.locationLocks.locksDict[n.locationLocks.locksByViewUid[r].y.lock];this.locationLocksAxisWise.y[r]={lock:C,axis:n.locationLocks.locksByViewUid[r].y.axis}}}this.validateLocks(this.locationLocks)}},{key:"deserializeZoomLocks",value:function(n){if(this.zoomLocks={},n.zoomLocks)for(const r of HC(n.zoomLocks.locksByViewUid))this.zoomLocks[r]=n.zoomLocks.locksDict[n.zoomLocks.locksByViewUid[r]];this.validateLocks(this.zoomLocks)}},{key:"deserializeValueScaleLocks",value:function(n){if(this.valueScaleLocks={},n.valueScaleLocks)for(const r of HC(n.valueScaleLocks.locksByViewUid))this.valueScaleLocks[r]=n.valueScaleLocks.locksDict[n.valueScaleLocks.locksByViewUid[r]]}},{key:"serializeLocks",value:function(n){const r={},C={};for(const o of HC(n)){let a=n[o]&&n[o].uid;a||(a=cg.nice()),n[o].uid=a,r[a]=n[o],C[o]=n[o].uid}return{locksByViewUid:C,locksDict:r}}},{key:"getViewsAsJson",value:function(){const n=JSON.parse(JSON.stringify(this.state.viewConfig));return n.views=Object.values(this.state.views).map(r=>{const C=JSON.parse(JSON.stringify(r));return Is(C.tracks,o=>{if(o.server){const a=aat(o.server,{});if(!a.hostname.length){const s=window.location.host,{protocol:A}=window.location,l=`${A}//${s}${a.pathname}`;o.server=l}}(o.type==="viewport-projection-center"||o.type==="viewport-projection-horizontal")&&this.projectionXDomains[r.uid]&&this.projectionXDomains[r.uid][o.uid]&&(o.projectionXDomain=this.projectionXDomains[r.uid][o.uid]),(o.type==="viewport-projection-center"||o.type==="viewport-projection-vertical")&&this.projectionYDomains[r.uid]&&this.projectionYDomains[r.uid][o.uid]&&(o.projectionYDomain=this.projectionYDomains[r.uid][o.uid]),delete o.name,delete o.position,delete o.header,delete o.description,delete o.created,delete o.project,delete o.project_name,delete o.serverUidKey,delete o.uuid,delete o.private,delete o.maxZoom,delete o.coordSystem,delete o.coordSystem2,delete o.datatype,delete o.maxWidth,delete o.datafile,delete o.binsPerDimension,delete o.resolutions,delete o.aggregationModes}),C.uid=r.uid,C.initialXDomain=this.xScales[r.uid].domain(),C.initialYDomain=this.yScales[r.uid].domain(),delete C.layout.i,C}),n.zoomLocks=this.serializeLocks(this.zoomLocks),n.locationLocks=this.serializeLocks(this.locationLocks),n.valueScaleLocks=this.serializeLocks(this.valueScaleLocks),n}},{key:"getViewsAsString",value:function(){return JSON.stringify(this.getViewsAsJson(),null,2)}},{key:"handleExportViewAsJSON",value:function(){const n=this.getViewsAsString();LG("viewconf.json",n)}},{key:"handleExportViewsAsLink",value:function(n=this.state.viewConfig.exportViewUrl,r=!1){const C=new URL(n,window.location.origin),o=fetch(n,{method:"POST",headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:`{"viewconf":${this.getViewsAsString()}}`,credentials:"same-origin"}).then(a=>{if(!a.ok)throw a;return a.json()}).catch(a=>{console.warn("err:",a)}).then(a=>({id:a.uid,url:`${C.origin}/l/?d=${a.uid}`}));return r||o.then(a=>{this.openModal(N.createElement(E$,{onDone:()=>{this.closeModalBound()},url:a.url}))}).catch(a=>console.error("Exporting view config as link failed:",a)),o}},{key:"handleDataDomainChanged",value:function(n,r,C){const{views:o}=this.state;if(o[n].initialXDomain=r,o[n].initialYDomain=C,this.xScales[n]=tg().domain(r),this.yScales[n]=tg().domain(C),this.zoomLocks[n]){const a=this.zoomLocks[n],s=YC(a);for(let A=0;AAle)return!1;const A=Mg(this.state.views);for(let l=0;lc&&ru)return!1}return!0}},{key:"handleAddView",value:function(n){const r=Mg(this.state.views),C=n,o=[];n.layout.w===12&&(n.layout.w=6);for(let A=0;A{const c=A[1]-l[1];return c===0?A[0]-l[0]:c});const a=JSON.stringify(C),s=JSON.parse(a);s.initialXDomain=this.xScales[s.uid].domain(),s.initialYDomain=this.yScales[s.uid].domain(),[[s.layout.x,s.layout.y]]=o,s.uid=cg.nice(),s.layout.i=s.uid,Is(s.tracks,A=>{this.addCallbacks(s.uid,A)}),this.setState(A=>{const l=JSON.parse(JSON.stringify(A.views));return l[s.uid]=s,{views:l}})}},{key:"handleSelectedAssemblyChanged",value:function(n,r,C,o){const{views:a}=this.state;a[n].genomePositionSearchBox.chromInfoId=r,a[n].genomePositionSearchBox.autocompleteId=C,a[n].genomePositionSearchBox.autocompleteServer=o}},{key:"createGenomePostionSearchBoxEntry",value:function(n,r){let C=n;const o={autocompleteServer:pz,chromInfoServer:pz,visible:!1};return C||(C=JSON.parse(JSON.stringify(o))),C.autocompleteServer||(C.autocompleteServer=o.autocompleteServer),C.chromInfoId||(C.chromInfoId=r),C.chromInfoServer||(C.chromInfoServer=o.chromInfoServer),C.visible||(C.visible=!1),C}},{key:"handleTogglePositionSearchBox",value:function(n){const r=this.state.views[n];r.genomePositionSearchBoxVisible=!r.genomePositionSearchBoxVisible;const C={};Is(r.tracks,s=>{s.coordSystem&&(C[s.coordSystem]||(C[s.coordSystem]=0),C[s.coordSystem]+=1)});const o=YC(C).sort((s,A)=>A[1]-s[1]);let a="hg19";o.length&&(a=o[0][0]),r.genomePositionSearchBox=this.createGenomePostionSearchBoxEntry(r.genomePositionSearchBox,a),r.genomePositionSearchBox.visible=!r.genomePositionSearchBox.visible,this.refreshView(),this.setState({configMenuUid:null})}},{key:"handleTrackOptionsChanged",value:function(n,r,C){const o=this.state.views[n],a=nC(o.tracks,r);a&&(a.options=Object.assign(a.options,C),this.mounted&&(this.setState(s=>({views:s.views})),this.adjustSplitHeatmapTrackOptions(a,C,o.tracks,n)))}},{key:"adjustSplitHeatmapTrackOptions",value:function(n,r,C,o){n.type==="heatmap"&&(r.extent==="upper-right"&&C.center[0].type==="combined"&&C.center[0].contents.length>1&&C.center[0].contents.some(a=>{if(a.type==="heatmap"&&a.uid!==n.uid&&a.options.extent!=="lower-left"){const s={...a.options,extent:"lower-left",labelPosition:"bottomLeft",colorbarPosition:"bottomLeft"},A={...r,labelPosition:"topRight",colorbarPosition:"topRight"};return this.handleTrackOptionsChanged(o,a.uid,s),this.handleTrackOptionsChanged(o,n.uid,A),!0}return!1}),r.extent==="lower-left"&&r.extent==="lower-left"&&C.center[0].type==="combined"&&C.center[0].contents.length>1&&C.center[0].contents.some(a=>{if(a.type==="heatmap"&&a.uid!==n.uid&&a.options.extent!=="upper-right"){const s={...a.options,extent:"upper-right",labelPosition:"topRight",colorbarPosition:"topRight"},A={...r,labelPosition:"bottomLeft",colorbarPosition:"bottomLeft"};return this.handleTrackOptionsChanged(o,a.uid,s),this.handleTrackOptionsChanged(o,n.uid,A),!0}return!1}))}},{key:"handleViewOptionsChanged",value:function(n,r){const C=this.state.views[n];C&&(C.options=Object.assign(C.options||{},r),this.mounted&&this.setState(o=>({views:o.views})))}},{key:"isTrackValid",value:function(n,r){return!(n.type==="viewport-projection-center"&&!r.has(n.fromViewUid))}},{key:"removeInvalidTracks",value:function(n){const r=new Set(HC(n));for(const C of Mg(n))for(const o of["left","top","center","right","bottom"])C.tracks&&C.tracks.hasOwnProperty(o)&&(C.tracks[o]=C.tracks[o].filter(a=>this.isTrackValid(a,r)),C.tracks[o].forEach(a=>{a.type==="combined"&&(a.contents=a.contents.filter(s=>this.isTrackValid(s,r)))}));return n}},{key:"processViewConfig",value:function(n){let{views:r}=n,C={};return(!n.views||n.views.length===0)&&(console.warn("No views provided in viewConfig"),r=[{editable:!0,tracks:{}}]),r.forEach(o=>{o.tracks&&qGe(o.tracks),o.uid||(o.uid=cg.nice()),C[o.uid]=o,this.zoomToDataExtentOnInit.has(o.uid)&&this.zoomToDataExtentOnInit.delete(o.uid),o.initialXDomain?(o.initialXDomain[0]=+o.initialXDomain[0],o.initialXDomain[1]=+o.initialXDomain[1]):(o.initialXDomain=[0,100],this.zoomToDataExtentOnInit.add(o.uid)),o.initialYDomain?(o.initialXDomain[0]=+o.initialXDomain[0],o.initialXDomain[1]=+o.initialXDomain[1]):o.initialYDomain=[o.initialXDomain[0],o.initialXDomain[1]],this.xScales[o.uid]||(this.xScales[o.uid]=tg().domain(o.initialXDomain)),this.yScales[o.uid]||(this.yScales[o.uid]=tg().domain(o.initialYDomain)),Is(o.tracks,a=>{if(a.uid||(a.uid=cg.nice()),this.addCallbacks(o.uid,a),this.addDefaultTrackOptions(a),a.contents)for(const s of a.contents)this.addDefaultTrackOptions(s)}),o.layout?o.layout.i=o.uid:o.layout=this.generateViewLayout(o)}),this.deserializeZoomLocks(n),this.deserializeLocationLocks(n),this.deserializeValueScaleLocks(n),C=this.removeInvalidTracks(C),C}},{key:"handleWindowFocused",value:function(){}},{key:"rangeSelectionHandler",value:function(n){this.rangeSelection=n,this.apiPublish("rangeSelection",n)}},{key:"offViewChange",value:function(n){this.viewChangeListener.splice(n,1)}},{key:"onViewChange",value:function(n){return this.viewChangeListener.push(n)-1}},{key:"triggerViewChange",value:function(){this.viewChangeListener.forEach(n=>n(this.getViewsAsString()))}},{key:"getGenomeLocation",value:function(n){return $Q.get(this.state.views[n].chromInfoPath).then(r=>bve(this.xScales[n],this.yScales[n],r))}},{key:"offLocationChange",value:function(n,r){this.removeScalesChangedListener(n,r)}},{key:"zoomTo",value:function(n,r,C,o,a,s){if(!(n in this.setCenters))throw Error(`Invalid viewUid. Current uuids: ${Object.keys(this.setCenters).join(",")}`);if(Number.isNaN(+r)||Number.isNaN(+C)){const u=[r,C].join(", ");console.warn([`Invalid coordinates (${u}). All coordinates need to be numbers and should represent absolute coordinates (not chromosome - coordinates).`].join(" "));return}(Number.isNaN(+o)||Number.isNaN(+a)||o===null||a===null)&&(o=C,a=r);const[A,l,c]=Si(this.xScales[n].copy().domain([C,r]),this.yScales[n].copy().domain([o,a]));this.setCenters[n](A,l,c,!1,s)}},{key:"zoomToGene",value:function(n,C,r,o){if(!(n in this.setCenters))throw Error(`Invalid viewUid. Current uuids: ${Object.keys(this.setCenters).join(",")}`);if(!this.state.views[n].genomePositionSearchBox||!this.state.views[n].genomePositionSearchBox.autocompleteServer||!this.state.views[n].genomePositionSearchBox.autocompleteId||!this.state.views[n].chromInfoPath){console.warn("Please set chromInfoPath, autocompleteServer, and autocompleteId to use the zoomToGene API");return}this.suggestGene(n,C,a=>{if(a){const s=a.find(A=>A.geneName.toLowerCase()===C.toLowerCase());if(s){const{chr:A,txStart:l,txEnd:c}=s;Js(this.state.views[n].chromInfoPath,u=>{const d=u.chrToAbs([A,l])-r,h=u.chrToAbs([A,c])+r,[m,f,b]=Si(this.xScales[n].copy().domain([d,h]),this.yScales[n].copy().domain([d,h]));this.setCenters[n](m,f,b,!1,o)},this.pubSub)}else console.warn(`Couldn't find the gene symbol: ${C}`)}})}},{key:"suggestGene",value:function(n,C,r){if(!(n in this.setCenters))throw Error(`Invalid viewUid. Current uuids: ${Object.keys(this.setCenters).join(",")}`);if(!this.state.views[n].genomePositionSearchBox||!this.state.views[n].genomePositionSearchBox.autocompleteServer||!this.state.views[n].genomePositionSearchBox.autocompleteId){console.warn("Please set autocompleteServer and autocompleteId to use the suggestGene API");return}const o=this.state.views[n].genomePositionSearchBox.autocompleteServer,a=this.state.views[n].genomePositionSearchBox.autocompleteId,s=`${o}/suggest/?d=${a}&ac=${C.toLowerCase()}`;vt.json(s,$o,this.pubSub).then(A=>{r(A)}).catch(A=>console.error(A))}},{key:"onLocationChange",value:function(n,C,r){const o=Object.keys(this.state.views);if(!o.length)return this.unsetOnLocationChange.push({viewId:n,callback:C,callbackId:r}),null;if(n=typeof n>"u"&&o.length===1?o[0]:n,typeof n>"u"||o.indexOf(n)===-1)return console.error("onLocationChange either missing a viewId or passed an invalid viewId: ",n),null;const a=this.state.views[n],s=(l,c)=>{C({xDomain:l.domain(),yDomain:c.domain(),xRange:l.range(),yRange:c.range()})};let A=1;return this.scalesChangedListeners[a.uid]&&(A=Object.keys(this.scalesChangedListeners[a.uid]).filter(l=>l.indexOf(LZ)===0).map(l=>parseInt(l.slice(LZ.length+1),10)).reduce((l,c)=>Math.max(l,c),0)+1),this.addScalesChangedListener(a.uid,`${LZ}.${A}`,s),r&&r(`${LZ}.${A}`),A}},{key:"getTiledPlotAtPosition",value:function(n,C){let r;const o=Eg(this.state.views);for(let a=0;a=c&&n<=d,m=C>=l&&C<=u;if(h&&m){r=s;break}}return r}},{key:"mouseMoveHandler",value:function(n){if(!this.topDiv||this.state.modal)return;const C=n.clientX,r=n.clientY,o=zg(n,this.topDiv);o[1]+=this.scrollTop;const a=this.getTiledPlotAtPosition(C,r),s=a?a.listTracksAtPosition(o[0],o[1],!0).map(h=>h.originalTrack||h):[],A=s.find(h=>!h.isAugmentationTrack),l=A?[o[0]-A.position[0],o[1]-A.position[1]]:o;let c=-1,u=-1;A&&(c=A.flipText?A._xScale.invert(l[1]):A._xScale.invert(l[0]),u=A.is2d?A._yScale.invert(l[1]):c);const d={x:o[0],y:o[1],relTrackX:A&&A.flipText?l[1]:l[0],relTrackY:A&&A.flipText?l[0]:l[1],dataX:c,dataY:u,isFrom2dTrack:!!(A&&A.is2d),isFromVerticalTrack:!!(A&&A.flipText),track:A,origEvt:n,sourceUid:this.uid,hoveredTracks:s,noHoveredTracks:s.length===0};if(this.pubSub.publish("app.mouseMove",d),this.isBroadcastMousePositionGlobally){const h={...d};h.origEvt=void 0,h.track=void 0,h.hoveredTracks=void 0,delete h.origEvt,delete h.track,delete h.hoveredTracks,PG.publish("higlass.mouseMove",h)}this.apiPublish("cursorLocation",{absX:C,absY:r,relX:d.x,relY:d.y,relTrackX:d.relTrackX,relTrackY:d.relTrackY,dataX:d.dataX,dataY:d.dataY,isFrom2dTrack:d.isFrom2dTrack,isFromVerticalTrack:d.isFromVerticalTrack}),this.showHoverMenu(d)}},{key:"getMinMaxValue",value:function(n,C,r,o){const a=UZ(this.tiledPlots,n,C);if(!a){console.warn(`Track with ID: ${C} not found!`);return}if(!a.minVisibleValueInTiles||!a.maxVisibleValueInTiles){console.warn(`Track ${C} doesn't support the retrieval of min or max values.`);return}return r&&a.getAggregatedVisibleValue?[a.getAggregatedVisibleValue("min"),a.getAggregatedVisibleValue("max")]:[a.minVisibleValueInTiles(o),a.maxVisibleValueInTiles(o)]}},{key:"showHoverMenu",value:function(n){const C=n.track&&n.track.getMouseOverHtml?n.track.getMouseOverHtml(n.relTrackX,n.relTrackY):"";if(n.track!==this.prevMouseHoverTrack&&this.prevMouseHoverTrack&&this.prevMouseHoverTrack.stopHover&&this.prevMouseHoverTrack.stopHover(),this.prevMouseHoverTrack=n.track,this.zooming)return;const r=C&&C.length?[1]:[];let o=hg("body").selectAll(".track-mouseover-menu").data(r);o.exit().remove(),o.enter().append("div").classed("track-mouseover-menu",!0).classed(Cf["track-mouseover-menu"],!0),o=hg("body").selectAll(".track-mouseover-menu");const a=zg(n.origEvt,hg("body").node()),s=[a[0]-window.scrollX,a[1]-window.scrollY];if(o.style("left",`${s[0]}px`).style("top",`${s[1]}px`),!o.node())return;const A=o.node().getBoundingClientRect();A.x+A.width>window.innerWidth&&o.style("left",`${s[0]-A.width}px`),A.y+A.height>window.innerHeight&&o.style("top",`${s[1]-A.height}px`),o.html(C)}},{key:"hideHoverMenu",value:function(){hg("body").selectAll(".track-mouseover-menu").remove()}},{key:"closeCustomDialog",value:function(){this.setState(n=>({customDialog:null}))}},{key:"appClickHandler",value:function(n){this.apiPublish("click",n)}},{key:"canvasClickHandler",value:function(n){const C=n.nativeEvent||n,r=C.clientX,o=C.clientY,a=this.getTiledPlotAtPosition(r,o),s=zg(C,this.topDiv);s[1]+=this.scrollTop;const A=a?a.listTracksAtPosition(s[0],s[1],!0).map(f=>f.originalTrack||f):[],l=A.find(f=>!f.isAugmentationTrack),c=l?[s[0]-l.position[0],s[1]-l.position[1]]:s,u=l&&l.flipText?c[1]:c[0],d=l&&l.flipText?c[0]:c[1];for(const f of this.iterateOverTracks()){const b=UZ(this.tiledPlots,f.viewId,f.trackId);b.respondsToPosition(s[0],s[1])||b.clickOutside()}const h=[];for(const f of A)if(f.childTracks){for(const b of f.childTracks)h.push({trackUid:b.context.trackUid,viewUid:b.context.viewUid,trackType:b.context.trackType,data:b.click(u,d,n)});h.push({trackUid:f.context.trackUid,viewUid:f.context.viewUid,trackType:f.context.trackType,data:{type:"generic",event:n}})}else h.push({trackUid:f.context.trackUid,viewUid:f.context.viewUid,trackType:f.context.trackType,data:f.click(u,d,n)});const m=[];h.forEach((f,b)=>{const p=UZ(this.tiledPlots,f.viewUid,f.trackUid);if(typeof p.clickDialog=="function"){const y=p.clickDialog();y&&m.push(y)}}),m.length>0&&this.setState(f=>({customDialog:m})),this.pubSub.publish("app.click",h)}},{key:"mouseMoveZoomHandler",value:function(n){this.apiPublish("mouseMoveZoom",n)}},{key:"geneSearchHandler",value:function(n){this.apiPublish("geneSearch",n)}},{key:"mouseDownHandler",value:function(n){}},{key:"onScrollHandler",value:function(){this.props.options.sizeMode===vZ&&(this.scrollTop=this.scrollContainer.scrollTop,this.pixiStage.y=-this.scrollTop,this.pubSub.publish("app.scroll",this.scrollTop),this.animate())}},{key:"setTrackValueScaleLimits",value:function(n,C,r,o){const a=UZ(this.tiledPlots,n,C);if(!a){console.warn(`Could't find track: ${C}`);return}a.setFixedValueScaleMin&&a.setFixedValueScaleMax?(a.setFixedValueScaleMin(r),a.setFixedValueScaleMax(o),a.rerender(a.options,!0),a.animate()):console.warn("Track doesn't support fixed value scales.")}},{key:"setChromInfo",value:function(n,C){Js(n,r=>{this.chromInfo=r,C()},this.pubSub)}},{key:"onMouseLeaveHandler",value:function(){this.pubSub.publish("app.mouseLeave"),this.hideHoverMenu(),this.animate()}},{key:"onBlurHandler",value:function(){this.animate()}},{key:"isZoomFixed",value:function(n){return this.props.zoomFixed||this.props.options.zoomFixed||this.state.viewConfig.zoomFixed||this.props.options.sizeMode===vZ||n&&n.zoomFixed}},{key:"trackDimensionsModifiedHandler",value:function(n){const C=this.state.views[n.viewId];if(!C)return;const r=gr(C.tracks,n.trackId);r&&(n.height!==void 0&&(r.height=n.height),n.width!==void 0&&(r.width=n.width),this.adjustLayoutToTrackSizes(C),this.setState(o=>({views:o.views})))}},{key:"wheelHandler",value:function(n){if(this.state.modal||this.props.options.sizeMode===vZ)return;const C=n.nativeEvent||n,r=n.target===this.canvasElement;if(!Ive(C.target,this.topDiv)||this.isZoomFixed())return;const o=C.clientX,a=C.clientY,s=this.getTiledPlotAtPosition(o,a);if(this.apiStack.wheel&&this.apiStack.wheel.length>0){const A=zg(C,this.topDiv);A[1]+=this.scrollTop;const l=s?s.listTracksAtPosition(A[0],A[1],!0).map(h=>h.originalTrack||h):[],c=l.find(h=>!h.isAugmentationTrack),u=c?[A[0]-c.position[0],A[1]-c.position[1]]:A,d={x:A[0],y:A[1],relTrackX:c&&c.flipText?u[1]:u[0],relTrackY:c&&c.flipText?u[0]:u[1],track:c,origEvt:C,sourceUid:this.uid,hoveredTracks:l,noHoveredTracks:l.length===0};this.apiPublish("wheel",d)}if(C.forwarded||r){n.stopPropagation(),n.preventDefault();return}if(n.preventDefault(),s){const{trackRenderer:A}=s;C.forwarded=!0,C&&(BX(C,A.eventTracker),C.preventDefault())}}},{key:"render",value:function(){this.tiledAreasDivs={},this.tiledAreas=N.createElement("div",{className:Cf["tiled-area"]}),this.mounted&&(this.tiledAreas=Eg(this.state.views).map(A=>{const l=A.uid===this.state.addTrackPositionMenuUid?this.state.addTrackPositionMenuPosition:null;let c=null;if(this.state.chooseViewHandler){let m="transparent";this.state.mouseOverOverlayUid===A.uid&&(m="green"),c=N.createElement("div",{className:"tiled-plot-overlay",onClick:()=>this.state.chooseViewHandler(A.uid),onMouseEnter:()=>this.handleOverlayMouseEnter(A.uid),onMouseLeave:()=>this.handleOverlayMouseLeave(A.uid),onMouseMove:()=>this.handleOverlayMouseEnter(A.uid),style:{position:"absolute",width:"100%",height:"100%",background:m,opacity:.3,zIndex:1}})}const u=N.createElement(e8t,{key:`tp${A.uid}`,ref:m=>{this.tiledPlots[A.uid]=m},addTrackPosition:this.state.addTrackPositionView===A.uid?this.state.addTrackPosition:null,addTrackPositionMenuPosition:l,canvasElement:this.state.canvasElement,chooseTrackHandler:this.state.chooseTrackHandler?m=>this.state.chooseTrackHandler(A.uid,m):null,customDialog:this.state.customDialog,closeCustomDialog:()=>this.closeCustomDialog(),chromInfoPath:A.chromInfoPath,disableTrackMenu:this.isTrackMenuDisabled(),draggingHappening:this.state.draggingHappening!==null,editable:this.isEditable(),getLockGroupExtrema:m=>this.getLockGroupExtrema(A.uid,m),initialXDomain:A.initialXDomain,initialYDomain:A.initialYDomain,isShowGlobalMousePosition:this.isShowGlobalMousePosition,isValueScaleLocked:m=>this.isValueScaleLocked(A.uid,m),marginBottom:this.viewMarginBottom,marginLeft:this.viewMarginLeft,marginRight:this.viewMarginRight,marginTop:this.viewMarginTop,metaTracks:A.metaTracks,mouseTool:this.state.mouseTool,onChangeTrackData:(m,f)=>this.handleChangeTrackData(A.uid,m,f),onChangeTrackType:(m,f)=>this.handleChangeTrackType(A.uid,m,f),onCloseTrack:m=>this.handleCloseTrack(A.uid,m),onDataDomainChanged:(m,f)=>this.handleDataDomainChanged(A.uid,m,f),onLockValueScale:m=>this.handleLockValueScale(A.uid,m),onMouseMoveZoom:this.mouseMoveZoomHandler.bind(this),onNewTilesLoaded:m=>this.handleNewTilesLoaded(A.uid,m),onNoTrackAdded:this.handleNoTrackAdded.bind(this),onRangeSelection:this.rangeSelectionHandler.bind(this),onResizeTrack:this.triggerViewChangeDb,onScalesChanged:(m,f)=>this.handleScalesChanged(A.uid,m,f),onTrackOptionsChanged:(m,f)=>this.handleTrackOptionsChanged(A.uid,m,f),onTrackPositionChosen:this.handleTrackPositionChosen.bind(this),onTracksAdded:(m,f,b)=>this.handleTracksAdded(A.uid,m,f,b),onUnlockValueScale:m=>this.handleUnlockValueScale(A.uid,m),onValueScaleChanged:m=>this.syncValueScales(A.uid,m),overlays:A.overlays,paddingBottom:this.viewPaddingBottom,paddingLeft:this.viewPaddingLeft,paddingRight:this.viewPaddingRight,paddingTop:this.viewPaddingTop,pixiRenderer:this.pixiRenderer,pixiStage:this.pixiStage,pluginDataFetchers:this.pluginDataFetchers,pluginTracks:this.pluginTracks,rangeSelection1dSize:this.state.rangeSelection1dSize,rangeSelectionToInt:this.state.rangeSelectionToInt,registerDraggingChangedListener:m=>this.addDraggingChangedListener(A.uid,A.uid,m),removeDraggingChangedListener:m=>this.removeDraggingChangedListener(A.uid,A.uid,m),setCentersFunction:m=>{this.setCenters[A.uid]=m},svgElement:this.state.svgElement,tracks:A.tracks,trackSourceServers:this.state.viewConfig.trackSourceServers,uid:A.uid,verticalMargin:this.verticalMargin,viewOptions:A.options,xDomainLimits:A.xDomainLimits,yDomainLimits:A.yDomainLimits,zoomable:!this.isZoomFixed(A),zoomLimits:this.calculateZoomLimits(A,A.initialXDomain),zoomToDataExtentOnInit:()=>this.zoomToDataExtentOnInit.has(A.uid)}),d=(m,f)=>A.genomePositionSearchBox?N.createElement(D8t,{key:`gpsb${A.uid}`,ref:b=>{this.genomePositionSearchBoxes[A.uid]=b},autocompleteId:A.genomePositionSearchBox.autocompleteId,autocompleteServer:A.genomePositionSearchBox.autocompleteServer,chromInfoId:A.genomePositionSearchBox.chromInfoId,chromInfoPath:A.genomePositionSearchBox.chromInfoPath,chromInfoServer:A.genomePositionSearchBox.chromInfoServer,hideAvailableAssemblies:A.genomePositionSearchBox.hideAvailableAssemblies,isFocused:m,onFocus:f,onGeneSearch:this.geneSearchHandler.bind(this),onSelectedAssemblyChanged:(b,p,y)=>this.handleSelectedAssemblyChanged(A.uid,b,p,y),registerViewportChangedListener:b=>this.addScalesChangedListener(A.uid,A.uid,b),removeViewportChangedListener:()=>this.removeScalesChangedListener(A.uid,A.uid),setCenters:(b,p,y,Z)=>this.setCenters[A.uid](b,p,y,!1,Z),trackSourceServers:this.state.viewConfig.trackSourceServers,twoD:!!(A.tracks.left.length||A.tracks.right.length||A.tracks.center.length)}):null,h=this.isEditable()&&!this.isViewHeaderDisabled()&&!this.state.viewConfig.hideHeader?N.createElement(u6t,{ref:m=>{this.viewHeaders[A.uid]=m},getGenomePositionSearchBox:d,isGenomePositionSearchBoxVisible:A.genomePositionSearchBox&&A.genomePositionSearchBox.visible,mouseTool:this.state.mouseTool,onAddView:()=>this.handleAddView(A),onClearView:()=>this.handleClearView(A.uid),onCloseView:()=>this.handleCloseView(A.uid),onEditViewConfig:this.handleEditViewConfigBound,onExportPNG:this.handleExportPNG.bind(this),onExportSVG:this.handleExportSVG.bind(this),onExportViewsAsJSON:this.handleExportViewAsJSON.bind(this),onExportViewsAsLink:this.handleExportViewsAsLink.bind(this),onLockLocation:m=>this.handleYankFunction(m,this.handleLocationLockChosen.bind(this)),onLockZoom:m=>this.handleYankFunction(m,this.handleZoomLockChosen.bind(this)),onLockZoomAndLocation:m=>this.handleYankFunction(m,(f,b)=>{this.handleZoomLockChosen(f,b),this.handleLocationLockChosen(f,b)}),onProjectViewport:this.handleProjectViewport.bind(this),onTakeAndLockZoomAndLocation:m=>{this.handleYankFunction(m,(f,b)=>{this.handleZoomYanked(f,b),this.handleLocationYanked(f,b),this.handleZoomLockChosen(f,b),this.handleLocationLockChosen(f,b)})},onTogglePositionSearchBox:this.handleTogglePositionSearchBox.bind(this),onTrackPositionChosen:m=>this.handleTrackPositionChosen(A.uid,m),onUnlockLocation:m=>this.handleUnlock(m,this.locationLocks),onUnlockZoom:m=>this.handleUnlock(m,this.zoomLocks),onUnlockZoomAndLocation:m=>{this.handleUnlock(m,this.zoomLocks),this.handleUnlock(m,this.locationLocks)},onViewOptionsChanged:m=>this.handleViewOptionsChanged(A.uid,m),onYankLocation:m=>this.handleYankFunction(m,this.handleLocationYanked.bind(this)),onYankZoom:m=>this.handleYankFunction(m,this.handleZoomYanked.bind(this)),onYankZoomAndLocation:m=>this.handleYankFunction(m,(f,b)=>{this.handleZoomYanked(f,b),this.handleLocationYanked(f,b)}),onZoomToData:m=>this.handleZoomToData(m),viewUid:A.uid}):null;return N.createElement("div",{key:A.uid,ref:m=>{this.tiledAreasDivs[A.uid]=m},className:Cf["tiled-area"]},h,u,c)}));let n=this.mounted?Object.values(this.state.views).filter(A=>A.layout).map(A=>A.layout):[];n=JSON.parse(JSON.stringify(n));const C=this.isEditable()?XGe:0,r=this.isEditable()?HGe:0,o=+this.props.options.containerPaddingX>=0?+this.props.options.containerPaddingX:C,a=+this.props.options.containerPaddingY>=0?+this.props.options.containerPaddingY:r,s=N.createElement(Yot,{ref:A=>{this.gridLayout=A},cols:12,containerPadding:[o,a],draggableHandle:`.${Vr["multitrack-header-grabber"]}`,isDraggable:this.isEditable(),isResizable:this.isEditable(),layout:n,margin:this.isEditable()?[10,10]:[0,0],measureBeforeMount:!1,onBreakpointChange:this.onBreakpointChange.bind(this),onDragStart:this.handleDragStart.bind(this),onDragStop:this.handleDragStop.bind(this),onLayoutChange:this.handleLayoutChange.bind(this),onResize:this.resizeHandler.bind(this),rowHeight:this.state.rowHeight,useCSSTransforms:this.mounted,verticalCompact:this.state.viewConfig.compactLayout,width:this.state.width},this.tiledAreas);return N.createElement("div",{key:this.uid,ref:A=>{this.topDiv=A},className:Xg("higlass",{"higlass-dark-theme":this.theme===gI,"higlass-container-overflow":this.props.options.sizeMode===ole||this.props.options.sizeMode===vZ}),onMouseLeave:this.onMouseLeaveHandlerBound,onMouseMove:this.mouseMoveHandlerBound},N.createElement(JWt,{value:this.pubSub},N.createElement(fzt,{value:this.modal},N.createElement(NWt,{value:this.theme},this.state.modal,N.createElement("canvas",{key:this.uid,ref:A=>{this.canvasElement=A},onClick:this.canvasClickHandlerBound,className:Cf["higlass-canvas"]}),N.createElement("div",{ref:A=>{this.scrollContainer=A},className:Xg("higlass-scroll-container",{"higlass-scroll-container-overflow":this.props.options.sizeMode===ole,"higlass-scroll-container-scroll":this.props.options.sizeMode===vZ}),onScroll:this.onScrollHandlerBound},N.createElement("div",{ref:A=>{this.divDrawingSurface=A},className:Xg("higlass-drawing-surface",Cf["higlass-drawing-surface"])},s),N.createElement("svg",{ref:A=>{this.svgElement=A},className:Cf["higlass-svg"],style:{position:"absolute",width:"100%",height:"100%",left:0,top:0,pointerEvents:"none"}}))))))}}]),I}(N.Component);dy.defaultProps={options:{},zoomFixed:!1,compactLayout:!0};dy.propTypes={getApi:L.func,options:L.object,viewConfig:L.oneOfType([L.string,L.object]).isRequired,zoomFixed:L.bool,compactLayout:L.bool};function ktg(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function ale(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function BH(e){return BH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(I){return I.__proto__||Object.getPrototypeOf(I)},BH(e)}const Ptg=(e,[g,I,i,n],C)=>{C.options.colorbarPosition||(C.options.colorbarPosition="hidden"),C.options.labelPosition||(C.options.labelPosition="hidden");const r="arbitary-id",a=_tg(e,{editable:!1,zoomFixed:!1,views:[{uid:r,initialXDomain:[g,I],initialYDomain:[i,n],tracks:{center:[C]},layout:{w:12,h:12,x:0,y:0,moved:!1,static:!1}}]},{sizeMode:"bounded"});return{id:r,hgApi:a}};let Jtg=function(e){Dtg(I,e);var g=xtg(I);function I(i){var n;return ktg(this,I),n=g.call(this,i),n.id=`id-${Math.random()}`,n}return Ytg(I,[{key:"componentDidMount",value:function(){this.initTrackViewer()}},{key:"shouldComponentUpdate",value:function(n){const{x:C,y:r,width:o,height:a}=n;return this.zoomTo(C,r,o,a),!1}},{key:"initTrackViewer",value:function(){const{trackConfig:n,x:C,y:r,width:o,height:a}=this.props,s=document.getElementById(this.id),{id:A,hgApi:l}=Ptg(s,[C,C+o,r,r+a],n);this.viewUid=A,this.viewer=l}},{key:"zoomTo",value:function(n,C,r,o){this.viewer.zoomTo(this.viewUid,n,n+r,C,C+o)}},{key:"render",value:function(){return N.createElement("div",{id:this.id,style:{height:"100%",width:"100%"}})}}]),I}(N.Component);Jtg.propTypes={trackConfig:L.object,width:L.number,height:L.number,x:L.number,y:L.number};const Otg=(e,g,I)=>{const i=N.createRef();return jI.render(N.createElement(dy,{ref:i,options:I||{},viewConfig:g}),e),i.current},_tg=(e,g,I)=>Otg(e,g,I).api;var u2e={exports:{}};(function(e,g){(function(I,i){e.exports=i()})(typeof window<"u"?window:yI,function(){if(typeof window>"u")return null;var I=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")(),i=I.requestAnimationFrame||I.mozRequestAnimationFrame||I.webkitRequestAnimationFrame||function(A){return I.setTimeout(A,20)},n=I.cancelAnimationFrame||I.mozCancelAnimationFrame||I.webkitCancelAnimationFrame||function(A){I.clearTimeout(A)};function C(A,l){var c=Object.prototype.toString.call(A),u=c==="[object Array]"||c==="[object NodeList]"||c==="[object HTMLCollection]"||c==="[object Object]"||typeof jQuery<"u"&&A instanceof jQuery||typeof Elements<"u"&&A instanceof Elements,d=0,h=A.length;if(u)for(;d=X&&(H+=R.value),R.mode==="max"&&W<=X&&(H+=R.value),V[Y]||(V[Y]=""),H&&(" "+V[Y]+" ").indexOf(" "+H+" ")===-1&&(V[Y]+=" "+H));for(var x in K)K.hasOwnProperty(x)&&(V[K[x]]?this.element.setAttribute(K[x],V[K[x]].substr(1)):this.element.removeAttribute(K[x]))}}function c(G,v){G.elementQueriesSetupInformation||(G.elementQueriesSetupInformation=new l(G,v)),G.elementQueriesSensor||(G.elementQueriesSensor=new I(G,function(){G.elementQueriesSetupInformation.call()}))}function u(G,v,w,R){if(typeof r[G]>"u"){r[G]=[];var S=o.length;C.innerHTML+=` -`+G+" {animation: 0.1s element-queries;}",C.innerHTML+=` -`+G+" > .resize-sensor {min-width: "+S+"px;}",o.push(G)}r[G].push({mode:v,property:w,value:R})}function d(G){var v;if(document.querySelectorAll&&(v=G?G.querySelectorAll.bind(G):document.querySelectorAll.bind(document)),!v&&typeof $$<"u"&&(v=$$),!v&&typeof jQuery<"u"&&(v=jQuery),!v)throw"No document.querySelectorAll, jQuery or Mootools's $$ found.";return v}function h(G){var v=d(G);for(var w in r)if(r.hasOwnProperty(w))for(var R=v(w,G),S=0,X=R.length;Sw[P].minWidth&&(J=P);if(J||(J=S),X!==J)if(W[J])v[X].style.display="none",v[J].style.display="block",X=J;else{var ge=new Image;ge.onload=function(){v[J].src=R[J],v[X].style.display="none",v[J].style.display="block",W[J]=!0,X=J},ge.src=R[J]}else v[J].src=R[J]}G.resizeSensorInstance=new I(G,x),x()}function f(){for(var G=d(),v=G("[data-responsive-image],[responsive-image]"),w=0,R=v.length;w img, [data-responsive-image] {overflow: hidden; padding: 0; } [responsive-image] > img, [data-responsive-image] > img {width: 100%;}",C.innerHTML+=` -@keyframes element-queries { 0% { visibility: inherit; } }`,document.getElementsByTagName("head")[0].appendChild(C),B=!0);for(var v=0,w=document.styleSheets.length;vg in e?Utg(e,g,{enumerable:!0,configurable:!0,writable:!0,value:I}):e[g]=I,rt=(e,g,I)=>(Qtg(e,typeof g!="symbol"?g+"":g,I),I),O$=(e,g,I)=>{if(!g.has(e))throw TypeError("Cannot "+I)},Dt=(e,g,I)=>(O$(e,g,"read from private field"),I?I.call(e):g.get(e)),pg=(e,g,I)=>{if(g.has(e))throw TypeError("Cannot add the same private member more than once");g instanceof WeakSet?g.add(e):g.set(e,I)},VC=(e,g,I,i)=>(O$(e,g,"write to private field"),i?i.call(e,I):g.set(e,I),I),SI=(e,g,I)=>(O$(e,g,"access private method"),I),fG,AS,sS,Ed,SH,wH,qO,m2e,_$,f2e,RH,e_,t_,p2e,g_,b2e,I_,y2e,jA;const jtg="#/definitions/GoslingSpec",$tg="http://json-schema.org/draft-07/schema#",qtg={Aggregate:{enum:["max","min","mean","bin","count"],type:"string"},Assembly:{anyOf:[{const:"hg38",type:"string"},{const:"hg19",type:"string"},{const:"hg18",type:"string"},{const:"hg17",type:"string"},{const:"hg16",type:"string"},{const:"mm10",type:"string"},{const:"mm9",type:"string"},{const:"unknown",type:"string"},{$ref:"#/definitions/ChromSizes"}]},AxisPosition:{enum:["none","top","bottom","left","right"],type:"string"},BamData:{additionalProperties:!1,description:"Binary Alignment Map (BAM) is the comprehensive raw data of genome sequencing; it consists of the lossless, compressed binary representation of the Sequence Alignment Map-files.",properties:{extractJunction:{description:"Determine whether to extract exon-to-exon junctions. __Default__: `false`",type:"boolean"},indexUrl:{description:"URL link to the index file of the BAM file",type:"string"},junctionMinCoverage:{description:"Determine the threshold of coverage when extracting exon-to-exon junctions. __Default__: `1`",type:"number"},loadMates:{description:"Load mates that are located in the same chromosome. __Default__: `false`",type:"boolean"},maxInsertSize:{description:"Determines the threshold of insert sizes for determining the structural variants. __Default__: `5000`",type:"number"},type:{const:"bam",type:"string"},url:{description:"URL link to the BAM data file",type:"string"}},required:["type","url","indexUrl"],type:"object"},BedData:{additionalProperties:!1,description:"BED file format",properties:{customFields:{description:"An array of strings, where each string is the name of a non-standard field in the BED file. If there are `n` custom fields, we assume that the last `n` columns of the BED file correspond to the custom fields.",items:{type:"string"},type:"array"},indexUrl:{description:"Specify the URL address of the data file index.",type:"string"},sampleLength:{description:"Specify the number of rows loaded from the URL.\n\n__Default:__ `1000`",type:"number"},type:{const:"bed",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"}},required:["type","url","indexUrl"],type:"object"},BeddbData:{additionalProperties:!1,description:"Regular BED or similar files can be pre-aggregated for the scalable data exploration. Find our more about this format at [HiGlass Docs](https://docs.higlass.io/data_preparation.html#bed-files).",properties:{exonIntervalFields:{description:"experimental",items:[{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"}},required:["index","name"],type:"object"},{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"}},required:["index","name"],type:"object"}],maxItems:2,minItems:2,type:"array"},genomicFields:{description:"Specify the name of genomic data fields.",items:{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"}},required:["index","name"],type:"object"},type:"array"},type:{const:"beddb",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"},valueFields:{description:"Specify the column indexes, field names, and field types.",items:{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"},type:{enum:["nominal","quantitative"],type:"string"}},required:["index","name","type"],type:"object"},type:"array"}},required:["type","url","genomicFields"],type:"object"},BigWigData:{additionalProperties:!1,properties:{aggregation:{$ref:"#/definitions/BinAggregate",description:'Determine aggregation function to apply within bins. __Default__: `"mean"`'},binSize:{description:"Binning the genomic interval in tiles (unit size: 256).",type:"number"},column:{description:'Assign a field name of the middle position of genomic intervals. __Default__: `"position"`',type:"string"},end:{description:'Assign a field name of the end position of genomic intervals. __Default__: `"end"`',type:"string"},start:{description:'Assign a field name of the start position of genomic intervals. __Default__: `"start"`',type:"string"},type:{const:"bigwig",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"},value:{description:'Assign a field name of quantitative values. __Default__: `"value"`',type:"string"}},required:["type","url"],type:"object"},BinAggregate:{enum:["mean","sum"],type:"string"},Channel:{anyOf:[{$ref:"#/definitions/ChannelDeep"},{$ref:"#/definitions/ChannelValue"}]},ChannelDeep:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/Y"},{$ref:"#/definitions/Row"},{$ref:"#/definitions/Color"},{$ref:"#/definitions/Size"},{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/Text"}]},ChannelValue:{additionalProperties:!1,properties:{value:{description:"Assign a constant value for a visual channel.",type:["number","string"]}},required:["value"],type:"object"},ChromSizes:{description:'Custom chromosome sizes, e.g., [["foo", 1000], ["bar", 300], ["baz", 240]]',items:{items:[{type:"string"},{type:"number"}],maxItems:2,minItems:2,type:"array"},type:"array"},Color:{additionalProperties:!1,properties:{domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},legend:{description:"Whether to display legend. __Default__: `false`",type:"boolean"},range:{$ref:"#/definitions/Range",description:"Determine the colors that should be bound to data value. Default properties are determined considering the field type."},scale:{enum:["linear","log"],type:"string"},scaleOffset:{description:"Whether to use offset of the domain proportionally. This is bound to brushes on the color legend. __Default__: `[0, 1]`",items:{type:"number"},maxItems:2,minItems:2,type:"array"},title:{description:"Title of the legend. __Default__: `undefined`",type:"string"},type:{description:"Specify the data type",enum:["quantitative","nominal"],type:"string"}},type:"object"},CoverageTransform:{additionalProperties:!1,description:"Aggregate rows and calculate coverage",properties:{endField:{type:"string"},groupField:{description:"The name of a nominal field to group rows by in prior to piling-up",type:"string"},newField:{type:"string"},startField:{type:"string"},type:{const:"coverage",type:"string"}},required:["type","startField","endField"],type:"object"},CsvData:{additionalProperties:!1,description:'Any small enough tabular data files, such as tsv, csv, BED, BEDPE, and GFF, can be loaded using "csv" data specification.',properties:{chromosomeField:{description:"Specify the name of chromosome data fields.",type:"string"},chromosomePrefix:{description:'Specify the chromosome prefix if chromosomes are denoted using a prefix besides "chr" or a number',type:"string"},genomicFields:{description:"Specify the name of genomic data fields.",items:{type:"string"},type:"array"},genomicFieldsToConvert:{description:"experimental",items:{additionalProperties:!1,properties:{chromosomeField:{type:"string"},genomicFields:{items:{type:"string"},type:"array"}},required:["chromosomeField","genomicFields"],type:"object"},type:"array"},headerNames:{description:"Specify the names of data fields if a CSV file does not contain a header.",items:{type:"string"},type:"array"},longToWideId:{description:"experimental",type:"string"},sampleLength:{description:"Specify the number of rows loaded from the URL.\n\n__Default:__ `1000`",type:"number"},separator:{description:"Specify file separator, __Default:__ ','",type:"string"},type:{const:"csv",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"}},required:["type","url"],type:"object"},DataDeep:{anyOf:[{$ref:"#/definitions/JsonData"},{$ref:"#/definitions/CsvData"},{$ref:"#/definitions/BedData"},{$ref:"#/definitions/BigWigData"},{$ref:"#/definitions/MultivecData"},{$ref:"#/definitions/BeddbData"},{$ref:"#/definitions/VectorData"},{$ref:"#/definitions/MatrixData"},{$ref:"#/definitions/BamData"},{$ref:"#/definitions/VcfData"},{$ref:"#/definitions/GffData"}]},DataTrack:{additionalProperties:!1,description:"Partial specification of `BasicSingleTrack` to use default visual encoding predefined by data type.",properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},data:{$ref:"#/definitions/DataDeep"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},width:{description:"Specify the track width in pixels.",type:"number"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["data"],type:"object"},DataTransform:{anyOf:[{$ref:"#/definitions/FilterTransform"},{$ref:"#/definitions/StrConcatTransform"},{$ref:"#/definitions/StrReplaceTransform"},{$ref:"#/definitions/LogTransform"},{$ref:"#/definitions/DisplaceTransform"},{$ref:"#/definitions/ExonSplitTransform"},{$ref:"#/definitions/GenomicLengthTransform"},{$ref:"#/definitions/SvTypeTransform"},{$ref:"#/definitions/CoverageTransform"},{$ref:"#/definitions/JsonParseTransform"}]},Datum:{additionalProperties:{type:["number","string"]},description:"Values in the form of JSON.",type:"object"},DisplaceTransform:{additionalProperties:!1,properties:{boundingBox:{additionalProperties:!1,properties:{endField:{description:"The name of a quantitative field that represents the end position.",type:"string"},groupField:{description:"The name of a nominal field to group rows by in prior to piling-up.",type:"string"},isPaddingBP:{description:"Whether to consider `padding` as the bp length.",type:"boolean"},padding:{description:"The padding around visual lements. Either px or bp",type:"number"},startField:{description:"The name of a quantitative field that represents the start position.",type:"string"}},required:["startField","endField"],type:"object"},maxRows:{description:"Specify maximum rows to be generated (default has no limit).",type:"number"},method:{$ref:"#/definitions/DisplacementType",description:"A string that specifies the type of displacement."},newField:{type:"string"},type:{const:"displace",type:"string"}},required:["type","boundingBox","method","newField"],type:"object"},Displacement:{additionalProperties:!1,properties:{padding:{type:"number"},type:{$ref:"#/definitions/DisplacementType"}},required:["type"],type:"object"},DisplacementType:{enum:["pile","spread"],type:"string"},DomainChr:{additionalProperties:!1,properties:{chromosome:{type:"string"}},required:["chromosome"],type:"object"},DomainChrInterval:{additionalProperties:!1,properties:{chromosome:{description:"If specified, only showing a certain interval in a chromosome.",type:"string"},interval:{items:{type:"number"},maxItems:2,minItems:2,type:"array"}},required:["chromosome","interval"],type:"object"},DomainInterval:{additionalProperties:!1,properties:{interval:{description:"Show a certain interval within entire chromosome",items:{type:"number"},maxItems:2,minItems:2,type:"array"}},required:["interval"],type:"object"},DummyTrack:{additionalProperties:!1,description:"A placeholder track. In contrast to other tracks, this track does not display any data. Instead it provides empty space for third party tools to display their data on top of.",properties:{_invalidTrack:{description:"internal",type:"boolean"},assembly:{const:"unknown",description:"No assemblies can be associated with a dummy track",type:"string"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},layout:{const:"linear",description:"Only linear layout are supported at this time",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},overlayOnPreviousTrack:{type:"boolean"},static:{const:!0,description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/DummyTrackStyle",description:"Defines how the track is styled"},title:{description:"Text that gets shown on the DummyTrack",type:"string"},type:{const:"dummy-track",description:"Used to specify the dummy track",type:"string"},width:{description:"Specify the track width in pixels.",type:"number"},zoomLimits:{description:"Unused property for DummyTrack",items:{type:"null"},maxItems:2,minItems:2,type:"array"}},required:["type"],type:"object"},DummyTrackStyle:{additionalProperties:!1,properties:{background:{description:"Background color of the track",type:"string"},outline:{description:"Color of the outline of the track",type:"string"},textFontSize:{description:"Specify the font size of the title",type:"number"},textFontWeight:{description:"Specify the font weight of the title.",enum:["bold","normal"],type:"string"},textStroke:{description:"Specify the stroke color of title.",type:"string"},textStrokeWidth:{description:"Specify the stroke width of the title.",type:"number"}},type:"object"},EventStyle:{additionalProperties:!1,description:"The styles defined here will be applied to the target marks of mouse events, such as a point mark after the user clicks on it.",properties:{arrange:{description:"Show event effects behind or in front of marks.",enum:["behind","front"],type:"string"},color:{description:"color of the marks when mouse events are triggered",type:"string"},opacity:{description:"opacity of the marks when mouse events are triggered",type:"number"},stroke:{description:"stroke color of the marks when mouse events are triggered",type:"string"},strokeOpacity:{type:"number"},strokeWidth:{description:"stroke width of the marks when mouse events are triggered",type:"number"}},type:"object"},ExonSplitTransform:{additionalProperties:!1,properties:{fields:{items:{additionalProperties:!1,properties:{chrField:{type:"string"},field:{type:"string"},newField:{type:"string"},type:{$ref:"#/definitions/FieldType"}},required:["field","type","newField","chrField"],type:"object"},type:"array"},flag:{additionalProperties:!1,properties:{field:{type:"string"},value:{type:["number","string"]}},required:["field","value"],type:"object"},separator:{type:"string"},type:{const:"exonSplit",type:"string"}},required:["type","separator","flag","fields"],type:"object"},FieldType:{enum:["genomic","nominal","quantitative"],type:"string"},FilterTransform:{anyOf:[{$ref:"#/definitions/OneOfFilter"},{$ref:"#/definitions/RangeFilter"},{$ref:"#/definitions/IncludeFilter"}]},GenomicDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}]},GenomicLengthTransform:{additionalProperties:!1,description:"Calculate genomic length using two genomic fields",properties:{endField:{type:"string"},newField:{type:"string"},startField:{type:"string"},type:{const:"genomicLength",type:"string"}},required:["type","startField","endField","newField"],type:"object"},GffData:{additionalProperties:!1,description:"Generic Feature Format Version 3 (GFF3) format data. It parses files that follow the [GFF3 specification](https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md).",properties:{attributesToFields:{description:'Specifies which attributes to include as a fields. GFF files have an "attributes" column which contains a list of attributes which are each tag-value pairs (`tag=value`). This option allows for specific attributes to be accessible as a field. For example, if you have an attribute called "gene_name" and you want label features on your track using those values, you can use this option so that you can use `"field": "gene_name"` in the schema.\n\nIf there is a single `value` corresponding to the `tag`, Gosling will parse that value as a string. If there are multiple `value`s corresponding to a `tag`, Gosling will parse it as a comma-separated list string. If a feature does not have a particular attribute, then the attribute value will be set to the `defaultValue`.',items:{additionalProperties:!1,properties:{attribute:{type:"string"},defaultValue:{type:"string"}},required:["attribute","defaultValue"],type:"object"},type:"array"},indexUrl:{description:"URL link to the tabix index file",type:"string"},sampleLength:{description:"The maximum number of samples to be shown on the track. Samples are uniformly randomly selected so that this threshold is not exceeded. __Default:__ `1000`",type:"number"},type:{const:"gff",type:"string"},url:{description:"URL link to the GFF file",type:"string"}},required:["type","url","indexUrl"],type:"object"},GoslingSpec:{anyOf:[{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"overlay",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},description:{type:"string"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{$ref:"#/definitions/PartialTrack"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["alignment","tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"stack",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},description:{type:"string"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},description:{type:"string"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},title:{type:"string"},tracks:{items:{$ref:"#/definitions/Track"},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},arrangement:{description:"Specify how multiple views are arranged.",enum:["parallel","serial","horizontal","vertical"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},description:{type:"string"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},arrangement:{description:"Specify how multiple views are arranged.",enum:["parallel","serial","horizontal","vertical"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},views:{description:"An array of view specifications",items:{anyOf:[{$ref:"#/definitions/SingleView"},{$ref:"#/definitions/MultipleViews"}]},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},title:{type:"string"},views:{description:"An array of view specifications",items:{anyOf:[{$ref:"#/definitions/SingleView"},{$ref:"#/definitions/MultipleViews"}]},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["views"],type:"object"}]},IncludeFilter:{additionalProperties:!1,properties:{field:{description:"A filter is applied based on the values of the specified data field",type:"string"},include:{description:"Check whether the value includes a substring.",type:"string"},not:{description:'when `{"not": true}`, apply a NOT logical operation to the filter.\n\n__Default:__ `false`',type:"boolean"},type:{const:"filter",type:"string"}},required:["field","include","type"],type:"object"},JsonData:{additionalProperties:!1,description:"The JSON data format allows users to include data directly in the Gosling's JSON specification.",properties:{chromosomeField:{description:"Specify the name of chromosome data fields.",type:"string"},genomicFields:{description:"Specify the name of genomic data fields.",items:{type:"string"},type:"array"},genomicFieldsToConvert:{description:"experimental",items:{additionalProperties:!1,properties:{chromosomeField:{type:"string"},genomicFields:{items:{type:"string"},type:"array"}},required:["chromosomeField","genomicFields"],type:"object"},type:"array"},sampleLength:{description:"Specify the number of rows loaded from the URL.\n\n__Default:__ `1000`",type:"number"},type:{const:"json",description:"Define data type.",type:"string"},values:{description:"Values in the form of JSON.",items:{$ref:"#/definitions/Datum"},type:"array"}},required:["type","values"],type:"object"},JsonParseTransform:{additionalProperties:!1,description:"Parse JSON Object Array and append vertically",properties:{baseGenomicField:{description:"Base genomic position when parsing relative position.",type:"string"},field:{description:"The field that contains the JSON object array.",type:"string"},genomicField:{description:"Relative genomic position to parse.",type:"string"},genomicLengthField:{description:"Length of genomic interval.",type:"string"},type:{const:"subjson",type:"string"}},required:["type","field","baseGenomicField","genomicField","genomicLengthField"],type:"object"},Layout:{enum:["linear","circular"],type:"string"},LogBase:{anyOf:[{type:"number"},{const:"e",type:"string"}]},LogTransform:{additionalProperties:!1,properties:{base:{$ref:"#/definitions/LogBase",description:"If not specified, 10 is used."},field:{type:"string"},newField:{description:"If specified, store transformed values in a new field.",type:"string"},type:{const:"log",type:"string"}},required:["type","field"],type:"object"},LogicalOperation:{enum:["less-than","lt","LT","greater-than","gt","GT","less-than-or-equal-to","ltet","LTET","greater-than-or-equal-to","gtet","GTET"],type:"string"},Mark:{enum:["point","line","area","bar","rect","text","withinLink","betweenLink","rule","triangleLeft","triangleRight","triangleBottom","brush","header"],type:"string"},MatrixData:{additionalProperties:!1,properties:{binSize:{description:"Determine the number of nearby cells to aggregate. __Default__: `1`",type:"number"},column:{description:"The name of the first genomic field. __Default__: `x`",type:"string"},row:{description:"The name of the first genomic field. __Default__: `y`",type:"string"},type:{const:"matrix",type:"string"},url:{description:"URL link to the matrix data file",type:"string"},value:{description:"The name of the value field. __Default__: `value`",type:"string"}},required:["type","url"],type:"object"},MouseEventsDeep:{additionalProperties:!1,description:"Options for determining mouse events in detail, e.g., turning on specific events only",properties:{click:{description:"Whether to enable click events.",type:"boolean"},enableMouseOverOnMultipleMarks:{description:"Determine whether all marks underneath the mouse point should be affected by mouse over. __Default__: `false`",type:"boolean"},groupMarksByField:{description:"Group marks using keys in a data field. This affects how a set of marks are highlighted/selected by interaction. __Default__: `undefined`",type:"string"},mouseOver:{description:"Whether to enable mouseover events.",type:"boolean"},rangeSelect:{description:"Whether to send range selection events.",type:"boolean"}},type:"object"},MultipleViews:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},arrangement:{description:"Specify how multiple views are arranged.",enum:["parallel","serial","horizontal","vertical"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},views:{description:"An array of view specifications",items:{anyOf:[{$ref:"#/definitions/SingleView"},{$ref:"#/definitions/MultipleViews"}]},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["views"],type:"object"},MultivecData:{additionalProperties:!1,description:'Two-dimensional quantitative values, one axis for genomic coordinate and the other for different samples, can be converted into HiGlass\' `"multivec"` data. For example, multiple BigWig files can be converted into a single multivec file. You can also convert sequence data (FASTA) into this format where rows will be different nucleotide bases (e.g., A, T, G, C) and quantitative values represent the frequency. Find out more about this format at [HiGlass Docs](https://docs.higlass.io/data_preparation.html#multivec-files).',properties:{aggregation:{$ref:"#/definitions/BinAggregate",description:'Determine aggregation function to apply within bins. __Default__: `"mean"`'},binSize:{description:"Binning the genomic interval in tiles (unit size: 256).",type:"number"},categories:{description:"assign names of individual samples.",items:{type:"string"},type:"array"},column:{description:'Assign a field name of the middle position of genomic intervals. __Default__: `"position"`',type:"string"},end:{description:'Assign a field name of the end position of genomic intervals. __Default__: `"end"`',type:"string"},row:{description:'Assign a field name of samples. __Default__: `"category"`',type:"string"},start:{description:'Assign a field name of the start position of genomic intervals. __Default__: `"start"`',type:"string"},type:{const:"multivec",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"},value:{description:'Assign a field name of quantitative values. __Default__: `"value"`',type:"string"}},required:["type","url"],type:"object"},OneOfFilter:{additionalProperties:!1,properties:{field:{description:"A filter is applied based on the values of the specified data field",type:"string"},not:{description:'when `{"not": true}`, apply a NOT logical operation to the filter.\n\n__Default:__ `false`',type:"boolean"},oneOf:{description:"Check whether the value is an element in the provided list.",items:{type:["string","number","null"]},type:"array"},type:{const:"filter",type:"string"}},required:["field","oneOf","type"],type:"object"},Opacity:{additionalProperties:!1,properties:{domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},range:{$ref:"#/definitions/ValueExtent",description:"Ranges of visual channel values"},type:{description:"Specify the data type",enum:["quantitative","nominal"],type:"string"}},type:"object"},Orientation:{enum:["horizontal","vertical"],type:"string"},OverlaidTrack:{additionalProperties:!1,description:"Superposing multiple tracks.",properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_overlay:{items:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"},type:"array"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["_overlay"],type:"object"},OverlaidTracks:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"overlay",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{$ref:"#/definitions/PartialTrack"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["alignment","tracks"],type:"object"},PartialTrack:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_overlay:{items:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"},type:"array"},_renderingId:{description:"internal",type:"string"},assembly:{anyOf:[{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},{const:"unknown",description:"No assemblies can be associated with a dummy track",type:"string"}],description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},encoding:{additionalProperties:{$ref:"#/definitions/Channel"},type:"object"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{anyOf:[{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},{const:"linear",description:"Only linear layout are supported at this time",type:"string"}],description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{anyOf:[{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},{const:!0,description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"}],description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`."},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{anyOf:[{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},{$ref:"#/definitions/DummyTrackStyle",description:"Defines how the track is styled"}],description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},template:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},type:{const:"dummy-track",description:"Used to specify the dummy track",type:"string"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{anyOf:[{$ref:"#/definitions/ZoomLimits"},{description:"Unused property for DummyTrack",items:{type:"null"},maxItems:2,minItems:2,type:"array"}]}},type:"object"},PredefinedColors:{enum:["viridis","grey","spectral","warm","cividis","bupu","rdbu","hot","pink"],type:"string"},Range:{anyOf:[{$ref:"#/definitions/ValueExtent"},{$ref:"#/definitions/PredefinedColors"}]},RangeFilter:{additionalProperties:!1,properties:{field:{description:"A filter is applied based on the values of the specified data field",type:"string"},inRange:{description:"Check whether the value is in a number range.",items:{type:"number"},type:"array"},not:{description:'when `{"not": true}`, apply a NOT logical operation to the filter.\n\n__Default:__ `false`',type:"boolean"},type:{const:"filter",type:"string"}},required:["field","inRange","type"],type:"object"},ResponsiveSize:{anyOf:[{type:"boolean"},{additionalProperties:!1,properties:{height:{type:"boolean"},width:{type:"boolean"}},type:"object"}]},Row:{additionalProperties:!1,properties:{clip:{description:"Clip row when the actual y value exceeds the max value of the y scale. Used only for bar marks at the moment. __Default__: `true`",type:"boolean"},domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},grid:{description:"Whether to display grid. __Default__: `false`",type:"boolean"},legend:{description:"Whether to display legend. __Default__: `false`",type:"boolean"},padding:{description:"Determines the size of inner white spaces on the top and bottom of individiual rows. __Default__: `0`",type:"number"},range:{$ref:"#/definitions/ValueExtent",description:"Determine the start and end position of rendering area of this track along vertical axis. __Default__: `[0, height]`"},type:{const:"nominal",description:"Specify the data type",type:"string"}},type:"object"},SelectivityCondition:{additionalProperties:!1,properties:{measure:{enum:["width","height","aspectRatio"],type:"string"},operation:{$ref:"#/definitions/LogicalOperation"},target:{description:"Does the condition applied to the visualization itself or its container? __Default__: `'self'`",enum:["self","container"],type:"string"},threshold:{description:"Threshold in the unit of pixels.",type:"number"}},required:["operation","measure","threshold"],type:"object"},SingleTrack:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["data","mark"],type:"object"},SingleView:{anyOf:[{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"overlay",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{$ref:"#/definitions/PartialTrack"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["alignment","tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"stack",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},tracks:{items:{$ref:"#/definitions/Track"},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"}]},Size:{additionalProperties:!1,properties:{domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},legend:{description:"not supported: Whether to display legend. __Default__: `false`",type:"boolean"},range:{$ref:"#/definitions/ValueExtent",description:"Ranges of visual channel values"},type:{description:"Specify the data type",enum:["quantitative","nominal"],type:"string"}},type:"object"},SizeVisibilityCondition:{additionalProperties:!1,properties:{conditionPadding:{description:"Specify the buffer size (in pixel) of width or height when calculating the visibility.\n\n__Default__: `0`",type:"number"},measure:{description:"Specify which aspect of the `target` will be compared to the `threshold`.",enum:["width","height"],type:"string"},operation:{$ref:"#/definitions/LogicalOperation",description:`A string that specifies the logical operation to conduct between \`threshold\` and the \`measure\` of \`target\`. Support + coordinates).`].join(" "));return}(Number.isNaN(+o)||Number.isNaN(+a)||o===null||a===null)&&(o=r,a=C);const[A,l,c]=SI(this.xScales[n].copy().domain([r,C]),this.yScales[n].copy().domain([o,a]));this.setCenters[n](A,l,c,!1,s)}},{key:"zoomToGene",value:function(n,r,C,o){if(!(n in this.setCenters))throw Error(`Invalid viewUid. Current uuids: ${Object.keys(this.setCenters).join(",")}`);if(!this.state.views[n].genomePositionSearchBox||!this.state.views[n].genomePositionSearchBox.autocompleteServer||!this.state.views[n].genomePositionSearchBox.autocompleteId||!this.state.views[n].chromInfoPath){console.warn("Please set chromInfoPath, autocompleteServer, and autocompleteId to use the zoomToGene API");return}this.suggestGene(n,r,a=>{if(a){const s=a.find(A=>A.geneName.toLowerCase()===r.toLowerCase());if(s){const{chr:A,txStart:l,txEnd:c}=s;Os(this.state.views[n].chromInfoPath,u=>{const d=u.chrToAbs([A,l])-C,h=u.chrToAbs([A,c])+C,[m,f,b]=SI(this.xScales[n].copy().domain([d,h]),this.yScales[n].copy().domain([d,h]));this.setCenters[n](m,f,b,!1,o)},this.pubSub)}else console.warn(`Couldn't find the gene symbol: ${r}`)}})}},{key:"suggestGene",value:function(n,r,C){if(!(n in this.setCenters))throw Error(`Invalid viewUid. Current uuids: ${Object.keys(this.setCenters).join(",")}`);if(!this.state.views[n].genomePositionSearchBox||!this.state.views[n].genomePositionSearchBox.autocompleteServer||!this.state.views[n].genomePositionSearchBox.autocompleteId){console.warn("Please set autocompleteServer and autocompleteId to use the suggestGene API");return}const o=this.state.views[n].genomePositionSearchBox.autocompleteServer,a=this.state.views[n].genomePositionSearchBox.autocompleteId,s=`${o}/suggest/?d=${a}&ac=${r.toLowerCase()}`;vt.json(s,ta,this.pubSub).then(A=>{C(A)}).catch(A=>console.error(A))}},{key:"onLocationChange",value:function(n,r,C){const o=Object.keys(this.state.views);if(!o.length)return this.unsetOnLocationChange.push({viewId:n,callback:r,callbackId:C}),null;if(n=typeof n>"u"&&o.length===1?o[0]:n,typeof n>"u"||o.indexOf(n)===-1)return console.error("onLocationChange either missing a viewId or passed an invalid viewId: ",n),null;const a=this.state.views[n],s=(l,c)=>{r({xDomain:l.domain(),yDomain:c.domain(),xRange:l.range(),yRange:c.range()})};let A=1;return this.scalesChangedListeners[a.uid]&&(A=Object.keys(this.scalesChangedListeners[a.uid]).filter(l=>l.indexOf(jZ)===0).map(l=>parseInt(l.slice(jZ.length+1),10)).reduce((l,c)=>Math.max(l,c),0)+1),this.addScalesChangedListener(a.uid,`${jZ}.${A}`,s),C&&C(`${jZ}.${A}`),A}},{key:"getTiledPlotAtPosition",value:function(n,r){let C;const o=Mg(this.state.views);for(let a=0;a=c&&n<=d,m=r>=l&&r<=u;if(h&&m){C=s;break}}return C}},{key:"mouseMoveHandler",value:function(n){if(!this.topDiv||this.state.modal)return;const r=n.clientX,C=n.clientY,o=Pg(n,this.topDiv);o[1]+=this.scrollTop;const a=this.getTiledPlotAtPosition(r,C),s=a?a.listTracksAtPosition(o[0],o[1],!0).map(h=>h.originalTrack||h):[],A=s.find(h=>!h.isAugmentationTrack),l=A?[o[0]-A.position[0],o[1]-A.position[1]]:o;let c=-1,u=-1;A&&(c=A.flipText?A._xScale.invert(l[1]):A._xScale.invert(l[0]),u=A.is2d?A._yScale.invert(l[1]):c);const d={x:o[0],y:o[1],relTrackX:A&&A.flipText?l[1]:l[0],relTrackY:A&&A.flipText?l[0]:l[1],dataX:c,dataY:u,isFrom2dTrack:!!(A&&A.is2d),isFromVerticalTrack:!!(A&&A.flipText),track:A,origEvt:n,sourceUid:this.uid,hoveredTracks:s,noHoveredTracks:s.length===0};if(this.pubSub.publish("app.mouseMove",d),this.isBroadcastMousePositionGlobally){const h={...d};h.origEvt=void 0,h.track=void 0,h.hoveredTracks=void 0,delete h.origEvt,delete h.track,delete h.hoveredTracks,_G.publish("higlass.mouseMove",h)}this.apiPublish("cursorLocation",{absX:r,absY:C,relX:d.x,relY:d.y,relTrackX:d.relTrackX,relTrackY:d.relTrackY,dataX:d.dataX,dataY:d.dataY,isFrom2dTrack:d.isFrom2dTrack,isFromVerticalTrack:d.isFromVerticalTrack}),this.showHoverMenu(d)}},{key:"getMinMaxValue",value:function(n,r,C,o){const a=$Z(this.tiledPlots,n,r);if(!a){console.warn(`Track with ID: ${r} not found!`);return}if(!a.minVisibleValueInTiles||!a.maxVisibleValueInTiles){console.warn(`Track ${r} doesn't support the retrieval of min or max values.`);return}return C&&a.getAggregatedVisibleValue?[a.getAggregatedVisibleValue("min"),a.getAggregatedVisibleValue("max")]:[a.minVisibleValueInTiles(o),a.maxVisibleValueInTiles(o)]}},{key:"showHoverMenu",value:function(n){const r=n.track&&n.track.getMouseOverHtml?n.track.getMouseOverHtml(n.relTrackX,n.relTrackY):"";if(n.track!==this.prevMouseHoverTrack&&this.prevMouseHoverTrack&&this.prevMouseHoverTrack.stopHover&&this.prevMouseHoverTrack.stopHover(),this.prevMouseHoverTrack=n.track,this.zooming)return;const C=r&&r.length?[1]:[];let o=hg("body").selectAll(".track-mouseover-menu").data(C);o.exit().remove(),o.enter().append("div").classed("track-mouseover-menu",!0).classed(Cf["track-mouseover-menu"],!0),o=hg("body").selectAll(".track-mouseover-menu");const a=Pg(n.origEvt,hg("body").node()),s=[a[0]-window.scrollX,a[1]-window.scrollY];if(o.style("left",`${s[0]}px`).style("top",`${s[1]}px`),!o.node())return;const A=o.node().getBoundingClientRect();A.x+A.width>window.innerWidth&&o.style("left",`${s[0]-A.width}px`),A.y+A.height>window.innerHeight&&o.style("top",`${s[1]-A.height}px`),o.html(r)}},{key:"hideHoverMenu",value:function(){hg("body").selectAll(".track-mouseover-menu").remove()}},{key:"closeCustomDialog",value:function(){this.setState(n=>({customDialog:null}))}},{key:"appClickHandler",value:function(n){this.apiPublish("click",n)}},{key:"canvasClickHandler",value:function(n){const r=n.nativeEvent||n,C=r.clientX,o=r.clientY,a=this.getTiledPlotAtPosition(C,o),s=Pg(r,this.topDiv);s[1]+=this.scrollTop;const A=a?a.listTracksAtPosition(s[0],s[1],!0).map(f=>f.originalTrack||f):[],l=A.find(f=>!f.isAugmentationTrack),c=l?[s[0]-l.position[0],s[1]-l.position[1]]:s,u=l&&l.flipText?c[1]:c[0],d=l&&l.flipText?c[0]:c[1];for(const f of this.iterateOverTracks()){const b=$Z(this.tiledPlots,f.viewId,f.trackId);b.respondsToPosition(s[0],s[1])||b.clickOutside()}const h=[];for(const f of A)if(f.childTracks){for(const b of f.childTracks)h.push({trackUid:b.context.trackUid,viewUid:b.context.viewUid,trackType:b.context.trackType,data:b.click(u,d,n)});h.push({trackUid:f.context.trackUid,viewUid:f.context.viewUid,trackType:f.context.trackType,data:{type:"generic",event:n}})}else h.push({trackUid:f.context.trackUid,viewUid:f.context.viewUid,trackType:f.context.trackType,data:f.click(u,d,n)});const m=[];h.forEach((f,b)=>{const p=$Z(this.tiledPlots,f.viewUid,f.trackUid);if(typeof p.clickDialog=="function"){const y=p.clickDialog();y&&m.push(y)}}),m.length>0&&this.setState(f=>({customDialog:m})),this.pubSub.publish("app.click",h)}},{key:"mouseMoveZoomHandler",value:function(n){this.apiPublish("mouseMoveZoom",n)}},{key:"geneSearchHandler",value:function(n){this.apiPublish("geneSearch",n)}},{key:"mouseDownHandler",value:function(n){}},{key:"onScrollHandler",value:function(){this.props.options.sizeMode===SZ&&(this.scrollTop=this.scrollContainer.scrollTop,this.pixiStage.y=-this.scrollTop,this.pubSub.publish("app.scroll",this.scrollTop),this.animate())}},{key:"setTrackValueScaleLimits",value:function(n,r,C,o){const a=$Z(this.tiledPlots,n,r);if(!a){console.warn(`Could't find track: ${r}`);return}a.setFixedValueScaleMin&&a.setFixedValueScaleMax?(a.setFixedValueScaleMin(C),a.setFixedValueScaleMax(o),a.rerender(a.options,!0),a.animate()):console.warn("Track doesn't support fixed value scales.")}},{key:"setChromInfo",value:function(n,r){Os(n,C=>{this.chromInfo=C,r()},this.pubSub)}},{key:"onMouseLeaveHandler",value:function(){this.pubSub.publish("app.mouseLeave"),this.hideHoverMenu(),this.animate()}},{key:"onBlurHandler",value:function(){this.animate()}},{key:"isZoomFixed",value:function(n){return this.props.zoomFixed||this.props.options.zoomFixed||this.state.viewConfig.zoomFixed||this.props.options.sizeMode===SZ||n&&n.zoomFixed}},{key:"trackDimensionsModifiedHandler",value:function(n){const r=this.state.views[n.viewId];if(!r)return;const C=nC(r.tracks,n.trackId);C&&(n.height!==void 0&&(C.height=n.height),n.width!==void 0&&(C.width=n.width),this.adjustLayoutToTrackSizes(r),this.setState(o=>({views:o.views})))}},{key:"wheelHandler",value:function(n){if(this.state.modal||this.props.options.sizeMode===SZ)return;const r=n.nativeEvent||n,C=n.target===this.canvasElement;if(!Ave(r.target,this.topDiv)||this.isZoomFixed())return;const o=r.clientX,a=r.clientY,s=this.getTiledPlotAtPosition(o,a);if(this.apiStack.wheel&&this.apiStack.wheel.length>0){const A=Pg(r,this.topDiv);A[1]+=this.scrollTop;const l=s?s.listTracksAtPosition(A[0],A[1],!0).map(h=>h.originalTrack||h):[],c=l.find(h=>!h.isAugmentationTrack),u=c?[A[0]-c.position[0],A[1]-c.position[1]]:A,d={x:A[0],y:A[1],relTrackX:c&&c.flipText?u[1]:u[0],relTrackY:c&&c.flipText?u[0]:u[1],track:c,origEvt:r,sourceUid:this.uid,hoveredTracks:l,noHoveredTracks:l.length===0};this.apiPublish("wheel",d)}if(r.forwarded||C){n.stopPropagation(),n.preventDefault();return}if(n.preventDefault(),s){const{trackRenderer:A}=s;r.forwarded=!0,r&&(RX(r,A.eventTracker),r.preventDefault())}}},{key:"render",value:function(){this.tiledAreasDivs={},this.tiledAreas=N.createElement("div",{className:Cf["tiled-area"]}),this.mounted&&(this.tiledAreas=Mg(this.state.views).map(A=>{const l=A.uid===this.state.addTrackPositionMenuUid?this.state.addTrackPositionMenuPosition:null;let c=null;if(this.state.chooseViewHandler){let m="transparent";this.state.mouseOverOverlayUid===A.uid&&(m="green"),c=N.createElement("div",{className:"tiled-plot-overlay",onClick:()=>this.state.chooseViewHandler(A.uid),onMouseEnter:()=>this.handleOverlayMouseEnter(A.uid),onMouseLeave:()=>this.handleOverlayMouseLeave(A.uid),onMouseMove:()=>this.handleOverlayMouseEnter(A.uid),style:{position:"absolute",width:"100%",height:"100%",background:m,opacity:.3,zIndex:1}})}const u=N.createElement(o8t,{key:`tp${A.uid}`,ref:m=>{this.tiledPlots[A.uid]=m},addTrackPosition:this.state.addTrackPositionView===A.uid?this.state.addTrackPosition:null,addTrackPositionMenuPosition:l,canvasElement:this.state.canvasElement,chooseTrackHandler:this.state.chooseTrackHandler?m=>this.state.chooseTrackHandler(A.uid,m):null,customDialog:this.state.customDialog,closeCustomDialog:()=>this.closeCustomDialog(),chromInfoPath:A.chromInfoPath,disableTrackMenu:this.isTrackMenuDisabled(),draggingHappening:this.state.draggingHappening!==null,editable:this.isEditable(),getLockGroupExtrema:m=>this.getLockGroupExtrema(A.uid,m),initialXDomain:A.initialXDomain,initialYDomain:A.initialYDomain,isShowGlobalMousePosition:this.isShowGlobalMousePosition,isValueScaleLocked:m=>this.isValueScaleLocked(A.uid,m),marginBottom:this.viewMarginBottom,marginLeft:this.viewMarginLeft,marginRight:this.viewMarginRight,marginTop:this.viewMarginTop,metaTracks:A.metaTracks,mouseTool:this.state.mouseTool,onChangeTrackData:(m,f)=>this.handleChangeTrackData(A.uid,m,f),onChangeTrackType:(m,f)=>this.handleChangeTrackType(A.uid,m,f),onCloseTrack:m=>this.handleCloseTrack(A.uid,m),onDataDomainChanged:(m,f)=>this.handleDataDomainChanged(A.uid,m,f),onLockValueScale:m=>this.handleLockValueScale(A.uid,m),onMouseMoveZoom:this.mouseMoveZoomHandler.bind(this),onNewTilesLoaded:m=>this.handleNewTilesLoaded(A.uid,m),onNoTrackAdded:this.handleNoTrackAdded.bind(this),onRangeSelection:this.rangeSelectionHandler.bind(this),onResizeTrack:this.triggerViewChangeDb,onScalesChanged:(m,f)=>this.handleScalesChanged(A.uid,m,f),onTrackOptionsChanged:(m,f)=>this.handleTrackOptionsChanged(A.uid,m,f),onTrackPositionChosen:this.handleTrackPositionChosen.bind(this),onTracksAdded:(m,f,b)=>this.handleTracksAdded(A.uid,m,f,b),onUnlockValueScale:m=>this.handleUnlockValueScale(A.uid,m),onValueScaleChanged:m=>this.syncValueScales(A.uid,m),overlays:A.overlays,paddingBottom:this.viewPaddingBottom,paddingLeft:this.viewPaddingLeft,paddingRight:this.viewPaddingRight,paddingTop:this.viewPaddingTop,pixiRenderer:this.pixiRenderer,pixiStage:this.pixiStage,pluginDataFetchers:this.pluginDataFetchers,pluginTracks:this.pluginTracks,rangeSelection1dSize:this.state.rangeSelection1dSize,rangeSelectionToInt:this.state.rangeSelectionToInt,registerDraggingChangedListener:m=>this.addDraggingChangedListener(A.uid,A.uid,m),removeDraggingChangedListener:m=>this.removeDraggingChangedListener(A.uid,A.uid,m),setCentersFunction:m=>{this.setCenters[A.uid]=m},svgElement:this.state.svgElement,tracks:A.tracks,trackSourceServers:this.state.viewConfig.trackSourceServers,uid:A.uid,verticalMargin:this.verticalMargin,viewOptions:A.options,xDomainLimits:A.xDomainLimits,yDomainLimits:A.yDomainLimits,zoomable:!this.isZoomFixed(A),zoomLimits:this.calculateZoomLimits(A,A.initialXDomain),zoomToDataExtentOnInit:()=>this.zoomToDataExtentOnInit.has(A.uid)}),d=(m,f)=>A.genomePositionSearchBox?N.createElement(_8t,{key:`gpsb${A.uid}`,ref:b=>{this.genomePositionSearchBoxes[A.uid]=b},autocompleteId:A.genomePositionSearchBox.autocompleteId,autocompleteServer:A.genomePositionSearchBox.autocompleteServer,chromInfoId:A.genomePositionSearchBox.chromInfoId,chromInfoPath:A.genomePositionSearchBox.chromInfoPath,chromInfoServer:A.genomePositionSearchBox.chromInfoServer,hideAvailableAssemblies:A.genomePositionSearchBox.hideAvailableAssemblies,isFocused:m,onFocus:f,onGeneSearch:this.geneSearchHandler.bind(this),onSelectedAssemblyChanged:(b,p,y)=>this.handleSelectedAssemblyChanged(A.uid,b,p,y),registerViewportChangedListener:b=>this.addScalesChangedListener(A.uid,A.uid,b),removeViewportChangedListener:()=>this.removeScalesChangedListener(A.uid,A.uid),setCenters:(b,p,y,Z)=>this.setCenters[A.uid](b,p,y,!1,Z),trackSourceServers:this.state.viewConfig.trackSourceServers,twoD:!!(A.tracks.left.length||A.tracks.right.length||A.tracks.center.length)}):null,h=this.isEditable()&&!this.isViewHeaderDisabled()&&!this.state.viewConfig.hideHeader?N.createElement(Z6t,{ref:m=>{this.viewHeaders[A.uid]=m},getGenomePositionSearchBox:d,isGenomePositionSearchBoxVisible:A.genomePositionSearchBox&&A.genomePositionSearchBox.visible,mouseTool:this.state.mouseTool,onAddView:()=>this.handleAddView(A),onClearView:()=>this.handleClearView(A.uid),onCloseView:()=>this.handleCloseView(A.uid),onEditViewConfig:this.handleEditViewConfigBound,onExportPNG:this.handleExportPNG.bind(this),onExportSVG:this.handleExportSVG.bind(this),onExportViewsAsJSON:this.handleExportViewAsJSON.bind(this),onExportViewsAsLink:this.handleExportViewsAsLink.bind(this),onLockLocation:m=>this.handleYankFunction(m,this.handleLocationLockChosen.bind(this)),onLockZoom:m=>this.handleYankFunction(m,this.handleZoomLockChosen.bind(this)),onLockZoomAndLocation:m=>this.handleYankFunction(m,(f,b)=>{this.handleZoomLockChosen(f,b),this.handleLocationLockChosen(f,b)}),onProjectViewport:this.handleProjectViewport.bind(this),onTakeAndLockZoomAndLocation:m=>{this.handleYankFunction(m,(f,b)=>{this.handleZoomYanked(f,b),this.handleLocationYanked(f,b),this.handleZoomLockChosen(f,b),this.handleLocationLockChosen(f,b)})},onTogglePositionSearchBox:this.handleTogglePositionSearchBox.bind(this),onTrackPositionChosen:m=>this.handleTrackPositionChosen(A.uid,m),onUnlockLocation:m=>this.handleUnlock(m,this.locationLocks),onUnlockZoom:m=>this.handleUnlock(m,this.zoomLocks),onUnlockZoomAndLocation:m=>{this.handleUnlock(m,this.zoomLocks),this.handleUnlock(m,this.locationLocks)},onViewOptionsChanged:m=>this.handleViewOptionsChanged(A.uid,m),onYankLocation:m=>this.handleYankFunction(m,this.handleLocationYanked.bind(this)),onYankZoom:m=>this.handleYankFunction(m,this.handleZoomYanked.bind(this)),onYankZoomAndLocation:m=>this.handleYankFunction(m,(f,b)=>{this.handleZoomYanked(f,b),this.handleLocationYanked(f,b)}),onZoomToData:m=>this.handleZoomToData(m),viewUid:A.uid}):null;return N.createElement("div",{key:A.uid,ref:m=>{this.tiledAreasDivs[A.uid]=m},className:Cf["tiled-area"]},h,u,c)}));let n=this.mounted?Object.values(this.state.views).filter(A=>A.layout).map(A=>A.layout):[];n=JSON.parse(JSON.stringify(n));const r=this.isEditable()?FGe:0,C=this.isEditable()?DGe:0,o=+this.props.options.containerPaddingX>=0?+this.props.options.containerPaddingX:r,a=+this.props.options.containerPaddingY>=0?+this.props.options.containerPaddingY:C,s=N.createElement(Pot,{ref:A=>{this.gridLayout=A},cols:12,containerPadding:[o,a],draggableHandle:`.${XC["multitrack-header-grabber"]}`,isDraggable:this.isEditable(),isResizable:this.isEditable(),layout:n,margin:this.isEditable()?[10,10]:[0,0],measureBeforeMount:!1,onBreakpointChange:this.onBreakpointChange.bind(this),onDragStart:this.handleDragStart.bind(this),onDragStop:this.handleDragStop.bind(this),onLayoutChange:this.handleLayoutChange.bind(this),onResize:this.resizeHandler.bind(this),rowHeight:this.state.rowHeight,useCSSTransforms:this.mounted,verticalCompact:this.state.viewConfig.compactLayout,width:this.state.width},this.tiledAreas);return N.createElement("div",{key:this.uid,ref:A=>{this.topDiv=A},className:Xg("higlass",{"higlass-dark-theme":this.theme===ii,"higlass-container-overflow":this.props.options.sizeMode===lle||this.props.options.sizeMode===SZ}),onMouseLeave:this.onMouseLeaveHandlerBound,onMouseMove:this.mouseMoveHandlerBound},N.createElement(qWt,{value:this.pubSub},N.createElement(Szt,{value:this.modal},N.createElement(MWt,{value:this.theme},this.state.modal,N.createElement("canvas",{key:this.uid,ref:A=>{this.canvasElement=A},onClick:this.canvasClickHandlerBound,className:Cf["higlass-canvas"]}),N.createElement("div",{ref:A=>{this.scrollContainer=A},className:Xg("higlass-scroll-container",{"higlass-scroll-container-overflow":this.props.options.sizeMode===lle,"higlass-scroll-container-scroll":this.props.options.sizeMode===SZ}),onScroll:this.onScrollHandlerBound},N.createElement("div",{ref:A=>{this.divDrawingSurface=A},className:Xg("higlass-drawing-surface",Cf["higlass-drawing-surface"])},s),N.createElement("svg",{ref:A=>{this.svgElement=A},className:Cf["higlass-svg"],style:{position:"absolute",width:"100%",height:"100%",left:0,top:0,pointerEvents:"none"}}))))))}}]),i}(N.Component);my.defaultProps={options:{},zoomFixed:!1,compactLayout:!0};my.propTypes={getApi:L.func,options:L.object,viewConfig:L.oneOfType([L.string,L.object]).isRequired,zoomFixed:L.bool,compactLayout:L.bool};function ztg(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function cle(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function RH(e){return RH=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},RH(e)}const $tg=(e,[g,i,I,n],r)=>{r.options.colorbarPosition||(r.options.colorbarPosition="hidden"),r.options.labelPosition||(r.options.labelPosition="hidden");const C="arbitary-id",a=tgg(e,{editable:!1,zoomFixed:!1,views:[{uid:C,initialXDomain:[g,i],initialYDomain:[I,n],tracks:{center:[r]},layout:{w:12,h:12,x:0,y:0,moved:!1,static:!1}}]},{sizeMode:"bounded"});return{id:C,hgApi:a}};let qtg=function(e){_tg(i,e);var g=Ltg(i);function i(I){var n;return ztg(this,i),n=g.call(this,I),n.id=`id-${Math.random()}`,n}return Ptg(i,[{key:"componentDidMount",value:function(){this.initTrackViewer()}},{key:"shouldComponentUpdate",value:function(n){const{x:r,y:C,width:o,height:a}=n;return this.zoomTo(r,C,o,a),!1}},{key:"initTrackViewer",value:function(){const{trackConfig:n,x:r,y:C,width:o,height:a}=this.props,s=document.getElementById(this.id),{id:A,hgApi:l}=$tg(s,[r,r+o,C,C+a],n);this.viewUid=A,this.viewer=l}},{key:"zoomTo",value:function(n,r,C,o){this.viewer.zoomTo(this.viewUid,n,n+C,r,r+o)}},{key:"render",value:function(){return N.createElement("div",{id:this.id,style:{height:"100%",width:"100%"}})}}]),i}(N.Component);qtg.propTypes={trackConfig:L.object,width:L.number,height:L.number,x:L.number,y:L.number};const egg=(e,g,i)=>{const I=N.createRef();return qi.render(N.createElement(my,{ref:I,options:i||{},viewConfig:g}),e),I.current},tgg=(e,g,i)=>egg(e,g,i).api;var y2e={exports:{}};(function(e,g){(function(i,I){e.exports=I()})(typeof window<"u"?window:Zi,function(){if(typeof window>"u")return null;var i=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")(),I=i.requestAnimationFrame||i.mozRequestAnimationFrame||i.webkitRequestAnimationFrame||function(A){return i.setTimeout(A,20)},n=i.cancelAnimationFrame||i.mozCancelAnimationFrame||i.webkitCancelAnimationFrame||function(A){i.clearTimeout(A)};function r(A,l){var c=Object.prototype.toString.call(A),u=c==="[object Array]"||c==="[object NodeList]"||c==="[object HTMLCollection]"||c==="[object Object]"||typeof jQuery<"u"&&A instanceof jQuery||typeof Elements<"u"&&A instanceof Elements,d=0,h=A.length;if(u)for(;d=X&&(H+=V.value),V.mode==="max"&&W<=X&&(H+=V.value),R[k]||(R[k]=""),H&&(" "+R[k]+" ").indexOf(" "+H+" ")===-1&&(R[k]+=" "+H));for(var D in K)K.hasOwnProperty(D)&&(R[K[D]]?this.element.setAttribute(K[D],R[K[D]].substr(1)):this.element.removeAttribute(K[D]))}}function c(G,v){G.elementQueriesSetupInformation||(G.elementQueriesSetupInformation=new l(G,v)),G.elementQueriesSensor||(G.elementQueriesSensor=new i(G,function(){G.elementQueriesSetupInformation.call()}))}function u(G,v,w,V){if(typeof C[G]>"u"){C[G]=[];var S=o.length;r.innerHTML+=` +`+G+" {animation: 0.1s element-queries;}",r.innerHTML+=` +`+G+" > .resize-sensor {min-width: "+S+"px;}",o.push(G)}C[G].push({mode:v,property:w,value:V})}function d(G){var v;if(document.querySelectorAll&&(v=G?G.querySelectorAll.bind(G):document.querySelectorAll.bind(document)),!v&&typeof $$<"u"&&(v=$$),!v&&typeof jQuery<"u"&&(v=jQuery),!v)throw"No document.querySelectorAll, jQuery or Mootools's $$ found.";return v}function h(G){var v=d(G);for(var w in C)if(C.hasOwnProperty(w))for(var V=v(w,G),S=0,X=V.length;Sw[P].minWidth&&(J=P);if(J||(J=S),X!==J)if(W[J])v[X].style.display="none",v[J].style.display="block",X=J;else{var te=new Image;te.onload=function(){v[J].src=V[J],v[X].style.display="none",v[J].style.display="block",W[J]=!0,X=J},te.src=V[J]}else v[J].src=V[J]}G.resizeSensorInstance=new i(G,D),D()}function f(){for(var G=d(),v=G("[data-responsive-image],[responsive-image]"),w=0,V=v.length;w img, [data-responsive-image] {overflow: hidden; padding: 0; } [responsive-image] > img, [data-responsive-image] > img {width: 100%;}",r.innerHTML+=` +@keyframes element-queries { 0% { visibility: inherit; } }`,document.getElementsByTagName("head")[0].appendChild(r),B=!0);for(var v=0,w=document.styleSheets.length;vg in e?igg(e,g,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[g]=i,Ct=(e,g,i)=>(Igg(e,typeof g!="symbol"?g+"":g,i),i),q$=(e,g,i)=>{if(!g.has(e))throw TypeError("Cannot "+i)},Dt=(e,g,i)=>(q$(e,g,"read from private field"),i?i.call(e):g.get(e)),pg=(e,g,i)=>{if(g.has(e))throw TypeError("Cannot add the same private member more than once");g instanceof WeakSet?g.add(e):g.set(e,i)},Wr=(e,g,i,I)=>(q$(e,g,"write to private field"),I?I.call(e,i):g.set(e,i),i),Ri=(e,g,i)=>(q$(e,g,"access private method"),i),yG,lS,cS,Md,VH,WH,n_,v2e,e8,B2e,XH,r_,C_,S2e,o_,w2e,a_,R2e,$A;const ngg="#/definitions/GoslingSpec",rgg="http://json-schema.org/draft-07/schema#",Cgg={Aggregate:{enum:["max","min","mean","bin","count"],type:"string"},Assembly:{anyOf:[{const:"hg38",type:"string"},{const:"hg19",type:"string"},{const:"hg18",type:"string"},{const:"hg17",type:"string"},{const:"hg16",type:"string"},{const:"mm10",type:"string"},{const:"mm9",type:"string"},{const:"unknown",type:"string"},{$ref:"#/definitions/ChromSizes"}]},AxisPosition:{enum:["none","top","bottom","left","right"],type:"string"},BamData:{additionalProperties:!1,description:"Binary Alignment Map (BAM) is the comprehensive raw data of genome sequencing; it consists of the lossless, compressed binary representation of the Sequence Alignment Map-files.",properties:{extractJunction:{description:"Determine whether to extract exon-to-exon junctions. __Default__: `false`",type:"boolean"},indexUrl:{description:"URL link to the index file of the BAM file",type:"string"},junctionMinCoverage:{description:"Determine the threshold of coverage when extracting exon-to-exon junctions. __Default__: `1`",type:"number"},loadMates:{description:"Load mates that are located in the same chromosome. __Default__: `false`",type:"boolean"},maxInsertSize:{description:"Determines the threshold of insert sizes for determining the structural variants. __Default__: `5000`",type:"number"},type:{const:"bam",type:"string"},url:{description:"URL link to the BAM data file",type:"string"}},required:["type","url","indexUrl"],type:"object"},BedData:{additionalProperties:!1,description:"BED file format",properties:{customFields:{description:"An array of strings, where each string is the name of a non-standard field in the BED file. If there are `n` custom fields, we assume that the last `n` columns of the BED file correspond to the custom fields.",items:{type:"string"},type:"array"},indexUrl:{description:"Specify the URL address of the data file index.",type:"string"},sampleLength:{description:"Specify the number of rows loaded from the URL.\n\n__Default:__ `1000`",type:"number"},type:{const:"bed",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"}},required:["type","url","indexUrl"],type:"object"},BeddbData:{additionalProperties:!1,description:"Regular BED or similar files can be pre-aggregated for the scalable data exploration. Find our more about this format at [HiGlass Docs](https://docs.higlass.io/data_preparation.html#bed-files).",properties:{exonIntervalFields:{description:"experimental",items:[{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"}},required:["index","name"],type:"object"},{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"}},required:["index","name"],type:"object"}],maxItems:2,minItems:2,type:"array"},genomicFields:{description:"Specify the name of genomic data fields.",items:{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"}},required:["index","name"],type:"object"},type:"array"},type:{const:"beddb",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"},valueFields:{description:"Specify the column indexes, field names, and field types.",items:{additionalProperties:!1,properties:{index:{type:"number"},name:{type:"string"},type:{enum:["nominal","quantitative"],type:"string"}},required:["index","name","type"],type:"object"},type:"array"}},required:["type","url","genomicFields"],type:"object"},BigWigData:{additionalProperties:!1,properties:{aggregation:{$ref:"#/definitions/BinAggregate",description:'Determine aggregation function to apply within bins. __Default__: `"mean"`'},binSize:{description:"Binning the genomic interval in tiles (unit size: 256).",type:"number"},column:{description:'Assign a field name of the middle position of genomic intervals. __Default__: `"position"`',type:"string"},end:{description:'Assign a field name of the end position of genomic intervals. __Default__: `"end"`',type:"string"},start:{description:'Assign a field name of the start position of genomic intervals. __Default__: `"start"`',type:"string"},type:{const:"bigwig",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"},value:{description:'Assign a field name of quantitative values. __Default__: `"value"`',type:"string"}},required:["type","url"],type:"object"},BinAggregate:{enum:["mean","sum"],type:"string"},Channel:{anyOf:[{$ref:"#/definitions/ChannelDeep"},{$ref:"#/definitions/ChannelValue"}]},ChannelDeep:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/Y"},{$ref:"#/definitions/Row"},{$ref:"#/definitions/Color"},{$ref:"#/definitions/Size"},{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/Text"}]},ChannelValue:{additionalProperties:!1,properties:{value:{description:"Assign a constant value for a visual channel.",type:["number","string"]}},required:["value"],type:"object"},ChromSizes:{description:'Custom chromosome sizes, e.g., [["foo", 1000], ["bar", 300], ["baz", 240]]',items:{items:[{type:"string"},{type:"number"}],maxItems:2,minItems:2,type:"array"},type:"array"},Color:{additionalProperties:!1,properties:{domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},legend:{description:"Whether to display legend. __Default__: `false`",type:"boolean"},range:{$ref:"#/definitions/Range",description:"Determine the colors that should be bound to data value. Default properties are determined considering the field type."},scale:{enum:["linear","log"],type:"string"},scaleOffset:{description:"Whether to use offset of the domain proportionally. This is bound to brushes on the color legend. __Default__: `[0, 1]`",items:{type:"number"},maxItems:2,minItems:2,type:"array"},title:{description:"Title of the legend. __Default__: `undefined`",type:"string"},type:{description:"Specify the data type",enum:["quantitative","nominal"],type:"string"}},type:"object"},CoverageTransform:{additionalProperties:!1,description:"Aggregate rows and calculate coverage",properties:{endField:{type:"string"},groupField:{description:"The name of a nominal field to group rows by in prior to piling-up",type:"string"},newField:{type:"string"},startField:{type:"string"},type:{const:"coverage",type:"string"}},required:["type","startField","endField"],type:"object"},CsvData:{additionalProperties:!1,description:'Any small enough tabular data files, such as tsv, csv, BED, BEDPE, and GFF, can be loaded using "csv" data specification.',properties:{chromosomeField:{description:"Specify the name of chromosome data fields.",type:"string"},chromosomePrefix:{description:'Specify the chromosome prefix if chromosomes are denoted using a prefix besides "chr" or a number',type:"string"},genomicFields:{description:"Specify the name of genomic data fields.",items:{type:"string"},type:"array"},genomicFieldsToConvert:{description:"experimental",items:{additionalProperties:!1,properties:{chromosomeField:{type:"string"},genomicFields:{items:{type:"string"},type:"array"}},required:["chromosomeField","genomicFields"],type:"object"},type:"array"},headerNames:{description:"Specify the names of data fields if a CSV file does not contain a header.",items:{type:"string"},type:"array"},longToWideId:{description:"experimental",type:"string"},sampleLength:{description:"Specify the number of rows loaded from the URL.\n\n__Default:__ `1000`",type:"number"},separator:{description:"Specify file separator, __Default:__ ','",type:"string"},type:{const:"csv",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"}},required:["type","url"],type:"object"},DataDeep:{anyOf:[{$ref:"#/definitions/JsonData"},{$ref:"#/definitions/CsvData"},{$ref:"#/definitions/BedData"},{$ref:"#/definitions/BigWigData"},{$ref:"#/definitions/MultivecData"},{$ref:"#/definitions/BeddbData"},{$ref:"#/definitions/VectorData"},{$ref:"#/definitions/MatrixData"},{$ref:"#/definitions/BamData"},{$ref:"#/definitions/VcfData"},{$ref:"#/definitions/GffData"}]},DataTrack:{additionalProperties:!1,description:"Partial specification of `BasicSingleTrack` to use default visual encoding predefined by data type.",properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},data:{$ref:"#/definitions/DataDeep"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},width:{description:"Specify the track width in pixels.",type:"number"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["data"],type:"object"},DataTransform:{anyOf:[{$ref:"#/definitions/FilterTransform"},{$ref:"#/definitions/StrConcatTransform"},{$ref:"#/definitions/StrReplaceTransform"},{$ref:"#/definitions/LogTransform"},{$ref:"#/definitions/DisplaceTransform"},{$ref:"#/definitions/ExonSplitTransform"},{$ref:"#/definitions/GenomicLengthTransform"},{$ref:"#/definitions/SvTypeTransform"},{$ref:"#/definitions/CoverageTransform"},{$ref:"#/definitions/JsonParseTransform"}]},Datum:{additionalProperties:{type:["number","string"]},description:"Values in the form of JSON.",type:"object"},DisplaceTransform:{additionalProperties:!1,properties:{boundingBox:{additionalProperties:!1,properties:{endField:{description:"The name of a quantitative field that represents the end position.",type:"string"},groupField:{description:"The name of a nominal field to group rows by in prior to piling-up.",type:"string"},isPaddingBP:{description:"Whether to consider `padding` as the bp length.",type:"boolean"},padding:{description:"The padding around visual lements. Either px or bp",type:"number"},startField:{description:"The name of a quantitative field that represents the start position.",type:"string"}},required:["startField","endField"],type:"object"},maxRows:{description:"Specify maximum rows to be generated (default has no limit).",type:"number"},method:{$ref:"#/definitions/DisplacementType",description:"A string that specifies the type of displacement."},newField:{type:"string"},type:{const:"displace",type:"string"}},required:["type","boundingBox","method","newField"],type:"object"},Displacement:{additionalProperties:!1,properties:{padding:{type:"number"},type:{$ref:"#/definitions/DisplacementType"}},required:["type"],type:"object"},DisplacementType:{enum:["pile","spread"],type:"string"},DomainChr:{additionalProperties:!1,properties:{chromosome:{type:"string"}},required:["chromosome"],type:"object"},DomainChrInterval:{additionalProperties:!1,properties:{chromosome:{description:"If specified, only showing a certain interval in a chromosome.",type:"string"},interval:{items:{type:"number"},maxItems:2,minItems:2,type:"array"}},required:["chromosome","interval"],type:"object"},DomainInterval:{additionalProperties:!1,properties:{interval:{description:"Show a certain interval within entire chromosome",items:{type:"number"},maxItems:2,minItems:2,type:"array"}},required:["interval"],type:"object"},DummyTrack:{additionalProperties:!1,description:"A placeholder track. In contrast to other tracks, this track does not display any data. Instead it provides empty space for third party tools to display their data on top of.",properties:{_invalidTrack:{description:"internal",type:"boolean"},assembly:{const:"unknown",description:"No assemblies can be associated with a dummy track",type:"string"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},layout:{const:"linear",description:"Only linear layout are supported at this time",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},overlayOnPreviousTrack:{type:"boolean"},static:{const:!0,description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/DummyTrackStyle",description:"Defines how the track is styled"},title:{description:"Text that gets shown on the DummyTrack",type:"string"},type:{const:"dummy-track",description:"Used to specify the dummy track",type:"string"},width:{description:"Specify the track width in pixels.",type:"number"},zoomLimits:{description:"Unused property for DummyTrack",items:{type:"null"},maxItems:2,minItems:2,type:"array"}},required:["type"],type:"object"},DummyTrackStyle:{additionalProperties:!1,properties:{background:{description:"Background color of the track",type:"string"},outline:{description:"Color of the outline of the track",type:"string"},textFontSize:{description:"Specify the font size of the title",type:"number"},textFontWeight:{description:"Specify the font weight of the title.",enum:["bold","normal"],type:"string"},textStroke:{description:"Specify the stroke color of title.",type:"string"},textStrokeWidth:{description:"Specify the stroke width of the title.",type:"number"}},type:"object"},EventStyle:{additionalProperties:!1,description:"The styles defined here will be applied to the target marks of mouse events, such as a point mark after the user clicks on it.",properties:{arrange:{description:"Show event effects behind or in front of marks.",enum:["behind","front"],type:"string"},color:{description:"color of the marks when mouse events are triggered",type:"string"},opacity:{description:"opacity of the marks when mouse events are triggered",type:"number"},stroke:{description:"stroke color of the marks when mouse events are triggered",type:"string"},strokeOpacity:{type:"number"},strokeWidth:{description:"stroke width of the marks when mouse events are triggered",type:"number"}},type:"object"},ExonSplitTransform:{additionalProperties:!1,properties:{fields:{items:{additionalProperties:!1,properties:{chrField:{type:"string"},field:{type:"string"},newField:{type:"string"},type:{$ref:"#/definitions/FieldType"}},required:["field","type","newField","chrField"],type:"object"},type:"array"},flag:{additionalProperties:!1,properties:{field:{type:"string"},value:{type:["number","string"]}},required:["field","value"],type:"object"},separator:{type:"string"},type:{const:"exonSplit",type:"string"}},required:["type","separator","flag","fields"],type:"object"},FieldType:{enum:["genomic","nominal","quantitative"],type:"string"},FilterTransform:{anyOf:[{$ref:"#/definitions/OneOfFilter"},{$ref:"#/definitions/RangeFilter"},{$ref:"#/definitions/IncludeFilter"}]},GenomicDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}]},GenomicLengthTransform:{additionalProperties:!1,description:"Calculate genomic length using two genomic fields",properties:{endField:{type:"string"},newField:{type:"string"},startField:{type:"string"},type:{const:"genomicLength",type:"string"}},required:["type","startField","endField","newField"],type:"object"},GffData:{additionalProperties:!1,description:"Generic Feature Format Version 3 (GFF3) format data. It parses files that follow the [GFF3 specification](https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md).",properties:{attributesToFields:{description:'Specifies which attributes to include as a fields. GFF files have an "attributes" column which contains a list of attributes which are each tag-value pairs (`tag=value`). This option allows for specific attributes to be accessible as a field. For example, if you have an attribute called "gene_name" and you want label features on your track using those values, you can use this option so that you can use `"field": "gene_name"` in the schema.\n\nIf there is a single `value` corresponding to the `tag`, Gosling will parse that value as a string. If there are multiple `value`s corresponding to a `tag`, Gosling will parse it as a comma-separated list string. If a feature does not have a particular attribute, then the attribute value will be set to the `defaultValue`.',items:{additionalProperties:!1,properties:{attribute:{type:"string"},defaultValue:{type:"string"}},required:["attribute","defaultValue"],type:"object"},type:"array"},indexUrl:{description:"URL link to the tabix index file",type:"string"},sampleLength:{description:"The maximum number of samples to be shown on the track. Samples are uniformly randomly selected so that this threshold is not exceeded. __Default:__ `1000`",type:"number"},type:{const:"gff",type:"string"},url:{description:"URL link to the GFF file",type:"string"}},required:["type","url","indexUrl"],type:"object"},GoslingSpec:{anyOf:[{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"overlay",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},description:{type:"string"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{$ref:"#/definitions/PartialTrack"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["alignment","tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"stack",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},description:{type:"string"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},description:{type:"string"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},title:{type:"string"},tracks:{items:{$ref:"#/definitions/Track"},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},arrangement:{description:"Specify how multiple views are arranged.",enum:["parallel","serial","horizontal","vertical"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},description:{type:"string"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},responsiveSize:{$ref:"#/definitions/ResponsiveSize",description:"Determine whether to make the size of `GoslingComponent` bound to its parent element. __Default__: `false`"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},arrangement:{description:"Specify how multiple views are arranged.",enum:["parallel","serial","horizontal","vertical"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},views:{description:"An array of view specifications",items:{anyOf:[{$ref:"#/definitions/SingleView"},{$ref:"#/definitions/MultipleViews"}]},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},title:{type:"string"},views:{description:"An array of view specifications",items:{anyOf:[{$ref:"#/definitions/SingleView"},{$ref:"#/definitions/MultipleViews"}]},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["views"],type:"object"}]},IncludeFilter:{additionalProperties:!1,properties:{field:{description:"A filter is applied based on the values of the specified data field",type:"string"},include:{description:"Check whether the value includes a substring.",type:"string"},not:{description:'when `{"not": true}`, apply a NOT logical operation to the filter.\n\n__Default:__ `false`',type:"boolean"},type:{const:"filter",type:"string"}},required:["field","include","type"],type:"object"},JsonData:{additionalProperties:!1,description:"The JSON data format allows users to include data directly in the Gosling's JSON specification.",properties:{chromosomeField:{description:"Specify the name of chromosome data fields.",type:"string"},genomicFields:{description:"Specify the name of genomic data fields.",items:{type:"string"},type:"array"},genomicFieldsToConvert:{description:"experimental",items:{additionalProperties:!1,properties:{chromosomeField:{type:"string"},genomicFields:{items:{type:"string"},type:"array"}},required:["chromosomeField","genomicFields"],type:"object"},type:"array"},sampleLength:{description:"Specify the number of rows loaded from the URL.\n\n__Default:__ `1000`",type:"number"},type:{const:"json",description:"Define data type.",type:"string"},values:{description:"Values in the form of JSON.",items:{$ref:"#/definitions/Datum"},type:"array"}},required:["type","values"],type:"object"},JsonParseTransform:{additionalProperties:!1,description:"Parse JSON Object Array and append vertically",properties:{baseGenomicField:{description:"Base genomic position when parsing relative position.",type:"string"},field:{description:"The field that contains the JSON object array.",type:"string"},genomicField:{description:"Relative genomic position to parse.",type:"string"},genomicLengthField:{description:"Length of genomic interval.",type:"string"},type:{const:"subjson",type:"string"}},required:["type","field","baseGenomicField","genomicField","genomicLengthField"],type:"object"},Layout:{enum:["linear","circular"],type:"string"},LogBase:{anyOf:[{type:"number"},{const:"e",type:"string"}]},LogTransform:{additionalProperties:!1,properties:{base:{$ref:"#/definitions/LogBase",description:"If not specified, 10 is used."},field:{type:"string"},newField:{description:"If specified, store transformed values in a new field.",type:"string"},type:{const:"log",type:"string"}},required:["type","field"],type:"object"},LogicalOperation:{enum:["less-than","lt","LT","greater-than","gt","GT","less-than-or-equal-to","ltet","LTET","greater-than-or-equal-to","gtet","GTET"],type:"string"},Mark:{enum:["point","line","area","bar","rect","text","withinLink","betweenLink","rule","triangleLeft","triangleRight","triangleBottom","brush","header"],type:"string"},MatrixData:{additionalProperties:!1,properties:{binSize:{description:"Determine the number of nearby cells to aggregate. __Default__: `1`",type:"number"},column:{description:"The name of the first genomic field. __Default__: `x`",type:"string"},row:{description:"The name of the first genomic field. __Default__: `y`",type:"string"},type:{const:"matrix",type:"string"},url:{description:"URL link to the matrix data file",type:"string"},value:{description:"The name of the value field. __Default__: `value`",type:"string"}},required:["type","url"],type:"object"},MouseEventsDeep:{additionalProperties:!1,description:"Options for determining mouse events in detail, e.g., turning on specific events only",properties:{click:{description:"Whether to enable click events.",type:"boolean"},enableMouseOverOnMultipleMarks:{description:"Determine whether all marks underneath the mouse point should be affected by mouse over. __Default__: `false`",type:"boolean"},groupMarksByField:{description:"Group marks using keys in a data field. This affects how a set of marks are highlighted/selected by interaction. __Default__: `undefined`",type:"string"},mouseOver:{description:"Whether to enable mouseover events.",type:"boolean"},rangeSelect:{description:"Whether to send range selection events.",type:"boolean"}},type:"object"},MultipleViews:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},arrangement:{description:"Specify how multiple views are arranged.",enum:["parallel","serial","horizontal","vertical"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},views:{description:"An array of view specifications",items:{anyOf:[{$ref:"#/definitions/SingleView"},{$ref:"#/definitions/MultipleViews"}]},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["views"],type:"object"},MultivecData:{additionalProperties:!1,description:'Two-dimensional quantitative values, one axis for genomic coordinate and the other for different samples, can be converted into HiGlass\' `"multivec"` data. For example, multiple BigWig files can be converted into a single multivec file. You can also convert sequence data (FASTA) into this format where rows will be different nucleotide bases (e.g., A, T, G, C) and quantitative values represent the frequency. Find out more about this format at [HiGlass Docs](https://docs.higlass.io/data_preparation.html#multivec-files).',properties:{aggregation:{$ref:"#/definitions/BinAggregate",description:'Determine aggregation function to apply within bins. __Default__: `"mean"`'},binSize:{description:"Binning the genomic interval in tiles (unit size: 256).",type:"number"},categories:{description:"assign names of individual samples.",items:{type:"string"},type:"array"},column:{description:'Assign a field name of the middle position of genomic intervals. __Default__: `"position"`',type:"string"},end:{description:'Assign a field name of the end position of genomic intervals. __Default__: `"end"`',type:"string"},row:{description:'Assign a field name of samples. __Default__: `"category"`',type:"string"},start:{description:'Assign a field name of the start position of genomic intervals. __Default__: `"start"`',type:"string"},type:{const:"multivec",type:"string"},url:{description:"Specify the URL address of the data file.",type:"string"},value:{description:'Assign a field name of quantitative values. __Default__: `"value"`',type:"string"}},required:["type","url"],type:"object"},OneOfFilter:{additionalProperties:!1,properties:{field:{description:"A filter is applied based on the values of the specified data field",type:"string"},not:{description:'when `{"not": true}`, apply a NOT logical operation to the filter.\n\n__Default:__ `false`',type:"boolean"},oneOf:{description:"Check whether the value is an element in the provided list.",items:{type:["string","number","null"]},type:"array"},type:{const:"filter",type:"string"}},required:["field","oneOf","type"],type:"object"},Opacity:{additionalProperties:!1,properties:{domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},range:{$ref:"#/definitions/ValueExtent",description:"Ranges of visual channel values"},type:{description:"Specify the data type",enum:["quantitative","nominal"],type:"string"}},type:"object"},Orientation:{enum:["horizontal","vertical"],type:"string"},OverlaidTrack:{additionalProperties:!1,description:"Superposing multiple tracks.",properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_overlay:{items:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"},type:"array"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["_overlay"],type:"object"},OverlaidTracks:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"overlay",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{$ref:"#/definitions/PartialTrack"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["alignment","tracks"],type:"object"},PartialTrack:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_overlay:{items:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"},type:"array"},_renderingId:{description:"internal",type:"string"},assembly:{anyOf:[{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},{const:"unknown",description:"No assemblies can be associated with a dummy track",type:"string"}],description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},encoding:{additionalProperties:{$ref:"#/definitions/Channel"},type:"object"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{anyOf:[{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},{const:"linear",description:"Only linear layout are supported at this time",type:"string"}],description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{anyOf:[{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},{const:!0,description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"}],description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`."},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{anyOf:[{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},{$ref:"#/definitions/DummyTrackStyle",description:"Defines how the track is styled"}],description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},template:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},type:{const:"dummy-track",description:"Used to specify the dummy track",type:"string"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{anyOf:[{$ref:"#/definitions/ZoomLimits"},{description:"Unused property for DummyTrack",items:{type:"null"},maxItems:2,minItems:2,type:"array"}]}},type:"object"},PredefinedColors:{enum:["viridis","grey","spectral","warm","cividis","bupu","rdbu","hot","pink"],type:"string"},Range:{anyOf:[{$ref:"#/definitions/ValueExtent"},{$ref:"#/definitions/PredefinedColors"}]},RangeFilter:{additionalProperties:!1,properties:{field:{description:"A filter is applied based on the values of the specified data field",type:"string"},inRange:{description:"Check whether the value is in a number range.",items:{type:"number"},type:"array"},not:{description:'when `{"not": true}`, apply a NOT logical operation to the filter.\n\n__Default:__ `false`',type:"boolean"},type:{const:"filter",type:"string"}},required:["field","inRange","type"],type:"object"},ResponsiveSize:{anyOf:[{type:"boolean"},{additionalProperties:!1,properties:{height:{type:"boolean"},width:{type:"boolean"}},type:"object"}]},Row:{additionalProperties:!1,properties:{clip:{description:"Clip row when the actual y value exceeds the max value of the y scale. Used only for bar marks at the moment. __Default__: `true`",type:"boolean"},domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},grid:{description:"Whether to display grid. __Default__: `false`",type:"boolean"},legend:{description:"Whether to display legend. __Default__: `false`",type:"boolean"},padding:{description:"Determines the size of inner white spaces on the top and bottom of individiual rows. __Default__: `0`",type:"number"},range:{$ref:"#/definitions/ValueExtent",description:"Determine the start and end position of rendering area of this track along vertical axis. __Default__: `[0, height]`"},type:{const:"nominal",description:"Specify the data type",type:"string"}},type:"object"},SelectivityCondition:{additionalProperties:!1,properties:{measure:{enum:["width","height","aspectRatio"],type:"string"},operation:{$ref:"#/definitions/LogicalOperation"},target:{description:"Does the condition applied to the visualization itself or its container? __Default__: `'self'`",enum:["self","container"],type:"string"},threshold:{description:"Threshold in the unit of pixels.",type:"number"}},required:["operation","measure","threshold"],type:"object"},SingleTrack:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"Assigned to `uid` in a HiGlass view config, used for API and caching.",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["data","mark"],type:"object"},SingleView:{anyOf:[{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"overlay",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{$ref:"#/definitions/PartialTrack"},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["alignment","tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{const:"stack",type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"},{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},responsiveSpec:{items:{additionalProperties:!1,properties:{selectivity:{items:{$ref:"#/definitions/SelectivityCondition"},type:"array"},spec:{additionalProperties:!1,properties:{_assignedHeight:{type:"number"},_assignedWidth:{description:"Internal: Used for responsive spec",type:"number"},_invalidTrack:{description:"internal",type:"boolean"},_renderingId:{description:"internal",type:"string"},alignment:{enum:["overlay","stack"],type:"string"},assembly:{$ref:"#/definitions/Assembly",description:'A string that specifies the genome builds to use. Currently support `"hg38"`, `"hg19"`, `"hg18"`, `"hg17"`, `"hg16"`, `"mm10"`, `"mm9"`, and `"unknown"`.\n\n__Note:__: with `"unknown"` assembly, genomic axes do not show chrN: in labels.'},baselineY:{type:"number"},centerRadius:{description:"Proportion of the radius of the center white space.\n\n__Default:__ `0.3`",type:"number"},color:{anyOf:[{$ref:"#/definitions/Color"},{$ref:"#/definitions/ChannelValue"}]},data:{$ref:"#/definitions/DataDeep"},dataTransform:{items:{$ref:"#/definitions/DataTransform"},type:"array"},displacement:{$ref:"#/definitions/Displacement"},endAngle:{description:'Specify the end angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},experimental:{additionalProperties:!1,properties:{mouseEvents:{anyOf:[{type:"boolean"},{$ref:"#/definitions/MouseEventsDeep"}]},performanceMode:{default:!1,description:"Render visual marks with less smooth curves to increase rendering performance. Only supported for `elliptical` `linkStyle` `withinLink` currently.",type:"boolean"}},type:"object"},flipY:{type:"boolean"},height:{description:"Specify the track height in pixels.",type:"number"},id:{description:"The ID of a view that is maintained for the use of JS API functions, e.g., positions of a view",type:"string"},innerRadius:{description:'Specify the inner radius of tracks when (`{"layout": "circular"}`).',type:"number"},layout:{$ref:"#/definitions/Layout",description:"Specify the layout type of all tracks."},linkingId:{description:"Specify an ID for [linking multiple views](http://gosling-lang.org/docs/user-interaction#linking-views)",type:"string"},mark:{$ref:"#/definitions/Mark"},opacity:{anyOf:[{$ref:"#/definitions/Opacity"},{$ref:"#/definitions/ChannelValue"}]},orientation:{$ref:"#/definitions/Orientation",description:"Specify the orientation."},outerRadius:{description:'Specify the outer radius of tracks when `{"layout": "circular"}`.',type:"number"},overlayOnPreviousTrack:{type:"boolean"},overrideTemplate:{type:"boolean"},prerelease:{additionalProperties:!1,description:"internal",type:"object"},row:{anyOf:[{$ref:"#/definitions/Row"},{$ref:"#/definitions/ChannelValue"}]},size:{anyOf:[{$ref:"#/definitions/Size"},{$ref:"#/definitions/ChannelValue"}]},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},startAngle:{description:'Specify the start angle (in the range of [0, 360]) of circular tracks (`{"layout": "circular"}`).',type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},stretch:{type:"boolean"},stroke:{anyOf:[{$ref:"#/definitions/Stroke"},{$ref:"#/definitions/ChannelValue"}]},strokeWidth:{anyOf:[{$ref:"#/definitions/StrokeWidth"},{$ref:"#/definitions/ChannelValue"}]},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},subtitle:{type:"string"},text:{anyOf:[{$ref:"#/definitions/Text"},{$ref:"#/definitions/ChannelValue"}]},title:{description:"If defined, will show the textual label on the left-top corner of a track.",type:"string"},tooltip:{items:{$ref:"#/definitions/Tooltip"},type:"array"},tracks:{anyOf:[{items:{$ref:"#/definitions/PartialTrack"},type:"array"},{items:{anyOf:[{$ref:"#/definitions/PartialTrack"},{$ref:"#/definitions/OverlaidTracks"}]},type:"array"}]},visibility:{items:{$ref:"#/definitions/VisibilityCondition"},type:"array"},width:{description:"Specify the track width in pixels.",type:"number"},x:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},x1e:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},xe:{anyOf:[{$ref:"#/definitions/X"},{$ref:"#/definitions/ChannelValue"}]},y:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},y1e:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},ye:{anyOf:[{$ref:"#/definitions/Y"},{$ref:"#/definitions/ChannelValue"}]},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},type:"object"}},required:["spec","selectivity"],type:"object"},type:"array"},spacing:{description:"The size of the gap (1) between tracks, (2) between views, and (3) of the origin of circular tracks. The effect of this property depends on where on the spec you specify the `spacing`.\n\nIn a linear layout, this value is used in pixels, while in a circular layout, this value is used relative to the height of the tracks or views.",type:"number"},static:{description:"Whether to disable [Zooming and Panning](http://gosling-lang.org/docs/user-interaction#zooming-and-panning), __Default:__ `false`.",type:"boolean"},style:{$ref:"#/definitions/Style",description:"Define the [style](http://gosling-lang.org/docs/visual-channel#style-related-properties) of multive views. Will be overwritten by the style of children elements (e.g., view, track)."},tracks:{items:{$ref:"#/definitions/Track"},type:"array"},xAxis:{$ref:"#/definitions/AxisPosition",description:"not supported"},xDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic x-axis"},xOffset:{description:"Specify the x offset of views in the unit of pixels",type:"number"},yDomain:{anyOf:[{$ref:"#/definitions/DomainInterval"},{$ref:"#/definitions/DomainChrInterval"},{$ref:"#/definitions/DomainChr"}],description:"Specify the visible region of genomic y-axis"},yOffset:{description:"Specify the y offset of views in the unit of pixels",type:"number"},zoomLimits:{$ref:"#/definitions/ZoomLimits"}},required:["tracks"],type:"object"}]},Size:{additionalProperties:!1,properties:{domain:{$ref:"#/definitions/ValueExtent",description:"Values of the data"},field:{description:"Name of the data field",type:"string"},legend:{description:"not supported: Whether to display legend. __Default__: `false`",type:"boolean"},range:{$ref:"#/definitions/ValueExtent",description:"Ranges of visual channel values"},type:{description:"Specify the data type",enum:["quantitative","nominal"],type:"string"}},type:"object"},SizeVisibilityCondition:{additionalProperties:!1,properties:{conditionPadding:{description:"Specify the buffer size (in pixel) of width or height when calculating the visibility.\n\n__Default__: `0`",type:"number"},measure:{description:"Specify which aspect of the `target` will be compared to the `threshold`.",enum:["width","height"],type:"string"},operation:{$ref:"#/definitions/LogicalOperation",description:`A string that specifies the logical operation to conduct between \`threshold\` and the \`measure\` of \`target\`. Support - greater than : "greater-than", "gt", "GT" @@ -1985,11 +1985,11 @@ ${C}`}},{key:"handleExportSVG",value:function(){JG("export.svg",new Blob([this.c - greater than or equal to : "greater-than-or-equal-to", "gtet", "GTET" -- less than or equal to : "less-than-or-equal-to", "ltet", "LTET"`},target:{description:"Target specifies the object that you want to compare with the threshold.",enum:["track","mark"],type:"string"},threshold:{description:"Set a threshold in the unit of base pairs (bp)",type:"number"},transitionPadding:{description:"Specify the buffer size (in pixel) of width or height for smooth transition.\n\n__Default__: `0`",type:"number"}},required:["measure","operation","target","threshold"],type:"object"},ZoomLimits:{items:{type:["number","null"]},maxItems:2,minItems:2,type:"array"}},egg={$ref:jtg,$schema:$tg,definitions:qtg};function tgg(e){return Z2e(egg,e)}function Z2e(e,g,I=!1){const i=new d6e({extendRefs:!0}).compile(e),n=i(g);let C="",r="";return i.errors&&(r=JSON.stringify(i.errors,null,2),I||console.warn(r),C="⚠️ Some properties are incorrectly used."),{state:n?"success":"warn",message:C,details:r}}function G2e(e){let g=!0;const I=[];return N0(e).forEach(n=>{!L$(n)&&n.mark!=="brush"&&n.mark!=="rule"&&(I.push("genomic type is not encoded to either a x- or y- axis"),g=!1);const C=n.color;n.mark==="line"&&ut(C)&&C.type==="quantitative"&&(I.push("`line` mark cannot be used with `quantitative` value"),g=!1)}),{valid:g,errorMessages:I}}function L$(e){let g;return["x","y","xe","ye","x1","y1","x1e","y1e"].reverse().forEach(I=>{const i=e[I];ut(i)&&i.type==="genomic"&&(g=i)}),g}function v2e(e){let g;return["x","xe","y","ye","x1","y1","x1e","y1e"].reverse().forEach(I=>{const i=e[I];ut(i)&&i.type==="genomic"&&(g=I)}),g}const ggg=[{name:"gene",channels:[{name:"startPosition",type:"genomic",required:!0},{name:"endPosition",type:"genomic",required:!0},{name:"strandColor",type:"nominal",required:!0},{name:"strandRow",type:"nominal",required:!0},{name:"opacity",type:"value",required:!1},{name:"geneHeight",type:"value",required:!1},{name:"geneLabel",type:"nominal",required:!0},{name:"geneLabelColor",type:"nominal",required:!0},{name:"geneLabelFontSize",type:"value",required:!1},{name:"geneLabelStroke",type:"value",required:!1},{name:"geneLabelStrokeThickness",type:"value",required:!1},{name:"geneLabelOpacity",type:"value",required:!1},{name:"type",type:"nominal",required:!0}],mapping:[{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["-"]}],mark:"triangleLeft",x:{base:"startPosition",type:"genomic"},size:{base:"geneHeight",value:12},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},style:{align:"right"}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["+"]}],mark:"triangleRight",x:{base:"endPosition",type:"genomic"},size:{base:"geneHeight",value:12},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},style:{align:"left"}},{dataTransform:[{type:"filter",base:"type",oneOf:["exon"]}],mark:"rect",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},size:{base:"geneHeight",value:12},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["+"]}],mark:"rect",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},size:{value:3}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["-"]}],mark:"rect",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},size:{value:3}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]}],mark:"text",text:{base:"geneLabel",type:"nominal"},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"geneLabelColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:1},size:{base:"geneLabelFontSize",value:18},stroke:{base:"geneLabelStroke",value:"white"},strokeWidth:{base:"geneLabelStrokeThickness",value:2},visibility:[{operation:"less-than",measure:"width",threshold:"|xe-x|",transitionPadding:10,target:"mark"}]}]},{name:"ideogram",channels:[{name:"startPosition",type:"genomic",required:!0},{name:"endPosition",type:"genomic",required:!0},{name:"chrHeight",type:"value",required:!1},{name:"name",type:"nominal",required:!0},{name:"stainBackgroundColor",type:"nominal",required:!0},{name:"stainLabelColor",type:"nominal",required:!0},{name:"stainStroke",type:"value",required:!1},{name:"stainStrokeWidth",type:"value",required:!1}],mapping:[{mark:"rect",dataTransform:[{type:"filter",base:"stainBackgroundColor",oneOf:["acen"],not:!0}],color:{base:"stainBackgroundColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar","acen"],range:["white","lightgray","gray","gray","black","#7B9CC8","#DC4542"]},size:{base:"chrHeight",value:18},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},stroke:{base:"stainStroke",value:"gray"},strokeWidth:{base:"stainStrokeWidth",value:.3}},{mark:"triangleRight",dataTransform:[{type:"filter",base:"stainBackgroundColor",oneOf:["acen"]},{type:"filter",base:"name",include:"q"}],color:{base:"stainBackgroundColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar","acen"],range:["white","lightgray","gray","gray","black","#7B9CC8","#DC4542"]},size:{base:"chrHeight",value:18},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},stroke:{base:"stainStroke",value:"gray"},strokeWidth:{base:"stainStrokeWidth",value:.3}},{mark:"triangleLeft",dataTransform:[{type:"filter",base:"stainBackgroundColor",oneOf:["acen"]},{type:"filter",base:"name",include:"p"}],color:{base:"stainBackgroundColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar","acen"],range:["white","lightgray","gray","gray","black","#7B9CC8","#DC4542"]},size:{base:"chrHeight",value:18},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},stroke:{base:"stainStroke",value:"gray"},strokeWidth:{base:"stainStrokeWidth",value:.3}},{mark:"text",dataTransform:[{type:"filter",base:"stainLabelColor",oneOf:["acen"],not:!0}],color:{base:"stainLabelColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar"],range:["black","black","black","black","white","black"]},text:{base:"name",type:"nominal"},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},visibility:[{operation:"less-than",measure:"width",threshold:"|xe-x|",transitionPadding:10,target:"mark"}]}]},{name:"sequence",channels:[{name:"startPosition",type:"genomic",required:!0},{name:"endPosition",type:"genomic",required:!0},{name:"barLength",type:"quantitative",required:!0},{name:"baseBackground",type:"nominal",required:!0},{name:"baseLabelColor",type:"nominal",required:!0},{name:"baseLabelFontSize",type:"value",required:!1}],mapping:[{mark:"bar",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},y:{base:"barLength",type:"quantitative",axis:"none"},color:{base:"baseBackground",type:"nominal",domain:["A","T","G","C"]}},{dataTransform:[{type:"filter",base:"barLength",oneOf:[0],not:!0}],mark:"text",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},color:{base:"baseLabelColor",type:"nominal",domain:["A","T","G","C"],range:["white"]},text:{base:"baseBackground",type:"nominal"},size:{base:"baseLabelFontSize",value:18},visibility:[{operation:"less-than",measure:"width",threshold:"|xe-x|",transitionPadding:30,target:"mark"},{operation:"LT",measure:"zoomLevel",threshold:10,target:"track"}]}]}];function Igg(e,g){J9(e,(I,i,n)=>{var C,r;if(!kje(I))return;const{template:o}=I,a=g.find(c=>c.name===o);if(!a){I._invalidTrack=!0,console.warn(`There is no track template named '${o}'`);return}let s=!0;if(a.channels.forEach(c=>{c.required&&(!I.encoding||!(c.name in I.encoding))&&(s=!1,console.warn(`A template spec ('${o}') does not contain a required channel, ${c.name}`))}),!s){I._invalidTrack=!0;return}const A=JSON.parse(JSON.stringify(I));"encoding"in A&&delete A.encoding;const l={...A,alignment:"overlay",tracks:[],width:(C=I.width)!=null?C:100,height:(r=I.height)!=null?r:100};a.mapping.forEach(c=>{const u={data:I.data,mark:c.mark},{dataTransform:d}=c;d&&d.map(m=>{const f=m.base;f&&I.encoding&&f in I.encoding&&"field"in I.encoding[f]&&(delete m.base,m.field=I.encoding[f].field)});const h=I.encoding;h?Object.keys(c).filter(m=>m!=="mark").forEach(m=>{const f=JSON.parse(JSON.stringify(c[m]));if("base"in f){const b=f.base;if(b in h){const p=JSON.parse(JSON.stringify(h[b]));delete f.base;const y=Object.assign(f,JSON.parse(JSON.stringify(p)));u[m]=y}else delete f.base,u[m]=f}else u[m]=f}):Object.keys(c).filter(m=>m!=="mark").forEach(m=>{const f=JSON.parse(JSON.stringify(c[m]));"base"in f&&delete f.base,u[m]=f}),l.tracks.push(u)}),n[i]=l})}const sle=["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],Go={color:sle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:sle,quantitativeSizeRange:[2,6]},igg={base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelMargin:5,labelExcludeChrPrefix:!1,labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{...Go},point:{...Go,size:3},rect:{...Go},triangle:{...Go},area:{...Go},line:{...Go},bar:{...Go},rule:{...Go,strokeWidth:1},link:{...Go,strokeWidth:1},text:{...Go,textAnchor:"middle",textFontWeight:"normal"},brush:{...Go,color:"gray",opacity:.3,stroke:"black",strokeWidth:1}},lle=["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],ngg={color:lle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:lle,quantitativeSizeRange:[2,6]},vo={...ngg,stroke:"white"},Cgg={base:"dark",root:{background:"black",titleColor:"white",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"middle",titleFontWeight:"bold",subtitleColor:"lightgray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleAlign:"middle",subtitleFontWeight:"normal",showMousePosition:!0,mousePositionColor:"#FFFFFF"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"white",titleBackground:"black",titleFontSize:18,titleAlign:"left",outline:"white",outlineWidth:1},legend:{position:"right",background:"black",backgroundOpacity:.7,labelColor:"white",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"white"},axis:{tickColor:"white",labelMargin:5,labelExcludeChrPrefix:!1,labelColor:"white",labelFontSize:10,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"white",gridColor:"gray",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{...vo},point:{...vo,size:3},rect:{...vo},triangle:{...vo},area:{...vo},line:{...vo},bar:{...vo},rule:{...vo,strokeWidth:1},link:{...vo,strokeWidth:1},text:{...vo,textAnchor:"middle",textFontWeight:"normal"},brush:{...vo,color:"lightgray",opacity:.3,stroke:"white",strokeWidth:1}},cle=["#D19000","#008F67","#005F96","#B86E97","#B55100","#4793BF","#C9C03"],Bo={color:cle[0],size:1,stroke:"#3C3C3C",strokeWidth:0,opacity:1,nominalColorRange:cle,quantitativeSizeRange:[2,6]},rgg={base:"warm",root:{background:"#FFF8E8",titleColor:"#3C3C3C",subtitleColor:"gray",showMousePosition:!0,mousePositionColor:"#3C3C3C"},track:{titleColor:"#3C3C3C",titleBackground:"#FFF8E8",outline:"#3C3C3C",outlineWidth:1},legend:{background:"#FFF8E8",backgroundOpacity:.7,labelColor:"#3C3C3C",backgroundStroke:"#3C3C3C",tickColor:"3C3C3C"},axis:{tickColor:"#3C3C3C",labelColor:"#3C3C3C",baselineColor:"#3C3C3C",gridColor:"#E3E3E3",gridStrokeWidth:1},markCommon:{...Bo},point:{...Bo,size:3},rect:{...Bo},triangle:{...Bo},area:{...Bo},line:{...Bo},bar:{...Bo},rule:{...Bo,strokeWidth:1},link:{...Bo,strokeWidth:1},text:{...Bo,textAnchor:"middle",textFontWeight:"normal"},brush:{...Bo,color:"lightgray",opacity:.3,stroke:"#3C3C3C",strokeWidth:1}},ule=["#F66A62","#05B230","#5692FF","#D764D6","#86E9D4","#6E6AD7","#FFFB00"],So={color:ule[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:ule,quantitativeSizeRange:[2,6]},ogg={base:"ggplot",root:{background:"white",titleColor:"black",titleFontSize:18,titleFontFamily:"Helvetica",titleAlign:"middle",titleFontWeight:"bold",titleBackgroundColor:"white",subtitleColor:"gray",subtitleFontSize:14,subtitleFontFamily:"Helvetica",subtitleAlign:"middle",subtitleFontWeight:"light",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"black"},track:{background:"#e8e8e8",alternatingBackground:"#d1d1d1",titleColor:"black",titleBackground:"white",outline:"black",outlineWidth:2},legend:{position:"right",background:"#e8e8e8",backgroundOpacity:1,labelColor:"black",backgroundStroke:"#e8e8e8",tickColor:"white"},axis:{tickColor:"white",labelColor:"black",baselineColor:"#e8e8e8",gridColor:"white",gridStrokeWidth:2},markCommon:{...So},point:{...So,size:3},rect:{...So},triangle:{...So},area:{...So},line:{...So},bar:{...So},rule:{...So,strokeWidth:1},link:{...So,strokeWidth:1},text:{...So,textAnchor:"middle",textFontWeight:"bold"},brush:{...So,color:"black",opacity:.3,stroke:"black",strokeWidth:1}},dle=["#37E649","#ED2D44","#AEAFEA","#EBAEAE","#CE7B3D","#8743E0","#5233F0"],wo={color:dle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:dle,quantitativeSizeRange:[2,6]},agg={base:"igv",root:{background:"white",titleColor:"white",titleAlign:"left",titleFontWeight:"bold",titleBackgroundColor:"#5f5f5f",subtitleColor:"#3b3b3b",subtitleAlign:"left",subtitleFontWeight:"bold",subtitleBackgroundColor:"#c4c4c4",showMousePosition:!0,mousePositionColor:"black"},track:{background:"white",alternatingBackground:"#e8e8e8",titleColor:"white",titleBackground:"#5F5F5F",outline:"#5F5F5F",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:1,labelColor:"black",backgroundStroke:"black",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",baselineColor:"white",gridColor:"transparent",gridStrokeWidth:0},markCommon:{...wo},point:{...wo,size:3},rect:{...wo},triangle:{...wo},area:{...wo},line:{...wo},bar:{...wo},rule:{...wo,strokeWidth:1},link:{...wo,strokeWidth:1},text:{...wo,textAnchor:"middle",textFontWeight:"bold"},brush:{...wo,color:"white",opacity:.3,stroke:"black",strokeWidth:1}},hle=["#CD9B1D","#8A668B","#40E0D0","#FF6969","#666666","#FAC902","#FE0000","#CC96CD","#D9D9D9"],Ro={color:hle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:hle,quantitativeSizeRange:[2,6]},Agg={base:"ensembl",root:{background:"white",titleColor:"#494949",titleFontSize:24,titleFontFamily:"GGX88",titleAlign:"left",titleFontWeight:"bold",titleBackgroundColor:"white",subtitleColor:"white",subtitleFontSize:19,subtitleFontFamily:"GGX88",subtitleAlign:"left",subtitleFontWeight:"normal",subtitleBackgroundColor:"#7B8BAF",mousePositionColor:"#FE0000",showMousePosition:!0},track:{background:"white",alternatingBackground:"#fffdf7",titleColor:"black",titleBackground:"white",titleAlign:"left",outline:"#7B8BAF",outlineWidth:2},legend:{tickColor:"black",labelColor:"black",labelFontWeight:"normal",labelFontFamily:"GGX88",background:"white",backgroundOpacity:2,backgroundStroke:"lightgray"},axis:{tickColor:"black",labelColor:"black",labelFontFamily:"GGX88",baselineColor:"black",gridColor:"#7B8BAF",gridStrokeWidth:2},markCommon:{...Ro},point:{...Ro,size:3},rect:{...Ro},triangle:{...Ro},area:{...Ro},line:{...Ro},bar:{...Ro},rule:{...Ro,strokeWidth:1},link:{...Ro,strokeWidth:1},text:{...Ro,textAnchor:"middle",textFontWeight:"normal"},brush:{...Ro,color:"gray",opacity:.3,stroke:"black",strokeWidth:1}},mle=["#3A62FE","#F85353","#3A62FE","#F85353","#DCA326","#03BF06","#BABABA"],Vo={color:mle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:mle,quantitativeSizeRange:[2,6]},sgg={base:"jbrowse",root:{background:"white",titleColor:"white",titleFontSize:20,titleFontFamily:"Roboto",titleAlign:"middle",titleFontWeight:"normal",titleBackgroundColor:"#0b243f",subtitleColor:"white",subtitleFontSize:18,subtitleFontFamily:"Roboto",subtitleAlign:"middle",subtitleFontWeight:"normal",subtitleBackgroundColor:"#732162",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",alternatingBackground:"white",titleAlign:"middle",titleColor:"white",titleBackground:"#0B243F",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"#DCA326",labelFontWeight:"bold",labelFontFamily:"Roboto",backgroundStroke:"#black",tickColor:"black"},axis:{tickColor:"black",labelColor:"#DCA326",labelFontWeight:"bold",labelFontFamily:"Roboto",baselineColor:"black",gridColor:"#c5d5d9",gridStrokeWidth:1},markCommon:{...Vo},point:{...Vo,size:3},rect:{...Vo},triangle:{...Vo},area:{...Vo},line:{...Vo},bar:{...Vo},rule:{...Vo,strokeWidth:1},link:{...Vo,strokeWidth:1},text:{...Vo,textAnchor:"middle",textFontWeight:"normal"},brush:{...Vo,color:"#c5d5d9",opacity:.3,stroke:"black",strokeWidth:1}},fle=["#3A5FCD","#FFA54E","#8FBC8F","#B6709B","#EE6A50","#CCB79E","#DADA8F","#00CDCC","#EED5D2","#CD8EDD","#9ACD31","#D1BEA8","#FFB6C0"],Wo={color:fle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:fle,quantitativeSizeRange:[2,6]},lgg={base:"ucsc",root:{background:"white",titleColor:"white",titleFontSize:22,titleAlign:"middle",titleFontWeight:"bold",titleBackgroundColor:"#00457c",subtitleColor:"black",subtitleAlign:"middle",subtitleFontWeight:"bold",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#FE0000"},track:{background:"white",alternatingBackground:"#e3f7fc",titleColor:"#3A5FCD",titleBackground:"white",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontWeight:"bold",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"#3A5FCD",labelFontWeight:"bold",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1},markCommon:{...Wo},point:{...Wo,size:3},rect:{...Wo},triangle:{...Wo},area:{...Wo},line:{...Wo},bar:{...Wo},rule:{...Wo,strokeWidth:1},link:{...Wo,strokeWidth:1},text:{...Wo,textAnchor:"middle",textFontWeight:"normal"},brush:{...Wo,color:"gray",opacity:.3,stroke:"black",strokeWidth:1}},ple=["#6E12AC","#15C250","#E70FB1","#FF8E55","#A3B8F3","#DE5E59","#77AAAA","#F5CCCA"],Xo={color:ple[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:ple,quantitativeSizeRange:[2,6]},cgg={base:"washu",root:{background:"white",titleColor:"gray",titleAlign:"left",titleFontWeight:"normal",titleBackgroundColor:"white",subtitleColor:"lightgray",subtitleAlign:"left",subtitleFontWeight:"light",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",titleColor:"gray",titleBackground:"white",titleAlign:"left",outline:"gray",outlineWidth:1},legend:{background:"white",backgroundOpacity:.5,labelColor:"gray",labelFontWeight:"light",backgroundStroke:"#DBDBDB",tickColor:"gray"},axis:{tickColor:"lightgray",labelColor:"gray",labelFontWeight:"light",baselineColor:"gray",gridColor:"transparent",gridStrokeWidth:0},markCommon:{...Xo},point:{...Xo,size:3},rect:{...Xo},triangle:{...Xo},area:{...Xo},line:{...Xo},bar:{...Xo},rule:{...Xo,strokeWidth:1},link:{...Xo,strokeWidth:1},text:{...Xo,textAnchor:"middle",textFontWeight:"normal"},brush:{...Xo,color:"gray",opacity:.3,stroke:"gray",strokeWidth:1}},ble=["#ED7D31","#4472C4","#FFC207","#76AE4F","#9E480E","#A5A5A5","#4472C4","#264378","#76AE4F","#5B9CD5"],Ho={color:ble[0],size:1,stroke:"#5A5A5A",strokeWidth:0,opacity:1,nominalColorRange:ble,quantitativeSizeRange:[2,6]},ugg={base:"excel",root:{background:"white",titleColor:"#5A5A5A",titleFontSize:30,titleFontFamily:"Calibri",titleAlign:"middle",titleFontWeight:"bold",titleBackgroundColor:"white",subtitleColor:"#5A5A5A",subtitleFontSize:22,subtitleFontFamily:"Calibri",subtitleAlign:"middle",subtitleFontWeight:"bold",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",alternatingBackground:"#f5f5f5",titleColor:"#5A5A5A",titleBackground:"white",outline:"#5A5A5A",outlineWidth:1},legend:{position:"right",tickColor:"#5A5A5A",labelColor:"#5A5A5A",labelFontSize:12,labelFontWeight:"bold",labelFontFamily:"Calibri",background:"white",backgroundOpacity:.7,backgroundStroke:"#5A5A5A"},axis:{tickColor:"#5A5A5A",labelColor:"#5A5A5A",labelFontFamily:"Calibri",baselineColor:"#5A5A5A",gridColor:"#5A5A5A",gridStrokeWidth:1},markCommon:{...Ho},point:{...Ho,size:3},rect:{...Ho},triangle:{...Ho},area:{...Ho},line:{...Ho},bar:{...Ho},rule:{...Ho,strokeWidth:1},link:{...Ho,strokeWidth:1},text:{...Ho,textAnchor:"middle",textFontWeight:"normal"},brush:{...Ho,color:"#5A5A5A",opacity:.3,stroke:"#5A5A5A",strokeWidth:1}},yle=["#4185f4","#DB4437","#F4B400","#0D9D58","#AA30C3","#FF6E02","#CBC74C"],To={color:yle[0],size:2,stroke:"black",strokeWidth:.3,opacity:1,nominalColorRange:yle,quantitativeSizeRange:[2,6]},dgg={base:"google",root:{background:"white",titleColor:"#454545",titleFontSize:20,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"normal",titleBackgroundColor:"white",subtitleColor:"#7d7d7d",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleAlign:"left",subtitleFontWeight:"light",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",alternatingBackground:"#f5f5f5",titleColor:"#e8e8e8",titleBackground:"white",titleFontSize:12,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"right",background:"white",backgroundOpacity:1,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"black",tickColor:"black"},axis:{labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",tickColor:"black",labelColor:"black",baselineColor:"black",gridColor:"black",gridStrokeWidth:1},markCommon:{...To},point:{...To,size:3},rect:{...To},triangle:{...To},area:{...To},line:{...To},bar:{...To},rule:{...To,strokeWidth:1},link:{...To,strokeWidth:1},text:{...To,textAnchor:"middle",textFontWeight:"normal"},brush:{...To,color:"#999999",opacity:.3,stroke:"black",strokeWidth:.7}},i_={light:igg,dark:Cgg,warm:rgg,ggplot:ogg,igv:agg,ensembl:Agg,jbrowse:sgg,ucsc:lgg,washu:cgg,excel:ugg,google:dgg};function n_(e){return Object.keys(i_).indexOf(e)!==-1}function pG(e){return n_(e)?i_[e]:i_.light}function U$(e,g){var I;function i(...n){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');return g(...n)}return i.config={...e,availableOptions:Object.keys((I=e.defaultOptions)!=null?I:{})},i}const hgg=200,mgg=6,fgg=2,B2e=7829367,pgg=' ',bgg={type:"axis-track",datatype:["multivec","epilogos"],local:!1,orientation:"1d-horizontal",thumbnail:new DOMParser().parseFromString(pgg,"text/xml").documentElement,defaultOptions:{innerRadius:340,outerRadius:310,startAngle:0,endAngle:360,width:700,height:700,layout:"linear",labelMargin:5,excludeChrPrefix:!1,labelPosition:"none",labelColor:"black",labelTextOpacity:.4,trackBorderWidth:0,trackBorderColor:"black",tickPositions:"even",fontSize:12,fontFamily:"sans-serif",fontWeight:"normal",color:"#808080",stroke:"#ffffff",backgroundColor:"transparent",showMousePosition:!1,tickColor:B2e}},ygg=(e,g,I)=>{const{absToChr:i,colorToHex:n,pixiTextToSvg:C,svgLine:r,showMousePosition:o}=e.utils;function a(A,l){return Object.assign(new e.libraries.PIXI.Text(A,l),{hashValue:Math.random()})}class s extends e.tracks.PixiTrack{constructor(){super(g,I),rt(this,"allTexts"),rt(this,"searchField"),rt(this,"chromInfo"),rt(this,"dataConfig"),rt(this,"pTicksCircular"),rt(this,"pTicks"),rt(this,"gTicks"),rt(this,"tickTexts"),rt(this,"isShowGlobalMousePosition"),rt(this,"pixiTextConfig"),rt(this,"stroke"),rt(this,"tickWidth"),rt(this,"tickHeight"),rt(this,"tickTextSeparation"),rt(this,"tickColor"),rt(this,"animate"),rt(this,"hideMousePosition"),rt(this,"gBoundTicks"),rt(this,"leftBoundTick"),rt(this,"rightBoundTick"),rt(this,"is2d"),rt(this,"texts");const{dataConfig:l,animate:c,chromInfoPath:u,isShowGlobalMousePosition:d}=g;this.searchField=null,this.dataConfig=l,this.allTexts=[],this.pTicksCircular=new e.libraries.PIXI.Graphics,this.pTicks=new e.libraries.PIXI.Graphics,this.pMain.addChild(this.pTicks),this.pMain.addChild(this.pTicksCircular),this.gTicks={},this.tickTexts={},this.options=I,this.isShowGlobalMousePosition=d,this.pixiTextConfig=Fs({size:+this.options.fontSize,fontFamily:this.options.fontFamily,fontWeight:this.options.fontWeight,color:this.options.color,stroke:this.options.stroke,strokeThickness:2}),this.stroke=n(this.pixiTextConfig.stroke),this.tickWidth=hgg,this.tickHeight=mgg,this.tickTextSeparation=fgg,this.tickColor=n(this.options.tickColor),this.animate=c,this.pubSubs=[],this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=o(this,this.is2d,this.isShowGlobalMousePosition()));let h=u;h||(h=`${l.server}/chrom-sizes/?id=${l.tilesetUid}`);const m=this.options.assembly,f={},b={...bI(m).size},p=[];Object.keys(bI(m).size).forEach(y=>{f[y]={chr:y,pos:bI(m).size[y]}}),Object.keys(bI(m).interval).forEach(y=>{p.push({chr:y,pos:bI(m).interval[y][0]})}),this.chromInfo={chrPositions:f,chromLengths:b,cumPositions:p},this.rerender(this.options,!0),this.draw(),this.animate()}initBoundsTicks(){this.pTicks&&(this.pMain.removeChild(this.pTicks),this.pTicks=null),this.gBoundTicks||(this.gBoundTicks=new e.libraries.PIXI.Graphics,this.leftBoundTick=a("",this.pixiTextConfig),this.rightBoundTick=a("",this.pixiTextConfig),this.gBoundTicks.addChild(this.leftBoundTick),this.gBoundTicks.addChild(this.rightBoundTick),this.pMain.addChild(this.gBoundTicks)),this.texts=[]}initChromLabels(){this.chromInfo&&(this.gBoundTicks&&(this.pMain.removeChild(this.gBoundTicks),this.gBoundTicks=void 0),this.pTicks||(this.pTicks=new e.libraries.PIXI.Graphics,this.pMain.addChild(this.pTicks)),this.texts=[],this.pTicks.removeChildren(),this.chromInfo.cumPositions.forEach(l=>{var c,u,d;const h=l.chr;this.gTicks[h]=new e.libraries.PIXI.Graphics,this.tickTexts[h]||(this.tickTexts[h]=[]);const m=this.options.excludeChrPrefix?h.replace("chr",""):h,f=a(m,this.pixiTextConfig);(c=this.pTicks)==null||c.addChild(f),(u=this.pTicks)==null||u.addChild(this.gTicks[h]),(d=this.texts)==null||d.push(f)}))}rerender(l,c){const u=JSON.stringify(l);!c&&u===this.prevOptions||(this.prevOptions=u,this.options=l,this.pixiTextConfig.fontSize=+this.options.fontSize?`${+this.options.fontSize}px`:this.pixiTextConfig.fontSize,this.pixiTextConfig.fill=this.options.color||this.pixiTextConfig.fill,this.pixiTextConfig.stroke=this.options.stroke||this.pixiTextConfig.stroke,this.stroke=n(this.pixiTextConfig.stroke),this.tickColor=this.options.tickColor?n(this.options.tickColor):B2e,this.options.tickPositions==="ends"&&this.options.layout!=="circular"?this.initBoundsTicks():this.initChromLabels(),super.rerender(l,c),this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=o(this,this.is2d,this.isShowGlobalMousePosition())),!this.options.showMousePosition&&this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0))}formatTick(l){if(isNaN(l))return"null";const c=this._xScale.domain(),u=c[1]-c[0],d=oqe(l,u),h=Z0e(","),m=G0e(`,.${d}`,u);let f=h;return this.options.tickFormat==="si"?f=m:this.options.tickFormat==="plain"?f=h:this.options.tickPositions==="ends"&&(f=m),f(l)}drawBoundsTicks(l,c){if(!this.gBoundTicks||!this.leftBoundTick||!this.rightBoundTick)return;const u=this.gBoundTicks;u.clear(),u.lineStyle(1,0);const d=this.options.reverseOrientation?0:this.dimensions[1],h=this.options.reverseOrientation?this.tickHeight:this.dimensions[1]-this.tickHeight;u.moveTo(1,d),u.lineTo(1,h),u.moveTo(this.dimensions[0]-1,d),u.lineTo(this.dimensions[0]-1,h),this.leftBoundTick.x=0,this.leftBoundTick.y=this.options.reverseOrientation?h+this.tickTextSeparation:h-this.tickTextSeparation,this.leftBoundTick.text=this.options.assembly==="unknown"?`${this.formatTick(l[1])}`:`${l[0]}: ${this.formatTick(l[1])}`,this.leftBoundTick.anchor.y=this.options.reverseOrientation?0:1,this.rightBoundTick.x=this.dimensions[0],this.rightBoundTick.text=this.options.assembly==="unknown"?`${this.formatTick(c[1])}`:`${c[0]}: ${this.formatTick(c[1])}`,this.rightBoundTick.y=this.options.reverseOrientation?h+this.tickTextSeparation:h-this.tickTextSeparation,this.rightBoundTick.anchor.y=this.options.reverseOrientation?0:1,this.rightBoundTick.anchor.x=1,this.flipText&&(this.leftBoundTick.scale.x=-1,this.leftBoundTick.anchor.x=1,this.rightBoundTick.scale.x=-1,this.rightBoundTick.anchor.x=0),this.leftBoundTick.tickLine=[1,this.dimensions[1],1,this.dimensions[1]-this.tickHeight],this.rightBoundTick.tickLine=[this.dimensions[0]-1,this.dimensions[1],this.dimensions[0]-1,this.dimensions[1]-this.tickHeight],this.tickTexts={},this.tickTexts.all=[this.leftBoundTick,this.rightBoundTick]}drawTicks(l){const c=this.gTicks[l.chr];c.visible=!0,c.clear();const u=+this.chromInfo.chromLengths[l.chr],d=Math.max(this._xScale(l.pos),0),h=Math.min(this._xScale(l.pos+u),this.dimensions[0]),m=(h-d)/this.tickWidth,b=qd().domain([Math.max(1,this._xScale.invert(0)-l.pos),Math.min(u,this._xScale.invert(this.dimensions[0])-l.pos)]).range([d,h]).ticks(m).filter(v=>Number.isInteger(v)),p=this.tickTexts[l.chr],y=this.tickHeight,Z=0;let B=y+this.tickTextSeparation;for(this.options.reverseOrientation&&(B=this.dimensions[1]-B);p.lengthb.length;){const v=p.pop();this.gTicks[l.chr].removeChild(v)}let G=0;for(;Gu){const V=R-u;R=u,w-=V}const S=[],X=b+G.height/2+3;for(let V=R;V>=w;V-=v/10){const H=Mt(V,u,X,u/2,d/2,h,m);S.push(new e.libraries.PIXI.Point(H.x,H.y))}return S.length===0?void 0:(l.updateText(),new e.libraries.PIXI.SimpleRope(l.texture,S))}draw(){if(this.allTexts=[],!this.texts)return;const l=i(this._xScale.domain()[0],this.chromInfo),c=i(this._xScale.domain()[1],this.chromInfo);if(!l||!c){console.warn("Empty chromInfo:",this.dataConfig,this.chromInfo);return}if(this.options.tickPositions==="ends"&&this.options.layout!=="circular"){if(!this.gBoundTicks)return;this.gBoundTicks.visible=!0,this.drawBoundsTicks(l,c);return}if(!this.pTicks)return;const u=this.options.layout==="circular";for(let h=0;h{this.tickTexts[h]&&this.tickTexts[h].forEach(m=>{m.visible=!1})}),this.pTicksCircular.removeChildren();for(let h=l[3];h<=c[3];h++){const m=this.chromInfo.cumPositions[h],f=m.pos+this.chromInfo.chromLengths[m.chr]/2,b=this._xScale(f),p=this.texts[h];p.anchor.x=.5,p.anchor.y=u?.5:this.options.reverseOrientation?0:1;let y;u?(y=this.addCurvedText(p,b),y&&this.pTicksCircular.addChild(y)):(p.x=b,p.y=this.dimensions[1]-d),p.updateTransform(),this.flipText&&(p.scale.x=-1);const Z=this.drawTicks(m);u?Z>0&&y&&this.pTicksCircular.removeChild(y):p.visible=Z<=0,this.allTexts.push({importance:p.hashValue,text:p,rope:y})}this.hideOverlaps(this.allTexts)}hideOverlaps(l){const c=new L6e;l.sort((u,d)=>d.importance-u.importance).forEach(({text:u,rope:d})=>{u.updateTransform();const h=u.getBounds(),m=this.options.labelMargin,f={minX:h.x-m,minY:h.y-m,maxX:h.x+h.width+m*2,maxY:h.y+h.height+m*2};m<0||!c.collides(f)?c.insert(f):(u.visible=!1,this.options.layout==="circular"&&d&&this.pTicksCircular.removeChild(d))})}setPosition(l){super.setPosition(l),[this.pMain.position.x,this.pMain.position.y]=this.position}zoomed(l,c){[...l.domain(),...c.domain()].filter(d=>isNaN(d)).length===0&&(this.xScale(l),this.yScale(c),this.draw())}exportSVG(){let l=null,c=null;super.exportSVG?[c,l]=super.exportSVG():(c=document.createElement("g"),l=c),c.setAttribute("class","chromosome-labels");const u=document.createElement("g");return l.appendChild(u),u.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),this.allTexts.filter(d=>d.text.visible).forEach(d=>{const h=C(d.text);u.appendChild(h)}),Object.values(this.tickTexts).forEach(d=>{d.filter(h=>h.visible).forEach(h=>{if(!h.tickLine)return;let m=C(h);u.appendChild(m),m=r(h.x,this.options.reverseOrientation?0:this.dimensions[1],h.x,this.options.reverseOrientation?this.tickHeight:this.dimensions[1]-this.tickHeight,1,this.tickColor);const f=document.createElement("line");f.setAttribute("x1",String(h.tickLine[0])),f.setAttribute("y1",String(h.tickLine[1])),f.setAttribute("x2",String(h.tickLine[2])),f.setAttribute("y2",String(h.tickLine[3])),f.setAttribute("style","stroke: grey"),u.appendChild(m),u.appendChild(f)})}),[c,l]}}return new s},Zle=U$(bgg,ygg);function C_(e,...g){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');class I extends e.tracks.SVGTrack{constructor(n){var C,r;super(...n),rt(this,"circularBrushData"),rt(this,"prevExtent");const[o,a]=n,{registerViewportChanged:s,removeViewportChanged:A,setDomainsCallback:l}=o;this.uid=ln(),this.options=a,this.hasFromView=!o.projectionXDomain,this.removeViewportChanged=A,this.setDomainsCallback=l,this.viewportXDomain=this.hasFromView?null:o.projectionXDomain,this.viewportYDomain=this.hasFromView?null:[0,0],this.prevExtent=[0,0],this.RR=.02;const c=[0,Math.PI*1.7];this.circularBrushData=this.getBrushData(c),this.brush=pqe().innerRadius((C=this.options.innerRadius)!=null?C:100).outerRadius((r=this.options.outerRadius)!=null?r:200),this.gBrush=this.gMain.append("g").attr("id",`brush-${this.uid}`).selectAll(".brush").data(this.circularBrushData).enter().append("path").attr("class","brush").attr("d",this.brush).attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",u=>u.type==="brush"?this.options.projectionFillOpacity:0).attr("stroke-opacity",u=>u.type==="brush"?this.options.projectionStrokeOpacity:0).attr("stroke-width",this.options.strokeWidth).style("pointer-events","all").style("cursor",u=>u.cursor).call(this.dragged()),s(this.uid,this.viewportChanged.bind(this)),this.draw()}getBrushData(n){return[{type:"brush",startAngle:n[0],endAngle:n[1],cursor:"grab"},{type:"start",startAngle:n[0],endAngle:n[0]+this.RR,cursor:"move"},{type:"end",startAngle:n[1]-this.RR,endAngle:n[1],cursor:"move"}]}cropExtent(n){let[C,r]=n,o=0;for(;(C>Math.PI*2||r>Math.PI*2||C<0||r<0)&&!(o++>10);)C>Math.PI*2||r>Math.PI*2?(C-=Math.PI*2,r-=Math.PI*2):(C<0||r<0)&&(C+=Math.PI*2,r+=Math.PI*2);return[C,r].sort((a,s)=>a-s)}updateBrush(n){let[C,r]=n;if(C<=gn&&r<=gn||C>=Math.PI*2-gn&&r>=Math.PI*2-gn){this.gBrush.attr("visibility","hidden");return}CMath.PI*2-gn&&(C=Math.PI*2-gn),rMath.PI*2-gn&&(r=Math.PI*2-gn),this.circularBrushData=this.getBrushData(n),this.gBrush.data(this.circularBrushData).attr("d",this.brush).attr("visibility","visible")}dragged(){const n=r=>{this.startEvent=r.sourceEvent,this.prevExtent=[this.circularBrushData[0].startAngle,this.circularBrushData[0].endAngle]},C=(r,o)=>{const[a,s]=this.position,[A,l]=this.dimensions,c=r.sourceEvent,u=this.startEvent.layerX-a,d=this.startEvent.layerY-s,h=c.layerX-a,m=c.layerY-s,f=Math.atan2(u-A/2,d-l/2)-Math.atan2(h-A/2,m-l/2);let[b,p]=this.prevExtent;if(o.type==="brush"){if(b=b+f,p=p+f,bR?(p+=w,b+=w):(b-=R,p-=R)}}else o.type==="start"?b=b+f:o.type==="end"&&(p=p+f);if([b,p]=this.cropExtent([b,p]),!this._xScale||!this._yScale)return;const y=(this.options.endAngle-this.options.startAngle)/360,Z=b-this.options.startAngle/360*Math.PI*2,B=p-this.options.startAngle/360*Math.PI*2,G=[this._xScale.invert(A-A*B/(Math.PI*2*y)),this._xScale.invert(A-A*Z/(Math.PI*2*y))],v=this.viewportYDomain;this.hasFromView||(this.viewportXDomain=G),this.setDomainsCallback(G,v),this.updateBrush([b,p])};return e.libraries.d3Drag.drag().on("start",n).on("drag",C)}draw(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._xScale(this.viewportXDomain[0]),C=this._xScale(this.viewportXDomain[1]),[r]=this.dimensions;let o=jg(n,r,this.options.startAngle,this.options.endAngle)+Math.PI/2,a=jg(C,r,this.options.startAngle,this.options.endAngle)+Math.PI/2;[a,o]=this.cropExtent([a,o]),this.updateBrush([a,o])}viewportChanged(n,C){const r=n.domain(),o=C.domain();this.viewportXDomain=r,this.viewportYDomain=o,this.draw()}remove(){this.removeViewportChanged(this.uid),super.remove()}rerender(){}zoomed(n,C){this.xScale(n),this.yScale(C),this.draw()}setPosition(n){super.setPosition(n),this.draw()}setDimensions(n){super.setDimensions(n),this.gBrush.attr("transform",`translate(${n[0]/2},${n[1]/2})`),this.draw()}}return new I(g)}const Zgg=' ';C_.config={type:"brush-track",datatype:["projection"],local:!1,projection:!0,orientation:"2d",thumbnail:new DOMParser().parseFromString(Zgg,"text/xml").documentElement,availableOptions:["innerRadius","outerRadius","startAngle","endAngle","axisPositionHorizontal","projectionFillColor","projectionStrokeColor","projectionFillOpacity","projectionStrokeOpacity","strokeWidth"],defaultOptions:{innerRadius:100,outerRadius:200,startAngle:0,endAngle:360,axisPositionHorizontal:"left",projectionFillColor:"#777",projectionStrokeColor:"#777",projectionFillOpacity:.3,projectionStrokeOpacity:.7,strokeWidth:1}};const Gle=3,Ggg={color:"#777",stroke:"#777",strokeWidth:1,strokeOpacity:.7,opacity:.3};class vgg{constructor(g,I,i={}){rt(this,"brushSelection"),rt(this,"style"),rt(this,"range"),rt(this,"data"),rt(this,"startEvent"),rt(this,"prevExtent"),rt(this,"offset"),rt(this,"size"),rt(this,"externals"),rt(this,"emitter"),this.emitter=bqe(),this.range=null,this.prevExtent=[0,0],this.data=this.rangeToData(0,0),this.offset=[0,0],this.size=0,this.externals={d3Selection:I.d3Selection,d3Drag:I.d3Drag},this.style=Object.assign({},Ggg,i),this.brushSelection=g.selectAll(".genomic-range-brush").data(this.data).enter().append("rect").attr("class","genomic-range-brush").call(this.onDrag())}getRange(){return this.range}setSize(g){return this.size=g,this}setOffset(g,I){return this.offset=[g,I],this}updateRange(g){return g?(this.range=[Math.min(...g),Math.max(...g)],this.data=this.rangeToData(...this.range)):this.range=null,this}drawBrush(g=!1){const[I,i]=this.offset,n=this.size,C=r=>Math.abs(r.end-r.start);return this.brushSelection.data(this.data).attr("transform",r=>`translate(${I+r.start}, ${i+1})`).attr("width",r=>`${C(r)}px`).attr("height",`${n-2}px`).attr("fill",this.style.color).attr("stroke",this.style.stroke).attr("stroke-width",`${this.style.strokeWidth}px`).attr("fill-opacity",r=>r.type==="body"?this.style.opacity:0).attr("stroke-opacity",r=>r.type==="body"?this.style.strokeOpacity:0).attr("cursor",r=>r.cursor),this.emitter.emit("brush",this.getRange(),g),this}enable(){return this.brushSelection.attr("pointer-events","all"),this}disable(){return this.brushSelection.attr("pointer-events","none"),this}visible(){return this.brushSelection.attr("visibility","visible"),this}hidden(){return this.brushSelection.attr("visibility","hidden"),this}clear(){return this.updateRange(null).drawBrush().hidden().disable(),this}remove(){return this.brushSelection.remove(),this}rangeToData(g,I){return[{type:"body",cursor:"grab",start:g,end:I},{type:"start",cursor:"ew-resize",start:g-Gle,end:g},{type:"end",cursor:"ew-resize",start:I,end:I+Gle}]}onDrag(){const g=i=>{this.startEvent=i.sourceEvent,this.prevExtent=this.range},I=(i,n)=>{var C;const r=i.sourceEvent.layerX-this.startEvent.layerX;let[o,a]=(C=this.prevExtent)!=null?C:[0,0];n.type==="body"?(o+=r,a+=r):n.type==="start"?o+=r:n.type==="end"&&(a+=r),this.updateRange([o,a]).drawBrush()};return this.externals.d3Drag.drag().on("start",g).on("drag",I)}on(g,I){this.emitter.on(g,I)}}const Bgg=([e,g],[I,i],[n,C],[r,o])=>{const a=Math.sqrt((e-I)**2+(g-i)**2);if(aMath.sqrt((e-I)**2+(g-i)**2)e<=I&&I<=g,wgg=(e,g,I=5)=>r_(e,g-I)&&r_(e,g+I),Rgg=(e,g)=>g.filter((I,i)=>i%2===0).every(I=>r_(e,I)),Vgg=([e,g],I,i=5)=>{let n,C,r,o,a=!1;for(let s=0;s0?h=Math.sqrt((g-o)**2+(e-r)**2):d<0?h=Math.sqrt((g-C)**2+(e-n)**2):h=Math.abs(A[0]*c[1]-A[1]*c[0])/Math.sqrt(A[0]**2+A[1]**2),h{let i,n,C,r,o=!1;for(let a=0,s=I.length-2;ag!=r>g&&e<(C-i)*(g-n)/(r-n)+i&&(o=!o),s=a;return o};class Xgg{constructor(){rt(this,"data"),this.data=[]}size(){return this.data.length}addPolygonBasedEvent(g,I){this.data.push({uid:ln(),type:"polygon",value:g,polygon:I})}addPointBasedEvent(g,I){this.data.push({uid:ln(),type:"point",value:g,polygon:I})}addLineBasedEvent(g,I){this.data.push({uid:ln(),type:"line",value:g,polygon:I})}clear(){this.data=[]}find(g,I,i=!1){const n=Array.from(this.data);return i&&n.reverse(),n.find(C=>this.isMouseWithin(C,g,I))}findAll(g,I,i=!1){const n=Array.from(this.data);return i&&n.reverse(),n.filter(C=>this.isMouseWithin(C,g,I))}getSiblings(g,I){const i=[],n=Array.from(new Set(g.map(C=>C.uid)));return g.forEach(C=>{const r=C.value[I];r&&i.push(...this.data.filter(o=>o.value[I]===r&&n.indexOf(o.uid)===-1))}),i}isMouseWithin(g,I,i){switch(g.type){case"point":return Sgg([I,i],g.polygon);case"line":return Vgg([I,i],g.polygon);case"polygon":default:return Wgg([I,i],g.polygon)}}findAllWithinRange(g,I,i=!1){const n=Array.from(this.data);return i&&n.reverse(),n.filter(C=>this.isWithinRange(C,g,I))}isWithinRange(g,I,i){switch(g.type){case"point":return wgg([I,i],g.polygon[0],g.polygon[2]);case"line":case"polygon":default:return Rgg([I,i],g.polygon)}}}const S2e="KCgpID0+IHsKICB2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIF9fbWFya0FzTW9kdWxlID0gKHRhcmdldCkgPT4gX19kZWZQcm9wKHRhcmdldCwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7CiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltPYmplY3Qua2V5cyhmbilbMF1dKShmbiA9IDApKSwgcmVzOwogIH07CiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkgewogICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbT2JqZWN0LmtleXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7CiAgfTsKICB2YXIgX19yZUV4cG9ydCA9ICh0YXJnZXQsIG1vZHVsZSwgZGVzYykgPT4gewogICAgaWYgKG1vZHVsZSAmJiB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbW9kdWxlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhtb2R1bGUpKQogICAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodGFyZ2V0LCBrZXkpICYmIGtleSAhPT0gImRlZmF1bHQiKQogICAgICAgICAgX19kZWZQcm9wKHRhcmdldCwga2V5LCB7IGdldDogKCkgPT4gbW9kdWxlW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MobW9kdWxlLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0OwogIH07CiAgdmFyIF9fdG9Nb2R1bGUgPSAobW9kdWxlKSA9PiB7CiAgICByZXR1cm4gX19yZUV4cG9ydChfX21hcmtBc01vZHVsZShfX2RlZlByb3AobW9kdWxlICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kdWxlKSkgOiB7fSwgImRlZmF1bHQiLCBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgJiYgImRlZmF1bHQiIGluIG1vZHVsZSA/IHsgZ2V0OiAoKSA9PiBtb2R1bGUuZGVmYXVsdCwgZW51bWVyYWJsZTogdHJ1ZSB9IDogeyB2YWx1ZTogbW9kdWxlLCBlbnVtZXJhYmxlOiB0cnVlIH0pKSwgbW9kdWxlKTsKICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMKICB2YXIgcmVxdWlyZV9iYXNlNjRfanMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheTsKICAgICAgZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheTsKICAgICAgdmFyIGxvb2t1cCA9IFtdOwogICAgICB2YXIgcmV2TG9va3VwID0gW107CiAgICAgIHZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCIgPyBVaW50OEFycmF5IDogQXJyYXk7CiAgICAgIHZhciBjb2RlID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwogICAgICBmb3IgKGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgbG9va3VwW2ldID0gY29kZVtpXTsKICAgICAgICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICAgIH0KICAgICAgdmFyIGk7CiAgICAgIHZhciBsZW47CiAgICAgIHJldkxvb2t1cFsiLSIuY2hhckNvZGVBdCgwKV0gPSA2MjsKICAgICAgcmV2TG9va3VwWyJfIi5jaGFyQ29kZUF0KDApXSA9IDYzOwogICAgICBmdW5jdGlvbiBnZXRMZW5zKGI2NCkgewogICAgICAgIHZhciBsZW4yID0gYjY0Lmxlbmd0aDsKICAgICAgICBpZiAobGVuMiAlIDQgPiAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTsKICAgICAgICB9CiAgICAgICAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoIj0iKTsKICAgICAgICBpZiAodmFsaWRMZW4gPT09IC0xKQogICAgICAgICAgdmFsaWRMZW4gPSBsZW4yOwogICAgICAgIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuMiA/IDAgOiA0IC0gdmFsaWRMZW4gJSA0OwogICAgICAgIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYnl0ZUxlbmd0aChiNjQpIHsKICAgICAgICB2YXIgbGVucyA9IGdldExlbnMoYjY0KTsKICAgICAgICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdOwogICAgICAgIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdOwogICAgICAgIHJldHVybiAodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQgLSBwbGFjZUhvbGRlcnNMZW47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7CiAgICAgICAgcmV0dXJuICh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0xlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiB0b0J5dGVBcnJheShiNjQpIHsKICAgICAgICB2YXIgdG1wOwogICAgICAgIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpOwogICAgICAgIHZhciB2YWxpZExlbiA9IGxlbnNbMF07CiAgICAgICAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV07CiAgICAgICAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSk7CiAgICAgICAgdmFyIGN1ckJ5dGUgPSAwOwogICAgICAgIHZhciBsZW4yID0gcGxhY2VIb2xkZXJzTGVuID4gMCA/IHZhbGlkTGVuIC0gNCA6IHZhbGlkTGVuOwogICAgICAgIHZhciBpMjsKICAgICAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW4yOyBpMiArPSA0KSB7CiAgICAgICAgICB0bXAgPSByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIpXSA8PCAxOCB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDEpXSA8PCAxMiB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDIpXSA8PCA2IHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMyldOwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgPj4gMTYgJiAyNTU7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCA+PiA4ICYgMjU1OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAyNTU7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHsKICAgICAgICAgIHRtcCA9IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMildIDw8IDIgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAxKV0gPj4gNDsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMjU1OwogICAgICAgIH0KICAgICAgICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7CiAgICAgICAgICB0bXAgPSByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIpXSA8PCAxMCB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDEpXSA8PCA0IHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMildID4+IDI7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCA+PiA4ICYgMjU1OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0KG51bSkgewogICAgICAgIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgNjNdICsgbG9va3VwW251bSA+PiAxMiAmIDYzXSArIGxvb2t1cFtudW0gPj4gNiAmIDYzXSArIGxvb2t1cFtudW0gJiA2M107CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZW5jb2RlQ2h1bmsodWludDgsIHN0YXJ0LCBlbmQpIHsKICAgICAgICB2YXIgdG1wOwogICAgICAgIHZhciBvdXRwdXQgPSBbXTsKICAgICAgICBmb3IgKHZhciBpMiA9IHN0YXJ0OyBpMiA8IGVuZDsgaTIgKz0gMykgewogICAgICAgICAgdG1wID0gKHVpbnQ4W2kyXSA8PCAxNiAmIDE2NzExNjgwKSArICh1aW50OFtpMiArIDFdIDw8IDggJiA2NTI4MCkgKyAodWludDhbaTIgKyAyXSAmIDI1NSk7CiAgICAgICAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXRwdXQuam9pbigiIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSh1aW50OCkgewogICAgICAgIHZhciB0bXA7CiAgICAgICAgdmFyIGxlbjIgPSB1aW50OC5sZW5ndGg7CiAgICAgICAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4yICUgMzsKICAgICAgICB2YXIgcGFydHMgPSBbXTsKICAgICAgICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MzsKICAgICAgICBmb3IgKHZhciBpMiA9IDAsIGxlbjIyID0gbGVuMiAtIGV4dHJhQnl0ZXM7IGkyIDwgbGVuMjI7IGkyICs9IG1heENodW5rTGVuZ3RoKSB7CiAgICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpMiwgaTIgKyBtYXhDaHVua0xlbmd0aCA+IGxlbjIyID8gbGVuMjIgOiBpMiArIG1heENodW5rTGVuZ3RoKSk7CiAgICAgICAgfQogICAgICAgIGlmIChleHRyYUJ5dGVzID09PSAxKSB7CiAgICAgICAgICB0bXAgPSB1aW50OFtsZW4yIC0gMV07CiAgICAgICAgICBwYXJ0cy5wdXNoKGxvb2t1cFt0bXAgPj4gMl0gKyBsb29rdXBbdG1wIDw8IDQgJiA2M10gKyAiPT0iKTsKICAgICAgICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHsKICAgICAgICAgIHRtcCA9ICh1aW50OFtsZW4yIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4yIC0gMV07CiAgICAgICAgICBwYXJ0cy5wdXNoKGxvb2t1cFt0bXAgPj4gMTBdICsgbG9va3VwW3RtcCA+PiA0ICYgNjNdICsgbG9va3VwW3RtcCA8PCAyICYgNjNdICsgIj0iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oIiIpOwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pZWVlNzU0QDEuMi4xL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfaWVlZTc1NCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9pZWVlNzU0QDEuMi4xL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24oYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykgewogICAgICAgIHZhciBlLCBtOwogICAgICAgIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxOwogICAgICAgIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxOwogICAgICAgIHZhciBlQmlhcyA9IGVNYXggPj4gMTsKICAgICAgICB2YXIgbkJpdHMgPSAtNzsKICAgICAgICB2YXIgaSA9IGlzTEUgPyBuQnl0ZXMgLSAxIDogMDsKICAgICAgICB2YXIgZCA9IGlzTEUgPyAtMSA6IDE7CiAgICAgICAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV07CiAgICAgICAgaSArPSBkOwogICAgICAgIGUgPSBzICYgKDEgPDwgLW5CaXRzKSAtIDE7CiAgICAgICAgcyA+Pj0gLW5CaXRzOwogICAgICAgIG5CaXRzICs9IGVMZW47CiAgICAgICAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkgewogICAgICAgIH0KICAgICAgICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxOwogICAgICAgIGUgPj49IC1uQml0czsKICAgICAgICBuQml0cyArPSBtTGVuOwogICAgICAgIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgaWYgKGUgPT09IDApIHsKICAgICAgICAgIGUgPSAxIC0gZUJpYXM7CiAgICAgICAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7CiAgICAgICAgICByZXR1cm4gbSA/IE5hTiA6IChzID8gLTEgOiAxKSAqIEluZmluaXR5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgZSA9IGUgLSBlQmlhczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbik7CiAgICAgIH07CiAgICAgIGV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbihidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykgewogICAgICAgIHZhciBlLCBtLCBjOwogICAgICAgIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxOwogICAgICAgIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxOwogICAgICAgIHZhciBlQmlhcyA9IGVNYXggPj4gMTsKICAgICAgICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMDsKICAgICAgICB2YXIgaSA9IGlzTEUgPyAwIDogbkJ5dGVzIC0gMTsKICAgICAgICB2YXIgZCA9IGlzTEUgPyAxIDogLTE7CiAgICAgICAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwOwogICAgICAgIHZhbHVlID0gTWF0aC5hYnModmFsdWUpOwogICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7CiAgICAgICAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDA7CiAgICAgICAgICBlID0gZU1heDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpOwogICAgICAgICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkgewogICAgICAgICAgICBlLS07CiAgICAgICAgICAgIGMgKj0gMjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlICsgZUJpYXMgPj0gMSkgewogICAgICAgICAgICB2YWx1ZSArPSBydCAvIGM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodmFsdWUgKiBjID49IDIpIHsKICAgICAgICAgICAgZSsrOwogICAgICAgICAgICBjIC89IDI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHsKICAgICAgICAgICAgbSA9IDA7CiAgICAgICAgICAgIGUgPSBlTWF4OwogICAgICAgICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkgewogICAgICAgICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbik7CiAgICAgICAgICAgIGUgPSBlICsgZUJpYXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbik7CiAgICAgICAgICAgIGUgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMjU1LCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgZSA9IGUgPDwgbUxlbiB8IG07CiAgICAgICAgZUxlbiArPSBtTGVuOwogICAgICAgIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDI1NSwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyODsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA2LjAuMy9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfYnVmZmVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA2LjAuMy9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgYmFzZTY0ID0gcmVxdWlyZV9iYXNlNjRfanMoKTsKICAgICAgdmFyIGllZWU3NTQgPSByZXF1aXJlX2llZWU3NTQoKTsKICAgICAgdmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2xbImZvciJdID09PSAiZnVuY3Rpb24iID8gU3ltYm9sWyJmb3IiXSgibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKSA6IG51bGw7CiAgICAgIGV4cG9ydHMuQnVmZmVyID0gQnVmZmVyODsKICAgICAgZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlcjsKICAgICAgZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwOwogICAgICB2YXIgS19NQVhfTEVOR1RIID0gMjE0NzQ4MzY0NzsKICAgICAgZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIOwogICAgICBCdWZmZXI4LlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpOwogICAgICBpZiAoIUJ1ZmZlcjguVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICAgICAgICBjb25zdCBwcm90byA9IHsgZm9vOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIDQyOwogICAgICAgICAgfSB9OwogICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSk7CiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90byk7CiAgICAgICAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MjsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXI4LnByb3RvdHlwZSwgInBhcmVudCIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIodGhpcykpCiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlcjgucHJvdG90eXBlLCAib2Zmc2V0IiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghQnVmZmVyOC5pc0J1ZmZlcih0aGlzKSkKICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicgKyBsZW5ndGggKyAnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyOC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQnVmZmVyOChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAibnVtYmVyIikgewogICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyOC5wb29sU2l6ZSA9IDgxOTI7CiAgICAgIGZ1bmN0aW9uIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCk7CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiICsgdHlwZW9mIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fCB2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAidW5kZWZpbmVkIiAmJiAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8IHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBTaGFyZWRBcnJheUJ1ZmZlcikpKSB7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKTsKICAgICAgICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyOC5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGIgPSBmcm9tT2JqZWN0KHZhbHVlKTsKICAgICAgICBpZiAoYikKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlcjguZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSk7CiAgICAgIH0KICAgICAgQnVmZmVyOC5mcm9tID0gZnVuY3Rpb24odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICB9OwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyOC5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjgsIFVpbnQ4QXJyYXkpOwogICAgICBmdW5jdGlvbiBhc3NlcnRTaXplKHNpemUpIHsKICAgICAgICBpZiAodHlwZW9mIHNpemUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpOwogICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicgKyBzaXplICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykgewogICAgICAgIGFzc2VydFNpemUoc2l6ZSk7CiAgICAgICAgaWYgKHNpemUgPD0gMCkgewogICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZykgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgfQogICAgICBCdWZmZXI4LmFsbG9jID0gZnVuY3Rpb24oc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBhbGxvY1Vuc2FmZShzaXplKSB7CiAgICAgICAgYXNzZXJ0U2l6ZShzaXplKTsKICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKTsKICAgICAgfQogICAgICBCdWZmZXI4LmFsbG9jVW5zYWZlID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZywgZW5jb2RpbmcpIHsKICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIiB8fCBlbmNvZGluZyA9PT0gIiIpIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgIH0KICAgICAgICBpZiAoIUJ1ZmZlcjguaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIgKyBlbmNvZGluZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwOwogICAgICAgIGxldCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKTsKICAgICAgICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZyk7CiAgICAgICAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7CiAgICAgICAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwOwogICAgICAgIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21BcnJheVZpZXcoYXJyYXlWaWV3KSB7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UoYXJyYXlWaWV3LCBVaW50OEFycmF5KSkgewogICAgICAgICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5Vmlldyk7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGFycmF5Vmlldyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpOwogICAgICAgIH0KICAgICAgICBsZXQgYnVmOwogICAgICAgIGlmIChieXRlT2Zmc2V0ID09PSB2b2lkIDAgJiYgbGVuZ3RoID09PSB2b2lkIDApIHsKICAgICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KTsKICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXI4LnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaikgewogICAgICAgIGlmIChCdWZmZXI4LmlzQnVmZmVyKG9iaikpIHsKICAgICAgICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwOwogICAgICAgICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbik7CiAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgICAgfQogICAgICAgICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pOwogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai5sZW5ndGggIT09IHZvaWQgMCkgewogICAgICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAibnVtYmVyIiB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkgewogICAgICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai50eXBlID09PSAiQnVmZmVyIiAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgIiBieXRlcyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVuZ3RoIHwgMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCkgewogICAgICAgIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgewogICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJ1ZmZlcjguYWxsb2MoK2xlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyOC5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKGIpIHsKICAgICAgICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmIGIgIT09IEJ1ZmZlcjgucHJvdG90eXBlOwogICAgICB9OwogICAgICBCdWZmZXI4LmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHsKICAgICAgICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkKICAgICAgICAgIGEgPSBCdWZmZXI4LmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aCk7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpCiAgICAgICAgICBiID0gQnVmZmVyOC5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpOwogICAgICAgIGlmICghQnVmZmVyOC5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyOC5pc0J1ZmZlcihiKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7CiAgICAgICAgfQogICAgICAgIGlmIChhID09PSBiKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbGV0IHggPSBhLmxlbmd0aDsKICAgICAgICBsZXQgeSA9IGIubGVuZ3RoOwogICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkgewogICAgICAgICAgICB4ID0gYVtpXTsKICAgICAgICAgICAgeSA9IGJbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjguaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcoZW5jb2RpbmcpIHsKICAgICAgICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgIGNhc2UgImJpbmFyeSI6CiAgICAgICAgICBjYXNlICJiYXNlNjQiOgogICAgICAgICAgY2FzZSAidWNzMiI6CiAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgIGNhc2UgInV0Zi0xNmxlIjoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICBCdWZmZXI4LmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdChsaXN0LCBsZW5ndGgpIHsKICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyOC5hbGxvYygwKTsKICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXI4LmFsbG9jVW5zYWZlKGxlbmd0aCk7CiAgICAgICAgbGV0IHBvcyA9IDA7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGxldCBidWYgPSBsaXN0W2ldOwogICAgICAgICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkgewogICAgICAgICAgICBpZiAocG9zICsgYnVmLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIoYnVmKSkKICAgICAgICAgICAgICAgIGJ1ZiA9IEJ1ZmZlcjguZnJvbShidWYpOwogICAgICAgICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChidWZmZXIsIGJ1ZiwgcG9zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICghQnVmZmVyOC5pc0J1ZmZlcihidWYpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTsKICAgICAgICAgIH0KICAgICAgICAgIHBvcyArPSBidWYubGVuZ3RoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmZmVyOwogICAgICB9OwogICAgICBmdW5jdGlvbiBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHsKICAgICAgICBpZiAoQnVmZmVyOC5pc0J1ZmZlcihzdHJpbmcpKSB7CiAgICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGNvbnN0IG11c3RNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZTsKICAgICAgICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsZW47CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOwogICAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gKiAyOwogICAgICAgICAgICBjYXNlICJoZXgiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gPj4+IDE7CiAgICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoIiIgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEJ1ZmZlcjguYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGZ1bmN0aW9uIHNsb3dUb1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkgewogICAgICAgIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlOwogICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwIHx8IHN0YXJ0IDwgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDAgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDw9IDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgZW5kID4+Pj0gMDsKICAgICAgICBzdGFydCA+Pj49IDA7CiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlOwogICAgICBmdW5jdGlvbiBzd2FwKGIsIG4sIG0pIHsKICAgICAgICBjb25zdCBpID0gYltuXTsKICAgICAgICBiW25dID0gYlttXTsKICAgICAgICBiW21dID0gaTsKICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDIgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMigpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgNCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDMpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0KCkgewogICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChsZW4gJSA4ICE9PSAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkgewogICAgICAgICAgc3dhcCh0aGlzLCBpLCBpICsgNyk7CiAgICAgICAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNik7CiAgICAgICAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSk7CiAgICAgICAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlcjgucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMoYikgewogICAgICAgIGlmICghQnVmZmVyOC5pc0J1ZmZlcihiKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTsKICAgICAgICBpZiAodGhpcyA9PT0gYikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBCdWZmZXI4LmNvbXBhcmUodGhpcywgYikgPT09IDA7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkgewogICAgICAgIGxldCBzdHIgPSAiIjsKICAgICAgICBjb25zdCBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTOwogICAgICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoImhleCIsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICIkMSAiKS50cmltKCk7CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KQogICAgICAgICAgc3RyICs9ICIgLi4uICI7CiAgICAgICAgcmV0dXJuICI8QnVmZmVyICIgKyBzdHIgKyAiPiI7CiAgICAgIH07CiAgICAgIGlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7CiAgICAgICAgQnVmZmVyOC5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXI4LnByb3RvdHlwZS5pbnNwZWN0OwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkgewogICAgICAgICAgdGFyZ2V0ID0gQnVmZmVyOC5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIodGFyZ2V0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNTdGFydCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzRW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHN0YXJ0ID4+Pj0gMDsKICAgICAgICBlbmQgPj4+PSAwOwogICAgICAgIHRoaXNTdGFydCA+Pj49IDA7CiAgICAgICAgdGhpc0VuZCA+Pj49IDA7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydDsKICAgICAgICBsZXQgeSA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpOwogICAgICAgIGNvbnN0IHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpOwogICAgICAgIGNvbnN0IHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7CiAgICAgICAgICAgIHggPSB0aGlzQ29weVtpXTsKICAgICAgICAgICAgeSA9IHRhcmdldENvcHlbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0OwogICAgICAgICAgYnl0ZU9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMjE0NzQ4MzY0NykgewogICAgICAgICAgYnl0ZU9mZnNldCA9IDIxNDc0ODM2NDc7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTIxNDc0ODM2NDgpIHsKICAgICAgICAgIGJ5dGVPZmZzZXQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICB9CiAgICAgICAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0OwogICAgICAgIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkgewogICAgICAgICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiBidWZmZXIubGVuZ3RoIC0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwKQogICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0OwogICAgICAgIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIGJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFsID0gQnVmZmVyOC5mcm9tKHZhbCwgZW5jb2RpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoQnVmZmVyOC5pc0J1ZmZlcih2YWwpKSB7CiAgICAgICAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB2YWwgPSB2YWwgJiAyNTU7CiAgICAgICAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgaWYgKGRpcikgewogICAgICAgICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXJyYXlJbmRleE9mKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7CiAgICAgICAgbGV0IGluZGV4U2l6ZSA9IDE7CiAgICAgICAgbGV0IGFyckxlbmd0aCA9IGFyci5sZW5ndGg7CiAgICAgICAgbGV0IHZhbExlbmd0aCA9IHZhbC5sZW5ndGg7CiAgICAgICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDApIHsKICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKGVuY29kaW5nID09PSAidWNzMiIgfHwgZW5jb2RpbmcgPT09ICJ1Y3MtMiIgfHwgZW5jb2RpbmcgPT09ICJ1dGYxNmxlIiB8fCBlbmNvZGluZyA9PT0gInV0Zi0xNmxlIikgewogICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kZXhTaXplID0gMjsKICAgICAgICAgICAgYXJyTGVuZ3RoIC89IDI7CiAgICAgICAgICAgIHZhbExlbmd0aCAvPSAyOwogICAgICAgICAgICBieXRlT2Zmc2V0IC89IDI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHJlYWQoYnVmLCBpMikgewogICAgICAgICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gYnVmW2kyXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkyICogaW5kZXhTaXplKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKGRpcikgewogICAgICAgICAgbGV0IGZvdW5kSW5kZXggPSAtMTsKICAgICAgICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKQogICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGk7CiAgICAgICAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKQogICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKQogICAgICAgICAgICAgICAgaSAtPSBpIC0gZm91bmRJbmRleDsKICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpCiAgICAgICAgICAgIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGg7CiAgICAgICAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkgewogICAgICAgICAgICBsZXQgZm91bmQgPSB0cnVlOwogICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkgewogICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7CiAgICAgICAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gaGV4V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMDsKICAgICAgICBjb25zdCByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0OwogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpOwogICAgICAgICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykgewogICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHsKICAgICAgICAgIGxlbmd0aCA9IHN0ckxlbiAvIDI7CiAgICAgICAgfQogICAgICAgIGxldCBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KTsKICAgICAgICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKQogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdWNzMldyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHsKICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSB2b2lkIDAgJiYgdHlwZW9mIG9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGVuY29kaW5nID0gb2Zmc2V0OwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkgewogICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHsKICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IHZvaWQgMCkKICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoOwogICAgICAgICAgICBsZW5ndGggPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwIHx8IGxlbmd0aCA+IHJlbWFpbmluZykKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2U7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKCIiICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAiQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgY29uc3QgcmVzID0gW107CiAgICAgICAgbGV0IGkgPSBzdGFydDsKICAgICAgICB3aGlsZSAoaSA8IGVuZCkgewogICAgICAgICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldOwogICAgICAgICAgbGV0IGNvZGVQb2ludCA9IG51bGw7CiAgICAgICAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IGZpcnN0Qnl0ZSA+IDIzOSA/IDQgOiBmaXJzdEJ5dGUgPiAyMjMgPyAzIDogZmlyc3RCeXRlID4gMTkxID8gMiA6IDE7CiAgICAgICAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7CiAgICAgICAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkgewogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAxMjgpIHsKICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAzMSkgPDwgNiB8IHNlY29uZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAxMjcpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTsKICAgICAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKHRoaXJkQnl0ZSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDE1KSA8PCAxMiB8IChzZWNvbmRCeXRlICYgNjMpIDw8IDYgfCB0aGlyZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAyMDQ3ICYmICh0ZW1wQ29kZVBvaW50IDwgNTUyOTYgfHwgdGVtcENvZGVQb2ludCA+IDU3MzQzKSkgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdOwogICAgICAgICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXTsKICAgICAgICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKGZvdXJ0aEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTggfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCAxMiB8ICh0aGlyZEJ5dGUgJiA2MykgPDwgNiB8IGZvdXJ0aEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiA2NTUzNSAmJiB0ZW1wQ29kZVBvaW50IDwgMTExNDExMikgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkgewogICAgICAgICAgICBjb2RlUG9pbnQgPSA2NTUzMzsKICAgICAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDY1NTM1KSB7CiAgICAgICAgICAgIGNvZGVQb2ludCAtPSA2NTUzNjsKICAgICAgICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDEwMjMgfCA1NTI5Nik7CiAgICAgICAgICAgIGNvZGVQb2ludCA9IDU2MzIwIHwgY29kZVBvaW50ICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgICAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKTsKICAgICAgfQogICAgICB2YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSA0MDk2OwogICAgICBmdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkoY29kZVBvaW50cykgewogICAgICAgIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoOwogICAgICAgIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHsKICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cyk7CiAgICAgICAgfQogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMTI3KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBsYXRpbjFTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBoZXhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKQogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKQogICAgICAgICAgZW5kID0gbGVuOwogICAgICAgIGxldCBvdXQgPSAiIjsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGYxNmxlU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7CiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1Nik7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgQnVmZmVyOC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgc3RhcnQgPSB+fnN0YXJ0OwogICAgICAgIGVuZCA9IGVuZCA9PT0gdm9pZCAwID8gbGVuIDogfn5lbmQ7CiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICAgc3RhcnQgKz0gbGVuOwogICAgICAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHsKICAgICAgICAgIHN0YXJ0ID0gbGVuOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDwgMCkgewogICAgICAgICAgZW5kICs9IGxlbjsKICAgICAgICAgIGlmIChlbmQgPCAwKQogICAgICAgICAgICBlbmQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7CiAgICAgICAgICBlbmQgPSBsZW47CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPCBzdGFydCkKICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgIGNvbnN0IG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCk7CiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyOC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBuZXdCdWY7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGNoZWNrT2Zmc2V0KG9mZnNldCwgZXh0LCBsZW5ndGgpIHsKICAgICAgICBpZiAob2Zmc2V0ICUgMSAhPT0gMCB8fCBvZmZzZXQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVaW50TEUgPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVaW50QkUgPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoMl07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgd2hpbGUgKGJ5dGVMZW5ndGgyID4gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aDJdICogbXVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVWludDggPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZFVpbnQxNkxFID0gQnVmZmVyOC5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDg7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9IEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDggfCB0aGlzW29mZnNldCArIDFdOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVWludDMyTEUgPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuICh0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2KSArIHRoaXNbb2Zmc2V0ICsgM10gKiAxNjc3NzIxNjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZFVpbnQzMkJFID0gQnVmZmVyOC5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gKiAxNjc3NzIxNiArICh0aGlzW29mZnNldCArIDFdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAyXSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAzXSk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsbyA9IGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQ7CiAgICAgICAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgbGFzdCAqIDIgKiogMjQ7CiAgICAgICAgcmV0dXJuIEJpZ0ludChsbykgKyAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF07CiAgICAgICAgY29uc3QgbG8gPSB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7CiAgICAgICAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWw7CiAgICAgICAgfQogICAgICAgIG11bCAqPSAxMjg7CiAgICAgICAgaWYgKHZhbCA+PSBtdWwpCiAgICAgICAgICB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKTsKICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDI7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXTsKICAgICAgICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsOwogICAgICAgIH0KICAgICAgICBtdWwgKj0gMTI4OwogICAgICAgIGlmICh2YWwgPj0gbXVsKQogICAgICAgICAgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMik7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKTsKICAgICAgICBpZiAoISh0aGlzW29mZnNldF0gJiAxMjgpKQogICAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgICByZXR1cm4gKDI1NSAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTE7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdIHwgdGhpc1tvZmZzZXQgKyAxXSA8PCA4OwogICAgICAgIHJldHVybiB2YWwgJiAzMjc2OCA/IHZhbCB8IDQyOTQ5MDE3NjAgOiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8IHRoaXNbb2Zmc2V0XSA8PCA4OwogICAgICAgIHJldHVybiB2YWwgJiAzMjc2OCA/IHZhbCB8IDQyOTQ5MDE3NjAgOiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYgfCB0aGlzW29mZnNldCArIDNdIDw8IDI0OwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gPDwgMjQgfCB0aGlzW29mZnNldCArIDFdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAyXSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAzXTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDRdICsgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICsgKGxhc3QgPDwgMjQpOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQoZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCk7CiAgICAgIH0pOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQodGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0KTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2hlY2tJbnQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7CiAgICAgICAgaWYgKCFCdWZmZXI4LmlzQnVmZmVyKGJ1ZikpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7CiAgICAgICAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVWludExFID0gQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMikgLSAxOwogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG1heEJ5dGVzLCAwKTsKICAgICAgICB9CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAvIG11bCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVpbnRCRSA9IEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpIC0gMTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBtYXhCeXRlcywgMCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVaW50OCA9IEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAyNTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID0gQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDY1NTM1LCAwKTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVWludDE2QkUgPSBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgNjU1MzUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVaW50MzJMRSA9IEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCA0Mjk0OTY3Mjk1LCAwKTsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID0gQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDQyOTQ5NjcyOTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiAyNDsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHsKICAgICAgICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpOwogICAgICAgIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgcmV0dXJuIG9mZnNldDsKICAgICAgfQogICAgICBmdW5jdGlvbiB3cnRCaWdVSW50NjRCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7CiAgICAgICAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KTsKICAgICAgICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQgKyA3XSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgNl0gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDVdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyA0XSA9IGxvOwogICAgICAgIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0ICsgM10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDJdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyAxXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0XSA9IGhpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA4OwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwogICAgICB9KTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIgLSAxKTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBsaW1pdCAtIDEsIC1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gMDsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgc3ViID0gMDsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkgewogICAgICAgICAgICBzdWIgPSAxOwogICAgICAgICAgfQogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCA+PiAwKSAtIHN1YiAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIgLSAxKTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBsaW1pdCAtIDEsIC1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBzdWIgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkgewogICAgICAgICAgICBzdWIgPSAxOwogICAgICAgICAgfQogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCA+PiAwKSAtIHN1YiAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDEyNywgLTEyOCk7CiAgICAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgIHZhbHVlID0gMjU1ICsgdmFsdWUgKyAxOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDMyNzY3LCAtMzI3NjgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAzMjc2NywgLTMyNzY4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDgpOwogICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICB2YWx1ZSA9IDQyOTQ5NjcyOTUgKyB2YWx1ZSArIDE7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLCBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKICAgICAgfSk7CiAgICAgIGZ1bmN0aW9uIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHsKICAgICAgICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzNDAyODIzNDY2Mzg1Mjg4NmUyMiwgLTM0MDI4MjM0NjYzODUyODg2ZTIyKTsKICAgICAgICB9CiAgICAgICAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwgLTE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mik7CiAgICAgICAgfQogICAgICAgIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgODsKICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5KHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIodGFyZ2V0KSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpOwogICAgICAgIGlmICghc3RhcnQpCiAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpCiAgICAgICAgICB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGg7CiAgICAgICAgaWYgKCF0YXJnZXRTdGFydCkKICAgICAgICAgIHRhcmdldFN0YXJ0ID0gMDsKICAgICAgICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkKICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgIGlmIChlbmQgPT09IHN0YXJ0KQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgIGlmIChlbmQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7CiAgICAgICAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydDsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodGFyZ2V0LCB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLCB0YXJnZXRTdGFydCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsZW47CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gc3RhcnQ7CiAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gZW5kOwogICAgICAgICAgICBlbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlbmNvZGluZyAhPT0gdm9pZCAwICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgJiYgIUJ1ZmZlcjguaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAidXRmOCIgJiYgY29kZSA8IDEyOCB8fCBlbmNvZGluZyA9PT0gImxhdGluMSIpIHsKICAgICAgICAgICAgICB2YWwgPSBjb2RlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgdmFsID0gdmFsICYgMjU1OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGFydCA9IHN0YXJ0ID4+PiAwOwogICAgICAgIGVuZCA9IGVuZCA9PT0gdm9pZCAwID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDA7CiAgICAgICAgaWYgKCF2YWwpCiAgICAgICAgICB2YWwgPSAwOwogICAgICAgIGxldCBpOwogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgICB0aGlzW2ldID0gdmFsOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlcjguaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlcjguZnJvbSh2YWwsIGVuY29kaW5nKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aDsKICAgICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInICsgdmFsICsgJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHsKICAgICAgICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICB2YXIgZXJyb3JzID0ge307CiAgICAgIGZ1bmN0aW9uIEUoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7CiAgICAgICAgZXJyb3JzW3N5bV0gPSBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHsKICAgICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1lc3NhZ2UiLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGdldE1lc3NhZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSwKICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gOwogICAgICAgICAgICB0aGlzLnN0YWNrOwogICAgICAgICAgICBkZWxldGUgdGhpcy5uYW1lOwogICAgICAgICAgfQogICAgICAgICAgZ2V0IGNvZGUoKSB7CiAgICAgICAgICAgIHJldHVybiBzeW07CiAgICAgICAgICB9CiAgICAgICAgICBzZXQgY29kZSh2YWx1ZSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvZGUiLCB7CiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB0b1N0cmluZygpIHsKICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7c3ltfV06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICBFKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLCBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gIkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiOwogICAgICB9LCBSYW5nZUVycm9yKTsKICAgICAgRSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLCBmdW5jdGlvbihuYW1lLCBhY3R1YWwpIHsKICAgICAgICByZXR1cm4gYFRoZSAiJHtuYW1lfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YDsKICAgICAgfSwgVHlwZUVycm9yKTsKICAgICAgRSgiRVJSX09VVF9PRl9SQU5HRSIsIGZ1bmN0aW9uKHN0ciwgcmFuZ2UsIGlucHV0KSB7CiAgICAgICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgIiR7c3RyfSIgaXMgb3V0IG9mIHJhbmdlLmA7CiAgICAgICAgbGV0IHJlY2VpdmVkID0gaW5wdXQ7CiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHsKICAgICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAiYmlnaW50IikgewogICAgICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpOwogICAgICAgICAgaWYgKGlucHV0ID4gQmlnSW50KDIpICoqIEJpZ0ludCgzMikgfHwgaW5wdXQgPCAtKEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpKSkgewogICAgICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZCk7CiAgICAgICAgICB9CiAgICAgICAgICByZWNlaXZlZCArPSAibiI7CiAgICAgICAgfQogICAgICAgIG1zZyArPSBgIEl0IG11c3QgYmUgJHtyYW5nZX0uIFJlY2VpdmVkICR7cmVjZWl2ZWR9YDsKICAgICAgICByZXR1cm4gbXNnOwogICAgICB9LCBSYW5nZUVycm9yKTsKICAgICAgZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHZhbCkgewogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBsZXQgaSA9IHZhbC5sZW5ndGg7CiAgICAgICAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICItIiA/IDEgOiAwOwogICAgICAgIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7CiAgICAgICAgICByZXMgPSBgXyR7dmFsLnNsaWNlKGkgLSAzLCBpKX0ke3Jlc31gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgaWYgKGJ1ZltvZmZzZXRdID09PSB2b2lkIDAgfHwgYnVmW29mZnNldCArIGJ5dGVMZW5ndGgyXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAoYnl0ZUxlbmd0aDIgKyAxKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgICAgICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHsKICAgICAgICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAiYmlnaW50IiA/ICJuIiA6ICIiOwogICAgICAgICAgbGV0IHJhbmdlOwogICAgICAgICAgaWYgKGJ5dGVMZW5ndGgyID4gMykgewogICAgICAgICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7CiAgICAgICAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bn0gYW5kIDwgMiR7bn0gKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDh9JHtufWA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmFuZ2UgPSBgPj0gLSgyJHtufSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtufWA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJhbmdlID0gYD49ICR7bWlufSR7bn0gYW5kIDw9ICR7bWF4fSR7bn1gOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCJ2YWx1ZSIsIHJhbmdlLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUsIG5hbWUpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAibnVtYmVyIikgewogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAibnVtYmVyIiwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBib3VuZHNFcnJvcih2YWx1ZSwgbGVuZ3RoLCB0eXBlKSB7CiAgICAgICAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkgewogICAgICAgICAgdmFsaWRhdGVOdW1iZXIodmFsdWUsIHR5cGUpOwogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgIm9mZnNldCIsICJhbiBpbnRlZ2VyIiwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAobGVuZ3RoIDwgMCkgewogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFMoKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgIm9mZnNldCIsIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsIHZhbHVlKTsKICAgICAgfQogICAgICB2YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nOwogICAgICBmdW5jdGlvbiBiYXNlNjRjbGVhbihzdHIpIHsKICAgICAgICBzdHIgPSBzdHIuc3BsaXQoIj0iKVswXTsKICAgICAgICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICIiKTsKICAgICAgICBpZiAoc3RyLmxlbmd0aCA8IDIpCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7CiAgICAgICAgICBzdHIgPSBzdHIgKyAiPSI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyaW5nLCB1bml0cykgewogICAgICAgIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHk7CiAgICAgICAgbGV0IGNvZGVQb2ludDsKICAgICAgICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbDsKICAgICAgICBjb25zdCBieXRlcyA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDU1Mjk1ICYmIGNvZGVQb2ludCA8IDU3MzQ0KSB7CiAgICAgICAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkgewogICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiA1NjMxOSkgewogICAgICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29kZVBvaW50IDwgNTYzMjApIHsKICAgICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSA1NTI5NiA8PCAxMCB8IGNvZGVQb2ludCAtIDU2MzIwKSArIDY1NTM2OwogICAgICAgICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgfQogICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGw7CiAgICAgICAgICBpZiAoY29kZVBvaW50IDwgMTI4KSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDIwNDgpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDYgfCAxOTIsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgNjU1MzYpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDEyIHwgMjI0LCBjb2RlUG9pbnQgPj4gNiAmIDYzIHwgMTI4LCBjb2RlUG9pbnQgJiA2MyB8IDEyOCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDExMTQxMTIpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDE4IHwgMjQwLCBjb2RlUG9pbnQgPj4gMTIgJiA2MyB8IDEyOCwgY29kZVBvaW50ID4+IDYgJiA2MyB8IDEyOCwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVzOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhzdHIpIHsKICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogICAgICAgICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAyNTUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnl0ZUFycmF5OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKHN0ciwgdW5pdHMpIHsKICAgICAgICBsZXQgYywgaGksIGxvOwogICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICBoaSA9IGMgPj4gODsKICAgICAgICAgIGxvID0gYyAlIDI1NjsKICAgICAgICAgIGJ5dGVBcnJheS5wdXNoKGxvKTsKICAgICAgICAgIGJ5dGVBcnJheS5wdXNoKGhpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHN0cikgewogICAgICAgIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmxpdEJ1ZmZlcihzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBsZXQgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmIChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGggfHwgaSA+PSBzcmMubGVuZ3RoKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaXNJbnN0YW5jZShvYmosIHR5cGUpIHsKICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fCBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbnVtYmVySXNOYU4ob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiAhPT0gb2JqOwogICAgICB9CiAgICAgIHZhciBoZXhTbGljZUxvb2t1cFRhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY29uc3QgYWxwaGFiZXQgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKICAgICAgICAgIGNvbnN0IGkxNiA9IGkgKiAxNjsKICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikgewogICAgICAgICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgfSgpOwogICAgICBmdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QoZm4pIHsKICAgICAgICByZXR1cm4gdHlwZW9mIEJpZ0ludCA9PT0gInVuZGVmaW5lZCIgPyBCdWZmZXJCaWdJbnROb3REZWZpbmVkIDogZm47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBub3Qgc3VwcG9ydGVkIik7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gc3JjL2FsaWFzL2J1ZmZlci1zaGltLmpzCiAgdmFyIGltcG9ydF9idWZmZXI7CiAgdmFyIGluaXRfYnVmZmVyX3NoaW0gPSBfX2VzbSh7CiAgICAic3JjL2FsaWFzL2J1ZmZlci1zaGltLmpzIigpIHsKICAgICAgaW1wb3J0X2J1ZmZlciA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfaXNfb2JzZXJ2YWJsZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIG1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFN5bWJvbC5vYnNlcnZhYmxlID09PSAic3ltYm9sIiAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLm9ic2VydmFibGVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlW1N5bWJvbC5vYnNlcnZhYmxlXSgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHZhbHVlWyJAQG9ic2VydmFibGUiXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVsiQEBvYnNlcnZhYmxlIl0oKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzCiAgdmFyIHJlcXVpcmVfc2VyaWFsaXplcnMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzLkRlZmF1bHRTZXJpYWxpemVyID0gZXhwb3J0cy5leHRlbmRTZXJpYWxpemVyID0gdm9pZCAwOwogICAgICBmdW5jdGlvbiBleHRlbmRTZXJpYWxpemVyKGV4dGVuZCwgaW1wbGVtZW50YXRpb24pIHsKICAgICAgICBjb25zdCBmYWxsYmFja0Rlc2VyaWFsaXplciA9IGV4dGVuZC5kZXNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgY29uc3QgZmFsbGJhY2tTZXJpYWxpemVyID0gZXh0ZW5kLnNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmRlc2VyaWFsaXplKG1lc3NhZ2UsIGZhbGxiYWNrRGVzZXJpYWxpemVyKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLnNlcmlhbGl6ZShpbnB1dCwgZmFsbGJhY2tTZXJpYWxpemVyKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIGV4cG9ydHMuZXh0ZW5kU2VyaWFsaXplciA9IGV4dGVuZFNlcmlhbGl6ZXI7CiAgICAgIHZhciBEZWZhdWx0RXJyb3JTZXJpYWxpemVyID0gewogICAgICAgIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKEVycm9yKG1lc3NhZ2UubWVzc2FnZSksIHsKICAgICAgICAgICAgbmFtZTogbWVzc2FnZS5uYW1lLAogICAgICAgICAgICBzdGFjazogbWVzc2FnZS5zdGFjawogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemUoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIF9fZXJyb3JfbWFya2VyOiAiJCRlcnJvciIsCiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsCiAgICAgICAgICAgIHN0YWNrOiBlcnJvci5zdGFjawogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHZhciBpc1NlcmlhbGl6ZWRFcnJvciA9ICh0aGluZykgPT4gdGhpbmcgJiYgdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiAmJiAiX19lcnJvcl9tYXJrZXIiIGluIHRoaW5nICYmIHRoaW5nLl9fZXJyb3JfbWFya2VyID09PSAiJCRlcnJvciI7CiAgICAgIGV4cG9ydHMuRGVmYXVsdFNlcmlhbGl6ZXIgPSB7CiAgICAgICAgZGVzZXJpYWxpemUobWVzc2FnZSkgewogICAgICAgICAgaWYgKGlzU2VyaWFsaXplZEVycm9yKG1lc3NhZ2UpKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLmRlc2VyaWFsaXplKG1lc3NhZ2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLnNlcmlhbGl6ZShpbnB1dCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L2NvbW1vbi5qcwogIHZhciByZXF1aXJlX2NvbW1vbiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvY29tbW9uLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzLnNlcmlhbGl6ZSA9IGV4cG9ydHMuZGVzZXJpYWxpemUgPSBleHBvcnRzLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIHNlcmlhbGl6ZXJzXzEgPSByZXF1aXJlX3NlcmlhbGl6ZXJzKCk7CiAgICAgIHZhciByZWdpc3RlcmVkU2VyaWFsaXplciA9IHNlcmlhbGl6ZXJzXzEuRGVmYXVsdFNlcmlhbGl6ZXI7CiAgICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2VyaWFsaXplcjIoc2VyaWFsaXplcikgewogICAgICAgIHJlZ2lzdGVyZWRTZXJpYWxpemVyID0gc2VyaWFsaXplcnNfMS5leHRlbmRTZXJpYWxpemVyKHJlZ2lzdGVyZWRTZXJpYWxpemVyLCBzZXJpYWxpemVyKTsKICAgICAgfQogICAgICBleHBvcnRzLnJlZ2lzdGVyU2VyaWFsaXplciA9IHJlZ2lzdGVyU2VyaWFsaXplcjI7CiAgICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobWVzc2FnZSk7CiAgICAgIH0KICAgICAgZXhwb3J0cy5kZXNlcmlhbGl6ZSA9IGRlc2VyaWFsaXplOwogICAgICBmdW5jdGlvbiBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFNlcmlhbGl6ZXIuc2VyaWFsaXplKGlucHV0KTsKICAgICAgfQogICAgICBleHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC9zeW1ib2xzLmpzCiAgdmFyIHJlcXVpcmVfc3ltYm9scyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc3ltYm9scy5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0cy4kd29ya2VyID0gZXhwb3J0cy4kdHJhbnNmZXJhYmxlID0gZXhwb3J0cy4kdGVybWluYXRlID0gZXhwb3J0cy4kZXZlbnRzID0gZXhwb3J0cy4kZXJyb3JzID0gdm9pZCAwOwogICAgICBleHBvcnRzLiRlcnJvcnMgPSBTeW1ib2woInRocmVhZC5lcnJvcnMiKTsKICAgICAgZXhwb3J0cy4kZXZlbnRzID0gU3ltYm9sKCJ0aHJlYWQuZXZlbnRzIik7CiAgICAgIGV4cG9ydHMuJHRlcm1pbmF0ZSA9IFN5bWJvbCgidGhyZWFkLnRlcm1pbmF0ZSIpOwogICAgICBleHBvcnRzLiR0cmFuc2ZlcmFibGUgPSBTeW1ib2woInRocmVhZC50cmFuc2ZlcmFibGUiKTsKICAgICAgZXhwb3J0cy4kd29ya2VyID0gU3ltYm9sKCJ0aHJlYWQud29ya2VyIik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvdHJhbnNmZXJhYmxlLmpzCiAgdmFyIHJlcXVpcmVfdHJhbnNmZXJhYmxlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90cmFuc2ZlcmFibGUuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMuVHJhbnNmZXIgPSBleHBvcnRzLmlzVHJhbnNmZXJEZXNjcmlwdG9yID0gdm9pZCAwOwogICAgICB2YXIgc3ltYm9sc18xID0gcmVxdWlyZV9zeW1ib2xzKCk7CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJhYmxlKHRoaW5nKSB7CiAgICAgICAgaWYgKCF0aGluZyB8fCB0eXBlb2YgdGhpbmcgIT09ICJvYmplY3QiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJEZXNjcmlwdG9yKHRoaW5nKSB7CiAgICAgICAgcmV0dXJuIHRoaW5nICYmIHR5cGVvZiB0aGluZyA9PT0gIm9iamVjdCIgJiYgdGhpbmdbc3ltYm9sc18xLiR0cmFuc2ZlcmFibGVdOwogICAgICB9CiAgICAgIGV4cG9ydHMuaXNUcmFuc2ZlckRlc2NyaXB0b3IgPSBpc1RyYW5zZmVyRGVzY3JpcHRvcjsKICAgICAgZnVuY3Rpb24gVHJhbnNmZXIyKHBheWxvYWQsIHRyYW5zZmVyYWJsZXMpIHsKICAgICAgICBpZiAoIXRyYW5zZmVyYWJsZXMpIHsKICAgICAgICAgIGlmICghaXNUcmFuc2ZlcmFibGUocGF5bG9hZCkpCiAgICAgICAgICAgIHRocm93IEVycm9yKCk7CiAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gW3BheWxvYWRdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgW3N5bWJvbHNfMS4kdHJhbnNmZXJhYmxlXTogdHJ1ZSwKICAgICAgICAgIHNlbmQ6IHBheWxvYWQsCiAgICAgICAgICB0cmFuc2ZlcmFibGVzCiAgICAgICAgfTsKICAgICAgfQogICAgICBleHBvcnRzLlRyYW5zZmVyID0gVHJhbnNmZXIyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzCiAgdmFyIHJlcXVpcmVfbWVzc2FnZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzLldvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0cy5NYXN0ZXJNZXNzYWdlVHlwZSA9IHZvaWQgMDsKICAgICAgdmFyIE1hc3Rlck1lc3NhZ2VUeXBlOwogICAgICAoZnVuY3Rpb24oTWFzdGVyTWVzc2FnZVR5cGUyKSB7CiAgICAgICAgTWFzdGVyTWVzc2FnZVR5cGUyWyJjYW5jZWwiXSA9ICJjYW5jZWwiOwogICAgICAgIE1hc3Rlck1lc3NhZ2VUeXBlMlsicnVuIl0gPSAicnVuIjsKICAgICAgfSkoTWFzdGVyTWVzc2FnZVR5cGUgPSBleHBvcnRzLk1hc3Rlck1lc3NhZ2VUeXBlIHx8IChleHBvcnRzLk1hc3Rlck1lc3NhZ2VUeXBlID0ge30pKTsKICAgICAgdmFyIFdvcmtlck1lc3NhZ2VUeXBlOwogICAgICAoZnVuY3Rpb24oV29ya2VyTWVzc2FnZVR5cGUyKSB7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJlcnJvciJdID0gImVycm9yIjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbImluaXQiXSA9ICJpbml0IjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbInJlc3VsdCJdID0gInJlc3VsdCI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJydW5uaW5nIl0gPSAicnVubmluZyI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJ1bmNhdWdodEVycm9yIl0gPSAidW5jYXVnaHRFcnJvciI7CiAgICAgIH0pKFdvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0cy5Xb3JrZXJNZXNzYWdlVHlwZSB8fCAoZXhwb3J0cy5Xb3JrZXJNZXNzYWdlVHlwZSA9IHt9KSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvd29ya2VyL2ltcGxlbWVudGF0aW9uLmJyb3dzZXIuanMKICB2YXIgcmVxdWlyZV9pbXBsZW1lbnRhdGlvbl9icm93c2VyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW1wbGVtZW50YXRpb24uYnJvd3Nlci5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGlzV29ya2VyUnVudGltZSA9IGZ1bmN0aW9uIGlzV29ya2VyUnVudGltZTIoKSB7CiAgICAgICAgY29uc3QgaXNXaW5kb3dDb250ZXh0ID0gdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBXaW5kb3cgIT09ICJ1bmRlZmluZWQiICYmIHNlbGYgaW5zdGFuY2VvZiBXaW5kb3c7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiBzZWxmLnBvc3RNZXNzYWdlICYmICFpc1dpbmRvd0NvbnRleHQgPyB0cnVlIDogZmFsc2U7CiAgICAgIH07CiAgICAgIHZhciBwb3N0TWVzc2FnZVRvTWFzdGVyID0gZnVuY3Rpb24gcG9zdE1lc3NhZ2VUb01hc3RlcjIoZGF0YSwgdHJhbnNmZXJMaXN0KSB7CiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2Zlckxpc3QpOwogICAgICB9OwogICAgICB2YXIgc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcyA9IGZ1bmN0aW9uIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMyKG9uTWVzc2FnZSkgewogICAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gKG1lc3NhZ2VFdmVudCkgPT4gewogICAgICAgICAgb25NZXNzYWdlKG1lc3NhZ2VFdmVudC5kYXRhKTsKICAgICAgICB9OwogICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4gewogICAgICAgICAgc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOwogICAgICAgIH07CiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOwogICAgICAgIHJldHVybiB1bnN1YnNjcmliZTsKICAgICAgfTsKICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gewogICAgICAgIGlzV29ya2VyUnVudGltZSwKICAgICAgICBwb3N0TWVzc2FnZVRvTWFzdGVyLAogICAgICAgIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW5kZXguanMKICB2YXIgcmVxdWlyZV93b3JrZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbmRleC5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9fYXdhaXRlciA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgewogICAgICAgICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0cy5leHBvc2UgPSBleHBvcnRzLmlzV29ya2VyUnVudGltZSA9IGV4cG9ydHMuVHJhbnNmZXIgPSBleHBvcnRzLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIGlzX29ic2VydmFibGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2lzX29ic2VydmFibGUoKSk7CiAgICAgIHZhciBjb21tb25fMSA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciB0cmFuc2ZlcmFibGVfMSA9IHJlcXVpcmVfdHJhbnNmZXJhYmxlKCk7CiAgICAgIHZhciBtZXNzYWdlc18xID0gcmVxdWlyZV9tZXNzYWdlcygpOwogICAgICB2YXIgaW1wbGVtZW50YXRpb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2ltcGxlbWVudGF0aW9uX2Jyb3dzZXIoKSk7CiAgICAgIHZhciBjb21tb25fMiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAicmVnaXN0ZXJTZXJpYWxpemVyIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBjb21tb25fMi5yZWdpc3RlclNlcmlhbGl6ZXI7CiAgICAgIH0gfSk7CiAgICAgIHZhciB0cmFuc2ZlcmFibGVfMiA9IHJlcXVpcmVfdHJhbnNmZXJhYmxlKCk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiVHJhbnNmZXIiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZV8yLlRyYW5zZmVyOwogICAgICB9IH0pOwogICAgICBleHBvcnRzLmlzV29ya2VyUnVudGltZSA9IGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWU7CiAgICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTsKICAgICAgdmFyIGFjdGl2ZVN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7CiAgICAgIHZhciBpc01hc3RlckpvYkNhbmNlbE1lc3NhZ2UgPSAodGhpbmcpID0+IHRoaW5nICYmIHRoaW5nLnR5cGUgPT09IG1lc3NhZ2VzXzEuTWFzdGVyTWVzc2FnZVR5cGUuY2FuY2VsOwogICAgICB2YXIgaXNNYXN0ZXJKb2JSdW5NZXNzYWdlID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0aGluZy50eXBlID09PSBtZXNzYWdlc18xLk1hc3Rlck1lc3NhZ2VUeXBlLnJ1bjsKICAgICAgdmFyIGlzT2JzZXJ2YWJsZSA9ICh0aGluZykgPT4gaXNfb2JzZXJ2YWJsZV8xLmRlZmF1bHQodGhpbmcpIHx8IGlzWmVuT2JzZXJ2YWJsZSh0aGluZyk7CiAgICAgIGZ1bmN0aW9uIGlzWmVuT2JzZXJ2YWJsZSh0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmIHR5cGVvZiB0aGluZy5zdWJzY3JpYmUgPT09ICJmdW5jdGlvbiI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVjb25zdHJ1Y3RUcmFuc2Zlcih0aGluZykgewogICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVfMS5pc1RyYW5zZmVyRGVzY3JpcHRvcih0aGluZykgPyB7IHBheWxvYWQ6IHRoaW5nLnNlbmQsIHRyYW5zZmVyYWJsZXM6IHRoaW5nLnRyYW5zZmVyYWJsZXMgfSA6IHsgcGF5bG9hZDogdGhpbmcsIHRyYW5zZmVyYWJsZXM6IHZvaWQgMCB9OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCkgewogICAgICAgIGNvbnN0IGluaXRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5pbml0LAogICAgICAgICAgZXhwb3NlZDogewogICAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3Rlcihpbml0TWVzc2FnZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKSB7CiAgICAgICAgY29uc3QgaW5pdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLmluaXQsCiAgICAgICAgICBleHBvc2VkOiB7CiAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICBtZXRob2RzOiBtZXRob2ROYW1lcwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoaW5pdE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RKb2JFcnJvck1lc3NhZ2UodWlkLCByYXdFcnJvcikgewogICAgICAgIGNvbnN0IHsgcGF5bG9hZDogZXJyb3IsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmF3RXJyb3IpOwogICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHsKICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUuZXJyb3IsCiAgICAgICAgICB1aWQsCiAgICAgICAgICBlcnJvcjogY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoZXJyb3JNZXNzYWdlLCB0cmFuc2ZlcmFibGVzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0Sm9iUmVzdWx0TWVzc2FnZSh1aWQsIGNvbXBsZXRlZCwgcmVzdWx0VmFsdWUpIHsKICAgICAgICBjb25zdCB7IHBheWxvYWQsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmVzdWx0VmFsdWUpOwogICAgICAgIGNvbnN0IHJlc3VsdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJlc3VsdCwKICAgICAgICAgIHVpZCwKICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZWQgPyB0cnVlIDogdm9pZCAwLAogICAgICAgICAgcGF5bG9hZAogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIocmVzdWx0TWVzc2FnZSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdEpvYlN0YXJ0TWVzc2FnZSh1aWQsIHJlc3VsdFR5cGUpIHsKICAgICAgICBjb25zdCBzdGFydE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJ1bm5pbmcsCiAgICAgICAgICB1aWQsCiAgICAgICAgICByZXN1bHRUeXBlCiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihzdGFydE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7CiAgICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUudW5jYXVnaHRFcnJvciwKICAgICAgICAgICAgZXJyb3I6IGNvbW1vbl8xLnNlcmlhbGl6ZShlcnJvcikKICAgICAgICAgIH07CiAgICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihlcnJvck1lc3NhZ2UpOwogICAgICAgIH0gY2F0Y2ggKHN1YkVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJOb3QgcmVwb3J0aW5nIHVuY2F1Z2h0IGVycm9yIGJhY2sgdG8gbWFzdGVyIHRocmVhZCBhcyBpdCBvY2N1cmVkIHdoaWxlIHJlcG9ydGluZyBhbiB1bmNhdWdodCBlcnJvciBhbHJlYWR5LlxuTGF0ZXN0IGVycm9yOiIsIHN1YkVycm9yLCAiXG5PcmlnaW5hbCBlcnJvcjoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJ1bkZ1bmN0aW9uKGpvYlVJRCwgZm4sIGFyZ3MpIHsKICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgICAgbGV0IHN5bmNSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBzeW5jUmVzdWx0ID0gZm4oLi4uYXJncyk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICByZXR1cm4gcG9zdEpvYkVycm9yTWVzc2FnZShqb2JVSUQsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlc3VsdFR5cGUgPSBpc09ic2VydmFibGUoc3luY1Jlc3VsdCkgPyAib2JzZXJ2YWJsZSIgOiAicHJvbWlzZSI7CiAgICAgICAgICBwb3N0Sm9iU3RhcnRNZXNzYWdlKGpvYlVJRCwgcmVzdWx0VHlwZSk7CiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHN5bmNSZXN1bHQpKSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN5bmNSZXN1bHQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCBmYWxzZSwgY29tbW9uXzEuc2VyaWFsaXplKHZhbHVlKSksIChlcnJvcikgPT4gewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICAgICAgcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCB0cnVlKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5zZXQoam9iVUlELCBzdWJzY3JpcHRpb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBzeW5jUmVzdWx0OwogICAgICAgICAgICAgIHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgdHJ1ZSwgY29tbW9uXzEuc2VyaWFsaXplKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGV4cG9zZTIoZXhwb3NlZCkgewogICAgICAgIGlmICghaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIGluIHRoZSBtYXN0ZXIgdGhyZWFkLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoZXhwb3NlQ2FsbGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGlzIG5vdCBwb3NzaWJsZS4gUGFzcyBhbiBvYmplY3QgdG8gZXhwb3NlKCkgaWYgeW91IHdhbnQgdG8gZXhwb3NlIG11bHRpcGxlIGZ1bmN0aW9ucy4iKTsKICAgICAgICB9CiAgICAgICAgZXhwb3NlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBpZiAodHlwZW9mIGV4cG9zZWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgICBpZiAoaXNNYXN0ZXJKb2JSdW5NZXNzYWdlKG1lc3NhZ2VEYXRhKSAmJiAhbWVzc2FnZURhdGEubWV0aG9kKSB7CiAgICAgICAgICAgICAgcnVuRnVuY3Rpb24obWVzc2FnZURhdGEudWlkLCBleHBvc2VkLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3NlZCA9PT0gIm9iamVjdCIgJiYgZXhwb3NlZCkgewogICAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMoKG1lc3NhZ2VEYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChpc01hc3RlckpvYlJ1bk1lc3NhZ2UobWVzc2FnZURhdGEpICYmIG1lc3NhZ2VEYXRhLm1ldGhvZCkgewogICAgICAgICAgICAgIHJ1bkZ1bmN0aW9uKG1lc3NhZ2VEYXRhLnVpZCwgZXhwb3NlZFttZXNzYWdlRGF0YS5tZXRob2RdLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3NlZCkuZmlsdGVyKChrZXkpID0+IHR5cGVvZiBleHBvc2VkW2tleV0gPT09ICJmdW5jdGlvbiIpOwogICAgICAgICAgcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4cG9zZSgpLiBFeHBlY3RlZCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCwgZ290OiAke2V4cG9zZWR9YCk7CiAgICAgICAgfQogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgaWYgKGlzTWFzdGVySm9iQ2FuY2VsTWVzc2FnZShtZXNzYWdlRGF0YSkpIHsKICAgICAgICAgICAgY29uc3Qgam9iVUlEID0gbWVzc2FnZURhdGEudWlkOwogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhY3RpdmVTdWJzY3JpcHRpb25zLmdldChqb2JVSUQpOwogICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGV4cG9ydHMuZXhwb3NlID0gZXhwb3NlMjsKICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iICYmIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWUoKSkgewogICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGV2ZW50LmVycm9yIHx8IGV2ZW50KSwgMjUwKTsKICAgICAgICB9KTsKICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc3QgZXJyb3IgPSBldmVudC5yZWFzb247CiAgICAgICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGVycm9yKSwgMjUwKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBwcm9jZXNzLm9uID09PSAiZnVuY3Rpb24iICYmIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWUoKSkgewogICAgICAgIHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIiwgKGVycm9yKSA9PiB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvciksIDI1MCk7CiAgICAgICAgfSk7CiAgICAgICAgcHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIiwgKGVycm9yKSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGVycm9yKSwgMjUwKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcwogIHZhciByZXF1aXJlX2xvbmcgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSBMb25nNDsKICAgICAgdmFyIHdhc20gPSBudWxsOwogICAgICB0cnkgewogICAgICAgIHdhc20gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShuZXcgVWludDhBcnJheShbCiAgICAgICAgICAwLAogICAgICAgICAgOTcsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxLAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEzLAogICAgICAgICAgMiwKICAgICAgICAgIDk2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICA5NiwKICAgICAgICAgIDQsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMywKICAgICAgICAgIDcsCiAgICAgICAgICA2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgNiwKICAgICAgICAgIDYsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMSwKICAgICAgICAgIDY1LAogICAgICAgICAgMCwKICAgICAgICAgIDExLAogICAgICAgICAgNywKICAgICAgICAgIDUwLAogICAgICAgICAgNiwKICAgICAgICAgIDMsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxMTcsCiAgICAgICAgICAxMDgsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDUsCiAgICAgICAgICAxMDAsCiAgICAgICAgICAxMDUsCiAgICAgICAgICAxMTgsCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNSwKICAgICAgICAgIDAsCiAgICAgICAgICAyLAogICAgICAgICAgNSwKICAgICAgICAgIDEwMCwKICAgICAgICAgIDEwNSwKICAgICAgICAgIDExOCwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE3LAogICAgICAgICAgMCwKICAgICAgICAgIDMsCiAgICAgICAgICA1LAogICAgICAgICAgMTE0LAogICAgICAgICAgMTAxLAogICAgICAgICAgMTA5LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAwLAogICAgICAgICAgNCwKICAgICAgICAgIDUsCiAgICAgICAgICAxMTQsCiAgICAgICAgICAxMDEsCiAgICAgICAgICAxMDksCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNywKICAgICAgICAgIDAsCiAgICAgICAgICA1LAogICAgICAgICAgOCwKICAgICAgICAgIDEwMywKICAgICAgICAgIDEwMSwKICAgICAgICAgIDExNiwKICAgICAgICAgIDk1LAogICAgICAgICAgMTA0LAogICAgICAgICAgMTA1LAogICAgICAgICAgMTAzLAogICAgICAgICAgMTA0LAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAxMCwKICAgICAgICAgIDE5MSwKICAgICAgICAgIDEsCiAgICAgICAgICA2LAogICAgICAgICAgNCwKICAgICAgICAgIDAsCiAgICAgICAgICAzNSwKICAgICAgICAgIDAsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNywKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOSwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEzMCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMQogICAgICAgIF0pKSwge30pLmV4cG9ydHM7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgfQogICAgICBmdW5jdGlvbiBMb25nNChsb3csIGhpZ2gsIHVuc2lnbmVkKSB7CiAgICAgICAgdGhpcy5sb3cgPSBsb3cgfCAwOwogICAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggfCAwOwogICAgICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICB9CiAgICAgIExvbmc0LnByb3RvdHlwZS5fX2lzTG9uZ19fOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9uZzQucHJvdG90eXBlLCAiX19pc0xvbmdfXyIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGZ1bmN0aW9uIGlzTG9uZyhvYmopIHsKICAgICAgICByZXR1cm4gKG9iaiAmJiBvYmpbIl9faXNMb25nX18iXSkgPT09IHRydWU7CiAgICAgIH0KICAgICAgTG9uZzQuaXNMb25nID0gaXNMb25nOwogICAgICB2YXIgSU5UX0NBQ0hFID0ge307CiAgICAgIHZhciBVSU5UX0NBQ0hFID0ge307CiAgICAgIGZ1bmN0aW9uIGZyb21JbnQodmFsdWUsIHVuc2lnbmVkKSB7CiAgICAgICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTsKICAgICAgICBpZiAodW5zaWduZWQpIHsKICAgICAgICAgIHZhbHVlID4+Pj0gMDsKICAgICAgICAgIGlmIChjYWNoZSA9IDAgPD0gdmFsdWUgJiYgdmFsdWUgPCAyNTYpIHsKICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCAodmFsdWUgfCAwKSA8IDAgPyAtMSA6IDAsIHRydWUpOwogICAgICAgICAgaWYgKGNhY2hlKQogICAgICAgICAgICBVSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlIHw9IDA7CiAgICAgICAgICBpZiAoY2FjaGUgPSAtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSB7CiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTsKICAgICAgICAgIGlmIChjYWNoZSkKICAgICAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIExvbmc0LmZyb21JbnQgPSBmcm9tSW50OwogICAgICBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlLCB1bnNpZ25lZCkgewogICAgICAgIGlmIChpc05hTih2YWx1ZSkpCiAgICAgICAgICByZXR1cm4gdW5zaWduZWQgPyBVWkVSTyA6IFpFUk87CiAgICAgICAgaWYgKHVuc2lnbmVkKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpCiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpCiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKQogICAgICAgICAgICByZXR1cm4gTUFYX1ZBTFVFOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwgfCAwLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMIHwgMCwgdW5zaWduZWQpOwogICAgICB9CiAgICAgIExvbmc0LmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyOwogICAgICBmdW5jdGlvbiBmcm9tQml0cyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCk7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbUJpdHMgPSBmcm9tQml0czsKICAgICAgdmFyIHBvd19kYmwgPSBNYXRoLnBvdzsKICAgICAgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkgewogICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImVtcHR5IHN0cmluZyIpOwogICAgICAgIGlmIChzdHIgPT09ICJOYU4iIHx8IHN0ciA9PT0gIkluZmluaXR5IiB8fCBzdHIgPT09ICIrSW5maW5pdHkiIHx8IHN0ciA9PT0gIi1JbmZpbml0eSIpCiAgICAgICAgICByZXR1cm4gWkVSTzsKICAgICAgICBpZiAodHlwZW9mIHVuc2lnbmVkID09PSAibnVtYmVyIikgewogICAgICAgICAgcmFkaXggPSB1bnNpZ25lZCwgdW5zaWduZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICAgIH0KICAgICAgICByYWRpeCA9IHJhZGl4IHx8IDEwOwogICAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkKICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoInJhZGl4Iik7CiAgICAgICAgdmFyIHA7CiAgICAgICAgaWYgKChwID0gc3RyLmluZGV4T2YoIi0iKSkgPiAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImludGVyaW9yIGh5cGhlbiIpOwogICAgICAgIGVsc2UgaWYgKHAgPT09IDApIHsKICAgICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHN0ci5zdWJzdHJpbmcoMSksIHVuc2lnbmVkLCByYWRpeCkubmVnKCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTsKICAgICAgICB2YXIgcmVzdWx0ID0gWkVSTzsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkgewogICAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTsKICAgICAgICAgIGlmIChzaXplIDwgOCkgewogICAgICAgICAgICB2YXIgcG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIHNpemUpKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChwb3dlcikuYWRkKGZyb21OdW1iZXIodmFsdWUpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocmFkaXhUb1Bvd2VyKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc3VsdC51bnNpZ25lZCA9IHVuc2lnbmVkOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CiAgICAgIGZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKQogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICJib29sZWFuIiA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTsKICAgICAgfQogICAgICBMb25nNC5mcm9tVmFsdWUgPSBmcm9tVmFsdWU7CiAgICAgIHZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7CiAgICAgIHZhciBUV09fUFdSXzI0X0RCTCA9IDEgPDwgMjQ7CiAgICAgIHZhciBUV09fUFdSXzMyX0RCTCA9IFRXT19QV1JfMTZfREJMICogVFdPX1BXUl8xNl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzYzX0RCTCA9IFRXT19QV1JfNjRfREJMIC8gMjsKICAgICAgdmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTsKICAgICAgdmFyIFpFUk8gPSBmcm9tSW50KDApOwogICAgICBMb25nNC5aRVJPID0gWkVSTzsKICAgICAgdmFyIFVaRVJPID0gZnJvbUludCgwLCB0cnVlKTsKICAgICAgTG9uZzQuVVpFUk8gPSBVWkVSTzsKICAgICAgdmFyIE9ORSA9IGZyb21JbnQoMSk7CiAgICAgIExvbmc0Lk9ORSA9IE9ORTsKICAgICAgdmFyIFVPTkUgPSBmcm9tSW50KDEsIHRydWUpOwogICAgICBMb25nNC5VT05FID0gVU9ORTsKICAgICAgdmFyIE5FR19PTkUgPSBmcm9tSW50KC0xKTsKICAgICAgTG9uZzQuTkVHX09ORSA9IE5FR19PTkU7CiAgICAgIHZhciBNQVhfVkFMVUUgPSBmcm9tQml0cyg0Mjk0OTY3Mjk1IHwgMCwgMjE0NzQ4MzY0NyB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFOwogICAgICB2YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoNDI5NDk2NzI5NSB8IDAsIDQyOTQ5NjcyOTUgfCAwLCB0cnVlKTsKICAgICAgTG9uZzQuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFOwogICAgICB2YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMjE0NzQ4MzY0OCB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFOwogICAgICB2YXIgTG9uZ1Byb3RvdHlwZSA9IExvbmc0LnByb3RvdHlwZTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uIHRvSW50KCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKCkgewogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuICh0aGlzLmhpZ2ggPj4+IDApICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkgewogICAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7CiAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KQogICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigicmFkaXgiKTsKICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiAiMCI7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7CiAgICAgICAgICAgIHZhciByYWRpeExvbmcgPSBmcm9tTnVtYmVyKHJhZGl4KSwgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSwgcmVtMSA9IGRpdi5tdWwocmFkaXhMb25nKS5zdWIodGhpcyk7CiAgICAgICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtMS50b0ludCgpLnRvU3RyaW5nKHJhZGl4KTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gIi0iICsgdGhpcy5uZWcoKS50b1N0cmluZyhyYWRpeCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSwgcmVtID0gdGhpczsKICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksIGludHZhbCA9IHJlbS5zdWIocmVtRGl2Lm11bChyYWRpeFRvUG93ZXIpKS50b0ludCgpID4+PiAwLCBkaWdpdHMgPSBpbnR2YWwudG9TdHJpbmcocmFkaXgpOwogICAgICAgICAgcmVtID0gcmVtRGl2OwogICAgICAgICAgaWYgKHJlbS5pc1plcm8oKSkKICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDYpCiAgICAgICAgICAgICAgZGlnaXRzID0gIjAiICsgZGlnaXRzOwogICAgICAgICAgICByZXN1bHQgPSAiIiArIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRIaWdoQml0c1Vuc2lnbmVkKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TG93Qml0cyA9IGZ1bmN0aW9uIGdldExvd0JpdHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubG93OwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5sb3cgPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TnVtQml0c0FicyA9IGZ1bmN0aW9uIGdldE51bUJpdHNBYnMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgcmV0dXJuIHRoaXMuZXEoTUlOX1ZBTFVFKSA/IDY0IDogdGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7CiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaGlnaCAhPSAwID8gdGhpcy5oaWdoIDogdGhpcy5sb3c7CiAgICAgICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKQogICAgICAgICAgaWYgKCh2YWwgJiAxIDw8IGJpdCkgIT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmVxeiA9IExvbmdQcm90b3R5cGUuaXNaZXJvOwogICAgICBMb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkgewogICAgICAgIHJldHVybiAhdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiBpc1Bvc2l0aXZlKCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkICE9PSBvdGhlci51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPj4+IDMxID09PSAxICYmIG90aGVyLmhpZ2ggPj4+IDMxID09PSAxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5lcSA9IExvbmdQcm90b3R5cGUuZXF1YWxzOwogICAgICBMb25nUHJvdG90eXBlLm5vdEVxdWFscyA9IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikgewogICAgICAgIHJldHVybiAhdGhpcy5lcShvdGhlcik7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVxID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7CiAgICAgIExvbmdQcm90b3R5cGUubmUgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFsczsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbiA9IGZ1bmN0aW9uIGxlc3NUaGFuKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbjsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBsZXNzVGhhbk9yRXF1YWwob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wKG90aGVyKSA8PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmxlID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWw7CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbihvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpID4gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPj0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLmVxKG90aGVyKSkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksIG90aGVyTmVnID0gb3RoZXIuaXNOZWdhdGl2ZSgpOwogICAgICAgIGlmICh0aGlzTmVnICYmICFvdGhlck5lZykKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAoIXRoaXNOZWcgJiYgb3RoZXJOZWcpCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpcy5zdWIob3RoZXIpLmlzTmVnYXRpdmUoKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gb3RoZXIuaGlnaCA+Pj4gMCA+IHRoaXMuaGlnaCA+Pj4gMCB8fCBvdGhlci5oaWdoID09PSB0aGlzLmhpZ2ggJiYgb3RoZXIubG93ID4+PiAwID4gdGhpcy5sb3cgPj4+IDAgPyAtMSA6IDE7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKE9ORSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVnID0gTG9uZ1Byb3RvdHlwZS5uZWdhdGU7CiAgICAgIExvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkgewogICAgICAgIGlmICghaXNMb25nKGFkZGVuZCkpCiAgICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTsKICAgICAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjsKICAgICAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgNjU1MzU7CiAgICAgICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjsKICAgICAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiA2NTUzNTsKICAgICAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBhZGRlbmQubG93ID4+PiAxNjsKICAgICAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwOwogICAgICAgIGMwMCArPSBhMDAgKyBiMDA7CiAgICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7CiAgICAgICAgYzAwICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMTYgKyBiMTY7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMzIgKyBiMzI7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGM0OCArPSBhNDggKyBiNDg7CiAgICAgICAgYzQ4ICY9IDY1NTM1OwogICAgICAgIHJldHVybiBmcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChzdWJ0cmFoZW5kKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoc3VidHJhaGVuZCkpCiAgICAgICAgICBzdWJ0cmFoZW5kID0gZnJvbVZhbHVlKHN1YnRyYWhlbmQpOwogICAgICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZygpKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zdWIgPSBMb25nUHJvdG90eXBlLnN1YnRyYWN0OwogICAgICBMb25nUHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gbXVsdGlwbHkobXVsdGlwbGllcikgewogICAgICAgIGlmICh0aGlzLmlzWmVybygpKQogICAgICAgICAgcmV0dXJuIFpFUk87CiAgICAgICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpCiAgICAgICAgICBtdWx0aXBsaWVyID0gZnJvbVZhbHVlKG11bHRpcGxpZXIpOwogICAgICAgIGlmICh3YXNtKSB7CiAgICAgICAgICB2YXIgbG93ID0gd2FzbS5tdWwodGhpcy5sb3csIHRoaXMuaGlnaCwgbXVsdGlwbGllci5sb3csIG11bHRpcGxpZXIuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpCiAgICAgICAgICByZXR1cm4gbXVsdGlwbGllci5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTzsKICAgICAgICBpZiAobXVsdGlwbGllci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkubXVsKG11bHRpcGxpZXIpLm5lZygpOwogICAgICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICByZXR1cm4gdGhpcy5tdWwobXVsdGlwbGllci5uZWcoKSkubmVnKCk7CiAgICAgICAgaWYgKHRoaXMubHQoVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sdChUV09fUFdSXzI0KSkKICAgICAgICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMudG9OdW1iZXIoKSAqIG11bHRpcGxpZXIudG9OdW1iZXIoKSwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBtdWx0aXBsaWVyLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGM0OCA9IDAsIGMzMiA9IDAsIGMxNiA9IDAsIGMwMCA9IDA7CiAgICAgICAgYzAwICs9IGEwMCAqIGIwMDsKICAgICAgICBjMTYgKz0gYzAwID4+PiAxNjsKICAgICAgICBjMDAgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGExNiAqIGIwMDsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGEwMCAqIGIxNjsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEzMiAqIGIwMDsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGExNiAqIGIxNjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEwMCAqIGIzMjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODsKICAgICAgICBjNDggJj0gNjU1MzU7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGMxNiA8PCAxNiB8IGMwMCwgYzQ4IDw8IDE2IHwgYzMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tdWwgPSBMb25nUHJvdG90eXBlLm11bHRpcGx5OwogICAgICBMb25nUHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShkaXZpc29yKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpCiAgICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpOwogICAgICAgIGlmIChkaXZpc29yLmlzWmVybygpKQogICAgICAgICAgdGhyb3cgRXJyb3IoImRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA9PT0gLTIxNDc0ODM2NDggJiYgZGl2aXNvci5sb3cgPT09IC0xICYmIGRpdmlzb3IuaGlnaCA9PT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLmRpdl91IDogd2FzbS5kaXZfcykodGhpcy5sb3csIHRoaXMuaGlnaCwgZGl2aXNvci5sb3csIGRpdmlzb3IuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPOwogICAgICAgIHZhciBhcHByb3gsIHJlbSwgcmVzOwogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkgewogICAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5lcShPTkUpIHx8IGRpdmlzb3IuZXEoTkVHX09ORSkpCiAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsKICAgICAgICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICAgIHJldHVybiBPTkU7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciBoYWxmVGhpcyA9IHRoaXMuc2hyKDEpOwogICAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGwoMSk7CiAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IuaXNOZWdhdGl2ZSgpID8gT05FIDogTkVHX09ORTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVtID0gdGhpcy5zdWIoZGl2aXNvci5tdWwoYXBwcm94KSk7CiAgICAgICAgICAgICAgICByZXMgPSBhcHByb3guYWRkKHJlbS5kaXYoZGl2aXNvcikpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWcoKSkubmVnKCk7CiAgICAgICAgICByZXMgPSBaRVJPOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpCiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTsKICAgICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMpKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzLnNocnUoMSkpKQogICAgICAgICAgICByZXR1cm4gVU9ORTsKICAgICAgICAgIHJlcyA9IFVaRVJPOwogICAgICAgIH0KICAgICAgICByZW0gPSB0aGlzOwogICAgICAgIHdoaWxlIChyZW0uZ3RlKGRpdmlzb3IpKSB7CiAgICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7CiAgICAgICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLCBkZWx0YSA9IGxvZzIgPD0gNDggPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLCBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCksIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7CiAgICAgICAgICB3aGlsZSAoYXBwcm94UmVtLmlzTmVnYXRpdmUoKSB8fCBhcHByb3hSZW0uZ3QocmVtKSkgewogICAgICAgICAgICBhcHByb3ggLT0gZGVsdGE7CiAgICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94LCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpCiAgICAgICAgICAgIGFwcHJveFJlcyA9IE9ORTsKICAgICAgICAgIHJlcyA9IHJlcy5hZGQoYXBwcm94UmVzKTsKICAgICAgICAgIHJlbSA9IHJlbS5zdWIoYXBwcm94UmVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5kaXYgPSBMb25nUHJvdG90eXBlLmRpdmlkZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tb2R1bG8gPSBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikgewogICAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKQogICAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5yZW1fdSA6IHdhc20ucmVtX3MpKHRoaXMubG93LCB0aGlzLmhpZ2gsIGRpdmlzb3IubG93LCBkaXZpc29yLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubW9kID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUucmVtID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkgewogICAgICAgIHJldHVybiBmcm9tQml0cyh+dGhpcy5sb3csIH50aGlzLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZChvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IF4gb3RoZXIubG93LCB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQgPSBmdW5jdGlvbiBzaGlmdExlZnQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgdGhpcy5oaWdoIDw8IG51bUJpdHMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoMCwgdGhpcy5sb3cgPDwgbnVtQml0cyAtIDMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gc2hpZnRSaWdodChudW1CaXRzKSB7CiAgICAgICAgaWYgKGlzTG9uZyhudW1CaXRzKSkKICAgICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7CiAgICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMikKICAgICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyA+Pj4gbnVtQml0cyB8IHRoaXMuaGlnaCA8PCAzMiAtIG51bUJpdHMsIHRoaXMuaGlnaCA+PiBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoID4+IG51bUJpdHMgLSAzMiwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnNociA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQgPSBmdW5jdGlvbiBzaGlmdFJpZ2h0VW5zaWduZWQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIG51bUJpdHMgJj0gNjM7CiAgICAgICAgaWYgKG51bUJpdHMgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIHsKICAgICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoOwogICAgICAgICAgaWYgKG51bUJpdHMgPCAzMikgewogICAgICAgICAgICB2YXIgbG93ID0gdGhpcy5sb3c7CiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhsb3cgPj4+IG51bUJpdHMgfCBoaWdoIDw8IDMyIC0gbnVtQml0cywgaGlnaCA+Pj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG51bUJpdHMgPT09IDMyKQogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCwgMCwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiBudW1CaXRzIC0gMzIsIDAsIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hyX3UgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDsKICAgICAgTG9uZ1Byb3RvdHlwZS50b1NpZ25lZCA9IGZ1bmN0aW9uIHRvU2lnbmVkKCkgewogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7CiAgICAgICAgaWYgKHRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgdHJ1ZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlcyA9IGZ1bmN0aW9uIHRvQnl0ZXMobGUpIHsKICAgICAgICByZXR1cm4gbGUgPyB0aGlzLnRvQnl0ZXNMRSgpIDogdGhpcy50b0J5dGVzQkUoKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7CiAgICAgICAgdmFyIGhpID0gdGhpcy5oaWdoLCBsbyA9IHRoaXMubG93OwogICAgICAgIHJldHVybiBbCiAgICAgICAgICBsbyAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDE2ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDI0LAogICAgICAgICAgaGkgJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGhpID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGhpID4+PiAyNAogICAgICAgIF07CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0JFID0gZnVuY3Rpb24gdG9CeXRlc0JFKCkgewogICAgICAgIHZhciBoaSA9IHRoaXMuaGlnaCwgbG8gPSB0aGlzLmxvdzsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgaGkgPj4+IDI0LAogICAgICAgICAgaGkgPj4+IDE2ICYgMjU1LAogICAgICAgICAgaGkgPj4+IDggJiAyNTUsCiAgICAgICAgICBoaSAmIDI1NSwKICAgICAgICAgIGxvID4+PiAyNCwKICAgICAgICAgIGxvID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gJiAyNTUKICAgICAgICBdOwogICAgICB9OwogICAgICBMb25nNC5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMyKGJ5dGVzLCB1bnNpZ25lZCwgbGUpIHsKICAgICAgICByZXR1cm4gbGUgPyBMb25nNC5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZzQuZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzTEUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzBdIHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbM10gPDwgMjQsIGJ5dGVzWzRdIHwgYnl0ZXNbNV0gPDwgOCB8IGJ5dGVzWzZdIDw8IDE2IHwgYnl0ZXNbN10gPDwgMjQsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzRdIDw8IDI0IHwgYnl0ZXNbNV0gPDwgMTYgfCBieXRlc1s2XSA8PCA4IHwgYnl0ZXNbN10sIGJ5dGVzWzBdIDw8IDI0IHwgYnl0ZXNbMV0gPDwgMTYgfCBieXRlc1syXSA8PCA4IHwgYnl0ZXNbM10sIHVuc2lnbmVkKTsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gKGRpc2FibGVkKTpub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2xvY2FsRmlsZQogIHZhciByZXF1aXJlX2xvY2FsRmlsZSA9IF9fY29tbW9uSlMoewogICAgIihkaXNhYmxlZCk6bm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9sb2NhbEZpbGUiKCkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzCiAgdmFyIHJlcXVpcmVfY29tbW9uMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgVFlQRURfT0sgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFVpbnQxNkFycmF5ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgSW50MzJBcnJheSAhPT0gInVuZGVmaW5lZCI7CiAgICAgIGZ1bmN0aW9uIF9oYXMob2JqLCBrZXkpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKICAgICAgfQogICAgICBleHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7CiAgICAgICAgICBpZiAoIXNvdXJjZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNvdXJjZSArICJtdXN0IGJlIG5vbi1vYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7CiAgICAgICAgICAgIGlmIChfaGFzKHNvdXJjZSwgcCkpIHsKICAgICAgICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfTsKICAgICAgZXhwb3J0cy5zaHJpbmtCdWYgPSBmdW5jdGlvbihidWYsIHNpemUpIHsKICAgICAgICBpZiAoYnVmLmxlbmd0aCA9PT0gc2l6ZSkgewogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9CiAgICAgICAgaWYgKGJ1Zi5zdWJhcnJheSkgewogICAgICAgICAgcmV0dXJuIGJ1Zi5zdWJhcnJheSgwLCBzaXplKTsKICAgICAgICB9CiAgICAgICAgYnVmLmxlbmd0aCA9IHNpemU7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgdmFyIGZuVHlwZWQgPSB7CiAgICAgICAgYXJyYXlTZXQ6IGZ1bmN0aW9uKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICAgICAgICBpZiAoc3JjLnN1YmFycmF5ICYmIGRlc3Quc3ViYXJyYXkpIHsKICAgICAgICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLCBzcmNfb2ZmcyArIGxlbiksIGRlc3Rfb2Zmcyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24oY2h1bmtzKSB7CiAgICAgICAgICB2YXIgaSwgbCwgbGVuLCBwb3MsIGNodW5rLCByZXN1bHQ7CiAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgbGVuICs9IGNodW5rc1tpXS5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW4pOwogICAgICAgICAgcG9zID0gMDsKICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGNodW5rID0gY2h1bmtzW2ldOwogICAgICAgICAgICByZXN1bHQuc2V0KGNodW5rLCBwb3MpOwogICAgICAgICAgICBwb3MgKz0gY2h1bmsubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHZhciBmblVudHlwZWQgPSB7CiAgICAgICAgYXJyYXlTZXQ6IGZ1bmN0aW9uKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uKGNodW5rcykgewogICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgY2h1bmtzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMuc2V0VHlwZWQgPSBmdW5jdGlvbihvbikgewogICAgICAgIGlmIChvbikgewogICAgICAgICAgZXhwb3J0cy5CdWY4ID0gVWludDhBcnJheTsKICAgICAgICAgIGV4cG9ydHMuQnVmMTYgPSBVaW50MTZBcnJheTsKICAgICAgICAgIGV4cG9ydHMuQnVmMzIgPSBJbnQzMkFycmF5OwogICAgICAgICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5UeXBlZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV4cG9ydHMuQnVmOCA9IEFycmF5OwogICAgICAgICAgZXhwb3J0cy5CdWYxNiA9IEFycmF5OwogICAgICAgICAgZXhwb3J0cy5CdWYzMiA9IEFycmF5OwogICAgICAgICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5VbnR5cGVkKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMuc2V0VHlwZWQoVFlQRURfT0spOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvdHJlZXMuanMKICB2YXIgcmVxdWlyZV90cmVlcyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBaX0ZJWEVEID0gNDsKICAgICAgdmFyIFpfQklOQVJZID0gMDsKICAgICAgdmFyIFpfVEVYVCA9IDE7CiAgICAgIHZhciBaX1VOS05PV04gPSAyOwogICAgICBmdW5jdGlvbiB6ZXJvKGJ1ZikgewogICAgICAgIHZhciBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CiAgICAgICAgICBidWZbbGVuXSA9IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBTVE9SRURfQkxPQ0sgPSAwOwogICAgICB2YXIgU1RBVElDX1RSRUVTID0gMTsKICAgICAgdmFyIERZTl9UUkVFUyA9IDI7CiAgICAgIHZhciBNSU5fTUFUQ0ggPSAzOwogICAgICB2YXIgTUFYX01BVENIID0gMjU4OwogICAgICB2YXIgTEVOR1RIX0NPREVTID0gMjk7CiAgICAgIHZhciBMSVRFUkFMUyA9IDI1NjsKICAgICAgdmFyIExfQ09ERVMgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7CiAgICAgIHZhciBEX0NPREVTID0gMzA7CiAgICAgIHZhciBCTF9DT0RFUyA9IDE5OwogICAgICB2YXIgSEVBUF9TSVpFID0gMiAqIExfQ09ERVMgKyAxOwogICAgICB2YXIgTUFYX0JJVFMgPSAxNTsKICAgICAgdmFyIEJ1Zl9zaXplID0gMTY7CiAgICAgIHZhciBNQVhfQkxfQklUUyA9IDc7CiAgICAgIHZhciBFTkRfQkxPQ0sgPSAyNTY7CiAgICAgIHZhciBSRVBfM182ID0gMTY7CiAgICAgIHZhciBSRVBaXzNfMTAgPSAxNzsKICAgICAgdmFyIFJFUFpfMTFfMTM4ID0gMTg7CiAgICAgIHZhciBleHRyYV9sYml0cyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCAwXTsKICAgICAgdmFyIGV4dHJhX2RiaXRzID0gWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxM107CiAgICAgIHZhciBleHRyYV9ibGJpdHMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgN107CiAgICAgIHZhciBibF9vcmRlciA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKICAgICAgdmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7CiAgICAgIHZhciBzdGF0aWNfbHRyZWUgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpOwogICAgICB6ZXJvKHN0YXRpY19sdHJlZSk7CiAgICAgIHZhciBzdGF0aWNfZHRyZWUgPSBuZXcgQXJyYXkoRF9DT0RFUyAqIDIpOwogICAgICB6ZXJvKHN0YXRpY19kdHJlZSk7CiAgICAgIHZhciBfZGlzdF9jb2RlID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pOwogICAgICB6ZXJvKF9kaXN0X2NvZGUpOwogICAgICB2YXIgX2xlbmd0aF9jb2RlID0gbmV3IEFycmF5KE1BWF9NQVRDSCAtIE1JTl9NQVRDSCArIDEpOwogICAgICB6ZXJvKF9sZW5ndGhfY29kZSk7CiAgICAgIHZhciBiYXNlX2xlbmd0aCA9IG5ldyBBcnJheShMRU5HVEhfQ09ERVMpOwogICAgICB6ZXJvKGJhc2VfbGVuZ3RoKTsKICAgICAgdmFyIGJhc2VfZGlzdCA9IG5ldyBBcnJheShEX0NPREVTKTsKICAgICAgemVybyhiYXNlX2Rpc3QpOwogICAgICBmdW5jdGlvbiBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfdHJlZSwgZXh0cmFfYml0cywgZXh0cmFfYmFzZSwgZWxlbXMsIG1heF9sZW5ndGgpIHsKICAgICAgICB0aGlzLnN0YXRpY190cmVlID0gc3RhdGljX3RyZWU7CiAgICAgICAgdGhpcy5leHRyYV9iaXRzID0gZXh0cmFfYml0czsKICAgICAgICB0aGlzLmV4dHJhX2Jhc2UgPSBleHRyYV9iYXNlOwogICAgICAgIHRoaXMuZWxlbXMgPSBlbGVtczsKICAgICAgICB0aGlzLm1heF9sZW5ndGggPSBtYXhfbGVuZ3RoOwogICAgICAgIHRoaXMuaGFzX3N0cmVlID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoOwogICAgICB9CiAgICAgIHZhciBzdGF0aWNfbF9kZXNjOwogICAgICB2YXIgc3RhdGljX2RfZGVzYzsKICAgICAgdmFyIHN0YXRpY19ibF9kZXNjOwogICAgICBmdW5jdGlvbiBUcmVlRGVzYyhkeW5fdHJlZSwgc3RhdF9kZXNjKSB7CiAgICAgICAgdGhpcy5keW5fdHJlZSA9IGR5bl90cmVlOwogICAgICAgIHRoaXMubWF4X2NvZGUgPSAwOwogICAgICAgIHRoaXMuc3RhdF9kZXNjID0gc3RhdF9kZXNjOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRfY29kZShkaXN0KSB7CiAgICAgICAgcmV0dXJuIGRpc3QgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYgKyAoZGlzdCA+Pj4gNyldOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSB3ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gdyA+Pj4gOCAmIDI1NTsKICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX2JpdHMocywgdmFsdWUsIGxlbmd0aCkgewogICAgICAgIGlmIChzLmJpX3ZhbGlkID4gQnVmX3NpemUgLSBsZW5ndGgpIHsKICAgICAgICAgIHMuYmlfYnVmIHw9IHZhbHVlIDw8IHMuYmlfdmFsaWQgJiA2NTUzNTsKICAgICAgICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICAgICAgICBzLmJpX2J1ZiA9IHZhbHVlID4+IEJ1Zl9zaXplIC0gcy5iaV92YWxpZDsKICAgICAgICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoIC0gQnVmX3NpemU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHMuYmlfYnVmIHw9IHZhbHVlIDw8IHMuYmlfdmFsaWQgJiA2NTUzNTsKICAgICAgICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX2NvZGUocywgYywgdHJlZSkgewogICAgICAgIHNlbmRfYml0cyhzLCB0cmVlW2MgKiAyXSwgdHJlZVtjICogMiArIDFdKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiaV9yZXZlcnNlKGNvZGUsIGxlbikgewogICAgICAgIHZhciByZXMgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgIHJlcyB8PSBjb2RlICYgMTsKICAgICAgICAgIGNvZGUgPj4+PSAxOwogICAgICAgICAgcmVzIDw8PSAxOwogICAgICAgIH0gd2hpbGUgKC0tbGVuID4gMCk7CiAgICAgICAgcmV0dXJuIHJlcyA+Pj4gMTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiaV9mbHVzaChzKSB7CiAgICAgICAgaWYgKHMuYmlfdmFsaWQgPT09IDE2KSB7CiAgICAgICAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgICAgICAgcy5iaV9idWYgPSAwOwogICAgICAgICAgcy5iaV92YWxpZCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID49IDgpIHsKICAgICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWYgJiAyNTU7CiAgICAgICAgICBzLmJpX2J1ZiA+Pj0gODsKICAgICAgICAgIHMuYmlfdmFsaWQgLT0gODsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZ2VuX2JpdGxlbihzLCBkZXNjKSB7CiAgICAgICAgdmFyIHRyZWUgPSBkZXNjLmR5bl90cmVlOwogICAgICAgIHZhciBtYXhfY29kZSA9IGRlc2MubWF4X2NvZGU7CiAgICAgICAgdmFyIHN0cmVlID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7CiAgICAgICAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTsKICAgICAgICB2YXIgZXh0cmEgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iaXRzOwogICAgICAgIHZhciBiYXNlID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYmFzZTsKICAgICAgICB2YXIgbWF4X2xlbmd0aCA9IGRlc2Muc3RhdF9kZXNjLm1heF9sZW5ndGg7CiAgICAgICAgdmFyIGg7CiAgICAgICAgdmFyIG4sIG07CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIHhiaXRzOwogICAgICAgIHZhciBmOwogICAgICAgIHZhciBvdmVyZmxvdyA9IDA7CiAgICAgICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHNdID0gMDsKICAgICAgICB9CiAgICAgICAgdHJlZVtzLmhlYXBbcy5oZWFwX21heF0gKiAyICsgMV0gPSAwOwogICAgICAgIGZvciAoaCA9IHMuaGVhcF9tYXggKyAxOyBoIDwgSEVBUF9TSVpFOyBoKyspIHsKICAgICAgICAgIG4gPSBzLmhlYXBbaF07CiAgICAgICAgICBiaXRzID0gdHJlZVt0cmVlW24gKiAyICsgMV0gKiAyICsgMV0gKyAxOwogICAgICAgICAgaWYgKGJpdHMgPiBtYXhfbGVuZ3RoKSB7CiAgICAgICAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoOwogICAgICAgICAgICBvdmVyZmxvdysrOwogICAgICAgICAgfQogICAgICAgICAgdHJlZVtuICogMiArIDFdID0gYml0czsKICAgICAgICAgIGlmIChuID4gbWF4X2NvZGUpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHNdKys7CiAgICAgICAgICB4Yml0cyA9IDA7CiAgICAgICAgICBpZiAobiA+PSBiYXNlKSB7CiAgICAgICAgICAgIHhiaXRzID0gZXh0cmFbbiAtIGJhc2VdOwogICAgICAgICAgfQogICAgICAgICAgZiA9IHRyZWVbbiAqIDJdOwogICAgICAgICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTsKICAgICAgICAgIGlmIChoYXNfc3RyZWUpIHsKICAgICAgICAgICAgcy5zdGF0aWNfbGVuICs9IGYgKiAoc3RyZWVbbiAqIDIgKyAxXSArIHhiaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG92ZXJmbG93ID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRvIHsKICAgICAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoIC0gMTsKICAgICAgICAgIHdoaWxlIChzLmJsX2NvdW50W2JpdHNdID09PSAwKSB7CiAgICAgICAgICAgIGJpdHMtLTsKICAgICAgICAgIH0KICAgICAgICAgIHMuYmxfY291bnRbYml0c10tLTsKICAgICAgICAgIHMuYmxfY291bnRbYml0cyArIDFdICs9IDI7CiAgICAgICAgICBzLmJsX2NvdW50W21heF9sZW5ndGhdLS07CiAgICAgICAgICBvdmVyZmxvdyAtPSAyOwogICAgICAgIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7CiAgICAgICAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7CiAgICAgICAgICBuID0gcy5ibF9jb3VudFtiaXRzXTsKICAgICAgICAgIHdoaWxlIChuICE9PSAwKSB7CiAgICAgICAgICAgIG0gPSBzLmhlYXBbLS1oXTsKICAgICAgICAgICAgaWYgKG0gPiBtYXhfY29kZSkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0cmVlW20gKiAyICsgMV0gIT09IGJpdHMpIHsKICAgICAgICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0pICogdHJlZVttICogMl07CiAgICAgICAgICAgICAgdHJlZVttICogMiArIDFdID0gYml0czsKICAgICAgICAgICAgfQogICAgICAgICAgICBuLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgYmxfY291bnQpIHsKICAgICAgICB2YXIgbmV4dF9jb2RlID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7CiAgICAgICAgdmFyIGNvZGUgPSAwOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciBuOwogICAgICAgIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0gY29kZSA9IGNvZGUgKyBibF9jb3VudFtiaXRzIC0gMV0gPDwgMTsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgICB2YXIgbGVuID0gdHJlZVtuICogMiArIDFdOwogICAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHRyZWVbbiAqIDJdID0gYmlfcmV2ZXJzZShuZXh0X2NvZGVbbGVuXSsrLCBsZW4pOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHsKICAgICAgICB2YXIgbjsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgbGVuZ3RoOwogICAgICAgIHZhciBjb2RlOwogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBibF9jb3VudCA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOwogICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUyAtIDE7IGNvZGUrKykgewogICAgICAgICAgYmFzZV9sZW5ndGhbY29kZV0gPSBsZW5ndGg7CiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMSA8PCBleHRyYV9sYml0c1tjb2RlXTsgbisrKSB7CiAgICAgICAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoIC0gMV0gPSBjb2RlOwogICAgICAgIGRpc3QgPSAwOwogICAgICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgY29kZSsrKSB7CiAgICAgICAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0OwogICAgICAgICAgZm9yIChuID0gMDsgbiA8IDEgPDwgZXh0cmFfZGJpdHNbY29kZV07IG4rKykgewogICAgICAgICAgICBfZGlzdF9jb2RlW2Rpc3QrK10gPSBjb2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkaXN0ID4+PSA3OwogICAgICAgIGZvciAoOyBjb2RlIDwgRF9DT0RFUzsgY29kZSsrKSB7CiAgICAgICAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0IDw8IDc7CiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMSA8PCBleHRyYV9kYml0c1tjb2RlXSAtIDc7IG4rKykgewogICAgICAgICAgICBfZGlzdF9jb2RlWzI1NiArIGRpc3QrK10gPSBjb2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGJpdHMgPSAwOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgICAgICAgIGJsX2NvdW50W2JpdHNdID0gMDsKICAgICAgICB9CiAgICAgICAgbiA9IDA7CiAgICAgICAgd2hpbGUgKG4gPD0gMTQzKSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDg7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs4XSsrOwogICAgICAgIH0KICAgICAgICB3aGlsZSAobiA8PSAyNTUpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gOTsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzldKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChuIDw9IDI3OSkgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA3OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbN10rKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4gPD0gMjg3KSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDg7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs4XSsrOwogICAgICAgIH0KICAgICAgICBnZW5fY29kZXMoc3RhdGljX2x0cmVlLCBMX0NPREVTICsgMSwgYmxfY291bnQpOwogICAgICAgIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHsKICAgICAgICAgIHN0YXRpY19kdHJlZVtuICogMiArIDFdID0gNTsKICAgICAgICAgIHN0YXRpY19kdHJlZVtuICogMl0gPSBiaV9yZXZlcnNlKG4sIDUpOwogICAgICAgIH0KICAgICAgICBzdGF0aWNfbF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19sdHJlZSwgZXh0cmFfbGJpdHMsIExJVEVSQUxTICsgMSwgTF9DT0RFUywgTUFYX0JJVFMpOwogICAgICAgIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgRF9DT0RFUywgTUFYX0JJVFMpOwogICAgICAgIHN0YXRpY19ibF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKG5ldyBBcnJheSgwKSwgZXh0cmFfYmxiaXRzLCAwLCBCTF9DT0RFUywgTUFYX0JMX0JJVFMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluaXRfYmxvY2socykgewogICAgICAgIHZhciBuOwogICAgICAgIGZvciAobiA9IDA7IG4gPCBMX0NPREVTOyBuKyspIHsKICAgICAgICAgIHMuZHluX2x0cmVlW24gKiAyXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHsKICAgICAgICAgIHMuZHluX2R0cmVlW24gKiAyXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzLmJsX3RyZWVbbiAqIDJdID0gMDsKICAgICAgICB9CiAgICAgICAgcy5keW5fbHRyZWVbRU5EX0JMT0NLICogMl0gPSAxOwogICAgICAgIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7CiAgICAgICAgcy5sYXN0X2xpdCA9IHMubWF0Y2hlcyA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmlfd2luZHVwKHMpIHsKICAgICAgICBpZiAocy5iaV92YWxpZCA+IDgpIHsKICAgICAgICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICAgICAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID4gMCkgewogICAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZjsKICAgICAgICB9CiAgICAgICAgcy5iaV9idWYgPSAwOwogICAgICAgIHMuYmlfdmFsaWQgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcikgewogICAgICAgIGJpX3dpbmR1cChzKTsKICAgICAgICBpZiAoaGVhZGVyKSB7CiAgICAgICAgICBwdXRfc2hvcnQocywgbGVuKTsKICAgICAgICAgIHB1dF9zaG9ydChzLCB+bGVuKTsKICAgICAgICB9CiAgICAgICAgdXRpbHMuYXJyYXlTZXQocy5wZW5kaW5nX2J1Ziwgcy53aW5kb3csIGJ1ZiwgbGVuLCBzLnBlbmRpbmcpOwogICAgICAgIHMucGVuZGluZyArPSBsZW47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc21hbGxlcih0cmVlLCBuLCBtLCBkZXB0aCkgewogICAgICAgIHZhciBfbjIgPSBuICogMjsKICAgICAgICB2YXIgX20yID0gbSAqIDI7CiAgICAgICAgcmV0dXJuIHRyZWVbX24yXSA8IHRyZWVbX20yXSB8fCB0cmVlW19uMl0gPT09IHRyZWVbX20yXSAmJiBkZXB0aFtuXSA8PSBkZXB0aFttXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwcWRvd25oZWFwKHMsIHRyZWUsIGspIHsKICAgICAgICB2YXIgdiA9IHMuaGVhcFtrXTsKICAgICAgICB2YXIgaiA9IGsgPDwgMTsKICAgICAgICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7CiAgICAgICAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiYgc21hbGxlcih0cmVlLCBzLmhlYXBbaiArIDFdLCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7CiAgICAgICAgICAgIGorKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzLmhlYXBba10gPSBzLmhlYXBbal07CiAgICAgICAgICBrID0gajsKICAgICAgICAgIGogPDw9IDE7CiAgICAgICAgfQogICAgICAgIHMuaGVhcFtrXSA9IHY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKSB7CiAgICAgICAgdmFyIGRpc3Q7CiAgICAgICAgdmFyIGxjOwogICAgICAgIHZhciBseCA9IDA7CiAgICAgICAgdmFyIGNvZGU7CiAgICAgICAgdmFyIGV4dHJhOwogICAgICAgIGlmIChzLmxhc3RfbGl0ICE9PSAwKSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGRpc3QgPSBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDJdIDw8IDggfCBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDIgKyAxXTsKICAgICAgICAgICAgbGMgPSBzLnBlbmRpbmdfYnVmW3MubF9idWYgKyBseF07CiAgICAgICAgICAgIGx4Kys7CiAgICAgICAgICAgIGlmIChkaXN0ID09PSAwKSB7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJlZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29kZSA9IF9sZW5ndGhfY29kZVtsY107CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUgKyBMSVRFUkFMUyArIDEsIGx0cmVlKTsKICAgICAgICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdOwogICAgICAgICAgICAgIGlmIChleHRyYSAhPT0gMCkgewogICAgICAgICAgICAgICAgbGMgLT0gYmFzZV9sZW5ndGhbY29kZV07CiAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZGlzdC0tOwogICAgICAgICAgICAgIGNvZGUgPSBkX2NvZGUoZGlzdCk7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsKICAgICAgICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdOwogICAgICAgICAgICAgIGlmIChleHRyYSAhPT0gMCkgewogICAgICAgICAgICAgICAgZGlzdCAtPSBiYXNlX2Rpc3RbY29kZV07CiAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTsKICAgICAgICB9CiAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJ1aWxkX3RyZWUocywgZGVzYykgewogICAgICAgIHZhciB0cmVlID0gZGVzYy5keW5fdHJlZTsKICAgICAgICB2YXIgc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTsKICAgICAgICB2YXIgaGFzX3N0cmVlID0gZGVzYy5zdGF0X2Rlc2MuaGFzX3N0cmVlOwogICAgICAgIHZhciBlbGVtcyA9IGRlc2Muc3RhdF9kZXNjLmVsZW1zOwogICAgICAgIHZhciBuLCBtOwogICAgICAgIHZhciBtYXhfY29kZSA9IC0xOwogICAgICAgIHZhciBub2RlOwogICAgICAgIHMuaGVhcF9sZW4gPSAwOwogICAgICAgIHMuaGVhcF9tYXggPSBIRUFQX1NJWkU7CiAgICAgICAgZm9yIChuID0gMDsgbiA8IGVsZW1zOyBuKyspIHsKICAgICAgICAgIGlmICh0cmVlW24gKiAyXSAhPT0gMCkgewogICAgICAgICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjsKICAgICAgICAgICAgcy5kZXB0aFtuXSA9IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0cmVlW24gKiAyICsgMV0gPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aGlsZSAocy5oZWFwX2xlbiA8IDIpIHsKICAgICAgICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlIDwgMiA/ICsrbWF4X2NvZGUgOiAwOwogICAgICAgICAgdHJlZVtub2RlICogMl0gPSAxOwogICAgICAgICAgcy5kZXB0aFtub2RlXSA9IDA7CiAgICAgICAgICBzLm9wdF9sZW4tLTsKICAgICAgICAgIGlmIChoYXNfc3RyZWUpIHsKICAgICAgICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUgKiAyICsgMV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlc2MubWF4X2NvZGUgPSBtYXhfY29kZTsKICAgICAgICBmb3IgKG4gPSBzLmhlYXBfbGVuID4+IDE7IG4gPj0gMTsgbi0tKSB7CiAgICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIG4pOwogICAgICAgIH0KICAgICAgICBub2RlID0gZWxlbXM7CiAgICAgICAgZG8gewogICAgICAgICAgbiA9IHMuaGVhcFsxXTsKICAgICAgICAgIHMuaGVhcFsxXSA9IHMuaGVhcFtzLmhlYXBfbGVuLS1dOwogICAgICAgICAgcHFkb3duaGVhcChzLCB0cmVlLCAxKTsKICAgICAgICAgIG0gPSBzLmhlYXBbMV07CiAgICAgICAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG47CiAgICAgICAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG07CiAgICAgICAgICB0cmVlW25vZGUgKiAyXSA9IHRyZWVbbiAqIDJdICsgdHJlZVttICogMl07CiAgICAgICAgICBzLmRlcHRoW25vZGVdID0gKHMuZGVwdGhbbl0gPj0gcy5kZXB0aFttXSA/IHMuZGVwdGhbbl0gOiBzLmRlcHRoW21dKSArIDE7CiAgICAgICAgICB0cmVlW24gKiAyICsgMV0gPSB0cmVlW20gKiAyICsgMV0gPSBub2RlOwogICAgICAgICAgcy5oZWFwWzFdID0gbm9kZSsrOwogICAgICAgICAgcHFkb3duaGVhcChzLCB0cmVlLCAxKTsKICAgICAgICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpOwogICAgICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzFdOwogICAgICAgIGdlbl9iaXRsZW4ocywgZGVzYyk7CiAgICAgICAgZ2VuX2NvZGVzKHRyZWUsIG1heF9jb2RlLCBzLmJsX2NvdW50KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpIHsKICAgICAgICB2YXIgbjsKICAgICAgICB2YXIgcHJldmxlbiA9IC0xOwogICAgICAgIHZhciBjdXJsZW47CiAgICAgICAgdmFyIG5leHRsZW4gPSB0cmVlWzAgKiAyICsgMV07CiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIgbWF4X2NvdW50ID0gNzsKICAgICAgICB2YXIgbWluX2NvdW50ID0gNDsKICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICB9CiAgICAgICAgdHJlZVsobWF4X2NvZGUgKyAxKSAqIDIgKyAxXSA9IDY1NTM1OwogICAgICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgICAgICAgY3VybGVuID0gbmV4dGxlbjsKICAgICAgICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV07CiAgICAgICAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgICAgICAgIHMuYmxfdHJlZVtjdXJsZW4gKiAyXSArPSBjb3VudDsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9PSAwKSB7CiAgICAgICAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHsKICAgICAgICAgICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdKys7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7CiAgICAgICAgICAgIHMuYmxfdHJlZVtSRVBaXzNfMTAgKiAyXSsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5ibF90cmVlW1JFUFpfMTFfMTM4ICogMl0rKzsKICAgICAgICAgIH0KICAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgIHByZXZsZW4gPSBjdXJsZW47CiAgICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBtYXhfY291bnQgPSA2OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNzsKICAgICAgICAgICAgbWluX2NvdW50ID0gNDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF90cmVlKHMsIHRyZWUsIG1heF9jb2RlKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIHByZXZsZW4gPSAtMTsKICAgICAgICB2YXIgY3VybGVuOwogICAgICAgIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdOwogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgdmFyIG1heF9jb3VudCA9IDc7CiAgICAgICAgdmFyIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgICAgICAgY3VybGVuID0gbmV4dGxlbjsKICAgICAgICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV07CiAgICAgICAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpOwogICAgICAgICAgICB9IHdoaWxlICgtLWNvdW50ICE9PSAwKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9PSAwKSB7CiAgICAgICAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpOwogICAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZF9jb2RlKHMsIFJFUF8zXzYsIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDIpOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkgewogICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLmJsX3RyZWUpOwogICAgICAgICAgICBzZW5kX2JpdHMocywgY291bnQgLSAzLCAzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBaXzExXzEzOCwgcy5ibF90cmVlKTsKICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpOwogICAgICAgICAgfQogICAgICAgICAgY291bnQgPSAwOwogICAgICAgICAgcHJldmxlbiA9IGN1cmxlbjsKICAgICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDY7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXhfY291bnQgPSA3OwogICAgICAgICAgICBtaW5fY291bnQgPSA0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBidWlsZF9ibF90cmVlKHMpIHsKICAgICAgICB2YXIgbWF4X2JsaW5kZXg7CiAgICAgICAgc2Nhbl90cmVlKHMsIHMuZHluX2x0cmVlLCBzLmxfZGVzYy5tYXhfY29kZSk7CiAgICAgICAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7CiAgICAgICAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpOwogICAgICAgIGZvciAobWF4X2JsaW5kZXggPSBCTF9DT0RFUyAtIDE7IG1heF9ibGluZGV4ID49IDM7IG1heF9ibGluZGV4LS0pIHsKICAgICAgICAgIGlmIChzLmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdICogMiArIDFdICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLm9wdF9sZW4gKz0gMyAqIChtYXhfYmxpbmRleCArIDEpICsgNSArIDUgKyA0OwogICAgICAgIHJldHVybiBtYXhfYmxpbmRleDsKICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX2FsbF90cmVlcyhzLCBsY29kZXMsIGRjb2RlcywgYmxjb2RlcykgewogICAgICAgIHZhciByYW5rOwogICAgICAgIHNlbmRfYml0cyhzLCBsY29kZXMgLSAyNTcsIDUpOwogICAgICAgIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCA1KTsKICAgICAgICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsIDQpOwogICAgICAgIGZvciAocmFuayA9IDA7IHJhbmsgPCBibGNvZGVzOyByYW5rKyspIHsKICAgICAgICAgIHNlbmRfYml0cyhzLCBzLmJsX3RyZWVbYmxfb3JkZXJbcmFua10gKiAyICsgMV0sIDMpOwogICAgICAgIH0KICAgICAgICBzZW5kX3RyZWUocywgcy5keW5fbHRyZWUsIGxjb2RlcyAtIDEpOwogICAgICAgIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGV0ZWN0X2RhdGFfdHlwZShzKSB7CiAgICAgICAgdmFyIGJsYWNrX21hc2sgPSA0MDkzNjI0NDQ3OwogICAgICAgIHZhciBuOwogICAgICAgIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHsKICAgICAgICAgIGlmIChibGFja19tYXNrICYgMSAmJiBzLmR5bl9sdHJlZVtuICogMl0gIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIFpfQklOQVJZOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5keW5fbHRyZWVbOSAqIDJdICE9PSAwIHx8IHMuZHluX2x0cmVlWzEwICogMl0gIT09IDAgfHwgcy5keW5fbHRyZWVbMTMgKiAyXSAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIFpfVEVYVDsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUzsgbisrKSB7CiAgICAgICAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBaX1RFWFQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBaX0JJTkFSWTsKICAgICAgfQogICAgICB2YXIgc3RhdGljX2luaXRfZG9uZSA9IGZhbHNlOwogICAgICBmdW5jdGlvbiBfdHJfaW5pdChzKSB7CiAgICAgICAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7CiAgICAgICAgICB0cl9zdGF0aWNfaW5pdCgpOwogICAgICAgICAgc3RhdGljX2luaXRfZG9uZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHMubF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuZHluX2x0cmVlLCBzdGF0aWNfbF9kZXNjKTsKICAgICAgICBzLmRfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7CiAgICAgICAgcy5ibF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuYmxfdHJlZSwgc3RhdGljX2JsX2Rlc2MpOwogICAgICAgIHMuYmlfYnVmID0gMDsKICAgICAgICBzLmJpX3ZhbGlkID0gMDsKICAgICAgICBpbml0X2Jsb2NrKHMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KSB7CiAgICAgICAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0sgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7CiAgICAgICAgY29weV9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIHRydWUpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl9hbGlnbihzKSB7CiAgICAgICAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTsKICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwogICAgICAgIGJpX2ZsdXNoKHMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpIHsKICAgICAgICB2YXIgb3B0X2xlbmIsIHN0YXRpY19sZW5iOwogICAgICAgIHZhciBtYXhfYmxpbmRleCA9IDA7CiAgICAgICAgaWYgKHMubGV2ZWwgPiAwKSB7CiAgICAgICAgICBpZiAocy5zdHJtLmRhdGFfdHlwZSA9PT0gWl9VTktOT1dOKSB7CiAgICAgICAgICAgIHMuc3RybS5kYXRhX3R5cGUgPSBkZXRlY3RfZGF0YV90eXBlKHMpOwogICAgICAgICAgfQogICAgICAgICAgYnVpbGRfdHJlZShzLCBzLmxfZGVzYyk7CiAgICAgICAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTsKICAgICAgICAgIG1heF9ibGluZGV4ID0gYnVpbGRfYmxfdHJlZShzKTsKICAgICAgICAgIG9wdF9sZW5iID0gcy5vcHRfbGVuICsgMyArIDcgPj4+IDM7CiAgICAgICAgICBzdGF0aWNfbGVuYiA9IHMuc3RhdGljX2xlbiArIDMgKyA3ID4+PiAzOwogICAgICAgICAgaWYgKHN0YXRpY19sZW5iIDw9IG9wdF9sZW5iKSB7CiAgICAgICAgICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmIgPSBzdG9yZWRfbGVuICsgNTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0b3JlZF9sZW4gKyA0IDw9IG9wdF9sZW5iICYmIGJ1ZiAhPT0gLTEpIHsKICAgICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTsKICAgICAgICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7CiAgICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIHN0YXRpY19sdHJlZSwgc3RhdGljX2R0cmVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVMgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7CiAgICAgICAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTsKICAgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIHMuZHluX2x0cmVlLCBzLmR5bl9kdHJlZSk7CiAgICAgICAgfQogICAgICAgIGluaXRfYmxvY2socyk7CiAgICAgICAgaWYgKGxhc3QpIHsKICAgICAgICAgIGJpX3dpbmR1cChzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX3RhbGx5KHMsIGRpc3QsIGxjKSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgcy5sYXN0X2xpdCAqIDJdID0gZGlzdCA+Pj4gOCAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMiArIDFdID0gZGlzdCAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MubF9idWYgKyBzLmxhc3RfbGl0XSA9IGxjICYgMjU1OwogICAgICAgIHMubGFzdF9saXQrKzsKICAgICAgICBpZiAoZGlzdCA9PT0gMCkgewogICAgICAgICAgcy5keW5fbHRyZWVbbGMgKiAyXSsrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzLm1hdGNoZXMrKzsKICAgICAgICAgIGRpc3QtLTsKICAgICAgICAgIHMuZHluX2x0cmVlWyhfbGVuZ3RoX2NvZGVbbGNdICsgTElURVJBTFMgKyAxKSAqIDJdKys7CiAgICAgICAgICBzLmR5bl9kdHJlZVtkX2NvZGUoZGlzdCkgKiAyXSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5sYXN0X2xpdCA9PT0gcy5saXRfYnVmc2l6ZSAtIDE7CiAgICAgIH0KICAgICAgZXhwb3J0cy5fdHJfaW5pdCA9IF90cl9pbml0OwogICAgICBleHBvcnRzLl90cl9zdG9yZWRfYmxvY2sgPSBfdHJfc3RvcmVkX2Jsb2NrOwogICAgICBleHBvcnRzLl90cl9mbHVzaF9ibG9jayA9IF90cl9mbHVzaF9ibG9jazsKICAgICAgZXhwb3J0cy5fdHJfdGFsbHkgPSBfdHJfdGFsbHk7CiAgICAgIGV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcwogIHZhciByZXF1aXJlX2FkbGVyMzIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7CiAgICAgICAgdmFyIHMxID0gYWRsZXIgJiA2NTUzNSB8IDAsIHMyID0gYWRsZXIgPj4+IDE2ICYgNjU1MzUgfCAwLCBuID0gMDsKICAgICAgICB3aGlsZSAobGVuICE9PSAwKSB7CiAgICAgICAgICBuID0gbGVuID4gMmUzID8gMmUzIDogbGVuOwogICAgICAgICAgbGVuIC09IG47CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHMxID0gczEgKyBidWZbcG9zKytdIHwgMDsKICAgICAgICAgICAgczIgPSBzMiArIHMxIHwgMDsKICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgICBzMSAlPSA2NTUyMTsKICAgICAgICAgIHMyICU9IDY1NTIxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gczEgfCBzMiA8PCAxNiB8IDA7CiAgICAgIH0KICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY3JjMzIuanMKICB2YXIgcmVxdWlyZV9jcmMzMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBtYWtlVGFibGUoKSB7CiAgICAgICAgdmFyIGMsIHRhYmxlID0gW107CiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgYyA9IG47CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykgewogICAgICAgICAgICBjID0gYyAmIDEgPyAzOTg4MjkyMzg0IF4gYyA+Pj4gMSA6IGMgPj4+IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0YWJsZVtuXSA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgfQogICAgICB2YXIgY3JjVGFibGUgPSBtYWtlVGFibGUoKTsKICAgICAgZnVuY3Rpb24gY3JjMzIyKGNyYywgYnVmLCBsZW4sIHBvcykgewogICAgICAgIHZhciB0ID0gY3JjVGFibGUsIGVuZCA9IHBvcyArIGxlbjsKICAgICAgICBjcmMgXj0gLTE7CiAgICAgICAgZm9yICh2YXIgaSA9IHBvczsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICBjcmMgPSBjcmMgPj4+IDggXiB0WyhjcmMgXiBidWZbaV0pICYgMjU1XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNyYyBeIC0xOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gY3JjMzIyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMKICB2YXIgcmVxdWlyZV9tZXNzYWdlczIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7CiAgICAgICAgMjogIm5lZWQgZGljdGlvbmFyeSIsCiAgICAgICAgMTogInN0cmVhbSBlbmQiLAogICAgICAgIDA6ICIiLAogICAgICAgICItMSI6ICJmaWxlIGVycm9yIiwKICAgICAgICAiLTIiOiAic3RyZWFtIGVycm9yIiwKICAgICAgICAiLTMiOiAiZGF0YSBlcnJvciIsCiAgICAgICAgIi00IjogImluc3VmZmljaWVudCBtZW1vcnkiLAogICAgICAgICItNSI6ICJidWZmZXIgZXJyb3IiLAogICAgICAgICItNiI6ICJpbmNvbXBhdGlibGUgdmVyc2lvbiIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMKICB2YXIgcmVxdWlyZV9kZWZsYXRlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgdHJlZXMgPSByZXF1aXJlX3RyZWVzKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMjIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgWl9OT19GTFVTSCA9IDA7CiAgICAgIHZhciBaX1BBUlRJQUxfRkxVU0ggPSAxOwogICAgICB2YXIgWl9GVUxMX0ZMVVNIID0gMzsKICAgICAgdmFyIFpfRklOSVNIID0gNDsKICAgICAgdmFyIFpfQkxPQ0sgPSA1OwogICAgICB2YXIgWl9PSyA9IDA7CiAgICAgIHZhciBaX1NUUkVBTV9FTkQgPSAxOwogICAgICB2YXIgWl9TVFJFQU1fRVJST1IgPSAtMjsKICAgICAgdmFyIFpfREFUQV9FUlJPUiA9IC0zOwogICAgICB2YXIgWl9CVUZfRVJST1IgPSAtNTsKICAgICAgdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwogICAgICB2YXIgWl9GSUxURVJFRCA9IDE7CiAgICAgIHZhciBaX0hVRkZNQU5fT05MWSA9IDI7CiAgICAgIHZhciBaX1JMRSA9IDM7CiAgICAgIHZhciBaX0ZJWEVEID0gNDsKICAgICAgdmFyIFpfREVGQVVMVF9TVFJBVEVHWSA9IDA7CiAgICAgIHZhciBaX1VOS05PV04gPSAyOwogICAgICB2YXIgWl9ERUZMQVRFRCA9IDg7CiAgICAgIHZhciBNQVhfTUVNX0xFVkVMID0gOTsKICAgICAgdmFyIE1BWF9XQklUUyA9IDE1OwogICAgICB2YXIgREVGX01FTV9MRVZFTCA9IDg7CiAgICAgIHZhciBMRU5HVEhfQ09ERVMgPSAyOTsKICAgICAgdmFyIExJVEVSQUxTID0gMjU2OwogICAgICB2YXIgTF9DT0RFUyA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUzsKICAgICAgdmFyIERfQ09ERVMgPSAzMDsKICAgICAgdmFyIEJMX0NPREVTID0gMTk7CiAgICAgIHZhciBIRUFQX1NJWkUgPSAyICogTF9DT0RFUyArIDE7CiAgICAgIHZhciBNQVhfQklUUyA9IDE1OwogICAgICB2YXIgTUlOX01BVENIID0gMzsKICAgICAgdmFyIE1BWF9NQVRDSCA9IDI1ODsKICAgICAgdmFyIE1JTl9MT09LQUhFQUQgPSBNQVhfTUFUQ0ggKyBNSU5fTUFUQ0ggKyAxOwogICAgICB2YXIgUFJFU0VUX0RJQ1QgPSAzMjsKICAgICAgdmFyIElOSVRfU1RBVEUgPSA0MjsKICAgICAgdmFyIEVYVFJBX1NUQVRFID0gNjk7CiAgICAgIHZhciBOQU1FX1NUQVRFID0gNzM7CiAgICAgIHZhciBDT01NRU5UX1NUQVRFID0gOTE7CiAgICAgIHZhciBIQ1JDX1NUQVRFID0gMTAzOwogICAgICB2YXIgQlVTWV9TVEFURSA9IDExMzsKICAgICAgdmFyIEZJTklTSF9TVEFURSA9IDY2NjsKICAgICAgdmFyIEJTX05FRURfTU9SRSA9IDE7CiAgICAgIHZhciBCU19CTE9DS19ET05FID0gMjsKICAgICAgdmFyIEJTX0ZJTklTSF9TVEFSVEVEID0gMzsKICAgICAgdmFyIEJTX0ZJTklTSF9ET05FID0gNDsKICAgICAgdmFyIE9TX0NPREUgPSAzOwogICAgICBmdW5jdGlvbiBlcnIoc3RybSwgZXJyb3JDb2RlKSB7CiAgICAgICAgc3RybS5tc2cgPSBtc2dbZXJyb3JDb2RlXTsKICAgICAgICByZXR1cm4gZXJyb3JDb2RlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJhbmsoZikgewogICAgICAgIHJldHVybiAoZiA8PCAxKSAtIChmID4gNCA/IDkgOiAwKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB6ZXJvKGJ1ZikgewogICAgICAgIHZhciBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CiAgICAgICAgICBidWZbbGVuXSA9IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZsdXNoX3BlbmRpbmcoc3RybSkgewogICAgICAgIHZhciBzID0gc3RybS5zdGF0ZTsKICAgICAgICB2YXIgbGVuID0gcy5wZW5kaW5nOwogICAgICAgIGlmIChsZW4gPiBzdHJtLmF2YWlsX291dCkgewogICAgICAgICAgbGVuID0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHMucGVuZGluZ19idWYsIHMucGVuZGluZ19vdXQsIGxlbiwgc3RybS5uZXh0X291dCk7CiAgICAgICAgc3RybS5uZXh0X291dCArPSBsZW47CiAgICAgICAgcy5wZW5kaW5nX291dCArPSBsZW47CiAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gbGVuOwogICAgICAgIHN0cm0uYXZhaWxfb3V0IC09IGxlbjsKICAgICAgICBzLnBlbmRpbmcgLT0gbGVuOwogICAgICAgIGlmIChzLnBlbmRpbmcgPT09IDApIHsKICAgICAgICAgIHMucGVuZGluZ19vdXQgPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5KHMsIGxhc3QpIHsKICAgICAgICB0cmVlcy5fdHJfZmx1c2hfYmxvY2socywgcy5ibG9ja19zdGFydCA+PSAwID8gcy5ibG9ja19zdGFydCA6IC0xLCBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCwgbGFzdCk7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgZmx1c2hfcGVuZGluZyhzLnN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHB1dF9ieXRlKHMsIGIpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHV0U2hvcnRNU0IocywgYikgewogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiA+Pj4gOCAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGIgJiAyNTU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcmVhZF9idWYoc3RybSwgYnVmLCBzdGFydCwgc2l6ZSkgewogICAgICAgIHZhciBsZW4gPSBzdHJtLmF2YWlsX2luOwogICAgICAgIGlmIChsZW4gPiBzaXplKSB7CiAgICAgICAgICBsZW4gPSBzaXplOwogICAgICAgIH0KICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgc3RybS5hdmFpbF9pbiAtPSBsZW47CiAgICAgICAgdXRpbHMuYXJyYXlTZXQoYnVmLCBzdHJtLmlucHV0LCBzdHJtLm5leHRfaW4sIGxlbiwgc3RhcnQpOwogICAgICAgIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7CiAgICAgICAgfSBlbHNlIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDIpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X2luICs9IGxlbjsKICAgICAgICBzdHJtLnRvdGFsX2luICs9IGxlbjsKICAgICAgICByZXR1cm4gbGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKSB7CiAgICAgICAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsKICAgICAgICB2YXIgc2NhbiA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgdmFyIG1hdGNoOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIGJlc3RfbGVuID0gcy5wcmV2X2xlbmd0aDsKICAgICAgICB2YXIgbmljZV9tYXRjaCA9IHMubmljZV9tYXRjaDsKICAgICAgICB2YXIgbGltaXQgPSBzLnN0cnN0YXJ0ID4gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEID8gcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIHZhciB3bWFzayA9IHMud19tYXNrOwogICAgICAgIHZhciBwcmV2ID0gcy5wcmV2OwogICAgICAgIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIOwogICAgICAgIHZhciBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgIHZhciBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBzLmdvb2RfbWF0Y2gpIHsKICAgICAgICAgIGNoYWluX2xlbmd0aCA+Pj0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgbmljZV9tYXRjaCA9IHMubG9va2FoZWFkOwogICAgICAgIH0KICAgICAgICBkbyB7CiAgICAgICAgICBtYXRjaCA9IGN1cl9tYXRjaDsKICAgICAgICAgIGlmIChfd2luW21hdGNoICsgYmVzdF9sZW5dICE9PSBzY2FuX2VuZCB8fCBfd2luW21hdGNoICsgYmVzdF9sZW4gLSAxXSAhPT0gc2Nhbl9lbmQxIHx8IF93aW5bbWF0Y2hdICE9PSBfd2luW3NjYW5dIHx8IF93aW5bKyttYXRjaF0gIT09IF93aW5bc2NhbiArIDFdKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc2NhbiArPSAyOwogICAgICAgICAgbWF0Y2grKzsKICAgICAgICAgIGRvIHsKICAgICAgICAgIH0gd2hpbGUgKF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAgICAgICAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIOwogICAgICAgICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CiAgICAgICAgICAgIGJlc3RfbGVuID0gbGVuOwogICAgICAgICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgICAgICBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApOwogICAgICAgIGlmIChiZXN0X2xlbiA8PSBzLmxvb2thaGVhZCkgewogICAgICAgICAgcmV0dXJuIGJlc3RfbGVuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5sb29rYWhlYWQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmlsbF93aW5kb3cocykgewogICAgICAgIHZhciBfd19zaXplID0gcy53X3NpemU7CiAgICAgICAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjsKICAgICAgICBkbyB7CiAgICAgICAgICBtb3JlID0gcy53aW5kb3dfc2l6ZSAtIHMubG9va2FoZWFkIC0gcy5zdHJzdGFydDsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHMud2luZG93LCBzLndpbmRvdywgX3dfc2l6ZSwgX3dfc2l6ZSwgMCk7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7CiAgICAgICAgICAgIG4gPSBzLmhhc2hfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5oZWFkWy0tcF07CiAgICAgICAgICAgICAgcy5oZWFkW3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBuID0gX3dfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5wcmV2Wy0tcF07CiAgICAgICAgICAgICAgcy5wcmV2W3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBtb3JlICs9IF93X3NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX2luID09PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbiA9IHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCwgbW9yZSk7CiAgICAgICAgICBzLmxvb2thaGVhZCArPSBuOwogICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDsKICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3N0cl07CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICAgICAgICAgIHN0cisrOwogICAgICAgICAgICAgIHMuaW5zZXJ0LS07CiAgICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIG1heF9ibG9ja19zaXplID0gNjU1MzU7CiAgICAgICAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewogICAgICAgICAgbWF4X2Jsb2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1OwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDAgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7CiAgICAgICAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDsKICAgICAgICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHsKICAgICAgICB2YXIgaGFzaF9oZWFkOwogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaGFzaF9oZWFkID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaGFzaF9oZWFkICE9PSAwICYmIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSBzLm1heF9sYXp5X21hdGNoICYmIHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoLS07CiAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdOwogICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGhhc2hfaGVhZDsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIHZhciBtYXhfaW5zZXJ0OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2hfaGVhZCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgfQogICAgICAgICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgcy5wcmV2X21hdGNoID0gcy5tYXRjaF9zdGFydDsKICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGlmIChoYXNoX2hlYWQgIT09IDAgJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiYgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSBzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmIChzLnN0cmF0ZWd5ID09PSBaX0ZJTFRFUkVEIHx8IHMubWF0Y2hfbGVuZ3RoID09PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2KSkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHsKICAgICAgICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5wcmV2X2xlbmd0aCAtIDE7CiAgICAgICAgICAgIHMucHJldl9sZW5ndGggLT0gMjsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkgewogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5sYXN0X2xpdCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkgewogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgdmFyIHByZXY7CiAgICAgICAgdmFyIHNjYW4sIHN0cmVuZDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHsKICAgICAgICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxOwogICAgICAgICAgICBwcmV2ID0gX3dpbltzY2FuXTsKICAgICAgICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7CiAgICAgICAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBzY2FuIDwgc3RyZW5kKTsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGJmbHVzaDsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTsKICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHsKICAgICAgICB0aGlzLmdvb2RfbGVuZ3RoID0gZ29vZF9sZW5ndGg7CiAgICAgICAgdGhpcy5tYXhfbGF6eSA9IG1heF9sYXp5OwogICAgICAgIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDsKICAgICAgICB0aGlzLm1heF9jaGFpbiA9IG1heF9jaGFpbjsKICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jOwogICAgICB9CiAgICAgIHZhciBjb25maWd1cmF0aW9uX3RhYmxlOwogICAgICBjb25maWd1cmF0aW9uX3RhYmxlID0gWwogICAgICAgIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNiwgMzIsIDMyLCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLAogICAgICAgIG5ldyBDb25maWcoOCwgMTYsIDMyLCAzMiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KQogICAgICBdOwogICAgICBmdW5jdGlvbiBsbV9pbml0KHMpIHsKICAgICAgICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplOwogICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTsKICAgICAgICBzLmdvb2RfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmdvb2RfbGVuZ3RoOwogICAgICAgIHMubmljZV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGg7CiAgICAgICAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47CiAgICAgICAgcy5zdHJzdGFydCA9IDA7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICBzLmluc19oID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBEZWZsYXRlU3RhdGUoKSB7CiAgICAgICAgdGhpcy5zdHJtID0gbnVsbDsKICAgICAgICB0aGlzLnN0YXR1cyA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGw7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmcgPSAwOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5nemhlYWQgPSBudWxsOwogICAgICAgIHRoaXMuZ3ppbmRleCA9IDA7CiAgICAgICAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOwogICAgICAgIHRoaXMubGFzdF9mbHVzaCA9IC0xOwogICAgICAgIHRoaXMud19zaXplID0gMDsKICAgICAgICB0aGlzLndfYml0cyA9IDA7CiAgICAgICAgdGhpcy53X21hc2sgPSAwOwogICAgICAgIHRoaXMud2luZG93ID0gbnVsbDsKICAgICAgICB0aGlzLndpbmRvd19zaXplID0gMDsKICAgICAgICB0aGlzLnByZXYgPSBudWxsOwogICAgICAgIHRoaXMuaGVhZCA9IG51bGw7CiAgICAgICAgdGhpcy5pbnNfaCA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NpemUgPSAwOwogICAgICAgIHRoaXMuaGFzaF9iaXRzID0gMDsKICAgICAgICB0aGlzLmhhc2hfbWFzayA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NoaWZ0ID0gMDsKICAgICAgICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5wcmV2X21hdGNoID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgdGhpcy5zdHJzdGFydCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9zdGFydCA9IDA7CiAgICAgICAgdGhpcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHRoaXMucHJldl9sZW5ndGggPSAwOwogICAgICAgIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5sZXZlbCA9IDA7CiAgICAgICAgdGhpcy5zdHJhdGVneSA9IDA7CiAgICAgICAgdGhpcy5nb29kX21hdGNoID0gMDsKICAgICAgICB0aGlzLm5pY2VfbWF0Y2ggPSAwOwogICAgICAgIHRoaXMuZHluX2x0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KEhFQVBfU0laRSAqIDIpOwogICAgICAgIHRoaXMuZHluX2R0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogRF9DT0RFUyArIDEpICogMik7CiAgICAgICAgdGhpcy5ibF90cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpOwogICAgICAgIHplcm8odGhpcy5keW5fbHRyZWUpOwogICAgICAgIHplcm8odGhpcy5keW5fZHRyZWUpOwogICAgICAgIHplcm8odGhpcy5ibF90cmVlKTsKICAgICAgICB0aGlzLmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5kX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuYmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUyArIDEpOwogICAgICAgIHRoaXMuaGVhcCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOwogICAgICAgIHplcm8odGhpcy5oZWFwKTsKICAgICAgICB0aGlzLmhlYXBfbGVuID0gMDsKICAgICAgICB0aGlzLmhlYXBfbWF4ID0gMDsKICAgICAgICB0aGlzLmRlcHRoID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7CiAgICAgICAgemVybyh0aGlzLmRlcHRoKTsKICAgICAgICB0aGlzLmxfYnVmID0gMDsKICAgICAgICB0aGlzLmxpdF9idWZzaXplID0gMDsKICAgICAgICB0aGlzLmxhc3RfbGl0ID0gMDsKICAgICAgICB0aGlzLmRfYnVmID0gMDsKICAgICAgICB0aGlzLm9wdF9sZW4gPSAwOwogICAgICAgIHRoaXMuc3RhdGljX2xlbiA9IDA7CiAgICAgICAgdGhpcy5tYXRjaGVzID0gMDsKICAgICAgICB0aGlzLmluc2VydCA9IDA7CiAgICAgICAgdGhpcy5iaV9idWYgPSAwOwogICAgICAgIHRoaXMuYmlfdmFsaWQgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkgewogICAgICAgIHZhciBzOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgICAgfQogICAgICAgIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IDA7CiAgICAgICAgc3RybS5kYXRhX3R5cGUgPSBaX1VOS05PV047CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgcy5wZW5kaW5nID0gMDsKICAgICAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICBpZiAocy53cmFwIDwgMCkgewogICAgICAgICAgcy53cmFwID0gLXMud3JhcDsKICAgICAgICB9CiAgICAgICAgcy5zdGF0dXMgPSBzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURTsKICAgICAgICBzdHJtLmFkbGVyID0gcy53cmFwID09PSAyID8gMCA6IDE7CiAgICAgICAgcy5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKICAgICAgICB0cmVlcy5fdHJfaW5pdChzKTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkgewogICAgICAgIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOwogICAgICAgIGlmIChyZXQgPT09IFpfT0spIHsKICAgICAgICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIHsKICAgICAgICBpZiAoIXN0cm0pIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgdmFyIHdyYXAgPSAxOwogICAgICAgIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7CiAgICAgICAgICBsZXZlbCA9IDY7CiAgICAgICAgfQogICAgICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewogICAgICAgICAgd3JhcCA9IDA7CiAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHsKICAgICAgICAgIHdyYXAgPSAyOwogICAgICAgICAgd2luZG93Qml0cyAtPSAxNjsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9PSBaX0RFRkxBVEVEIHx8IHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyA9PT0gOCkgewogICAgICAgICAgd2luZG93Qml0cyA9IDk7CiAgICAgICAgfQogICAgICAgIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpOwogICAgICAgIHN0cm0uc3RhdGUgPSBzOwogICAgICAgIHMuc3RybSA9IHN0cm07CiAgICAgICAgcy53cmFwID0gd3JhcDsKICAgICAgICBzLmd6aGVhZCA9IG51bGw7CiAgICAgICAgcy53X2JpdHMgPSB3aW5kb3dCaXRzOwogICAgICAgIHMud19zaXplID0gMSA8PCBzLndfYml0czsKICAgICAgICBzLndfbWFzayA9IHMud19zaXplIC0gMTsKICAgICAgICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNzsKICAgICAgICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7CiAgICAgICAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7CiAgICAgICAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBNSU5fTUFUQ0gpOwogICAgICAgIHMud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUgKiAyKTsKICAgICAgICBzLmhlYWQgPSBuZXcgdXRpbHMuQnVmMTYocy5oYXNoX3NpemUpOwogICAgICAgIHMucHJldiA9IG5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSk7CiAgICAgICAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgbWVtTGV2ZWwgKyA2OwogICAgICAgIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0OwogICAgICAgIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpOwogICAgICAgIHMuZF9idWYgPSAxICogcy5saXRfYnVmc2l6ZTsKICAgICAgICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7CiAgICAgICAgcy5sZXZlbCA9IGxldmVsOwogICAgICAgIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTsKICAgICAgICBzLm1ldGhvZCA9IG1ldGhvZDsKICAgICAgICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7CiAgICAgICAgcmV0dXJuIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHsKICAgICAgICB2YXIgb2xkX2ZsdXNoLCBzOwogICAgICAgIHZhciBiZWcsIHZhbDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkgewogICAgICAgICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICghc3RybS5vdXRwdXQgfHwgIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCB8fCBzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBzdHJtLmF2YWlsX291dCA9PT0gMCA/IFpfQlVGX0VSUk9SIDogWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzLnN0cm0gPSBzdHJtOwogICAgICAgIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDsKICAgICAgICBzLmxhc3RfZmx1c2ggPSBmbHVzaDsKICAgICAgICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLndyYXAgPT09IDIpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKICAgICAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKICAgICAgICAgICAgcHV0X2J5dGUocywgOCk7CiAgICAgICAgICAgIGlmICghcy5nemhlYWQpIHsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50ZXh0ID8gMSA6IDApICsgKHMuZ3poZWFkLmhjcmMgPyAyIDogMCkgKyAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICsgKCFzLmd6aGVhZC5uYW1lID8gMCA6IDgpICsgKCFzLmd6aGVhZC5jb21tZW50ID8gMCA6IDE2KSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiA4ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDE2ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAyNTUpOwogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5leHRyYSAmJiBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDI1NSk7CiAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZywgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBFWFRSQV9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IFpfREVGTEFURUQgKyAocy53X2JpdHMgLSA4IDw8IDQpIDw8IDg7CiAgICAgICAgICAgIHZhciBsZXZlbF9mbGFncyA9IC0xOwogICAgICAgICAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsID09PSA2KSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIgfD0gbGV2ZWxfZmxhZ3MgPDwgNjsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVhZGVyICs9IDMxIC0gaGVhZGVyICUgMzE7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7CiAgICAgICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDY1NTM1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJtLmFkbGVyID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhKSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgd2hpbGUgKHMuZ3ppbmRleCA8IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiA2NTUzNSkpIHsKICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAyNTUpOwogICAgICAgICAgICAgIHMuZ3ppbmRleCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkgewogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gTkFNRV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLm5hbWUpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICAgIHZhbCA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQubmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAyNTU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CiAgICAgICAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7CiAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWwgPT09IDApIHsKICAgICAgICAgICAgICBzLmd6aW5kZXggPSAwOwogICAgICAgICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IENPTU1FTlRfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLmd6aGVhZC5jb21tZW50KSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgICB2YWwgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMjU1OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YWwgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOwogICAgICAgICAgICB9IHdoaWxlICh2YWwgIT09IDApOwogICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsID09PSAwKSB7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gSENSQ19TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMpIHsKICAgICAgICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgKyAyIDw9IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAyNTUpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnBlbmRpbmcgIT09IDApIHsKICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIHJldHVybiBaX09LOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiYgZmx1c2ggIT09IFpfRklOSVNIKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8IGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHZhciBic3RhdGUgPSBzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSA/IGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgOiBzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCk7CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9ET05FKSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gRklOSVNIX1NUQVRFOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJzdGF0ZSA9PT0gQlNfTkVFRF9NT1JFIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQpIHsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19CTE9DS19ET05FKSB7CiAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9QQVJUSUFMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZsdXNoICE9PSBaX0JMT0NLKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZVTExfRkxVU0gpIHsKICAgICAgICAgICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChzLndyYXAgPD0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VORDsKICAgICAgICB9CiAgICAgICAgaWYgKHMud3JhcCA9PT0gMikgewogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDggJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciA+PiAxNiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDI0ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiA4ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gPj4gMTYgJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiAyNCAmIDI1NSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiA2NTUzNSk7CiAgICAgICAgfQogICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgaWYgKHMud3JhcCA+IDApIHsKICAgICAgICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnBlbmRpbmcgIT09IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVFbmQoc3RybSkgewogICAgICAgIHZhciBzdGF0dXM7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzOwogICAgICAgIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiYgc3RhdHVzICE9PSBFWFRSQV9TVEFURSAmJiBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiYgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmIHN0YXR1cyAhPT0gSENSQ19TVEFURSAmJiBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiYgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzdHJtLnN0YXRlID0gbnVsbDsKICAgICAgICByZXR1cm4gc3RhdHVzID09PSBCVVNZX1NUQVRFID8gZXJyKHN0cm0sIFpfREFUQV9FUlJPUikgOiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICAgICAgICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwogICAgICAgIHZhciBzOwogICAgICAgIHZhciBzdHIsIG47CiAgICAgICAgdmFyIHdyYXA7CiAgICAgICAgdmFyIGF2YWlsOwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBpbnB1dDsKICAgICAgICB2YXIgdG1wRGljdDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgd3JhcCA9IHMud3JhcDsKICAgICAgICBpZiAod3JhcCA9PT0gMiB8fCB3cmFwID09PSAxICYmIHMuc3RhdHVzICE9PSBJTklUX1NUQVRFIHx8IHMubG9va2FoZWFkKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmICh3cmFwID09PSAxKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTsKICAgICAgICB9CiAgICAgICAgcy53cmFwID0gMDsKICAgICAgICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkgewogICAgICAgICAgaWYgKHdyYXAgPT09IDApIHsKICAgICAgICAgICAgemVybyhzLmhlYWQpOwogICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHRtcERpY3QgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSk7CiAgICAgICAgICB1dGlscy5hcnJheVNldCh0bXBEaWN0LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoIC0gcy53X3NpemUsIHMud19zaXplLCAwKTsKICAgICAgICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0OwogICAgICAgICAgZGljdExlbmd0aCA9IHMud19zaXplOwogICAgICAgIH0KICAgICAgICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgbmV4dCA9IHN0cm0ubmV4dF9pbjsKICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CiAgICAgICAgc3RybS5uZXh0X2luID0gMDsKICAgICAgICBzdHJtLmlucHV0ID0gZGljdGlvbmFyeTsKICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICB3aGlsZSAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICBzdHIgPSBzLnN0cnN0YXJ0OwogICAgICAgICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpOwogICAgICAgICAgZG8gewogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICAgICAgc3RyKys7CiAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgcy5zdHJzdGFydCA9IHN0cjsKICAgICAgICAgIHMubG9va2FoZWFkID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgIH0KICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0OwogICAgICAgIHMuaW5zZXJ0ID0gcy5sb29rYWhlYWQ7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgc3RybS5pbnB1dCA9IGlucHV0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBhdmFpbDsKICAgICAgICBzLndyYXAgPSB3cmFwOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGV4cG9ydHMuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDsKICAgICAgZXhwb3J0cy5kZWZsYXRlSW5pdDIgPSBkZWZsYXRlSW5pdDI7CiAgICAgIGV4cG9ydHMuZGVmbGF0ZVJlc2V0ID0gZGVmbGF0ZVJlc2V0OwogICAgICBleHBvcnRzLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwOwogICAgICBleHBvcnRzLmRlZmxhdGVTZXRIZWFkZXIgPSBkZWZsYXRlU2V0SGVhZGVyOwogICAgICBleHBvcnRzLmRlZmxhdGUgPSBkZWZsYXRlOwogICAgICBleHBvcnRzLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kOwogICAgICBleHBvcnRzLmRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gZGVmbGF0ZVNldERpY3Rpb25hcnk7CiAgICAgIGV4cG9ydHMuZGVmbGF0ZUluZm8gPSAicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvc3RyaW5ncy5qcwogIHZhciByZXF1aXJlX3N0cmluZ3MgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL3N0cmluZ3MuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgU1RSX0FQUExZX09LID0gdHJ1ZTsKICAgICAgdmFyIFNUUl9BUFBMWV9VSUFfT0sgPSB0cnVlOwogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKTsKICAgICAgfSBjYXRjaCAoX18pIHsKICAgICAgICBTVFJfQVBQTFlfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOwogICAgICB9IGNhdGNoIChfXykgewogICAgICAgIFNUUl9BUFBMWV9VSUFfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB2YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpOwogICAgICBmb3IgKHEgPSAwOyBxIDwgMjU2OyBxKyspIHsKICAgICAgICBfdXRmOGxlbltxXSA9IHEgPj0gMjUyID8gNiA6IHEgPj0gMjQ4ID8gNSA6IHEgPj0gMjQwID8gNCA6IHEgPj0gMjI0ID8gMyA6IHEgPj0gMTkyID8gMiA6IDE7CiAgICAgIH0KICAgICAgdmFyIHE7CiAgICAgIF91dGY4bGVuWzI1NF0gPSBfdXRmOGxlblsyNTRdID0gMTsKICAgICAgZXhwb3J0cy5zdHJpbmcyYnVmID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7CiAgICAgICAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykgewogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICAgIGlmICgoYyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgbV9wb3MgKyAxIDwgc3RyX2xlbikgewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiA2NDUxMikgPT09IDU2MzIwKSB7CiAgICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgLSA1NTI5NiA8PCAxMCkgKyAoYzIgLSA1NjMyMCk7CiAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnVmX2xlbiArPSBjIDwgMTI4ID8gMSA6IGMgPCAyMDQ4ID8gMiA6IGMgPCA2NTUzNiA/IDMgOiA0OwogICAgICAgIH0KICAgICAgICBidWYgPSBuZXcgdXRpbHMuQnVmOChidWZfbGVuKTsKICAgICAgICBmb3IgKGkgPSAwLCBtX3BvcyA9IDA7IGkgPCBidWZfbGVuOyBtX3BvcysrKSB7CiAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpOwogICAgICAgICAgaWYgKChjICYgNjQ1MTIpID09PSA1NTI5NiAmJiBtX3BvcyArIDEgPCBzdHJfbGVuKSB7CiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MgKyAxKTsKICAgICAgICAgICAgaWYgKChjMiAmIDY0NTEyKSA9PT0gNTYzMjApIHsKICAgICAgICAgICAgICBjID0gNjU1MzYgKyAoYyAtIDU1Mjk2IDw8IDEwKSArIChjMiAtIDU2MzIwKTsKICAgICAgICAgICAgICBtX3BvcysrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDEyOCkgewogICAgICAgICAgICBidWZbaSsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTkyIHwgYyA+Pj4gNjsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCA2NTUzNikgewogICAgICAgICAgICBidWZbaSsrXSA9IDIyNCB8IGMgPj4+IDEyOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDYgJiA2MzsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWZbaSsrXSA9IDI0MCB8IGMgPj4+IDE4OwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDEyICYgNjM7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyA+Pj4gNiAmIDYzOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgJiA2MzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYnVmMmJpbnN0cmluZyhidWYsIGxlbikgewogICAgICAgIGlmIChsZW4gPCA2NTUzNCkgewogICAgICAgICAgaWYgKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LIHx8ICFidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX09LKSB7CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0aWxzLnNocmlua0J1ZihidWYsIGxlbikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBleHBvcnRzLmJ1ZjJiaW5zdHJpbmcgPSBmdW5jdGlvbihidWYpIHsKICAgICAgICByZXR1cm4gYnVmMmJpbnN0cmluZyhidWYsIGJ1Zi5sZW5ndGgpOwogICAgICB9OwogICAgICBleHBvcnRzLmJpbnN0cmluZzJidWYgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICB2YXIgYnVmID0gbmV3IHV0aWxzLkJ1Zjgoc3RyLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgYnVmW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIGV4cG9ydHMuYnVmMnN0cmluZyA9IGZ1bmN0aW9uKGJ1ZiwgbWF4KSB7CiAgICAgICAgdmFyIGksIG91dCwgYywgY19sZW47CiAgICAgICAgdmFyIGxlbiA9IG1heCB8fCBidWYubGVuZ3RoOwogICAgICAgIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTsKICAgICAgICBmb3IgKG91dCA9IDAsIGkgPSAwOyBpIDwgbGVuOyApIHsKICAgICAgICAgIGMgPSBidWZbaSsrXTsKICAgICAgICAgIGlmIChjIDwgMTI4KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY19sZW4gPSBfdXRmOGxlbltjXTsKICAgICAgICAgIGlmIChjX2xlbiA+IDQpIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNjU1MzM7CiAgICAgICAgICAgIGkgKz0gY19sZW4gLSAxOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGMgJj0gY19sZW4gPT09IDIgPyAzMSA6IGNfbGVuID09PSAzID8gMTUgOiA3OwogICAgICAgICAgd2hpbGUgKGNfbGVuID4gMSAmJiBpIDwgbGVuKSB7CiAgICAgICAgICAgIGMgPSBjIDw8IDYgfCBidWZbaSsrXSAmIDYzOwogICAgICAgICAgICBjX2xlbi0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNfbGVuID4gMSkgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA2NTUzMzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDY1NTM2KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjIC09IDY1NTM2OwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NTI5NiB8IGMgPj4gMTAgJiAxMDIzOwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NjMyMCB8IGMgJiAxMDIzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTsKICAgICAgfTsKICAgICAgZXhwb3J0cy51dGY4Ym9yZGVyID0gZnVuY3Rpb24oYnVmLCBtYXgpIHsKICAgICAgICB2YXIgcG9zOwogICAgICAgIG1heCA9IG1heCB8fCBidWYubGVuZ3RoOwogICAgICAgIGlmIChtYXggPiBidWYubGVuZ3RoKSB7CiAgICAgICAgICBtYXggPSBidWYubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBwb3MgPSBtYXggLSAxOwogICAgICAgIHdoaWxlIChwb3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgIHBvcy0tOwogICAgICAgIH0KICAgICAgICBpZiAocG9zIDwgMCkgewogICAgICAgICAgcmV0dXJuIG1heDsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcyA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG1heDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvcyArIF91dGY4bGVuW2J1Zltwb3NdXSA+IG1heCA/IHBvcyA6IG1heDsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3pzdHJlYW0uanMKICB2YXIgcmVxdWlyZV96c3RyZWFtID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3pzdHJlYW0uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZnVuY3Rpb24gWlN0cmVhbSgpIHsKICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfaW4gPSAwOwogICAgICAgIHRoaXMuYXZhaWxfaW4gPSAwOwogICAgICAgIHRoaXMudG90YWxfaW4gPSAwOwogICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfb3V0ID0gMDsKICAgICAgICB0aGlzLmF2YWlsX291dCA9IDA7CiAgICAgICAgdGhpcy50b3RhbF9vdXQgPSAwOwogICAgICAgIHRoaXMubXNnID0gIiI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5kYXRhX3R5cGUgPSAyOwogICAgICAgIHRoaXMuYWRsZXIgPSAwOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9kZWZsYXRlLmpzCiAgdmFyIHJlcXVpcmVfZGVmbGF0ZTIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL2RlZmxhdGUuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB6bGliX2RlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUoKTsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBzdHJpbmdzID0gcmVxdWlyZV9zdHJpbmdzKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgWlN0cmVhbSA9IHJlcXVpcmVfenN0cmVhbSgpOwogICAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICB2YXIgWl9OT19GTFVTSCA9IDA7CiAgICAgIHZhciBaX0ZJTklTSCA9IDQ7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX1NZTkNfRkxVU0gyID0gMjsKICAgICAgdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwogICAgICB2YXIgWl9ERUZBVUxUX1NUUkFURUdZID0gMDsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICBmdW5jdGlvbiBEZWZsYXRlKG9wdGlvbnMpIHsKICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpCiAgICAgICAgICByZXR1cm4gbmV3IERlZmxhdGUob3B0aW9ucyk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgICAgICAgIGxldmVsOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCiAgICAgICAgICBtZXRob2Q6IFpfREVGTEFURUQsCiAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgICAgICAgd2luZG93Qml0czogMTUsCiAgICAgICAgICBtZW1MZXZlbDogOCwKICAgICAgICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksCiAgICAgICAgICB0bzogIiIKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTsKICAgICAgICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwogICAgICAgIGlmIChvcHQucmF3ICYmIG9wdC53aW5kb3dCaXRzID4gMCkgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmIChvcHQuZ3ppcCAmJiBvcHQud2luZG93Qml0cyA+IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNikgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgKz0gMTY7CiAgICAgICAgfQogICAgICAgIHRoaXMuZXJyID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgICAgICAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLCBvcHQubGV2ZWwsIG9wdC5tZXRob2QsIG9wdC53aW5kb3dCaXRzLCBvcHQubWVtTGV2ZWwsIG9wdC5zdHJhdGVneSk7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdC5oZWFkZXIpIHsKICAgICAgICAgIHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSwgb3B0LmhlYWRlcik7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkgewogICAgICAgICAgdmFyIGRpY3Q7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBkaWN0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgICAgZGljdCA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3QpOwogICAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogICAgICAgIHZhciBzdHJtID0gdGhpcy5zdHJtOwogICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogICAgICAgIHZhciBzdGF0dXMsIF9tb2RlOwogICAgICAgIGlmICh0aGlzLmVuZGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9tb2RlID0gbW9kZSA9PT0gfn5tb2RlID8gbW9kZSA6IG1vZGUgPT09IHRydWUgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihkYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiA9IDA7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHN0cm0sIF9tb2RlKTsKICAgICAgICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBaX0ZJTklTSCB8fCBfbW9kZSA9PT0gWl9TWU5DX0ZMVVNIMikpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IFpfU1RSRUFNX0VORCk7CiAgICAgICAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkgewogICAgICAgICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBaX1NZTkNfRkxVU0gyKSB7CiAgICAgICAgICB0aGlzLm9uRW5kKFpfT0spOwogICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogICAgICAgIGlmIChzdGF0dXMgPT09IFpfT0spIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbigiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuZXJyID0gc3RhdHVzOwogICAgICAgIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpOwogICAgICAgIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwogICAgICAgIGlmIChkZWZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IGRlZmxhdG9yLm1zZyB8fCBtc2dbZGVmbGF0b3IuZXJyXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5yYXcgPSB0cnVlOwogICAgICAgIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBnemlwKGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5nemlwID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZXhwb3J0cy5EZWZsYXRlID0gRGVmbGF0ZTsKICAgICAgZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTsKICAgICAgZXhwb3J0cy5kZWZsYXRlUmF3ID0gZGVmbGF0ZVJhdzsKICAgICAgZXhwb3J0cy5nemlwID0gZ3ppcDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmZhc3QuanMKICB2YXIgcmVxdWlyZV9pbmZmYXN0ID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmZhc3QuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIEJBRCA9IDMwOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkgewogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICB2YXIgX2luOwogICAgICAgIHZhciBsYXN0OwogICAgICAgIHZhciBfb3V0OwogICAgICAgIHZhciBiZWc7CiAgICAgICAgdmFyIGVuZDsKICAgICAgICB2YXIgZG1heDsKICAgICAgICB2YXIgd3NpemU7CiAgICAgICAgdmFyIHdoYXZlOwogICAgICAgIHZhciB3bmV4dDsKICAgICAgICB2YXIgc193aW5kb3c7CiAgICAgICAgdmFyIGhvbGQ7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIGxjb2RlOwogICAgICAgIHZhciBkY29kZTsKICAgICAgICB2YXIgbG1hc2s7CiAgICAgICAgdmFyIGRtYXNrOwogICAgICAgIHZhciBoZXJlOwogICAgICAgIHZhciBvcDsKICAgICAgICB2YXIgbGVuOwogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBmcm9tOwogICAgICAgIHZhciBmcm9tX3NvdXJjZTsKICAgICAgICB2YXIgaW5wdXQsIG91dHB1dDsKICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgX2luID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBsYXN0ID0gX2luICsgKHN0cm0uYXZhaWxfaW4gLSA1KTsKICAgICAgICBfb3V0ID0gc3RybS5uZXh0X291dDsKICAgICAgICBvdXRwdXQgPSBzdHJtLm91dHB1dDsKICAgICAgICBiZWcgPSBfb3V0IC0gKHN0YXJ0IC0gc3RybS5hdmFpbF9vdXQpOwogICAgICAgIGVuZCA9IF9vdXQgKyAoc3RybS5hdmFpbF9vdXQgLSAyNTcpOwogICAgICAgIGRtYXggPSBzdGF0ZS5kbWF4OwogICAgICAgIHdzaXplID0gc3RhdGUud3NpemU7CiAgICAgICAgd2hhdmUgPSBzdGF0ZS53aGF2ZTsKICAgICAgICB3bmV4dCA9IHN0YXRlLnduZXh0OwogICAgICAgIHNfd2luZG93ID0gc3RhdGUud2luZG93OwogICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzOwogICAgICAgIGxjb2RlID0gc3RhdGUubGVuY29kZTsKICAgICAgICBkY29kZSA9IHN0YXRlLmRpc3Rjb2RlOwogICAgICAgIGxtYXNrID0gKDEgPDwgc3RhdGUubGVuYml0cykgLSAxOwogICAgICAgIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTsKICAgICAgICB0b3A6CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChiaXRzIDwgMTUpIHsKICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZXJlID0gbGNvZGVbaG9sZCAmIGxtYXNrXTsKICAgICAgICAgICAgZG9sZW46CiAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICBpZiAob3AgPT09IDApIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wICYgMTYpIHsKICAgICAgICAgICAgICAgICAgbGVuID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBvcCAmPSAxNTsKICAgICAgICAgICAgICAgICAgaWYgKG9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbGVuICs9IGhvbGQgJiAoMSA8PCBvcCkgLSAxOwogICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgMTUpIHsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoZXJlID0gZGNvZGVbaG9sZCAmIGRtYXNrXTsKICAgICAgICAgICAgICAgICAgZG9kaXN0OgogICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAyNDsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgICAgaWYgKG9wICYgMTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICAgICAgb3AgJj0gMTU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBkaXN0ICs9IGhvbGQgJiAoMSA8PCBvcCkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA+IGRtYXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICBvcCA9IF9vdXQgLSBiZWc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IGRpc3QgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPiB3aGF2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNhbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gc193aW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHduZXh0ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHduZXh0IDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBoZXJlID0gZGNvZGVbKGhlcmUgJiA2NTUzNSkgKyAoaG9sZCAmICgxIDw8IG9wKSAtIDEpXTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgZG9kaXN0OwogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgNjU1MzUpICsgKGhvbGQgJiAoMSA8PCBvcCkgLSAxKV07CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGRvbGVuOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCAmIDMyKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9IHdoaWxlIChfaW4gPCBsYXN0ICYmIF9vdXQgPCBlbmQpOwogICAgICAgIGxlbiA9IGJpdHMgPj4gMzsKICAgICAgICBfaW4gLT0gbGVuOwogICAgICAgIGJpdHMgLT0gbGVuIDw8IDM7CiAgICAgICAgaG9sZCAmPSAoMSA8PCBiaXRzKSAtIDE7CiAgICAgICAgc3RybS5uZXh0X2luID0gX2luOwogICAgICAgIHN0cm0ubmV4dF9vdXQgPSBfb3V0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBfaW4gPCBsYXN0ID8gNSArIChsYXN0IC0gX2luKSA6IDUgLSAoX2luIC0gbGFzdCk7CiAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBfb3V0IDwgZW5kID8gMjU3ICsgKGVuZCAtIF9vdXQpIDogMjU3IC0gKF9vdXQgLSBlbmQpOwogICAgICAgIHN0YXRlLmhvbGQgPSBob2xkOwogICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgIHJldHVybjsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzCiAgdmFyIHJlcXVpcmVfaW5mdHJlZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mdHJlZXMuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBNQVhCSVRTID0gMTU7CiAgICAgIHZhciBFTk9VR0hfTEVOUyA9IDg1MjsKICAgICAgdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKICAgICAgdmFyIENPREVTID0gMDsKICAgICAgdmFyIExFTlMgPSAxOwogICAgICB2YXIgRElTVFMgPSAyOwogICAgICB2YXIgbGJhc2UgPSBbCiAgICAgICAgMywKICAgICAgICA0LAogICAgICAgIDUsCiAgICAgICAgNiwKICAgICAgICA3LAogICAgICAgIDgsCiAgICAgICAgOSwKICAgICAgICAxMCwKICAgICAgICAxMSwKICAgICAgICAxMywKICAgICAgICAxNSwKICAgICAgICAxNywKICAgICAgICAxOSwKICAgICAgICAyMywKICAgICAgICAyNywKICAgICAgICAzMSwKICAgICAgICAzNSwKICAgICAgICA0MywKICAgICAgICA1MSwKICAgICAgICA1OSwKICAgICAgICA2NywKICAgICAgICA4MywKICAgICAgICA5OSwKICAgICAgICAxMTUsCiAgICAgICAgMTMxLAogICAgICAgIDE2MywKICAgICAgICAxOTUsCiAgICAgICAgMjI3LAogICAgICAgIDI1OCwKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGxleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMTYsCiAgICAgICAgNzIsCiAgICAgICAgNzgKICAgICAgXTsKICAgICAgdmFyIGRiYXNlID0gWwogICAgICAgIDEsCiAgICAgICAgMiwKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA3LAogICAgICAgIDksCiAgICAgICAgMTMsCiAgICAgICAgMTcsCiAgICAgICAgMjUsCiAgICAgICAgMzMsCiAgICAgICAgNDksCiAgICAgICAgNjUsCiAgICAgICAgOTcsCiAgICAgICAgMTI5LAogICAgICAgIDE5MywKICAgICAgICAyNTcsCiAgICAgICAgMzg1LAogICAgICAgIDUxMywKICAgICAgICA3NjksCiAgICAgICAgMTAyNSwKICAgICAgICAxNTM3LAogICAgICAgIDIwNDksCiAgICAgICAgMzA3MywKICAgICAgICA0MDk3LAogICAgICAgIDYxNDUsCiAgICAgICAgODE5MywKICAgICAgICAxMjI4OSwKICAgICAgICAxNjM4NSwKICAgICAgICAyNDU3NywKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGRleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjIsCiAgICAgICAgMjIsCiAgICAgICAgMjMsCiAgICAgICAgMjMsCiAgICAgICAgMjQsCiAgICAgICAgMjQsCiAgICAgICAgMjUsCiAgICAgICAgMjUsCiAgICAgICAgMjYsCiAgICAgICAgMjYsCiAgICAgICAgMjcsCiAgICAgICAgMjcsCiAgICAgICAgMjgsCiAgICAgICAgMjgsCiAgICAgICAgMjksCiAgICAgICAgMjksCiAgICAgICAgNjQsCiAgICAgICAgNjQKICAgICAgXTsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpIHsKICAgICAgICB2YXIgYml0cyA9IG9wdHMuYml0czsKICAgICAgICB2YXIgbGVuID0gMDsKICAgICAgICB2YXIgc3ltID0gMDsKICAgICAgICB2YXIgbWluID0gMCwgbWF4ID0gMDsKICAgICAgICB2YXIgcm9vdCA9IDA7CiAgICAgICAgdmFyIGN1cnIgPSAwOwogICAgICAgIHZhciBkcm9wID0gMDsKICAgICAgICB2YXIgbGVmdCA9IDA7CiAgICAgICAgdmFyIHVzZWQgPSAwOwogICAgICAgIHZhciBodWZmID0gMDsKICAgICAgICB2YXIgaW5jcjsKICAgICAgICB2YXIgZmlsbDsKICAgICAgICB2YXIgbG93OwogICAgICAgIHZhciBtYXNrOwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBiYXNlID0gbnVsbDsKICAgICAgICB2YXIgYmFzZV9pbmRleCA9IDA7CiAgICAgICAgdmFyIGVuZDsKICAgICAgICB2YXIgY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOwogICAgICAgIHZhciBvZmZzID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsKICAgICAgICB2YXIgZXh0cmEgPSBudWxsOwogICAgICAgIHZhciBleHRyYV9pbmRleCA9IDA7CiAgICAgICAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7CiAgICAgICAgZm9yIChsZW4gPSAwOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIGNvdW50W2xlbl0gPSAwOwogICAgICAgIH0KICAgICAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykgewogICAgICAgICAgY291bnRbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rKzsKICAgICAgICB9CiAgICAgICAgcm9vdCA9IGJpdHM7CiAgICAgICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHsKICAgICAgICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocm9vdCA+IG1heCkgewogICAgICAgICAgcm9vdCA9IG1heDsKICAgICAgICB9CiAgICAgICAgaWYgKG1heCA9PT0gMCkgewogICAgICAgICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgICAgb3B0cy5iaXRzID0gMTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBmb3IgKG1pbiA9IDE7IG1pbiA8IG1heDsgbWluKyspIHsKICAgICAgICAgIGlmIChjb3VudFttaW5dICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocm9vdCA8IG1pbikgewogICAgICAgICAgcm9vdCA9IG1pbjsKICAgICAgICB9CiAgICAgICAgbGVmdCA9IDE7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIGxlZnQgPDw9IDE7CiAgICAgICAgICBsZWZ0IC09IGNvdW50W2xlbl07CiAgICAgICAgICBpZiAobGVmdCA8IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgb2Zmc1sxXSA9IDA7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykgewogICAgICAgICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07CiAgICAgICAgfQogICAgICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICAgICAgICBpZiAobGVuc1tsZW5zX2luZGV4ICsgc3ltXSAhPT0gMCkgewogICAgICAgICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSBDT0RFUykgewogICAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsKICAgICAgICAgIGVuZCA9IDE5OwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykgewogICAgICAgICAgYmFzZSA9IGxiYXNlOwogICAgICAgICAgYmFzZV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBleHRyYSA9IGxleHQ7CiAgICAgICAgICBleHRyYV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBlbmQgPSAyNTY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJhc2UgPSBkYmFzZTsKICAgICAgICAgIGV4dHJhID0gZGV4dDsKICAgICAgICAgIGVuZCA9IC0xOwogICAgICAgIH0KICAgICAgICBodWZmID0gMDsKICAgICAgICBzeW0gPSAwOwogICAgICAgIGxlbiA9IG1pbjsKICAgICAgICBuZXh0ID0gdGFibGVfaW5kZXg7CiAgICAgICAgY3VyciA9IHJvb3Q7CiAgICAgICAgZHJvcCA9IDA7CiAgICAgICAgbG93ID0gLTE7CiAgICAgICAgdXNlZCA9IDEgPDwgcm9vdDsKICAgICAgICBtYXNrID0gdXNlZCAtIDE7CiAgICAgICAgaWYgKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TIHx8IHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpIHsKICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7CiAgICAgICAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAwOwogICAgICAgICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTsKICAgICAgICAgIH0gZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCArIHdvcmtbc3ltXV07CiAgICAgICAgICAgIGhlcmVfdmFsID0gYmFzZVtiYXNlX2luZGV4ICsgd29ya1tzeW1dXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAzMiArIDY0OwogICAgICAgICAgICBoZXJlX3ZhbCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSBkcm9wOwogICAgICAgICAgZmlsbCA9IDEgPDwgY3VycjsKICAgICAgICAgIG1pbiA9IGZpbGw7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGZpbGwgLT0gaW5jcjsKICAgICAgICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlX2JpdHMgPDwgMjQgfCBoZXJlX29wIDw8IDE2IHwgaGVyZV92YWwgfCAwOwogICAgICAgICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSAxOwogICAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7CiAgICAgICAgICAgIGluY3IgPj49IDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5jciAhPT0gMCkgewogICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwogICAgICAgICAgICBodWZmICs9IGluY3I7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBodWZmID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHN5bSsrOwogICAgICAgICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkgewogICAgICAgICAgICBpZiAobGVuID09PSBtYXgpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZW4gPSBsZW5zW2xlbnNfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxlbiA+IHJvb3QgJiYgKGh1ZmYgJiBtYXNrKSAhPT0gbG93KSB7CiAgICAgICAgICAgIGlmIChkcm9wID09PSAwKSB7CiAgICAgICAgICAgICAgZHJvcCA9IHJvb3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dCArPSBtaW47CiAgICAgICAgICAgIGN1cnIgPSBsZW4gLSBkcm9wOwogICAgICAgICAgICBsZWZ0ID0gMSA8PCBjdXJyOwogICAgICAgICAgICB3aGlsZSAoY3VyciArIGRyb3AgPCBtYXgpIHsKICAgICAgICAgICAgICBsZWZ0IC09IGNvdW50W2N1cnIgKyBkcm9wXTsKICAgICAgICAgICAgICBpZiAobGVmdCA8PSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY3VycisrOwogICAgICAgICAgICAgIGxlZnQgPDw9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXNlZCArPSAxIDw8IGN1cnI7CiAgICAgICAgICAgIGlmICh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUyB8fCB0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG93ID0gaHVmZiAmIG1hc2s7CiAgICAgICAgICAgIHRhYmxlW2xvd10gPSByb290IDw8IDI0IHwgY3VyciA8PCAxNiB8IG5leHQgLSB0YWJsZV9pbmRleCB8IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChodWZmICE9PSAwKSB7CiAgICAgICAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSBsZW4gLSBkcm9wIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgIH0KICAgICAgICBvcHRzLmJpdHMgPSByb290OwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMjIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBpbmZsYXRlX2Zhc3QgPSByZXF1aXJlX2luZmZhc3QoKTsKICAgICAgdmFyIGluZmxhdGVfdGFibGUgPSByZXF1aXJlX2luZnRyZWVzKCk7CiAgICAgIHZhciBDT0RFUyA9IDA7CiAgICAgIHZhciBMRU5TID0gMTsKICAgICAgdmFyIERJU1RTID0gMjsKICAgICAgdmFyIFpfRklOSVNIID0gNDsKICAgICAgdmFyIFpfQkxPQ0sgPSA1OwogICAgICB2YXIgWl9UUkVFUyA9IDY7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX05FRURfRElDVCA9IDI7CiAgICAgIHZhciBaX1NUUkVBTV9FUlJPUiA9IC0yOwogICAgICB2YXIgWl9EQVRBX0VSUk9SID0gLTM7CiAgICAgIHZhciBaX01FTV9FUlJPUiA9IC00OwogICAgICB2YXIgWl9CVUZfRVJST1IgPSAtNTsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICB2YXIgSEVBRCA9IDE7CiAgICAgIHZhciBGTEFHUyA9IDI7CiAgICAgIHZhciBUSU1FID0gMzsKICAgICAgdmFyIE9TID0gNDsKICAgICAgdmFyIEVYTEVOID0gNTsKICAgICAgdmFyIEVYVFJBID0gNjsKICAgICAgdmFyIE5BTUUgPSA3OwogICAgICB2YXIgQ09NTUVOVCA9IDg7CiAgICAgIHZhciBIQ1JDID0gOTsKICAgICAgdmFyIERJQ1RJRCA9IDEwOwogICAgICB2YXIgRElDVCA9IDExOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICB2YXIgVFlQRURPID0gMTM7CiAgICAgIHZhciBTVE9SRUQgPSAxNDsKICAgICAgdmFyIENPUFlfID0gMTU7CiAgICAgIHZhciBDT1BZID0gMTY7CiAgICAgIHZhciBUQUJMRSA9IDE3OwogICAgICB2YXIgTEVOTEVOUyA9IDE4OwogICAgICB2YXIgQ09ERUxFTlMgPSAxOTsKICAgICAgdmFyIExFTl8gPSAyMDsKICAgICAgdmFyIExFTiA9IDIxOwogICAgICB2YXIgTEVORVhUID0gMjI7CiAgICAgIHZhciBESVNUID0gMjM7CiAgICAgIHZhciBESVNURVhUID0gMjQ7CiAgICAgIHZhciBNQVRDSCA9IDI1OwogICAgICB2YXIgTElUID0gMjY7CiAgICAgIHZhciBDSEVDSyA9IDI3OwogICAgICB2YXIgTEVOR1RIID0gMjg7CiAgICAgIHZhciBET05FID0gMjk7CiAgICAgIHZhciBCQUQgPSAzMDsKICAgICAgdmFyIE1FTSA9IDMxOwogICAgICB2YXIgU1lOQyA9IDMyOwogICAgICB2YXIgRU5PVUdIX0xFTlMgPSA4NTI7CiAgICAgIHZhciBFTk9VR0hfRElTVFMgPSA1OTI7CiAgICAgIHZhciBNQVhfV0JJVFMgPSAxNTsKICAgICAgdmFyIERFRl9XQklUUyA9IE1BWF9XQklUUzsKICAgICAgZnVuY3Rpb24genN3YXAzMihxKSB7CiAgICAgICAgcmV0dXJuIChxID4+PiAyNCAmIDI1NSkgKyAocSA+Pj4gOCAmIDY1MjgwKSArICgocSAmIDY1MjgwKSA8PCA4KSArICgocSAmIDI1NSkgPDwgMjQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHsKICAgICAgICB0aGlzLm1vZGUgPSAwOwogICAgICAgIHRoaXMubGFzdCA9IGZhbHNlOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5oYXZlZGljdCA9IGZhbHNlOwogICAgICAgIHRoaXMuZmxhZ3MgPSAwOwogICAgICAgIHRoaXMuZG1heCA9IDA7CiAgICAgICAgdGhpcy5jaGVjayA9IDA7CiAgICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICAgICAgdGhpcy5oZWFkID0gbnVsbDsKICAgICAgICB0aGlzLndiaXRzID0gMDsKICAgICAgICB0aGlzLndzaXplID0gMDsKICAgICAgICB0aGlzLndoYXZlID0gMDsKICAgICAgICB0aGlzLnduZXh0ID0gMDsKICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICAgICAgdGhpcy5ob2xkID0gMDsKICAgICAgICB0aGlzLmJpdHMgPSAwOwogICAgICAgIHRoaXMubGVuZ3RoID0gMDsKICAgICAgICB0aGlzLm9mZnNldCA9IDA7CiAgICAgICAgdGhpcy5leHRyYSA9IDA7CiAgICAgICAgdGhpcy5sZW5jb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3Rjb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmxlbmJpdHMgPSAwOwogICAgICAgIHRoaXMuZGlzdGJpdHMgPSAwOwogICAgICAgIHRoaXMubmNvZGUgPSAwOwogICAgICAgIHRoaXMubmxlbiA9IDA7CiAgICAgICAgdGhpcy5uZGlzdCA9IDA7CiAgICAgICAgdGhpcy5oYXZlID0gMDsKICAgICAgICB0aGlzLm5leHQgPSBudWxsOwogICAgICAgIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOwogICAgICAgIHRoaXMud29yayA9IG5ldyB1dGlscy5CdWYxNigyODgpOwogICAgICAgIHRoaXMubGVuZHluID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3RkeW4gPSBudWxsOwogICAgICAgIHRoaXMuc2FuZSA9IDA7CiAgICAgICAgdGhpcy5iYWNrID0gMDsKICAgICAgICB0aGlzLndhcyA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gc3RhdGUudG90YWwgPSAwOwogICAgICAgIHN0cm0ubXNnID0gIiI7CiAgICAgICAgaWYgKHN0YXRlLndyYXApIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS53cmFwICYgMTsKICAgICAgICB9CiAgICAgICAgc3RhdGUubW9kZSA9IEhFQUQ7CiAgICAgICAgc3RhdGUubGFzdCA9IDA7CiAgICAgICAgc3RhdGUuaGF2ZWRpY3QgPSAwOwogICAgICAgIHN0YXRlLmRtYXggPSAzMjc2ODsKICAgICAgICBzdGF0ZS5oZWFkID0gbnVsbDsKICAgICAgICBzdGF0ZS5ob2xkID0gMDsKICAgICAgICBzdGF0ZS5iaXRzID0gMDsKICAgICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTsKICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0RJU1RTKTsKICAgICAgICBzdGF0ZS5zYW5lID0gMTsKICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBzdGF0ZS53c2l6ZSA9IDA7CiAgICAgICAgc3RhdGUud2hhdmUgPSAwOwogICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHsKICAgICAgICB2YXIgd3JhcDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgICAgICAgIHdyYXAgPSAwOwogICAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOwogICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkgewogICAgICAgICAgICB3aW5kb3dCaXRzICY9IDE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7CiAgICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdGF0ZS53cmFwID0gd3JhcDsKICAgICAgICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7CiAgICAgICAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgewogICAgICAgIHZhciByZXQ7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IG5ldyBJbmZsYXRlU3RhdGUoKTsKICAgICAgICBzdHJtLnN0YXRlID0gc3RhdGU7CiAgICAgICAgc3RhdGUud2luZG93ID0gbnVsbDsKICAgICAgICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOwogICAgICAgIGlmIChyZXQgIT09IFpfT0spIHsKICAgICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHsKICAgICAgICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7CiAgICAgIH0KICAgICAgdmFyIHZpcmdpbiA9IHRydWU7CiAgICAgIHZhciBsZW5maXg7CiAgICAgIHZhciBkaXN0Zml4OwogICAgICBmdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkgewogICAgICAgIGlmICh2aXJnaW4pIHsKICAgICAgICAgIHZhciBzeW07CiAgICAgICAgICBsZW5maXggPSBuZXcgdXRpbHMuQnVmMzIoNTEyKTsKICAgICAgICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAxNDQpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN5bSA8IDI1NikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gNzsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzeW0gPCAyODgpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA5IH0pOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAzMikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDU7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgZGlzdGZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA1IH0pOwogICAgICAgICAgdmlyZ2luID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7CiAgICAgICAgc3RhdGUubGVuYml0cyA9IDk7CiAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBkaXN0Zml4OwogICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53aW5kb3cgPT09IG51bGwpIHsKICAgICAgICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0czsKICAgICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICAgIHN0YXRlLndoYXZlID0gMDsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHN0YXRlLndzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHsKICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBzdGF0ZS53c2l6ZSwgc3RhdGUud3NpemUsIDApOwogICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7CiAgICAgICAgICBpZiAoZGlzdCA+IGNvcHkpIHsKICAgICAgICAgICAgZGlzdCA9IGNvcHk7CiAgICAgICAgICB9CiAgICAgICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgZGlzdCwgc3RhdGUud25leHQpOwogICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICAgaWYgKGNvcHkpIHsKICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIGNvcHksIGNvcHksIDApOwogICAgICAgICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7CiAgICAgICAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS53bmV4dCArPSBkaXN0OwogICAgICAgICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGF0ZS53aGF2ZSA8IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud2hhdmUgKz0gZGlzdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBpbnB1dCwgb3V0cHV0OwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBwdXQ7CiAgICAgICAgdmFyIGhhdmUsIGxlZnQ7CiAgICAgICAgdmFyIGhvbGQ7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIF9pbiwgX291dDsKICAgICAgICB2YXIgY29weTsKICAgICAgICB2YXIgZnJvbTsKICAgICAgICB2YXIgZnJvbV9zb3VyY2U7CiAgICAgICAgdmFyIGhlcmUgPSAwOwogICAgICAgIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOwogICAgICAgIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgaGJ1ZiA9IG5ldyB1dGlscy5CdWY4KDQpOwogICAgICAgIHZhciBvcHRzOwogICAgICAgIHZhciBuOwogICAgICAgIHZhciBvcmRlciA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgIXN0cm0ub3V0cHV0IHx8ICFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPOwogICAgICAgIH0KICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgIGxlZnQgPSBzdHJtLmF2YWlsX291dDsKICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBoYXZlID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICBfaW4gPSBoYXZlOwogICAgICAgIF9vdXQgPSBsZWZ0OwogICAgICAgIHJldCA9IFpfT0s7CiAgICAgICAgaW5mX2xlYXZlOgogICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUubW9kZSkgewogICAgICAgICAgICAgIGNhc2UgSEVBRDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud3JhcCAmIDIgJiYgaG9sZCA9PT0gMzU2MTUpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSAwOwogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTsKICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRkxBR1M7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MgPSAwOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIShzdGF0ZS53cmFwICYgMSkgfHwgKCgoaG9sZCAmIDI1NSkgPDwgOCkgKyAoaG9sZCA+PiA4KSkgJSAzMSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhvbGQgJiAxNSkgIT09IFpfREVGTEFURUQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA0OwogICAgICAgICAgICAgICAgYml0cyAtPSA0OwogICAgICAgICAgICAgICAgbGVuID0gKGhvbGQgJiAxNSkgKyA4OwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLndiaXRzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLndiaXRzID0gbGVuOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPiBzdGF0ZS53Yml0cykgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIHdpbmRvdyBzaXplIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5kbWF4ID0gMSA8PCBsZW47CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGhvbGQgJiA1MTIgPyBESUNUSUQgOiBUWVBFOwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgRkxBR1M6CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzID0gaG9sZDsKICAgICAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAyNTUpICE9PSBaX0RFRkxBVEVEKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1NzM0NCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQudGV4dCA9IGhvbGQgPj4gOCAmIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhidWZbMV0gPSBob2xkID4+PiA4ICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRJTUU7CiAgICAgICAgICAgICAgY2FzZSBUSU1FOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnRpbWUgPSBob2xkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsyXSA9IGhvbGQgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzNdID0gaG9sZCA+Pj4gMjQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIyKHN0YXRlLmNoZWNrLCBoYnVmLCA0LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gT1M7CiAgICAgICAgICAgICAgY2FzZSBPUzoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm9zID0gaG9sZCA+PiA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMjIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBFWExFTjsKICAgICAgICAgICAgICBjYXNlIEVYTEVOOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMTAyNCkgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkOwogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbGVuID0gaG9sZDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEVYVFJBOwogICAgICAgICAgICAgIGNhc2UgRVhUUkE6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAxMDI0KSB7CiAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBuZXcgQXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUuaGVhZC5leHRyYSwgaW5wdXQsIG5leHQsIGNvcHksIGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMjIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE5BTUU7CiAgICAgICAgICAgICAgY2FzZSBOQU1FOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMjA0OCkgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJiBzdGF0ZS5sZW5ndGggPCA2NTUzNikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT01NRU5UOwogICAgICAgICAgICAgIGNhc2UgQ09NTUVOVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDQwOTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29weSA9IDA7CiAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiYgc3RhdGUubGVuZ3RoIDwgNjU1MzYpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpOwogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDOwogICAgICAgICAgICAgIGNhc2UgSENSQzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaG9sZCAhPT0gKHN0YXRlLmNoZWNrICYgNjU1MzUpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaGVhZGVyIGNyYyBtaXNtYXRjaCI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmhjcmMgPSBzdGF0ZS5mbGFncyA+PiA5ICYgMTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgRElDVElEOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSB6c3dhcDMyKGhvbGQpOwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESUNUOwogICAgICAgICAgICAgIGNhc2UgRElDVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogICAgICAgICAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICAgICAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgICAgICAgICAgIHJldHVybiBaX05FRURfRElDVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDE7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICBjYXNlIFRZUEU6CiAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfQkxPQ0sgfHwgZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgVFlQRURPOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxhc3QpIHsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxhc3QgPSBob2xkICYgMTsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAxOwogICAgICAgICAgICAgICAgYml0cyAtPSAxOwogICAgICAgICAgICAgICAgc3dpdGNoIChob2xkICYgMykgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFNUT1JFRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUQUJMRTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYmxvY2sgdHlwZSI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBTVE9SRUQ6CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7CiAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhvbGQgJiA2NTUzNSkgIT09IChob2xkID4+PiAxNiBeIDY1NTM1KSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgNjU1MzU7CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFlfOwogICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIENPUFlfOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFk7CiAgICAgICAgICAgICAgY2FzZSBDT1BZOgogICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBsZWZ0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KG91dHB1dCwgaW5wdXQsIG5leHQsIGNvcHksIHB1dCk7CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIHB1dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgVEFCTEU6CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE0KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDMxKSArIDI1NzsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA1OwogICAgICAgICAgICAgICAgYml0cyAtPSA1OwogICAgICAgICAgICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDMxKSArIDE7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNTsKICAgICAgICAgICAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAxNSkgKyA0OwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgICAgICAgICAgICBiaXRzIC09IDQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5MRU5TOwogICAgICAgICAgICAgIGNhc2UgTEVOTEVOUzoKICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmNvZGUpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gaG9sZCAmIDc7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAzOwogICAgICAgICAgICAgICAgICBiaXRzIC09IDM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5bjsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUubGVucywgMCwgMTksIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICAgICAgICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT0RFTEVOUzsKICAgICAgICAgICAgICBjYXNlIENPREVMRU5TOgogICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhlcmVfdmFsIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX3ZhbCA9PT0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAyOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdOwogICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDMpOwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZXJlX3ZhbCA9PT0gMTcpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgNyk7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gMzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDc7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAxMSArIChob2xkICYgMTI3KTsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA3OwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSArIGNvcHkgPiBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29weS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBsZW47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gQkFEKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA5OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2OwogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluOwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUuZGlzdGJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIHN0YXRlLm5sZW4sIHN0YXRlLm5kaXN0LCBzdGF0ZS5kaXN0Y29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAgICAgICAgICAgICBzdGF0ZS5kaXN0Yml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZXMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSBMRU5fOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTjsKICAgICAgICAgICAgICBjYXNlIExFTjoKICAgICAgICAgICAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgICAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7CiAgICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgICAgICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgICAgICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICAgICAgICAgICAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgICAgICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gMDsKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKDEgPDwgc3RhdGUubGVuYml0cykgLSAxXTsKICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYmIChoZXJlX29wICYgMjQwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgICAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgIGlmIChoZXJlX29wID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGhlcmVfb3AgJiAzMikgewogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYgNjQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5FWFQ7CiAgICAgICAgICAgICAgY2FzZSBMRU5FWFQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKDEgPDwgc3RhdGUuZXh0cmEpIC0gMTsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUud2FzID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERJU1Q7CiAgICAgICAgICAgICAgY2FzZSBESVNUOgogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICBoZXJlX29wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhlcmVfb3AgJiAyNDApID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7CiAgICAgICAgICAgICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESVNURVhUOwogICAgICAgICAgICAgIGNhc2UgRElTVEVYVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5leHRyYSkgewogICAgICAgICAgICAgICAgICBuID0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ICs9IGhvbGQgJiAoMSA8PCBzdGF0ZS5leHRyYSkgLSAxOwogICAgICAgICAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gc3RhdGUuZG1heCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1BVENIOwogICAgICAgICAgICAgIGNhc2UgTUFUQ0g6CiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3B5ID0gX291dCAtIGxlZnQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53aGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLnduZXh0OwogICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBzdGF0ZS53aW5kb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDsKICAgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIExJVDoKICAgICAgICAgICAgICAgIGlmIChsZWZ0ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG91dHB1dFtwdXQrK10gPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBsZWZ0LS07CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBDSEVDSzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCB8PSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9vdXQgLT0gbGVmdDsKICAgICAgICAgICAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICAgICAgICAgICAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICAgICAgICAgICAgaWYgKF9vdXQpIHsKICAgICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgPyBob2xkIDogenN3YXAzMihob2xkKSkgIT09IHN0YXRlLmNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDsKICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiA0Mjk0OTY3Mjk1KSkgewogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImluY29ycmVjdCBsZW5ndGggY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERPTkU7CiAgICAgICAgICAgICAgY2FzZSBET05FOgogICAgICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgQkFEOgogICAgICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgTUVNOgogICAgICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgICAgIGNhc2UgU1lOQzoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICBpZiAoc3RhdGUud3NpemUgfHwgX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJiAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCkpIHsKICAgICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQsIF9vdXQgLSBzdHJtLmF2YWlsX291dCkpIHsKICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1FTTsKICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfaW4gLT0gc3RybS5hdmFpbF9pbjsKICAgICAgICBfb3V0IC09IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIHN0cm0udG90YWxfaW4gKz0gX2luOwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICBpZiAoc3RhdGUud3JhcCAmJiBfb3V0KSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkgOiBhZGxlcjMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KTsKICAgICAgICB9CiAgICAgICAgc3RybS5kYXRhX3R5cGUgPSBzdGF0ZS5iaXRzICsgKHN0YXRlLmxhc3QgPyA2NCA6IDApICsgKHN0YXRlLm1vZGUgPT09IFRZUEUgPyAxMjggOiAwKSArIChzdGF0ZS5tb2RlID09PSBMRU5fIHx8IHN0YXRlLm1vZGUgPT09IENPUFlfID8gMjU2IDogMCk7CiAgICAgICAgaWYgKChfaW4gPT09IDAgJiYgX291dCA9PT0gMCB8fCBmbHVzaCA9PT0gWl9GSU5JU0gpICYmIHJldCA9PT0gWl9PSykgewogICAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZUVuZChzdHJtKSB7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLndpbmRvdykgewogICAgICAgICAgc3RhdGUud2luZG93ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc3RybS5zdGF0ZSA9IG51bGw7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZUdldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKChzdGF0ZS53cmFwICYgMikgPT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUuaGVhZCA9IGhlYWQ7CiAgICAgICAgaGVhZC5kb25lID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkgewogICAgICAgIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBkaWN0aWQ7CiAgICAgICAgdmFyIHJldDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53cmFwICE9PSAwICYmIHN0YXRlLm1vZGUgIT09IERJQ1QpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IERJQ1QpIHsKICAgICAgICAgIGRpY3RpZCA9IDE7CiAgICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7CiAgICAgICAgICBpZiAoZGljdGlkICE9PSBzdGF0ZS5jaGVjaykgewogICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgZGljdExlbmd0aCk7CiAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgc3RhdGUubW9kZSA9IE1FTTsKICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUuaGF2ZWRpY3QgPSAxOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGV4cG9ydHMuaW5mbGF0ZVJlc2V0ID0gaW5mbGF0ZVJlc2V0OwogICAgICBleHBvcnRzLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyOwogICAgICBleHBvcnRzLmluZmxhdGVSZXNldEtlZXAgPSBpbmZsYXRlUmVzZXRLZWVwOwogICAgICBleHBvcnRzLmluZmxhdGVJbml0ID0gaW5mbGF0ZUluaXQ7CiAgICAgIGV4cG9ydHMuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyOwogICAgICBleHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlOwogICAgICBleHBvcnRzLmluZmxhdGVFbmQgPSBpbmZsYXRlRW5kOwogICAgICBleHBvcnRzLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyOwogICAgICBleHBvcnRzLmluZmxhdGVTZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZVNldERpY3Rpb25hcnk7CiAgICAgIGV4cG9ydHMuaW5mbGF0ZUluZm8gPSAicGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMKICB2YXIgcmVxdWlyZV9jb25zdGFudHMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY29uc3RhbnRzLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIG1vZHVsZS5leHBvcnRzID0gewogICAgICAgIFpfTk9fRkxVU0g6IDAsCiAgICAgICAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogICAgICAgIFpfU1lOQ19GTFVTSDogMiwKICAgICAgICBaX0ZVTExfRkxVU0g6IDMsCiAgICAgICAgWl9GSU5JU0g6IDQsCiAgICAgICAgWl9CTE9DSzogNSwKICAgICAgICBaX1RSRUVTOiA2LAogICAgICAgIFpfT0s6IDAsCiAgICAgICAgWl9TVFJFQU1fRU5EOiAxLAogICAgICAgIFpfTkVFRF9ESUNUOiAyLAogICAgICAgIFpfRVJSTk86IC0xLAogICAgICAgIFpfU1RSRUFNX0VSUk9SOiAtMiwKICAgICAgICBaX0RBVEFfRVJST1I6IC0zLAogICAgICAgIFpfQlVGX0VSUk9SOiAtNSwKICAgICAgICBaX05PX0NPTVBSRVNTSU9OOiAwLAogICAgICAgIFpfQkVTVF9TUEVFRDogMSwKICAgICAgICBaX0JFU1RfQ09NUFJFU1NJT046IDksCiAgICAgICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSwKICAgICAgICBaX0ZJTFRFUkVEOiAxLAogICAgICAgIFpfSFVGRk1BTl9PTkxZOiAyLAogICAgICAgIFpfUkxFOiAzLAogICAgICAgIFpfRklYRUQ6IDQsCiAgICAgICAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogICAgICAgIFpfQklOQVJZOiAwLAogICAgICAgIFpfVEVYVDogMSwKICAgICAgICBaX1VOS05PV046IDIsCiAgICAgICAgWl9ERUZMQVRFRDogOAogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvZ3poZWFkZXIuanMKICB2YXIgcmVxdWlyZV9nemhlYWRlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9nemhlYWRlci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBHWmhlYWRlcigpIHsKICAgICAgICB0aGlzLnRleHQgPSAwOwogICAgICAgIHRoaXMudGltZSA9IDA7CiAgICAgICAgdGhpcy54ZmxhZ3MgPSAwOwogICAgICAgIHRoaXMub3MgPSAwOwogICAgICAgIHRoaXMuZXh0cmEgPSBudWxsOwogICAgICAgIHRoaXMuZXh0cmFfbGVuID0gMDsKICAgICAgICB0aGlzLm5hbWUgPSAiIjsKICAgICAgICB0aGlzLmNvbW1lbnQgPSAiIjsKICAgICAgICB0aGlzLmhjcmMgPSAwOwogICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gR1poZWFkZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9pbmZsYXRlLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgemxpYl9pbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlKCk7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgc3RyaW5ncyA9IHJlcXVpcmVfc3RyaW5ncygpOwogICAgICB2YXIgYyA9IHJlcXVpcmVfY29uc3RhbnRzKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgWlN0cmVhbSA9IHJlcXVpcmVfenN0cmVhbSgpOwogICAgICB2YXIgR1poZWFkZXIgPSByZXF1aXJlX2d6aGVhZGVyKCk7CiAgICAgIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICAgIGZ1bmN0aW9uIEluZmxhdGUyKG9wdGlvbnMpIHsKICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZTIpKQogICAgICAgICAgcmV0dXJuIG5ldyBJbmZsYXRlMihvcHRpb25zKTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB1dGlscy5hc3NpZ24oewogICAgICAgICAgY2h1bmtTaXplOiAxNjM4NCwKICAgICAgICAgIHdpbmRvd0JpdHM6IDAsCiAgICAgICAgICB0bzogIiIKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTsKICAgICAgICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwogICAgICAgIGlmIChvcHQucmF3ICYmIG9wdC53aW5kb3dCaXRzID49IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNikgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICAgICAgICBpZiAob3B0LndpbmRvd0JpdHMgPT09IDApIHsKICAgICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtMTU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvcHQud2luZG93Qml0cyA+PSAwICYmIG9wdC53aW5kb3dCaXRzIDwgMTYgJiYgIShvcHRpb25zICYmIG9wdGlvbnMud2luZG93Qml0cykpIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzICs9IDMyOwogICAgICAgIH0KICAgICAgICBpZiAob3B0LndpbmRvd0JpdHMgPiAxNSAmJiBvcHQud2luZG93Qml0cyA8IDQ4KSB7CiAgICAgICAgICBpZiAoKG9wdC53aW5kb3dCaXRzICYgMTUpID09PSAwKSB7CiAgICAgICAgICAgIG9wdC53aW5kb3dCaXRzIHw9IDE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmVyciA9IDA7CiAgICAgICAgdGhpcy5tc2cgPSAiIjsKICAgICAgICB0aGlzLmVuZGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLnN0cm0gPSBuZXcgWlN0cmVhbSgpOwogICAgICAgIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgIHZhciBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSwgb3B0LndpbmRvd0JpdHMpOwogICAgICAgIGlmIChzdGF0dXMgIT09IGMuWl9PSykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oZWFkZXIgPSBuZXcgR1poZWFkZXIoKTsKICAgICAgICB6bGliX2luZmxhdGUuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sIHRoaXMuaGVhZGVyKTsKICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygb3B0LmRpY3Rpb25hcnkgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIG9wdC5kaWN0aW9uYXJ5ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgICAgb3B0LmRpY3Rpb25hcnkgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3B0LnJhdykgewogICAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICAgIGlmIChzdGF0dXMgIT09IGMuWl9PSykgewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgSW5mbGF0ZTIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBtb2RlKSB7CiAgICAgICAgdmFyIHN0cm0gPSB0aGlzLnN0cm07CiAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemU7CiAgICAgICAgdmFyIGRpY3Rpb25hcnkgPSB0aGlzLm9wdGlvbnMuZGljdGlvbmFyeTsKICAgICAgICB2YXIgc3RhdHVzLCBfbW9kZTsKICAgICAgICB2YXIgbmV4dF9vdXRfdXRmOCwgdGFpbCwgdXRmOHN0cjsKICAgICAgICB2YXIgYWxsb3dCdWZFcnJvciA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLmVuZGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9tb2RlID0gbW9kZSA9PT0gfn5tb2RlID8gbW9kZSA6IG1vZGUgPT09IHRydWUgPyBjLlpfRklOSVNIIDogYy5aX05PX0ZMVVNIOwogICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLmJpbnN0cmluZzJidWYoZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKGRhdGEpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBkYXRhOwogICAgICAgIH0KICAgICAgICBzdHJtLm5leHRfaW4gPSAwOwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpOwogICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gMDsKICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZShzdHJtLCBjLlpfTk9fRkxVU0gpOwogICAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX05FRURfRElDVCAmJiBkaWN0aW9uYXJ5KSB7CiAgICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3Rpb25hcnkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX0JVRl9FUlJPUiAmJiBhbGxvd0J1ZkVycm9yID09PSB0cnVlKSB7CiAgICAgICAgICAgIHN0YXR1cyA9IGMuWl9PSzsKICAgICAgICAgICAgYWxsb3dCdWZFcnJvciA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXR1cyAhPT0gYy5aX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBjLlpfT0spIHsKICAgICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0ubmV4dF9vdXQpIHsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQgfHwgc3RybS5hdmFpbF9pbiA9PT0gMCAmJiAoX21vZGUgPT09IGMuWl9GSU5JU0ggfHwgX21vZGUgPT09IGMuWl9TWU5DX0ZMVVNIKSkgewogICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICBuZXh0X291dF91dGY4ID0gc3RyaW5ncy51dGY4Ym9yZGVyKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KTsKICAgICAgICAgICAgICAgIHRhaWwgPSBzdHJtLm5leHRfb3V0IC0gbmV4dF9vdXRfdXRmODsKICAgICAgICAgICAgICAgIHV0ZjhzdHIgPSBzdHJpbmdzLmJ1ZjJzdHJpbmcoc3RybS5vdXRwdXQsIG5leHRfb3V0X3V0ZjgpOwogICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHRhaWw7CiAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZSAtIHRhaWw7CiAgICAgICAgICAgICAgICBpZiAodGFpbCkgewogICAgICAgICAgICAgICAgICB1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCwgc3RybS5vdXRwdXQsIG5leHRfb3V0X3V0ZjgsIHRhaWwsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5vbkRhdGEodXRmOHN0cik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgYWxsb3dCdWZFcnJvciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IGMuWl9TVFJFQU1fRU5EKTsKICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfU1RSRUFNX0VORCkgewogICAgICAgICAgX21vZGUgPSBjLlpfRklOSVNIOwogICAgICAgIH0KICAgICAgICBpZiAoX21vZGUgPT09IGMuWl9GSU5JU0gpIHsKICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlRW5kKHRoaXMuc3RybSk7CiAgICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBzdGF0dXMgPT09IGMuWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBjLlpfU1lOQ19GTFVTSCkgewogICAgICAgICAgdGhpcy5vbkVuZChjLlpfT0spOwogICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICBJbmZsYXRlMi5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmspIHsKICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTsKICAgICAgfTsKICAgICAgSW5mbGF0ZTIucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24oc3RhdHVzKSB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX09LKSB7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oIiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLmVyciA9IHN0YXR1czsKICAgICAgICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGluZmxhdGUoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaW5mbGF0b3IgPSBuZXcgSW5mbGF0ZTIob3B0aW9ucyk7CiAgICAgICAgaW5mbGF0b3IucHVzaChpbnB1dCwgdHJ1ZSk7CiAgICAgICAgaWYgKGluZmxhdG9yLmVycikgewogICAgICAgICAgdGhyb3cgaW5mbGF0b3IubXNnIHx8IG1zZ1tpbmZsYXRvci5lcnJdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaW5mbGF0b3IucmVzdWx0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVSYXcoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLnJhdyA9IHRydWU7CiAgICAgICAgcmV0dXJuIGluZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGV4cG9ydHMuSW5mbGF0ZSA9IEluZmxhdGUyOwogICAgICBleHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlOwogICAgICBleHBvcnRzLmluZmxhdGVSYXcgPSBpbmZsYXRlUmF3OwogICAgICBleHBvcnRzLnVuZ3ppcCA9IGluZmxhdGU7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9pbmRleC5qcwogIHZhciByZXF1aXJlX3Bha28gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIGFzc2lnbiA9IHJlcXVpcmVfY29tbW9uMigpLmFzc2lnbjsKICAgICAgdmFyIGRlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUyKCk7CiAgICAgIHZhciBpbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlMigpOwogICAgICB2YXIgY29uc3RhbnRzID0gcmVxdWlyZV9jb25zdGFudHMoKTsKICAgICAgdmFyIHBha28gPSB7fTsKICAgICAgYXNzaWduKHBha28sIGRlZmxhdGUsIGluZmxhdGUsIGNvbnN0YW50cyk7CiAgICAgIG1vZHVsZS5leHBvcnRzID0gcGFrbzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlci1jcmMzMkAwLjIuMTMvbm9kZV9tb2R1bGVzL2J1ZmZlci1jcmMzMi9pbmRleC5qcwogIHZhciByZXF1aXJlX2J1ZmZlcl9jcmMzMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXItY3JjMzJAMC4yLjEzL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgIHZhciBCdWZmZXI4ID0gcmVxdWlyZV9idWZmZXIoKS5CdWZmZXI7CiAgICAgIHZhciBDUkNfVEFCTEUgPSBbCiAgICAgICAgMCwKICAgICAgICAxOTk2OTU5ODk0LAogICAgICAgIDM5OTM5MTk3ODgsCiAgICAgICAgMjU2NzUyNDc5NCwKICAgICAgICAxMjQ2MzQxMzcsCiAgICAgICAgMTg4NjA1NzYxNSwKICAgICAgICAzOTE1NjIxNjg1LAogICAgICAgIDI2NTczOTIwMzUsCiAgICAgICAgMjQ5MjY4Mjc0LAogICAgICAgIDIwNDQ1MDgzMjQsCiAgICAgICAgMzc3MjExNTIzMCwKICAgICAgICAyNTQ3MTc3ODY0LAogICAgICAgIDE2Mjk0MTk5NSwKICAgICAgICAyMTI1NTYxMDIxLAogICAgICAgIDM4ODc2MDcwNDcsCiAgICAgICAgMjQyODQ0NDA0OSwKICAgICAgICA0OTg1MzY1NDgsCiAgICAgICAgMTc4OTkyNzY2NiwKICAgICAgICA0MDg5MDE2NjQ4LAogICAgICAgIDIyMjcwNjEyMTQsCiAgICAgICAgNDUwNTQ4ODYxLAogICAgICAgIDE4NDMyNTg2MDMsCiAgICAgICAgNDEwNzU4MDc1MywKICAgICAgICAyMjExNjc3NjM5LAogICAgICAgIDMyNTg4Mzk5MCwKICAgICAgICAxNjg0Nzc3MTUyLAogICAgICAgIDQyNTExMjIwNDIsCiAgICAgICAgMjMyMTkyNjYzNiwKICAgICAgICAzMzU2MzM0ODcsCiAgICAgICAgMTY2MTM2NTQ2NSwKICAgICAgICA0MTk1MzAyNzU1LAogICAgICAgIDIzNjYxMTUzMTcsCiAgICAgICAgOTk3MDczMDk2LAogICAgICAgIDEyODE5NTM4ODYsCiAgICAgICAgMzU3OTg1NTMzMiwKICAgICAgICAyNzI0Njg4MjQyLAogICAgICAgIDEwMDY4ODgxNDUsCiAgICAgICAgMTI1ODYwNzY4NywKICAgICAgICAzNTI0MTAxNjI5LAogICAgICAgIDI3Njg5NDI0NDMsCiAgICAgICAgOTAxMDk3NzIyLAogICAgICAgIDExMTkwMDA2ODQsCiAgICAgICAgMzY4NjUxNzIwNiwKICAgICAgICAyODk4MDY1NzI4LAogICAgICAgIDg1MzA0NDQ1MSwKICAgICAgICAxMTcyMjY2MTAxLAogICAgICAgIDM3MDUwMTU3NTksCiAgICAgICAgMjg4MjYxNjY2NSwKICAgICAgICA2NTE3Njc5ODAsCiAgICAgICAgMTM3MzUwMzU0NiwKICAgICAgICAzMzY5NTU0MzA0LAogICAgICAgIDMyMTgxMDQ1OTgsCiAgICAgICAgNTY1NTA3MjUzLAogICAgICAgIDE0NTQ2MjE3MzEsCiAgICAgICAgMzQ4NTExMTcwNSwKICAgICAgICAzMDk5NDM2MzAzLAogICAgICAgIDY3MTI2Njk3NCwKICAgICAgICAxNTk0MTk4MDI0LAogICAgICAgIDMzMjI3MzA5MzAsCiAgICAgICAgMjk3MDM0NzgxMiwKICAgICAgICA3OTU4MzU1MjcsCiAgICAgICAgMTQ4MzIzMDIyNSwKICAgICAgICAzMjQ0MzY3Mjc1LAogICAgICAgIDMwNjAxNDk1NjUsCiAgICAgICAgMTk5NDE0NjE5MiwKICAgICAgICAzMTE1ODUzNCwKICAgICAgICAyNTYzOTA3NzcyLAogICAgICAgIDQwMjM3MTc5MzAsCiAgICAgICAgMTkwNzQ1OTQ2NSwKICAgICAgICAxMTI2MzcyMTUsCiAgICAgICAgMjY4MDE1MzI1MywKICAgICAgICAzOTA0NDI3MDU5LAogICAgICAgIDIwMTM3NzYyOTAsCiAgICAgICAgMjUxNzIyMDM2LAogICAgICAgIDI1MTcyMTUzNzQsCiAgICAgICAgMzc3NTgzMDA0MCwKICAgICAgICAyMTM3NjU2NzYzLAogICAgICAgIDE0MTM3NjgxMywKICAgICAgICAyNDM5Mjc3NzE5LAogICAgICAgIDM4NjUyNzEyOTcsCiAgICAgICAgMTgwMjE5NTQ0NCwKICAgICAgICA0NzY4NjQ4NjYsCiAgICAgICAgMjIzODAwMTM2OCwKICAgICAgICA0MDY2NTA4ODc4LAogICAgICAgIDE4MTIzNzA5MjUsCiAgICAgICAgNDUzMDkyNzMxLAogICAgICAgIDIxODE2MjUwMjUsCiAgICAgICAgNDExMTQ1MTIyMywKICAgICAgICAxNzA2MDg4OTAyLAogICAgICAgIDMxNDA0MjcwNCwKICAgICAgICAyMzQ0NTMyMjAyLAogICAgICAgIDQyNDAwMTc1MzIsCiAgICAgICAgMTY1ODY1ODI3MSwKICAgICAgICAzNjY2MTk5NzcsCiAgICAgICAgMjM2MjY3MDMyMywKICAgICAgICA0MjI0OTk0NDA1LAogICAgICAgIDEzMDM1MzU5NjAsCiAgICAgICAgOTg0OTYxNDg2LAogICAgICAgIDI3NDcwMDcwOTIsCiAgICAgICAgMzU2OTAzNzUzOCwKICAgICAgICAxMjU2MTcwODE3LAogICAgICAgIDEwMzc2MDQzMTEsCiAgICAgICAgMjc2NTIxMDczMywKICAgICAgICAzNTU0MDc5OTk1LAogICAgICAgIDExMzEwMTQ1MDYsCiAgICAgICAgODc5Njc5OTk2LAogICAgICAgIDI5MDkyNDM0NjIsCiAgICAgICAgMzY2Mzc3MTg1NiwKICAgICAgICAxMTQxMTI0NDY3LAogICAgICAgIDg1NTg0MjI3NywKICAgICAgICAyODUyODAxNjMxLAogICAgICAgIDM3MDg2NDg2NDksCiAgICAgICAgMTM0MjUzMzk0OCwKICAgICAgICA2NTQ0NTkzMDYsCiAgICAgICAgMzE4ODM5NjA0OCwKICAgICAgICAzMzczMDE1MTc0LAogICAgICAgIDE0NjY0Nzk5MDksCiAgICAgICAgNTQ0MTc5NjM1LAogICAgICAgIDMxMTA1MjM5MTMsCiAgICAgICAgMzQ2MjUyMjAxNSwKICAgICAgICAxNTkxNjcxMDU0LAogICAgICAgIDcwMjEzODc3NiwKICAgICAgICAyOTY2NDYwNDUwLAogICAgICAgIDMzNTI3OTk0MTIsCiAgICAgICAgMTUwNDkxODgwNywKICAgICAgICA3ODM1NTE4NzMsCiAgICAgICAgMzA4MjY0MDQ0MywKICAgICAgICAzMjMzNDQyOTg5LAogICAgICAgIDM5ODgyOTIzODQsCiAgICAgICAgMjU5NjI1NDY0NiwKICAgICAgICA2MjMxNzA2OCwKICAgICAgICAxOTU3ODEwODQyLAogICAgICAgIDM5Mzk4NDU5NDUsCiAgICAgICAgMjY0NzgxNjExMSwKICAgICAgICA4MTQ3MDk5NywKICAgICAgICAxOTQzODAzNTIzLAogICAgICAgIDM4MTQ5MTg5MzAsCiAgICAgICAgMjQ4OTU5NjgwNCwKICAgICAgICAyMjUyNzQ0MzAsCiAgICAgICAgMjA1Mzc5MDM3NiwKICAgICAgICAzODI2MTc1NzU1LAogICAgICAgIDI0NjY5MDYwMTMsCiAgICAgICAgMTY3ODE2NzQzLAogICAgICAgIDIwOTc2NTEzNzcsCiAgICAgICAgNDAyNzU1MjU4MCwKICAgICAgICAyMjY1NDkwMzg2LAogICAgICAgIDUwMzQ0NDA3MiwKICAgICAgICAxNzYyMDUwODE0LAogICAgICAgIDQxNTA0MTcyNDUsCiAgICAgICAgMjE1NDEyOTM1NSwKICAgICAgICA0MjY1MjIyMjUsCiAgICAgICAgMTg1MjUwNzg3OSwKICAgICAgICA0Mjc1MzEzNTI2LAogICAgICAgIDIzMTIzMTc5MjAsCiAgICAgICAgMjgyNzUzNjI2LAogICAgICAgIDE3NDI1NTU4NTIsCiAgICAgICAgNDE4OTcwODE0MywKICAgICAgICAyMzk0ODc3OTQ1LAogICAgICAgIDM5NzkxNzc2MywKICAgICAgICAxNjIyMTgzNjM3LAogICAgICAgIDM2MDQzOTA4ODgsCiAgICAgICAgMjcxNDg2NjU1OCwKICAgICAgICA5NTM3Mjk3MzIsCiAgICAgICAgMTM0MDA3NjYyNiwKICAgICAgICAzNTE4NzE5OTg1LAogICAgICAgIDI3OTczNjA5OTksCiAgICAgICAgMTA2ODgyODM4MSwKICAgICAgICAxMjE5NjM4ODU5LAogICAgICAgIDM2MjQ3NDE4NTAsCiAgICAgICAgMjkzNjY3NTE0OCwKICAgICAgICA5MDYxODU0NjIsCiAgICAgICAgMTA5MDgxMjUxMiwKICAgICAgICAzNzQ3NjcyMDAzLAogICAgICAgIDI4MjUzNzk2NjksCiAgICAgICAgODI5MzI5MTM1LAogICAgICAgIDExODEzMzUxNjEsCiAgICAgICAgMzQxMjE3NzgwNCwKICAgICAgICAzMTYwODM0ODQyLAogICAgICAgIDYyODA4NTQwOCwKICAgICAgICAxMzgyNjA1MzY2LAogICAgICAgIDM0MjMzNjkxMDksCiAgICAgICAgMzEzODA3ODQ2NywKICAgICAgICA1NzA1NjIyMzMsCiAgICAgICAgMTQyNjQwMDgxNSwKICAgICAgICAzMzE3MzE2NTQyLAogICAgICAgIDI5OTg3MzM2MDgsCiAgICAgICAgNzMzMjM5OTU0LAogICAgICAgIDE1NTUyNjE5NTYsCiAgICAgICAgMzI2ODkzNTU5MSwKICAgICAgICAzMDUwMzYwNjI1LAogICAgICAgIDc1MjQ1OTQwMywKICAgICAgICAxNTQxMzIwMjIxLAogICAgICAgIDI2MDcwNzE5MjAsCiAgICAgICAgMzk2NTk3MzAzMCwKICAgICAgICAxOTY5OTIyOTcyLAogICAgICAgIDQwNzM1NDk4LAogICAgICAgIDI2MTc4MzcyMjUsCiAgICAgICAgMzk0MzU3NzE1MSwKICAgICAgICAxOTEzMDg3ODc3LAogICAgICAgIDgzOTA4MzcxLAogICAgICAgIDI1MTIzNDE2MzQsCiAgICAgICAgMzgwMzc0MDY5MiwKICAgICAgICAyMDc1MjA4NjIyLAogICAgICAgIDIxMzI2MTExMiwKICAgICAgICAyNDYzMjcyNjAzLAogICAgICAgIDM4NTU5OTAyODUsCiAgICAgICAgMjA5NDg1NDA3MSwKICAgICAgICAxOTg5NTg4ODEsCiAgICAgICAgMjI2MjAyOTAxMiwKICAgICAgICA0MDU3MjYwNjEwLAogICAgICAgIDE3NTkzNTk5OTIsCiAgICAgICAgNTM0NDE0MTkwLAogICAgICAgIDIxNzY3MTg1NDEsCiAgICAgICAgNDEzOTMyOTExNSwKICAgICAgICAxODczODM2MDAxLAogICAgICAgIDQxNDY2NDU2NywKICAgICAgICAyMjgyMjQ4OTM0LAogICAgICAgIDQyNzkyMDAzNjgsCiAgICAgICAgMTcxMTY4NDU1NCwKICAgICAgICAyODUyODExMTYsCiAgICAgICAgMjQwNTgwMTcyNywKICAgICAgICA0MTY3MjE2NzQ1LAogICAgICAgIDE2MzQ0Njc3OTUsCiAgICAgICAgMzc2MjI5NzAxLAogICAgICAgIDI2ODUwNjc4OTYsCiAgICAgICAgMzYwODAwNzQwNiwKICAgICAgICAxMzA4OTE4NjEyLAogICAgICAgIDk1NjU0MzkzOCwKICAgICAgICAyODA4NTU1MTA1LAogICAgICAgIDM0OTU5NTgyNjMsCiAgICAgICAgMTIzMTYzNjMwMSwKICAgICAgICAxMDQ3NDI3MDM1LAogICAgICAgIDI5MzI5NTk4MTgsCiAgICAgICAgMzY1NDcwMzgzNiwKICAgICAgICAxMDg4MzU5MjcwLAogICAgICAgIDkzNjkxOGUzLAogICAgICAgIDI4NDc3MTQ4OTksCiAgICAgICAgMzczNjgzNzgyOSwKICAgICAgICAxMjAyOTAwODYzLAogICAgICAgIDgxNzIzMzg5NywKICAgICAgICAzMTgzMzQyMTA4LAogICAgICAgIDM0MDEyMzcxMzAsCiAgICAgICAgMTQwNDI3NzU1MiwKICAgICAgICA2MTU4MTgxNTAsCiAgICAgICAgMzEzNDIwNzQ5MywKICAgICAgICAzNDUzNDIxMjAzLAogICAgICAgIDE0MjM4NTc0NDksCiAgICAgICAgNjAxNDUwNDMxLAogICAgICAgIDMwMDk4Mzc2MTQsCiAgICAgICAgMzI5NDcxMDQ1NiwKICAgICAgICAxNTY3MTAzNzQ2LAogICAgICAgIDcxMTkyODcyNCwKICAgICAgICAzMDIwNjY4NDcxLAogICAgICAgIDMyNzIzODAwNjUsCiAgICAgICAgMTUxMDMzNDIzNSwKICAgICAgICA3NTUxNjcxMTcKICAgICAgXTsKICAgICAgaWYgKHR5cGVvZiBJbnQzMkFycmF5ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIENSQ19UQUJMRSA9IG5ldyBJbnQzMkFycmF5KENSQ19UQUJMRSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZW5zdXJlQnVmZmVyKGlucHV0KSB7CiAgICAgICAgaWYgKEJ1ZmZlcjguaXNCdWZmZXIoaW5wdXQpKSB7CiAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgfQogICAgICAgIHZhciBoYXNOZXdCdWZmZXJBUEkgPSB0eXBlb2YgQnVmZmVyOC5hbGxvYyA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgQnVmZmVyOC5mcm9tID09PSAiZnVuY3Rpb24iOwogICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICByZXR1cm4gaGFzTmV3QnVmZmVyQVBJID8gQnVmZmVyOC5hbGxvYyhpbnB1dCkgOiBuZXcgQnVmZmVyOChpbnB1dCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gaGFzTmV3QnVmZmVyQVBJID8gQnVmZmVyOC5mcm9tKGlucHV0KSA6IG5ldyBCdWZmZXI4KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnB1dCBtdXN0IGJlIGJ1ZmZlciwgbnVtYmVyLCBvciBzdHJpbmcsIHJlY2VpdmVkICIgKyB0eXBlb2YgaW5wdXQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBidWZmZXJpemVJbnQobnVtKSB7CiAgICAgICAgdmFyIHRtcCA9IGVuc3VyZUJ1ZmZlcig0KTsKICAgICAgICB0bXAud3JpdGVJbnQzMkJFKG51bSwgMCk7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgfQogICAgICBmdW5jdGlvbiBfY3JjMzIoYnVmLCBwcmV2aW91cykgewogICAgICAgIGJ1ZiA9IGVuc3VyZUJ1ZmZlcihidWYpOwogICAgICAgIGlmIChCdWZmZXI4LmlzQnVmZmVyKHByZXZpb3VzKSkgewogICAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5yZWFkVUludDMyQkUoMCk7CiAgICAgICAgfQogICAgICAgIHZhciBjcmMgPSB+fnByZXZpb3VzIF4gLTE7CiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBidWYubGVuZ3RoOyBuKyspIHsKICAgICAgICAgIGNyYyA9IENSQ19UQUJMRVsoY3JjIF4gYnVmW25dKSAmIDI1NV0gXiBjcmMgPj4+IDg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjcmMgXiAtMTsKICAgICAgfQogICAgICBmdW5jdGlvbiBjcmMzMjIoKSB7CiAgICAgICAgcmV0dXJuIGJ1ZmZlcml6ZUludChfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7CiAgICAgIH0KICAgICAgY3JjMzIyLnNpZ25lZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgICAgfTsKICAgICAgY3JjMzIyLnVuc2lnbmVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpID4+PiAwOwogICAgICB9OwogICAgICBtb2R1bGUuZXhwb3J0cyA9IGNyYzMyMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL29iamVjdC5lbnRyaWVzLXBvbnlmaWxsQDEuMC4xL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy1wb255ZmlsbC9lbnRyaWVzLmpzCiAgdmFyIHJlcXVpcmVfZW50cmllcyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9vYmplY3QuZW50cmllcy1wb255ZmlsbEAxLjAuMS9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMtcG9ueWZpbGwvZW50cmllcy5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgaGFzID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwogICAgICB9OwogICAgICB2YXIgaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHByb3ApOwogICAgICB9OwogICAgICBmdW5jdGlvbiBlbnRyaWVzMihvYmopIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpOwogICAgICAgIH0KICAgICAgICB2YXIgcGFpcnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICBpZiAoaGFzKG9iaiwga2V5KSAmJiBpc0VudW1lcmFibGUob2JqLCBrZXkpKSB7CiAgICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgb2JqW2tleV1dKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhaXJzOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gZW50cmllczI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9vYmplY3QuZW50cmllcy1wb255ZmlsbEAxLjAuMS9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMtcG9ueWZpbGwvaW5kZXguanMKICB2YXIgcmVxdWlyZV9vYmplY3QgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vb2JqZWN0LmVudHJpZXMtcG9ueWZpbGxAMS4wLjEvbm9kZV9tb2R1bGVzL29iamVjdC5lbnRyaWVzLXBvbnlmaWxsL2luZGV4LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBPYmplY3QuZW50cmllcyA9PT0gImZ1bmN0aW9uIiA/IE9iamVjdC5lbnRyaWVzIDogcmVxdWlyZV9lbnRyaWVzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGxAMS43LjUvbm9kZV9tb2R1bGVzL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Nqcy1wb255ZmlsbC5qcwogIHZhciByZXF1aXJlX2Nqc19wb255ZmlsbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGxAMS43LjUvbm9kZV9tb2R1bGVzL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Nqcy1wb255ZmlsbC5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKQogICAgICAgICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgewogICAgICAgIGlmIChwcm90b1Byb3BzKQogICAgICAgICAgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgICAgICBpZiAoc3RhdGljUHJvcHMpCiAgICAgICAgICBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsKICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgICAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7CiAgICAgICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsICJwcm90b3R5cGUiLCB7CiAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgICBpZiAoc3VwZXJDbGFzcykKICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKICAgICAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mMihvMikgewogICAgICAgICAgcmV0dXJuIG8yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YobzIpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgewogICAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YyKG8yLCBwMikgewogICAgICAgICAgbzIuX19wcm90b19fID0gcDI7CiAgICAgICAgICByZXR1cm4gbzI7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkgewogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYyKSB7CiAgICAgICAgaWYgKHNlbGYyID09PSB2b2lkIDApIHsKICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmMjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmMiwgY2FsbCkgewogICAgICAgIGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpKSB7CiAgICAgICAgICByZXR1cm4gY2FsbDsKICAgICAgICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZjIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7CiAgICAgICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgewogICAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7CiAgICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgewogICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOwogICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7CiAgICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9nZXQoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSAidW5kZWZpbmVkIiAmJiBSZWZsZWN0LmdldCkgewogICAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0LmJpbmQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQyKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7CiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmICghYmFzZSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmIChkZXNjLmdldCkgewogICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9nZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfQogICAgICB2YXIgRW1pdHRlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBFbWl0dGVyMigpIHsKICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbWl0dGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImxpc3RlbmVycyIsIHsKICAgICAgICAgICAgdmFsdWU6IHt9LAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEVtaXR0ZXIyLCBbewogICAgICAgICAga2V5OiAiYWRkRXZlbnRMaXN0ZW5lciIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoISh0eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdID0gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0ucHVzaCh7CiAgICAgICAgICAgICAgY2FsbGJhY2ssCiAgICAgICAgICAgICAgb3B0aW9ucwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJyZW1vdmVFdmVudExpc3RlbmVyIiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgIGlmICghKHR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW3R5cGVdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIGlmIChzdGFja1tpXS5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJkaXNwYXRjaEV2ZW50IiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKGV2ZW50LnR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW2V2ZW50LnR5cGVdOwogICAgICAgICAgICB2YXIgc3RhY2tUb0NhbGwgPSBzdGFjay5zbGljZSgpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrVG9DYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHN0YWNrVG9DYWxsW2ldOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsaXN0ZW5lci5vcHRpb25zICYmIGxpc3RlbmVyLm9wdGlvbnMub25jZSkgewogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUsIGxpc3RlbmVyLmNhbGxiYWNrKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gRW1pdHRlcjI7CiAgICAgIH0oKTsKICAgICAgdmFyIEFib3J0U2lnbmFsID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKF9FbWl0dGVyKSB7CiAgICAgICAgX2luaGVyaXRzKEFib3J0U2lnbmFsMiwgX0VtaXR0ZXIpOwogICAgICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQWJvcnRTaWduYWwyKTsKICAgICAgICBmdW5jdGlvbiBBYm9ydFNpZ25hbDIoKSB7CiAgICAgICAgICB2YXIgX3RoaXM7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRTaWduYWwyKTsKICAgICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7CiAgICAgICAgICBpZiAoIV90aGlzLmxpc3RlbmVycykgewogICAgICAgICAgICBFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOwogICAgICAgICAgfQogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCAiYWJvcnRlZCIsIHsKICAgICAgICAgICAgdmFsdWU6IGZhbHNlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgIm9uYWJvcnQiLCB7CiAgICAgICAgICAgIHZhbHVlOiBudWxsLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgInJlYXNvbiIsIHsKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhBYm9ydFNpZ25hbDIsIFt7CiAgICAgICAgICBrZXk6ICJ0b1N0cmluZyIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiAiW29iamVjdCBBYm9ydFNpZ25hbF0iOwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGtleTogImRpc3BhdGNoRXZlbnQiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsKICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJhYm9ydCIpIHsKICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbmFib3J0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uYWJvcnQuY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9nZXQoX2dldFByb3RvdHlwZU9mKEFib3J0U2lnbmFsMi5wcm90b3R5cGUpLCAiZGlzcGF0Y2hFdmVudCIsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gQWJvcnRTaWduYWwyOwogICAgICB9KEVtaXR0ZXIpOwogICAgICB2YXIgQWJvcnRDb250cm9sbGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIEFib3J0Q29udHJvbGxlcjIoKSB7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRDb250cm9sbGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNpZ25hbCIsIHsKICAgICAgICAgICAgdmFsdWU6IG5ldyBBYm9ydFNpZ25hbCgpLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEFib3J0Q29udHJvbGxlcjIsIFt7CiAgICAgICAgICBrZXk6ICJhYm9ydCIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7CiAgICAgICAgICAgIHZhciBldmVudDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudCgiYWJvcnQiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7CiAgICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9ICJhYm9ydCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICAgICAgICAgICAgICBldmVudC5pbml0RXZlbnQoImFib3J0IiwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhYm9ydCIsCiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLAogICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNpZ25hbFJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgICAgaWYgKHNpZ25hbFJlYXNvbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbi5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRE9NRXhjZXB0aW9uKCJzaWduYWwgaXMgYWJvcnRlZCB3aXRob3V0IHJlYXNvbiIpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgICAgc2lnbmFsUmVhc29uLm5hbWUgPSAiQWJvcnRFcnJvciI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHNpZ25hbFJlYXNvbjsKICAgICAgICAgICAgdGhpcy5zaWduYWwuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAidG9TdHJpbmciLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gIltvYmplY3QgQWJvcnRDb250cm9sbGVyXSI7CiAgICAgICAgICB9CiAgICAgICAgfV0pOwogICAgICAgIHJldHVybiBBYm9ydENvbnRyb2xsZXIyOwogICAgICB9KCk7CiAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHsKICAgICAgICBBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiQWJvcnRDb250cm9sbGVyIjsKICAgICAgICBBYm9ydFNpZ25hbC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICJBYm9ydFNpZ25hbCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9seWZpbGxOZWVkZWQoc2VsZjIpIHsKICAgICAgICBpZiAoc2VsZjIuX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgY29uc29sZS5sb2coIl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEw9dHJ1ZSBpcyBzZXQsIHdpbGwgZm9yY2UgaW5zdGFsbCBwb2x5ZmlsbCIpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0eXBlb2Ygc2VsZjIuUmVxdWVzdCA9PT0gImZ1bmN0aW9uIiAmJiAhc2VsZjIuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpIHx8ICFzZWxmMi5BYm9ydENvbnRyb2xsZXI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWJvcnRhYmxlRmV0Y2hEZWNvcmF0b3IocGF0Y2hUYXJnZXRzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBwYXRjaFRhcmdldHMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBhdGNoVGFyZ2V0cyA9IHsKICAgICAgICAgICAgZmV0Y2g6IHBhdGNoVGFyZ2V0cwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIF9wYXRjaFRhcmdldHMgPSBwYXRjaFRhcmdldHMsIGZldGNoMiA9IF9wYXRjaFRhcmdldHMuZmV0Y2gsIF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMuUmVxdWVzdCwgTmF0aXZlUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9PT0gdm9pZCAwID8gZmV0Y2gyLlJlcXVlc3QgOiBfcGF0Y2hUYXJnZXRzJFJlcXVlc3QsIE5hdGl2ZUFib3J0Q29udHJvbGxlciA9IF9wYXRjaFRhcmdldHMuQWJvcnRDb250cm9sbGVyLCBfcGF0Y2hUYXJnZXRzJF9fRk9SQ0UgPSBfcGF0Y2hUYXJnZXRzLl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwsIF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwgPSBfcGF0Y2hUYXJnZXRzJF9fRk9SQ0UgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhdGNoVGFyZ2V0cyRfX0ZPUkNFOwogICAgICAgIGlmICghcG9seWZpbGxOZWVkZWQoewogICAgICAgICAgZmV0Y2g6IGZldGNoMiwKICAgICAgICAgIFJlcXVlc3Q6IE5hdGl2ZVJlcXVlc3QsCiAgICAgICAgICBBYm9ydENvbnRyb2xsZXI6IE5hdGl2ZUFib3J0Q29udHJvbGxlciwKICAgICAgICAgIF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwKICAgICAgICB9KSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZmV0Y2g6IGZldGNoMiwKICAgICAgICAgICAgUmVxdWVzdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIFJlcXVlc3QgPSBOYXRpdmVSZXF1ZXN0OwogICAgICAgIGlmIChSZXF1ZXN0ICYmICFSZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic2lnbmFsIikgfHwgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgUmVxdWVzdCA9IGZ1bmN0aW9uIFJlcXVlc3QyKGlucHV0LCBpbml0MikgewogICAgICAgICAgICB2YXIgc2lnbmFsOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgc2lnbmFsID0gaW5pdDIuc2lnbmFsOwogICAgICAgICAgICAgIGRlbGV0ZSBpbml0Mi5zaWduYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgaW5pdDIpOwogICAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVlc3QsICJzaWduYWwiLCB7CiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIHZhbHVlOiBzaWduYWwKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgICAgIH07CiAgICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QucHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICB2YXIgcmVhbEZldGNoID0gZmV0Y2gyOwogICAgICAgIHZhciBhYm9ydGFibGVGZXRjaCA9IGZ1bmN0aW9uIGFib3J0YWJsZUZldGNoMihpbnB1dCwgaW5pdDIpIHsKICAgICAgICAgIHZhciBzaWduYWwgPSBSZXF1ZXN0ICYmIFJlcXVlc3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5wdXQpID8gaW5wdXQuc2lnbmFsIDogaW5pdDIgPyBpbml0Mi5zaWduYWwgOiB2b2lkIDA7CiAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgIHZhciBhYm9ydEVycm9yOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGFib3J0RXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwgIkFib3J0RXJyb3IiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgYWJvcnRFcnJvciA9IG5ldyBFcnJvcigiQWJvcnRlZCIpOwogICAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGNhbmNlbGxhdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIHJlamVjdCkgewogICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChhYm9ydEVycm9yKTsKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvbmNlOiB0cnVlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgZGVsZXRlIGluaXQyLnNpZ25hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtjYW5jZWxsYXRpb24sIHJlYWxGZXRjaChpbnB1dCwgaW5pdDIpXSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVhbEZldGNoKGlucHV0LCBpbml0Mik7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZmV0Y2g6IGFib3J0YWJsZUZldGNoLAogICAgICAgICAgUmVxdWVzdAogICAgICAgIH07CiAgICAgIH0KICAgICAgZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7CiAgICAgIGV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDsKICAgICAgZXhwb3J0cy5hYm9ydGFibGVGZXRjaCA9IGFib3J0YWJsZUZldGNoRGVjb3JhdG9yOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMKICB2YXIgcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMuQWJvcnRTaWduYWwgPSBleHBvcnRzLkFib3J0Q29udHJvbGxlciA9IHZvaWQgMDsKICAgICAgdmFyIGNqc19wb255ZmlsbF8xID0gcmVxdWlyZV9janNfcG9ueWZpbGwoKTsKICAgICAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBzZWxmOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIGdsb2JhbDsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QiKTsKICAgICAgfTsKICAgICAgdmFyIEFib3J0Q29udHJvbGxlciA9IHR5cGVvZiBnZXRHbG9iYWwoKS5BYm9ydENvbnRyb2xsZXIgPT09ICJ1bmRlZmluZWQiID8gY2pzX3BvbnlmaWxsXzEuQWJvcnRDb250cm9sbGVyIDogZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyOwogICAgICBleHBvcnRzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlcjsKICAgICAgdmFyIEFib3J0U2lnbmFsID0gdHlwZW9mIGdldEdsb2JhbCgpLkFib3J0Q29udHJvbGxlciA9PT0gInVuZGVmaW5lZCIgPyBjanNfcG9ueWZpbGxfMS5BYm9ydFNpZ25hbCA6IGdldEdsb2JhbCgpLkFib3J0U2lnbmFsOwogICAgICBleHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xID0gcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwoKTsKICAgICAgdmFyIE51bGxTaWduYWwgPSBjbGFzcyB7CiAgICAgIH07CiAgICAgIHZhciBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXIgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICB0aGlzLnNpZ25hbHMgPSBuZXcgU2V0KCk7CiAgICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMS5BYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICB9CiAgICAgICAgYWRkU2lnbmFsKHNpZ25hbCA9IG5ldyBOdWxsU2lnbmFsKCkpIHsKICAgICAgICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiY2Fubm90IGFkZCBhIHNpZ25hbCwgYWxyZWFkeSBhYm9ydGVkISIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zaWduYWxzLmFkZChzaWduYWwpOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWJvcnRlZChzaWduYWwpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwgKCkgPT4gewogICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWJvcnRlZChzaWduYWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlQWJvcnRlZChzaWduYWwpIHsKICAgICAgICAgIHRoaXMuc2lnbmFscy5kZWxldGUoc2lnbmFsKTsKICAgICAgICAgIGlmICh0aGlzLnNpZ25hbHMuc2l6ZSA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXQgc2lnbmFsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICB9CiAgICAgICAgYWJvcnQoKSB7CiAgICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gQWdncmVnYXRlQWJvcnRDb250cm9sbGVyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlciA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHRoaXMuY2FsbGJhY2tzID0gbmV3IFNldCgpOwogICAgICAgIH0KICAgICAgICBhZGRDYWxsYmFjayhjYWxsYmFjayA9ICgpID0+IHsKICAgICAgICB9KSB7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5hZGQoY2FsbGJhY2spOwogICAgICAgICAgY2FsbGJhY2sodGhpcy5jdXJyZW50TWVzc2FnZSk7CiAgICAgICAgfQogICAgICAgIGNhbGxiYWNrKG1lc3NhZ2UpIHsKICAgICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2UgPSBtZXNzYWdlOwogICAgICAgICAgdGhpcy5jYWxsYmFja3MuZm9yRWFjaCgoZWx0KSA9PiB7CiAgICAgICAgICAgIGVsdChtZXNzYWdlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcwogIHZhciByZXF1aXJlX0Fib3J0YWJsZVByb21pc2VDYWNoZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xID0gcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwoKTsKICAgICAgdmFyIEFnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmVfQWdncmVnYXRlQWJvcnRDb250cm9sbGVyKCkpOwogICAgICB2YXIgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyKCkpOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlMiA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZpbGwsIGNhY2hlIH0pIHsKICAgICAgICAgIGlmICh0eXBlb2YgZmlsbCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBmaWxsIGZ1bmN0aW9uIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBjYWNoZSBvYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2YgY2FjaGUuZ2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBjYWNoZS5zZXQgIT09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIGNhY2hlLmRlbGV0ZSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWNoZSBtdXN0IGltcGxlbWVudCBnZXQoa2V5KSwgc2V0KGtleSwgdmFsKSwgYW5kIGFuZCBkZWxldGUoa2V5KSIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlOwogICAgICAgICAgdGhpcy5maWxsQ2FsbGJhY2sgPSBmaWxsOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaXNBYm9ydEV4Y2VwdGlvbihleGNlcHRpb24pIHsKICAgICAgICAgIHJldHVybiBleGNlcHRpb24ubmFtZSA9PT0gIkFib3J0RXJyb3IiIHx8IGV4Y2VwdGlvbi5jb2RlID09PSAiRVJSX0FCT1JURUQiIHx8IGV4Y2VwdGlvbi5tZXNzYWdlID09PSAiQWJvcnRFcnJvcjogYWJvcnRlZCIgfHwgZXhjZXB0aW9uLm1lc3NhZ2UgPT09ICJFcnJvcjogYWJvcnRlZCI7CiAgICAgICAgfQogICAgICAgIGV2aWN0KGtleSwgZW50cnkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmdldChrZXkpID09PSBlbnRyeSkgewogICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgY29uc3QgYWJvcnRlciA9IG5ldyBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXJfMS5kZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBzdGF0dXNSZXBvcnRlciA9IG5ldyBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcl8xLmRlZmF1bHQoKTsKICAgICAgICAgIHN0YXR1c1JlcG9ydGVyLmFkZENhbGxiYWNrKHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgIGNvbnN0IG5ld0VudHJ5ID0gewogICAgICAgICAgICBhYm9ydGVyLAogICAgICAgICAgICBwcm9taXNlOiB0aGlzLmZpbGxDYWxsYmFjayhkYXRhLCBhYm9ydGVyLnNpZ25hbCwgKG1lc3NhZ2UpID0+IHsKICAgICAgICAgICAgICBzdGF0dXNSZXBvcnRlci5jYWxsYmFjayhtZXNzYWdlKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHNldHRsZWQ6IGZhbHNlLAogICAgICAgICAgICBzdGF0dXNSZXBvcnRlciwKICAgICAgICAgICAgZ2V0IGFib3J0ZWQoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRlci5zaWduYWwuYWJvcnRlZDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIG5ld0VudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICBuZXdFbnRyeS5hYm9ydGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsICgpID0+IHsKICAgICAgICAgICAgaWYgKCFuZXdFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5ldmljdChrZXksIG5ld0VudHJ5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBuZXdFbnRyeS5wcm9taXNlLnRoZW4oKCkgPT4gewogICAgICAgICAgICBuZXdFbnRyeS5zZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0sICgpID0+IHsKICAgICAgICAgICAgbmV3RW50cnkuc2V0dGxlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIG5ld0VudHJ5KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGNoZWNrU2luZ2xlUHJvbWlzZShwcm9taXNlLCBzaWduYWwpIHsKICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2luZ2xlQWJvcnQoKSB7CiAgICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiYWJvcnRlZCIpLCB7IGNvZGU6ICJFUlJfQUJPUlRFRCIgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4gewogICAgICAgICAgICBjaGVja0ZvclNpbmdsZUFib3J0KCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9LCAoZXJyb3IpID0+IHsKICAgICAgICAgICAgY2hlY2tGb3JTaW5nbGVBYm9ydCgpOwogICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBoYXMoa2V5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgZ2V0KGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgaWYgKCFzaWduYWwgJiYgZGF0YSBpbnN0YW5jZW9mIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xLkFib3J0U2lnbmFsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInNlY29uZCBnZXQgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhbiBBYm9ydFNpZ25hbCwgcGVyaGFwcyB5b3UgbWVhbnQgdG8gcGFzcyBgbnVsbGAgZm9yIHRoZSBmaWxsIGRhdGE/Iik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjYWNoZUVudHJ5ID0gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIGlmIChjYWNoZUVudHJ5KSB7CiAgICAgICAgICAgIGlmIChjYWNoZUVudHJ5LmFib3J0ZWQgJiYgIWNhY2hlRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBjYWNoZUVudHJ5KTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoa2V5LCBkYXRhLCBzaWduYWwsIHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlRW50cnkucHJvbWlzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYWNoZUVudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICAgIGNhY2hlRW50cnkuc3RhdHVzUmVwb3J0ZXIuYWRkQ2FsbGJhY2soc3RhdHVzQ2FsbGJhY2spOwogICAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UoY2FjaGVFbnRyeS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UodGhpcy5jYWNoZS5nZXQoa2V5KS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgIH0KICAgICAgICBkZWxldGUoa2V5KSB7CiAgICAgICAgICBjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICBpZiAoY2FjaGVkRW50cnkpIHsKICAgICAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgY2FjaGVkRW50cnkuYWJvcnRlci5hYm9ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgY29uc3Qga2V5SXRlciA9IHRoaXMuY2FjaGUua2V5cygpOwogICAgICAgICAgbGV0IGRlbGV0ZUNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpOyAhcmVzdWx0LmRvbmU7IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpKSB7CiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHJlc3VsdC52YWx1ZSk7CiAgICAgICAgICAgIGRlbGV0ZUNvdW50ICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZGVsZXRlQ291bnQ7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzLmRlZmF1bHQgPSBBYm9ydGFibGVQcm9taXNlQ2FjaGUyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9pbmRleC5qcwogIHZhciByZXF1aXJlX2VzbSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgX19pbXBvcnREZWZhdWx0ID0gZXhwb3J0cyAmJiBleHBvcnRzLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyAiZGVmYXVsdCI6IG1vZCB9OwogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9BYm9ydGFibGVQcm9taXNlQ2FjaGUoKSk7CiAgICAgIGV4cG9ydHMuZGVmYXVsdCA9IEFib3J0YWJsZVByb21pc2VDYWNoZV8xLmRlZmF1bHQ7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVAMi4wLjAvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcwogIHZhciByZXF1aXJlX3F1aWNrX2xydSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVAMi4wLjAvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgUXVpY2tMUlUzID0gY2xhc3MgewogICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkgewogICAgICAgICAgaWYgKCEob3B0aW9ucy5tYXhTaXplICYmIG9wdGlvbnMubWF4U2l6ZSA+IDApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBtYXhTaXplYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLm1heFNpemUgPSBvcHRpb25zLm1heFNpemU7CiAgICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICAgICAgdGhpcy5vbGRDYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgIH0KICAgICAgICBfc2V0KGtleSwgdmFsdWUpIHsKICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgdGhpcy5fc2l6ZSsrOwogICAgICAgICAgaWYgKHRoaXMuX3NpemUgPj0gdGhpcy5tYXhTaXplKSB7CiAgICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgICAgICB0aGlzLm9sZENhY2hlID0gdGhpcy5jYWNoZTsKICAgICAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0KGtleSkgewogICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5vbGRDYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMub2xkQ2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICAgIHRoaXMuX3NldChrZXksIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLl9zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgaGFzKGtleSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSkgfHwgdGhpcy5vbGRDYWNoZS5oYXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgcGVlayhrZXkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMub2xkQ2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMub2xkQ2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlbGV0ZShrZXkpIHsKICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgaWYgKGRlbGV0ZWQpIHsKICAgICAgICAgICAgdGhpcy5fc2l6ZS0tOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMub2xkQ2FjaGUuZGVsZXRlKGtleSkgfHwgZGVsZXRlZDsKICAgICAgICB9CiAgICAgICAgY2xlYXIoKSB7CiAgICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7CiAgICAgICAgICB0aGlzLm9sZENhY2hlLmNsZWFyKCk7CiAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICB9CiAgICAgICAgKmtleXMoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIHRoaXMpIHsKICAgICAgICAgICAgeWllbGQga2V5OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAqdmFsdWVzKCkgewogICAgICAgICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgdGhpcykgewogICAgICAgICAgICB5aWVsZCB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkgewogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY2FjaGUpIHsKICAgICAgICAgICAgeWllbGQgaXRlbTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm9sZENhY2hlKSB7CiAgICAgICAgICAgIGNvbnN0IFtrZXldID0gaXRlbTsKICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgICAgeWllbGQgaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXQgc2l6ZSgpIHsKICAgICAgICAgIGxldCBvbGRDYWNoZVNpemUgPSAwOwogICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5vbGRDYWNoZS5rZXlzKCkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgICAgb2xkQ2FjaGVTaXplKys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplICsgb2xkQ2FjaGVTaXplOwogICAgICAgIH0KICAgICAgfTsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSBRdWlja0xSVTM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1mZXRjaEAzLjEuOC9ub2RlX21vZHVsZXMvY3Jvc3MtZmV0Y2gvZGlzdC9icm93c2VyLXBvbHlmaWxsLmpzCiAgdmFyIHJlcXVpcmVfYnJvd3Nlcl9wb2x5ZmlsbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1mZXRjaEAzLjEuOC9ub2RlX21vZHVsZXMvY3Jvc3MtZmV0Y2gvZGlzdC9icm93c2VyLXBvbHlmaWxsLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgKGZ1bmN0aW9uKHNlbGYyKSB7CiAgICAgICAgdmFyIGlycmVsZXZhbnQgPSBmdW5jdGlvbihleHBvcnRzMikgewogICAgICAgICAgdmFyIHN1cHBvcnQgPSB7CiAgICAgICAgICAgIHNlYXJjaFBhcmFtczogIlVSTFNlYXJjaFBhcmFtcyIgaW4gc2VsZjIsCiAgICAgICAgICAgIGl0ZXJhYmxlOiAiU3ltYm9sIiBpbiBzZWxmMiAmJiAiaXRlcmF0b3IiIGluIFN5bWJvbCwKICAgICAgICAgICAgYmxvYjogIkZpbGVSZWFkZXIiIGluIHNlbGYyICYmICJCbG9iIiBpbiBzZWxmMiAmJiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgbmV3IEJsb2IoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0oKSwKICAgICAgICAgICAgZm9ybURhdGE6ICJGb3JtRGF0YSIgaW4gc2VsZjIsCiAgICAgICAgICAgIGFycmF5QnVmZmVyOiAiQXJyYXlCdWZmZXIiIGluIHNlbGYyCiAgICAgICAgICB9OwogICAgICAgICAgZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHsKICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgdmFyIHZpZXdDbGFzc2VzID0gWwogICAgICAgICAgICAgICJbb2JqZWN0IEludDhBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IFVpbnQ4QXJyYXldIiwKICAgICAgICAgICAgICAiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEludDE2QXJyYXldIiwKICAgICAgICAgICAgICAiW29iamVjdCBVaW50MTZBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEludDMyQXJyYXldIiwKICAgICAgICAgICAgICAiW29iamVjdCBVaW50MzJBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEZsb2F0NjRBcnJheV0iCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTE7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAic3RyaW5nIikgewogICAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KG5hbWUpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gewogICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHZhbHVlID09PSB2b2lkIDAsIHZhbHVlIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkgewogICAgICAgICAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykgewogICAgICAgICAgICB0aGlzLm1hcCA9IHt9OwogICAgICAgICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHsKICAgICAgICAgICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsKICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKTsKICAgICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7CiAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikgewogICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pOwogICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pOwogICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewogICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTsKICAgICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdOwogICAgICAgICAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAiLCAiICsgdmFsdWUgOiB2YWx1ZTsKICAgICAgICAgIH07CiAgICAgICAgICBIZWFkZXJzLnByb3RvdHlwZVsiZGVsZXRlIl0gPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXTsKICAgICAgICAgIH07CiAgICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGw7CiAgICAgICAgICB9OwogICAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSk7CiAgICAgICAgICB9OwogICAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICB9OwogICAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7CiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHsKICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107CiAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgewogICAgICAgICAgICAgIGl0ZW1zLnB1c2gobmFtZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTsKICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107CiAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgewogICAgICAgICAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7CiAgICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkgewogICAgICAgICAgICBpZiAoYm9keS5ib2R5VXNlZCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYm9keS5ib2R5VXNlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHsKICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7CiAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpOwogICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTsKICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7CiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTsKICAgICAgICAgICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjaGFycy5qb2luKCIiKTsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1ZikgewogICAgICAgICAgICBpZiAoYnVmLnNsaWNlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKTsKICAgICAgICAgICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTsKICAgICAgICAgICAgICByZXR1cm4gdmlldy5idWZmZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIEJvZHkoKSB7CiAgICAgICAgICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7CiAgICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5OwogICAgICAgICAgICAgIGlmICghYm9keSkgewogICAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSAiIjsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkgewogICAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpOwogICAgICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwgInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsIHRoaXMuX2JvZHlCbG9iLnR5cGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Iik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7CiAgICAgICAgICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTsKICAgICAgICAgICAgICAgIGlmIChyZWplY3RlZCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikgewogICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkgewogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTsKICAgICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RlZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkgewogICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbWV0aG9kcyA9IFsiREVMRVRFIiwgIkdFVCIsICJIRUFEIiwgIk9QVElPTlMiLCAiUE9TVCIsICJQVVQiXTsKICAgICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHsKICAgICAgICAgICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZDsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5OwogICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7CiAgICAgICAgICAgICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7CiAgICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzOwogICAgICAgICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2Q7CiAgICAgICAgICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTsKICAgICAgICAgICAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbDsKICAgICAgICAgICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7CiAgICAgICAgICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICJzYW1lLW9yaWdpbiI7CiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykgewogICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgIkdFVCIpOwogICAgICAgICAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7CiAgICAgICAgICAgIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWw7CiAgICAgICAgICAgIHRoaXMucmVmZXJyZXIgPSBudWxsOwogICAgICAgICAgICBpZiAoKHRoaXMubWV0aG9kID09PSAiR0VUIiB8fCB0aGlzLm1ldGhvZCA9PT0gIkhFQUQiKSAmJiBib2R5KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5KTsKICAgICAgICAgIH0KICAgICAgICAgIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pOwogICAgICAgICAgfTsKICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7CiAgICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIGJvZHkudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihieXRlcykgewogICAgICAgICAgICAgIGlmIChieXRlcykgewogICAgICAgICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoIj0iKTsKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCAiICIpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbigiPSIpLnJlcGxhY2UoL1wrL2csICIgIik7CiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBmb3JtOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHsKICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpOwogICAgICAgICAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywgIiAiKTsKICAgICAgICAgICAgcHJlUHJvY2Vzc2VkSGVhZGVycy5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpOwogICAgICAgICAgICAgIGlmIChrZXkpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oIjoiKS50cmltKCk7CiAgICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaGVhZGVyczsKICAgICAgICAgIH0KICAgICAgICAgIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSk7CiAgICAgICAgICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHsKICAgICAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy50eXBlID0gImRlZmF1bHQiOwogICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB2b2lkIDAgPyAyMDAgOiBvcHRpb25zLnN0YXR1czsKICAgICAgICAgICAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMDsKICAgICAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gInN0YXR1c1RleHQiIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAiT0siOwogICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpOwogICAgICAgICAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICIiOwogICAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7CiAgICAgICAgICB9CiAgICAgICAgICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTsKICAgICAgICAgIFJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7CiAgICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cywKICAgICAgICAgICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsCiAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSwKICAgICAgICAgICAgICB1cmw6IHRoaXMudXJsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfTsKICAgICAgICAgIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMCwgc3RhdHVzVGV4dDogIiIgfSk7CiAgICAgICAgICAgIHJlc3BvbnNlLnR5cGUgPSAiZXJyb3IiOwogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdOwogICAgICAgICAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykgewogICAgICAgICAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzLCBoZWFkZXJzOiB7IGxvY2F0aW9uOiB1cmwgfSB9KTsKICAgICAgICAgIH07CiAgICAgICAgICBleHBvcnRzMi5ET01FeGNlcHRpb24gPSBzZWxmMi5ET01FeGNlcHRpb247CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBuZXcgZXhwb3J0czIuRE9NRXhjZXB0aW9uKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZXhwb3J0czIuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkgewogICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKTsKICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2s7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGV4cG9ydHMyLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7CiAgICAgICAgICAgIGV4cG9ydHMyLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBleHBvcnRzMi5ET01FeGNlcHRpb247CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBmZXRjaDIoaW5wdXQsIGluaXQyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0Mik7CiAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IGV4cG9ydHMyLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsICJBYm9ydEVycm9yIikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgICAgICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7CiAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cywKICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgIiIpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSAicmVzcG9uc2VVUkwiIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTsKICAgICAgICAgICAgICAgIHZhciBib2R5ID0gInJlc3BvbnNlIiBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBleHBvcnRzMi5ET01FeGNlcHRpb24oIkFib3J0ZWQiLCAiQWJvcnRFcnJvciIpKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7CiAgICAgICAgICAgICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICJpbmNsdWRlIikgewogICAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAib21pdCIpIHsKICAgICAgICAgICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCJyZXNwb25zZVR5cGUiIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHsKICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAiYmxvYiI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7CiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGFib3J0WGhyKTsKICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBhYm9ydFhocik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gInVuZGVmaW5lZCIgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGZldGNoMi5wb2x5ZmlsbCA9IHRydWU7CiAgICAgICAgICBpZiAoIXNlbGYyLmZldGNoKSB7CiAgICAgICAgICAgIHNlbGYyLmZldGNoID0gZmV0Y2gyOwogICAgICAgICAgICBzZWxmMi5IZWFkZXJzID0gSGVhZGVyczsKICAgICAgICAgICAgc2VsZjIuUmVxdWVzdCA9IFJlcXVlc3Q7CiAgICAgICAgICAgIHNlbGYyLlJlc3BvbnNlID0gUmVzcG9uc2U7CiAgICAgICAgICB9CiAgICAgICAgICBleHBvcnRzMi5IZWFkZXJzID0gSGVhZGVyczsKICAgICAgICAgIGV4cG9ydHMyLlJlcXVlc3QgPSBSZXF1ZXN0OwogICAgICAgICAgZXhwb3J0czIuUmVzcG9uc2UgPSBSZXNwb25zZTsKICAgICAgICAgIGV4cG9ydHMyLmZldGNoID0gZmV0Y2gyOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgICAgICByZXR1cm4gZXhwb3J0czI7CiAgICAgICAgfSh7fSk7CiAgICAgIH0pKHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiBleHBvcnRzKTsKICAgIH0KICB9KTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvYmFtL2JhbS13b3JrZXIudHM/d29ya2VyJmlubGluZT93b3JrZXJfZmlsZQogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvd29ya2VyLm1qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X3dvcmtlciA9IF9fdG9Nb2R1bGUocmVxdWlyZV93b3JrZXIoKSk7CiAgdmFyIGV4cG9zZSA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5leHBvc2U7CiAgdmFyIHJlZ2lzdGVyU2VyaWFsaXplciA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5yZWdpc3RlclNlcmlhbGl6ZXI7CiAgdmFyIFRyYW5zZmVyID0gaW1wb3J0X3dvcmtlci5kZWZhdWx0LlRyYW5zZmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vYmFpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb25nKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS92aXJ0dWFsT2Zmc2V0LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBWaXJ0dWFsT2Zmc2V0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoYmxvY2tQb3NpdGlvbiwgZGF0YVBvc2l0aW9uKSB7CiAgICAgIHRoaXMuYmxvY2tQb3NpdGlvbiA9IGJsb2NrUG9zaXRpb247CiAgICAgIHRoaXMuZGF0YVBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBgJHt0aGlzLmJsb2NrUG9zaXRpb259OiR7dGhpcy5kYXRhUG9zaXRpb259YDsKICAgIH0KICAgIGNvbXBhcmVUbyhiKSB7CiAgICAgIHJldHVybiB0aGlzLmJsb2NrUG9zaXRpb24gLSBiLmJsb2NrUG9zaXRpb24gfHwgdGhpcy5kYXRhUG9zaXRpb24gLSBiLmRhdGFQb3NpdGlvbjsKICAgIH0KICAgIHN0YXRpYyBtaW4oLi4uYXJncykgewogICAgICBsZXQgbWluOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGZvciAoOyAhbWluOyBpICs9IDEpIHsKICAgICAgICBtaW4gPSBhcmdzW2ldOwogICAgICB9CiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgIGlmIChtaW4uY29tcGFyZVRvKGFyZ3NbaV0pID4gMCkgewogICAgICAgICAgbWluID0gYXJnc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG1pbjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlcywgb2Zmc2V0ID0gMCwgYmlnZW5kaWFuID0gZmFsc2UpIHsKICAgIGlmIChiaWdlbmRpYW4pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWctZW5kaWFuIHZpcnR1YWwgZmlsZSBvZmZzZXRzIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBWaXJ0dWFsT2Zmc2V0KGJ5dGVzW29mZnNldCArIDddICogMTA5OTUxMTYyNzc3NiArIGJ5dGVzW29mZnNldCArIDZdICogNDI5NDk2NzI5NiArIGJ5dGVzW29mZnNldCArIDVdICogMTY3NzcyMTYgKyBieXRlc1tvZmZzZXQgKyA0XSAqIDY1NTM2ICsgYnl0ZXNbb2Zmc2V0ICsgM10gKiAyNTYgKyBieXRlc1tvZmZzZXQgKyAyXSwgYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCB8IGJ5dGVzW29mZnNldF0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vY2h1bmsuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIENodW5rID0gY2xhc3MgewogICAgY29uc3RydWN0b3IobWludiwgbWF4diwgYmluLCBmZXRjaGVkU2l6ZSA9IHZvaWQgMCkgewogICAgICB0aGlzLm1pbnYgPSBtaW52OwogICAgICB0aGlzLm1heHYgPSBtYXh2OwogICAgICB0aGlzLmJpbiA9IGJpbjsKICAgICAgdGhpcy5fZmV0Y2hlZFNpemUgPSBmZXRjaGVkU2l6ZTsKICAgIH0KICAgIHRvVW5pcXVlU3RyaW5nKCkgewogICAgICByZXR1cm4gYCR7dGhpcy5taW52fS4uJHt0aGlzLm1heHZ9IChiaW4gJHt0aGlzLmJpbn0sIGZldGNoZWRTaXplICR7dGhpcy5mZXRjaGVkU2l6ZSgpfSlgOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvVW5pcXVlU3RyaW5nKCk7CiAgICB9CiAgICBjb21wYXJlVG8oYikgewogICAgICByZXR1cm4gdGhpcy5taW52LmNvbXBhcmVUbyhiLm1pbnYpIHx8IHRoaXMubWF4di5jb21wYXJlVG8oYi5tYXh2KSB8fCB0aGlzLmJpbiAtIGIuYmluOwogICAgfQogICAgZmV0Y2hlZFNpemUoKSB7CiAgICAgIGlmICh0aGlzLl9mZXRjaGVkU2l6ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoZWRTaXplOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1heHYuYmxvY2tQb3NpdGlvbiArICgxIDw8IDE2KSAtIHRoaXMubWludi5ibG9ja1Bvc2l0aW9uOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL2luZGV4RmlsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgSW5kZXhGaWxlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoeyBmaWxlaGFuZGxlLCByZW5hbWVSZWZTZXEgPSAobikgPT4gbiB9KSB7CiAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGU7CiAgICAgIHRoaXMucmVuYW1lUmVmU2VxID0gcmVuYW1lUmVmU2VxOwogICAgfQogICAgX2ZpbmRGaXJzdERhdGEoZGF0YSwgdmlydHVhbE9mZnNldCkgewogICAgICBjb25zdCBjdXJyZW50RmRsID0gZGF0YS5maXJzdERhdGFMaW5lOwogICAgICBpZiAoY3VycmVudEZkbCkgewogICAgICAgIGRhdGEuZmlyc3REYXRhTGluZSA9IGN1cnJlbnRGZGwuY29tcGFyZVRvKHZpcnR1YWxPZmZzZXQpID4gMCA/IHZpcnR1YWxPZmZzZXQgOiBjdXJyZW50RmRsOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEuZmlyc3REYXRhTGluZSA9IHZpcnR1YWxPZmZzZXQ7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHBhcnNlKG9wdHMgPSB7fSkgewogICAgICBpZiAoIXRoaXMuc2V0dXBQKSB7CiAgICAgICAgdGhpcy5zZXR1cFAgPSB0aGlzLl9wYXJzZShvcHRzKS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgdGhpcy5zZXR1cFAgPSB2b2lkIDA7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnNldHVwUDsKICAgIH0KICAgIGFzeW5jIGhhc1JlZlNlcShzZXFJZCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiAhISgoYXdhaXQgdGhpcy5wYXJzZShvcHRzKSkuaW5kaWNlc1tzZXFJZF0gfHwge30pLmJpbkluZGV4OwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3V0aWwuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gdGltZW91dChtcykgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7CiAgfQogIGZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nKSB7CiAgICBpZiAobG9uZy5ncmVhdGVyVGhhbihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgfHwgbG9uZy5sZXNzVGhhbihOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICB9CiAgICByZXR1cm4gbG9uZy50b051bWJlcigpOwogIH0KICBmdW5jdGlvbiBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCkgewogICAgaWYgKCFzaWduYWwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgIGlmICh0eXBlb2YgRE9NRXhjZXB0aW9uICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oImFib3J0ZWQiLCAiQWJvcnRFcnJvciIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoImFib3J0ZWQiKTsKICAgICAgICBlLmNvZGUgPSAiRVJSX0FCT1JURUQiOwogICAgICAgIHRocm93IGU7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gYWJvcnRCcmVha1BvaW50KHNpZ25hbCkgewogICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCk7CiAgfQogIGZ1bmN0aW9uIGNhbk1lcmdlQmxvY2tzKGNodW5rMSwgY2h1bmsyKSB7CiAgICByZXR1cm4gY2h1bmsyLm1pbnYuYmxvY2tQb3NpdGlvbiAtIGNodW5rMS5tYXh2LmJsb2NrUG9zaXRpb24gPCA2NWUzICYmIGNodW5rMi5tYXh2LmJsb2NrUG9zaXRpb24gLSBjaHVuazEubWludi5ibG9ja1Bvc2l0aW9uIDwgNWU2OwogIH0KICBmdW5jdGlvbiBtYWtlT3B0cyhvYmogPSB7fSkgewogICAgcmV0dXJuICJhYm9ydGVkIiBpbiBvYmogPyB7IHNpZ25hbDogb2JqIH0gOiBvYmo7CiAgfQogIGZ1bmN0aW9uIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KSB7CiAgICBjb25zdCBtZXJnZWRDaHVua3MgPSBbXTsKICAgIGxldCBsYXN0Q2h1bmsgPSBudWxsOwogICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGNodW5rczsKICAgIH0KICAgIGNodW5rcy5zb3J0KChjMCwgYzEpID0+IHsKICAgICAgY29uc3QgZGlmID0gYzAubWludi5ibG9ja1Bvc2l0aW9uIC0gYzEubWludi5ibG9ja1Bvc2l0aW9uOwogICAgICBpZiAoZGlmICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGRpZjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gYzAubWludi5kYXRhUG9zaXRpb24gLSBjMS5taW52LmRhdGFQb3NpdGlvbjsKICAgICAgfQogICAgfSk7CiAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHsKICAgICAgaWYgKCFsb3dlc3QgfHwgY2h1bmsubWF4di5jb21wYXJlVG8obG93ZXN0KSA+IDApIHsKICAgICAgICBpZiAobGFzdENodW5rID09PSBudWxsKSB7CiAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICBsYXN0Q2h1bmsgPSBjaHVuazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGNhbk1lcmdlQmxvY2tzKGxhc3RDaHVuaywgY2h1bmspKSB7CiAgICAgICAgICAgIGlmIChjaHVuay5tYXh2LmNvbXBhcmVUbyhsYXN0Q2h1bmsubWF4dikgPiAwKSB7CiAgICAgICAgICAgICAgbGFzdENodW5rLm1heHYgPSBjaHVuay5tYXh2OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbWVyZ2VkQ2h1bmtzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vYmFpLmpzCiAgdmFyIEJBSV9NQUdJQyA9IDIxNTc4MDUwOwogIGZ1bmN0aW9uIHJvdW5kRG93bihuLCBtdWx0aXBsZSkgewogICAgcmV0dXJuIG4gLSBuICUgbXVsdGlwbGU7CiAgfQogIGZ1bmN0aW9uIHJvdW5kVXAobiwgbXVsdGlwbGUpIHsKICAgIHJldHVybiBuIC0gbiAlIG11bHRpcGxlICsgbXVsdGlwbGU7CiAgfQogIHZhciBCQUkgPSBjbGFzcyBleHRlbmRzIEluZGV4RmlsZSB7CiAgICBwYXJzZVBzZXVkb0JpbihieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihpbXBvcnRfbG9uZy5kZWZhdWx0LmZyb21CeXRlc0xFKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzLCBvZmZzZXQgKyAxNiwgb2Zmc2V0ICsgMjQpLCB0cnVlKSk7CiAgICAgIHJldHVybiB7IGxpbmVDb3VudCB9OwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZklkLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgcHJvbSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGNvbnN0IGluZGV4ID0gcHJvbS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFpbmRleCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCByZXQgPSBpbmRleC5zdGF0cyB8fCB7fTsKICAgICAgcmV0dXJuIHJldC5saW5lQ291bnQgPT09IHZvaWQgMCA/IC0xIDogcmV0LmxpbmVDb3VudDsKICAgIH0KICAgIGZldGNoQmFpKG9wdHMgPSB7fSkgewogICAgICBpZiAoIXRoaXMuYmFpUCkgewogICAgICAgIHRoaXMuYmFpUCA9IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZShvcHRzKS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgdGhpcy5iYWlQID0gdm9pZCAwOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5iYWlQOwogICAgfQogICAgYXN5bmMgX3BhcnNlKCkgewogICAgICBjb25zdCBkYXRhID0geyBiYWk6IHRydWUsIG1heEJsb2NrU2l6ZTogMSA8PCAxNiB9OwogICAgICBjb25zdCBieXRlcyA9IGF3YWl0IHRoaXMuZmV0Y2hCYWkoKTsKICAgICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSAhPT0gQkFJX01BR0lDKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBCQUkgZmlsZSIpOwogICAgICB9CiAgICAgIGRhdGEucmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KTsKICAgICAgY29uc3QgZGVwdGggPSA1OwogICAgICBjb25zdCBiaW5MaW1pdCA9ICgoMSA8PCAoZGVwdGggKyAxKSAqIDMpIC0gMSkgLyA3OwogICAgICBkYXRhLmluZGljZXMgPSBuZXcgQXJyYXkoZGF0YS5yZWZDb3VudCk7CiAgICAgIGxldCBjdXJyT2Zmc2V0ID0gODsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJlZkNvdW50OyBpICs9IDEpIHsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgY29uc3QgYmluSW5kZXggPSB7fTsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICAgIGlmIChiaW4gPT09IGJpbkxpbWl0ICsgMSkgewogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCk7CiAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMzI7CiAgICAgICAgICB9IGVsc2UgaWYgKGJpbiA+IGJpbkxpbWl0ICsgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhaSBpbmRleCBjb250YWlucyB0b28gbWFueSBiaW5zLCBwbGVhc2UgdXNlIENTSSIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IG5ldyBBcnJheShjaHVua0NvdW50KTsKICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjaHVua0NvdW50OyBrICs9IDEpIHsKICAgICAgICAgICAgICBjb25zdCB1ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgICBjb25zdCB2ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0ICsgOCk7CiAgICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgICB0aGlzLl9maW5kRmlyc3REYXRhKGRhdGEsIHUpOwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxpbmVhckNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgIGNvbnN0IGxpbmVhckluZGV4ID0gbmV3IEFycmF5KGxpbmVhckNvdW50KTsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmVhckNvdW50OyBrICs9IDEpIHsKICAgICAgICAgIGxpbmVhckluZGV4W2tdID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gODsKICAgICAgICAgIHRoaXMuX2ZpbmRGaXJzdERhdGEoZGF0YSwgbGluZWFySW5kZXhba10pOwogICAgICAgIH0KICAgICAgICBkYXRhLmluZGljZXNbaV0gPSB7IGJpbkluZGV4LCBsaW5lYXJJbmRleCwgc3RhdHMgfTsKICAgICAgfQogICAgICByZXR1cm4gZGF0YTsKICAgIH0KICAgIGFzeW5jIGluZGV4Q292KHNlcUlkLCBzdGFydCwgZW5kLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgdiA9IDE2Mzg0OwogICAgICBjb25zdCByYW5nZSA9IHN0YXJ0ICE9PSB2b2lkIDA7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGNvbnN0IHNlcUlkeCA9IGluZGV4RGF0YS5pbmRpY2VzW3NlcUlkXTsKICAgICAgaWYgKCFzZXFJZHgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgeyBsaW5lYXJJbmRleCA9IFtdLCBzdGF0cyB9ID0gc2VxSWR4OwogICAgICBpZiAoIWxpbmVhckluZGV4Lmxlbmd0aCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCBlID0gZW5kICE9PSB2b2lkIDAgPyByb3VuZFVwKGVuZCwgdikgOiAobGluZWFySW5kZXgubGVuZ3RoIC0gMSkgKiB2OwogICAgICBjb25zdCBzID0gc3RhcnQgIT09IHZvaWQgMCA/IHJvdW5kRG93bihzdGFydCwgdikgOiAwOwogICAgICBsZXQgZGVwdGhzOwogICAgICBpZiAocmFuZ2UpIHsKICAgICAgICBkZXB0aHMgPSBuZXcgQXJyYXkoKGUgLSBzKSAvIHYpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlcHRocyA9IG5ldyBBcnJheShsaW5lYXJJbmRleC5sZW5ndGggLSAxKTsKICAgICAgfQogICAgICBjb25zdCB0b3RhbFNpemUgPSBsaW5lYXJJbmRleFtsaW5lYXJJbmRleC5sZW5ndGggLSAxXS5ibG9ja1Bvc2l0aW9uOwogICAgICBpZiAoZSA+IChsaW5lYXJJbmRleC5sZW5ndGggLSAxKSAqIHYpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInF1ZXJ5IG91dHNpZGUgb2YgcmFuZ2Ugb2YgbGluZWFyIGluZGV4Iik7CiAgICAgIH0KICAgICAgbGV0IGN1cnJlbnRQb3MgPSBsaW5lYXJJbmRleFtzIC8gdl0uYmxvY2tQb3NpdGlvbjsKICAgICAgZm9yIChsZXQgaSA9IHMgLyB2LCBqID0gMDsgaSA8IGUgLyB2OyBpKyssIGorKykgewogICAgICAgIGRlcHRoc1tqXSA9IHsKICAgICAgICAgIHNjb3JlOiBsaW5lYXJJbmRleFtpICsgMV0uYmxvY2tQb3NpdGlvbiAtIGN1cnJlbnRQb3MsCiAgICAgICAgICBzdGFydDogaSAqIHYsCiAgICAgICAgICBlbmQ6IGkgKiB2ICsgdgogICAgICAgIH07CiAgICAgICAgY3VycmVudFBvcyA9IGxpbmVhckluZGV4W2kgKyAxXS5ibG9ja1Bvc2l0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBkZXB0aHMubWFwKChkKSA9PiB7CiAgICAgICAgcmV0dXJuIHsgLi4uZCwgc2NvcmU6IGQuc2NvcmUgKiBzdGF0cy5saW5lQ291bnQgLyB0b3RhbFNpemUgfTsKICAgICAgfSk7CiAgICB9CiAgICByZWcyYmlucyhiZWcsIGVuZCkgewogICAgICBlbmQgLT0gMTsKICAgICAgcmV0dXJuIFsKICAgICAgICBbMCwgMF0sCiAgICAgICAgWzEgKyAoYmVnID4+IDI2KSwgMSArIChlbmQgPj4gMjYpXSwKICAgICAgICBbOSArIChiZWcgPj4gMjMpLCA5ICsgKGVuZCA+PiAyMyldLAogICAgICAgIFs3MyArIChiZWcgPj4gMjApLCA3MyArIChlbmQgPj4gMjApXSwKICAgICAgICBbNTg1ICsgKGJlZyA+PiAxNyksIDU4NSArIChlbmQgPj4gMTcpXSwKICAgICAgICBbNDY4MSArIChiZWcgPj4gMTQpLCA0NjgxICsgKGVuZCA+PiAxNCldCiAgICAgIF07CiAgICB9CiAgICBhc3luYyBibG9ja3NGb3JSYW5nZShyZWZJZCwgbWluLCBtYXgsIG9wdHMgPSB7fSkgewogICAgICBpZiAobWluIDwgMCkgewogICAgICAgIG1pbiA9IDA7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghYmEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdCaW5zID0gdGhpcy5yZWcyYmlucyhtaW4sIG1heCk7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IFtzdGFydCwgZW5kXSBvZiBvdmVybGFwcGluZ0JpbnMpIHsKICAgICAgICBmb3IgKGxldCBiaW4gPSBzdGFydDsgYmluIDw9IGVuZDsgYmluKyspIHsKICAgICAgICAgIGlmIChiYS5iaW5JbmRleFtiaW5dKSB7CiAgICAgICAgICAgIGNvbnN0IGJpbkNodW5rcyA9IGJhLmJpbkluZGV4W2Jpbl07CiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgYmluQ2h1bmtzLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICAgICAgY2h1bmtzLnB1c2gobmV3IENodW5rKGJpbkNodW5rc1tjXS5taW52LCBiaW5DaHVua3NbY10ubWF4diwgYmluKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgbmludHYgPSBiYS5saW5lYXJJbmRleC5sZW5ndGg7CiAgICAgIGxldCBsb3dlc3QgPSBudWxsOwogICAgICBjb25zdCBtaW5MaW4gPSBNYXRoLm1pbihtaW4gPj4gMTQsIG5pbnR2IC0gMSk7CiAgICAgIGNvbnN0IG1heExpbiA9IE1hdGgubWluKG1heCA+PiAxNCwgbmludHYgLSAxKTsKICAgICAgZm9yIChsZXQgaSA9IG1pbkxpbjsgaSA8PSBtYXhMaW47ICsraSkgewogICAgICAgIGNvbnN0IHZwID0gYmEubGluZWFySW5kZXhbaV07CiAgICAgICAgaWYgKHZwKSB7CiAgICAgICAgICBpZiAoIWxvd2VzdCB8fCB2cC5jb21wYXJlVG8obG93ZXN0KSA8IDApIHsKICAgICAgICAgICAgbG93ZXN0ID0gdnA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvcHRpbWl6ZUNodW5rcyhjaHVua3MsIGxvd2VzdCk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vY3NpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzMgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9iZ3pGaWxlaGFuZGxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNiA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vaW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9sb2NhbEZpbGUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9jYWxGaWxlKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL3JlbW90ZUZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXIyID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKICB2YXIgUmVtb3RlRmlsZSA9IGNsYXNzIHsKICAgIGFzeW5jIGdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSkgewogICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmJ1ZmZlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiByZXNwb25zZS5idWZmZXIoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2UuYXJyYXlCdWZmZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTsKICAgICAgICByZXR1cm4gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmZyb20ocmVzcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBIVFRQIHJlc3BvbnNlIG9iamVjdCwgaGFzIG5vIGJ1ZmZlciBtZXRob2QsIGFuZCBubyBhcnJheUJ1ZmZlciBtZXRob2QiKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRzID0ge30pIHsKICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0ge307CiAgICAgIHRoaXMudXJsID0gc291cmNlOwogICAgICBjb25zdCBmZXRjaDIgPSBvcHRzLmZldGNoIHx8IGdsb2JhbFRoaXMuZmV0Y2guYmluZChnbG9iYWxUaGlzKTsKICAgICAgaWYgKCFmZXRjaDIpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBubyBmZXRjaCBmdW5jdGlvbiBzdXBwbGllZCwgYW5kIG5vbmUgZm91bmQgaW4gZ2xvYmFsIGVudmlyb25tZW50YCk7CiAgICAgIH0KICAgICAgaWYgKG9wdHMub3ZlcnJpZGVzKSB7CiAgICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0gb3B0cy5vdmVycmlkZXM7CiAgICAgIH0KICAgICAgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uID0gZmV0Y2gyOwogICAgfQogICAgYXN5bmMgZmV0Y2goaW5wdXQsIGluaXQyKSB7CiAgICAgIGxldCByZXNwb25zZTsKICAgICAgdHJ5IHsKICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgaW5pdDIpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgaWYgKGAke2V9YC5pbmNsdWRlcygiRmFpbGVkIHRvIGZldGNoIikpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgZ2VuZXJpYy1maWxlaGFuZGxlOiByZWZldGNoaW5nICR7aW5wdXR9IHRvIGF0dGVtcHQgdG8gd29yayBhcm91bmQgY2hyb21lIENPUlMgaGVhZGVyIGNhY2hpbmcgYnVnYCk7CiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgewogICAgICAgICAgICAuLi5pbml0MiwKICAgICAgICAgICAgY2FjaGU6ICJyZWxvYWQiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQogICAgYXN5bmMgcmVhZChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgJiYgcG9zaXRpb24gPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIke3RoaXMudXJsfSBmZXRjaCByZXR1cm5lZCBzdGF0dXMgMjAwLCBleHBlY3RlZCAyMDYiKTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZldGNoaW5nICR7dGhpcy51cmx9YCk7CiAgICB9CiAgICBhc3luYyByZWFkRmlsZShvcHRpb25zID0ge30pIHsKICAgICAgbGV0IGVuY29kaW5nOwogICAgICBsZXQgb3B0czsKICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIikgewogICAgICAgIGVuY29kaW5nID0gb3B0aW9uczsKICAgICAgICBvcHRzID0ge307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nOwogICAgICAgIG9wdHMgPSBvcHRpb25zOwogICAgICAgIGRlbGV0ZSBvcHRzLmVuY29kaW5nOwogICAgICB9CiAgICAgIGNvbnN0IHsgaGVhZGVycyA9IHt9LCBzaWduYWwsIG92ZXJyaWRlcyA9IHt9IH0gPSBvcHRzOwogICAgICBjb25zdCBhcmdzID0gewogICAgICAgIGhlYWRlcnMsCiAgICAgICAgbWV0aG9kOiAiR0VUIiwKICAgICAgICByZWRpcmVjdDogImZvbGxvdyIsCiAgICAgICAgbW9kZTogImNvcnMiLAogICAgICAgIHNpZ25hbCwKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdlbmVyaWMtZmlsZWhhbmRsZSBmYWlsZWQgdG8gZmV0Y2giKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZmV0Y2hpbmcgJHt0aGlzLnVybH1gKSwgewogICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IikgewogICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBlbmNvZGluZzogJHtlbmNvZGluZ31gKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJGcm9tUmVzcG9uc2UocmVzcG9uc2UpOwogICAgfQogICAgYXN5bmMgc3RhdCgpIHsKICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgY29uc3QgYnVmID0gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmFsbG9jVW5zYWZlKDEwKTsKICAgICAgICBhd2FpdCB0aGlzLnJlYWQoYnVmLCAwLCAxMCwgMCk7CiAgICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBkZXRlcm1pbmUgc2l6ZSBvZiBmaWxlIGF0ICR7dGhpcy51cmx9YCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zdGF0OwogICAgfQogICAgYXN5bmMgY2xvc2UoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2Jsb2JGaWxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyMyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vZmlsZWhhbmRsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS91bnppcC1wYWtvLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNCA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CiAgdmFyIGltcG9ydF9wYWtvID0gX190b01vZHVsZShyZXF1aXJlX3Bha28oKSk7CiAgYXN5bmMgZnVuY3Rpb24gdW56aXAoaW5wdXREYXRhKSB7CiAgICB0cnkgewogICAgICBsZXQgc3RybTsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGxldCBpID0gMDsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGxldCB0b3RhbFNpemUgPSAwOwogICAgICBsZXQgaW5mbGF0b3I7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCByZW1haW5pbmdJbnB1dCA9IGlucHV0RGF0YS5zdWJhcnJheShwb3MpOwogICAgICAgIGluZmxhdG9yID0gbmV3IGltcG9ydF9wYWtvLkluZmxhdGUoKTsKICAgICAgICAoeyBzdHJtIH0gPSBpbmZsYXRvcik7CiAgICAgICAgaW5mbGF0b3IucHVzaChyZW1haW5pbmdJbnB1dCwgaW1wb3J0X3Bha28uWl9TWU5DX0ZMVVNIKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKTsKICAgICAgICB9CiAgICAgICAgcG9zICs9IHN0cm0ubmV4dF9pbjsKICAgICAgICBjaHVua3NbaV0gPSBpbmZsYXRvci5yZXN1bHQ7CiAgICAgICAgdG90YWxTaXplICs9IGNodW5rc1tpXS5sZW5ndGg7CiAgICAgICAgaSArPSAxOwogICAgICB9IHdoaWxlIChzdHJtLmF2YWlsX2luKTsKICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxTaXplKTsKICAgICAgZm9yIChsZXQgaTIgPSAwLCBvZmZzZXQgPSAwOyBpMiA8IGNodW5rcy5sZW5ndGg7IGkyKyspIHsKICAgICAgICByZXN1bHQuc2V0KGNodW5rc1tpMl0sIG9mZnNldCk7CiAgICAgICAgb2Zmc2V0ICs9IGNodW5rc1tpMl0ubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAoYCR7ZX1gLm1hdGNoKC9pbmNvcnJlY3QgaGVhZGVyIGNoZWNrLykpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2JsZW0gZGVjb21wcmVzc2luZyBibG9jazogaW5jb3JyZWN0IGd6aXAgaGVhZGVyIGNoZWNrIik7CiAgICAgIH0KICAgICAgdGhyb3cgZTsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gdW56aXBDaHVua1NsaWNlKGlucHV0RGF0YSwgY2h1bmspIHsKICAgIHRyeSB7CiAgICAgIGxldCBzdHJtOwogICAgICBjb25zdCB7IG1pbnYsIG1heHYgfSA9IGNodW5rOwogICAgICBsZXQgY3BvcyA9IG1pbnYuYmxvY2tQb3NpdGlvbjsKICAgICAgbGV0IGRwb3MgPSBtaW52LmRhdGFQb3NpdGlvbjsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGNvbnN0IGNwb3NpdGlvbnMgPSBbXTsKICAgICAgY29uc3QgZHBvc2l0aW9ucyA9IFtdOwogICAgICBsZXQgdG90YWxTaXplID0gMDsKICAgICAgbGV0IGkgPSAwOwogICAgICBkbyB7CiAgICAgICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc3ViYXJyYXkoY3BvcyAtIG1pbnYuYmxvY2tQb3NpdGlvbik7CiAgICAgICAgY29uc3QgaW5mbGF0b3IgPSBuZXcgaW1wb3J0X3Bha28uSW5mbGF0ZSgpOwogICAgICAgICh7IHN0cm0gfSA9IGluZmxhdG9yKTsKICAgICAgICBpbmZsYXRvci5wdXNoKHJlbWFpbmluZ0lucHV0LCBpbXBvcnRfcGFrby5aX1NZTkNfRkxVU0gpOwogICAgICAgIGlmIChpbmZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZsYXRvci5tc2cpOwogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIyID0gaW5mbGF0b3IucmVzdWx0OwogICAgICAgIGNodW5rcy5wdXNoKGJ1ZmZlcjIpOwogICAgICAgIGxldCBsZW4gPSBidWZmZXIyLmxlbmd0aDsKICAgICAgICBjcG9zaXRpb25zLnB1c2goY3Bvcyk7CiAgICAgICAgZHBvc2l0aW9ucy5wdXNoKGRwb3MpOwogICAgICAgIGlmIChjaHVua3MubGVuZ3RoID09PSAxICYmIG1pbnYuZGF0YVBvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3NbMF0gPSBjaHVua3NbMF0uc3ViYXJyYXkobWludi5kYXRhUG9zaXRpb24pOwogICAgICAgICAgbGVuID0gY2h1bmtzWzBdLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3JpZ0Nwb3MgPSBjcG9zOwogICAgICAgIGNwb3MgKz0gc3RybS5uZXh0X2luOwogICAgICAgIGRwb3MgKz0gbGVuOwogICAgICAgIGlmIChvcmlnQ3BvcyA+PSBtYXh2LmJsb2NrUG9zaXRpb24pIHsKICAgICAgICAgIGNodW5rc1tpXSA9IGNodW5rc1tpXS5zdWJhcnJheSgwLCBtYXh2LmJsb2NrUG9zaXRpb24gPT09IG1pbnYuYmxvY2tQb3NpdGlvbiA/IG1heHYuZGF0YVBvc2l0aW9uIC0gbWludi5kYXRhUG9zaXRpb24gKyAxIDogbWF4di5kYXRhUG9zaXRpb24gKyAxKTsKICAgICAgICAgIGNwb3NpdGlvbnMucHVzaChjcG9zKTsKICAgICAgICAgIGRwb3NpdGlvbnMucHVzaChkcG9zKTsKICAgICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7CiAgICAgIGZvciAobGV0IGkyID0gMCwgb2Zmc2V0ID0gMDsgaTIgPCBjaHVua3MubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgcmVzdWx0LnNldChjaHVua3NbaTJdLCBvZmZzZXQpOwogICAgICAgIG9mZnNldCArPSBjaHVua3NbaTJdLmxlbmd0aDsKICAgICAgfQogICAgICBjb25zdCBidWZmZXIgPSBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgICByZXR1cm4geyBidWZmZXIsIGNwb3NpdGlvbnMsIGRwb3NpdGlvbnMgfTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGAke2V9YC5tYXRjaCgvaW5jb3JyZWN0IGhlYWRlciBjaGVjay8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJwcm9ibGVtIGRlY29tcHJlc3NpbmcgYmxvY2s6IGluY29ycmVjdCBnemlwIGhlYWRlciBjaGVjayIpOwogICAgICB9CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2d6aUluZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS9jc2kuanMKICB2YXIgQ1NJMV9NQUdJQyA9IDIxNTgyNjU5OwogIHZhciBDU0kyX01BR0lDID0gMzgzNTk4NzU7CiAgZnVuY3Rpb24gbHNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIG51bSAqIDIgKiogYml0czsKICB9CiAgZnVuY3Rpb24gcnNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIE1hdGguZmxvb3IobnVtIC8gMiAqKiBiaXRzKTsKICB9CiAgdmFyIENTSSA9IGNsYXNzIGV4dGVuZHMgSW5kZXhGaWxlIHsKICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHsKICAgICAgc3VwZXIoYXJncyk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gMDsKICAgICAgdGhpcy5kZXB0aCA9IDA7CiAgICAgIHRoaXMubWluU2hpZnQgPSAwOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZklkKSB7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2UoKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgaWR4ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoIWlkeCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCB7IHN0YXRzIH0gPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmIChzdGF0cykgewogICAgICAgIHJldHVybiBzdGF0cy5saW5lQ291bnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgYXN5bmMgaW5kZXhDb3YoKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIHBhcnNlQXV4RGF0YShieXRlcywgb2Zmc2V0LCBhdXhMZW5ndGgpIHsKICAgICAgaWYgKGF1eExlbmd0aCA8IDMwKSB7CiAgICAgICAgcmV0dXJuIHt9OwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSB7fTsKICAgICAgZGF0YS5mb3JtYXRGbGFncyA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCk7CiAgICAgIGRhdGEuY29vcmRpbmF0ZVR5cGUgPSBkYXRhLmZvcm1hdEZsYWdzICYgNjU1MzYgPyAiemVyby1iYXNlZC1oYWxmLW9wZW4iIDogIjEtYmFzZWQtY2xvc2VkIjsKICAgICAgZGF0YS5mb3JtYXQgPSB7IDA6ICJnZW5lcmljIiwgMTogIlNBTSIsIDI6ICJWQ0YiIH1bZGF0YS5mb3JtYXRGbGFncyAmIDE1XTsKICAgICAgaWYgKCFkYXRhLmZvcm1hdCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBUYWJpeCBwcmVzZXQgZm9ybWF0IGZsYWdzICR7ZGF0YS5mb3JtYXRGbGFnc31gKTsKICAgICAgfQogICAgICBkYXRhLmNvbHVtbk51bWJlcnMgPSB7CiAgICAgICAgcmVmOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyA0KSwKICAgICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgOCksCiAgICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxMikKICAgICAgfTsKICAgICAgZGF0YS5tZXRhVmFsdWUgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxNik7CiAgICAgIGRhdGEubWV0YUNoYXIgPSBkYXRhLm1ldGFWYWx1ZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YS5tZXRhVmFsdWUpIDogIiI7CiAgICAgIGRhdGEuc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMjApOwogICAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDI0KTsKICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zdWJhcnJheShvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMjggKyBuYW1lU2VjdGlvbkxlbmd0aCkpKTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBfcGFyc2VOYW1lQnl0ZXMobmFtZXNCeXRlcykgewogICAgICBsZXQgY3VyclJlZklkID0gMDsKICAgICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwOwogICAgICBjb25zdCByZWZJZFRvTmFtZSA9IFtdOwogICAgICBjb25zdCByZWZOYW1lVG9JZCA9IHt9OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBpZiAoIW5hbWVzQnl0ZXNbaV0pIHsKICAgICAgICAgIGlmIChjdXJyTmFtZVN0YXJ0IDwgaSkgewogICAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoInV0ZjgiLCBjdXJyTmFtZVN0YXJ0LCBpKTsKICAgICAgICAgICAgcmVmTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxKHJlZk5hbWUpOwogICAgICAgICAgICByZWZJZFRvTmFtZVtjdXJyUmVmSWRdID0gcmVmTmFtZTsKICAgICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjdXJyUmVmSWQgKz0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH07CiAgICB9CiAgICBhc3luYyBfcGFyc2Uob3B0cykgewogICAgICBjb25zdCBkYXRhID0geyBjc2k6IHRydWUsIG1heEJsb2NrU2l6ZTogMSA8PCAxNiB9OwogICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmZpbGVoYW5kbGUucmVhZEZpbGUob3B0cyk7CiAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgdW56aXAoYnVmZmVyKTsKICAgICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSA9PT0gQ1NJMV9NQUdJQykgewogICAgICAgIGRhdGEuY3NpVmVyc2lvbiA9IDE7CiAgICAgIH0gZWxzZSBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kyX01BR0lDKSB7CiAgICAgICAgZGF0YS5jc2lWZXJzaW9uID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIENTSSBmaWxlIik7CiAgICAgIH0KICAgICAgdGhpcy5taW5TaGlmdCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDQpOwogICAgICB0aGlzLmRlcHRoID0gYnl0ZXMucmVhZEludDMyTEUoOCk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gKCgxIDw8ICh0aGlzLmRlcHRoICsgMSkgKiAzKSAtIDEpIC8gNzsKICAgICAgY29uc3QgYXV4TGVuZ3RoID0gYnl0ZXMucmVhZEludDMyTEUoMTIpOwogICAgICBpZiAoYXV4TGVuZ3RoKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0aGlzLnBhcnNlQXV4RGF0YShieXRlcywgMTYsIGF1eExlbmd0aCkpOwogICAgICB9CiAgICAgIGRhdGEucmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSgxNiArIGF1eExlbmd0aCk7CiAgICAgIGRhdGEuaW5kaWNlcyA9IG5ldyBBcnJheShkYXRhLnJlZkNvdW50KTsKICAgICAgbGV0IGN1cnJPZmZzZXQgPSAxNiArIGF1eExlbmd0aCArIDQ7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5yZWZDb3VudDsgaSArPSAxKSB7CiAgICAgICAgYXdhaXQgYWJvcnRCcmVha1BvaW50KG9wdHMuc2lnbmFsKTsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICBjb25zdCBiaW5JbmRleCA9IHt9OwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGlmIChiaW4gPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgICBzdGF0cyA9IHRoaXMucGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIGN1cnJPZmZzZXQgKyA0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0ICsgOCArIDQgKyAxNiArIDE2OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbG9mZnNldCA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDQpOwogICAgICAgICAgICB0aGlzLl9maW5kRmlyc3REYXRhKGRhdGEsIGxvZmZzZXQpOwogICAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCArIDEyKTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gbmV3IEFycmF5KGNodW5rQ291bnQpOwogICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgICAgIGNvbnN0IHUgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KTsKICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2OwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRhdGEuaW5kaWNlc1tpXSA9IHsgYmluSW5kZXgsIHN0YXRzIH07CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBwYXJzZVBzZXVkb0JpbihieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihpbXBvcnRfbG9uZzMuZGVmYXVsdC5mcm9tQnl0ZXNMRShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcywgb2Zmc2V0ICsgMjgsIG9mZnNldCArIDM2KSwgdHJ1ZSkpOwogICAgICByZXR1cm4geyBsaW5lQ291bnQgfTsKICAgIH0KICAgIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZklkLCBtaW4sIG1heCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChtaW4gPCAwKSB7CiAgICAgICAgbWluID0gMDsKICAgICAgfQogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBjb25zdCBiYSA9IGluZGV4RGF0YSA9PT0gbnVsbCB8fCBpbmRleERhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFiYSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCBvdmVybGFwcGluZ0JpbnMgPSB0aGlzLnJlZzJiaW5zKG1pbiwgbWF4KTsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykgewogICAgICAgIGZvciAobGV0IGJpbiA9IHN0YXJ0OyBiaW4gPD0gZW5kOyBiaW4rKykgewogICAgICAgICAgaWYgKGJhLmJpbkluZGV4W2Jpbl0pIHsKICAgICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXTsKICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBiaW5DaHVua3MubGVuZ3RoOyArK2MpIHsKICAgICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3B0aW1pemVDaHVua3MoY2h1bmtzLCBuZXcgVmlydHVhbE9mZnNldCgwLCAwKSk7CiAgICB9CiAgICByZWcyYmlucyhiZWcsIGVuZCkgewogICAgICBiZWcgLT0gMTsKICAgICAgaWYgKGJlZyA8IDEpIHsKICAgICAgICBiZWcgPSAxOwogICAgICB9CiAgICAgIGlmIChlbmQgPiAyICoqIDUwKSB7CiAgICAgICAgZW5kID0gMiAqKiAzNDsKICAgICAgfQogICAgICBlbmQgLT0gMTsKICAgICAgbGV0IGwgPSAwOwogICAgICBsZXQgdCA9IDA7CiAgICAgIGxldCBzID0gdGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzOwogICAgICBjb25zdCBiaW5zID0gW107CiAgICAgIGZvciAoOyBsIDw9IHRoaXMuZGVwdGg7IHMgLT0gMywgdCArPSBsc2hpZnQoMSwgbCAqIDMpLCBsICs9IDEpIHsKICAgICAgICBjb25zdCBiID0gdCArIHJzaGlmdChiZWcsIHMpOwogICAgICAgIGNvbnN0IGUgPSB0ICsgcnNoaWZ0KGVuZCwgcyk7CiAgICAgICAgaWYgKGUgLSBiICsgYmlucy5sZW5ndGggPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdWVyeSAke2JlZ30tJHtlbmR9IGlzIHRvbyBsYXJnZSBmb3IgY3VycmVudCBiaW5uaW5nIHNjaGVtZSAoc2hpZnQgJHt0aGlzLm1pblNoaWZ0fSwgZGVwdGggJHt0aGlzLmRlcHRofSksIHRyeSBhIHNtYWxsZXIgcXVlcnkgb3IgYSBjb2Fyc2VyIGluZGV4IGJpbm5pbmcgc2NoZW1lYCk7CiAgICAgICAgfQogICAgICAgIGJpbnMucHVzaChbYiwgZV0pOwogICAgICB9CiAgICAgIHJldHVybiBiaW5zOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL2JhbUZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXJfY3JjMzIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyX2NyYzMyKCkpOwogIHZhciBpbXBvcnRfb2JqZWN0ID0gX190b01vZHVsZShyZXF1aXJlX29iamVjdCgpKTsKICB2YXIgaW1wb3J0X2Fib3J0YWJsZV9wcm9taXNlX2NhY2hlID0gX190b01vZHVsZShyZXF1aXJlX2VzbSgpKTsKICB2YXIgaW1wb3J0X3F1aWNrX2xydSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9xdWlja19scnUoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3JlY29yZC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vY29uc3RhbnRzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBjb25zdGFudHNfZGVmYXVsdCA9IHsKICAgIEJBTV9GUEFJUkVEOiAxLAogICAgQkFNX0ZQUk9QRVJfUEFJUjogMiwKICAgIEJBTV9GVU5NQVA6IDQsCiAgICBCQU1fRk1VTk1BUDogOCwKICAgIEJBTV9GUkVWRVJTRTogMTYsCiAgICBCQU1fRk1SRVZFUlNFOiAzMiwKICAgIEJBTV9GUkVBRDE6IDY0LAogICAgQkFNX0ZSRUFEMjogMTI4LAogICAgQkFNX0ZTRUNPTkRBUlk6IDI1NiwKICAgIEJBTV9GUUNGQUlMOiA1MTIsCiAgICBCQU1fRkRVUDogMTAyNCwKICAgIEJBTV9GU1VQUExFTUVOVEFSWTogMjA0OAogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3JlY29yZC5qcwogIHZhciBTRVFSRVRfREVDT0RFUiA9ICI9QUNNR1JTVlRXWUhLREJOIi5zcGxpdCgiIik7CiAgdmFyIENJR0FSX0RFQ09ERVIgPSAiTUlETlNIUD1YPz8/Pz8/PyIuc3BsaXQoIiIpOwogIHZhciBCYW1SZWNvcmQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihhcmdzKSB7CiAgICAgIHRoaXMuZGF0YSA9IHt9OwogICAgICB0aGlzLl90YWdMaXN0ID0gW107CiAgICAgIHRoaXMuX2FsbFRhZ3NQYXJzZWQgPSBmYWxzZTsKICAgICAgY29uc3QgeyBieXRlcywgZmlsZU9mZnNldCB9ID0gYXJnczsKICAgICAgY29uc3QgeyBieXRlQXJyYXksIHN0YXJ0IH0gPSBieXRlczsKICAgICAgdGhpcy5kYXRhID0ge307CiAgICAgIHRoaXMuYnl0ZXMgPSBieXRlczsKICAgICAgdGhpcy5faWQgPSBmaWxlT2Zmc2V0OwogICAgICB0aGlzLl9yZWZJRCA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShzdGFydCArIDQpOwogICAgICB0aGlzLmRhdGEuc3RhcnQgPSBieXRlQXJyYXkucmVhZEludDMyTEUoc3RhcnQgKyA4KTsKICAgICAgdGhpcy5mbGFncyA9IChieXRlQXJyYXkucmVhZEludDMyTEUoc3RhcnQgKyAxNikgJiA0Mjk0OTAxNzYwKSA+PiAxNjsKICAgIH0KICAgIGdldChmaWVsZCkgewogICAgICBpZiAodGhpc1tmaWVsZF0pIHsKICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkXSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtmaWVsZF07CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YVtmaWVsZF0gPSB0aGlzW2ZpZWxkXSgpOwogICAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9nZXQoZmllbGQudG9Mb3dlckNhc2UoKSk7CiAgICB9CiAgICBlbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmdldCgic3RhcnQiKSArIHRoaXMuZ2V0KCJsZW5ndGhfb25fcmVmIik7CiAgICB9CiAgICBzZXFfaWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9yZWZJRDsKICAgIH0KICAgIF9nZXQoZmllbGQpIHsKICAgICAgaWYgKGZpZWxkIGluIHRoaXMuZGF0YSkgewogICAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdOwogICAgICB9CiAgICAgIHRoaXMuZGF0YVtmaWVsZF0gPSB0aGlzLl9wYXJzZVRhZyhmaWVsZCk7CiAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdOwogICAgfQogICAgX3RhZ3MoKSB7CiAgICAgIHRoaXMuX3BhcnNlQWxsVGFncygpOwogICAgICBsZXQgdGFncyA9IFsic2VxIl07CiAgICAgIGlmICghdGhpcy5pc1NlZ21lbnRVbm1hcHBlZCgpKSB7CiAgICAgICAgdGFncy5wdXNoKCJzdGFydCIsICJlbmQiLCAic3RyYW5kIiwgInNjb3JlIiwgInF1YWwiLCAiTVEiLCAiQ0lHQVIiLCAibGVuZ3RoX29uX3JlZiIsICJ0ZW1wbGF0ZV9sZW5ndGgiKTsKICAgICAgfQogICAgICBpZiAodGhpcy5pc1BhaXJlZCgpKSB7CiAgICAgICAgdGFncy5wdXNoKCJuZXh0X3NlZ21lbnRfcG9zaXRpb24iLCAicGFpcl9vcmllbnRhdGlvbiIpOwogICAgICB9CiAgICAgIHRhZ3MgPSB0YWdzLmNvbmNhdCh0aGlzLl90YWdMaXN0IHx8IFtdKTsKICAgICAgT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKChrKSA9PiB7CiAgICAgICAgaWYgKGtbMF0gIT09ICJfIiAmJiBrICE9PSAibmV4dF9zZXFfaWQiKSB7CiAgICAgICAgICB0YWdzLnB1c2goayk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgY29uc3Qgc2VlbiA9IHt9OwogICAgICByZXR1cm4gdGFncy5maWx0ZXIoKHQpID0+IHsKICAgICAgICBpZiAodCBpbiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhW3RdID09PSB2b2lkIDAgfHwgdCA9PT0gIkNHIiB8fCB0ID09PSAiY2ciKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGx0ID0gdC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHMgPSBzZWVuW2x0XTsKICAgICAgICBzZWVuW2x0XSA9IHRydWU7CiAgICAgICAgcmV0dXJuICFzOwogICAgICB9KTsKICAgIH0KICAgIHBhcmVudCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGNoaWxkcmVuKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoInN1YmZlYXR1cmVzIik7CiAgICB9CiAgICBpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2lkOwogICAgfQogICAgbXEoKSB7CiAgICAgIGNvbnN0IG1xID0gKHRoaXMuZ2V0KCJfYmluX21xX25sIikgJiA2NTI4MCkgPj4gODsKICAgICAgcmV0dXJuIG1xID09PSAyNTUgPyB2b2lkIDAgOiBtcTsKICAgIH0KICAgIHNjb3JlKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoIm1xIik7CiAgICB9CiAgICBxdWFsKCkgewogICAgICB2YXIgX2E7CiAgICAgIHJldHVybiAoX2EgPSB0aGlzLnF1YWxSYXcoKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmpvaW4oIiAiKTsKICAgIH0KICAgIHF1YWxSYXcoKSB7CiAgICAgIGlmICh0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkpIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9CiAgICAgIGNvbnN0IHsgc3RhcnQsIGJ5dGVBcnJheSB9ID0gdGhpcy5ieXRlczsKICAgICAgY29uc3QgcCA9IHN0YXJ0ICsgMzYgKyB0aGlzLmdldCgiX2xfcmVhZF9uYW1lIikgKyB0aGlzLmdldCgiX25fY2lnYXJfb3AiKSAqIDQgKyB0aGlzLmdldCgiX3NlcV9ieXRlcyIpOwogICAgICBjb25zdCBsc2VxID0gdGhpcy5nZXQoInNlcV9sZW5ndGgiKTsKICAgICAgcmV0dXJuIGJ5dGVBcnJheS5zdWJhcnJheShwLCBwICsgbHNlcSk7CiAgICB9CiAgICBzdHJhbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpID8gLTEgOiAxOwogICAgfQogICAgbXVsdGlfc2VnbWVudF9uZXh0X3NlZ21lbnRfc3RyYW5kKCkgewogICAgICBpZiAodGhpcy5pc01hdGVVbm1hcHBlZCgpKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAtMSA6IDE7CiAgICB9CiAgICBuYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoIl9yZWFkX25hbWUiKTsKICAgIH0KICAgIF9yZWFkX25hbWUoKSB7CiAgICAgIGNvbnN0IG5sID0gdGhpcy5nZXQoIl9sX3JlYWRfbmFtZSIpOwogICAgICBjb25zdCB7IGJ5dGVBcnJheSwgc3RhcnQgfSA9IHRoaXMuYnl0ZXM7CiAgICAgIHJldHVybiBieXRlQXJyYXkudG9TdHJpbmcoImFzY2lpIiwgc3RhcnQgKyAzNiwgc3RhcnQgKyAzNiArIG5sIC0gMSk7CiAgICB9CiAgICBfcGFyc2VUYWcodGFnTmFtZSkgewogICAgICBpZiAodGhpcy5fYWxsVGFnc1BhcnNlZCkgewogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0KICAgICAgY29uc3QgeyBieXRlQXJyYXksIHN0YXJ0IH0gPSB0aGlzLmJ5dGVzOwogICAgICBsZXQgcCA9IHRoaXMuX3RhZ09mZnNldCB8fCBzdGFydCArIDM2ICsgdGhpcy5nZXQoIl9sX3JlYWRfbmFtZSIpICsgdGhpcy5nZXQoIl9uX2NpZ2FyX29wIikgKiA0ICsgdGhpcy5nZXQoIl9zZXFfYnl0ZXMiKSArIHRoaXMuZ2V0KCJzZXFfbGVuZ3RoIik7CiAgICAgIGNvbnN0IGJsb2NrRW5kID0gdGhpcy5ieXRlcy5lbmQ7CiAgICAgIGxldCBsY1RhZzsKICAgICAgd2hpbGUgKHAgPCBibG9ja0VuZCAmJiBsY1RhZyAhPT0gdGFnTmFtZSkgewogICAgICAgIGNvbnN0IHRhZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZUFycmF5W3BdLCBieXRlQXJyYXlbcCArIDFdKTsKICAgICAgICBsY1RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVBcnJheVtwICsgMl0pOwogICAgICAgIHAgKz0gMzsKICAgICAgICBsZXQgdmFsdWU7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVBcnJheVtwXSk7CiAgICAgICAgICAgIHAgKz0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJpIjoKICAgICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJJIjoKICAgICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZFVJbnQzMkxFKHApOwogICAgICAgICAgICBwICs9IDQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRJbnQ4KHApOwogICAgICAgICAgICBwICs9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQyI6CiAgICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRVSW50OChwKTsKICAgICAgICAgICAgcCArPSAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkSW50MTZMRShwKTsKICAgICAgICAgICAgcCArPSAyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIlMiOgogICAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkVUludDE2TEUocCk7CiAgICAgICAgICAgIHAgKz0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJmIjoKICAgICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZEZsb2F0TEUocCk7CiAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJaIjoKICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICB2YWx1ZSA9ICIiOwogICAgICAgICAgICB3aGlsZSAocCA8PSBibG9ja0VuZCkgewogICAgICAgICAgICAgIGNvbnN0IGNjID0gYnl0ZUFycmF5W3ArK107CiAgICAgICAgICAgICAgaWYgKGNjID09PSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjYyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQiI6IHsKICAgICAgICAgICAgdmFsdWUgPSAiIjsKICAgICAgICAgICAgY29uc3QgY2MgPSBieXRlQXJyYXlbcCsrXTsKICAgICAgICAgICAgY29uc3QgQnR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNjKTsKICAgICAgICAgICAgY29uc3QgbGltaXQgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgaWYgKEJ0eXBlID09PSAiaSIpIHsKICAgICAgICAgICAgICBpZiAodGFnID09PSAiQ0ciKSB7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvcCA9IGNpZ29wID4+IDQ7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDE1XTsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbG9wICsgb3A7CiAgICAgICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKTsKICAgICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiLCI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcCArPSA0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQnR5cGUgPT09ICJJIikgewogICAgICAgICAgICAgIGlmICh0YWcgPT09ICJDRyIpIHsKICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykgewogICAgICAgICAgICAgICAgICBjb25zdCBjaWdvcCA9IGJ5dGVBcnJheS5yZWFkVUludDMyTEUocCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvcCA9IGNpZ29wID4+IDQ7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDE1XTsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbG9wICsgb3A7CiAgICAgICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkVUludDMyTEUocCk7CiAgICAgICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiwiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEJ0eXBlID09PSAicyIpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHsKICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50MTZMRShwKTsKICAgICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIsIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHAgKz0gMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEJ0eXBlID09PSAiUyIpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHsKICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkVUludDE2TEUocCk7CiAgICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkgewogICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiLCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwICs9IDI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChCdHlwZSA9PT0gImMiKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZEludDgocCk7CiAgICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkgewogICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiLCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwICs9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChCdHlwZSA9PT0gIkMiKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZFVJbnQ4KHApOwogICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcCArPSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQnR5cGUgPT09ICJmIikgewogICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykgewogICAgICAgICAgICAgICAgdmFsdWUgKz0gYnl0ZUFycmF5LnJlYWRGbG9hdExFKHApOwogICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcCArPSA0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biBCQU0gdGFnIHR5cGUgJyR7dHlwZX0nLCB0YWdzIG1heSBiZSBpbmNvbXBsZXRlYCk7CiAgICAgICAgICAgIHZhbHVlID0gdm9pZCAwOwogICAgICAgICAgICBwID0gYmxvY2tFbmQ7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3RhZ09mZnNldCA9IHA7CiAgICAgICAgdGhpcy5fdGFnTGlzdC5wdXNoKHRhZyk7CiAgICAgICAgaWYgKGxjVGFnID09PSB0YWdOYW1lKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YVtsY1RhZ10gPSB2YWx1ZTsKICAgICAgfQogICAgICB0aGlzLl9hbGxUYWdzUGFyc2VkID0gdHJ1ZTsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIF9wYXJzZUFsbFRhZ3MoKSB7CiAgICAgIHRoaXMuX3BhcnNlVGFnKCIiKTsKICAgIH0KICAgIF9wYXJzZUNpZ2FyKGNpZ2FyKSB7CiAgICAgIHJldHVybiBjaWdhci5tYXRjaCgvXGQrXEQvZykubWFwKChvcCkgPT4gW29wLm1hdGNoKC9cRC8pWzBdLnRvVXBwZXJDYXNlKCksIHBhcnNlSW50KG9wLCAxMCldKTsKICAgIH0KICAgIGlzUGFpcmVkKCkgewogICAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIGNvbnN0YW50c19kZWZhdWx0LkJBTV9GUEFJUkVEKTsKICAgIH0KICAgIGlzUHJvcGVybHlQYWlyZWQoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZQUk9QRVJfUEFJUik7CiAgICB9CiAgICBpc1NlZ21lbnRVbm1hcHBlZCgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRlVOTUFQKTsKICAgIH0KICAgIGlzTWF0ZVVubWFwcGVkKCkgewogICAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIGNvbnN0YW50c19kZWZhdWx0LkJBTV9GTVVOTUFQKTsKICAgIH0KICAgIGlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRlJFVkVSU0UpOwogICAgfQogICAgaXNNYXRlUmV2ZXJzZUNvbXBsZW1lbnRlZCgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRk1SRVZFUlNFKTsKICAgIH0KICAgIGlzUmVhZDEoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZSRUFEMSk7CiAgICB9CiAgICBpc1JlYWQyKCkgewogICAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIGNvbnN0YW50c19kZWZhdWx0LkJBTV9GUkVBRDIpOwogICAgfQogICAgaXNTZWNvbmRhcnkoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZTRUNPTkRBUlkpOwogICAgfQogICAgaXNGYWlsZWRRYygpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRlFDRkFJTCk7CiAgICB9CiAgICBpc0R1cGxpY2F0ZSgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRkRVUCk7CiAgICB9CiAgICBpc1N1cHBsZW1lbnRhcnkoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZTVVBQTEVNRU5UQVJZKTsKICAgIH0KICAgIGNpZ2FyKCkgewogICAgICBpZiAodGhpcy5pc1NlZ21lbnRVbm1hcHBlZCgpKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdCB7IGJ5dGVBcnJheSwgc3RhcnQgfSA9IHRoaXMuYnl0ZXM7CiAgICAgIGNvbnN0IG51bUNpZ2FyT3BzID0gdGhpcy5nZXQoIl9uX2NpZ2FyX29wIik7CiAgICAgIGxldCBwID0gc3RhcnQgKyAzNiArIHRoaXMuZ2V0KCJfbF9yZWFkX25hbWUiKTsKICAgICAgY29uc3Qgc2VxTGVuID0gdGhpcy5nZXQoInNlcV9sZW5ndGgiKTsKICAgICAgbGV0IGNpZ2FyID0gIiI7CiAgICAgIGxldCBscmVmID0gMDsKICAgICAgbGV0IGNpZ29wID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApOwogICAgICBsZXQgbG9wID0gY2lnb3AgPj4gNDsKICAgICAgbGV0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDE1XTsKICAgICAgaWYgKG9wID09PSAiUyIgJiYgbG9wID09PSBzZXFMZW4pIHsKICAgICAgICBwICs9IDQ7CiAgICAgICAgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgbG9wID0gY2lnb3AgPj4gNDsKICAgICAgICBvcCA9IENJR0FSX0RFQ09ERVJbY2lnb3AgJiAxNV07CiAgICAgICAgaWYgKG9wICE9PSAiTiIpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiQ0cgdGFnIHdpdGggbm8gTiB0YWciKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWYgPSBsb3A7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCJDRyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbnVtQ2lnYXJPcHM7ICsrYykgewogICAgICAgICAgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICBsb3AgPSBjaWdvcCA+PiA0OwogICAgICAgICAgb3AgPSBDSUdBUl9ERUNPREVSW2NpZ29wICYgMTVdOwogICAgICAgICAgY2lnYXIgKz0gbG9wICsgb3A7CiAgICAgICAgICBpZiAob3AgIT09ICJIIiAmJiBvcCAhPT0gIlMiICYmIG9wICE9PSAiSSIpIHsKICAgICAgICAgICAgbHJlZiArPSBsb3A7CiAgICAgICAgICB9CiAgICAgICAgICBwICs9IDQ7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YS5sZW5ndGhfb25fcmVmID0gbHJlZjsKICAgICAgICByZXR1cm4gY2lnYXI7CiAgICAgIH0KICAgIH0KICAgIF9mbGFncygpIHsKICAgIH0KICAgIGxlbmd0aF9vbl9yZWYoKSB7CiAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoX29uX3JlZikgewogICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoX29uX3JlZjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmdldCgiY2lnYXIiKTsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWY7CiAgICAgIH0KICAgIH0KICAgIF9uX2NpZ2FyX29wKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoIl9mbGFnX25jIikgJiA2NTUzNTsKICAgIH0KICAgIF9sX3JlYWRfbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0KCJfYmluX21xX25sIikgJiAyNTU7CiAgICB9CiAgICBfc2VxX2J5dGVzKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoInNlcV9sZW5ndGgiKSArIDEgPj4gMTsKICAgIH0KICAgIGdldFJlYWRCYXNlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VxKCk7CiAgICB9CiAgICBzZXEoKSB7CiAgICAgIGNvbnN0IHsgYnl0ZUFycmF5LCBzdGFydCB9ID0gdGhpcy5ieXRlczsKICAgICAgY29uc3QgcCA9IHN0YXJ0ICsgMzYgKyB0aGlzLmdldCgiX2xfcmVhZF9uYW1lIikgKyB0aGlzLmdldCgiX25fY2lnYXJfb3AiKSAqIDQ7CiAgICAgIGNvbnN0IHNlcUJ5dGVzID0gdGhpcy5nZXQoIl9zZXFfYnl0ZXMiKTsKICAgICAgY29uc3QgbGVuID0gdGhpcy5nZXQoInNlcV9sZW5ndGgiKTsKICAgICAgbGV0IGJ1ZiA9ICIiOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2VxQnl0ZXM7ICsraikgewogICAgICAgIGNvbnN0IHNiID0gYnl0ZUFycmF5W3AgKyBqXTsKICAgICAgICBidWYgKz0gU0VRUkVUX0RFQ09ERVJbKHNiICYgMjQwKSA+PiA0XTsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPCBsZW4pIHsKICAgICAgICAgIGJ1ZiArPSBTRVFSRVRfREVDT0RFUltzYiAmIDE1XTsKICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGJ1ZjsKICAgIH0KICAgIGdldFBhaXJPcmllbnRhdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkgJiYgIXRoaXMuaXNNYXRlVW5tYXBwZWQoKSAmJiB0aGlzLl9yZWZJRCA9PT0gdGhpcy5fbmV4dF9yZWZpZCgpKSB7CiAgICAgICAgY29uc3QgczEgPSB0aGlzLmlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpID8gIlIiIDogIkYiOwogICAgICAgIGNvbnN0IHMyID0gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAiUiIgOiAiRiI7CiAgICAgICAgbGV0IG8xID0gIiAiOwogICAgICAgIGxldCBvMiA9ICIgIjsKICAgICAgICBpZiAodGhpcy5pc1JlYWQxKCkpIHsKICAgICAgICAgIG8xID0gIjEiOwogICAgICAgICAgbzIgPSAiMiI7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUmVhZDIoKSkgewogICAgICAgICAgbzEgPSAiMiI7CiAgICAgICAgICBvMiA9ICIxIjsKICAgICAgICB9CiAgICAgICAgY29uc3QgdG1wID0gW107CiAgICAgICAgY29uc3QgaXNpemUgPSB0aGlzLnRlbXBsYXRlX2xlbmd0aCgpOwogICAgICAgIGlmIChpc2l6ZSA+IDApIHsKICAgICAgICAgIHRtcFswXSA9IHMxOwogICAgICAgICAgdG1wWzFdID0gbzE7CiAgICAgICAgICB0bXBbMl0gPSBzMjsKICAgICAgICAgIHRtcFszXSA9IG8yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0bXBbMl0gPSBzMTsKICAgICAgICAgIHRtcFszXSA9IG8xOwogICAgICAgICAgdG1wWzBdID0gczI7CiAgICAgICAgICB0bXBbMV0gPSBvMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRtcC5qb2luKCIiKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIF9iaW5fbXFfbmwoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMTIpOwogICAgfQogICAgX2ZsYWdfbmMoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMTYpOwogICAgfQogICAgc2VxX2xlbmd0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAyMCk7CiAgICB9CiAgICBfbmV4dF9yZWZpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAyNCk7CiAgICB9CiAgICBfbmV4dF9wb3MoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMjgpOwogICAgfQogICAgdGVtcGxhdGVfbGVuZ3RoKCkgewogICAgICByZXR1cm4gdGhpcy5ieXRlcy5ieXRlQXJyYXkucmVhZEludDMyTEUodGhpcy5ieXRlcy5zdGFydCArIDMyKTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgY29uc3QgZGF0YSA9IHt9OwogICAgICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKChrKSA9PiB7CiAgICAgICAgaWYgKGsuY2hhckF0KDApID09PSAiXyIgfHwgayA9PT0gImJ5dGVzIikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBkYXRhW2tdID0gdGhpc1trXTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3NhbS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBwYXJzZUhlYWRlclRleHQodGV4dCkgewogICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KC9ccj9cbi8pOwogICAgY29uc3QgZGF0YSA9IFtdOwogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbdGFnLCAuLi5maWVsZHNdID0gbGluZS5zcGxpdCgvXHQvKTsKICAgICAgY29uc3QgcGFyc2VkRmllbGRzID0gZmllbGRzLm1hcCgoZikgPT4gewogICAgICAgIGNvbnN0IFtmaWVsZFRhZywgdmFsdWVdID0gZi5zcGxpdCgiOiIsIDIpOwogICAgICAgIHJldHVybiB7IHRhZzogZmllbGRUYWcsIHZhbHVlIH07CiAgICAgIH0pOwogICAgICBpZiAodGFnKSB7CiAgICAgICAgZGF0YS5wdXNoKHsgdGFnOiB0YWcuc3Vic3RyKDEpLCBkYXRhOiBwYXJzZWRGaWVsZHMgfSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGRhdGE7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS9iYW1GaWxlLmpzCiAgdmFyIEJBTV9NQUdJQyA9IDIxODQwMTk0OwogIHZhciBibG9ja0xlbiA9IDEgPDwgMTY7CiAgZnVuY3Rpb24gZmxhdChhcnIpIHsKICAgIHJldHVybiBbXS5jb25jYXQoLi4uYXJyKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZ2VuMmFycmF5KGdlbikgewogICAgY29uc3Qgb3V0ID0gW107CiAgICBmb3IgYXdhaXQgKGNvbnN0IHggb2YgZ2VuKSB7CiAgICAgIG91dC5wdXNoKHgpOwogICAgfQogICAgcmV0dXJuIG91dDsKICB9CiAgdmFyIEJhbUZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih7IGJhbUZpbGVoYW5kbGUsIGJhbVBhdGgsIGJhbVVybCwgYmFpUGF0aCwgYmFpRmlsZWhhbmRsZSwgYmFpVXJsLCBjc2lQYXRoLCBjc2lGaWxlaGFuZGxlLCBjc2lVcmwsIGZldGNoU2l6ZUxpbWl0LCBjaHVua1NpemVMaW1pdCwgeWllbGRUaHJlYWRUaW1lID0gMTAwLCByZW5hbWVSZWZTZXFzID0gKG4pID0+IG4gfSkgewogICAgICB0aGlzLmZlYXR1cmVDYWNoZSA9IG5ldyBpbXBvcnRfYWJvcnRhYmxlX3Byb21pc2VfY2FjaGUuZGVmYXVsdCh7CiAgICAgICAgY2FjaGU6IG5ldyBpbXBvcnRfcXVpY2tfbHJ1LmRlZmF1bHQoewogICAgICAgICAgbWF4U2l6ZTogNTAKICAgICAgICB9KSwKICAgICAgICBmaWxsOiBhc3luYyAoeyBjaHVuaywgb3B0cyB9LCBzaWduYWwpID0+IHsKICAgICAgICAgIGNvbnN0IHsgZGF0YSwgY3Bvc2l0aW9ucywgZHBvc2l0aW9ucyB9ID0gYXdhaXQgdGhpcy5fcmVhZENodW5rKHsKICAgICAgICAgICAgY2h1bmssCiAgICAgICAgICAgIG9wdHM6IHsgLi4ub3B0cywgc2lnbmFsIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZmVhdHMgPSBhd2FpdCB0aGlzLnJlYWRCYW1GZWF0dXJlcyhkYXRhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuayk7CiAgICAgICAgICByZXR1cm4gZmVhdHM7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZW5hbWVSZWZTZXEgPSByZW5hbWVSZWZTZXFzOwogICAgICBpZiAoYmFtRmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuYmFtID0gYmFtRmlsZWhhbmRsZTsKICAgICAgfSBlbHNlIGlmIChiYW1QYXRoKSB7CiAgICAgICAgdGhpcy5iYW0gPSBuZXcgaW1wb3J0X2xvY2FsRmlsZS5kZWZhdWx0KGJhbVBhdGgpOwogICAgICB9IGVsc2UgaWYgKGJhbVVybCkgewogICAgICAgIHRoaXMuYmFtID0gbmV3IFJlbW90ZUZpbGUoYmFtVXJsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBpbml0aWFsaXplIGJhbSIpOwogICAgICB9CiAgICAgIGlmIChjc2lGaWxlaGFuZGxlKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBDU0koeyBmaWxlaGFuZGxlOiBjc2lGaWxlaGFuZGxlIH0pOwogICAgICB9IGVsc2UgaWYgKGNzaVBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IENTSSh7IGZpbGVoYW5kbGU6IG5ldyBpbXBvcnRfbG9jYWxGaWxlLmRlZmF1bHQoY3NpUGF0aCkgfSk7CiAgICAgIH0gZWxzZSBpZiAoY3NpVXJsKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBDU0koeyBmaWxlaGFuZGxlOiBuZXcgUmVtb3RlRmlsZShjc2lVcmwpIH0pOwogICAgICB9IGVsc2UgaWYgKGJhaUZpbGVoYW5kbGUpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IEJBSSh7IGZpbGVoYW5kbGU6IGJhaUZpbGVoYW5kbGUgfSk7CiAgICAgIH0gZWxzZSBpZiAoYmFpUGF0aCkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgQkFJKHsgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChiYWlQYXRoKSB9KTsKICAgICAgfSBlbHNlIGlmIChiYWlVcmwpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IEJBSSh7IGZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlKGJhaVVybCkgfSk7CiAgICAgIH0gZWxzZSBpZiAoYmFtUGF0aCkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgQkFJKHsgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChgJHtiYW1QYXRofS5iYWlgKSB9KTsKICAgICAgfSBlbHNlIGlmIChiYW1VcmwpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IEJBSSh7IGZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlKGAke2JhbVVybH0uYmFpYCkgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gaW5mZXIgaW5kZXggZm9ybWF0Iik7CiAgICAgIH0KICAgICAgdGhpcy5mZXRjaFNpemVMaW1pdCA9IGZldGNoU2l6ZUxpbWl0IHx8IDVlODsKICAgICAgdGhpcy5jaHVua1NpemVMaW1pdCA9IGNodW5rU2l6ZUxpbWl0IHx8IDNlODsKICAgICAgdGhpcy55aWVsZFRocmVhZFRpbWUgPSB5aWVsZFRocmVhZFRpbWU7CiAgICB9CiAgICBhc3luYyBnZXRIZWFkZXIob3JpZ09wdHMgPSB7fSkgewogICAgICBjb25zdCBvcHRzID0gbWFrZU9wdHMob3JpZ09wdHMpOwogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLmluZGV4LnBhcnNlKG9wdHMpOwogICAgICBjb25zdCByZXQgPSBpbmRleERhdGEuZmlyc3REYXRhTGluZSA/IGluZGV4RGF0YS5maXJzdERhdGFMaW5lLmJsb2NrUG9zaXRpb24gKyA2NTUzNSA6IHZvaWQgMDsKICAgICAgbGV0IGJ1ZmZlcjsKICAgICAgaWYgKHJldCkgewogICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYmFtLnJlYWQoaW1wb3J0X2J1ZmZlci5CdWZmZXIuYWxsb2MocmV0ICsgYmxvY2tMZW4pLCAwLCByZXQgKyBibG9ja0xlbiwgMCwgb3B0cyk7CiAgICAgICAgY29uc3QgeyBieXRlc1JlYWQgfSA9IHJlczsKICAgICAgICAoeyBidWZmZXIgfSA9IHJlcyk7CiAgICAgICAgaWYgKCFieXRlc1JlYWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXJyb3IgcmVhZGluZyBoZWFkZXIiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IHJldCkgewogICAgICAgICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDAsIGJ5dGVzUmVhZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgwLCByZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBidWZmZXIgPSBhd2FpdCB0aGlzLmJhbS5yZWFkRmlsZShvcHRzKTsKICAgICAgfQogICAgICBjb25zdCB1bmNiYSA9IGF3YWl0IHVuemlwKGJ1ZmZlcik7CiAgICAgIGlmICh1bmNiYS5yZWFkSW50MzJMRSgwKSAhPT0gQkFNX01BR0lDKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBCQU0gZmlsZSIpOwogICAgICB9CiAgICAgIGNvbnN0IGhlYWRMZW4gPSB1bmNiYS5yZWFkSW50MzJMRSg0KTsKICAgICAgdGhpcy5oZWFkZXIgPSB1bmNiYS50b1N0cmluZygidXRmOCIsIDgsIDggKyBoZWFkTGVuKTsKICAgICAgY29uc3QgeyBjaHJUb0luZGV4LCBpbmRleFRvQ2hyIH0gPSBhd2FpdCB0aGlzLl9yZWFkUmVmU2VxcyhoZWFkTGVuICsgOCwgNjU1MzUsIG9wdHMpOwogICAgICB0aGlzLmNoclRvSW5kZXggPSBjaHJUb0luZGV4OwogICAgICB0aGlzLmluZGV4VG9DaHIgPSBpbmRleFRvQ2hyOwogICAgICByZXR1cm4gcGFyc2VIZWFkZXJUZXh0KHRoaXMuaGVhZGVyKTsKICAgIH0KICAgIGFzeW5jIGdldEhlYWRlclRleHQob3B0cyA9IHt9KSB7CiAgICAgIGF3YWl0IHRoaXMuZ2V0SGVhZGVyKG9wdHMpOwogICAgICByZXR1cm4gdGhpcy5oZWFkZXI7CiAgICB9CiAgICBhc3luYyBfcmVhZFJlZlNlcXMoc3RhcnQsIHJlZlNlcUJ5dGVzLCBvcHRzID0ge30pIHsKICAgICAgaWYgKHN0YXJ0ID4gcmVmU2VxQnl0ZXMpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZFJlZlNlcXMoc3RhcnQsIHJlZlNlcUJ5dGVzICogMiwgb3B0cyk7CiAgICAgIH0KICAgICAgY29uc3Qgc2l6ZSA9IHJlZlNlcUJ5dGVzICsgYmxvY2tMZW47CiAgICAgIGNvbnN0IHsgYnl0ZXNSZWFkLCBidWZmZXIgfSA9IGF3YWl0IHRoaXMuYmFtLnJlYWQoaW1wb3J0X2J1ZmZlci5CdWZmZXIuYWxsb2Moc2l6ZSksIDAsIHJlZlNlcUJ5dGVzLCAwLCBvcHRzKTsKICAgICAgaWYgKCFieXRlc1JlYWQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHJlYWRpbmcgcmVmc2VxcyBmcm9tIGhlYWRlciIpOwogICAgICB9CiAgICAgIGNvbnN0IHVuY2JhID0gYXdhaXQgdW56aXAoYnVmZmVyLnN1YmFycmF5KDAsIE1hdGgubWluKGJ5dGVzUmVhZCwgcmVmU2VxQnl0ZXMpKSk7CiAgICAgIGNvbnN0IG5SZWYgPSB1bmNiYS5yZWFkSW50MzJMRShzdGFydCk7CiAgICAgIGxldCBwID0gc3RhcnQgKyA0OwogICAgICBjb25zdCBjaHJUb0luZGV4ID0ge307CiAgICAgIGNvbnN0IGluZGV4VG9DaHIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUmVmOyBpICs9IDEpIHsKICAgICAgICBjb25zdCBsTmFtZSA9IHVuY2JhLnJlYWRJbnQzMkxFKHApOwogICAgICAgIGNvbnN0IHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcSh1bmNiYS50b1N0cmluZygidXRmOCIsIHAgKyA0LCBwICsgNCArIGxOYW1lIC0gMSkpOwogICAgICAgIGNvbnN0IGxSZWYgPSB1bmNiYS5yZWFkSW50MzJMRShwICsgbE5hbWUgKyA0KTsKICAgICAgICBjaHJUb0luZGV4W3JlZk5hbWVdID0gaTsKICAgICAgICBpbmRleFRvQ2hyLnB1c2goeyByZWZOYW1lLCBsZW5ndGg6IGxSZWYgfSk7CiAgICAgICAgcCA9IHAgKyA4ICsgbE5hbWU7CiAgICAgICAgaWYgKHAgPiB1bmNiYS5sZW5ndGgpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgQkFNIGhlYWRlciBpcyB2ZXJ5IGJpZy4gIFJlLWZldGNoaW5nICR7cmVmU2VxQnl0ZXN9IGJ5dGVzLmApOwogICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRSZWZTZXFzKHN0YXJ0LCByZWZTZXFCeXRlcyAqIDIsIG9wdHMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyBjaHJUb0luZGV4LCBpbmRleFRvQ2hyIH07CiAgICB9CiAgICBhc3luYyBnZXRSZWNvcmRzRm9yUmFuZ2UoY2hyLCBtaW4sIG1heCwgb3B0cyA9IHsKICAgICAgdmlld0FzUGFpcnM6IGZhbHNlLAogICAgICBwYWlyQWNyb3NzQ2hyOiBmYWxzZSwKICAgICAgbWF4SW5zZXJ0U2l6ZTogMmU1CiAgICB9KSB7CiAgICAgIHJldHVybiBmbGF0KGF3YWl0IGdlbjJhcnJheSh0aGlzLnN0cmVhbVJlY29yZHNGb3JSYW5nZShjaHIsIG1pbiwgbWF4LCBvcHRzKSkpOwogICAgfQogICAgYXN5bmMgKnN0cmVhbVJlY29yZHNGb3JSYW5nZShjaHIsIG1pbiwgbWF4LCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdHM7CiAgICAgIGNvbnN0IGNocklkID0gdGhpcy5jaHJUb0luZGV4ICYmIHRoaXMuY2hyVG9JbmRleFtjaHJdOwogICAgICBsZXQgY2h1bmtzOwogICAgICBpZiAoIShjaHJJZCA+PSAwKSkgewogICAgICAgIGNodW5rcyA9IFtdOwogICAgICB9IGVsc2UgewogICAgICAgIGNodW5rcyA9IGF3YWl0IHRoaXMuaW5kZXguYmxvY2tzRm9yUmFuZ2UoY2hySWQsIG1pbiAtIDEsIG1heCwgb3B0cyk7CiAgICAgICAgaWYgKCFjaHVua3MpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXJyb3IgaW4gaW5kZXggZmV0Y2giKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBhd2FpdCBhYm9ydEJyZWFrUG9pbnQoc2lnbmFsKTsKICAgICAgICBjb25zdCBzaXplID0gY2h1bmtzW2ldLmZldGNoZWRTaXplKCk7CiAgICAgICAgaWYgKHNpemUgPiB0aGlzLmNodW5rU2l6ZUxpbWl0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvbyBtYW55IEJBTSBmZWF0dXJlcy4gQkFNIGNodW5rIHNpemUgJHtzaXplfSBieXRlcyBleGNlZWRzIGNodW5rU2l6ZUxpbWl0IG9mICR7dGhpcy5jaHVua1NpemVMaW1pdH1gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgdG90YWxTaXplID0gY2h1bmtzLm1hcCgocykgPT4gcy5mZXRjaGVkU2l6ZSgpKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICAgICAgaWYgKHRvdGFsU2l6ZSA+IHRoaXMuZmV0Y2hTaXplTGltaXQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRhdGEgc2l6ZSBvZiAke3RvdGFsU2l6ZS50b0xvY2FsZVN0cmluZygpfSBieXRlcyBleGNlZWRlZCBmZXRjaCBzaXplIGxpbWl0IG9mICR7dGhpcy5mZXRjaFNpemVMaW1pdC50b0xvY2FsZVN0cmluZygpfSBieXRlc2ApOwogICAgICB9CiAgICAgIHlpZWxkKiB0aGlzLl9mZXRjaENodW5rRmVhdHVyZXMoY2h1bmtzLCBjaHJJZCwgbWluLCBtYXgsIG9wdHMpOwogICAgfQogICAgYXN5bmMgKl9mZXRjaENodW5rRmVhdHVyZXMoY2h1bmtzLCBjaHJJZCwgbWluLCBtYXgsIG9wdHMpIHsKICAgICAgY29uc3QgeyB2aWV3QXNQYWlycyA9IGZhbHNlIH0gPSBvcHRzOwogICAgICBjb25zdCBmZWF0cyA9IFtdOwogICAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IGMgPSBjaHVua3NbaV07CiAgICAgICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMuZmVhdHVyZUNhY2hlLmdldChjLnRvU3RyaW5nKCksIHsKICAgICAgICAgIGNodW5rOiBjLAogICAgICAgICAgb3B0cwogICAgICAgIH0sIG9wdHMuc2lnbmFsKTsKICAgICAgICBjb25zdCByZWNzID0gW107CiAgICAgICAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IHJlY29yZHMubGVuZ3RoOyBpMiArPSAxKSB7CiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gcmVjb3Jkc1tpMl07CiAgICAgICAgICBpZiAoZmVhdHVyZS5zZXFfaWQoKSA9PT0gY2hySWQpIHsKICAgICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJzdGFydCIpID49IG1heCkgewogICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmUuZ2V0KCJlbmQiKSA+PSBtaW4pIHsKICAgICAgICAgICAgICByZWNzLnB1c2goZmVhdHVyZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmVhdHMucHVzaChyZWNzKTsKICAgICAgICB5aWVsZCByZWNzOwogICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2hlY2tBYm9ydFNpZ25hbChvcHRzLnNpZ25hbCk7CiAgICAgIGlmICh2aWV3QXNQYWlycykgewogICAgICAgIHlpZWxkIHRoaXMuZmV0Y2hQYWlycyhjaHJJZCwgZmVhdHMsIG9wdHMpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBmZXRjaFBhaXJzKGNocklkLCBmZWF0cywgb3B0cykgewogICAgICBjb25zdCB7IHBhaXJBY3Jvc3NDaHIgPSBmYWxzZSwgbWF4SW5zZXJ0U2l6ZSA9IDJlNSB9ID0gb3B0czsKICAgICAgY29uc3QgdW5tYXRlZFBhaXJzID0ge307CiAgICAgIGNvbnN0IHJlYWRJZHMgPSB7fTsKICAgICAgZmVhdHMubWFwKChyZXQpID0+IHsKICAgICAgICBjb25zdCByZWFkTmFtZXMgPSB7fTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykgewogICAgICAgICAgY29uc3QgbmFtZSA9IHJldFtpXS5uYW1lKCk7CiAgICAgICAgICBjb25zdCBpZCA9IHJldFtpXS5pZCgpOwogICAgICAgICAgaWYgKCFyZWFkTmFtZXNbbmFtZV0pIHsKICAgICAgICAgICAgcmVhZE5hbWVzW25hbWVdID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHJlYWROYW1lc1tuYW1lXSsrOwogICAgICAgICAgcmVhZElkc1tpZF0gPSAxOwogICAgICAgIH0KICAgICAgICAoMCwgaW1wb3J0X29iamVjdC5kZWZhdWx0KShyZWFkTmFtZXMpLmZvckVhY2goKFtrLCB2XSkgPT4gewogICAgICAgICAgaWYgKHYgPT09IDEpIHsKICAgICAgICAgICAgdW5tYXRlZFBhaXJzW2tdID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIGNvbnN0IG1hdGVQcm9taXNlcyA9IFtdOwogICAgICBmZWF0cy5tYXAoKHJldCkgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCBmID0gcmV0W2ldOwogICAgICAgICAgY29uc3QgbmFtZSA9IGYubmFtZSgpOwogICAgICAgICAgY29uc3Qgc3RhcnQgPSBmLmdldCgic3RhcnQiKTsKICAgICAgICAgIGNvbnN0IHBuZXh0ID0gZi5fbmV4dF9wb3MoKTsKICAgICAgICAgIGNvbnN0IHJuZXh0ID0gZi5fbmV4dF9yZWZpZCgpOwogICAgICAgICAgaWYgKHVubWF0ZWRQYWlyc1tuYW1lXSAmJiAocGFpckFjcm9zc0NociB8fCBybmV4dCA9PT0gY2hySWQgJiYgTWF0aC5hYnMoc3RhcnQgLSBwbmV4dCkgPCBtYXhJbnNlcnRTaXplKSkgewogICAgICAgICAgICBtYXRlUHJvbWlzZXMucHVzaCh0aGlzLmluZGV4LmJsb2Nrc0ZvclJhbmdlKHJuZXh0LCBwbmV4dCwgcG5leHQgKyAxLCBvcHRzKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgY29uc3QgbWF0ZUNodW5rcyA9IGZsYXQoYXdhaXQgUHJvbWlzZS5hbGwobWF0ZVByb21pc2VzKSkuc29ydCgpLmZpbHRlcigoaXRlbSwgcG9zLCBhcnkpID0+ICFwb3MgfHwgaXRlbS50b1N0cmluZygpICE9PSBhcnlbcG9zIC0gMV0udG9TdHJpbmcoKSk7CiAgICAgIGNvbnN0IG1hdGVUb3RhbFNpemUgPSBtYXRlQ2h1bmtzLm1hcCgocykgPT4gcy5mZXRjaGVkU2l6ZSgpKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICAgICAgaWYgKG1hdGVUb3RhbFNpemUgPiB0aGlzLmZldGNoU2l6ZUxpbWl0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkYXRhIHNpemUgb2YgJHttYXRlVG90YWxTaXplLnRvTG9jYWxlU3RyaW5nKCl9IGJ5dGVzIGV4Y2VlZGVkIGZldGNoIHNpemUgbGltaXQgb2YgJHt0aGlzLmZldGNoU2l6ZUxpbWl0LnRvTG9jYWxlU3RyaW5nKCl9IGJ5dGVzYCk7CiAgICAgIH0KICAgICAgY29uc3QgbWF0ZUZlYXRQcm9taXNlcyA9IG1hdGVDaHVua3MubWFwKGFzeW5jIChjKSA9PiB7CiAgICAgICAgY29uc3QgeyBkYXRhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuayB9ID0gYXdhaXQgdGhpcy5fcmVhZENodW5rKHsKICAgICAgICAgIGNodW5rOiBjLAogICAgICAgICAgb3B0cwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGZlYXRzMiA9IGF3YWl0IHRoaXMucmVhZEJhbUZlYXR1cmVzKGRhdGEsIGNwb3NpdGlvbnMsIGRwb3NpdGlvbnMsIGNodW5rKTsKICAgICAgICBjb25zdCBtYXRlUmVjcyA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHMyLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHMyW2ldOwogICAgICAgICAgaWYgKHVubWF0ZWRQYWlyc1tmZWF0dXJlLmdldCgibmFtZSIpXSAmJiAhcmVhZElkc1tmZWF0dXJlLmlkKCldKSB7CiAgICAgICAgICAgIG1hdGVSZWNzLnB1c2goZmVhdHVyZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBtYXRlUmVjczsKICAgICAgfSk7CiAgICAgIHJldHVybiBmbGF0KGF3YWl0IFByb21pc2UuYWxsKG1hdGVGZWF0UHJvbWlzZXMpKTsKICAgIH0KICAgIGFzeW5jIF9yZWFkQ2h1bmsoeyBjaHVuaywgb3B0cyB9KSB7CiAgICAgIGNvbnN0IHNpemUgPSBjaHVuay5mZXRjaGVkU2l6ZSgpOwogICAgICBjb25zdCB7IGJ1ZmZlciwgYnl0ZXNSZWFkIH0gPSBhd2FpdCB0aGlzLmJhbS5yZWFkKGltcG9ydF9idWZmZXIuQnVmZmVyLmFsbG9jKHNpemUpLCAwLCBzaXplLCBjaHVuay5taW52LmJsb2NrUG9zaXRpb24sIG9wdHMpOwogICAgICBjb25zdCB7IGJ1ZmZlcjogZGF0YSwgY3Bvc2l0aW9ucywgZHBvc2l0aW9ucyB9ID0gYXdhaXQgdW56aXBDaHVua1NsaWNlKGJ1ZmZlci5zdWJhcnJheSgwLCBNYXRoLm1pbihieXRlc1JlYWQsIHNpemUpKSwgY2h1bmspOwogICAgICByZXR1cm4geyBkYXRhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuayB9OwogICAgfQogICAgYXN5bmMgcmVhZEJhbUZlYXR1cmVzKGJhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuaykgewogICAgICBsZXQgYmxvY2tTdGFydCA9IDA7CiAgICAgIGNvbnN0IHNpbmsgPSBbXTsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGxldCBsYXN0ID0gK0RhdGUubm93KCk7CiAgICAgIHdoaWxlIChibG9ja1N0YXJ0ICsgNCA8IGJhLmxlbmd0aCkgewogICAgICAgIGNvbnN0IGJsb2NrU2l6ZSA9IGJhLnJlYWRJbnQzMkxFKGJsb2NrU3RhcnQpOwogICAgICAgIGNvbnN0IGJsb2NrRW5kID0gYmxvY2tTdGFydCArIDQgKyBibG9ja1NpemUgLSAxOwogICAgICAgIGlmIChkcG9zaXRpb25zKSB7CiAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFydCArIGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uID49IGRwb3NpdGlvbnNbcG9zKytdKSB7CiAgICAgICAgICB9CiAgICAgICAgICBwb3MtLTsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrRW5kIDwgYmEubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbmV3IEJhbVJlY29yZCh7CiAgICAgICAgICAgIGJ5dGVzOiB7CiAgICAgICAgICAgICAgYnl0ZUFycmF5OiBiYSwKICAgICAgICAgICAgICBzdGFydDogYmxvY2tTdGFydCwKICAgICAgICAgICAgICBlbmQ6IGJsb2NrRW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZpbGVPZmZzZXQ6IGNwb3NpdGlvbnMgPyBjcG9zaXRpb25zW3Bvc10gKiAoMSA8PCA4KSArIChibG9ja1N0YXJ0IC0gZHBvc2l0aW9uc1twb3NdKSArIGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uICsgMSA6IGltcG9ydF9idWZmZXJfY3JjMzIuZGVmYXVsdC5zaWduZWQoYmEuc2xpY2UoYmxvY2tTdGFydCwgYmxvY2tFbmQpKQogICAgICAgICAgfSk7CiAgICAgICAgICBzaW5rLnB1c2goZmVhdHVyZSk7CiAgICAgICAgICBpZiAodGhpcy55aWVsZFRocmVhZFRpbWUgJiYgK0RhdGUubm93KCkgLSBsYXN0ID4gdGhpcy55aWVsZFRocmVhZFRpbWUpIHsKICAgICAgICAgICAgYXdhaXQgdGltZW91dCgxKTsKICAgICAgICAgICAgbGFzdCA9ICtEYXRlLm5vdygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBibG9ja1N0YXJ0ID0gYmxvY2tFbmQgKyAxOwogICAgICB9CiAgICAgIHJldHVybiBzaW5rOwogICAgfQogICAgYXN5bmMgaGFzUmVmU2VxKHNlcU5hbWUpIHsKICAgICAgY29uc3QgcmVmSWQgPSB0aGlzLmNoclRvSW5kZXggJiYgdGhpcy5jaHJUb0luZGV4W3NlcU5hbWVdOwogICAgICByZXR1cm4gdGhpcy5pbmRleC5oYXNSZWZTZXEocmVmSWQpOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHNlcU5hbWUpIHsKICAgICAgY29uc3QgcmVmSWQgPSB0aGlzLmNoclRvSW5kZXggJiYgdGhpcy5jaHJUb0luZGV4W3NlcU5hbWVdOwogICAgICByZXR1cm4gdGhpcy5pbmRleC5saW5lQ291bnQocmVmSWQpOwogICAgfQogICAgYXN5bmMgaW5kZXhDb3Yoc2VxTmFtZSwgc3RhcnQsIGVuZCkgewogICAgICBhd2FpdCB0aGlzLmluZGV4LnBhcnNlKCk7CiAgICAgIGNvbnN0IHNlcUlkID0gdGhpcy5jaHJUb0luZGV4ICYmIHRoaXMuY2hyVG9JbmRleFtzZXFOYW1lXTsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaW5kZXhDb3Yoc2VxSWQsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgYXN5bmMgYmxvY2tzRm9yUmFuZ2Uoc2VxTmFtZSwgc3RhcnQsIGVuZCwgb3B0cykgewogICAgICBhd2FpdCB0aGlzLmluZGV4LnBhcnNlKCk7CiAgICAgIGNvbnN0IHNlcUlkID0gdGhpcy5jaHJUb0luZGV4ICYmIHRoaXMuY2hyVG9JbmRleFtzZXFOYW1lXTsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXguYmxvY2tzRm9yUmFuZ2Uoc2VxSWQsIHN0YXJ0LCBlbmQsIG9wdHMpOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL2h0c2dldC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X3BvbHlmaWxsID0gX190b01vZHVsZShyZXF1aXJlX2Jyb3dzZXJfcG9seWZpbGwoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVANi4xLjIvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgUXVpY2tMUlUyID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIGlmICghKG9wdGlvbnMubWF4U2l6ZSAmJiBvcHRpb25zLm1heFNpemUgPiAwKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBtYXhTaXplYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heEFnZSA9PT0gIm51bWJlciIgJiYgb3B0aW9ucy5tYXhBZ2UgPT09IDApIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4QWdlYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgIH0KICAgICAgdGhpcy5tYXhTaXplID0gb3B0aW9ucy5tYXhTaXplOwogICAgICB0aGlzLm1heEFnZSA9IG9wdGlvbnMubWF4QWdlIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgdGhpcy5vbkV2aWN0aW9uID0gb3B0aW9ucy5vbkV2aWN0aW9uOwogICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICB0aGlzLm9sZENhY2hlID0gbmV3IE1hcCgpOwogICAgICB0aGlzLl9zaXplID0gMDsKICAgIH0KICAgIF9lbWl0RXZpY3Rpb25zKGNhY2hlKSB7CiAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkV2aWN0aW9uICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgY2FjaGUpIHsKICAgICAgICB0aGlzLm9uRXZpY3Rpb24oa2V5LCBpdGVtLnZhbHVlKTsKICAgICAgfQogICAgfQogICAgX2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIHsKICAgICAgaWYgKHR5cGVvZiBpdGVtLmV4cGlyeSA9PT0gIm51bWJlciIgJiYgaXRlbS5leHBpcnkgPD0gRGF0ZS5ub3coKSkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkV2aWN0aW9uID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGlzLm9uRXZpY3Rpb24oa2V5LCBpdGVtLnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2dldE9yRGVsZXRlSWZFeHBpcmVkKGtleSwgaXRlbSkgewogICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5fZGVsZXRlSWZFeHBpcmVkKGtleSwgaXRlbSk7CiAgICAgIGlmIChkZWxldGVkID09PSBmYWxzZSkgewogICAgICAgIHJldHVybiBpdGVtLnZhbHVlOwogICAgICB9CiAgICB9CiAgICBfZ2V0SXRlbVZhbHVlKGtleSwgaXRlbSkgewogICAgICByZXR1cm4gaXRlbS5leHBpcnkgPyB0aGlzLl9nZXRPckRlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIDogaXRlbS52YWx1ZTsKICAgIH0KICAgIF9wZWVrKGtleSwgY2FjaGUpIHsKICAgICAgY29uc3QgaXRlbSA9IGNhY2hlLmdldChrZXkpOwogICAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbVZhbHVlKGtleSwgaXRlbSk7CiAgICB9CiAgICBfc2V0KGtleSwgdmFsdWUpIHsKICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgIHRoaXMuX3NpemUrKzsKICAgICAgaWYgKHRoaXMuX3NpemUgPj0gdGhpcy5tYXhTaXplKSB7CiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5fZW1pdEV2aWN0aW9ucyh0aGlzLm9sZENhY2hlKTsKICAgICAgICB0aGlzLm9sZENhY2hlID0gdGhpcy5jYWNoZTsKICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICB9CiAgICB9CiAgICBfbW92ZVRvUmVjZW50KGtleSwgaXRlbSkgewogICAgICB0aGlzLm9sZENhY2hlLmRlbGV0ZShrZXkpOwogICAgICB0aGlzLl9zZXQoa2V5LCBpdGVtKTsKICAgIH0KICAgICpfZW50cmllc0FzY2VuZGluZygpIHsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub2xkQ2FjaGUpIHsKICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtOwogICAgICAgIGlmICghdGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTsKICAgICAgICAgIGlmIChkZWxldGVkID09PSBmYWxzZSkgewogICAgICAgICAgICB5aWVsZCBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jYWNoZSkgewogICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGl0ZW07CiAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTsKICAgICAgICBpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgIHlpZWxkIGl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBnZXQoa2V5KSB7CiAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1WYWx1ZShrZXksIGl0ZW0pOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMub2xkQ2FjaGUuZ2V0KGtleSk7CiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pID09PSBmYWxzZSkgewogICAgICAgICAgdGhpcy5fbW92ZVRvUmVjZW50KGtleSwgaXRlbSk7CiAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNldChrZXksIHZhbHVlLCB7IG1heEFnZSA9IHRoaXMubWF4QWdlIH0gPSB7fSkgewogICAgICBjb25zdCBleHBpcnkgPSB0eXBlb2YgbWF4QWdlID09PSAibnVtYmVyIiAmJiBtYXhBZ2UgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA/IERhdGUubm93KCkgKyBtYXhBZ2UgOiB2b2lkIDA7CiAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7CiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGV4cGlyeQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX3NldChrZXksIHsgdmFsdWUsIGV4cGlyeSB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGhhcyhrZXkpIHsKICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICByZXR1cm4gIXRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIHRoaXMuY2FjaGUuZ2V0KGtleSkpOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgcmV0dXJuICF0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB0aGlzLm9sZENhY2hlLmdldChrZXkpKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBwZWVrKGtleSkgewogICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgIHJldHVybiB0aGlzLl9wZWVrKGtleSwgdGhpcy5jYWNoZSk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMub2xkQ2FjaGUuaGFzKGtleSkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcGVlayhrZXksIHRoaXMub2xkQ2FjaGUpOwogICAgICB9CiAgICB9CiAgICBkZWxldGUoa2V5KSB7CiAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICBpZiAoZGVsZXRlZCkgewogICAgICAgIHRoaXMuX3NpemUtLTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5vbGRDYWNoZS5kZWxldGUoa2V5KSB8fCBkZWxldGVkOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTsKICAgICAgdGhpcy5vbGRDYWNoZS5jbGVhcigpOwogICAgICB0aGlzLl9zaXplID0gMDsKICAgIH0KICAgIHJlc2l6ZShuZXdTaXplKSB7CiAgICAgIGlmICghKG5ld1NpemUgJiYgbmV3U2l6ZSA+IDApKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiYG1heFNpemVgIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAiKTsKICAgICAgfQogICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLl9lbnRyaWVzQXNjZW5kaW5nKCldOwogICAgICBjb25zdCByZW1vdmVDb3VudCA9IGl0ZW1zLmxlbmd0aCAtIG5ld1NpemU7CiAgICAgIGlmIChyZW1vdmVDb3VudCA8IDApIHsKICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcChpdGVtcyk7CiAgICAgICAgdGhpcy5vbGRDYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICB0aGlzLl9zaXplID0gaXRlbXMubGVuZ3RoOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChyZW1vdmVDb3VudCA+IDApIHsKICAgICAgICAgIHRoaXMuX2VtaXRFdmljdGlvbnMoaXRlbXMuc2xpY2UoMCwgcmVtb3ZlQ291bnQpKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vbGRDYWNoZSA9IG5ldyBNYXAoaXRlbXMuc2xpY2UocmVtb3ZlQ291bnQpKTsKICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICB9CiAgICAgIHRoaXMubWF4U2l6ZSA9IG5ld1NpemU7CiAgICB9CiAgICAqa2V5cygpIHsKICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB0aGlzKSB7CiAgICAgICAgeWllbGQga2V5OwogICAgICB9CiAgICB9CiAgICAqdmFsdWVzKCkgewogICAgICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiB0aGlzKSB7CiAgICAgICAgeWllbGQgdmFsdWU7CiAgICAgIH0KICAgIH0KICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY2FjaGUpIHsKICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtOwogICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgaWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICB5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm9sZENhY2hlKSB7CiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaXRlbTsKICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICBpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgeWllbGQgW2tleSwgdmFsdWUudmFsdWVdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgKmVudHJpZXNEZXNjZW5kaW5nKCkgewogICAgICBsZXQgaXRlbXMgPSBbLi4udGhpcy5jYWNoZV07CiAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewogICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTsKICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtOwogICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgaWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICB5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07CiAgICAgICAgfQogICAgICB9CiAgICAgIGl0ZW1zID0gWy4uLnRoaXMub2xkQ2FjaGVdOwogICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07CiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaXRlbTsKICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICBpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgeWllbGQgW2tleSwgdmFsdWUudmFsdWVdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgKmVudHJpZXNBc2NlbmRpbmcoKSB7CiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuX2VudHJpZXNBc2NlbmRpbmcoKSkgewogICAgICAgIHlpZWxkIFtrZXksIHZhbHVlLnZhbHVlXTsKICAgICAgfQogICAgfQogICAgZ2V0IHNpemUoKSB7CiAgICAgIGlmICghdGhpcy5fc2l6ZSkgewogICAgICAgIHJldHVybiB0aGlzLm9sZENhY2hlLnNpemU7CiAgICAgIH0KICAgICAgbGV0IG9sZENhY2hlU2l6ZSA9IDA7CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMub2xkQ2FjaGUua2V5cygpKSB7CiAgICAgICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICBvbGRDYWNoZVNpemUrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuX3NpemUgKyBvbGRDYWNoZVNpemUsIHRoaXMubWF4U2l6ZSk7CiAgICB9CiAgICBlbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy5lbnRyaWVzQXNjZW5kaW5nKCk7CiAgICB9CiAgICBmb3JFYWNoKGNhbGxiYWNrRnVuY3Rpb24sIHRoaXNBcmd1bWVudCA9IHRoaXMpIHsKICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5lbnRyaWVzQXNjZW5kaW5nKCkpIHsKICAgICAgICBjYWxsYmFja0Z1bmN0aW9uLmNhbGwodGhpc0FyZ3VtZW50LCB2YWx1ZSwga2V5LCB0aGlzKTsKICAgICAgfQogICAgfQogICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkgewogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLnRoaXMuZW50cmllc0FzY2VuZGluZygpXSk7CiAgICB9CiAgfTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kMy1hcnJheUAyLjEyLjEvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2QzLWFycmF5QDIuMTIuMS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhc2NlbmRpbmdfZGVmYXVsdChhLCBiKSB7CiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZDMtYXJyYXlAMi4xMi4xL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmlzZWN0b3JfZGVmYXVsdChmKSB7CiAgICBsZXQgZGVsdGEgPSBmOwogICAgbGV0IGNvbXBhcmUgPSBmOwogICAgaWYgKGYubGVuZ3RoID09PSAxKSB7CiAgICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4OwogICAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICBjb25zdCBtaWQgPSBsbyArIGhpID4+PiAxOwogICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKQogICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgIGhpID0gbWlkOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICAgIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkKICAgICAgICBsbyA9IDA7CiAgICAgIGlmIChoaSA9PSBudWxsKQogICAgICAgIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkKICAgICAgICAgIGhpID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgIGxvID0gbWlkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbG87CiAgICB9CiAgICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7CiAgICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpOwogICAgfQogICAgcmV0dXJuIHsgbGVmdCwgY2VudGVyLCByaWdodCB9OwogIH0KICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHsKICAgIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nX2RlZmF1bHQoZihkKSwgeCk7CiAgfQoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy91dGlscy50cwogIHZhciBEYXRhU291cmNlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZmlsZSwgY2hyb21TaXplcywgb3B0aW9ucykgewogICAgICB0aGlzLmZpbGUgPSBmaWxlOwogICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmNocm9tSW5mbyA9IHNpemVzVG9DaHJvbUluZm8oY2hyb21TaXplcyk7CiAgICAgIHRoaXMudGlsZXNldEluZm8gPSB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8odGhpcy5jaHJvbUluZm8pOwogICAgfQogICAgY2hyb21JbmZvOwogICAgdGlsZXNldEluZm87CiAgfTsKICB2YXIgY2hyb21JbmZvQmlzZWN0b3IgPSBiaXNlY3Rvcl9kZWZhdWx0KChkKSA9PiBkLnBvcykubGVmdDsKICB2YXIgY2hyVG9BYnMgPSAoY2hyb20sIGNocm9tUG9zLCBjaHJvbUluZm8pID0+IGNocm9tSW5mby5jaHJQb3NpdGlvbnNbY2hyb21dLnBvcyArIGNocm9tUG9zOwogIHZhciBhYnNUb0NociA9IChhYnNQb3NpdGlvbiwgY2hyb21JbmZvKSA9PiB7CiAgICBpZiAoIWNocm9tSW5mbyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgaW5zZXJ0UG9pbnQgPSBjaHJvbUluZm9CaXNlY3RvcihjaHJvbUluZm8uY3VtUG9zaXRpb25zLCBhYnNQb3NpdGlvbik7CiAgICBjb25zdCBsYXN0Q2hyID0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tjaHJvbUluZm8uY3VtUG9zaXRpb25zLmxlbmd0aCAtIDFdLmNocjsKICAgIGNvbnN0IGxhc3RMZW5ndGggPSBjaHJvbUluZm8uY2hyb21MZW5ndGhzW2xhc3RDaHJdOwogICAgaW5zZXJ0UG9pbnQgLT0gaW5zZXJ0UG9pbnQgPiAwICYmIDE7CiAgICBsZXQgY2hyUG9zaXRpb24gPSBNYXRoLmZsb29yKGFic1Bvc2l0aW9uIC0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0ucG9zKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaWYgKGNoclBvc2l0aW9uIDwgMCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIDE7CiAgICAgIGNoclBvc2l0aW9uID0gMTsKICAgIH0KICAgIGlmIChpbnNlcnRQb2ludCA9PT0gY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIGNoclBvc2l0aW9uID4gbGFzdExlbmd0aCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIGxhc3RMZW5ndGg7CiAgICAgIGNoclBvc2l0aW9uID0gbGFzdExlbmd0aDsKICAgIH0KICAgIHJldHVybiBbY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0uY2hyLCBjaHJQb3NpdGlvbiwgb2Zmc2V0LCBpbnNlcnRQb2ludF07CiAgfTsKICBmdW5jdGlvbiB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8oY2hyb21JbmZvLCB0aWxlU2l6ZSA9IDEwMjQpIHsKICAgIHJldHVybiB7CiAgICAgIHRpbGVfc2l6ZTogdGlsZVNpemUsCiAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbjogdGlsZVNpemUsCiAgICAgIG1heF96b29tOiBNYXRoLmNlaWwoTWF0aC5sb2coY2hyb21JbmZvLnRvdGFsTGVuZ3RoIC8gdGlsZVNpemUpIC8gTWF0aC5sb2coMikpLAogICAgICBtYXhfd2lkdGg6IGNocm9tSW5mby50b3RhbExlbmd0aCwKICAgICAgbWluX3BvczogWzBdLAogICAgICBtYXhfcG9zOiBbY2hyb21JbmZvLnRvdGFsTGVuZ3RoXQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2l6ZXNUb0Nocm9tSW5mbyhzaXplcykgewogICAgY29uc3QgaW5mbyA9IHsKICAgICAgY3VtUG9zaXRpb25zOiBbXSwKICAgICAgY2hyb21MZW5ndGhzOiB7fSwKICAgICAgY2hyUG9zaXRpb25zOiB7fSwKICAgICAgdG90YWxMZW5ndGg6IDAKICAgIH07CiAgICBzaXplcy5mb3JFYWNoKChbY2hyLCBsZW5ndGhdLCBpKSA9PiB7CiAgICAgIGNvbnN0IGNoclBvc2l0aW9uID0geyBpZDogaSwgY2hyLCBwb3M6IGluZm8udG90YWxMZW5ndGggfTsKICAgICAgaW5mby5jaHJQb3NpdGlvbnNbY2hyXSA9IGNoclBvc2l0aW9uOwogICAgICBpbmZvLmNocm9tTGVuZ3Roc1tjaHJdID0gbGVuZ3RoOwogICAgICBpbmZvLmN1bVBvc2l0aW9ucy5wdXNoKGNoclBvc2l0aW9uKTsKICAgICAgaW5mby50b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmluZm8sCiAgICAgIGFic1RvQ2hyOiAoYWJzUG9zKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGFic1RvQ2hyKGFic1BvcywgaW5mbykgOiBudWxsLAogICAgICBjaHJUb0FiczogKFtjaHJOYW1lLCBjaHJQb3NdKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGNoclRvQWJzKGNock5hbWUsIGNoclBvcywgaW5mbykgOiBudWxsCiAgICB9OwogIH0KICB2YXIgUmVtb3RlRmlsZTIgPSBjbGFzcyBleHRlbmRzIFJlbW90ZUZpbGUgewogICAgcmVhZCA9IGFzeW5jIChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pID0+IHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApOwogICAgfTsKICB9OwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy9iYW0vYmFtLXdvcmtlci50cz93b3JrZXImaW5saW5lP3dvcmtlcl9maWxlCiAgZnVuY3Rpb24gcGFyc2VNRChtZFN0cmluZywgdXNlQ291bnRzKSB7CiAgICBsZXQgY3VyclBvcyA9IDA7CiAgICBsZXQgY3Vyck51bSA9IDA7CiAgICBsZXQgZGVsZXRpb25FbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgbGV0IGJhbVNlcVNoaWZ0ID0gMDsKICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWRTdHJpbmcubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKG1kU3RyaW5nW2ldLm1hdGNoKC9bMC05XS9nKSkgewogICAgICAgIGN1cnJOdW0gPSBjdXJyTnVtICogMTAgKyArbWRTdHJpbmdbaV07CiAgICAgICAgZGVsZXRpb25FbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKG1kU3RyaW5nW2ldID09PSAiXiIpIHsKICAgICAgICBkZWxldGlvbkVuY291bnRlcmVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjdXJyUG9zICs9IGN1cnJOdW07CiAgICAgICAgaWYgKHVzZUNvdW50cykgewogICAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgbGVuZ3RoOiBjdXJyTnVtLAogICAgICAgICAgICB0eXBlOiBtZFN0cmluZ1tpXQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChkZWxldGlvbkVuY291bnRlcmVkKSB7CiAgICAgICAgICBiYW1TZXFTaGlmdCAtPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzdGl0dXRpb25zLnB1c2goewogICAgICAgICAgICBwb3M6IGN1cnJQb3MsCiAgICAgICAgICAgIGJhc2U6IG1kU3RyaW5nW2ldLAogICAgICAgICAgICBsZW5ndGg6IDEsCiAgICAgICAgICAgIGJhbVNlcVNoaWZ0CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY3Vyck51bSA9IDA7CiAgICAgICAgY3VyclBvcyArPSAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uczsKICB9CiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9ucyhzZWdtZW50LCBzZXEpIHsKICAgIGxldCBzdWJzdGl0dXRpb25zID0gW107CiAgICBsZXQgc29mdENsaXBwaW5nQXRSZWFkU3RhcnQgPSBudWxsOwogICAgaWYgKHNlZ21lbnQuY2lnYXIpIHsKICAgICAgY29uc3QgY2lnYXJTdWJzID0gcGFyc2VNRChzZWdtZW50LmNpZ2FyLCB0cnVlKTsKICAgICAgbGV0IGN1cnJQb3MgPSAwOwogICAgICBmb3IgKGNvbnN0IHN1YiBvZiBjaWdhclN1YnMpIHsKICAgICAgICBpZiAoc3ViLnR5cGUgPT09ICJYIikgewogICAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgcG9zOiBjdXJyUG9zLAogICAgICAgICAgICBsZW5ndGg6IHN1Yi5sZW5ndGgsCiAgICAgICAgICAgIHR5cGU6ICJYIgogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyUG9zICs9IHN1Yi5sZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChzdWIudHlwZSA9PT0gIkkiKSB7CiAgICAgICAgICBzdWJzdGl0dXRpb25zLnB1c2goewogICAgICAgICAgICBwb3M6IGN1cnJQb3MsCiAgICAgICAgICAgIGxlbmd0aDogc3ViLmxlbmd0aCwKICAgICAgICAgICAgdHlwZTogIkkiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKHN1Yi50eXBlID09PSAiRCIpIHsKICAgICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh7CiAgICAgICAgICAgIHBvczogY3VyclBvcywKICAgICAgICAgICAgbGVuZ3RoOiBzdWIubGVuZ3RoLAogICAgICAgICAgICB0eXBlOiAiRCIKICAgICAgICAgIH0pOwogICAgICAgICAgY3VyclBvcyArPSBzdWIubGVuZ3RoOwogICAgICAgIH0gZWxzZSBpZiAoc3ViLnR5cGUgPT09ICJOIikgewogICAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgcG9zOiBjdXJyUG9zLAogICAgICAgICAgICBsZW5ndGg6IHN1Yi5sZW5ndGgsCiAgICAgICAgICAgIHR5cGU6ICJOIgogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyUG9zICs9IHN1Yi5sZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChzdWIudHlwZSA9PT0gIj0iIHx8IHN1Yi50eXBlID09PSAiTSIpIHsKICAgICAgICAgIGN1cnJQb3MgKz0gc3ViLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBmaXJzdFN1YiA9IGNpZ2FyU3Vic1swXTsKICAgICAgY29uc3QgbGFzdFN1YiA9IGNpZ2FyU3Vic1tjaWdhclN1YnMubGVuZ3RoIC0gMV07CiAgICAgIGlmIChmaXJzdFN1Yi50eXBlID09PSAiUyIpIHsKICAgICAgICBzb2Z0Q2xpcHBpbmdBdFJlYWRTdGFydCA9IGZpcnN0U3ViOwogICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh7CiAgICAgICAgICBwb3M6IC1maXJzdFN1Yi5sZW5ndGgsCiAgICAgICAgICB0eXBlOiAiUyIsCiAgICAgICAgICBsZW5ndGg6IGZpcnN0U3ViLmxlbmd0aAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChsYXN0U3ViLnR5cGUgPT09ICJTIikgewogICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh7CiAgICAgICAgICBwb3M6IHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydCwKICAgICAgICAgIGxlbmd0aDogbGFzdFN1Yi5sZW5ndGgsCiAgICAgICAgICB0eXBlOiAiUyIKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZmlyc3RTdWIudHlwZSA9PT0gIkgiKSB7CiAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgIHBvczogLWZpcnN0U3ViLmxlbmd0aCwKICAgICAgICAgIHR5cGU6ICJIIiwKICAgICAgICAgIGxlbmd0aDogZmlyc3RTdWIubGVuZ3RoCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGxhc3RTdWIudHlwZSA9PT0gIkgiKSB7CiAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgIHBvczogc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0LAogICAgICAgICAgbGVuZ3RoOiBsYXN0U3ViLmxlbmd0aCwKICAgICAgICAgIHR5cGU6ICJIIgogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpZiAoc2VnbWVudC5tZCkgewogICAgICBjb25zdCBtZFN1YnN0aXR1dGlvbnMgPSBwYXJzZU1EKHNlZ21lbnQubWQsIGZhbHNlKTsKICAgICAgbWRTdWJzdGl0dXRpb25zLmZvckVhY2goZnVuY3Rpb24oc3Vic3RpdHV0aW9uKSB7CiAgICAgICAgbGV0IHBvc1N0YXJ0ID0gc3Vic3RpdHV0aW9uWyJwb3MiXSArIHN1YnN0aXR1dGlvblsiYmFtU2VxU2hpZnQiXTsKICAgICAgICBsZXQgcG9zRW5kID0gcG9zU3RhcnQgKyBzdWJzdGl0dXRpb25bImxlbmd0aCJdOwogICAgICAgIGlmIChzb2Z0Q2xpcHBpbmdBdFJlYWRTdGFydCAhPT0gbnVsbCkgewogICAgICAgICAgcG9zU3RhcnQgKz0gc29mdENsaXBwaW5nQXRSZWFkU3RhcnQubGVuZ3RoOwogICAgICAgICAgcG9zRW5kICs9IHNvZnRDbGlwcGluZ0F0UmVhZFN0YXJ0Lmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3Vic3RpdHV0aW9uWyJ2YXJpYW50Il0gPSBzZXEuc3Vic3RyaW5nKHBvc1N0YXJ0LCBwb3NFbmQpOwogICAgICAgIGRlbGV0ZSBzdWJzdGl0dXRpb25bImJhbVNlcVNoaWZ0Il07CiAgICAgIH0pOwogICAgICBzdWJzdGl0dXRpb25zID0gbWRTdWJzdGl0dXRpb25zLmNvbmNhdChzdWJzdGl0dXRpb25zKTsKICAgIH0KICAgIHJldHVybiBzdWJzdGl0dXRpb25zOwogIH0KICB2YXIgYmFtUmVjb3JkVG9Kc29uID0gKGJhbVJlY29yZCwgY2hyTmFtZSwgY2hyT2Zmc2V0KSA9PiB7CiAgICBjb25zdCBzZXEgPSBiYW1SZWNvcmQuZ2V0KCJzZXEiKTsKICAgIGNvbnN0IHNlZ21lbnQgPSB7CiAgICAgIGlkOiBiYW1SZWNvcmQuX2lkLAogICAgICBuYW1lOiBiYW1SZWNvcmQuZ2V0KCJuYW1lIiksCiAgICAgIHN0YXJ0OiArYmFtUmVjb3JkLmRhdGEuc3RhcnQgKyAxICsgY2hyT2Zmc2V0LAogICAgICBlbmQ6ICtiYW1SZWNvcmQuZGF0YS5lbmQgKyAxICsgY2hyT2Zmc2V0LAogICAgICBtZDogYmFtUmVjb3JkLmdldCgiTUQiKSwKICAgICAgY2hyTmFtZSwKICAgICAgY2hyT2Zmc2V0LAogICAgICBjaWdhcjogYmFtUmVjb3JkLmdldCgiY2lnYXIiKSwKICAgICAgbWFwcTogYmFtUmVjb3JkLmdldCgibXEiKSwKICAgICAgc3RyYW5kOiBiYW1SZWNvcmQuZ2V0KCJzdHJhbmQiKSA9PT0gMSA/ICIrIiA6ICItIgogICAgfTsKICAgIHJldHVybiBPYmplY3QuYXNzaWduKHNlZ21lbnQsIHsgc3Vic3RpdHV0aW9uczogZ2V0U3Vic3RpdHV0aW9ucyhzZWdtZW50LCBzZXEpIH0pOwogIH07CiAgdmFyIEJhbUZpbGUyID0gY2xhc3MgZXh0ZW5kcyBCYW1GaWxlIHsKICAgIGhlYWRlclByb21pc2U7CiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3MpOwogICAgICB0aGlzLmhlYWRlclByb21pc2UgPSB0aGlzLmdldEhlYWRlcigpOwogICAgfQogICAgc3RhdGljIGZyb21VcmwodXJsLCBpbmRleFVybCwgdXJsRmV0Y2hPcHRpb25zLCBpbmRleFVybEZldGNoT3B0aW9ucykgewogICAgICByZXR1cm4gbmV3IEJhbUZpbGUyKHsKICAgICAgICBiYW1GaWxlaGFuZGxlOiBuZXcgUmVtb3RlRmlsZTIodXJsLCB7IG92ZXJyaWRlczogdXJsRmV0Y2hPcHRpb25zIH0pLAogICAgICAgIGJhaUZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlMihpbmRleFVybCwgeyBvdmVycmlkZXM6IGluZGV4VXJsRmV0Y2hPcHRpb25zIH0pCiAgICAgIH0pOwogICAgfQogICAgZ2V0Q2hyb21OYW1lcygpIHsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXhUb0Noci5tYXAoKHYpID0+IHYucmVmTmFtZSk7CiAgICB9CiAgfTsKICB2YXIgZGF0YVNvdXJjZXMgPSBuZXcgTWFwKCk7CiAgdmFyIGJhbUZpbGVDYWNoZSA9IG5ldyBNYXAoKTsKICB2YXIgTUFYX1RJTEVTID0gMjA7CiAgdmFyIHRpbGVWYWx1ZXMgPSBuZXcgUXVpY2tMUlUyKHsgbWF4U2l6ZTogTUFYX1RJTEVTIH0pOwogIHZhciBpbml0ID0gYXN5bmMgKHVpZCwgYmFtLCBjaHJvbVNpemVzLCBvcHRpb25zID0ge30pID0+IHsKICAgIGlmICghYmFtRmlsZUNhY2hlLmhhcyhiYW0udXJsKSkgewogICAgICBjb25zdCBiYW1GaWxlMiA9IEJhbUZpbGUyLmZyb21VcmwoYmFtLnVybCwgYmFtLmluZGV4VXJsLCBvcHRpb25zLnVybEZldGNoT3B0aW9ucywgb3B0aW9ucy5pbmRleFVybEZldGNoT3B0aW9ucyk7CiAgICAgIGF3YWl0IGJhbUZpbGUyLmdldEhlYWRlcigpOwogICAgICBjb25zdCBmaXJzdENocm9tTmFtZUluSGVhZGVyID0gYmFtRmlsZTIuZ2V0Q2hyb21OYW1lcygpWzBdOwogICAgICBpZiAoZmlyc3RDaHJvbU5hbWVJbkhlYWRlcikgewogICAgICAgIGNvbnN0IGhlYWRlckhhc1ByZWZpeCA9IGZpcnN0Q2hyb21OYW1lSW5IZWFkZXIuaW5jbHVkZXMoImNociIpOwogICAgICAgIGNvbnN0IHNwZWNIYXNQcmVmaXggPSBjaHJvbVNpemVzWzBdPy5bMF0uaW5jbHVkZXMoImNociIpOwogICAgICAgIGlmIChoZWFkZXJIYXNQcmVmaXggJiYgIXNwZWNIYXNQcmVmaXgpIHsKICAgICAgICAgIGNocm9tU2l6ZXMgPSBjaHJvbVNpemVzLm1hcCgoW3MsIG5dKSA9PiBbYGNociR7c31gLCBuXSk7CiAgICAgICAgfSBlbHNlIGlmICghaGVhZGVySGFzUHJlZml4ICYmIHNwZWNIYXNQcmVmaXgpIHsKICAgICAgICAgIGNocm9tU2l6ZXMgPSBjaHJvbVNpemVzLm1hcCgoW3MsIG5dKSA9PiBbcy5yZXBsYWNlKCJjaHIiLCAiIiksIG5dKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmFtRmlsZUNhY2hlLnNldChiYW0udXJsLCBiYW1GaWxlMik7CiAgICB9CiAgICBjb25zdCBiYW1GaWxlID0gYmFtRmlsZUNhY2hlLmdldChiYW0udXJsKTsKICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgRGF0YVNvdXJjZShiYW1GaWxlLCBjaHJvbVNpemVzLCB7CiAgICAgIGxvYWRNYXRlczogZmFsc2UsCiAgICAgIG1heEluc2VydFNpemU6IDVlMywKICAgICAgZXh0cmFjdEp1bmN0aW9uOiBmYWxzZSwKICAgICAganVuY3Rpb25NaW5Db3ZlcmFnZTogMSwKICAgICAgLi4ub3B0aW9ucwogICAgfSk7CiAgICBkYXRhU291cmNlcy5zZXQodWlkLCBkYXRhU291cmNlKTsKICB9OwogIHZhciB0aWxlc2V0SW5mbyA9ICh1aWQpID0+IHsKICAgIHJldHVybiBkYXRhU291cmNlcy5nZXQodWlkKS50aWxlc2V0SW5mbzsKICB9OwogIHZhciB0aWxlID0gYXN5bmMgKHVpZCwgeiwgeCkgPT4gewogICAgY29uc3QgTUFYX1RJTEVfV0lEVEggPSAyZTU7CiAgICBjb25zdCBiYW0gPSBkYXRhU291cmNlcy5nZXQodWlkKTsKICAgIGNvbnN0IGluZm8gPSB0aWxlc2V0SW5mbyh1aWQpOwogICAgaWYgKCEoIm1heF93aWR0aCIgaW4gaW5mbykpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aWxlc2V0SW5mbyBkb2VzIG5vdCBpbmNsdWRlIGBtYXhfd2lkdGhgLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdGhlIEdvc2xpbmcgQmFtRGF0YUZldGNoZXIuIik7CiAgICB9CiAgICBjb25zdCB0aWxlV2lkdGggPSAraW5mby5tYXhfd2lkdGggLyAyICoqICt6OwogICAgY29uc3QgcmVjb3JkUHJvbWlzZXMgPSBbXTsKICAgIGlmICh0aWxlV2lkdGggPiBNQVhfVElMRV9XSURUSCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUoW10pKTsKICAgIH0KICAgIGxldCBtaW5YID0gaW5mby5taW5fcG9zWzBdICsgeCAqIHRpbGVXaWR0aDsKICAgIGNvbnN0IG1heFggPSBpbmZvLm1pbl9wb3NbMF0gKyAoeCArIDEpICogdGlsZVdpZHRoOwogICAgY29uc3QgeyBjaHJvbUxlbmd0aHMsIGN1bVBvc2l0aW9ucyB9ID0gYmFtLmNocm9tSW5mbzsKICAgIGNvbnN0IG9wdCA9IHsKICAgICAgdmlld0FzUGFpcnM6IGJhbS5vcHRpb25zLmxvYWRNYXRlcwogICAgfTsKICAgIHRpbGVWYWx1ZXMuc2V0KGAke3VpZH0uJHt6fS4ke3h9YCwgW10pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdW1Qb3NpdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hyb21OYW1lID0gY3VtUG9zaXRpb25zW2ldLmNocjsKICAgICAgY29uc3QgY2hyb21TdGFydCA9IGN1bVBvc2l0aW9uc1tpXS5wb3M7CiAgICAgIGNvbnN0IGNocm9tRW5kID0gY3VtUG9zaXRpb25zW2ldLnBvcyArIGNocm9tTGVuZ3Roc1tjaHJvbU5hbWVdOwogICAgICBpZiAoY2hyb21TdGFydCA8PSBtaW5YICYmIG1pblggPCBjaHJvbUVuZCkgewogICAgICAgIGlmIChtYXhYID4gY2hyb21FbmQpIHsKICAgICAgICAgIHJlY29yZFByb21pc2VzLnB1c2goYmFtLmZpbGUuZ2V0UmVjb3Jkc0ZvclJhbmdlKGNocm9tTmFtZSwgbWluWCAtIGNocm9tU3RhcnQsIGNocm9tRW5kIC0gY2hyb21TdGFydCwgb3B0KS50aGVuKChyZWNvcmRzKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlY29yZHMgPSByZWNvcmRzLm1hcCgocmVjKSA9PiBiYW1SZWNvcmRUb0pzb24ocmVjLCBjaHJvbU5hbWUsIGN1bVBvc2l0aW9uc1tpXS5wb3MpKTsKICAgICAgICAgICAgdGlsZVZhbHVlcy5zZXQoYCR7dWlkfS4ke3p9LiR7eH1gLCB0aWxlVmFsdWVzLmdldChgJHt1aWR9LiR7en0uJHt4fWApLmNvbmNhdChtYXBwZWRSZWNvcmRzKSk7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0pKTsKICAgICAgICAgIG1pblggPSBjaHJvbUVuZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBNYXRoLmZsb29yKG1pblggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgIGNvbnN0IGVuZFBvcyA9IE1hdGguY2VpbChtYXhYIC0gY2hyb21TdGFydCk7CiAgICAgICAgICByZWNvcmRQcm9taXNlcy5wdXNoKGJhbS5maWxlLmdldFJlY29yZHNGb3JSYW5nZShjaHJvbU5hbWUsIHN0YXJ0UG9zLCBlbmRQb3MsIG9wdCkudGhlbigocmVjb3JkcykgPT4gewogICAgICAgICAgICBjb25zdCBtYXBwZWRSZWNvcmRzID0gcmVjb3Jkcy5tYXAoKHJlYykgPT4gYmFtUmVjb3JkVG9Kc29uKHJlYywgY2hyb21OYW1lLCBjdW1Qb3NpdGlvbnNbaV0ucG9zKSk7CiAgICAgICAgICAgIHRpbGVWYWx1ZXMuc2V0KGAke3VpZH0uJHt6fS4ke3h9YCwgdGlsZVZhbHVlcy5nZXQoYCR7dWlkfS4ke3p9LiR7eH1gKS5jb25jYXQobWFwcGVkUmVjb3JkcykpOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbChyZWNvcmRQcm9taXNlcykudGhlbigodmFsdWVzKSA9PiB7CiAgICAgIHJldHVybiB2YWx1ZXMuZmxhdCgpOwogICAgfSk7CiAgfTsKICB2YXIgZmV0Y2hUaWxlc0RlYm91bmNlZCA9IGFzeW5jICh1aWQsIHRpbGVJZHMpID0+IHsKICAgIGNvbnN0IHRpbGVzID0ge307CiAgICBjb25zdCB2YWxpZFRpbGVJZHMgPSBbXTsKICAgIGNvbnN0IHRpbGVQcm9taXNlcyA9IFtdOwogICAgZm9yIChjb25zdCB0aWxlSWQgb2YgdGlsZUlkcykgewogICAgICBjb25zdCBwYXJ0cyA9IHRpbGVJZC5zcGxpdCgiLiIpOwogICAgICBjb25zdCB6ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTsKICAgICAgY29uc3QgeCA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7CiAgICAgIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHopKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJJbnZhbGlkIHRpbGUgem9vbSBvciBwb3NpdGlvbjoiLCB6LCB4KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YWxpZFRpbGVJZHMucHVzaCh0aWxlSWQpOwogICAgICB0aWxlUHJvbWlzZXMucHVzaCh0aWxlKHVpZCwgeiwgeCkpOwogICAgfQogICAgcmV0dXJuIFByb21pc2UuYWxsKHRpbGVQcm9taXNlcykudGhlbigodmFsdWVzKSA9PiB7CiAgICAgIHZhbHVlcy5mb3JFYWNoKChkLCBpKSA9PiB7CiAgICAgICAgY29uc3QgdmFsaWRUaWxlSWQgPSB2YWxpZFRpbGVJZHNbaV07CiAgICAgICAgdGlsZXNbdmFsaWRUaWxlSWRdID0gT2JqZWN0LmFzc2lnbihkLCB7IHRpbGVQb3NpdGlvbklkOiB2YWxpZFRpbGVJZCB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybiB0aWxlczsKICAgIH0pOwogIH07CiAgdmFyIGdldFRhYnVsYXJEYXRhID0gKHVpZCwgdGlsZUlkcykgPT4gewogICAgY29uc3QgeyBvcHRpb25zIH0gPSBkYXRhU291cmNlcy5nZXQodWlkKTsKICAgIGNvbnN0IGFsbFNlZ21lbnRzID0ge307CiAgICBmb3IgKGNvbnN0IHRpbGVJZCBvZiB0aWxlSWRzKSB7CiAgICAgIGNvbnN0IHRpbGVWYWx1ZSA9IHRpbGVWYWx1ZXMuZ2V0KGAke3VpZH0uJHt0aWxlSWR9YCk7CiAgICAgIGlmICghdGlsZVZhbHVlKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCJlcnJvciIgaW4gdGlsZVZhbHVlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbGVWYWx1ZS5lcnJvcik7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHRpbGVWYWx1ZSkgewogICAgICAgIGFsbFNlZ21lbnRzW3NlZ21lbnQuaWRdID0gewogICAgICAgICAgLi4uc2VnbWVudCwKICAgICAgICAgIHN1YnN0aXR1dGlvbnM6IEpTT04uc3RyaW5naWZ5KHNlZ21lbnQuc3Vic3RpdHV0aW9ucykKICAgICAgICB9OwogICAgICB9CiAgICB9CiAgICBjb25zdCBzZWdtZW50cyA9IE9iamVjdC52YWx1ZXMoYWxsU2VnbWVudHMpOwogICAgaWYgKG9wdGlvbnMubG9hZE1hdGVzKSB7CiAgICAgIGZpbmRNYXRlcyhzZWdtZW50cywgb3B0aW9ucy5tYXhJbnNlcnRTaXplKTsKICAgIH0KICAgIGxldCBvdXRwdXQ7CiAgICBpZiAob3B0aW9ucy5leHRyYWN0SnVuY3Rpb24pIHsKICAgICAgb3V0cHV0ID0gZmluZEp1bmN0aW9ucyhzZWdtZW50cywgb3B0aW9ucy5qdW5jdGlvbk1pbkNvdmVyYWdlKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dHB1dCA9IHNlZ21lbnRzOwogICAgfQogICAgY29uc3QgYnVmZmVyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpLmJ1ZmZlcjsKICAgIHJldHVybiBUcmFuc2ZlcihidWZmZXIsIFtidWZmZXJdKTsKICB9OwogIHZhciBncm91cEJ5ID0gKHhzLCBrZXkpID0+IHhzLnJlZHVjZSgocnYsIHgpID0+IHsKICAgIChydlt4W2tleV1dID0gcnZbeFtrZXldXSB8fCBbXSkucHVzaCh4KTsKICAgIHJldHVybiBydjsKICB9LCB7fSk7CiAgdmFyIGZpbmRNYXRlcyA9IChzZWdtZW50cywgbWF4SW5zZXJ0U2l6ZSA9IDApID0+IHsKICAgIGNvbnN0IHNlZ21lbnRzQnlSZWFkTmFtZSA9IGdyb3VwQnkoc2VnbWVudHMsICJuYW1lIik7CiAgICBPYmplY3QudmFsdWVzKHNlZ21lbnRzQnlSZWFkTmFtZSkuZm9yRWFjaCgoc2VnbWVudEdyb3VwKSA9PiB7CiAgICAgIGlmIChzZWdtZW50R3JvdXAubGVuZ3RoID09PSAyKSB7CiAgICAgICAgY29uc3QgcmVhZCA9IHNlZ21lbnRHcm91cFswXTsKICAgICAgICBjb25zdCBtYXRlID0gc2VnbWVudEdyb3VwWzFdOwogICAgICAgIHJlYWQubWF0ZUlkcyA9IFttYXRlLmlkXTsKICAgICAgICBtYXRlLm1hdGVJZHMgPSBbcmVhZC5pZF07CiAgICAgICAgY29uc3QgW2wsIHJdID0gW3JlYWQsIG1hdGVdLnNvcnQoKGEsIGIpID0+ICthLnN0YXJ0IC0gK2Iuc3RhcnQpOwogICAgICAgIGNvbnN0IGluc2VydFNpemUgPSBNYXRoLm1heCgwLCArci5zdGFydCAtICtsLmVuZCk7CiAgICAgICAgY29uc3QgbGFyZ2VJbnNlcnRTaXplID0gaW5zZXJ0U2l6ZSA+PSBtYXhJbnNlcnRTaXplOwogICAgICAgIGxldCBzdlR5cGU7CiAgICAgICAgaWYgKCFsYXJnZUluc2VydFNpemUpIHsKICAgICAgICAgIHN2VHlwZSA9ICJub3JtYWwgcmVhZCI7CiAgICAgICAgfSBlbHNlIGlmIChsLnN0cmFuZCA9PT0gIisiICYmIHIuc3RyYW5kID09PSAiLSIpIHsKICAgICAgICAgIHN2VHlwZSA9ICJkZWxldGlvbiAoKy0pIjsKICAgICAgICB9IGVsc2UgaWYgKGwuc3RyYW5kID09PSAiKyIgJiYgci5zdHJhbmQgPT09ICIrIikgewogICAgICAgICAgc3ZUeXBlID0gImludmVyc2lvbiAoKyspIjsKICAgICAgICB9IGVsc2UgaWYgKGwuc3RyYW5kID09PSAiLSIgJiYgci5zdHJhbmQgPT09ICItIikgewogICAgICAgICAgc3ZUeXBlID0gImludmVyc2lvbiAoLS0pIjsKICAgICAgICB9IGVsc2UgaWYgKGwuc3RyYW5kID09PSAiLSIgJiYgci5zdHJhbmQgPT09ICIrIikgewogICAgICAgICAgc3ZUeXBlID0gImR1cGxpY2F0aW9uICgtKykiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdlR5cGUgPSBgKCR7bC5zdHJhbmR9JHtyLnN0cmFuZH0pYDsKICAgICAgICB9CiAgICAgICAgW3JlYWQsIG1hdGVdLmZvckVhY2goKGQpID0+IHsKICAgICAgICAgIGQuZm91bmRNYXRlID0gdHJ1ZTsKICAgICAgICAgIGQuaW5zZXJ0U2l6ZSA9IGluc2VydFNpemU7CiAgICAgICAgICBkLmxhcmdlSW5zZXJ0U2l6ZSA9IGxhcmdlSW5zZXJ0U2l6ZTsKICAgICAgICAgIGQuc3ZUeXBlID0gc3ZUeXBlOwogICAgICAgICAgZC5udW1NYXRlcyA9IDI7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2VnbWVudEdyb3VwLmZvckVhY2goKGQpID0+IHsKICAgICAgICAgIGQubWF0ZUlkcyA9IHNlZ21lbnRHcm91cC5maWx0ZXIoKG1hdGUpID0+IG1hdGUuaWQgIT09IGQuaWQpLm1hcCgobWF0ZSkgPT4gbWF0ZS5pZCk7CiAgICAgICAgICBkLmZvdW5kTWF0ZSA9IGZhbHNlOwogICAgICAgICAgZC5pbnNlcnRTaXplID0gLTE7CiAgICAgICAgICBkLmxhcmdlSW5zZXJ0U2l6ZSA9IGZhbHNlOwogICAgICAgICAgZC5zdlR5cGUgPSBzZWdtZW50R3JvdXAubGVuZ3RoID09PSAxID8gIm1hdGVzIG5vdCBmb3VuZCB3aXRoaW4gY2hyb21vc29tZSIgOiAibW9yZSB0aGFuIHR3byBtYXRlcyI7CiAgICAgICAgICBkLm51bU1hdGVzID0gc2VnbWVudEdyb3VwLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gc2VnbWVudHNCeVJlYWROYW1lOwogIH07CiAgdmFyIGZpbmRKdW5jdGlvbnMgPSAoc2VnbWVudHMsIG1pbkNvdmVyYWdlID0gMCkgPT4gewogICAgY29uc3QganVuY3Rpb25zID0gW107CiAgICBzZWdtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7CiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBKU09OLnBhcnNlKHNlZ21lbnQuc3Vic3RpdHV0aW9ucyk7CiAgICAgIHN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoc3ViKSA9PiB7CiAgICAgICAgY29uc3QgZG9uID0gc2VnbWVudC5zdGFydCArIHN1Yi5wb3M7CiAgICAgICAgY29uc3QgYWNjID0gc2VnbWVudC5zdGFydCArIHN1Yi5wb3MgKyBzdWIubGVuZ3RoOwogICAgICAgIGlmIChzZWdtZW50LnN0YXJ0IDwgZG9uICYmIGFjYyA8IHNlZ21lbnQuZW5kKSB7CiAgICAgICAgICBjb25zdCBqID0ganVuY3Rpb25zLmZpbmQoKGQpID0+IGQuc3RhcnQgPT09IGRvbiAmJiBkLmVuZCA9PT0gYWNjKTsKICAgICAgICAgIGlmIChqKSB7CiAgICAgICAgICAgIGouc2NvcmUgKz0gMTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGp1bmN0aW9ucy5wdXNoKHsgc3RhcnQ6IGRvbiwgZW5kOiBhY2MsIHNjb3JlOiAxIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBqdW5jdGlvbnMuZmlsdGVyKChkKSA9PiBkLnNjb3JlID49IG1pbkNvdmVyYWdlKTsKICB9OwogIHZhciB0aWxlRnVuY3Rpb25zID0gewogICAgaW5pdCwKICAgIHRpbGVzZXRJbmZvLAogICAgZmV0Y2hUaWxlc0RlYm91bmNlZCwKICAgIHRpbGUsCiAgICBnZXRUYWJ1bGFyRGF0YQogIH07CiAgZXhwb3NlKHRpbGVGdW5jdGlvbnMpOwp9KSgpOwovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCg==",vle=typeof window<"u"&&window.Blob&&new Blob([atob(S2e)],{type:"text/javascript;charset=utf-8"});function Hgg(){const e=vle&&(window.URL||window.webkitURL).createObjectURL(vle);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+S2e,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const Tgg=200;class VH{constructor(g,I){rt(this,"dataConfig",{}),rt(this,"uid"),rt(this,"fetchTimeout"),rt(this,"toFetch"),rt(this,"MAX_TILE_WIDTH",2e4),rt(this,"worker"),rt(this,"track"),this.uid=g.libraries.slugid.nice(),this.toFetch=new Set;const{url:i,indexUrl:n,assembly:C,...r}=I;this.worker=UT(new Hgg).then(async o=>{const a=Object.entries(bI(C).size);return await o.init(this.uid,{url:i,indexUrl:n},a,r),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,I){var i;const{toFetch:n}=this,C=I[0].split(".")[0],r=n.size?[...n][0].split(".")[0]:null;if(C!==r){for(const o of this.toFetch)(i=this.track)==null||i.fetching.delete(o);this.toFetch.clear()}I.forEach(o=>this.toFetch.add(o)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},Tgg)}async sendFetch(g,I){(await this.worker).fetchTilesDebounced(this.uid,I).then(g)}async getTabularData(g){const I=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(I))}}rt(VH,"config",{type:"bam"});const w2e="KCgpID0+IHsKICB2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIF9fbWFya0FzTW9kdWxlID0gKHRhcmdldCkgPT4gX19kZWZQcm9wKHRhcmdldCwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7CiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltPYmplY3Qua2V5cyhmbilbMF1dKShmbiA9IDApKSwgcmVzOwogIH07CiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkgewogICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbT2JqZWN0LmtleXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7CiAgfTsKICB2YXIgX19yZUV4cG9ydCA9ICh0YXJnZXQsIG1vZHVsZTIsIGRlc2MpID0+IHsKICAgIGlmIChtb2R1bGUyICYmIHR5cGVvZiBtb2R1bGUyID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbW9kdWxlMiA9PT0gImZ1bmN0aW9uIikgewogICAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kdWxlMikpCiAgICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0YXJnZXQsIGtleSkgJiYga2V5ICE9PSAiZGVmYXVsdCIpCiAgICAgICAgICBfX2RlZlByb3AodGFyZ2V0LCBrZXksIHsgZ2V0OiAoKSA9PiBtb2R1bGUyW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MobW9kdWxlMiwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9OwogIHZhciBfX3RvTW9kdWxlID0gKG1vZHVsZTIpID0+IHsKICAgIHJldHVybiBfX3JlRXhwb3J0KF9fbWFya0FzTW9kdWxlKF9fZGVmUHJvcChtb2R1bGUyICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kdWxlMikpIDoge30sICJkZWZhdWx0IiwgbW9kdWxlMiAmJiBtb2R1bGUyLl9fZXNNb2R1bGUgJiYgImRlZmF1bHQiIGluIG1vZHVsZTIgPyB7IGdldDogKCkgPT4gbW9kdWxlMi5kZWZhdWx0LCBlbnVtZXJhYmxlOiB0cnVlIH0gOiB7IHZhbHVlOiBtb2R1bGUyLCBlbnVtZXJhYmxlOiB0cnVlIH0pKSwgbW9kdWxlMik7CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jhc2U2NC1qc0AxLjUuMS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfYmFzZTY0X2pzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jhc2U2NC1qc0AxLjUuMS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZXhwb3J0czIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGV4cG9ydHMyLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXk7CiAgICAgIGV4cG9ydHMyLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5OwogICAgICB2YXIgbG9va3VwID0gW107CiAgICAgIHZhciByZXZMb29rdXAgPSBbXTsKICAgICAgdmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAidW5kZWZpbmVkIiA/IFVpbnQ4QXJyYXkgOiBBcnJheTsKICAgICAgdmFyIGNvZGUgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICBsb29rdXBbaV0gPSBjb2RlW2ldOwogICAgICAgIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaTsKICAgICAgfQogICAgICB2YXIgaTsKICAgICAgdmFyIGxlbjsKICAgICAgcmV2TG9va3VwWyItIi5jaGFyQ29kZUF0KDApXSA9IDYyOwogICAgICByZXZMb29rdXBbIl8iLmNoYXJDb2RlQXQoMCldID0gNjM7CiAgICAgIGZ1bmN0aW9uIGdldExlbnMoYjY0KSB7CiAgICAgICAgdmFyIGxlbjIgPSBiNjQubGVuZ3RoOwogICAgICAgIGlmIChsZW4yICUgNCA+IDApIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpOwogICAgICAgIH0KICAgICAgICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZigiPSIpOwogICAgICAgIGlmICh2YWxpZExlbiA9PT0gLTEpCiAgICAgICAgICB2YWxpZExlbiA9IGxlbjI7CiAgICAgICAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW4yID8gMCA6IDQgLSB2YWxpZExlbiAlIDQ7CiAgICAgICAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBieXRlTGVuZ3RoKGI2NCkgewogICAgICAgIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpOwogICAgICAgIHZhciB2YWxpZExlbiA9IGxlbnNbMF07CiAgICAgICAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV07CiAgICAgICAgcmV0dXJuICh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0xlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHsKICAgICAgICByZXR1cm4gKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzTGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHRvQnl0ZUFycmF5KGI2NCkgewogICAgICAgIHZhciB0bXA7CiAgICAgICAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NCk7CiAgICAgICAgdmFyIHZhbGlkTGVuID0gbGVuc1swXTsKICAgICAgICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXTsKICAgICAgICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKTsKICAgICAgICB2YXIgY3VyQnl0ZSA9IDA7CiAgICAgICAgdmFyIGxlbjIgPSBwbGFjZUhvbGRlcnNMZW4gPiAwID8gdmFsaWRMZW4gLSA0IDogdmFsaWRMZW47CiAgICAgICAgdmFyIGkyOwogICAgICAgIGZvciAoaTIgPSAwOyBpMiA8IGxlbjI7IGkyICs9IDQpIHsKICAgICAgICAgIHRtcCA9IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMildIDw8IDE4IHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMSldIDw8IDEyIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMildIDw8IDYgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAzKV07CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCA+PiAxNiAmIDI1NTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wID4+IDggJiAyNTU7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikgewogICAgICAgICAgdG1wID0gcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyKV0gPDwgMiB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDEpXSA+PiA0OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAyNTU7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHsKICAgICAgICAgIHRtcCA9IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMildIDw8IDEwIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMSldIDw8IDQgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAyKV0gPj4gMjsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wID4+IDggJiAyNTU7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycjsKICAgICAgfQogICAgICBmdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQobnVtKSB7CiAgICAgICAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiA2M10gKyBsb29rdXBbbnVtID4+IDEyICYgNjNdICsgbG9va3VwW251bSA+PiA2ICYgNjNdICsgbG9va3VwW251bSAmIDYzXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBlbmNvZGVDaHVuayh1aW50OCwgc3RhcnQsIGVuZCkgewogICAgICAgIHZhciB0bXA7CiAgICAgICAgdmFyIG91dHB1dCA9IFtdOwogICAgICAgIGZvciAodmFyIGkyID0gc3RhcnQ7IGkyIDwgZW5kOyBpMiArPSAzKSB7CiAgICAgICAgICB0bXAgPSAodWludDhbaTJdIDw8IDE2ICYgMTY3MTE2ODApICsgKHVpbnQ4W2kyICsgMV0gPDwgOCAmIDY1MjgwKSArICh1aW50OFtpMiArIDJdICYgMjU1KTsKICAgICAgICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dHB1dC5qb2luKCIiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQnl0ZUFycmF5KHVpbnQ4KSB7CiAgICAgICAgdmFyIHRtcDsKICAgICAgICB2YXIgbGVuMiA9IHVpbnQ4Lmxlbmd0aDsKICAgICAgICB2YXIgZXh0cmFCeXRlcyA9IGxlbjIgJSAzOwogICAgICAgIHZhciBwYXJ0cyA9IFtdOwogICAgICAgIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzOwogICAgICAgIGZvciAodmFyIGkyID0gMCwgbGVuMjIgPSBsZW4yIC0gZXh0cmFCeXRlczsgaTIgPCBsZW4yMjsgaTIgKz0gbWF4Q2h1bmtMZW5ndGgpIHsKICAgICAgICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGkyLCBpMiArIG1heENodW5rTGVuZ3RoID4gbGVuMjIgPyBsZW4yMiA6IGkyICsgbWF4Q2h1bmtMZW5ndGgpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHsKICAgICAgICAgIHRtcCA9IHVpbnQ4W2xlbjIgLSAxXTsKICAgICAgICAgIHBhcnRzLnB1c2gobG9va3VwW3RtcCA+PiAyXSArIGxvb2t1cFt0bXAgPDwgNCAmIDYzXSArICI9PSIpOwogICAgICAgIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikgewogICAgICAgICAgdG1wID0gKHVpbnQ4W2xlbjIgLSAyXSA8PCA4KSArIHVpbnQ4W2xlbjIgLSAxXTsKICAgICAgICAgIHBhcnRzLnB1c2gobG9va3VwW3RtcCA+PiAxMF0gKyBsb29rdXBbdG1wID4+IDQgJiA2M10gKyBsb29rdXBbdG1wIDw8IDIgJiA2M10gKyAiPSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFydHMuam9pbigiIik7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMKICB2YXIgcmVxdWlyZV9pZWVlNzU0ID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgZXhwb3J0czIucmVhZCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHsKICAgICAgICB2YXIgZSwgbTsKICAgICAgICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTsKICAgICAgICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTsKICAgICAgICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7CiAgICAgICAgdmFyIG5CaXRzID0gLTc7CiAgICAgICAgdmFyIGkgPSBpc0xFID8gbkJ5dGVzIC0gMSA6IDA7CiAgICAgICAgdmFyIGQgPSBpc0xFID8gLTEgOiAxOwogICAgICAgIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldOwogICAgICAgIGkgKz0gZDsKICAgICAgICBlID0gcyAmICgxIDw8IC1uQml0cykgLSAxOwogICAgICAgIHMgPj49IC1uQml0czsKICAgICAgICBuQml0cyArPSBlTGVuOwogICAgICAgIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTsKICAgICAgICBlID4+PSAtbkJpdHM7CiAgICAgICAgbkJpdHMgKz0gbUxlbjsKICAgICAgICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7CiAgICAgICAgfQogICAgICAgIGlmIChlID09PSAwKSB7CiAgICAgICAgICBlID0gMSAtIGVCaWFzOwogICAgICAgIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkgewogICAgICAgICAgcmV0dXJuIG0gPyBOYU4gOiAocyA/IC0xIDogMSkgKiBJbmZpbml0eTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKTsKICAgICAgICAgIGUgPSBlIC0gZUJpYXM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pOwogICAgICB9OwogICAgICBleHBvcnRzMi53cml0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7CiAgICAgICAgdmFyIGUsIG0sIGM7CiAgICAgICAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7CiAgICAgICAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7CiAgICAgICAgdmFyIGVCaWFzID0gZU1heCA+PiAxOwogICAgICAgIHZhciBydCA9IG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwOwogICAgICAgIHZhciBpID0gaXNMRSA/IDAgOiBuQnl0ZXMgLSAxOwogICAgICAgIHZhciBkID0gaXNMRSA/IDEgOiAtMTsKICAgICAgICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7CiAgICAgICAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7CiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHsKICAgICAgICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMDsKICAgICAgICAgIGUgPSBlTWF4OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMik7CiAgICAgICAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7CiAgICAgICAgICAgIGUtLTsKICAgICAgICAgICAgYyAqPSAyOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7CiAgICAgICAgICAgIHZhbHVlICs9IHJ0IC8gYzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWx1ZSAqIGMgPj0gMikgewogICAgICAgICAgICBlKys7CiAgICAgICAgICAgIGMgLz0gMjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkgewogICAgICAgICAgICBtID0gMDsKICAgICAgICAgICAgZSA9IGVNYXg7CiAgICAgICAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7CiAgICAgICAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKTsKICAgICAgICAgICAgZSA9IGUgKyBlQmlhczsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKTsKICAgICAgICAgICAgZSA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAyNTUsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkgewogICAgICAgIH0KICAgICAgICBlID0gZSA8PCBtTGVuIHwgbTsKICAgICAgICBlTGVuICs9IG1MZW47CiAgICAgICAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMjU1LCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4OwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYnVmZmVyQDYuMC4zL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMKICB2YXIgcmVxdWlyZV9idWZmZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYnVmZmVyQDYuMC4zL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgYmFzZTY0ID0gcmVxdWlyZV9iYXNlNjRfanMoKTsKICAgICAgdmFyIGllZWU3NTQgPSByZXF1aXJlX2llZWU3NTQoKTsKICAgICAgdmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2xbImZvciJdID09PSAiZnVuY3Rpb24iID8gU3ltYm9sWyJmb3IiXSgibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKSA6IG51bGw7CiAgICAgIGV4cG9ydHMyLkJ1ZmZlciA9IEJ1ZmZlcjEwOwogICAgICBleHBvcnRzMi5TbG93QnVmZmVyID0gU2xvd0J1ZmZlcjsKICAgICAgZXhwb3J0czIuSU5TUEVDVF9NQVhfQllURVMgPSA1MDsKICAgICAgdmFyIEtfTUFYX0xFTkdUSCA9IDIxNDc0ODM2NDc7CiAgICAgIGV4cG9ydHMyLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEg7CiAgICAgIEJ1ZmZlcjEwLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpOwogICAgICBpZiAoIUJ1ZmZlcjEwLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgICAgY29uc3QgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiA0MjsKICAgICAgICAgIH0gfTsKICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpOwogICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pOwogICAgICAgICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDI7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyMTAucHJvdG90eXBlLCAicGFyZW50IiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGhpcykpCiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlcjEwLnByb3RvdHlwZSwgIm9mZnNldCIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKHRoaXMpKQogICAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBmdW5jdGlvbiBjcmVhdGVCdWZmZXIobGVuZ3RoKSB7CiAgICAgICAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyArIGxlbmd0aCArICciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTsKICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIxMC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQnVmZmVyMTAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnBvb2xTaXplID0gODE5MjsKICAgICAgZnVuY3Rpb24gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIgKyB0eXBlb2YgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8IHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHwgdmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpOwogICAgICAgIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHsKICAgICAgICAgIHJldHVybiBCdWZmZXIxMC5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGIgPSBmcm9tT2JqZWN0KHZhbHVlKTsKICAgICAgICBpZiAoYikKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlcjEwLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIgKyB0eXBlb2YgdmFsdWUpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmZyb20gPSBmdW5jdGlvbih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH07CiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIxMC5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjEwLCBVaW50OEFycmF5KTsKICAgICAgZnVuY3Rpb24gYXNzZXJ0U2l6ZShzaXplKSB7CiAgICAgICAgaWYgKHR5cGVvZiBzaXplICE9PSAibnVtYmVyIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTsKICAgICAgICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInICsgc2l6ZSArICciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHsKICAgICAgICBhc3NlcnRTaXplKHNpemUpOwogICAgICAgIGlmIChzaXplIDw9IDApIHsKICAgICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChmaWxsICE9PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICJzdHJpbmciID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAuYWxsb2MgPSBmdW5jdGlvbihzaXplLCBmaWxsLCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZyk7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGFsbG9jVW5zYWZlKHNpemUpIHsKICAgICAgICBhc3NlcnRTaXplKHNpemUpOwogICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcsIGVuY29kaW5nKSB7CiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIgfHwgZW5jb2RpbmcgPT09ICIiKSB7CiAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICB9CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDA7CiAgICAgICAgbGV0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpOwogICAgICAgIGNvbnN0IGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKTsKICAgICAgICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHsKICAgICAgICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHsKICAgICAgICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDA7CiAgICAgICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUFycmF5VmlldyhhcnJheVZpZXcpIHsKICAgICAgICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7CiAgICAgICAgICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlWaWV3KTsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsIGNvcHkuYnl0ZU9mZnNldCwgY29weS5ieXRlTGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpOwogICAgICAgIH0KICAgICAgICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7CiAgICAgICAgfQogICAgICAgIGxldCBidWY7CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPT09IHZvaWQgMCAmJiBsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpOwogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKICAgICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlcjEwLnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaikgewogICAgICAgIGlmIChCdWZmZXIxMC5pc0J1ZmZlcihvYmopKSB7CiAgICAgICAgICBjb25zdCBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMDsKICAgICAgICAgIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pOwogICAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICAgIH0KICAgICAgICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKTsKICAgICAgICAgIHJldHVybiBidWY7CiAgICAgICAgfQogICAgICAgIGlmIChvYmoubGVuZ3RoICE9PSB2b2lkIDApIHsKICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gIm51bWJlciIgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHsKICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iaik7CiAgICAgICAgfQogICAgICAgIGlmIChvYmoudHlwZSA9PT0gIkJ1ZmZlciIgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY2hlY2tlZChsZW5ndGgpIHsKICAgICAgICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICIgYnl0ZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxlbmd0aCB8IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gU2xvd0J1ZmZlcihsZW5ndGgpIHsKICAgICAgICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsKICAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBCdWZmZXIxMC5hbGxvYygrbGVuZ3RoKTsKICAgICAgfQogICAgICBCdWZmZXIxMC5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyMihiKSB7CiAgICAgICAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJiBiICE9PSBCdWZmZXIxMC5wcm90b3R5cGU7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHsKICAgICAgICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkKICAgICAgICAgIGEgPSBCdWZmZXIxMC5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpOwogICAgICAgIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKQogICAgICAgICAgYiA9IEJ1ZmZlcjEwLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aCk7CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyMTAuaXNCdWZmZXIoYikpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpOwogICAgICAgIH0KICAgICAgICBpZiAoYSA9PT0gYikKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCB4ID0gYS5sZW5ndGg7CiAgICAgICAgbGV0IHkgPSBiLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHsKICAgICAgICAgICAgeCA9IGFbaV07CiAgICAgICAgICAgIHkgPSBiW2ldOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHggPCB5KQogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIGlmICh5IDwgeCkKICAgICAgICAgIHJldHVybiAxOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgICBCdWZmZXIxMC5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyhlbmNvZGluZykgewogICAgICAgIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICBjYXNlICJoZXgiOgogICAgICAgICAgY2FzZSAidXRmOCI6CiAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICBjYXNlICJhc2NpaSI6CiAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgIGNhc2UgInVjcy0yIjoKICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdChsaXN0LCBsZW5ndGgpIHsKICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyMTAuYWxsb2MoMCk7CiAgICAgICAgfQogICAgICAgIGxldCBpOwogICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyMTAuYWxsb2NVbnNhZmUobGVuZ3RoKTsKICAgICAgICBsZXQgcG9zID0gMDsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgewogICAgICAgICAgbGV0IGJ1ZiA9IGxpc3RbaV07CiAgICAgICAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7CiAgICAgICAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYnVmKSkKICAgICAgICAgICAgICAgIGJ1ZiA9IEJ1ZmZlcjEwLmZyb20oYnVmKTsKICAgICAgICAgICAgICBidWYuY29weShidWZmZXIsIHBvcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoYnVmZmVyLCBidWYsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKGJ1ZikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpOwogICAgICAgICAgfQogICAgICAgICAgcG9zICs9IGJ1Zi5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgewogICAgICAgIGlmIChCdWZmZXIxMC5pc0J1ZmZlcihzdHJpbmcpKSB7CiAgICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGNvbnN0IG11c3RNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZTsKICAgICAgICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsZW47CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOwogICAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gKiAyOwogICAgICAgICAgICBjYXNlICJoZXgiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gPj4+IDE7CiAgICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoIiIgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoOwogICAgICBmdW5jdGlvbiBzbG93VG9TdHJpbmcoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCB8fCBzdGFydCA8IDApIHsKICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA9PT0gdm9pZCAwIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICBlbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8PSAwKSB7CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGVuZCA+Pj49IDA7CiAgICAgICAgc3RhcnQgPj4+PSAwOwogICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKCFlbmNvZGluZykKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGxvd2VyZWRDYXNlKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWU7CiAgICAgIGZ1bmN0aW9uIHN3YXAoYiwgbiwgbSkgewogICAgICAgIGNvbnN0IGkgPSBiW25dOwogICAgICAgIGJbbl0gPSBiW21dOwogICAgICAgIGJbbV0gPSBpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDIgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDQgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyAzKTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDggIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyA3KTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIxMC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMoYikgewogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYikpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7CiAgICAgICAgaWYgKHRoaXMgPT09IGIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gQnVmZmVyMTAuY29tcGFyZSh0aGlzLCBiKSA9PT0gMDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkgewogICAgICAgIGxldCBzdHIgPSAiIjsKICAgICAgICBjb25zdCBtYXggPSBleHBvcnRzMi5JTlNQRUNUX01BWF9CWVRFUzsKICAgICAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCJoZXgiLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAiJDEgIikudHJpbSgpOwogICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkKICAgICAgICAgIHN0ciArPSAiIC4uLiAiOwogICAgICAgIHJldHVybiAiPEJ1ZmZlciAiICsgc3RyICsgIj4iOwogICAgICB9OwogICAgICBpZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkgewogICAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5pbnNwZWN0OwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkgewogICAgICAgIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHsKICAgICAgICAgIHRhcmdldCA9IEJ1ZmZlcjEwLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGFyZ2V0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNTdGFydCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzRW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHN0YXJ0ID4+Pj0gMDsKICAgICAgICBlbmQgPj4+PSAwOwogICAgICAgIHRoaXNTdGFydCA+Pj49IDA7CiAgICAgICAgdGhpc0VuZCA+Pj49IDA7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydDsKICAgICAgICBsZXQgeSA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpOwogICAgICAgIGNvbnN0IHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpOwogICAgICAgIGNvbnN0IHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7CiAgICAgICAgICAgIHggPSB0aGlzQ29weVtpXTsKICAgICAgICAgICAgeSA9IHRhcmdldENvcHlbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0OwogICAgICAgICAgYnl0ZU9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMjE0NzQ4MzY0NykgewogICAgICAgICAgYnl0ZU9mZnNldCA9IDIxNDc0ODM2NDc7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTIxNDc0ODM2NDgpIHsKICAgICAgICAgIGJ5dGVPZmZzZXQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICB9CiAgICAgICAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0OwogICAgICAgIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkgewogICAgICAgICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiBidWZmZXIubGVuZ3RoIC0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwKQogICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0OwogICAgICAgIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIGJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFsID0gQnVmZmVyMTAuZnJvbSh2YWwsIGVuY29kaW5nKTsKICAgICAgICB9CiAgICAgICAgaWYgKEJ1ZmZlcjEwLmlzQnVmZmVyKHZhbCkpIHsKICAgICAgICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHZhbCA9IHZhbCAmIDI1NTsKICAgICAgICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBpZiAoZGlyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBhcnJheUluZGV4T2YoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHsKICAgICAgICBsZXQgaW5kZXhTaXplID0gMTsKICAgICAgICBsZXQgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aDsKICAgICAgICBsZXQgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aDsKICAgICAgICBpZiAoZW5jb2RpbmcgIT09IHZvaWQgMCkgewogICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1Y3MyIiB8fCBlbmNvZGluZyA9PT0gInVjcy0yIiB8fCBlbmNvZGluZyA9PT0gInV0ZjE2bGUiIHx8IGVuY29kaW5nID09PSAidXRmLTE2bGUiKSB7CiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmRleFNpemUgPSAyOwogICAgICAgICAgICBhcnJMZW5ndGggLz0gMjsKICAgICAgICAgICAgdmFsTGVuZ3RoIC89IDI7CiAgICAgICAgICAgIGJ5dGVPZmZzZXQgLz0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcmVhZChidWYsIGkyKSB7CiAgICAgICAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBidWZbaTJdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaTIgKiBpbmRleFNpemUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgaTsKICAgICAgICBpZiAoZGlyKSB7CiAgICAgICAgICBsZXQgZm91bmRJbmRleCA9IC0xOwogICAgICAgICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHsKICAgICAgICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpCiAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gaTsKICAgICAgICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpCiAgICAgICAgICAgICAgICBpIC09IGkgLSBmb3VuZEluZGV4OwogICAgICAgICAgICAgIGZvdW5kSW5kZXggPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aDsKICAgICAgICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGxldCBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7CiAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBoZXhXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwOwogICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXQ7CiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7CiAgICAgICAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7CiAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RyTGVuID0gc3RyaW5nLmxlbmd0aDsKICAgICAgICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikgewogICAgICAgICAgbGVuZ3RoID0gc3RyTGVuIC8gMjsKICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpOwogICAgICAgICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpCiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGY4V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmFzZTY0V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1Y3MyV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHsKICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSB2b2lkIDAgJiYgdHlwZW9mIG9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGVuY29kaW5nID0gb2Zmc2V0OwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkgewogICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHsKICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IHZvaWQgMCkKICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoOwogICAgICAgICAgICBsZW5ndGggPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwIHx8IGxlbmd0aCA+IHJlbWFpbmluZykKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2U7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKCIiICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogIkJ1ZmZlciIsCiAgICAgICAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMCkKICAgICAgICB9OwogICAgICB9OwogICAgICBmdW5jdGlvbiBiYXNlNjRTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpOwogICAgICAgIGNvbnN0IHJlcyA9IFtdOwogICAgICAgIGxldCBpID0gc3RhcnQ7CiAgICAgICAgd2hpbGUgKGkgPCBlbmQpIHsKICAgICAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IGJ1ZltpXTsKICAgICAgICAgIGxldCBjb2RlUG9pbnQgPSBudWxsOwogICAgICAgICAgbGV0IGJ5dGVzUGVyU2VxdWVuY2UgPSBmaXJzdEJ5dGUgPiAyMzkgPyA0IDogZmlyc3RCeXRlID4gMjIzID8gMyA6IGZpcnN0Qnl0ZSA+IDE5MSA/IDIgOiAxOwogICAgICAgICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkgewogICAgICAgICAgICBsZXQgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMTI4KSB7CiAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMzEpIDw8IDYgfCBzZWNvbmRCeXRlICYgNjM7CiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMTI3KSB7CiAgICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07CiAgICAgICAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTIgfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCA2IHwgdGhpcmRCeXRlICYgNjM7CiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMjA0NyAmJiAodGVtcENvZGVQb2ludCA8IDU1Mjk2IHx8IHRlbXBDb2RlUG9pbnQgPiA1NzM0MykpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTsKICAgICAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07CiAgICAgICAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXTsKICAgICAgICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDE5MikgPT09IDEyOCAmJiAodGhpcmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmIChmb3VydGhCeXRlICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMTUpIDw8IDE4IHwgKHNlY29uZEJ5dGUgJiA2MykgPDwgMTIgfCAodGhpcmRCeXRlICYgNjMpIDw8IDYgfCBmb3VydGhCeXRlICYgNjM7CiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gNjU1MzUgJiYgdGVtcENvZGVQb2ludCA8IDExMTQxMTIpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHsKICAgICAgICAgICAgY29kZVBvaW50ID0gNjU1MzM7CiAgICAgICAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiA2NTUzNSkgewogICAgICAgICAgICBjb2RlUG9pbnQgLT0gNjU1MzY7CiAgICAgICAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAxMDIzIHwgNTUyOTYpOwogICAgICAgICAgICBjb2RlUG9pbnQgPSA1NjMyMCB8IGNvZGVQb2ludCAmIDEwMjM7CiAgICAgICAgICB9CiAgICAgICAgICByZXMucHVzaChjb2RlUG9pbnQpOwogICAgICAgICAgaSArPSBieXRlc1BlclNlcXVlbmNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcyk7CiAgICAgIH0KICAgICAgdmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gNDA5NjsKICAgICAgZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5KGNvZGVQb2ludHMpIHsKICAgICAgICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aDsKICAgICAgICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7CiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpOwogICAgICAgIH0KICAgICAgICBsZXQgcmVzID0gIiI7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFzY2lpU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgbGV0IHJldCA9ICIiOwogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDEyNyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbGF0aW4xU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgbGV0IHJldCA9ICIiOwogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaGV4U2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgbGVuID0gYnVmLmxlbmd0aDsKICAgICAgICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkKICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikKICAgICAgICAgIGVuZCA9IGxlbjsKICAgICAgICBsZXQgb3V0ID0gIiI7CiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmMTZsZVNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGNvbnN0IGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBzdGFydCA9IH5+c3RhcnQ7CiAgICAgICAgZW5kID0gZW5kID09PSB2b2lkIDAgPyBsZW4gOiB+fmVuZDsKICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgICBzdGFydCArPSBsZW47CiAgICAgICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikgewogICAgICAgICAgc3RhcnQgPSBsZW47CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgICBlbmQgKz0gbGVuOwogICAgICAgICAgaWYgKGVuZCA8IDApCiAgICAgICAgICAgIGVuZCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHsKICAgICAgICAgIGVuZCA9IGxlbjsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8IHN0YXJ0KQogICAgICAgICAgZW5kID0gc3RhcnQ7CiAgICAgICAgY29uc3QgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKTsKICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3QnVmLCBCdWZmZXIxMC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBuZXdCdWY7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGNoZWNrT2Zmc2V0KG9mZnNldCwgZXh0LCBsZW5ndGgpIHsKICAgICAgICBpZiAob2Zmc2V0ICUgMSAhPT0gMCB8fCBvZmZzZXQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVWludExFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFKG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBpID0gMDsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50QkUgPSBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGxldCB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aDJdOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIHdoaWxlIChieXRlTGVuZ3RoMiA+IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGgyXSAqIG11bDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50OCA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgODsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAxXTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MzJMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuICh0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2KSArIHRoaXNbb2Zmc2V0ICsgM10gKiAxNjc3NzIxNjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSAqIDE2Nzc3MjE2ICsgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYgfCB0aGlzW29mZnNldCArIDJdIDw8IDggfCB0aGlzW29mZnNldCArIDNdKTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsbyA9IGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQ7CiAgICAgICAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgbGFzdCAqIDIgKiogMjQ7CiAgICAgICAgcmV0dXJuIEJpZ0ludChsbykgKyAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NEJFKG9mZnNldCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XTsKICAgICAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaGkgPSBmaXJzdCAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdOwogICAgICAgIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0OwogICAgICAgIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbyk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFKG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBpID0gMDsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bDsKICAgICAgICB9CiAgICAgICAgbXVsICo9IDEyODsKICAgICAgICBpZiAodmFsID49IG11bCkKICAgICAgICAgIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpOwogICAgICAgIHJldHVybiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDI7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXTsKICAgICAgICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsOwogICAgICAgIH0KICAgICAgICBtdWwgKj0gMTI4OwogICAgICAgIGlmICh2YWwgPj0gbXVsKQogICAgICAgICAgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMik7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDgob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgaWYgKCEodGhpc1tvZmZzZXRdICYgMTI4KSkKICAgICAgICAgIHJldHVybiB0aGlzW29mZnNldF07CiAgICAgICAgcmV0dXJuICgyNTUgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDg7CiAgICAgICAgcmV0dXJuIHZhbCAmIDMyNzY4ID8gdmFsIHwgNDI5NDkwMTc2MCA6IHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8IHRoaXNbb2Zmc2V0XSA8PCA4OwogICAgICAgIHJldHVybiB2YWwgJiAzMjc2OCA/IHZhbCB8IDQyOTQ5MDE3NjAgOiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAzXSA8PCAyNDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSA8PCAyNCB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYgfCB0aGlzW29mZnNldCArIDJdIDw8IDggfCB0aGlzW29mZnNldCArIDNdOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDRdICsgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICsgKGxhc3QgPDwgMjQpOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQoZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XTsKICAgICAgICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdCk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBjaGVja0ludChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHsKICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKGJ1ZikpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7CiAgICAgICAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKSAtIDE7CiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbWF4Qnl0ZXMsIDApOwogICAgICAgIH0KICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlIC8gbXVsICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnRCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKSAtIDE7CiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbWF4Qnl0ZXMsIDApOwogICAgICAgIH0KICAgICAgICBsZXQgaSA9IGJ5dGVMZW5ndGgyIC0gMTsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAyNTU7CiAgICAgICAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlIC8gbXVsICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQ4ID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAyNTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgNjU1MzUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludDE2QkUgPSBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDY1NTM1LCAwKTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCA0Mjk0OTY3Mjk1LCAwKTsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgNDI5NDk2NzI5NSwgMCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gd3J0QmlnVUludDY0TEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkgewogICAgICAgIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNyk7CiAgICAgICAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHdydEJpZ1VJbnQ2NEJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHsKICAgICAgICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpOwogICAgICAgIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCArIDddID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyA2XSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgNV0gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDRdID0gbG87CiAgICAgICAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQgKyAzXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgMl0gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDFdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXRdID0gaGk7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDg7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwogICAgICB9KTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwogICAgICB9KTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMiAtIDEpOwogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIGxpbWl0IC0gMSwgLWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBzdWIgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7CiAgICAgICAgICAgIHN1YiA9IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsID4+IDApIC0gc3ViICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIgLSAxKTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBsaW1pdCAtIDEsIC1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBzdWIgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkgewogICAgICAgICAgICBzdWIgPSAxOwogICAgICAgICAgfQogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCA+PiAwKSAtIHN1YiAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAxMjcsIC0xMjgpOwogICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICB2YWx1ZSA9IDI1NSArIHZhbHVlICsgMTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMzI3NjcsIC0zMjc2OCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAyOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAzMjc2NywgLTMyNzY4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDIxNDc0ODM2NDcsIC0yMTQ3NDgzNjQ4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAyMTQ3NDgzNjQ3LCAtMjE0NzQ4MzY0OCk7CiAgICAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgIHZhbHVlID0gNDI5NDk2NzI5NSArIHZhbHVlICsgMTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBmdW5jdGlvbiBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7CiAgICAgICAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMzQwMjgyMzQ2NjM4NTI4ODZlMjIsIC0zNDAyODIzNDY2Mzg1Mjg4NmUyMik7CiAgICAgICAgfQogICAgICAgIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwgLTE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mik7CiAgICAgICAgfQogICAgICAgIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgODsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5KHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKHRhcmdldCkpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTsKICAgICAgICBpZiAoIXN0YXJ0KQogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGlmICghZW5kICYmIGVuZCAhPT0gMCkKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKQogICAgICAgICAgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoOwogICAgICAgIGlmICghdGFyZ2V0U3RhcnQpCiAgICAgICAgICB0YXJnZXRTdGFydCA9IDA7CiAgICAgICAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpCiAgICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBpZiAoZW5kID09PSBzdGFydCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHRhcmdldFN0YXJ0IDwgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICBpZiAoZW5kIDwgMCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkgewogICAgICAgICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHRhcmdldCwgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSwgdGFyZ2V0U3RhcnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVuOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykgewogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICAgICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBzdGFydDsKICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICAgICBlbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmQ7CiAgICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDAgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAic3RyaW5nIiAmJiAhQnVmZmVyMTAuaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAidXRmOCIgJiYgY29kZSA8IDEyOCB8fCBlbmNvZGluZyA9PT0gImxhdGluMSIpIHsKICAgICAgICAgICAgICB2YWwgPSBjb2RlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgdmFsID0gdmFsICYgMjU1OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGFydCA9IHN0YXJ0ID4+PiAwOwogICAgICAgIGVuZCA9IGVuZCA9PT0gdm9pZCAwID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDA7CiAgICAgICAgaWYgKCF2YWwpCiAgICAgICAgICB2YWwgPSAwOwogICAgICAgIGxldCBpOwogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgICB0aGlzW2ldID0gdmFsOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlcjEwLmlzQnVmZmVyKHZhbCkgPyB2YWwgOiBCdWZmZXIxMC5mcm9tKHZhbCwgZW5jb2RpbmcpOwogICAgICAgICAgY29uc3QgbGVuID0gYnl0ZXMubGVuZ3RoOwogICAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicgKyB2YWwgKyAnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkgewogICAgICAgICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIHZhciBlcnJvcnMgPSB7fTsKICAgICAgZnVuY3Rpb24gRShzeW0sIGdldE1lc3NhZ2UsIEJhc2UpIHsKICAgICAgICBlcnJvcnNbc3ltXSA9IGNsYXNzIE5vZGVFcnJvciBleHRlbmRzIEJhc2UgewogICAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibWVzc2FnZSIsIHsKICAgICAgICAgICAgICB2YWx1ZTogZ2V0TWVzc2FnZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLAogICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lfSBbJHtzeW19XWA7CiAgICAgICAgICAgIHRoaXMuc3RhY2s7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgICBnZXQgY29kZSgpIHsKICAgICAgICAgICAgcmV0dXJuIHN5bTsKICAgICAgICAgIH0KICAgICAgICAgIHNldCBjb2RlKHZhbHVlKSB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtzeW19XTogJHt0aGlzLm1lc3NhZ2V9YDsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIEUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsIGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgcmV0dXJuIGAke25hbWV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcyI7CiAgICAgIH0sIFJhbmdlRXJyb3IpOwogICAgICBFKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsIGZ1bmN0aW9uKG5hbWUsIGFjdHVhbCkgewogICAgICAgIHJldHVybiBgVGhlICIke25hbWV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gOwogICAgICB9LCBUeXBlRXJyb3IpOwogICAgICBFKCJFUlJfT1VUX09GX1JBTkdFIiwgZnVuY3Rpb24oc3RyLCByYW5nZSwgaW5wdXQpIHsKICAgICAgICBsZXQgbXNnID0gYFRoZSB2YWx1ZSBvZiAiJHtzdHJ9IiBpcyBvdXQgb2YgcmFuZ2UuYDsKICAgICAgICBsZXQgcmVjZWl2ZWQgPSBpbnB1dDsKICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgJiYgTWF0aC5hYnMoaW5wdXQpID4gMiAqKiAzMikgewogICAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICJiaWdpbnQiKSB7CiAgICAgICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dCk7CiAgICAgICAgICBpZiAoaW5wdXQgPiBCaWdJbnQoMikgKiogQmlnSW50KDMyKSB8fCBpbnB1dCA8IC0oQmlnSW50KDIpICoqIEJpZ0ludCgzMikpKSB7CiAgICAgICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHJlY2VpdmVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJlY2VpdmVkICs9ICJuIjsKICAgICAgICB9CiAgICAgICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gOwogICAgICAgIHJldHVybiBtc2c7CiAgICAgIH0sIFJhbmdlRXJyb3IpOwogICAgICBmdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IodmFsKSB7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGxldCBpID0gdmFsLmxlbmd0aDsKICAgICAgICBjb25zdCBzdGFydCA9IHZhbFswXSA9PT0gIi0iID8gMSA6IDA7CiAgICAgICAgZm9yICg7IGkgPj0gc3RhcnQgKyA0OyBpIC09IDMpIHsKICAgICAgICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YDsKICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgICAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgICAgICBpZiAoYnVmW29mZnNldF0gPT09IHZvaWQgMCB8fCBidWZbb2Zmc2V0ICsgYnl0ZUxlbmd0aDJdID09PSB2b2lkIDApIHsKICAgICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIChieXRlTGVuZ3RoMiArIDEpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMikgewogICAgICAgIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgewogICAgICAgICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgICAgICBsZXQgcmFuZ2U7CiAgICAgICAgICBpZiAoYnl0ZUxlbmd0aDIgPiAzKSB7CiAgICAgICAgICAgIGlmIChtaW4gPT09IDAgfHwgbWluID09PSBCaWdJbnQoMCkpIHsKICAgICAgICAgICAgICByYW5nZSA9IGA+PSAwJHtufSBhbmQgPCAyJHtufSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOH0ke259YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByYW5nZSA9IGA+PSAtKDIke259ICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMX0ke259KSBhbmQgPCAyICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMX0ke259YDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWA7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIiwgcmFuZ2UsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSkgewogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJudW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJvdW5kc0Vycm9yKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHsKICAgICAgICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7CiAgICAgICAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgdHlwZSk7CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAib2Zmc2V0IiwgImFuIGludGVnZXIiLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChsZW5ndGggPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAib2Zmc2V0IiwgYD49ICR7dHlwZSA/IDEgOiAwfSBhbmQgPD0gJHtsZW5ndGh9YCwgdmFsdWUpOwogICAgICB9CiAgICAgIHZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2c7CiAgICAgIGZ1bmN0aW9uIGJhc2U2NGNsZWFuKHN0cikgewogICAgICAgIHN0ciA9IHN0ci5zcGxpdCgiPSIpWzBdOwogICAgICAgIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgIiIpOwogICAgICAgIGlmIChzdHIubGVuZ3RoIDwgMikKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHsKICAgICAgICAgIHN0ciA9IHN0ciArICI9IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGY4VG9CeXRlcyhzdHJpbmcsIHVuaXRzKSB7CiAgICAgICAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eTsKICAgICAgICBsZXQgY29kZVBvaW50OwogICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICAgICAgbGV0IGxlYWRTdXJyb2dhdGUgPSBudWxsOwogICAgICAgIGNvbnN0IGJ5dGVzID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICBpZiAoY29kZVBvaW50ID4gNTUyOTUgJiYgY29kZVBvaW50IDwgNTczNDQpIHsKICAgICAgICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7CiAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDU2MzE5KSB7CiAgICAgICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50OwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPCA1NjMyMCkgewogICAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDU1Mjk2IDw8IDEwIHwgY29kZVBvaW50IC0gNTYzMjApICsgNjU1MzY7CiAgICAgICAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gbnVsbDsKICAgICAgICAgIGlmIChjb2RlUG9pbnQgPCAxMjgpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMjA0OCkgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gNiB8IDE5MiwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCA2NTUzNikgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gMTIgfCAyMjQsIGNvZGVQb2ludCA+PiA2ICYgNjMgfCAxMjgsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMTExNDExMikgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gMTggfCAyNDAsIGNvZGVQb2ludCA+PiAxMiAmIDYzIHwgMTI4LCBjb2RlUG9pbnQgPj4gNiAmIDYzIHwgMTI4LCBjb2RlUG9pbnQgJiA2MyB8IDEyOCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnl0ZXM7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlUb0J5dGVzKHN0cikgewogICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDI1NSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMoc3RyLCB1bml0cykgewogICAgICAgIGxldCBjLCBoaSwgbG87CiAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgICAgIGhpID0gYyA+PiA4OwogICAgICAgICAgbG8gPSBjICUgMjU2OwogICAgICAgICAgYnl0ZUFycmF5LnB1c2gobG8pOwogICAgICAgICAgYnl0ZUFycmF5LnB1c2goaGkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnl0ZUFycmF5OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMoc3RyKSB7CiAgICAgICAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBibGl0QnVmZmVyKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGxldCBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCB8fCBpID49IHNyYy5sZW5ndGgpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpc0luc3RhbmNlKG9iaiwgdHlwZSkgewogICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8IG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZTsKICAgICAgfQogICAgICBmdW5jdGlvbiBudW1iZXJJc05hTihvYmopIHsKICAgICAgICByZXR1cm4gb2JqICE9PSBvYmo7CiAgICAgIH0KICAgICAgdmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBjb25zdCBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkgewogICAgICAgICAgY29uc3QgaTE2ID0gaSAqIDE2OwogICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7CiAgICAgICAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgICB9KCk7CiAgICAgIGZ1bmN0aW9uIGRlZmluZUJpZ0ludE1ldGhvZChmbikgewogICAgICAgIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAidW5kZWZpbmVkIiA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkKCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBzcmMvYWxpYXMvYnVmZmVyLXNoaW0uanMKICB2YXIgaW1wb3J0X2J1ZmZlcjsKICB2YXIgaW5pdF9idWZmZXJfc2hpbSA9IF9fZXNtKHsKICAgICJzcmMvYWxpYXMvYnVmZmVyLXNoaW0uanMiKCkgewogICAgICBpbXBvcnRfYnVmZmVyID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbEAxLjcuNS9ub2RlX21vZHVsZXMvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvY2pzLXBvbnlmaWxsLmpzCiAgdmFyIHJlcXVpcmVfY2pzX3BvbnlmaWxsID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbEAxLjcuNS9ub2RlX21vZHVsZXMvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvY2pzLXBvbnlmaWxsLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOwogICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOwogICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikKICAgICAgICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgICBpZiAocHJvdG9Qcm9wcykKICAgICAgICAgIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgICAgaWYgKHN0YXRpY1Byb3BzKQogICAgICAgICAgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsICJwcm90b3R5cGUiLCB7CiAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgewogICAgICAgICAgY29uc3RydWN0b3I6IHsKICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCAicHJvdG90eXBlIiwgewogICAgICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICAgICAgfSk7CiAgICAgICAgaWYgKHN1cGVyQ2xhc3MpCiAgICAgICAgICBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7CiAgICAgICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZjIobzIpIHsKICAgICAgICAgIHJldHVybiBvMi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8yKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsKICAgICAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mMihvMiwgcDIpIHsKICAgICAgICAgIG8yLl9fcHJvdG9fXyA9IHAyOwogICAgICAgICAgcmV0dXJuIG8yOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgewogICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gInVuZGVmaW5lZCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmICh0eXBlb2YgUHJveHkgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHsKICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmMikgewogICAgICAgIGlmIChzZWxmMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZjIsIGNhbGwpIHsKICAgICAgICBpZiAoY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSkgewogICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgICAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgewogICAgICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsKICAgICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OwogICAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsKICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsKICAgICAgICB9OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICB3aGlsZSAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkgewogICAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBfZ2V0KCkgewogICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gInVuZGVmaW5lZCIgJiYgUmVmbGVjdC5nZXQpIHsKICAgICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldC5iaW5kKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0Mih0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikgewogICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpOwogICAgICAgICAgICBpZiAoIWJhc2UpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpOwogICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHsKICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IHJlY2VpdmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0KICAgICAgdmFyIEVtaXR0ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gRW1pdHRlcjIoKSB7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRW1pdHRlcjIpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJsaXN0ZW5lcnMiLCB7CiAgICAgICAgICAgIHZhbHVlOiB7fSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhFbWl0dGVyMiwgW3sKICAgICAgICAgIGtleTogImFkZEV2ZW50TGlzdGVuZXIiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKCEodHlwZSBpbiB0aGlzLmxpc3RlbmVycykpIHsKICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1t0eXBlXSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdLnB1c2goewogICAgICAgICAgICAgIGNhbGxiYWNrLAogICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaykgewogICAgICAgICAgICBpZiAoISh0eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmxpc3RlbmVyc1t0eXBlXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICBpZiAoc3RhY2tbaV0uY2FsbGJhY2sgPT09IGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAiZGlzcGF0Y2hFdmVudCIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkgewogICAgICAgICAgICBpZiAoIShldmVudC50eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmxpc3RlbmVyc1tldmVudC50eXBlXTsKICAgICAgICAgICAgdmFyIHN0YWNrVG9DYWxsID0gc3RhY2suc2xpY2UoKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdGFja1RvQ2FsbC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBzdGFja1RvQ2FsbFtpXTsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbGJhY2suY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobGlzdGVuZXIub3B0aW9ucyAmJiBsaXN0ZW5lci5vcHRpb25zLm9uY2UpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudC50eXBlLCBsaXN0ZW5lci5jYWxsYmFjayk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZDsKICAgICAgICAgIH0KICAgICAgICB9XSk7CiAgICAgICAgcmV0dXJuIEVtaXR0ZXIyOwogICAgICB9KCk7CiAgICAgIHZhciBBYm9ydFNpZ25hbCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihfRW1pdHRlcikgewogICAgICAgIF9pbmhlcml0cyhBYm9ydFNpZ25hbDIsIF9FbWl0dGVyKTsKICAgICAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEFib3J0U2lnbmFsMik7CiAgICAgICAgZnVuY3Rpb24gQWJvcnRTaWduYWwyKCkgewogICAgICAgICAgdmFyIF90aGlzOwogICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFib3J0U2lnbmFsMik7CiAgICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpOwogICAgICAgICAgaWYgKCFfdGhpcy5saXN0ZW5lcnMpIHsKICAgICAgICAgICAgRW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsKICAgICAgICAgIH0KICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgImFib3J0ZWQiLCB7CiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksICJvbmFib3J0IiwgewogICAgICAgICAgICB2YWx1ZTogbnVsbCwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksICJyZWFzb24iLCB7CiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICAgIH0KICAgICAgICBfY3JlYXRlQ2xhc3MoQWJvcnRTaWduYWwyLCBbewogICAgICAgICAga2V5OiAidG9TdHJpbmciLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gIltvYmplY3QgQWJvcnRTaWduYWxdIjsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJkaXNwYXRjaEV2ZW50IiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7CiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAiYWJvcnQiKSB7CiAgICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub25hYm9ydCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgdGhpcy5vbmFib3J0LmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBfZ2V0KF9nZXRQcm90b3R5cGVPZihBYm9ydFNpZ25hbDIucHJvdG90eXBlKSwgImRpc3BhdGNoRXZlbnQiLCB0aGlzKS5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9XSk7CiAgICAgICAgcmV0dXJuIEFib3J0U2lnbmFsMjsKICAgICAgfShFbWl0dGVyKTsKICAgICAgdmFyIEFib3J0Q29udHJvbGxlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBBYm9ydENvbnRyb2xsZXIyKCkgewogICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFib3J0Q29udHJvbGxlcjIpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYWwiLCB7CiAgICAgICAgICAgIHZhbHVlOiBuZXcgQWJvcnRTaWduYWwoKSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhBYm9ydENvbnRyb2xsZXIyLCBbewogICAgICAgICAga2V5OiAiYWJvcnQiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KHJlYXNvbikgewogICAgICAgICAgICB2YXIgZXZlbnQ7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoImFib3J0Iik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSAiYWJvcnQiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTsKICAgICAgICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCJhYm9ydCIsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGV2ZW50ID0gewogICAgICAgICAgICAgICAgICB0eXBlOiAiYWJvcnQiLAogICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzaWduYWxSZWFzb24gPSByZWFzb247CiAgICAgICAgICAgIGlmIChzaWduYWxSZWFzb24gPT09IHZvaWQgMCkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRXJyb3IoIlRoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIik7CiAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24ubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgc2lnbmFsUmVhc29uID0gbmV3IERPTUV4Y2VwdGlvbigic2lnbmFsIGlzIGFib3J0ZWQgd2l0aG91dCByZWFzb24iKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRXJyb3IoIlRoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIik7CiAgICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbi5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSBzaWduYWxSZWFzb247CiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGtleTogInRvU3RyaW5nIiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHsKICAgICAgICAgICAgcmV0dXJuICJbb2JqZWN0IEFib3J0Q29udHJvbGxlcl0iOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gQWJvcnRDb250cm9sbGVyMjsKICAgICAgfSgpOwogICAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gInVuZGVmaW5lZCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7CiAgICAgICAgQWJvcnRDb250cm9sbGVyLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkFib3J0Q29udHJvbGxlciI7CiAgICAgICAgQWJvcnRTaWduYWwucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiQWJvcnRTaWduYWwiOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvbHlmaWxsTmVlZGVkKHNlbGYyKSB7CiAgICAgICAgaWYgKHNlbGYyLl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJfX0ZPUkNFX0lOU1RBTExfQUJPUlRDT05UUk9MTEVSX1BPTFlGSUxMPXRydWUgaXMgc2V0LCB3aWxsIGZvcmNlIGluc3RhbGwgcG9seWZpbGwiKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZW9mIHNlbGYyLlJlcXVlc3QgPT09ICJmdW5jdGlvbiIgJiYgIXNlbGYyLlJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzaWduYWwiKSB8fCAhc2VsZjIuQWJvcnRDb250cm9sbGVyOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFib3J0YWJsZUZldGNoRGVjb3JhdG9yKHBhdGNoVGFyZ2V0cykgewogICAgICAgIGlmICh0eXBlb2YgcGF0Y2hUYXJnZXRzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBwYXRjaFRhcmdldHMgPSB7CiAgICAgICAgICAgIGZldGNoOiBwYXRjaFRhcmdldHMKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHZhciBfcGF0Y2hUYXJnZXRzID0gcGF0Y2hUYXJnZXRzLCBmZXRjaCA9IF9wYXRjaFRhcmdldHMuZmV0Y2gsIF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMuUmVxdWVzdCwgTmF0aXZlUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9PT0gdm9pZCAwID8gZmV0Y2guUmVxdWVzdCA6IF9wYXRjaFRhcmdldHMkUmVxdWVzdCwgTmF0aXZlQWJvcnRDb250cm9sbGVyID0gX3BhdGNoVGFyZ2V0cy5BYm9ydENvbnRyb2xsZXIsIF9wYXRjaFRhcmdldHMkX19GT1JDRSA9IF9wYXRjaFRhcmdldHMuX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCwgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCA9IF9wYXRjaFRhcmdldHMkX19GT1JDRSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGF0Y2hUYXJnZXRzJF9fRk9SQ0U7CiAgICAgICAgaWYgKCFwb2x5ZmlsbE5lZWRlZCh7CiAgICAgICAgICBmZXRjaCwKICAgICAgICAgIFJlcXVlc3Q6IE5hdGl2ZVJlcXVlc3QsCiAgICAgICAgICBBYm9ydENvbnRyb2xsZXI6IE5hdGl2ZUFib3J0Q29udHJvbGxlciwKICAgICAgICAgIF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwKICAgICAgICB9KSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZmV0Y2gsCiAgICAgICAgICAgIFJlcXVlc3QKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHZhciBSZXF1ZXN0ID0gTmF0aXZlUmVxdWVzdDsKICAgICAgICBpZiAoUmVxdWVzdCAmJiAhUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpIHx8IF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwpIHsKICAgICAgICAgIFJlcXVlc3QgPSBmdW5jdGlvbiBSZXF1ZXN0MihpbnB1dCwgaW5pdDIpIHsKICAgICAgICAgICAgdmFyIHNpZ25hbDsKICAgICAgICAgICAgaWYgKGluaXQyICYmIGluaXQyLnNpZ25hbCkgewogICAgICAgICAgICAgIHNpZ25hbCA9IGluaXQyLnNpZ25hbDsKICAgICAgICAgICAgICBkZWxldGUgaW5pdDIuc2lnbmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IE5hdGl2ZVJlcXVlc3QoaW5wdXQsIGluaXQyKTsKICAgICAgICAgICAgaWYgKHNpZ25hbCkgewogICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1ZXN0LCAic2lnbmFsIiwgewogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgICAgICB2YWx1ZTogc2lnbmFsCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CiAgICAgICAgICB9OwogICAgICAgICAgUmVxdWVzdC5wcm90b3R5cGUgPSBOYXRpdmVSZXF1ZXN0LnByb3RvdHlwZTsKICAgICAgICB9CiAgICAgICAgdmFyIHJlYWxGZXRjaCA9IGZldGNoOwogICAgICAgIHZhciBhYm9ydGFibGVGZXRjaCA9IGZ1bmN0aW9uIGFib3J0YWJsZUZldGNoMihpbnB1dCwgaW5pdDIpIHsKICAgICAgICAgIHZhciBzaWduYWwgPSBSZXF1ZXN0ICYmIFJlcXVlc3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5wdXQpID8gaW5wdXQuc2lnbmFsIDogaW5pdDIgPyBpbml0Mi5zaWduYWwgOiB2b2lkIDA7CiAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgIHZhciBhYm9ydEVycm9yOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGFib3J0RXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwgIkFib3J0RXJyb3IiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgYWJvcnRFcnJvciA9IG5ldyBFcnJvcigiQWJvcnRlZCIpOwogICAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGNhbmNlbGxhdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIHJlamVjdCkgewogICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChhYm9ydEVycm9yKTsKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvbmNlOiB0cnVlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgZGVsZXRlIGluaXQyLnNpZ25hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtjYW5jZWxsYXRpb24sIHJlYWxGZXRjaChpbnB1dCwgaW5pdDIpXSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVhbEZldGNoKGlucHV0LCBpbml0Mik7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZmV0Y2g6IGFib3J0YWJsZUZldGNoLAogICAgICAgICAgUmVxdWVzdAogICAgICAgIH07CiAgICAgIH0KICAgICAgZXhwb3J0czIuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyOwogICAgICBleHBvcnRzMi5BYm9ydFNpZ25hbCA9IEFib3J0U2lnbmFsOwogICAgICBleHBvcnRzMi5hYm9ydGFibGVGZXRjaCA9IGFib3J0YWJsZUZldGNoRGVjb3JhdG9yOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMKICB2YXIgcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuQWJvcnRTaWduYWwgPSBleHBvcnRzMi5BYm9ydENvbnRyb2xsZXIgPSB2b2lkIDA7CiAgICAgIHZhciBjanNfcG9ueWZpbGxfMSA9IHJlcXVpcmVfY2pzX3BvbnlmaWxsKCk7CiAgICAgIHZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gc2VsZjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gd2luZG93OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBnbG9iYWw7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Iik7CiAgICAgIH07CiAgICAgIHZhciBBYm9ydENvbnRyb2xsZXIgPSB0eXBlb2YgZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyID09PSAidW5kZWZpbmVkIiA/IGNqc19wb255ZmlsbF8xLkFib3J0Q29udHJvbGxlciA6IGdldEdsb2JhbCgpLkFib3J0Q29udHJvbGxlcjsKICAgICAgZXhwb3J0czIuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyOwogICAgICB2YXIgQWJvcnRTaWduYWwgPSB0eXBlb2YgZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyID09PSAidW5kZWZpbmVkIiA/IGNqc19wb255ZmlsbF8xLkFib3J0U2lnbmFsIDogZ2V0R2xvYmFsKCkuQWJvcnRTaWduYWw7CiAgICAgIGV4cG9ydHMyLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsXzEgPSByZXF1aXJlX2Fib3J0Y29udHJvbGxlcl9wb255ZmlsbCgpOwogICAgICB2YXIgTnVsbFNpZ25hbCA9IGNsYXNzIHsKICAgICAgfTsKICAgICAgdmFyIEFnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlciA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHRoaXMuc2lnbmFscyA9IG5ldyBTZXQoKTsKICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xLkFib3J0Q29udHJvbGxlcigpOwogICAgICAgIH0KICAgICAgICBhZGRTaWduYWwoc2lnbmFsID0gbmV3IE51bGxTaWduYWwoKSkgewogICAgICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgYWRkIGEgc2lnbmFsLCBhbHJlYWR5IGFib3J0ZWQhIik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNpZ25hbHMuYWRkKHNpZ25hbCk7CiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVBYm9ydGVkKHNpZ25hbCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCAoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBYm9ydGVkKHNpZ25hbCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVBYm9ydGVkKHNpZ25hbCkgewogICAgICAgICAgdGhpcy5zaWduYWxzLmRlbGV0ZShzaWduYWwpOwogICAgICAgICAgaWYgKHRoaXMuc2lnbmFscy5zaXplID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldCBzaWduYWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsOwogICAgICAgIH0KICAgICAgICBhYm9ydCgpIHsKICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gQWdncmVnYXRlQWJvcnRDb250cm9sbGVyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIEFnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyID0gY2xhc3MgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgU2V0KCk7CiAgICAgICAgfQogICAgICAgIGFkZENhbGxiYWNrKGNhbGxiYWNrID0gKCkgPT4gewogICAgICAgIH0pIHsKICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmFkZChjYWxsYmFjayk7CiAgICAgICAgICBjYWxsYmFjayh0aGlzLmN1cnJlbnRNZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgY2FsbGJhY2sobWVzc2FnZSkgewogICAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5mb3JFYWNoKChlbHQpID0+IHsKICAgICAgICAgICAgZWx0KG1lc3NhZ2UpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcwogIHZhciByZXF1aXJlX0Fib3J0YWJsZVByb21pc2VDYWNoZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2ltcG9ydERlZmF1bHQgPSBleHBvcnRzMiAmJiBleHBvcnRzMi5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMSA9IHJlcXVpcmVfYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsKCk7CiAgICAgIHZhciBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlcigpKTsKICAgICAgdmFyIEFnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcigpKTsKICAgICAgdmFyIEFib3J0YWJsZVByb21pc2VDYWNoZTIgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3IoeyBmaWxsLCBjYWNoZSB9KSB7CiAgICAgICAgICBpZiAodHlwZW9mIGZpbGwgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwYXNzIGEgZmlsbCBmdW5jdGlvbiIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVvZiBjYWNoZSAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwYXNzIGEgY2FjaGUgb2JqZWN0Iik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlLmdldCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgY2FjaGUuc2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBjYWNoZS5kZWxldGUgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FjaGUgbXVzdCBpbXBsZW1lbnQgZ2V0KGtleSksIHNldChrZXksIHZhbCksIGFuZCBhbmQgZGVsZXRlKGtleSkiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY2FjaGUgPSBjYWNoZTsKICAgICAgICAgIHRoaXMuZmlsbENhbGxiYWNrID0gZmlsbDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGlzQWJvcnRFeGNlcHRpb24oZXhjZXB0aW9uKSB7CiAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uLm5hbWUgPT09ICJBYm9ydEVycm9yIiB8fCBleGNlcHRpb24uY29kZSA9PT0gIkVSUl9BQk9SVEVEIiB8fCBleGNlcHRpb24ubWVzc2FnZSA9PT0gIkFib3J0RXJyb3I6IGFib3J0ZWQiIHx8IGV4Y2VwdGlvbi5tZXNzYWdlID09PSAiRXJyb3I6IGFib3J0ZWQiOwogICAgICAgIH0KICAgICAgICBldmljdChrZXksIGVudHJ5KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5nZXQoa2V5KSA9PT0gZW50cnkpIHsKICAgICAgICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmlsbChrZXksIGRhdGEsIHNpZ25hbCwgc3RhdHVzQ2FsbGJhY2spIHsKICAgICAgICAgIGNvbnN0IGFib3J0ZXIgPSBuZXcgQWdncmVnYXRlQWJvcnRDb250cm9sbGVyXzEuZGVmYXVsdCgpOwogICAgICAgICAgY29uc3Qgc3RhdHVzUmVwb3J0ZXIgPSBuZXcgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXJfMS5kZWZhdWx0KCk7CiAgICAgICAgICBzdGF0dXNSZXBvcnRlci5hZGRDYWxsYmFjayhzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICBjb25zdCBuZXdFbnRyeSA9IHsKICAgICAgICAgICAgYWJvcnRlciwKICAgICAgICAgICAgcHJvbWlzZTogdGhpcy5maWxsQ2FsbGJhY2soZGF0YSwgYWJvcnRlci5zaWduYWwsIChtZXNzYWdlKSA9PiB7CiAgICAgICAgICAgICAgc3RhdHVzUmVwb3J0ZXIuY2FsbGJhY2sobWVzc2FnZSk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzZXR0bGVkOiBmYWxzZSwKICAgICAgICAgICAgc3RhdHVzUmVwb3J0ZXIsCiAgICAgICAgICAgIGdldCBhYm9ydGVkKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmFib3J0ZXIuc2lnbmFsLmFib3J0ZWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBuZXdFbnRyeS5hYm9ydGVyLmFkZFNpZ25hbChzaWduYWwpOwogICAgICAgICAgbmV3RW50cnkuYWJvcnRlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCAoKSA9PiB7CiAgICAgICAgICAgIGlmICghbmV3RW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgbmV3RW50cnkucHJvbWlzZS50aGVuKCgpID0+IHsKICAgICAgICAgICAgbmV3RW50cnkuc2V0dGxlZCA9IHRydWU7CiAgICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICAgIG5ld0VudHJ5LnNldHRsZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmV2aWN0KGtleSwgbmV3RW50cnkpOwogICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBjaGVja1NpbmdsZVByb21pc2UocHJvbWlzZSwgc2lnbmFsKSB7CiAgICAgICAgICBmdW5jdGlvbiBjaGVja0ZvclNpbmdsZUFib3J0KCkgewogICAgICAgICAgICBpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoImFib3J0ZWQiKSwgeyBjb2RlOiAiRVJSX0FCT1JURUQiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChyZXN1bHQpID0+IHsKICAgICAgICAgICAgY2hlY2tGb3JTaW5nbGVBYm9ydCgpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfSwgKGVycm9yKSA9PiB7CiAgICAgICAgICAgIGNoZWNrRm9yU2luZ2xlQWJvcnQoKTsKICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaGFzKGtleSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSk7CiAgICAgICAgfQogICAgICAgIGdldChrZXksIGRhdGEsIHNpZ25hbCwgc3RhdHVzQ2FsbGJhY2spIHsKICAgICAgICAgIGlmICghc2lnbmFsICYmIGRhdGEgaW5zdGFuY2VvZiBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMS5BYm9ydFNpZ25hbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJzZWNvbmQgZ2V0IGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYW4gQWJvcnRTaWduYWwsIHBlcmhhcHMgeW91IG1lYW50IHRvIHBhc3MgYG51bGxgIGZvciB0aGUgZmlsbCBkYXRhPyIpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY2FjaGVFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICBpZiAoY2FjaGVFbnRyeSkgewogICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5hYm9ydGVkICYmICFjYWNoZUVudHJ5LnNldHRsZWQpIHsKICAgICAgICAgICAgICB0aGlzLmV2aWN0KGtleSwgY2FjaGVFbnRyeSk7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNhY2hlRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHJldHVybiBjYWNoZUVudHJ5LnByb21pc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FjaGVFbnRyeS5hYm9ydGVyLmFkZFNpZ25hbChzaWduYWwpOwogICAgICAgICAgICBjYWNoZUVudHJ5LnN0YXR1c1JlcG9ydGVyLmFkZENhbGxiYWNrKHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgICAgcmV0dXJuIEFib3J0YWJsZVByb21pc2VDYWNoZTIuY2hlY2tTaW5nbGVQcm9taXNlKGNhY2hlRW50cnkucHJvbWlzZSwgc2lnbmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZmlsbChrZXksIGRhdGEsIHNpZ25hbCwgc3RhdHVzQ2FsbGJhY2spOwogICAgICAgICAgcmV0dXJuIEFib3J0YWJsZVByb21pc2VDYWNoZTIuY2hlY2tTaW5nbGVQcm9taXNlKHRoaXMuY2FjaGUuZ2V0KGtleSkucHJvbWlzZSwgc2lnbmFsKTsKICAgICAgICB9CiAgICAgICAgZGVsZXRlKGtleSkgewogICAgICAgICAgY29uc3QgY2FjaGVkRW50cnkgPSB0aGlzLmNhY2hlLmdldChrZXkpOwogICAgICAgICAgaWYgKGNhY2hlZEVudHJ5KSB7CiAgICAgICAgICAgIGlmICghY2FjaGVkRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIGNhY2hlZEVudHJ5LmFib3J0ZXIuYWJvcnQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhcigpIHsKICAgICAgICAgIGNvbnN0IGtleUl0ZXIgPSB0aGlzLmNhY2hlLmtleXMoKTsKICAgICAgICAgIGxldCBkZWxldGVDb3VudCA9IDA7CiAgICAgICAgICBmb3IgKGxldCByZXN1bHQgPSBrZXlJdGVyLm5leHQoKTsgIXJlc3VsdC5kb25lOyByZXN1bHQgPSBrZXlJdGVyLm5leHQoKSkgewogICAgICAgICAgICB0aGlzLmRlbGV0ZShyZXN1bHQudmFsdWUpOwogICAgICAgICAgICBkZWxldGVDb3VudCArPSAxOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGRlbGV0ZUNvdW50OwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0czIuZGVmYXVsdCA9IEFib3J0YWJsZVByb21pc2VDYWNoZTI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfZXNtID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgX19pbXBvcnREZWZhdWx0ID0gZXhwb3J0czIgJiYgZXhwb3J0czIuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uKG1vZCkgewogICAgICAgIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7ICJkZWZhdWx0IjogbW9kIH07CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9BYm9ydGFibGVQcm9taXNlQ2FjaGUoKSk7CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSBBYm9ydGFibGVQcm9taXNlQ2FjaGVfMS5kZWZhdWx0OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcXVpY2stbHJ1QDQuMC4xL25vZGVfbW9kdWxlcy9xdWljay1scnUvaW5kZXguanMKICB2YXIgcmVxdWlyZV9xdWlja19scnUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcXVpY2stbHJ1QDQuMC4xL25vZGVfbW9kdWxlcy9xdWljay1scnUvaW5kZXguanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgUXVpY2tMUlUgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7CiAgICAgICAgICBpZiAoIShvcHRpb25zLm1heFNpemUgJiYgb3B0aW9ucy5tYXhTaXplID4gMCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiYG1heFNpemVgIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IG9wdGlvbnMubWF4U2l6ZTsKICAgICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTWFwKCk7CiAgICAgICAgICB0aGlzLm9sZENhY2hlID0gbmV3IE1hcCgpOwogICAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgfQogICAgICAgIF9zZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLl9zaXplKys7CiAgICAgICAgICBpZiAodGhpcy5fc2l6ZSA+PSB0aGlzLm1heFNpemUpIHsKICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgICAgIHRoaXMub2xkQ2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXQoa2V5KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5vbGRDYWNoZS5nZXQoa2V5KTsKICAgICAgICAgICAgdGhpcy5vbGRDYWNoZS5kZWxldGUoa2V5KTsKICAgICAgICAgICAgdGhpcy5fc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldChrZXksIHZhbHVlKSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX3NldChrZXksIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBoYXMoa2V5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KSB8fCB0aGlzLm9sZENhY2hlLmhhcyhrZXkpOwogICAgICAgIH0KICAgICAgICBwZWVrKGtleSkgewogICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5vbGRDYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5vbGRDYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVsZXRlKGtleSkgewogICAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7CiAgICAgICAgICBpZiAoZGVsZXRlZCkgewogICAgICAgICAgICB0aGlzLl9zaXplLS07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5vbGRDYWNoZS5kZWxldGUoa2V5KSB8fCBkZWxldGVkOwogICAgICAgIH0KICAgICAgICBjbGVhcigpIHsKICAgICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTsKICAgICAgICAgIHRoaXMub2xkQ2FjaGUuY2xlYXIoKTsKICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgIH0KICAgICAgICAqa2V5cygpIHsKICAgICAgICAgIGZvciAoY29uc3QgW2tleV0gb2YgdGhpcykgewogICAgICAgICAgICB5aWVsZCBrZXk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICp2YWx1ZXMoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiB0aGlzKSB7CiAgICAgICAgICAgIHlpZWxkIHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jYWNoZSkgewogICAgICAgICAgICB5aWVsZCBpdGVtOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub2xkQ2FjaGUpIHsKICAgICAgICAgICAgY29uc3QgW2tleV0gPSBpdGVtOwogICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgICB5aWVsZCBpdGVtOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldCBzaXplKCkgewogICAgICAgICAgbGV0IG9sZENhY2hlU2l6ZSA9IDA7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLm9sZENhY2hlLmtleXMoKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgICBvbGRDYWNoZVNpemUrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgKyBvbGRDYWNoZVNpemU7CiAgICAgICAgfQogICAgICB9OwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBRdWlja0xSVTsKICAgIH0KICB9KTsKCiAgLy8gKGRpc2FibGVkKTpub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2xvY2FsRmlsZQogIHZhciByZXF1aXJlX2xvY2FsRmlsZSA9IF9fY29tbW9uSlMoewogICAgIihkaXNhYmxlZCk6bm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9sb2NhbEZpbGUiKCkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzCiAgdmFyIHJlcXVpcmVfY29tbW9uID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgVFlQRURfT0sgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFVpbnQxNkFycmF5ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgSW50MzJBcnJheSAhPT0gInVuZGVmaW5lZCI7CiAgICAgIGZ1bmN0aW9uIF9oYXMob2JqLCBrZXkpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKICAgICAgfQogICAgICBleHBvcnRzMi5hc3NpZ24gPSBmdW5jdGlvbihvYmopIHsKICAgICAgICB2YXIgc291cmNlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7CiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpOwogICAgICAgICAgaWYgKCFzb3VyY2UpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzb3VyY2UgKyAibXVzdCBiZSBub24tb2JqZWN0Iik7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBwIGluIHNvdXJjZSkgewogICAgICAgICAgICBpZiAoX2hhcyhzb3VyY2UsIHApKSB7CiAgICAgICAgICAgICAgb2JqW3BdID0gc291cmNlW3BdOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmo7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLnNocmlua0J1ZiA9IGZ1bmN0aW9uKGJ1Ziwgc2l6ZSkgewogICAgICAgIGlmIChidWYubGVuZ3RoID09PSBzaXplKSB7CiAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgIH0KICAgICAgICBpZiAoYnVmLnN1YmFycmF5KSB7CiAgICAgICAgICByZXR1cm4gYnVmLnN1YmFycmF5KDAsIHNpemUpOwogICAgICAgIH0KICAgICAgICBidWYubGVuZ3RoID0gc2l6ZTsKICAgICAgICByZXR1cm4gYnVmOwogICAgICB9OwogICAgICB2YXIgZm5UeXBlZCA9IHsKICAgICAgICBhcnJheVNldDogZnVuY3Rpb24oZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHsKICAgICAgICAgIGlmIChzcmMuc3ViYXJyYXkgJiYgZGVzdC5zdWJhcnJheSkgewogICAgICAgICAgICBkZXN0LnNldChzcmMuc3ViYXJyYXkoc3JjX29mZnMsIHNyY19vZmZzICsgbGVuKSwgZGVzdF9vZmZzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbihjaHVua3MpIHsKICAgICAgICAgIHZhciBpLCBsLCBsZW4sIHBvcywgY2h1bmssIHJlc3VsdDsKICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBsZW4gKz0gY2h1bmtzW2ldLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7CiAgICAgICAgICBwb3MgPSAwOwogICAgICAgICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgY2h1bmsgPSBjaHVua3NbaV07CiAgICAgICAgICAgIHJlc3VsdC5zZXQoY2h1bmssIHBvcyk7CiAgICAgICAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGZuVW50eXBlZCA9IHsKICAgICAgICBhcnJheVNldDogZnVuY3Rpb24oZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24oY2h1bmtzKSB7CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCBjaHVua3MpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0czIuc2V0VHlwZWQgPSBmdW5jdGlvbihvbikgewogICAgICAgIGlmIChvbikgewogICAgICAgICAgZXhwb3J0czIuQnVmOCA9IFVpbnQ4QXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5CdWYxNiA9IFVpbnQxNkFycmF5OwogICAgICAgICAgZXhwb3J0czIuQnVmMzIgPSBJbnQzMkFycmF5OwogICAgICAgICAgZXhwb3J0czIuYXNzaWduKGV4cG9ydHMyLCBmblR5cGVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXhwb3J0czIuQnVmOCA9IEFycmF5OwogICAgICAgICAgZXhwb3J0czIuQnVmMTYgPSBBcnJheTsKICAgICAgICAgIGV4cG9ydHMyLkJ1ZjMyID0gQXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5hc3NpZ24oZXhwb3J0czIsIGZuVW50eXBlZCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5zZXRUeXBlZChUWVBFRF9PSyk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcwogIHZhciByZXF1aXJlX3RyZWVzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3RyZWVzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIFpfRklYRUQgPSA0OwogICAgICB2YXIgWl9CSU5BUlkgPSAwOwogICAgICB2YXIgWl9URVhUID0gMTsKICAgICAgdmFyIFpfVU5LTk9XTiA9IDI7CiAgICAgIGZ1bmN0aW9uIHplcm8oYnVmKSB7CiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7CiAgICAgICAgd2hpbGUgKC0tbGVuID49IDApIHsKICAgICAgICAgIGJ1ZltsZW5dID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIFNUT1JFRF9CTE9DSyA9IDA7CiAgICAgIHZhciBTVEFUSUNfVFJFRVMgPSAxOwogICAgICB2YXIgRFlOX1RSRUVTID0gMjsKICAgICAgdmFyIE1JTl9NQVRDSCA9IDM7CiAgICAgIHZhciBNQVhfTUFUQ0ggPSAyNTg7CiAgICAgIHZhciBMRU5HVEhfQ09ERVMgPSAyOTsKICAgICAgdmFyIExJVEVSQUxTID0gMjU2OwogICAgICB2YXIgTF9DT0RFUyA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUzsKICAgICAgdmFyIERfQ09ERVMgPSAzMDsKICAgICAgdmFyIEJMX0NPREVTID0gMTk7CiAgICAgIHZhciBIRUFQX1NJWkUgPSAyICogTF9DT0RFUyArIDE7CiAgICAgIHZhciBNQVhfQklUUyA9IDE1OwogICAgICB2YXIgQnVmX3NpemUgPSAxNjsKICAgICAgdmFyIE1BWF9CTF9CSVRTID0gNzsKICAgICAgdmFyIEVORF9CTE9DSyA9IDI1NjsKICAgICAgdmFyIFJFUF8zXzYgPSAxNjsKICAgICAgdmFyIFJFUFpfM18xMCA9IDE3OwogICAgICB2YXIgUkVQWl8xMV8xMzggPSAxODsKICAgICAgdmFyIGV4dHJhX2xiaXRzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDBdOwogICAgICB2YXIgZXh0cmFfZGJpdHMgPSBbMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzXTsKICAgICAgdmFyIGV4dHJhX2JsYml0cyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA3XTsKICAgICAgdmFyIGJsX29yZGVyID0gWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdOwogICAgICB2YXIgRElTVF9DT0RFX0xFTiA9IDUxMjsKICAgICAgdmFyIHN0YXRpY19sdHJlZSA9IG5ldyBBcnJheSgoTF9DT0RFUyArIDIpICogMik7CiAgICAgIHplcm8oc3RhdGljX2x0cmVlKTsKICAgICAgdmFyIHN0YXRpY19kdHJlZSA9IG5ldyBBcnJheShEX0NPREVTICogMik7CiAgICAgIHplcm8oc3RhdGljX2R0cmVlKTsKICAgICAgdmFyIF9kaXN0X2NvZGUgPSBuZXcgQXJyYXkoRElTVF9DT0RFX0xFTik7CiAgICAgIHplcm8oX2Rpc3RfY29kZSk7CiAgICAgIHZhciBfbGVuZ3RoX2NvZGUgPSBuZXcgQXJyYXkoTUFYX01BVENIIC0gTUlOX01BVENIICsgMSk7CiAgICAgIHplcm8oX2xlbmd0aF9jb2RlKTsKICAgICAgdmFyIGJhc2VfbGVuZ3RoID0gbmV3IEFycmF5KExFTkdUSF9DT0RFUyk7CiAgICAgIHplcm8oYmFzZV9sZW5ndGgpOwogICAgICB2YXIgYmFzZV9kaXN0ID0gbmV3IEFycmF5KERfQ09ERVMpOwogICAgICB6ZXJvKGJhc2VfZGlzdCk7CiAgICAgIGZ1bmN0aW9uIFN0YXRpY1RyZWVEZXNjKHN0YXRpY190cmVlLCBleHRyYV9iaXRzLCBleHRyYV9iYXNlLCBlbGVtcywgbWF4X2xlbmd0aCkgewogICAgICAgIHRoaXMuc3RhdGljX3RyZWUgPSBzdGF0aWNfdHJlZTsKICAgICAgICB0aGlzLmV4dHJhX2JpdHMgPSBleHRyYV9iaXRzOwogICAgICAgIHRoaXMuZXh0cmFfYmFzZSA9IGV4dHJhX2Jhc2U7CiAgICAgICAgdGhpcy5lbGVtcyA9IGVsZW1zOwogICAgICAgIHRoaXMubWF4X2xlbmd0aCA9IG1heF9sZW5ndGg7CiAgICAgICAgdGhpcy5oYXNfc3RyZWUgPSBzdGF0aWNfdHJlZSAmJiBzdGF0aWNfdHJlZS5sZW5ndGg7CiAgICAgIH0KICAgICAgdmFyIHN0YXRpY19sX2Rlc2M7CiAgICAgIHZhciBzdGF0aWNfZF9kZXNjOwogICAgICB2YXIgc3RhdGljX2JsX2Rlc2M7CiAgICAgIGZ1bmN0aW9uIFRyZWVEZXNjKGR5bl90cmVlLCBzdGF0X2Rlc2MpIHsKICAgICAgICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7CiAgICAgICAgdGhpcy5tYXhfY29kZSA9IDA7CiAgICAgICAgdGhpcy5zdGF0X2Rlc2MgPSBzdGF0X2Rlc2M7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHsKICAgICAgICByZXR1cm4gZGlzdCA8IDI1NiA/IF9kaXN0X2NvZGVbZGlzdF0gOiBfZGlzdF9jb2RlWzI1NiArIChkaXN0ID4+PiA3KV07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHV0X3Nob3J0KHMsIHcpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHcgJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSB3ID4+PiA4ICYgMjU1OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfYml0cyhzLCB2YWx1ZSwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKHMuYmlfdmFsaWQgPiBCdWZfc2l6ZSAtIGxlbmd0aCkgewogICAgICAgICAgcy5iaV9idWYgfD0gdmFsdWUgPDwgcy5iaV92YWxpZCAmIDY1NTM1OwogICAgICAgICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgICAgICAgIHMuYmlfYnVmID0gdmFsdWUgPj4gQnVmX3NpemUgLSBzLmJpX3ZhbGlkOwogICAgICAgICAgcy5iaV92YWxpZCArPSBsZW5ndGggLSBCdWZfc2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcy5iaV9idWYgfD0gdmFsdWUgPDwgcy5iaV92YWxpZCAmIDY1NTM1OwogICAgICAgICAgcy5iaV92YWxpZCArPSBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7CiAgICAgICAgc2VuZF9iaXRzKHMsIHRyZWVbYyAqIDJdLCB0cmVlW2MgKiAyICsgMV0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJpX3JldmVyc2UoY29kZSwgbGVuKSB7CiAgICAgICAgdmFyIHJlcyA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgcmVzIHw9IGNvZGUgJiAxOwogICAgICAgICAgY29kZSA+Pj49IDE7CiAgICAgICAgICByZXMgPDw9IDE7CiAgICAgICAgfSB3aGlsZSAoLS1sZW4gPiAwKTsKICAgICAgICByZXR1cm4gcmVzID4+PiAxOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJpX2ZsdXNoKHMpIHsKICAgICAgICBpZiAocy5iaV92YWxpZCA9PT0gMTYpIHsKICAgICAgICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICAgICAgICBzLmJpX2J1ZiA9IDA7CiAgICAgICAgICBzLmJpX3ZhbGlkID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPj0gOCkgewogICAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZiAmIDI1NTsKICAgICAgICAgIHMuYmlfYnVmID4+PSA4OwogICAgICAgICAgcy5iaV92YWxpZCAtPSA4OwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBnZW5fYml0bGVuKHMsIGRlc2MpIHsKICAgICAgICB2YXIgdHJlZSA9IGRlc2MuZHluX3RyZWU7CiAgICAgICAgdmFyIG1heF9jb2RlID0gZGVzYy5tYXhfY29kZTsKICAgICAgICB2YXIgc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTsKICAgICAgICB2YXIgaGFzX3N0cmVlID0gZGVzYy5zdGF0X2Rlc2MuaGFzX3N0cmVlOwogICAgICAgIHZhciBleHRyYSA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7CiAgICAgICAgdmFyIGJhc2UgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlOwogICAgICAgIHZhciBtYXhfbGVuZ3RoID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDsKICAgICAgICB2YXIgaDsKICAgICAgICB2YXIgbiwgbTsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgeGJpdHM7CiAgICAgICAgdmFyIGY7CiAgICAgICAgdmFyIG92ZXJmbG93ID0gMDsKICAgICAgICBmb3IgKGJpdHMgPSAwOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgICAgICAgIHMuYmxfY291bnRbYml0c10gPSAwOwogICAgICAgIH0KICAgICAgICB0cmVlW3MuaGVhcFtzLmhlYXBfbWF4XSAqIDIgKyAxXSA9IDA7CiAgICAgICAgZm9yIChoID0gcy5oZWFwX21heCArIDE7IGggPCBIRUFQX1NJWkU7IGgrKykgewogICAgICAgICAgbiA9IHMuaGVhcFtoXTsKICAgICAgICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXSAqIDIgKyAxXSArIDE7CiAgICAgICAgICBpZiAoYml0cyA+IG1heF9sZW5ndGgpIHsKICAgICAgICAgICAgYml0cyA9IG1heF9sZW5ndGg7CiAgICAgICAgICAgIG92ZXJmbG93Kys7CiAgICAgICAgICB9CiAgICAgICAgICB0cmVlW24gKiAyICsgMV0gPSBiaXRzOwogICAgICAgICAgaWYgKG4gPiBtYXhfY29kZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHMuYmxfY291bnRbYml0c10rKzsKICAgICAgICAgIHhiaXRzID0gMDsKICAgICAgICAgIGlmIChuID49IGJhc2UpIHsKICAgICAgICAgICAgeGJpdHMgPSBleHRyYVtuIC0gYmFzZV07CiAgICAgICAgICB9CiAgICAgICAgICBmID0gdHJlZVtuICogMl07CiAgICAgICAgICBzLm9wdF9sZW4gKz0gZiAqIChiaXRzICsgeGJpdHMpOwogICAgICAgICAgaWYgKGhhc19zdHJlZSkgewogICAgICAgICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdICsgeGJpdHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3ZlcmZsb3cgPT09IDApIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZG8gewogICAgICAgICAgYml0cyA9IG1heF9sZW5ndGggLSAxOwogICAgICAgICAgd2hpbGUgKHMuYmxfY291bnRbYml0c10gPT09IDApIHsKICAgICAgICAgICAgYml0cy0tOwogICAgICAgICAgfQogICAgICAgICAgcy5ibF9jb3VudFtiaXRzXS0tOwogICAgICAgICAgcy5ibF9jb3VudFtiaXRzICsgMV0gKz0gMjsKICAgICAgICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTsKICAgICAgICAgIG92ZXJmbG93IC09IDI7CiAgICAgICAgfSB3aGlsZSAob3ZlcmZsb3cgPiAwKTsKICAgICAgICBmb3IgKGJpdHMgPSBtYXhfbGVuZ3RoOyBiaXRzICE9PSAwOyBiaXRzLS0pIHsKICAgICAgICAgIG4gPSBzLmJsX2NvdW50W2JpdHNdOwogICAgICAgICAgd2hpbGUgKG4gIT09IDApIHsKICAgICAgICAgICAgbSA9IHMuaGVhcFstLWhdOwogICAgICAgICAgICBpZiAobSA+IG1heF9jb2RlKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRyZWVbbSAqIDIgKyAxXSAhPT0gYml0cykgewogICAgICAgICAgICAgIHMub3B0X2xlbiArPSAoYml0cyAtIHRyZWVbbSAqIDIgKyAxXSkgKiB0cmVlW20gKiAyXTsKICAgICAgICAgICAgICB0cmVlW20gKiAyICsgMV0gPSBiaXRzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG4tLTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZ2VuX2NvZGVzKHRyZWUsIG1heF9jb2RlLCBibF9jb3VudCkgewogICAgICAgIHZhciBuZXh0X2NvZGUgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTsKICAgICAgICB2YXIgY29kZSA9IDA7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIG47CiAgICAgICAgZm9yIChiaXRzID0gMTsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgICBuZXh0X2NvZGVbYml0c10gPSBjb2RlID0gY29kZSArIGJsX2NvdW50W2JpdHMgLSAxXSA8PCAxOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICAgIHZhciBsZW4gPSB0cmVlW24gKiAyICsgMV07CiAgICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdHJlZVtuICogMl0gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHRyX3N0YXRpY19pbml0KCkgewogICAgICAgIHZhciBuOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciBsZW5ndGg7CiAgICAgICAgdmFyIGNvZGU7CiAgICAgICAgdmFyIGRpc3Q7CiAgICAgICAgdmFyIGJsX2NvdW50ID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7CiAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgTEVOR1RIX0NPREVTIC0gMTsgY29kZSsrKSB7CiAgICAgICAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDsKICAgICAgICAgIGZvciAobiA9IDA7IG4gPCAxIDw8IGV4dHJhX2xiaXRzW2NvZGVdOyBuKyspIHsKICAgICAgICAgICAgX2xlbmd0aF9jb2RlW2xlbmd0aCsrXSA9IGNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGggLSAxXSA9IGNvZGU7CiAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IDE2OyBjb2RlKyspIHsKICAgICAgICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3Q7CiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMSA8PCBleHRyYV9kYml0c1tjb2RlXTsgbisrKSB7CiAgICAgICAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRpc3QgPj49IDc7CiAgICAgICAgZm9yICg7IGNvZGUgPCBEX0NPREVTOyBjb2RlKyspIHsKICAgICAgICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNzsKICAgICAgICAgIGZvciAobiA9IDA7IG4gPCAxIDw8IGV4dHJhX2RiaXRzW2NvZGVdIC0gNzsgbisrKSB7CiAgICAgICAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgICAgICAgYmxfY291bnRbYml0c10gPSAwOwogICAgICAgIH0KICAgICAgICBuID0gMDsKICAgICAgICB3aGlsZSAobiA8PSAxNDMpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gODsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzhdKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChuIDw9IDI1NSkgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA5OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbOV0rKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4gPD0gMjc5KSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDc7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs3XSsrOwogICAgICAgIH0KICAgICAgICB3aGlsZSAobiA8PSAyODcpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gODsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzhdKys7CiAgICAgICAgfQogICAgICAgIGdlbl9jb2RlcyhzdGF0aWNfbHRyZWUsIExfQ09ERVMgKyAxLCBibF9jb3VudCk7CiAgICAgICAgZm9yIChuID0gMDsgbiA8IERfQ09ERVM7IG4rKykgewogICAgICAgICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0gPSA1OwogICAgICAgICAgc3RhdGljX2R0cmVlW24gKiAyXSA9IGJpX3JldmVyc2UobiwgNSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMgKyAxLCBMX0NPREVTLCBNQVhfQklUUyk7CiAgICAgICAgc3RhdGljX2RfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfZHRyZWUsIGV4dHJhX2RiaXRzLCAwLCBEX0NPREVTLCBNQVhfQklUUyk7CiAgICAgICAgc3RhdGljX2JsX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2MobmV3IEFycmF5KDApLCBleHRyYV9ibGJpdHMsIDAsIEJMX0NPREVTLCBNQVhfQkxfQklUUyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5pdF9ibG9jayhzKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgZm9yIChuID0gMDsgbiA8IExfQ09ERVM7IG4rKykgewogICAgICAgICAgcy5keW5fbHRyZWVbbiAqIDJdID0gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8IERfQ09ERVM7IG4rKykgewogICAgICAgICAgcy5keW5fZHRyZWVbbiAqIDJdID0gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsKICAgICAgICAgIHMuYmxfdHJlZVtuICogMl0gPSAwOwogICAgICAgIH0KICAgICAgICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXSA9IDE7CiAgICAgICAgcy5vcHRfbGVuID0gcy5zdGF0aWNfbGVuID0gMDsKICAgICAgICBzLmxhc3RfbGl0ID0gcy5tYXRjaGVzID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBiaV93aW5kdXAocykgewogICAgICAgIGlmIChzLmJpX3ZhbGlkID4gOCkgewogICAgICAgICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgICAgICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7CiAgICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmOwogICAgICAgIH0KICAgICAgICBzLmJpX2J1ZiA9IDA7CiAgICAgICAgcy5iaV92YWxpZCA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY29weV9ibG9jayhzLCBidWYsIGxlbiwgaGVhZGVyKSB7CiAgICAgICAgYmlfd2luZHVwKHMpOwogICAgICAgIGlmIChoZWFkZXIpIHsKICAgICAgICAgIHB1dF9zaG9ydChzLCBsZW4pOwogICAgICAgICAgcHV0X3Nob3J0KHMsIH5sZW4pOwogICAgICAgIH0KICAgICAgICB1dGlscy5hcnJheVNldChzLnBlbmRpbmdfYnVmLCBzLndpbmRvdywgYnVmLCBsZW4sIHMucGVuZGluZyk7CiAgICAgICAgcy5wZW5kaW5nICs9IGxlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBzbWFsbGVyKHRyZWUsIG4sIG0sIGRlcHRoKSB7CiAgICAgICAgdmFyIF9uMiA9IG4gKiAyOwogICAgICAgIHZhciBfbTIgPSBtICogMjsKICAgICAgICByZXR1cm4gdHJlZVtfbjJdIDwgdHJlZVtfbTJdIHx8IHRyZWVbX24yXSA9PT0gdHJlZVtfbTJdICYmIGRlcHRoW25dIDw9IGRlcHRoW21dOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaykgewogICAgICAgIHZhciB2ID0gcy5oZWFwW2tdOwogICAgICAgIHZhciBqID0gayA8PCAxOwogICAgICAgIHdoaWxlIChqIDw9IHMuaGVhcF9sZW4pIHsKICAgICAgICAgIGlmIChqIDwgcy5oZWFwX2xlbiAmJiBzbWFsbGVyKHRyZWUsIHMuaGVhcFtqICsgMV0sIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsKICAgICAgICAgICAgaisrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNtYWxsZXIodHJlZSwgdiwgcy5oZWFwW2pdLCBzLmRlcHRoKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHMuaGVhcFtrXSA9IHMuaGVhcFtqXTsKICAgICAgICAgIGsgPSBqOwogICAgICAgICAgaiA8PD0gMTsKICAgICAgICB9CiAgICAgICAgcy5oZWFwW2tdID0gdjsKICAgICAgfQogICAgICBmdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpIHsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgbGM7CiAgICAgICAgdmFyIGx4ID0gMDsKICAgICAgICB2YXIgY29kZTsKICAgICAgICB2YXIgZXh0cmE7CiAgICAgICAgaWYgKHMubGFzdF9saXQgIT09IDApIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgZGlzdCA9IHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMl0gPDwgOCB8IHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMiArIDFdOwogICAgICAgICAgICBsYyA9IHMucGVuZGluZ19idWZbcy5sX2J1ZiArIGx4XTsKICAgICAgICAgICAgbHgrKzsKICAgICAgICAgICAgaWYgKGRpc3QgPT09IDApIHsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgbGMsIGx0cmVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb2RlID0gX2xlbmd0aF9jb2RlW2xjXTsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY29kZSArIExJVEVSQUxTICsgMSwgbHRyZWUpOwogICAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfbGJpdHNbY29kZV07CiAgICAgICAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7CiAgICAgICAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTsKICAgICAgICAgICAgICAgIHNlbmRfYml0cyhzLCBsYywgZXh0cmEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkaXN0LS07CiAgICAgICAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY29kZSwgZHRyZWUpOwogICAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfZGJpdHNbY29kZV07CiAgICAgICAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7CiAgICAgICAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTsKICAgICAgICAgICAgICAgIHNlbmRfYml0cyhzLCBkaXN0LCBleHRyYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IHdoaWxlIChseCA8IHMubGFzdF9saXQpOwogICAgICAgIH0KICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKSB7CiAgICAgICAgdmFyIHRyZWUgPSBkZXNjLmR5bl90cmVlOwogICAgICAgIHZhciBzdHJlZSA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogICAgICAgIHZhciBoYXNfc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgICAgICAgdmFyIGVsZW1zID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7CiAgICAgICAgdmFyIG4sIG07CiAgICAgICAgdmFyIG1heF9jb2RlID0gLTE7CiAgICAgICAgdmFyIG5vZGU7CiAgICAgICAgcy5oZWFwX2xlbiA9IDA7CiAgICAgICAgcy5oZWFwX21heCA9IEhFQVBfU0laRTsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgZWxlbXM7IG4rKykgewogICAgICAgICAgaWYgKHRyZWVbbiAqIDJdICE9PSAwKSB7CiAgICAgICAgICAgIHMuaGVhcFsrK3MuaGVhcF9sZW5dID0gbWF4X2NvZGUgPSBuOwogICAgICAgICAgICBzLmRlcHRoW25dID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyZWVbbiAqIDIgKyAxXSA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdoaWxlIChzLmhlYXBfbGVuIDwgMikgewogICAgICAgICAgbm9kZSA9IHMuaGVhcFsrK3MuaGVhcF9sZW5dID0gbWF4X2NvZGUgPCAyID8gKyttYXhfY29kZSA6IDA7CiAgICAgICAgICB0cmVlW25vZGUgKiAyXSA9IDE7CiAgICAgICAgICBzLmRlcHRoW25vZGVdID0gMDsKICAgICAgICAgIHMub3B0X2xlbi0tOwogICAgICAgICAgaWYgKGhhc19zdHJlZSkgewogICAgICAgICAgICBzLnN0YXRpY19sZW4gLT0gc3RyZWVbbm9kZSAqIDIgKyAxXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlOwogICAgICAgIGZvciAobiA9IHMuaGVhcF9sZW4gPj4gMTsgbiA+PSAxOyBuLS0pIHsKICAgICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwgbik7CiAgICAgICAgfQogICAgICAgIG5vZGUgPSBlbGVtczsKICAgICAgICBkbyB7CiAgICAgICAgICBuID0gcy5oZWFwWzFdOwogICAgICAgICAgcy5oZWFwWzFdID0gcy5oZWFwW3MuaGVhcF9sZW4tLV07CiAgICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEpOwogICAgICAgICAgbSA9IHMuaGVhcFsxXTsKICAgICAgICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbjsKICAgICAgICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbTsKICAgICAgICAgIHRyZWVbbm9kZSAqIDJdID0gdHJlZVtuICogMl0gKyB0cmVlW20gKiAyXTsKICAgICAgICAgIHMuZGVwdGhbbm9kZV0gPSAocy5kZXB0aFtuXSA+PSBzLmRlcHRoW21dID8gcy5kZXB0aFtuXSA6IHMuZGVwdGhbbV0pICsgMTsKICAgICAgICAgIHRyZWVbbiAqIDIgKyAxXSA9IHRyZWVbbSAqIDIgKyAxXSA9IG5vZGU7CiAgICAgICAgICBzLmhlYXBbMV0gPSBub2RlKys7CiAgICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEpOwogICAgICAgIH0gd2hpbGUgKHMuaGVhcF9sZW4gPj0gMik7CiAgICAgICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBzLmhlYXBbMV07CiAgICAgICAgZ2VuX2JpdGxlbihzLCBkZXNjKTsKICAgICAgICBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIHMuYmxfY291bnQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNjYW5fdHJlZShzLCB0cmVlLCBtYXhfY29kZSkgewogICAgICAgIHZhciBuOwogICAgICAgIHZhciBwcmV2bGVuID0gLTE7CiAgICAgICAgdmFyIGN1cmxlbjsKICAgICAgICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXTsKICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgIHZhciBtYXhfY291bnQgPSA3OwogICAgICAgIHZhciBtaW5fY291bnQgPSA0OwogICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgIH0KICAgICAgICB0cmVlWyhtYXhfY29kZSArIDEpICogMiArIDFdID0gNjU1MzU7CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgICBjdXJsZW4gPSBuZXh0bGVuOwogICAgICAgICAgbmV4dGxlbiA9IHRyZWVbKG4gKyAxKSAqIDIgKyAxXTsKICAgICAgICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHsKICAgICAgICAgICAgcy5ibF90cmVlW2N1cmxlbiAqIDJdICs9IGNvdW50OwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHsKICAgICAgICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgewogICAgICAgICAgICAgIHMuYmxfdHJlZVtjdXJsZW4gKiAyXSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHMuYmxfdHJlZVtSRVBfM182ICogMl0rKzsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHsKICAgICAgICAgICAgcy5ibF90cmVlW1JFUFpfM18xMCAqIDJdKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXSsrOwogICAgICAgICAgfQogICAgICAgICAgY291bnQgPSAwOwogICAgICAgICAgcHJldmxlbiA9IGN1cmxlbjsKICAgICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDY7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXhfY291bnQgPSA3OwogICAgICAgICAgICBtaW5fY291bnQgPSA0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpIHsKICAgICAgICB2YXIgbjsKICAgICAgICB2YXIgcHJldmxlbiA9IC0xOwogICAgICAgIHZhciBjdXJsZW47CiAgICAgICAgdmFyIG5leHRsZW4gPSB0cmVlWzAgKiAyICsgMV07CiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIgbWF4X2NvdW50ID0gNzsKICAgICAgICB2YXIgbWluX2NvdW50ID0gNDsKICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgICBjdXJsZW4gPSBuZXh0bGVuOwogICAgICAgICAgbmV4dGxlbiA9IHRyZWVbKG4gKyAxKSAqIDIgKyAxXTsKICAgICAgICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIH0gd2hpbGUgKC0tY291bnQgIT09IDApOwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHsKICAgICAgICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgewogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7CiAgICAgICAgICAgICAgY291bnQtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQXzNfNiwgcy5ibF90cmVlKTsKICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMik7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7CiAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBaXzNfMTAsIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfMTFfMTM4LCBzLmJsX3RyZWUpOwogICAgICAgICAgICBzZW5kX2JpdHMocywgY291bnQgLSAxMSwgNyk7CiAgICAgICAgICB9CiAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgICBwcmV2bGVuID0gY3VybGVuOwogICAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNjsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDc7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykgewogICAgICAgIHZhciBtYXhfYmxpbmRleDsKICAgICAgICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTsKICAgICAgICBzY2FuX3RyZWUocywgcy5keW5fZHRyZWUsIHMuZF9kZXNjLm1heF9jb2RlKTsKICAgICAgICBidWlsZF90cmVlKHMsIHMuYmxfZGVzYyk7CiAgICAgICAgZm9yIChtYXhfYmxpbmRleCA9IEJMX0NPREVTIC0gMTsgbWF4X2JsaW5kZXggPj0gMzsgbWF4X2JsaW5kZXgtLSkgewogICAgICAgICAgaWYgKHMuYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF0gKiAyICsgMV0gIT09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7CiAgICAgICAgcmV0dXJuIG1heF9ibGluZGV4OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKSB7CiAgICAgICAgdmFyIHJhbms7CiAgICAgICAgc2VuZF9iaXRzKHMsIGxjb2RlcyAtIDI1NywgNSk7CiAgICAgICAgc2VuZF9iaXRzKHMsIGRjb2RlcyAtIDEsIDUpOwogICAgICAgIHNlbmRfYml0cyhzLCBibGNvZGVzIC0gNCwgNCk7CiAgICAgICAgZm9yIChyYW5rID0gMDsgcmFuayA8IGJsY29kZXM7IHJhbmsrKykgewogICAgICAgICAgc2VuZF9iaXRzKHMsIHMuYmxfdHJlZVtibF9vcmRlcltyYW5rXSAqIDIgKyAxXSwgMyk7CiAgICAgICAgfQogICAgICAgIHNlbmRfdHJlZShzLCBzLmR5bl9sdHJlZSwgbGNvZGVzIC0gMSk7CiAgICAgICAgc2VuZF90cmVlKHMsIHMuZHluX2R0cmVlLCBkY29kZXMgLSAxKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHsKICAgICAgICB2YXIgYmxhY2tfbWFzayA9IDQwOTM2MjQ0NDc7CiAgICAgICAgdmFyIG47CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSAzMTsgbisrLCBibGFja19tYXNrID4+Pj0gMSkgewogICAgICAgICAgaWYgKGJsYWNrX21hc2sgJiAxICYmIHMuZHluX2x0cmVlW24gKiAyXSAhPT0gMCkgewogICAgICAgICAgICByZXR1cm4gWl9CSU5BUlk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLmR5bl9sdHJlZVs5ICogMl0gIT09IDAgfHwgcy5keW5fbHRyZWVbMTAgKiAyXSAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMyAqIDJdICE9PSAwKSB7CiAgICAgICAgICByZXR1cm4gWl9URVhUOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHsKICAgICAgICAgIGlmIChzLmR5bl9sdHJlZVtuICogMl0gIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIFpfVEVYVDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFpfQklOQVJZOwogICAgICB9CiAgICAgIHZhciBzdGF0aWNfaW5pdF9kb25lID0gZmFsc2U7CiAgICAgIGZ1bmN0aW9uIF90cl9pbml0KHMpIHsKICAgICAgICBpZiAoIXN0YXRpY19pbml0X2RvbmUpIHsKICAgICAgICAgIHRyX3N0YXRpY19pbml0KCk7CiAgICAgICAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcy5sX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5keW5fbHRyZWUsIHN0YXRpY19sX2Rlc2MpOwogICAgICAgIHMuZF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuZHluX2R0cmVlLCBzdGF0aWNfZF9kZXNjKTsKICAgICAgICBzLmJsX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5ibF90cmVlLCBzdGF0aWNfYmxfZGVzYyk7CiAgICAgICAgcy5iaV9idWYgPSAwOwogICAgICAgIHMuYmlfdmFsaWQgPSAwOwogICAgICAgIGluaXRfYmxvY2socyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpIHsKICAgICAgICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgICAgICBjb3B5X2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX2FsaWduKHMpIHsKICAgICAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTIDw8IDEsIDMpOwogICAgICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7CiAgICAgICAgYmlfZmx1c2gocyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkgewogICAgICAgIHZhciBvcHRfbGVuYiwgc3RhdGljX2xlbmI7CiAgICAgICAgdmFyIG1heF9ibGluZGV4ID0gMDsKICAgICAgICBpZiAocy5sZXZlbCA+IDApIHsKICAgICAgICAgIGlmIChzLnN0cm0uZGF0YV90eXBlID09PSBaX1VOS05PV04pIHsKICAgICAgICAgICAgcy5zdHJtLmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7CiAgICAgICAgICB9CiAgICAgICAgICBidWlsZF90cmVlKHMsIHMubF9kZXNjKTsKICAgICAgICAgIGJ1aWxkX3RyZWUocywgcy5kX2Rlc2MpOwogICAgICAgICAgbWF4X2JsaW5kZXggPSBidWlsZF9ibF90cmVlKHMpOwogICAgICAgICAgb3B0X2xlbmIgPSBzLm9wdF9sZW4gKyAzICsgNyA+Pj4gMzsKICAgICAgICAgIHN0YXRpY19sZW5iID0gcy5zdGF0aWNfbGVuICsgMyArIDcgPj4+IDM7CiAgICAgICAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIHsKICAgICAgICAgICAgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYiA9IHN0b3JlZF9sZW4gKyA1OwogICAgICAgIH0KICAgICAgICBpZiAoc3RvcmVkX2xlbiArIDQgPD0gb3B0X2xlbmIgJiYgYnVmICE9PSAtMSkgewogICAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpOwogICAgICAgIH0gZWxzZSBpZiAocy5zdHJhdGVneSA9PT0gWl9GSVhFRCB8fCBzdGF0aWNfbGVuYiA9PT0gb3B0X2xlbmIpIHsKICAgICAgICAgIHNlbmRfYml0cyhzLCAoU1RBVElDX1RSRUVTIDw8IDEpICsgKGxhc3QgPyAxIDogMCksIDMpOwogICAgICAgICAgY29tcHJlc3NfYmxvY2socywgc3RhdGljX2x0cmVlLCBzdGF0aWNfZHRyZWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMubF9kZXNjLm1heF9jb2RlICsgMSwgcy5kX2Rlc2MubWF4X2NvZGUgKyAxLCBtYXhfYmxpbmRleCArIDEpOwogICAgICAgICAgY29tcHJlc3NfYmxvY2socywgcy5keW5fbHRyZWUsIHMuZHluX2R0cmVlKTsKICAgICAgICB9CiAgICAgICAgaW5pdF9ibG9jayhzKTsKICAgICAgICBpZiAobGFzdCkgewogICAgICAgICAgYmlfd2luZHVwKHMpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfdGFsbHkocywgZGlzdCwgbGMpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMl0gPSBkaXN0ID4+PiA4ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyICsgMV0gPSBkaXN0ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5sX2J1ZiArIHMubGFzdF9saXRdID0gbGMgJiAyNTU7CiAgICAgICAgcy5sYXN0X2xpdCsrOwogICAgICAgIGlmIChkaXN0ID09PSAwKSB7CiAgICAgICAgICBzLmR5bl9sdHJlZVtsYyAqIDJdKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHMubWF0Y2hlcysrOwogICAgICAgICAgZGlzdC0tOwogICAgICAgICAgcy5keW5fbHRyZWVbKF9sZW5ndGhfY29kZVtsY10gKyBMSVRFUkFMUyArIDEpICogMl0rKzsKICAgICAgICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdKys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLmxhc3RfbGl0ID09PSBzLmxpdF9idWZzaXplIC0gMTsKICAgICAgfQogICAgICBleHBvcnRzMi5fdHJfaW5pdCA9IF90cl9pbml0OwogICAgICBleHBvcnRzMi5fdHJfc3RvcmVkX2Jsb2NrID0gX3RyX3N0b3JlZF9ibG9jazsKICAgICAgZXhwb3J0czIuX3RyX2ZsdXNoX2Jsb2NrID0gX3RyX2ZsdXNoX2Jsb2NrOwogICAgICBleHBvcnRzMi5fdHJfdGFsbHkgPSBfdHJfdGFsbHk7CiAgICAgIGV4cG9ydHMyLl90cl9hbGlnbiA9IF90cl9hbGlnbjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2FkbGVyMzIuanMKICB2YXIgcmVxdWlyZV9hZGxlcjMyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2FkbGVyMzIuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7CiAgICAgICAgdmFyIHMxID0gYWRsZXIgJiA2NTUzNSB8IDAsIHMyID0gYWRsZXIgPj4+IDE2ICYgNjU1MzUgfCAwLCBuID0gMDsKICAgICAgICB3aGlsZSAobGVuICE9PSAwKSB7CiAgICAgICAgICBuID0gbGVuID4gMmUzID8gMmUzIDogbGVuOwogICAgICAgICAgbGVuIC09IG47CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHMxID0gczEgKyBidWZbcG9zKytdIHwgMDsKICAgICAgICAgICAgczIgPSBzMiArIHMxIHwgMDsKICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgICBzMSAlPSA2NTUyMTsKICAgICAgICAgIHMyICU9IDY1NTIxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gczEgfCBzMiA8PCAxNiB8IDA7CiAgICAgIH0KICAgICAgbW9kdWxlMi5leHBvcnRzID0gYWRsZXIzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NyYzMyLmpzCiAgdmFyIHJlcXVpcmVfY3JjMzIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY3JjMzIuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBtYWtlVGFibGUoKSB7CiAgICAgICAgdmFyIGMsIHRhYmxlID0gW107CiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgYyA9IG47CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykgewogICAgICAgICAgICBjID0gYyAmIDEgPyAzOTg4MjkyMzg0IF4gYyA+Pj4gMSA6IGMgPj4+IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0YWJsZVtuXSA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgfQogICAgICB2YXIgY3JjVGFibGUgPSBtYWtlVGFibGUoKTsKICAgICAgZnVuY3Rpb24gY3JjMzIoY3JjLCBidWYsIGxlbiwgcG9zKSB7CiAgICAgICAgdmFyIHQgPSBjcmNUYWJsZSwgZW5kID0gcG9zICsgbGVuOwogICAgICAgIGNyYyBePSAtMTsKICAgICAgICBmb3IgKHZhciBpID0gcG9zOyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIGNyYyA9IGNyYyA+Pj4gOCBeIHRbKGNyYyBeIGJ1ZltpXSkgJiAyNTVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY3JjIF4gLTE7CiAgICAgIH0KICAgICAgbW9kdWxlMi5leHBvcnRzID0gY3JjMzI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9tZXNzYWdlcy5qcwogIHZhciByZXF1aXJlX21lc3NhZ2VzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gewogICAgICAgIDI6ICJuZWVkIGRpY3Rpb25hcnkiLAogICAgICAgIDE6ICJzdHJlYW0gZW5kIiwKICAgICAgICAwOiAiIiwKICAgICAgICAiLTEiOiAiZmlsZSBlcnJvciIsCiAgICAgICAgIi0yIjogInN0cmVhbSBlcnJvciIsCiAgICAgICAgIi0zIjogImRhdGEgZXJyb3IiLAogICAgICAgICItNCI6ICJpbnN1ZmZpY2llbnQgbWVtb3J5IiwKICAgICAgICAiLTUiOiAiYnVmZmVyIGVycm9yIiwKICAgICAgICAiLTYiOiAiaW5jb21wYXRpYmxlIHZlcnNpb24iCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9kZWZsYXRlLmpzCiAgdmFyIHJlcXVpcmVfZGVmbGF0ZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9kZWZsYXRlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIHRyZWVzID0gcmVxdWlyZV90cmVlcygpOwogICAgICB2YXIgYWRsZXIzMiA9IHJlcXVpcmVfYWRsZXIzMigpOwogICAgICB2YXIgY3JjMzIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzKCk7CiAgICAgIHZhciBaX05PX0ZMVVNIID0gMDsKICAgICAgdmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7CiAgICAgIHZhciBaX0ZVTExfRkxVU0ggPSAzOwogICAgICB2YXIgWl9GSU5JU0ggPSA0OwogICAgICB2YXIgWl9CTE9DSyA9IDU7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX1NUUkVBTV9FUlJPUiA9IC0yOwogICAgICB2YXIgWl9EQVRBX0VSUk9SID0gLTM7CiAgICAgIHZhciBaX0JVRl9FUlJPUiA9IC01OwogICAgICB2YXIgWl9ERUZBVUxUX0NPTVBSRVNTSU9OID0gLTE7CiAgICAgIHZhciBaX0ZJTFRFUkVEID0gMTsKICAgICAgdmFyIFpfSFVGRk1BTl9PTkxZID0gMjsKICAgICAgdmFyIFpfUkxFID0gMzsKICAgICAgdmFyIFpfRklYRUQgPSA0OwogICAgICB2YXIgWl9ERUZBVUxUX1NUUkFURUdZID0gMDsKICAgICAgdmFyIFpfVU5LTk9XTiA9IDI7CiAgICAgIHZhciBaX0RFRkxBVEVEID0gODsKICAgICAgdmFyIE1BWF9NRU1fTEVWRUwgPSA5OwogICAgICB2YXIgTUFYX1dCSVRTID0gMTU7CiAgICAgIHZhciBERUZfTUVNX0xFVkVMID0gODsKICAgICAgdmFyIExFTkdUSF9DT0RFUyA9IDI5OwogICAgICB2YXIgTElURVJBTFMgPSAyNTY7CiAgICAgIHZhciBMX0NPREVTID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTOwogICAgICB2YXIgRF9DT0RFUyA9IDMwOwogICAgICB2YXIgQkxfQ09ERVMgPSAxOTsKICAgICAgdmFyIEhFQVBfU0laRSA9IDIgKiBMX0NPREVTICsgMTsKICAgICAgdmFyIE1BWF9CSVRTID0gMTU7CiAgICAgIHZhciBNSU5fTUFUQ0ggPSAzOwogICAgICB2YXIgTUFYX01BVENIID0gMjU4OwogICAgICB2YXIgTUlOX0xPT0tBSEVBRCA9IE1BWF9NQVRDSCArIE1JTl9NQVRDSCArIDE7CiAgICAgIHZhciBQUkVTRVRfRElDVCA9IDMyOwogICAgICB2YXIgSU5JVF9TVEFURSA9IDQyOwogICAgICB2YXIgRVhUUkFfU1RBVEUgPSA2OTsKICAgICAgdmFyIE5BTUVfU1RBVEUgPSA3MzsKICAgICAgdmFyIENPTU1FTlRfU1RBVEUgPSA5MTsKICAgICAgdmFyIEhDUkNfU1RBVEUgPSAxMDM7CiAgICAgIHZhciBCVVNZX1NUQVRFID0gMTEzOwogICAgICB2YXIgRklOSVNIX1NUQVRFID0gNjY2OwogICAgICB2YXIgQlNfTkVFRF9NT1JFID0gMTsKICAgICAgdmFyIEJTX0JMT0NLX0RPTkUgPSAyOwogICAgICB2YXIgQlNfRklOSVNIX1NUQVJURUQgPSAzOwogICAgICB2YXIgQlNfRklOSVNIX0RPTkUgPSA0OwogICAgICB2YXIgT1NfQ09ERSA9IDM7CiAgICAgIGZ1bmN0aW9uIGVycihzdHJtLCBlcnJvckNvZGUpIHsKICAgICAgICBzdHJtLm1zZyA9IG1zZ1tlcnJvckNvZGVdOwogICAgICAgIHJldHVybiBlcnJvckNvZGU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcmFuayhmKSB7CiAgICAgICAgcmV0dXJuIChmIDw8IDEpIC0gKGYgPiA0ID8gOSA6IDApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHplcm8oYnVmKSB7CiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7CiAgICAgICAgd2hpbGUgKC0tbGVuID49IDApIHsKICAgICAgICAgIGJ1ZltsZW5dID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmx1c2hfcGVuZGluZyhzdHJtKSB7CiAgICAgICAgdmFyIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIHZhciBsZW4gPSBzLnBlbmRpbmc7CiAgICAgICAgaWYgKGxlbiA+IHN0cm0uYXZhaWxfb3V0KSB7CiAgICAgICAgICBsZW4gPSBzdHJtLmF2YWlsX291dDsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nX291dCwgbGVuLCBzdHJtLm5leHRfb3V0KTsKICAgICAgICBzdHJtLm5leHRfb3V0ICs9IGxlbjsKICAgICAgICBzLnBlbmRpbmdfb3V0ICs9IGxlbjsKICAgICAgICBzdHJtLnRvdGFsX291dCArPSBsZW47CiAgICAgICAgc3RybS5hdmFpbF9vdXQgLT0gbGVuOwogICAgICAgIHMucGVuZGluZyAtPSBsZW47CiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gMCkgewogICAgICAgICAgcy5wZW5kaW5nX291dCA9IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZsdXNoX2Jsb2NrX29ubHkocywgbGFzdCkgewogICAgICAgIHRyZWVzLl90cl9mbHVzaF9ibG9jayhzLCBzLmJsb2NrX3N0YXJ0ID49IDAgPyBzLmJsb2NrX3N0YXJ0IDogLTEsIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTsKICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gcy5zdHJzdGFydDsKICAgICAgICBmbHVzaF9wZW5kaW5nKHMuc3RybSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHV0X2J5dGUocywgYikgewogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYjsKICAgICAgfQogICAgICBmdW5jdGlvbiBwdXRTaG9ydE1TQihzLCBiKSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiID4+PiA4ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiAmIDI1NTsKICAgICAgfQogICAgICBmdW5jdGlvbiByZWFkX2J1ZihzdHJtLCBidWYsIHN0YXJ0LCBzaXplKSB7CiAgICAgICAgdmFyIGxlbiA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgaWYgKGxlbiA+IHNpemUpIHsKICAgICAgICAgIGxlbiA9IHNpemU7CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBzdHJtLmF2YWlsX2luIC09IGxlbjsKICAgICAgICB1dGlscy5hcnJheVNldChidWYsIHN0cm0uaW5wdXQsIHN0cm0ubmV4dF9pbiwgbGVuLCBzdGFydCk7CiAgICAgICAgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMSkgewogICAgICAgICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTsKICAgICAgICB9IGVsc2UgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMikgewogICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiArPSBsZW47CiAgICAgICAgc3RybS50b3RhbF9pbiArPSBsZW47CiAgICAgICAgcmV0dXJuIGxlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBsb25nZXN0X21hdGNoKHMsIGN1cl9tYXRjaCkgewogICAgICAgIHZhciBjaGFpbl9sZW5ndGggPSBzLm1heF9jaGFpbl9sZW5ndGg7CiAgICAgICAgdmFyIHNjYW4gPSBzLnN0cnN0YXJ0OwogICAgICAgIHZhciBtYXRjaDsKICAgICAgICB2YXIgbGVuOwogICAgICAgIHZhciBiZXN0X2xlbiA9IHMucHJldl9sZW5ndGg7CiAgICAgICAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7CiAgICAgICAgdmFyIGxpbWl0ID0gcy5zdHJzdGFydCA+IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCA/IHMuc3Ryc3RhcnQgLSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSA6IDA7CiAgICAgICAgdmFyIF93aW4gPSBzLndpbmRvdzsKICAgICAgICB2YXIgd21hc2sgPSBzLndfbWFzazsKICAgICAgICB2YXIgcHJldiA9IHMucHJldjsKICAgICAgICB2YXIgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICB2YXIgc2Nhbl9lbmQxID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTsKICAgICAgICB2YXIgc2Nhbl9lbmQgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07CiAgICAgICAgaWYgKHMucHJldl9sZW5ndGggPj0gcy5nb29kX21hdGNoKSB7CiAgICAgICAgICBjaGFpbl9sZW5ndGggPj49IDI7CiAgICAgICAgfQogICAgICAgIGlmIChuaWNlX21hdGNoID4gcy5sb29rYWhlYWQpIHsKICAgICAgICAgIG5pY2VfbWF0Y2ggPSBzLmxvb2thaGVhZDsKICAgICAgICB9CiAgICAgICAgZG8gewogICAgICAgICAgbWF0Y2ggPSBjdXJfbWF0Y2g7CiAgICAgICAgICBpZiAoX3dpblttYXRjaCArIGJlc3RfbGVuXSAhPT0gc2Nhbl9lbmQgfHwgX3dpblttYXRjaCArIGJlc3RfbGVuIC0gMV0gIT09IHNjYW5fZW5kMSB8fCBfd2luW21hdGNoXSAhPT0gX3dpbltzY2FuXSB8fCBfd2luWysrbWF0Y2hdICE9PSBfd2luW3NjYW4gKyAxXSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHNjYW4gKz0gMjsKICAgICAgICAgIG1hdGNoKys7CiAgICAgICAgICBkbyB7CiAgICAgICAgICB9IHdoaWxlIChfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIHNjYW4gPCBzdHJlbmQpOwogICAgICAgICAgbGVuID0gTUFYX01BVENIIC0gKHN0cmVuZCAtIHNjYW4pOwogICAgICAgICAgc2NhbiA9IHN0cmVuZCAtIE1BWF9NQVRDSDsKICAgICAgICAgIGlmIChsZW4gPiBiZXN0X2xlbikgewogICAgICAgICAgICBzLm1hdGNoX3N0YXJ0ID0gY3VyX21hdGNoOwogICAgICAgICAgICBiZXN0X2xlbiA9IGxlbjsKICAgICAgICAgICAgaWYgKGxlbiA+PSBuaWNlX21hdGNoKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2Nhbl9lbmQxID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTsKICAgICAgICAgICAgc2Nhbl9lbmQgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKGN1cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0ICYmIC0tY2hhaW5fbGVuZ3RoICE9PSAwKTsKICAgICAgICBpZiAoYmVzdF9sZW4gPD0gcy5sb29rYWhlYWQpIHsKICAgICAgICAgIHJldHVybiBiZXN0X2xlbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMubG9va2FoZWFkOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHsKICAgICAgICB2YXIgX3dfc2l6ZSA9IHMud19zaXplOwogICAgICAgIHZhciBwLCBuLCBtLCBtb3JlLCBzdHI7CiAgICAgICAgZG8gewogICAgICAgICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7CiAgICAgICAgICBpZiAocy5zdHJzdGFydCA+PSBfd19zaXplICsgKF93X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkgewogICAgICAgICAgICB1dGlscy5hcnJheVNldChzLndpbmRvdywgcy53aW5kb3csIF93X3NpemUsIF93X3NpemUsIDApOwogICAgICAgICAgICBzLm1hdGNoX3N0YXJ0IC09IF93X3NpemU7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgICAgICAgcy5ibG9ja19zdGFydCAtPSBfd19zaXplOwogICAgICAgICAgICBuID0gcy5oYXNoX3NpemU7CiAgICAgICAgICAgIHAgPSBuOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgbSA9IHMuaGVhZFstLXBdOwogICAgICAgICAgICAgIHMuaGVhZFtwXSA9IG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMDsKICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgICAgbiA9IF93X3NpemU7CiAgICAgICAgICAgIHAgPSBuOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgbSA9IHMucHJldlstLXBdOwogICAgICAgICAgICAgIHMucHJldltwXSA9IG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMDsKICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgICAgbW9yZSArPSBfd19zaXplOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpOwogICAgICAgICAgcy5sb29rYWhlYWQgKz0gbjsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0ID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBzdHIgPSBzLnN0cnN0YXJ0IC0gcy5pbnNlcnQ7CiAgICAgICAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdOwogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbc3RyICsgMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIHdoaWxlIChzLmluc2VydCkgewogICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICAgICAgICBzdHIrKzsKICAgICAgICAgICAgICBzLmluc2VydC0tOwogICAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0IDwgTUlOX01BVENIKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgcy5zdHJtLmF2YWlsX2luICE9PSAwKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX3N0b3JlZChzLCBmbHVzaCkgewogICAgICAgIHZhciBtYXhfYmxvY2tfc2l6ZSA9IDY1NTM1OwogICAgICAgIGlmIChtYXhfYmxvY2tfc2l6ZSA+IHMucGVuZGluZ19idWZfc2l6ZSAtIDUpIHsKICAgICAgICAgIG1heF9ibG9ja19zaXplID0gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPD0gMSkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcy5zdHJzdGFydCArPSBzLmxvb2thaGVhZDsKICAgICAgICAgIHMubG9va2FoZWFkID0gMDsKICAgICAgICAgIHZhciBtYXhfc3RhcnQgPSBzLmJsb2NrX3N0YXJ0ICsgbWF4X2Jsb2NrX3NpemU7CiAgICAgICAgICBpZiAocy5zdHJzdGFydCA9PT0gMCB8fCBzLnN0cnN0YXJ0ID49IG1heF9zdGFydCkgewogICAgICAgICAgICBzLmxvb2thaGVhZCA9IHMuc3Ryc3RhcnQgLSBtYXhfc3RhcnQ7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSBtYXhfc3RhcnQ7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCA+PSBzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMuc3Ryc3RhcnQgPiBzLmJsb2NrX3N0YXJ0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9mYXN0KHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGhhc2hfaGVhZDsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2hfaGVhZCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKGhhc2hfaGVhZCAhPT0gMCAmJiBzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkIDw9IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7CiAgICAgICAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gcy5tYXhfbGF6eV9tYXRjaCAmJiBzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aC0tOwogICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICAgICAgfSB3aGlsZSAoLS1zLm1hdGNoX2xlbmd0aCAhPT0gMCk7CiAgICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgICAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzLnN0cnN0YXJ0XTsKICAgICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbcy5zdHJzdGFydCArIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSBzLnN0cnN0YXJ0IDwgTUlOX01BVENIIC0gMSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0ggLSAxOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfc2xvdyhzLCBmbHVzaCkgewogICAgICAgIHZhciBoYXNoX2hlYWQ7CiAgICAgICAgdmFyIGJmbHVzaDsKICAgICAgICB2YXIgbWF4X2luc2VydDsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBoYXNoX2hlYWQgPSAwOwogICAgICAgICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgIH0KICAgICAgICAgIHMucHJldl9sZW5ndGggPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICAgIHMucHJldl9tYXRjaCA9IHMubWF0Y2hfc3RhcnQ7CiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgICBpZiAoaGFzaF9oZWFkICE9PSAwICYmIHMucHJldl9sZW5ndGggPCBzLm1heF9sYXp5X21hdGNoICYmIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gNSAmJiAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCBzLm1hdGNoX2xlbmd0aCA9PT0gTUlOX01BVENIICYmIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0ID4gNDA5NikpIHsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLm1hdGNoX2xlbmd0aCA8PSBzLnByZXZfbGVuZ3RoKSB7CiAgICAgICAgICAgIG1heF9pbnNlcnQgPSBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQgLSBNSU5fTUFUQ0g7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCk7CiAgICAgICAgICAgIHMubG9va2FoZWFkIC09IHMucHJldl9sZW5ndGggLSAxOwogICAgICAgICAgICBzLnByZXZfbGVuZ3RoIC09IDI7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBpZiAoKytzLnN0cnN0YXJ0IDw9IG1heF9pbnNlcnQpIHsKICAgICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICgtLXMucHJldl9sZW5ndGggIT09IDApOwogICAgICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pOwogICAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMTsKICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pOwogICAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9ybGUocywgZmx1c2gpIHsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIHZhciBwcmV2OwogICAgICAgIHZhciBzY2FuLCBzdHJlbmQ7CiAgICAgICAgdmFyIF93aW4gPSBzLndpbmRvdzsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHsKICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIICYmIHMuc3Ryc3RhcnQgPiAwKSB7CiAgICAgICAgICAgIHNjYW4gPSBzLnN0cnN0YXJ0IC0gMTsKICAgICAgICAgICAgcHJldiA9IF93aW5bc2Nhbl07CiAgICAgICAgICAgIGlmIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSkgewogICAgICAgICAgICAgIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CiAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIH0gd2hpbGUgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAgICAgICAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID4gcy5sb29rYWhlYWQpIHsKICAgICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5sb29rYWhlYWQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7CiAgICAgICAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgewogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgaWYgKGJmbHVzaCkgewogICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5sYXN0X2xpdCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKICAgICAgfQogICAgICBmdW5jdGlvbiBDb25maWcoZ29vZF9sZW5ndGgsIG1heF9sYXp5LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluLCBmdW5jKSB7CiAgICAgICAgdGhpcy5nb29kX2xlbmd0aCA9IGdvb2RfbGVuZ3RoOwogICAgICAgIHRoaXMubWF4X2xhenkgPSBtYXhfbGF6eTsKICAgICAgICB0aGlzLm5pY2VfbGVuZ3RoID0gbmljZV9sZW5ndGg7CiAgICAgICAgdGhpcy5tYXhfY2hhaW4gPSBtYXhfY2hhaW47CiAgICAgICAgdGhpcy5mdW5jID0gZnVuYzsKICAgICAgfQogICAgICB2YXIgY29uZmlndXJhdGlvbl90YWJsZTsKICAgICAgY29uZmlndXJhdGlvbl90YWJsZSA9IFsKICAgICAgICBuZXcgQ29uZmlnKDAsIDAsIDAsIDAsIGRlZmxhdGVfc3RvcmVkKSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDQsIDgsIDQsIGRlZmxhdGVfZmFzdCksCiAgICAgICAgbmV3IENvbmZpZyg0LCA1LCAxNiwgOCwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDYsIDMyLCAzMiwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDQsIDE2LCAxNiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDE2LCAzMiwgMzIsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZyg4LCAxNiwgMTI4LCAxMjgsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZyg4LCAzMiwgMTI4LCAyNTYsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZygzMiwgMTI4LCAyNTgsIDEwMjQsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZygzMiwgMjU4LCAyNTgsIDQwOTYsIGRlZmxhdGVfc2xvdykKICAgICAgXTsKICAgICAgZnVuY3Rpb24gbG1faW5pdChzKSB7CiAgICAgICAgcy53aW5kb3dfc2l6ZSA9IDIgKiBzLndfc2l6ZTsKICAgICAgICB6ZXJvKHMuaGVhZCk7CiAgICAgICAgcy5tYXhfbGF6eV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2xhenk7CiAgICAgICAgcy5nb29kX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5nb29kX2xlbmd0aDsKICAgICAgICBzLm5pY2VfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm5pY2VfbGVuZ3RoOwogICAgICAgIHMubWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2NoYWluOwogICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSAwOwogICAgICAgIHMubG9va2FoZWFkID0gMDsKICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgcy5pbnNfaCA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gRGVmbGF0ZVN0YXRlKCkgewogICAgICAgIHRoaXMuc3RybSA9IG51bGw7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAwOwogICAgICAgIHRoaXMucGVuZGluZ19idWYgPSBudWxsOwogICAgICAgIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nX291dCA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nID0gMDsKICAgICAgICB0aGlzLndyYXAgPSAwOwogICAgICAgIHRoaXMuZ3poZWFkID0gbnVsbDsKICAgICAgICB0aGlzLmd6aW5kZXggPSAwOwogICAgICAgIHRoaXMubWV0aG9kID0gWl9ERUZMQVRFRDsKICAgICAgICB0aGlzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICB0aGlzLndfc2l6ZSA9IDA7CiAgICAgICAgdGhpcy53X2JpdHMgPSAwOwogICAgICAgIHRoaXMud19tYXNrID0gMDsKICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICAgICAgdGhpcy53aW5kb3dfc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5wcmV2ID0gbnVsbDsKICAgICAgICB0aGlzLmhlYWQgPSBudWxsOwogICAgICAgIHRoaXMuaW5zX2ggPSAwOwogICAgICAgIHRoaXMuaGFzaF9zaXplID0gMDsKICAgICAgICB0aGlzLmhhc2hfYml0cyA9IDA7CiAgICAgICAgdGhpcy5oYXNoX21hc2sgPSAwOwogICAgICAgIHRoaXMuaGFzaF9zaGlmdCA9IDA7CiAgICAgICAgdGhpcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgIHRoaXMucHJldl9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIHRoaXMuc3Ryc3RhcnQgPSAwOwogICAgICAgIHRoaXMubWF0Y2hfc3RhcnQgPSAwOwogICAgICAgIHRoaXMubG9va2FoZWFkID0gMDsKICAgICAgICB0aGlzLnByZXZfbGVuZ3RoID0gMDsKICAgICAgICB0aGlzLm1heF9jaGFpbl9sZW5ndGggPSAwOwogICAgICAgIHRoaXMubWF4X2xhenlfbWF0Y2ggPSAwOwogICAgICAgIHRoaXMubGV2ZWwgPSAwOwogICAgICAgIHRoaXMuc3RyYXRlZ3kgPSAwOwogICAgICAgIHRoaXMuZ29vZF9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5uaWNlX21hdGNoID0gMDsKICAgICAgICB0aGlzLmR5bl9sdHJlZSA9IG5ldyB1dGlscy5CdWYxNihIRUFQX1NJWkUgKiAyKTsKICAgICAgICB0aGlzLmR5bl9kdHJlZSA9IG5ldyB1dGlscy5CdWYxNigoMiAqIERfQ09ERVMgKyAxKSAqIDIpOwogICAgICAgIHRoaXMuYmxfdHJlZSA9IG5ldyB1dGlscy5CdWYxNigoMiAqIEJMX0NPREVTICsgMSkgKiAyKTsKICAgICAgICB6ZXJvKHRoaXMuZHluX2x0cmVlKTsKICAgICAgICB6ZXJvKHRoaXMuZHluX2R0cmVlKTsKICAgICAgICB6ZXJvKHRoaXMuYmxfdHJlZSk7CiAgICAgICAgdGhpcy5sX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuZF9kZXNjID0gbnVsbDsKICAgICAgICB0aGlzLmJsX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuYmxfY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYX0JJVFMgKyAxKTsKICAgICAgICB0aGlzLmhlYXAgPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsKICAgICAgICB6ZXJvKHRoaXMuaGVhcCk7CiAgICAgICAgdGhpcy5oZWFwX2xlbiA9IDA7CiAgICAgICAgdGhpcy5oZWFwX21heCA9IDA7CiAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOwogICAgICAgIHplcm8odGhpcy5kZXB0aCk7CiAgICAgICAgdGhpcy5sX2J1ZiA9IDA7CiAgICAgICAgdGhpcy5saXRfYnVmc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5sYXN0X2xpdCA9IDA7CiAgICAgICAgdGhpcy5kX2J1ZiA9IDA7CiAgICAgICAgdGhpcy5vcHRfbGVuID0gMDsKICAgICAgICB0aGlzLnN0YXRpY19sZW4gPSAwOwogICAgICAgIHRoaXMubWF0Y2hlcyA9IDA7CiAgICAgICAgdGhpcy5pbnNlcnQgPSAwOwogICAgICAgIHRoaXMuYmlfYnVmID0gMDsKICAgICAgICB0aGlzLmJpX3ZhbGlkID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pIHsKICAgICAgICB2YXIgczsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSAwOwogICAgICAgIHN0cm0uZGF0YV90eXBlID0gWl9VTktOT1dOOwogICAgICAgIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIHMucGVuZGluZyA9IDA7CiAgICAgICAgcy5wZW5kaW5nX291dCA9IDA7CiAgICAgICAgaWYgKHMud3JhcCA8IDApIHsKICAgICAgICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAgICAgfQogICAgICAgIHMuc3RhdHVzID0gcy53cmFwID8gSU5JVF9TVEFURSA6IEJVU1lfU1RBVEU7CiAgICAgICAgc3RybS5hZGxlciA9IHMud3JhcCA9PT0gMiA/IDAgOiAxOwogICAgICAgIHMubGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7CiAgICAgICAgdHJlZXMuX3RyX2luaXQocyk7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVJlc2V0KHN0cm0pIHsKICAgICAgICB2YXIgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTsKICAgICAgICBpZiAocmV0ID09PSBaX09LKSB7CiAgICAgICAgICBsbV9pbml0KHN0cm0uc3RhdGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTZXRIZWFkZXIoc3RybSwgaGVhZCkgewogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RybS5zdGF0ZS53cmFwICE9PSAyKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0cm0uc3RhdGUuZ3poZWFkID0gaGVhZDsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSB7CiAgICAgICAgaWYgKCFzdHJtKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHZhciB3cmFwID0gMTsKICAgICAgICBpZiAobGV2ZWwgPT09IFpfREVGQVVMVF9DT01QUkVTU0lPTikgewogICAgICAgICAgbGV2ZWwgPSA2OwogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgICAgICAgIHdyYXAgPSAwOwogICAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICB3cmFwID0gMjsKICAgICAgICAgIHdpbmRvd0JpdHMgLT0gMTY7CiAgICAgICAgfQogICAgICAgIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPT0gWl9ERUZMQVRFRCB8fCB3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUgfHwgbGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fCBzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0ZJWEVEKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHdpbmRvd0JpdHMgPT09IDgpIHsKICAgICAgICAgIHdpbmRvd0JpdHMgPSA5OwogICAgICAgIH0KICAgICAgICB2YXIgcyA9IG5ldyBEZWZsYXRlU3RhdGUoKTsKICAgICAgICBzdHJtLnN0YXRlID0gczsKICAgICAgICBzLnN0cm0gPSBzdHJtOwogICAgICAgIHMud3JhcCA9IHdyYXA7CiAgICAgICAgcy5nemhlYWQgPSBudWxsOwogICAgICAgIHMud19iaXRzID0gd2luZG93Qml0czsKICAgICAgICBzLndfc2l6ZSA9IDEgPDwgcy53X2JpdHM7CiAgICAgICAgcy53X21hc2sgPSBzLndfc2l6ZSAtIDE7CiAgICAgICAgcy5oYXNoX2JpdHMgPSBtZW1MZXZlbCArIDc7CiAgICAgICAgcy5oYXNoX3NpemUgPSAxIDw8IHMuaGFzaF9iaXRzOwogICAgICAgIHMuaGFzaF9tYXNrID0gcy5oYXNoX3NpemUgLSAxOwogICAgICAgIHMuaGFzaF9zaGlmdCA9IH5+KChzLmhhc2hfYml0cyArIE1JTl9NQVRDSCAtIDEpIC8gTUlOX01BVENIKTsKICAgICAgICBzLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplICogMik7CiAgICAgICAgcy5oZWFkID0gbmV3IHV0aWxzLkJ1ZjE2KHMuaGFzaF9zaXplKTsKICAgICAgICBzLnByZXYgPSBuZXcgdXRpbHMuQnVmMTYocy53X3NpemUpOwogICAgICAgIHMubGl0X2J1ZnNpemUgPSAxIDw8IG1lbUxldmVsICsgNjsKICAgICAgICBzLnBlbmRpbmdfYnVmX3NpemUgPSBzLmxpdF9idWZzaXplICogNDsKICAgICAgICBzLnBlbmRpbmdfYnVmID0gbmV3IHV0aWxzLkJ1Zjgocy5wZW5kaW5nX2J1Zl9zaXplKTsKICAgICAgICBzLmRfYnVmID0gMSAqIHMubGl0X2J1ZnNpemU7CiAgICAgICAgcy5sX2J1ZiA9ICgxICsgMikgKiBzLmxpdF9idWZzaXplOwogICAgICAgIHMubGV2ZWwgPSBsZXZlbDsKICAgICAgICBzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CiAgICAgICAgcy5tZXRob2QgPSBtZXRob2Q7CiAgICAgICAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgewogICAgICAgIHJldHVybiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgICAgICAgdmFyIG9sZF9mbHVzaCwgczsKICAgICAgICB2YXIgYmVnLCB2YWw7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIHx8IGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHsKICAgICAgICAgIHJldHVybiBzdHJtID8gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKSA6IFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoIXN0cm0ub3V0cHV0IHx8ICFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDAgfHwgcy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBmbHVzaCAhPT0gWl9GSU5JU0gpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgc3RybS5hdmFpbF9vdXQgPT09IDAgPyBaX0JVRl9FUlJPUiA6IFpfU1RSRUFNX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgcy5zdHJtID0gc3RybTsKICAgICAgICBvbGRfZmx1c2ggPSBzLmxhc3RfZmx1c2g7CiAgICAgICAgcy5sYXN0X2ZsdXNoID0gZmx1c2g7CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBJTklUX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy53cmFwID09PSAyKSB7CiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSAwOwogICAgICAgICAgICBwdXRfYnl0ZShzLCAzMSk7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDEzOSk7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDgpOwogICAgICAgICAgICBpZiAoIXMuZ3poZWFkKSB7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOiBzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID8gNCA6IDApOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpOwogICAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGV4dCA/IDEgOiAwKSArIChzLmd6aGVhZC5oY3JjID8gMiA6IDApICsgKCFzLmd6aGVhZC5leHRyYSA/IDAgOiA0KSArICghcy5nemhlYWQubmFtZSA/IDAgOiA4KSArICghcy5nemhlYWQuY29tbWVudCA/IDAgOiAxNikpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLnRpbWUgJiAyNTUpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLnRpbWUgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiAxNiAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiAyNCAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOiBzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID8gNCA6IDApOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLm9zICYgMjU1KTsKICAgICAgICAgICAgICBpZiAocy5nemhlYWQuZXh0cmEgJiYgcy5nemhlYWQuZXh0cmEubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggJiAyNTUpOwogICAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDggJiAyNTUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZywgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBFWFRSQV9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IFpfREVGTEFURUQgKyAocy53X2JpdHMgLSA4IDw8IDQpIDw8IDg7CiAgICAgICAgICAgIHZhciBsZXZlbF9mbGFncyA9IC0xOwogICAgICAgICAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsID09PSA2KSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIgfD0gbGV2ZWxfZmxhZ3MgPDwgNjsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVhZGVyICs9IDMxIC0gaGVhZGVyICUgMzE7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7CiAgICAgICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDY1NTM1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJtLmFkbGVyID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhKSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgd2hpbGUgKHMuZ3ppbmRleCA8IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiA2NTUzNSkpIHsKICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmFbcy5nemluZGV4XSAmIDI1NSk7CiAgICAgICAgICAgICAgcy5nemluZGV4Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5nemluZGV4ID09PSBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgICAgICBzLmd6aW5kZXggPSAwOwogICAgICAgICAgICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLmd6aGVhZC5uYW1lKSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICAgIHZhbCA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQubmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAyNTU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CiAgICAgICAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7CiAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkgewogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gQ09NTUVOVF9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmNvbW1lbnQpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5jb21tZW50Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFsID0gcy5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDI1NTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsID09PSAwKSB7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gSENSQ19TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMpIHsKICAgICAgICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgKyAyIDw9IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAyNTUpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnBlbmRpbmcgIT09IDApIHsKICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIHJldHVybiBaX09LOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiYgZmx1c2ggIT09IFpfRklOSVNIKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8IGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHZhciBic3RhdGUgPSBzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSA/IGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgOiBzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCk7CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9ET05FKSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gRklOSVNIX1NUQVRFOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJzdGF0ZSA9PT0gQlNfTkVFRF9NT1JFIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQpIHsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19CTE9DS19ET05FKSB7CiAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9QQVJUSUFMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZsdXNoICE9PSBaX0JMT0NLKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZVTExfRkxVU0gpIHsKICAgICAgICAgICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChzLndyYXAgPD0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VORDsKICAgICAgICB9CiAgICAgICAgaWYgKHMud3JhcCA9PT0gMikgewogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDggJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciA+PiAxNiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDI0ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiA4ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gPj4gMTYgJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiAyNCAmIDI1NSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiA2NTUzNSk7CiAgICAgICAgfQogICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgaWYgKHMud3JhcCA+IDApIHsKICAgICAgICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnBlbmRpbmcgIT09IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVFbmQoc3RybSkgewogICAgICAgIHZhciBzdGF0dXM7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzOwogICAgICAgIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiYgc3RhdHVzICE9PSBFWFRSQV9TVEFURSAmJiBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiYgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmIHN0YXR1cyAhPT0gSENSQ19TVEFURSAmJiBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiYgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzdHJtLnN0YXRlID0gbnVsbDsKICAgICAgICByZXR1cm4gc3RhdHVzID09PSBCVVNZX1NUQVRFID8gZXJyKHN0cm0sIFpfREFUQV9FUlJPUikgOiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICAgICAgICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwogICAgICAgIHZhciBzOwogICAgICAgIHZhciBzdHIsIG47CiAgICAgICAgdmFyIHdyYXA7CiAgICAgICAgdmFyIGF2YWlsOwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBpbnB1dDsKICAgICAgICB2YXIgdG1wRGljdDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgd3JhcCA9IHMud3JhcDsKICAgICAgICBpZiAod3JhcCA9PT0gMiB8fCB3cmFwID09PSAxICYmIHMuc3RhdHVzICE9PSBJTklUX1NUQVRFIHx8IHMubG9va2FoZWFkKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmICh3cmFwID09PSAxKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTsKICAgICAgICB9CiAgICAgICAgcy53cmFwID0gMDsKICAgICAgICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkgewogICAgICAgICAgaWYgKHdyYXAgPT09IDApIHsKICAgICAgICAgICAgemVybyhzLmhlYWQpOwogICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHRtcERpY3QgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSk7CiAgICAgICAgICB1dGlscy5hcnJheVNldCh0bXBEaWN0LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoIC0gcy53X3NpemUsIHMud19zaXplLCAwKTsKICAgICAgICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0OwogICAgICAgICAgZGljdExlbmd0aCA9IHMud19zaXplOwogICAgICAgIH0KICAgICAgICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgbmV4dCA9IHN0cm0ubmV4dF9pbjsKICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CiAgICAgICAgc3RybS5uZXh0X2luID0gMDsKICAgICAgICBzdHJtLmlucHV0ID0gZGljdGlvbmFyeTsKICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICB3aGlsZSAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICBzdHIgPSBzLnN0cnN0YXJ0OwogICAgICAgICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpOwogICAgICAgICAgZG8gewogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICAgICAgc3RyKys7CiAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgcy5zdHJzdGFydCA9IHN0cjsKICAgICAgICAgIHMubG9va2FoZWFkID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgIH0KICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0OwogICAgICAgIHMuaW5zZXJ0ID0gcy5sb29rYWhlYWQ7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgc3RybS5pbnB1dCA9IGlucHV0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBhdmFpbDsKICAgICAgICBzLndyYXAgPSB3cmFwOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVJbml0ID0gZGVmbGF0ZUluaXQ7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVJbml0MiA9IGRlZmxhdGVJbml0MjsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVJlc2V0ID0gZGVmbGF0ZVJlc2V0OwogICAgICBleHBvcnRzMi5kZWZsYXRlUmVzZXRLZWVwID0gZGVmbGF0ZVJlc2V0S2VlcDsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVNldEhlYWRlciA9IGRlZmxhdGVTZXRIZWFkZXI7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGUgPSBkZWZsYXRlOwogICAgICBleHBvcnRzMi5kZWZsYXRlRW5kID0gZGVmbGF0ZUVuZDsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVNldERpY3Rpb25hcnkgPSBkZWZsYXRlU2V0RGljdGlvbmFyeTsKICAgICAgZXhwb3J0czIuZGVmbGF0ZUluZm8gPSAicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvc3RyaW5ncy5qcwogIHZhciByZXF1aXJlX3N0cmluZ3MgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL3N0cmluZ3MuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgU1RSX0FQUExZX09LID0gdHJ1ZTsKICAgICAgdmFyIFNUUl9BUFBMWV9VSUFfT0sgPSB0cnVlOwogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKTsKICAgICAgfSBjYXRjaCAoX18pIHsKICAgICAgICBTVFJfQVBQTFlfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOwogICAgICB9IGNhdGNoIChfXykgewogICAgICAgIFNUUl9BUFBMWV9VSUFfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB2YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpOwogICAgICBmb3IgKHEgPSAwOyBxIDwgMjU2OyBxKyspIHsKICAgICAgICBfdXRmOGxlbltxXSA9IHEgPj0gMjUyID8gNiA6IHEgPj0gMjQ4ID8gNSA6IHEgPj0gMjQwID8gNCA6IHEgPj0gMjI0ID8gMyA6IHEgPj0gMTkyID8gMiA6IDE7CiAgICAgIH0KICAgICAgdmFyIHE7CiAgICAgIF91dGY4bGVuWzI1NF0gPSBfdXRmOGxlblsyNTRdID0gMTsKICAgICAgZXhwb3J0czIuc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHZhciBidWYsIGMsIGMyLCBtX3BvcywgaSwgc3RyX2xlbiA9IHN0ci5sZW5ndGgsIGJ1Zl9sZW4gPSAwOwogICAgICAgIGZvciAobV9wb3MgPSAwOyBtX3BvcyA8IHN0cl9sZW47IG1fcG9zKyspIHsKICAgICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChtX3Bvcyk7CiAgICAgICAgICBpZiAoKGMgJiA2NDUxMikgPT09IDU1Mjk2ICYmIG1fcG9zICsgMSA8IHN0cl9sZW4pIHsKICAgICAgICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpOwogICAgICAgICAgICBpZiAoKGMyICYgNjQ1MTIpID09PSA1NjMyMCkgewogICAgICAgICAgICAgIGMgPSA2NTUzNiArIChjIC0gNTUyOTYgPDwgMTApICsgKGMyIC0gNTYzMjApOwogICAgICAgICAgICAgIG1fcG9zKys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJ1Zl9sZW4gKz0gYyA8IDEyOCA/IDEgOiBjIDwgMjA0OCA/IDIgOiBjIDwgNjU1MzYgPyAzIDogNDsKICAgICAgICB9CiAgICAgICAgYnVmID0gbmV3IHV0aWxzLkJ1ZjgoYnVmX2xlbik7CiAgICAgICAgZm9yIChpID0gMCwgbV9wb3MgPSAwOyBpIDwgYnVmX2xlbjsgbV9wb3MrKykgewogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICAgIGlmICgoYyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgbV9wb3MgKyAxIDwgc3RyX2xlbikgewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiA2NDUxMikgPT09IDU2MzIwKSB7CiAgICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgLSA1NTI5NiA8PCAxMCkgKyAoYzIgLSA1NjMyMCk7CiAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGMgPCAxMjgpIHsKICAgICAgICAgICAgYnVmW2krK10gPSBjOwogICAgICAgICAgfSBlbHNlIGlmIChjIDwgMjA0OCkgewogICAgICAgICAgICBidWZbaSsrXSA9IDE5MiB8IGMgPj4+IDY7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyAmIDYzOwogICAgICAgICAgfSBlbHNlIGlmIChjIDwgNjU1MzYpIHsKICAgICAgICAgICAgYnVmW2krK10gPSAyMjQgfCBjID4+PiAxMjsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjID4+PiA2ICYgNjM7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyAmIDYzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVmW2krK10gPSAyNDAgfCBjID4+PiAxODsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjID4+PiAxMiAmIDYzOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDYgJiA2MzsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJ1ZjJiaW5zdHJpbmcoYnVmLCBsZW4pIHsKICAgICAgICBpZiAobGVuIDwgNjU1MzQpIHsKICAgICAgICAgIGlmIChidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX1VJQV9PSyB8fCAhYnVmLnN1YmFycmF5ICYmIFNUUl9BUFBMWV9PSykgewogICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB1dGlscy5zaHJpbmtCdWYoYnVmLCBsZW4pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgZXhwb3J0czIuYnVmMmJpbnN0cmluZyA9IGZ1bmN0aW9uKGJ1ZikgewogICAgICAgIHJldHVybiBidWYyYmluc3RyaW5nKGJ1ZiwgYnVmLmxlbmd0aCk7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmJpbnN0cmluZzJidWYgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICB2YXIgYnVmID0gbmV3IHV0aWxzLkJ1Zjgoc3RyLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgYnVmW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmJ1ZjJzdHJpbmcgPSBmdW5jdGlvbihidWYsIG1heCkgewogICAgICAgIHZhciBpLCBvdXQsIGMsIGNfbGVuOwogICAgICAgIHZhciBsZW4gPSBtYXggfHwgYnVmLmxlbmd0aDsKICAgICAgICB2YXIgdXRmMTZidWYgPSBuZXcgQXJyYXkobGVuICogMik7CiAgICAgICAgZm9yIChvdXQgPSAwLCBpID0gMDsgaSA8IGxlbjsgKSB7CiAgICAgICAgICBjID0gYnVmW2krK107CiAgICAgICAgICBpZiAoYyA8IDEyOCkgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSBjOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNfbGVuID0gX3V0ZjhsZW5bY107CiAgICAgICAgICBpZiAoY19sZW4gPiA0KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDY1NTMzOwogICAgICAgICAgICBpICs9IGNfbGVuIC0gMTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjICY9IGNfbGVuID09PSAyID8gMzEgOiBjX2xlbiA9PT0gMyA/IDE1IDogNzsKICAgICAgICAgIHdoaWxlIChjX2xlbiA+IDEgJiYgaSA8IGxlbikgewogICAgICAgICAgICBjID0gYyA8PCA2IHwgYnVmW2krK10gJiA2MzsKICAgICAgICAgICAgY19sZW4tLTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjX2xlbiA+IDEpIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNjU1MzM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGMgPCA2NTUzNikgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSBjOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYyAtPSA2NTUzNjsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNTUyOTYgfCBjID4+IDEwICYgMTAyMzsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNTYzMjAgfCBjICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjJiaW5zdHJpbmcodXRmMTZidWYsIG91dCk7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLnV0Zjhib3JkZXIgPSBmdW5jdGlvbihidWYsIG1heCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgbWF4ID0gbWF4IHx8IGJ1Zi5sZW5ndGg7CiAgICAgICAgaWYgKG1heCA+IGJ1Zi5sZW5ndGgpIHsKICAgICAgICAgIG1heCA9IGJ1Zi5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHBvcyA9IG1heCAtIDE7CiAgICAgICAgd2hpbGUgKHBvcyA+PSAwICYmIChidWZbcG9zXSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgcG9zLS07CiAgICAgICAgfQogICAgICAgIGlmIChwb3MgPCAwKSB7CiAgICAgICAgICByZXR1cm4gbWF4OwogICAgICAgIH0KICAgICAgICBpZiAocG9zID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbWF4OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcG9zICsgX3V0ZjhsZW5bYnVmW3Bvc11dID4gbWF4ID8gcG9zIDogbWF4OwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvenN0cmVhbS5qcwogIHZhciByZXF1aXJlX3pzdHJlYW0gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvenN0cmVhbS5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIFpTdHJlYW0oKSB7CiAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0X2luID0gMDsKICAgICAgICB0aGlzLmF2YWlsX2luID0gMDsKICAgICAgICB0aGlzLnRvdGFsX2luID0gMDsKICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0X291dCA9IDA7CiAgICAgICAgdGhpcy5hdmFpbF9vdXQgPSAwOwogICAgICAgIHRoaXMudG90YWxfb3V0ID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuc3RhdGUgPSBudWxsOwogICAgICAgIHRoaXMuZGF0YV90eXBlID0gMjsKICAgICAgICB0aGlzLmFkbGVyID0gMDsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBaU3RyZWFtOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL2RlZmxhdGUuanMKICB2YXIgcmVxdWlyZV9kZWZsYXRlMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvZGVmbGF0ZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB6bGliX2RlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUoKTsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIHN0cmluZ3MgPSByZXF1aXJlX3N0cmluZ3MoKTsKICAgICAgdmFyIG1zZyA9IHJlcXVpcmVfbWVzc2FnZXMoKTsKICAgICAgdmFyIFpTdHJlYW0gPSByZXF1aXJlX3pzdHJlYW0oKTsKICAgICAgdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgICAgdmFyIFpfTk9fRkxVU0ggPSAwOwogICAgICB2YXIgWl9GSU5JU0ggPSA0OwogICAgICB2YXIgWl9PSyA9IDA7CiAgICAgIHZhciBaX1NUUkVBTV9FTkQgPSAxOwogICAgICB2YXIgWl9TWU5DX0ZMVVNIMiA9IDI7CiAgICAgIHZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTsKICAgICAgdmFyIFpfREVGQVVMVF9TVFJBVEVHWSA9IDA7CiAgICAgIHZhciBaX0RFRkxBVEVEID0gODsKICAgICAgZnVuY3Rpb24gRGVmbGF0ZShvcHRpb25zKSB7CiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGUpKQogICAgICAgICAgcmV0dXJuIG5ldyBEZWZsYXRlKG9wdGlvbnMpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHV0aWxzLmFzc2lnbih7CiAgICAgICAgICBsZXZlbDogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAogICAgICAgICAgbWV0aG9kOiBaX0RFRkxBVEVELAogICAgICAgICAgY2h1bmtTaXplOiAxNjM4NCwKICAgICAgICAgIHdpbmRvd0JpdHM6IDE1LAogICAgICAgICAgbWVtTGV2ZWw6IDgsCiAgICAgICAgICBzdHJhdGVneTogWl9ERUZBVUxUX1NUUkFURUdZLAogICAgICAgICAgdG86ICIiCiAgICAgICAgfSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgdmFyIG9wdCA9IHRoaXMub3B0aW9uczsKICAgICAgICBpZiAob3B0LnJhdyAmJiBvcHQud2luZG93Qml0cyA+IDApIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSBpZiAob3B0Lmd6aXAgJiYgb3B0LndpbmRvd0JpdHMgPiAwICYmIG9wdC53aW5kb3dCaXRzIDwgMTYpIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzICs9IDE2OwogICAgICAgIH0KICAgICAgICB0aGlzLmVyciA9IDA7CiAgICAgICAgdGhpcy5tc2cgPSAiIjsKICAgICAgICB0aGlzLmVuZGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLnN0cm0gPSBuZXcgWlN0cmVhbSgpOwogICAgICAgIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgIHZhciBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSwgb3B0LmxldmVsLCBvcHQubWV0aG9kLCBvcHQud2luZG93Qml0cywgb3B0Lm1lbUxldmVsLCBvcHQuc3RyYXRlZ3kpOwogICAgICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQuaGVhZGVyKSB7CiAgICAgICAgICB6bGliX2RlZmxhdGUuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sIG9wdC5oZWFkZXIpOwogICAgICAgIH0KICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHsKICAgICAgICAgIHZhciBkaWN0OwogICAgICAgICAgaWYgKHR5cGVvZiBvcHQuZGljdGlvbmFyeSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGljdCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwob3B0LmRpY3Rpb25hcnkpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICAgIGRpY3QgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkaWN0ID0gb3B0LmRpY3Rpb25hcnk7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBkaWN0KTsKICAgICAgICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX2RpY3Rfc2V0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIG1vZGUpIHsKICAgICAgICB2YXIgc3RybSA9IHRoaXMuc3RybTsKICAgICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZTsKICAgICAgICB2YXIgc3RhdHVzLCBfbW9kZTsKICAgICAgICBpZiAodGhpcy5lbmRlZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBfbW9kZSA9IG1vZGUgPT09IH5+bW9kZSA/IG1vZGUgOiBtb2RlID09PSB0cnVlID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIOwogICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLnN0cmluZzJidWYoZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKGRhdGEpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBkYXRhOwogICAgICAgIH0KICAgICAgICBzdHJtLm5leHRfaW4gPSAwOwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpOwogICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gMDsKICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZShzdHJtLCBfbW9kZSk7CiAgICAgICAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7CiAgICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCB8fCBzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gWl9GSU5JU0ggfHwgX21vZGUgPT09IFpfU1lOQ19GTFVTSDIpKSB7CiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgdGhpcy5vbkRhdGEoc3RyaW5ncy5idWYyYmluc3RyaW5nKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLm9uRGF0YSh1dGlscy5zaHJpbmtCdWYoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChzdHJtLmF2YWlsX2luID4gMCB8fCBzdHJtLmF2YWlsX291dCA9PT0gMCkgJiYgc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQpOwogICAgICAgIGlmIChfbW9kZSA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk7CiAgICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBzdGF0dXMgPT09IFpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChfbW9kZSA9PT0gWl9TWU5DX0ZMVVNIMikgewogICAgICAgICAgdGhpcy5vbkVuZChaX09LKTsKICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gMDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfTsKICAgICAgRGVmbGF0ZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmspIHsKICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTsKICAgICAgfTsKICAgICAgRGVmbGF0ZS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbihzdGF0dXMpIHsKICAgICAgICBpZiAoc3RhdHVzID09PSBaX09LKSB7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oIiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLmVyciA9IHN0YXR1czsKICAgICAgICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgZGVmbGF0b3IgPSBuZXcgRGVmbGF0ZShvcHRpb25zKTsKICAgICAgICBkZWZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTsKICAgICAgICBpZiAoZGVmbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBkZWZsYXRvci5tc2cgfHwgbXNnW2RlZmxhdG9yLmVycl07CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWZsYXRvci5yZXN1bHQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVJhdyhpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZ3ppcChpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMuZ3ppcCA9IHRydWU7CiAgICAgICAgcmV0dXJuIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLkRlZmxhdGUgPSBEZWZsYXRlOwogICAgICBleHBvcnRzMi5kZWZsYXRlID0gZGVmbGF0ZTsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVJhdyA9IGRlZmxhdGVSYXc7CiAgICAgIGV4cG9ydHMyLmd6aXAgPSBnemlwOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mZmFzdC5qcwogIHZhciByZXF1aXJlX2luZmZhc3QgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mZmFzdC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBCQUQgPSAzMDsKICAgICAgdmFyIFRZUEUgPSAxMjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBfaW47CiAgICAgICAgdmFyIGxhc3Q7CiAgICAgICAgdmFyIF9vdXQ7CiAgICAgICAgdmFyIGJlZzsKICAgICAgICB2YXIgZW5kOwogICAgICAgIHZhciBkbWF4OwogICAgICAgIHZhciB3c2l6ZTsKICAgICAgICB2YXIgd2hhdmU7CiAgICAgICAgdmFyIHduZXh0OwogICAgICAgIHZhciBzX3dpbmRvdzsKICAgICAgICB2YXIgaG9sZDsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgbGNvZGU7CiAgICAgICAgdmFyIGRjb2RlOwogICAgICAgIHZhciBsbWFzazsKICAgICAgICB2YXIgZG1hc2s7CiAgICAgICAgdmFyIGhlcmU7CiAgICAgICAgdmFyIG9wOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIGRpc3Q7CiAgICAgICAgdmFyIGZyb207CiAgICAgICAgdmFyIGZyb21fc291cmNlOwogICAgICAgIHZhciBpbnB1dCwgb3V0cHV0OwogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBfaW4gPSBzdHJtLm5leHRfaW47CiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0OwogICAgICAgIGxhc3QgPSBfaW4gKyAoc3RybS5hdmFpbF9pbiAtIDUpOwogICAgICAgIF9vdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgIGJlZyA9IF9vdXQgLSAoc3RhcnQgLSBzdHJtLmF2YWlsX291dCk7CiAgICAgICAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7CiAgICAgICAgZG1heCA9IHN0YXRlLmRtYXg7CiAgICAgICAgd3NpemUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICB3aGF2ZSA9IHN0YXRlLndoYXZlOwogICAgICAgIHduZXh0ID0gc3RhdGUud25leHQ7CiAgICAgICAgc193aW5kb3cgPSBzdGF0ZS53aW5kb3c7CiAgICAgICAgaG9sZCA9IHN0YXRlLmhvbGQ7CiAgICAgICAgYml0cyA9IHN0YXRlLmJpdHM7CiAgICAgICAgbGNvZGUgPSBzdGF0ZS5sZW5jb2RlOwogICAgICAgIGRjb2RlID0gc3RhdGUuZGlzdGNvZGU7CiAgICAgICAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7CiAgICAgICAgZG1hc2sgPSAoMSA8PCBzdGF0ZS5kaXN0Yml0cykgLSAxOwogICAgICAgIHRvcDoKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGJpdHMgPCAxNSkgewogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdOwogICAgICAgICAgICBkb2xlbjoKICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgJiAxNikgewogICAgICAgICAgICAgICAgICBsZW4gPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgIG9wICY9IDE1OwogICAgICAgICAgICAgICAgICBpZiAob3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsZW4gKz0gaG9sZCAmICgxIDw8IG9wKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCAxNSkgewogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdOwogICAgICAgICAgICAgICAgICBkb2Rpc3Q6CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgJiAxNikgewogICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgICAgICBvcCAmPSAxNTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgKz0gaG9sZCAmICgxIDw8IG9wKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gX291dCAtIGJlZzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gZGlzdCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA+IHdoYXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBzX3dpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod25leHQgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSArIHduZXh0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCAtPSB3bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSB3bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHduZXh0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBkY29kZVsoaGVyZSAmIDY1NTM1KSArIChob2xkICYgKDEgPDwgb3ApIC0gMSldOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBkb2Rpc3Q7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBoZXJlID0gbGNvZGVbKGhlcmUgJiA2NTUzNSkgKyAoaG9sZCAmICgxIDw8IG9wKSAtIDEpXTsKICAgICAgICAgICAgICAgICAgY29udGludWUgZG9sZW47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wICYgMzIpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0gd2hpbGUgKF9pbiA8IGxhc3QgJiYgX291dCA8IGVuZCk7CiAgICAgICAgbGVuID0gYml0cyA+PiAzOwogICAgICAgIF9pbiAtPSBsZW47CiAgICAgICAgYml0cyAtPSBsZW4gPDwgMzsKICAgICAgICBob2xkICY9ICgxIDw8IGJpdHMpIC0gMTsKICAgICAgICBzdHJtLm5leHRfaW4gPSBfaW47CiAgICAgICAgc3RybS5uZXh0X291dCA9IF9vdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IF9pbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBfaW4pIDogNSAtIChfaW4gLSBsYXN0KTsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IF9vdXQgPCBlbmQgPyAyNTcgKyAoZW5kIC0gX291dCkgOiAyNTcgLSAoX291dCAtIGVuZCk7CiAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgcmV0dXJuOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mdHJlZXMuanMKICB2YXIgcmVxdWlyZV9pbmZ0cmVlcyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZ0cmVlcy5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBNQVhCSVRTID0gMTU7CiAgICAgIHZhciBFTk9VR0hfTEVOUyA9IDg1MjsKICAgICAgdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKICAgICAgdmFyIENPREVTID0gMDsKICAgICAgdmFyIExFTlMgPSAxOwogICAgICB2YXIgRElTVFMgPSAyOwogICAgICB2YXIgbGJhc2UgPSBbCiAgICAgICAgMywKICAgICAgICA0LAogICAgICAgIDUsCiAgICAgICAgNiwKICAgICAgICA3LAogICAgICAgIDgsCiAgICAgICAgOSwKICAgICAgICAxMCwKICAgICAgICAxMSwKICAgICAgICAxMywKICAgICAgICAxNSwKICAgICAgICAxNywKICAgICAgICAxOSwKICAgICAgICAyMywKICAgICAgICAyNywKICAgICAgICAzMSwKICAgICAgICAzNSwKICAgICAgICA0MywKICAgICAgICA1MSwKICAgICAgICA1OSwKICAgICAgICA2NywKICAgICAgICA4MywKICAgICAgICA5OSwKICAgICAgICAxMTUsCiAgICAgICAgMTMxLAogICAgICAgIDE2MywKICAgICAgICAxOTUsCiAgICAgICAgMjI3LAogICAgICAgIDI1OCwKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGxleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMTYsCiAgICAgICAgNzIsCiAgICAgICAgNzgKICAgICAgXTsKICAgICAgdmFyIGRiYXNlID0gWwogICAgICAgIDEsCiAgICAgICAgMiwKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA3LAogICAgICAgIDksCiAgICAgICAgMTMsCiAgICAgICAgMTcsCiAgICAgICAgMjUsCiAgICAgICAgMzMsCiAgICAgICAgNDksCiAgICAgICAgNjUsCiAgICAgICAgOTcsCiAgICAgICAgMTI5LAogICAgICAgIDE5MywKICAgICAgICAyNTcsCiAgICAgICAgMzg1LAogICAgICAgIDUxMywKICAgICAgICA3NjksCiAgICAgICAgMTAyNSwKICAgICAgICAxNTM3LAogICAgICAgIDIwNDksCiAgICAgICAgMzA3MywKICAgICAgICA0MDk3LAogICAgICAgIDYxNDUsCiAgICAgICAgODE5MywKICAgICAgICAxMjI4OSwKICAgICAgICAxNjM4NSwKICAgICAgICAyNDU3NywKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGRleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjIsCiAgICAgICAgMjIsCiAgICAgICAgMjMsCiAgICAgICAgMjMsCiAgICAgICAgMjQsCiAgICAgICAgMjQsCiAgICAgICAgMjUsCiAgICAgICAgMjUsCiAgICAgICAgMjYsCiAgICAgICAgMjYsCiAgICAgICAgMjcsCiAgICAgICAgMjcsCiAgICAgICAgMjgsCiAgICAgICAgMjgsCiAgICAgICAgMjksCiAgICAgICAgMjksCiAgICAgICAgNjQsCiAgICAgICAgNjQKICAgICAgXTsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV90YWJsZSh0eXBlLCBsZW5zLCBsZW5zX2luZGV4LCBjb2RlcywgdGFibGUsIHRhYmxlX2luZGV4LCB3b3JrLCBvcHRzKSB7CiAgICAgICAgdmFyIGJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgdmFyIGxlbiA9IDA7CiAgICAgICAgdmFyIHN5bSA9IDA7CiAgICAgICAgdmFyIG1pbiA9IDAsIG1heCA9IDA7CiAgICAgICAgdmFyIHJvb3QyID0gMDsKICAgICAgICB2YXIgY3VyciA9IDA7CiAgICAgICAgdmFyIGRyb3AgPSAwOwogICAgICAgIHZhciBsZWZ0ID0gMDsKICAgICAgICB2YXIgdXNlZCA9IDA7CiAgICAgICAgdmFyIGh1ZmYgPSAwOwogICAgICAgIHZhciBpbmNyOwogICAgICAgIHZhciBmaWxsOwogICAgICAgIHZhciBsb3c7CiAgICAgICAgdmFyIG1hc2s7CiAgICAgICAgdmFyIG5leHQ7CiAgICAgICAgdmFyIGJhc2UgPSBudWxsOwogICAgICAgIHZhciBiYXNlX2luZGV4ID0gMDsKICAgICAgICB2YXIgZW5kOwogICAgICAgIHZhciBjb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7CiAgICAgICAgdmFyIG9mZnMgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOwogICAgICAgIHZhciBleHRyYSA9IG51bGw7CiAgICAgICAgdmFyIGV4dHJhX2luZGV4ID0gMDsKICAgICAgICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsKICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykgewogICAgICAgICAgY291bnRbbGVuXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICAgICAgICBjb3VudFtsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrOwogICAgICAgIH0KICAgICAgICByb290MiA9IGJpdHM7CiAgICAgICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHsKICAgICAgICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocm9vdDIgPiBtYXgpIHsKICAgICAgICAgIHJvb3QyID0gbWF4OwogICAgICAgIH0KICAgICAgICBpZiAobWF4ID09PSAwKSB7CiAgICAgICAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9IDEgPDwgMjQgfCA2NCA8PCAxNiB8IDA7CiAgICAgICAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9IDEgPDwgMjQgfCA2NCA8PCAxNiB8IDA7CiAgICAgICAgICBvcHRzLmJpdHMgPSAxOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGZvciAobWluID0gMTsgbWluIDwgbWF4OyBtaW4rKykgewogICAgICAgICAgaWYgKGNvdW50W21pbl0gIT09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChyb290MiA8IG1pbikgewogICAgICAgICAgcm9vdDIgPSBtaW47CiAgICAgICAgfQogICAgICAgIGxlZnQgPSAxOwogICAgICAgIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CiAgICAgICAgICBsZWZ0IDw8PSAxOwogICAgICAgICAgbGVmdCAtPSBjb3VudFtsZW5dOwogICAgICAgICAgaWYgKGxlZnQgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09PSBDT0RFUyB8fCBtYXggIT09IDEpKSB7CiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIG9mZnNbMV0gPSAwOwogICAgICAgIGZvciAobGVuID0gMTsgbGVuIDwgTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFtsZW5dOwogICAgICAgIH0KICAgICAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykgewogICAgICAgICAgaWYgKGxlbnNbbGVuc19pbmRleCArIHN5bV0gIT09IDApIHsKICAgICAgICAgICAgd29ya1tvZmZzW2xlbnNbbGVuc19pbmRleCArIHN5bV1dKytdID0gc3ltOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZSA9PT0gQ09ERVMpIHsKICAgICAgICAgIGJhc2UgPSBleHRyYSA9IHdvcms7CiAgICAgICAgICBlbmQgPSAxOTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IExFTlMpIHsKICAgICAgICAgIGJhc2UgPSBsYmFzZTsKICAgICAgICAgIGJhc2VfaW5kZXggLT0gMjU3OwogICAgICAgICAgZXh0cmEgPSBsZXh0OwogICAgICAgICAgZXh0cmFfaW5kZXggLT0gMjU3OwogICAgICAgICAgZW5kID0gMjU2OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBiYXNlID0gZGJhc2U7CiAgICAgICAgICBleHRyYSA9IGRleHQ7CiAgICAgICAgICBlbmQgPSAtMTsKICAgICAgICB9CiAgICAgICAgaHVmZiA9IDA7CiAgICAgICAgc3ltID0gMDsKICAgICAgICBsZW4gPSBtaW47CiAgICAgICAgbmV4dCA9IHRhYmxlX2luZGV4OwogICAgICAgIGN1cnIgPSByb290MjsKICAgICAgICBkcm9wID0gMDsKICAgICAgICBsb3cgPSAtMTsKICAgICAgICB1c2VkID0gMSA8PCByb290MjsKICAgICAgICBtYXNrID0gdXNlZCAtIDE7CiAgICAgICAgaWYgKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TIHx8IHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpIHsKICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7CiAgICAgICAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAwOwogICAgICAgICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTsKICAgICAgICAgIH0gZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCArIHdvcmtbc3ltXV07CiAgICAgICAgICAgIGhlcmVfdmFsID0gYmFzZVtiYXNlX2luZGV4ICsgd29ya1tzeW1dXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAzMiArIDY0OwogICAgICAgICAgICBoZXJlX3ZhbCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSBkcm9wOwogICAgICAgICAgZmlsbCA9IDEgPDwgY3VycjsKICAgICAgICAgIG1pbiA9IGZpbGw7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGZpbGwgLT0gaW5jcjsKICAgICAgICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlX2JpdHMgPDwgMjQgfCBoZXJlX29wIDw8IDE2IHwgaGVyZV92YWwgfCAwOwogICAgICAgICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSAxOwogICAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7CiAgICAgICAgICAgIGluY3IgPj49IDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5jciAhPT0gMCkgewogICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwogICAgICAgICAgICBodWZmICs9IGluY3I7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBodWZmID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHN5bSsrOwogICAgICAgICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkgewogICAgICAgICAgICBpZiAobGVuID09PSBtYXgpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZW4gPSBsZW5zW2xlbnNfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxlbiA+IHJvb3QyICYmIChodWZmICYgbWFzaykgIT09IGxvdykgewogICAgICAgICAgICBpZiAoZHJvcCA9PT0gMCkgewogICAgICAgICAgICAgIGRyb3AgPSByb290MjsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0ICs9IG1pbjsKICAgICAgICAgICAgY3VyciA9IGxlbiAtIGRyb3A7CiAgICAgICAgICAgIGxlZnQgPSAxIDw8IGN1cnI7CiAgICAgICAgICAgIHdoaWxlIChjdXJyICsgZHJvcCA8IG1heCkgewogICAgICAgICAgICAgIGxlZnQgLT0gY291bnRbY3VyciArIGRyb3BdOwogICAgICAgICAgICAgIGlmIChsZWZ0IDw9IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjdXJyKys7CiAgICAgICAgICAgICAgbGVmdCA8PD0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1c2VkICs9IDEgPDwgY3VycjsKICAgICAgICAgICAgaWYgKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TIHx8IHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpIHsKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsb3cgPSBodWZmICYgbWFzazsKICAgICAgICAgICAgdGFibGVbbG93XSA9IHJvb3QyIDw8IDI0IHwgY3VyciA8PCAxNiB8IG5leHQgLSB0YWJsZV9pbmRleCB8IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChodWZmICE9PSAwKSB7CiAgICAgICAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSBsZW4gLSBkcm9wIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgIH0KICAgICAgICBvcHRzLmJpdHMgPSByb290MjsKICAgICAgICByZXR1cm4gMDsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmxhdGUuanMKICB2YXIgcmVxdWlyZV9pbmZsYXRlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmxhdGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgYWRsZXIzMiA9IHJlcXVpcmVfYWRsZXIzMigpOwogICAgICB2YXIgY3JjMzIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBpbmZsYXRlX2Zhc3QgPSByZXF1aXJlX2luZmZhc3QoKTsKICAgICAgdmFyIGluZmxhdGVfdGFibGUgPSByZXF1aXJlX2luZnRyZWVzKCk7CiAgICAgIHZhciBDT0RFUyA9IDA7CiAgICAgIHZhciBMRU5TID0gMTsKICAgICAgdmFyIERJU1RTID0gMjsKICAgICAgdmFyIFpfRklOSVNIID0gNDsKICAgICAgdmFyIFpfQkxPQ0sgPSA1OwogICAgICB2YXIgWl9UUkVFUyA9IDY7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX05FRURfRElDVCA9IDI7CiAgICAgIHZhciBaX1NUUkVBTV9FUlJPUiA9IC0yOwogICAgICB2YXIgWl9EQVRBX0VSUk9SID0gLTM7CiAgICAgIHZhciBaX01FTV9FUlJPUiA9IC00OwogICAgICB2YXIgWl9CVUZfRVJST1IgPSAtNTsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICB2YXIgSEVBRCA9IDE7CiAgICAgIHZhciBGTEFHUyA9IDI7CiAgICAgIHZhciBUSU1FID0gMzsKICAgICAgdmFyIE9TID0gNDsKICAgICAgdmFyIEVYTEVOID0gNTsKICAgICAgdmFyIEVYVFJBID0gNjsKICAgICAgdmFyIE5BTUUgPSA3OwogICAgICB2YXIgQ09NTUVOVCA9IDg7CiAgICAgIHZhciBIQ1JDID0gOTsKICAgICAgdmFyIERJQ1RJRCA9IDEwOwogICAgICB2YXIgRElDVCA9IDExOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICB2YXIgVFlQRURPID0gMTM7CiAgICAgIHZhciBTVE9SRUQgPSAxNDsKICAgICAgdmFyIENPUFlfID0gMTU7CiAgICAgIHZhciBDT1BZID0gMTY7CiAgICAgIHZhciBUQUJMRSA9IDE3OwogICAgICB2YXIgTEVOTEVOUyA9IDE4OwogICAgICB2YXIgQ09ERUxFTlMgPSAxOTsKICAgICAgdmFyIExFTl8gPSAyMDsKICAgICAgdmFyIExFTiA9IDIxOwogICAgICB2YXIgTEVORVhUID0gMjI7CiAgICAgIHZhciBESVNUID0gMjM7CiAgICAgIHZhciBESVNURVhUID0gMjQ7CiAgICAgIHZhciBNQVRDSCA9IDI1OwogICAgICB2YXIgTElUID0gMjY7CiAgICAgIHZhciBDSEVDSyA9IDI3OwogICAgICB2YXIgTEVOR1RIID0gMjg7CiAgICAgIHZhciBET05FID0gMjk7CiAgICAgIHZhciBCQUQgPSAzMDsKICAgICAgdmFyIE1FTSA9IDMxOwogICAgICB2YXIgU1lOQyA9IDMyOwogICAgICB2YXIgRU5PVUdIX0xFTlMgPSA4NTI7CiAgICAgIHZhciBFTk9VR0hfRElTVFMgPSA1OTI7CiAgICAgIHZhciBNQVhfV0JJVFMgPSAxNTsKICAgICAgdmFyIERFRl9XQklUUyA9IE1BWF9XQklUUzsKICAgICAgZnVuY3Rpb24genN3YXAzMihxKSB7CiAgICAgICAgcmV0dXJuIChxID4+PiAyNCAmIDI1NSkgKyAocSA+Pj4gOCAmIDY1MjgwKSArICgocSAmIDY1MjgwKSA8PCA4KSArICgocSAmIDI1NSkgPDwgMjQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHsKICAgICAgICB0aGlzLm1vZGUgPSAwOwogICAgICAgIHRoaXMubGFzdCA9IGZhbHNlOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5oYXZlZGljdCA9IGZhbHNlOwogICAgICAgIHRoaXMuZmxhZ3MgPSAwOwogICAgICAgIHRoaXMuZG1heCA9IDA7CiAgICAgICAgdGhpcy5jaGVjayA9IDA7CiAgICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICAgICAgdGhpcy5oZWFkID0gbnVsbDsKICAgICAgICB0aGlzLndiaXRzID0gMDsKICAgICAgICB0aGlzLndzaXplID0gMDsKICAgICAgICB0aGlzLndoYXZlID0gMDsKICAgICAgICB0aGlzLnduZXh0ID0gMDsKICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICAgICAgdGhpcy5ob2xkID0gMDsKICAgICAgICB0aGlzLmJpdHMgPSAwOwogICAgICAgIHRoaXMubGVuZ3RoID0gMDsKICAgICAgICB0aGlzLm9mZnNldCA9IDA7CiAgICAgICAgdGhpcy5leHRyYSA9IDA7CiAgICAgICAgdGhpcy5sZW5jb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3Rjb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmxlbmJpdHMgPSAwOwogICAgICAgIHRoaXMuZGlzdGJpdHMgPSAwOwogICAgICAgIHRoaXMubmNvZGUgPSAwOwogICAgICAgIHRoaXMubmxlbiA9IDA7CiAgICAgICAgdGhpcy5uZGlzdCA9IDA7CiAgICAgICAgdGhpcy5oYXZlID0gMDsKICAgICAgICB0aGlzLm5leHQgPSBudWxsOwogICAgICAgIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOwogICAgICAgIHRoaXMud29yayA9IG5ldyB1dGlscy5CdWYxNigyODgpOwogICAgICAgIHRoaXMubGVuZHluID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3RkeW4gPSBudWxsOwogICAgICAgIHRoaXMuc2FuZSA9IDA7CiAgICAgICAgdGhpcy5iYWNrID0gMDsKICAgICAgICB0aGlzLndhcyA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gc3RhdGUudG90YWwgPSAwOwogICAgICAgIHN0cm0ubXNnID0gIiI7CiAgICAgICAgaWYgKHN0YXRlLndyYXApIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS53cmFwICYgMTsKICAgICAgICB9CiAgICAgICAgc3RhdGUubW9kZSA9IEhFQUQ7CiAgICAgICAgc3RhdGUubGFzdCA9IDA7CiAgICAgICAgc3RhdGUuaGF2ZWRpY3QgPSAwOwogICAgICAgIHN0YXRlLmRtYXggPSAzMjc2ODsKICAgICAgICBzdGF0ZS5oZWFkID0gbnVsbDsKICAgICAgICBzdGF0ZS5ob2xkID0gMDsKICAgICAgICBzdGF0ZS5iaXRzID0gMDsKICAgICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTsKICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0RJU1RTKTsKICAgICAgICBzdGF0ZS5zYW5lID0gMTsKICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBzdGF0ZS53c2l6ZSA9IDA7CiAgICAgICAgc3RhdGUud2hhdmUgPSAwOwogICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHsKICAgICAgICB2YXIgd3JhcDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgICAgICAgIHdyYXAgPSAwOwogICAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOwogICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkgewogICAgICAgICAgICB3aW5kb3dCaXRzICY9IDE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7CiAgICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdGF0ZS53cmFwID0gd3JhcDsKICAgICAgICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7CiAgICAgICAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgewogICAgICAgIHZhciByZXQ7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IG5ldyBJbmZsYXRlU3RhdGUoKTsKICAgICAgICBzdHJtLnN0YXRlID0gc3RhdGU7CiAgICAgICAgc3RhdGUud2luZG93ID0gbnVsbDsKICAgICAgICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOwogICAgICAgIGlmIChyZXQgIT09IFpfT0spIHsKICAgICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHsKICAgICAgICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7CiAgICAgIH0KICAgICAgdmFyIHZpcmdpbiA9IHRydWU7CiAgICAgIHZhciBsZW5maXg7CiAgICAgIHZhciBkaXN0Zml4OwogICAgICBmdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkgewogICAgICAgIGlmICh2aXJnaW4pIHsKICAgICAgICAgIHZhciBzeW07CiAgICAgICAgICBsZW5maXggPSBuZXcgdXRpbHMuQnVmMzIoNTEyKTsKICAgICAgICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAxNDQpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN5bSA8IDI1NikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gNzsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzeW0gPCAyODgpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA5IH0pOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAzMikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDU7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgZGlzdGZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA1IH0pOwogICAgICAgICAgdmlyZ2luID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7CiAgICAgICAgc3RhdGUubGVuYml0cyA9IDk7CiAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBkaXN0Zml4OwogICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53aW5kb3cgPT09IG51bGwpIHsKICAgICAgICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0czsKICAgICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICAgIHN0YXRlLndoYXZlID0gMDsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHN0YXRlLndzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHsKICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBzdGF0ZS53c2l6ZSwgc3RhdGUud3NpemUsIDApOwogICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7CiAgICAgICAgICBpZiAoZGlzdCA+IGNvcHkpIHsKICAgICAgICAgICAgZGlzdCA9IGNvcHk7CiAgICAgICAgICB9CiAgICAgICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgZGlzdCwgc3RhdGUud25leHQpOwogICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICAgaWYgKGNvcHkpIHsKICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIGNvcHksIGNvcHksIDApOwogICAgICAgICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7CiAgICAgICAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS53bmV4dCArPSBkaXN0OwogICAgICAgICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGF0ZS53aGF2ZSA8IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud2hhdmUgKz0gZGlzdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBpbnB1dCwgb3V0cHV0OwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBwdXQ7CiAgICAgICAgdmFyIGhhdmUsIGxlZnQ7CiAgICAgICAgdmFyIGhvbGQ7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIF9pbiwgX291dDsKICAgICAgICB2YXIgY29weTsKICAgICAgICB2YXIgZnJvbTsKICAgICAgICB2YXIgZnJvbV9zb3VyY2U7CiAgICAgICAgdmFyIGhlcmUgPSAwOwogICAgICAgIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOwogICAgICAgIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgaGJ1ZiA9IG5ldyB1dGlscy5CdWY4KDQpOwogICAgICAgIHZhciBvcHRzOwogICAgICAgIHZhciBuOwogICAgICAgIHZhciBvcmRlciA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgIXN0cm0ub3V0cHV0IHx8ICFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPOwogICAgICAgIH0KICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgIGxlZnQgPSBzdHJtLmF2YWlsX291dDsKICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBoYXZlID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICBfaW4gPSBoYXZlOwogICAgICAgIF9vdXQgPSBsZWZ0OwogICAgICAgIHJldCA9IFpfT0s7CiAgICAgICAgaW5mX2xlYXZlOgogICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUubW9kZSkgewogICAgICAgICAgICAgIGNhc2UgSEVBRDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud3JhcCAmIDIgJiYgaG9sZCA9PT0gMzU2MTUpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSAwOwogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBGTEFHUzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncyA9IDA7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghKHN0YXRlLndyYXAgJiAxKSB8fCAoKChob2xkICYgMjU1KSA8PCA4KSArIChob2xkID4+IDgpKSAlIDMxKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImluY29ycmVjdCBoZWFkZXIgY2hlY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgoaG9sZCAmIDE1KSAhPT0gWl9ERUZMQVRFRCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgICAgICAgICAgICBiaXRzIC09IDQ7CiAgICAgICAgICAgICAgICBsZW4gPSAoaG9sZCAmIDE1KSArIDg7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud2JpdHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RhdGUud2JpdHMgPSBsZW47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA+IHN0YXRlLndiaXRzKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgd2luZG93IHNpemUiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmRtYXggPSAxIDw8IGxlbjsKICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDE7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gaG9sZCAmIDUxMiA/IERJQ1RJRCA6IFRZUEU7CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBGTEFHUzoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MgPSBob2xkOwogICAgICAgICAgICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDI1NSkgIT09IFpfREVGTEFURUQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDU3MzQ0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInVua25vd24gaGVhZGVyIGZsYWdzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC50ZXh0ID0gaG9sZCA+PiA4ICYgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUSU1FOwogICAgICAgICAgICAgIGNhc2UgVElNRToKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC50aW1lID0gaG9sZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhidWZbMl0gPSBob2xkID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlszXSA9IGhvbGQgPj4+IDI0ICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCA0LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gT1M7CiAgICAgICAgICAgICAgY2FzZSBPUzoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm9zID0gaG9sZCA+PiA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEVYTEVOOwogICAgICAgICAgICAgIGNhc2UgRVhMRU46CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAxMDI0KSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9sZW4gPSBob2xkOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhidWZbMV0gPSBob2xkID4+PiA4ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBFWFRSQTsKICAgICAgICAgICAgICBjYXNlIEVYVFJBOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMTAyNCkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5oZWFkLmV4dHJhX2xlbiAtIHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaGVhZC5leHRyYSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbmV3IEFycmF5KHN0YXRlLmhlYWQuZXh0cmFfbGVuKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLmhlYWQuZXh0cmEsIGlucHV0LCBuZXh0LCBjb3B5LCBsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE5BTUU7CiAgICAgICAgICAgICAgY2FzZSBOQU1FOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMjA0OCkgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJiBzdGF0ZS5sZW5ndGggPCA2NTUzNikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgY2FzZSBDT01NRU5UOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNDA5NikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJiBzdGF0ZS5sZW5ndGggPCA2NTUzNikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gSENSQzsKICAgICAgICAgICAgICBjYXNlIEhDUkM6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS5jaGVjayAmIDY1NTM1KSkgewogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImhlYWRlciBjcmMgbWlzbWF0Y2giOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5oY3JjID0gc3RhdGUuZmxhZ3MgPj4gOSAmIDE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0genN3YXAzMihob2xkKTsKICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRElDVDsKICAgICAgICAgICAgICBjYXNlIERJQ1Q6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZWRpY3QgPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgICAgICAgICAgICByZXR1cm4gWl9ORUVEX0RJQ1Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgY2FzZSBUWVBFOgogICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX0JMT0NLIHx8IGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIFRZUEVETzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sYXN0KSB7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNzsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBiaXRzICYgNzsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENIRUNLOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMykgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sYXN0ID0gaG9sZCAmIDE7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gMTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gMTsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9sZCAmIDMpIHsKICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBTVE9SRUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBmaXhlZHRhYmxlcyhzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTl87CiAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVEFCTEU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGJsb2NrIHR5cGUiOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgU1RPUkVEOgogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgYml0cyAtPSBiaXRzICYgNzsKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKChob2xkICYgNjU1MzUpICE9PSAoaG9sZCA+Pj4gMTYgXiA2NTUzNSkpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZCAmIDY1NTM1OwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT1BZXzsKICAgICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSBDT1BZXzoKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT1BZOwogICAgICAgICAgICAgIGNhc2UgQ09QWToKICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB1dGlscy5hcnJheVNldChvdXRwdXQsIGlucHV0LCBuZXh0LCBjb3B5LCBwdXQpOwogICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5OwogICAgICAgICAgICAgICAgICBwdXQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIFRBQkxFOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNCkgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5ubGVuID0gKGhvbGQgJiAzMSkgKyAyNTc7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNTsKICAgICAgICAgICAgICAgIHN0YXRlLm5kaXN0ID0gKGhvbGQgJiAzMSkgKyAxOwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDU7CiAgICAgICAgICAgICAgICBiaXRzIC09IDU7CiAgICAgICAgICAgICAgICBzdGF0ZS5uY29kZSA9IChob2xkICYgMTUpICsgNDsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA0OwogICAgICAgICAgICAgICAgYml0cyAtPSA0OwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm5sZW4gPiAyODYgfHwgc3RhdGUubmRpc3QgPiAzMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuaGF2ZSA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUzsKICAgICAgICAgICAgICBjYXNlIExFTkxFTlM6CiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMykgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IGhvbGQgJiA3OwogICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgICAgICAgYml0cyAtPSAzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCAxOSkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5sZW5keW47CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5iaXRzID0gNzsKICAgICAgICAgICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLmxlbnMsIDAsIDE5LCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgY29kZSBsZW5ndGhzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuaGF2ZSA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7CiAgICAgICAgICAgICAgY2FzZSBDT0RFTEVOUzoKICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2hvbGQgJiAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDFdOwogICAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChoZXJlX3ZhbCA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZV92YWwgPT09IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMjsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUgLSAxXTsKICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgKGhvbGQgJiAzKTsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMzsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDcpOwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IDM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IDM7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyA3OwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMTEgKyAoaG9sZCAmIDEyNyk7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gNzsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gNzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhhdmUgKyBjb3B5ID4gc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvcHktLSkgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdID0gbGVuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IEJBRCkgewogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sZW5zWzI1Nl0gPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5iaXRzID0gOTsKICAgICAgICAgICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUubGVucywgMCwgc3RhdGUubmxlbiwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzOwogICAgICAgICAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNjsKICAgICAgICAgICAgICAgIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5bjsKICAgICAgICAgICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmRpc3RiaXRzIH07CiAgICAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCBzdGF0ZS5ubGVuLCBzdGF0ZS5uZGlzdCwgc3RhdGUuZGlzdGNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2VzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTl87CiAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgTEVOXzoKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgICAgICAgICAgY2FzZSBMRU46CiAgICAgICAgICAgICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7CiAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9pbiA9IGhhdmU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhvbGQgPSBob2xkOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICAgICAgICAgICAgaW5mbGF0ZV9mYXN0KHN0cm0sIF9vdXQpOwogICAgICAgICAgICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdHJtLm91dHB1dDsKICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgICAgICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgICAgICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgICAgICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogICAgICAgICAgICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRlLmJpdHM7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFjayA9IC0xOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuYmFjayA9IDA7CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICBoZXJlX29wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmJiAoaGVyZV9vcCAmIDI0MCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgbGFzdF9iaXRzID0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICBsYXN0X29wID0gaGVyZV9vcDsKICAgICAgICAgICAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbbGFzdF92YWwgKyAoKGhvbGQgJiAoMSA8PCBsYXN0X2JpdHMgKyBsYXN0X29wKSAtIDEpID4+IGxhc3RfYml0cyldOwogICAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF9iaXRzICsgaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTElUOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYgMzIpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuYmFjayA9IC0xOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZXh0cmEgPSBoZXJlX29wICYgMTU7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVORVhUOwogICAgICAgICAgICAgIGNhc2UgTEVORVhUOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgIG4gPSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggKz0gaG9sZCAmICgxIDw8IHN0YXRlLmV4dHJhKSAtIDE7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESVNUOwogICAgICAgICAgICAgIGNhc2UgRElTVDoKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDFdOwogICAgICAgICAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDsKICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgaWYgKGhlcmVfYml0cyA8PSBiaXRzKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKChoZXJlX29wICYgMjQwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgICAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbbGFzdF92YWwgKyAoKGhvbGQgJiAoMSA8PCBsYXN0X2JpdHMgKyBsYXN0X29wKSAtIDEpID4+IGxhc3RfYml0cyldOwogICAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF9iaXRzICsgaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgaWYgKGhlcmVfb3AgJiA2NCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm9mZnNldCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgc3RhdGUuZXh0cmEgPSBoZXJlX29wICYgMTU7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRElTVEVYVDsKICAgICAgICAgICAgICBjYXNlIERJU1RFWFQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLm9mZnNldCArPSBob2xkICYgKDEgPDwgc3RhdGUuZXh0cmEpIC0gMTsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBNQVRDSDsKICAgICAgICAgICAgICBjYXNlIE1BVENIOgogICAgICAgICAgICAgICAgaWYgKGxlZnQgPT09IDApIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29weSA9IF9vdXQgLSBsZWZ0OwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IGNvcHkpIHsKICAgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLm9mZnNldCAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud2hhdmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkgewogICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLnduZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgY29weSAtPSBzdGF0ZS53bmV4dDsKICAgICAgICAgICAgICAgICAgICBmcm9tID0gc3RhdGUud3NpemUgLSBjb3B5OwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53bmV4dCAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gc3RhdGUud2luZG93OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgIGZyb20gPSBwdXQgLSBzdGF0ZS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsKICAgICAgICAgICAgICAgICAgY29weSA9IGxlZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWNvcHkpOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBMSVQ6CiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgbGVmdC0tOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgQ0hFQ0s6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud3JhcCkgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgfD0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfb3V0IC09IGxlZnQ7CiAgICAgICAgICAgICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLnRvdGFsICs9IF9vdXQ7CiAgICAgICAgICAgICAgICAgIGlmIChfb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgPyBob2xkIDogenN3YXAzMihob2xkKSkgIT09IHN0YXRlLmNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDsKICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiA0Mjk0OTY3Mjk1KSkgewogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImluY29ycmVjdCBsZW5ndGggY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERPTkU7CiAgICAgICAgICAgICAgY2FzZSBET05FOgogICAgICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgQkFEOgogICAgICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgTUVNOgogICAgICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgICAgIGNhc2UgU1lOQzoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICBpZiAoc3RhdGUud3NpemUgfHwgX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJiAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCkpIHsKICAgICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQsIF9vdXQgLSBzdHJtLmF2YWlsX291dCkpIHsKICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1FTTsKICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfaW4gLT0gc3RybS5hdmFpbF9pbjsKICAgICAgICBfb3V0IC09IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIHN0cm0udG90YWxfaW4gKz0gX2luOwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICBpZiAoc3RhdGUud3JhcCAmJiBfb3V0KSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpOwogICAgICAgIH0KICAgICAgICBzdHJtLmRhdGFfdHlwZSA9IHN0YXRlLmJpdHMgKyAoc3RhdGUubGFzdCA/IDY0IDogMCkgKyAoc3RhdGUubW9kZSA9PT0gVFlQRSA/IDEyOCA6IDApICsgKHN0YXRlLm1vZGUgPT09IExFTl8gfHwgc3RhdGUubW9kZSA9PT0gQ09QWV8gPyAyNTYgOiAwKTsKICAgICAgICBpZiAoKF9pbiA9PT0gMCAmJiBfb3V0ID09PSAwIHx8IGZsdXNoID09PSBaX0ZJTklTSCkgJiYgcmV0ID09PSBaX09LKSB7CiAgICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlRW5kKHN0cm0pIHsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgdmFyIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoc3RhdGUud2luZG93KSB7CiAgICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdHJtLnN0YXRlID0gbnVsbDsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0sIGhlYWQpIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoKHN0YXRlLndyYXAgJiAyKSA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5oZWFkID0gaGVhZDsKICAgICAgICBoZWFkLmRvbmUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5KSB7CiAgICAgICAgdmFyIGRpY3RMZW5ndGggPSBkaWN0aW9uYXJ5Lmxlbmd0aDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgdmFyIGRpY3RpZDsKICAgICAgICB2YXIgcmV0OwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLndyYXAgIT09IDAgJiYgc3RhdGUubW9kZSAhPT0gRElDVCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gRElDVCkgewogICAgICAgICAgZGljdGlkID0gMTsKICAgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTsKICAgICAgICAgIGlmIChkaWN0aWQgIT09IHN0YXRlLmNoZWNrKSB7CiAgICAgICAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCBkaWN0TGVuZ3RoKTsKICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gTUVNOwogICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5oYXZlZGljdCA9IDE7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZXhwb3J0czIuaW5mbGF0ZVJlc2V0ID0gaW5mbGF0ZVJlc2V0OwogICAgICBleHBvcnRzMi5pbmZsYXRlUmVzZXQyID0gaW5mbGF0ZVJlc2V0MjsKICAgICAgZXhwb3J0czIuaW5mbGF0ZVJlc2V0S2VlcCA9IGluZmxhdGVSZXNldEtlZXA7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVJbml0ID0gaW5mbGF0ZUluaXQ7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVJbml0MiA9IGluZmxhdGVJbml0MjsKICAgICAgZXhwb3J0czIuaW5mbGF0ZSA9IGluZmxhdGU7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVFbmQgPSBpbmZsYXRlRW5kOwogICAgICBleHBvcnRzMi5pbmZsYXRlR2V0SGVhZGVyID0gaW5mbGF0ZUdldEhlYWRlcjsKICAgICAgZXhwb3J0czIuaW5mbGF0ZVNldERpY3Rpb25hcnkgPSBpbmZsYXRlU2V0RGljdGlvbmFyeTsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUluZm8gPSAicGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMKICB2YXIgcmVxdWlyZV9jb25zdGFudHMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY29uc3RhbnRzLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gewogICAgICAgIFpfTk9fRkxVU0g6IDAsCiAgICAgICAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogICAgICAgIFpfU1lOQ19GTFVTSDogMiwKICAgICAgICBaX0ZVTExfRkxVU0g6IDMsCiAgICAgICAgWl9GSU5JU0g6IDQsCiAgICAgICAgWl9CTE9DSzogNSwKICAgICAgICBaX1RSRUVTOiA2LAogICAgICAgIFpfT0s6IDAsCiAgICAgICAgWl9TVFJFQU1fRU5EOiAxLAogICAgICAgIFpfTkVFRF9ESUNUOiAyLAogICAgICAgIFpfRVJSTk86IC0xLAogICAgICAgIFpfU1RSRUFNX0VSUk9SOiAtMiwKICAgICAgICBaX0RBVEFfRVJST1I6IC0zLAogICAgICAgIFpfQlVGX0VSUk9SOiAtNSwKICAgICAgICBaX05PX0NPTVBSRVNTSU9OOiAwLAogICAgICAgIFpfQkVTVF9TUEVFRDogMSwKICAgICAgICBaX0JFU1RfQ09NUFJFU1NJT046IDksCiAgICAgICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSwKICAgICAgICBaX0ZJTFRFUkVEOiAxLAogICAgICAgIFpfSFVGRk1BTl9PTkxZOiAyLAogICAgICAgIFpfUkxFOiAzLAogICAgICAgIFpfRklYRUQ6IDQsCiAgICAgICAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogICAgICAgIFpfQklOQVJZOiAwLAogICAgICAgIFpfVEVYVDogMSwKICAgICAgICBaX1VOS05PV046IDIsCiAgICAgICAgWl9ERUZMQVRFRDogOAogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvZ3poZWFkZXIuanMKICB2YXIgcmVxdWlyZV9nemhlYWRlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9nemhlYWRlci5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIEdaaGVhZGVyKCkgewogICAgICAgIHRoaXMudGV4dCA9IDA7CiAgICAgICAgdGhpcy50aW1lID0gMDsKICAgICAgICB0aGlzLnhmbGFncyA9IDA7CiAgICAgICAgdGhpcy5vcyA9IDA7CiAgICAgICAgdGhpcy5leHRyYSA9IG51bGw7CiAgICAgICAgdGhpcy5leHRyYV9sZW4gPSAwOwogICAgICAgIHRoaXMubmFtZSA9ICIiOwogICAgICAgIHRoaXMuY29tbWVudCA9ICIiOwogICAgICAgIHRoaXMuaGNyYyA9IDA7CiAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7CiAgICAgIH0KICAgICAgbW9kdWxlMi5leHBvcnRzID0gR1poZWFkZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9pbmZsYXRlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHpsaWJfaW5mbGF0ZSA9IHJlcXVpcmVfaW5mbGF0ZSgpOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgc3RyaW5ncyA9IHJlcXVpcmVfc3RyaW5ncygpOwogICAgICB2YXIgYyA9IHJlcXVpcmVfY29uc3RhbnRzKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzKCk7CiAgICAgIHZhciBaU3RyZWFtID0gcmVxdWlyZV96c3RyZWFtKCk7CiAgICAgIHZhciBHWmhlYWRlciA9IHJlcXVpcmVfZ3poZWFkZXIoKTsKICAgICAgdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgICAgZnVuY3Rpb24gSW5mbGF0ZTIob3B0aW9ucykgewogICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmZsYXRlMikpCiAgICAgICAgICByZXR1cm4gbmV3IEluZmxhdGUyKG9wdGlvbnMpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHV0aWxzLmFzc2lnbih7CiAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgICAgICAgd2luZG93Qml0czogMCwKICAgICAgICAgIHRvOiAiIgogICAgICAgIH0sIG9wdGlvbnMgfHwge30pOwogICAgICAgIHZhciBvcHQgPSB0aGlzLm9wdGlvbnM7CiAgICAgICAgaWYgKG9wdC5yYXcgJiYgb3B0LndpbmRvd0JpdHMgPj0gMCAmJiBvcHQud2luZG93Qml0cyA8IDE2KSB7CiAgICAgICAgICBvcHQud2luZG93Qml0cyA9IC1vcHQud2luZG93Qml0czsKICAgICAgICAgIGlmIChvcHQud2luZG93Qml0cyA9PT0gMCkgewogICAgICAgICAgICBvcHQud2luZG93Qml0cyA9IC0xNTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG9wdC53aW5kb3dCaXRzID49IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNiAmJiAhKG9wdGlvbnMgJiYgb3B0aW9ucy53aW5kb3dCaXRzKSkgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgKz0gMzI7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQud2luZG93Qml0cyA+IDE1ICYmIG9wdC53aW5kb3dCaXRzIDwgNDgpIHsKICAgICAgICAgIGlmICgob3B0LndpbmRvd0JpdHMgJiAxNSkgPT09IDApIHsKICAgICAgICAgICAgb3B0LndpbmRvd0JpdHMgfD0gMTU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuZXJyID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgICAgICAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLCBvcHQud2luZG93Qml0cyk7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgIH0KICAgICAgICB0aGlzLmhlYWRlciA9IG5ldyBHWmhlYWRlcigpOwogICAgICAgIHpsaWJfaW5mbGF0ZS5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSwgdGhpcy5oZWFkZXIpOwogICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkgewogICAgICAgICAgaWYgKHR5cGVvZiBvcHQuZGljdGlvbmFyeSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgb3B0LmRpY3Rpb25hcnkgPSBzdHJpbmdzLnN0cmluZzJidWYob3B0LmRpY3Rpb25hcnkpOwogICAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKG9wdC5kaWN0aW9uYXJ5KSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIikgewogICAgICAgICAgICBvcHQuZGljdGlvbmFyeSA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcHQucmF3KSB7CiAgICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBJbmZsYXRlMi5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIG1vZGUpIHsKICAgICAgICB2YXIgc3RybSA9IHRoaXMuc3RybTsKICAgICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZTsKICAgICAgICB2YXIgZGljdGlvbmFyeSA9IHRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5OwogICAgICAgIHZhciBzdGF0dXMsIF9tb2RlOwogICAgICAgIHZhciBuZXh0X291dF91dGY4LCB0YWlsLCB1dGY4c3RyOwogICAgICAgIHZhciBhbGxvd0J1ZkVycm9yID0gZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuZW5kZWQpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgX21vZGUgPSBtb2RlID09PSB+fm1vZGUgPyBtb2RlIDogbW9kZSA9PT0gdHJ1ZSA/IGMuWl9GSU5JU0ggOiBjLlpfTk9fRkxVU0g7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IHN0cmluZ3MuYmluc3RyaW5nMmJ1ZihkYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiA9IDA7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlKHN0cm0sIGMuWl9OT19GTFVTSCk7CiAgICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfTkVFRF9ESUNUICYmIGRpY3Rpb25hcnkpIHsKICAgICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZGljdGlvbmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfQlVGX0VSUk9SICYmIGFsbG93QnVmRXJyb3IgPT09IHRydWUpIHsKICAgICAgICAgICAgc3RhdHVzID0gYy5aX09LOwogICAgICAgICAgICBhbGxvd0J1ZkVycm9yID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IGMuWl9PSykgewogICAgICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RybS5uZXh0X291dCkgewogICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDAgfHwgc3RhdHVzID09PSBjLlpfU1RSRUFNX0VORCB8fCBzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCB8fCBfbW9kZSA9PT0gYy5aX1NZTkNfRkxVU0gpKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIG5leHRfb3V0X3V0ZjggPSBzdHJpbmdzLnV0Zjhib3JkZXIoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpOwogICAgICAgICAgICAgICAgdGFpbCA9IHN0cm0ubmV4dF9vdXQgLSBuZXh0X291dF91dGY4OwogICAgICAgICAgICAgICAgdXRmOHN0ciA9IHN0cmluZ3MuYnVmMnN0cmluZyhzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCk7CiAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gdGFpbDsKICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplIC0gdGFpbDsKICAgICAgICAgICAgICAgIGlmICh0YWlsKSB7CiAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCwgdGFpbCwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YSh1dGY4c3RyKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5vbkRhdGEodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiBzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBhbGxvd0J1ZkVycm9yID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoc3RybS5hdmFpbF9pbiA+IDAgfHwgc3RybS5hdmFpbF9vdXQgPT09IDApICYmIHN0YXR1cyAhPT0gYy5aX1NUUkVBTV9FTkQpOwogICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9TVFJFQU1fRU5EKSB7CiAgICAgICAgICBfbW9kZSA9IGMuWl9GSU5JU0g7CiAgICAgICAgfQogICAgICAgIGlmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCkgewogICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gYy5aX09LOwogICAgICAgIH0KICAgICAgICBpZiAoX21vZGUgPT09IGMuWl9TWU5DX0ZMVVNIKSB7CiAgICAgICAgICB0aGlzLm9uRW5kKGMuWl9PSyk7CiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH07CiAgICAgIEluZmxhdGUyLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwogICAgICB9OwogICAgICBJbmZsYXRlMi5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbihzdGF0dXMpIHsKICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfT0spIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbigiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuZXJyID0gc3RhdHVzOwogICAgICAgIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gaW5mbGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIHZhciBpbmZsYXRvciA9IG5ldyBJbmZsYXRlMihvcHRpb25zKTsKICAgICAgICBpbmZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBpbmZsYXRvci5tc2cgfHwgbXNnW2luZmxhdG9yLmVycl07CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbmZsYXRvci5yZXN1bHQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJhdyhpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gaW5mbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuSW5mbGF0ZSA9IEluZmxhdGUyOwogICAgICBleHBvcnRzMi5pbmZsYXRlID0gaW5mbGF0ZTsKICAgICAgZXhwb3J0czIuaW5mbGF0ZVJhdyA9IGluZmxhdGVSYXc7CiAgICAgIGV4cG9ydHMyLnVuZ3ppcCA9IGluZmxhdGU7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9pbmRleC5qcwogIHZhciByZXF1aXJlX3Bha28gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vaW5kZXguanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgYXNzaWduID0gcmVxdWlyZV9jb21tb24oKS5hc3NpZ247CiAgICAgIHZhciBkZWZsYXRlID0gcmVxdWlyZV9kZWZsYXRlMigpOwogICAgICB2YXIgaW5mbGF0ZSA9IHJlcXVpcmVfaW5mbGF0ZTIoKTsKICAgICAgdmFyIGNvbnN0YW50cyA9IHJlcXVpcmVfY29uc3RhbnRzKCk7CiAgICAgIHZhciBwYWtvID0ge307CiAgICAgIGFzc2lnbihwYWtvLCBkZWZsYXRlLCBpbmZsYXRlLCBjb25zdGFudHMpOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBwYWtvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcwogIHZhciByZXF1aXJlX2xvbmcgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBMb25nNDsKICAgICAgdmFyIHdhc20gPSBudWxsOwogICAgICB0cnkgewogICAgICAgIHdhc20gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShuZXcgVWludDhBcnJheShbCiAgICAgICAgICAwLAogICAgICAgICAgOTcsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxLAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEzLAogICAgICAgICAgMiwKICAgICAgICAgIDk2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICA5NiwKICAgICAgICAgIDQsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMywKICAgICAgICAgIDcsCiAgICAgICAgICA2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgNiwKICAgICAgICAgIDYsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMSwKICAgICAgICAgIDY1LAogICAgICAgICAgMCwKICAgICAgICAgIDExLAogICAgICAgICAgNywKICAgICAgICAgIDUwLAogICAgICAgICAgNiwKICAgICAgICAgIDMsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxMTcsCiAgICAgICAgICAxMDgsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDUsCiAgICAgICAgICAxMDAsCiAgICAgICAgICAxMDUsCiAgICAgICAgICAxMTgsCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNSwKICAgICAgICAgIDAsCiAgICAgICAgICAyLAogICAgICAgICAgNSwKICAgICAgICAgIDEwMCwKICAgICAgICAgIDEwNSwKICAgICAgICAgIDExOCwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE3LAogICAgICAgICAgMCwKICAgICAgICAgIDMsCiAgICAgICAgICA1LAogICAgICAgICAgMTE0LAogICAgICAgICAgMTAxLAogICAgICAgICAgMTA5LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAwLAogICAgICAgICAgNCwKICAgICAgICAgIDUsCiAgICAgICAgICAxMTQsCiAgICAgICAgICAxMDEsCiAgICAgICAgICAxMDksCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNywKICAgICAgICAgIDAsCiAgICAgICAgICA1LAogICAgICAgICAgOCwKICAgICAgICAgIDEwMywKICAgICAgICAgIDEwMSwKICAgICAgICAgIDExNiwKICAgICAgICAgIDk1LAogICAgICAgICAgMTA0LAogICAgICAgICAgMTA1LAogICAgICAgICAgMTAzLAogICAgICAgICAgMTA0LAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAxMCwKICAgICAgICAgIDE5MSwKICAgICAgICAgIDEsCiAgICAgICAgICA2LAogICAgICAgICAgNCwKICAgICAgICAgIDAsCiAgICAgICAgICAzNSwKICAgICAgICAgIDAsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNywKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOSwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEzMCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMQogICAgICAgIF0pKSwge30pLmV4cG9ydHM7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgfQogICAgICBmdW5jdGlvbiBMb25nNChsb3csIGhpZ2gsIHVuc2lnbmVkKSB7CiAgICAgICAgdGhpcy5sb3cgPSBsb3cgfCAwOwogICAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggfCAwOwogICAgICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICB9CiAgICAgIExvbmc0LnByb3RvdHlwZS5fX2lzTG9uZ19fOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9uZzQucHJvdG90eXBlLCAiX19pc0xvbmdfXyIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGZ1bmN0aW9uIGlzTG9uZyhvYmopIHsKICAgICAgICByZXR1cm4gKG9iaiAmJiBvYmpbIl9faXNMb25nX18iXSkgPT09IHRydWU7CiAgICAgIH0KICAgICAgTG9uZzQuaXNMb25nID0gaXNMb25nOwogICAgICB2YXIgSU5UX0NBQ0hFID0ge307CiAgICAgIHZhciBVSU5UX0NBQ0hFID0ge307CiAgICAgIGZ1bmN0aW9uIGZyb21JbnQodmFsdWUsIHVuc2lnbmVkKSB7CiAgICAgICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTsKICAgICAgICBpZiAodW5zaWduZWQpIHsKICAgICAgICAgIHZhbHVlID4+Pj0gMDsKICAgICAgICAgIGlmIChjYWNoZSA9IDAgPD0gdmFsdWUgJiYgdmFsdWUgPCAyNTYpIHsKICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCAodmFsdWUgfCAwKSA8IDAgPyAtMSA6IDAsIHRydWUpOwogICAgICAgICAgaWYgKGNhY2hlKQogICAgICAgICAgICBVSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlIHw9IDA7CiAgICAgICAgICBpZiAoY2FjaGUgPSAtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSB7CiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTsKICAgICAgICAgIGlmIChjYWNoZSkKICAgICAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIExvbmc0LmZyb21JbnQgPSBmcm9tSW50OwogICAgICBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlLCB1bnNpZ25lZCkgewogICAgICAgIGlmIChpc05hTih2YWx1ZSkpCiAgICAgICAgICByZXR1cm4gdW5zaWduZWQgPyBVWkVSTyA6IFpFUk87CiAgICAgICAgaWYgKHVuc2lnbmVkKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpCiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpCiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKQogICAgICAgICAgICByZXR1cm4gTUFYX1ZBTFVFOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwgfCAwLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMIHwgMCwgdW5zaWduZWQpOwogICAgICB9CiAgICAgIExvbmc0LmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyOwogICAgICBmdW5jdGlvbiBmcm9tQml0cyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCk7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbUJpdHMgPSBmcm9tQml0czsKICAgICAgdmFyIHBvd19kYmwgPSBNYXRoLnBvdzsKICAgICAgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkgewogICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImVtcHR5IHN0cmluZyIpOwogICAgICAgIGlmIChzdHIgPT09ICJOYU4iIHx8IHN0ciA9PT0gIkluZmluaXR5IiB8fCBzdHIgPT09ICIrSW5maW5pdHkiIHx8IHN0ciA9PT0gIi1JbmZpbml0eSIpCiAgICAgICAgICByZXR1cm4gWkVSTzsKICAgICAgICBpZiAodHlwZW9mIHVuc2lnbmVkID09PSAibnVtYmVyIikgewogICAgICAgICAgcmFkaXggPSB1bnNpZ25lZCwgdW5zaWduZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICAgIH0KICAgICAgICByYWRpeCA9IHJhZGl4IHx8IDEwOwogICAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkKICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoInJhZGl4Iik7CiAgICAgICAgdmFyIHA7CiAgICAgICAgaWYgKChwID0gc3RyLmluZGV4T2YoIi0iKSkgPiAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImludGVyaW9yIGh5cGhlbiIpOwogICAgICAgIGVsc2UgaWYgKHAgPT09IDApIHsKICAgICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHN0ci5zdWJzdHJpbmcoMSksIHVuc2lnbmVkLCByYWRpeCkubmVnKCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTsKICAgICAgICB2YXIgcmVzdWx0ID0gWkVSTzsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkgewogICAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTsKICAgICAgICAgIGlmIChzaXplIDwgOCkgewogICAgICAgICAgICB2YXIgcG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIHNpemUpKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChwb3dlcikuYWRkKGZyb21OdW1iZXIodmFsdWUpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocmFkaXhUb1Bvd2VyKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc3VsdC51bnNpZ25lZCA9IHVuc2lnbmVkOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CiAgICAgIGZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKQogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICJib29sZWFuIiA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTsKICAgICAgfQogICAgICBMb25nNC5mcm9tVmFsdWUgPSBmcm9tVmFsdWU7CiAgICAgIHZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7CiAgICAgIHZhciBUV09fUFdSXzI0X0RCTCA9IDEgPDwgMjQ7CiAgICAgIHZhciBUV09fUFdSXzMyX0RCTCA9IFRXT19QV1JfMTZfREJMICogVFdPX1BXUl8xNl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzYzX0RCTCA9IFRXT19QV1JfNjRfREJMIC8gMjsKICAgICAgdmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTsKICAgICAgdmFyIFpFUk8gPSBmcm9tSW50KDApOwogICAgICBMb25nNC5aRVJPID0gWkVSTzsKICAgICAgdmFyIFVaRVJPID0gZnJvbUludCgwLCB0cnVlKTsKICAgICAgTG9uZzQuVVpFUk8gPSBVWkVSTzsKICAgICAgdmFyIE9ORSA9IGZyb21JbnQoMSk7CiAgICAgIExvbmc0Lk9ORSA9IE9ORTsKICAgICAgdmFyIFVPTkUgPSBmcm9tSW50KDEsIHRydWUpOwogICAgICBMb25nNC5VT05FID0gVU9ORTsKICAgICAgdmFyIE5FR19PTkUgPSBmcm9tSW50KC0xKTsKICAgICAgTG9uZzQuTkVHX09ORSA9IE5FR19PTkU7CiAgICAgIHZhciBNQVhfVkFMVUUgPSBmcm9tQml0cyg0Mjk0OTY3Mjk1IHwgMCwgMjE0NzQ4MzY0NyB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFOwogICAgICB2YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoNDI5NDk2NzI5NSB8IDAsIDQyOTQ5NjcyOTUgfCAwLCB0cnVlKTsKICAgICAgTG9uZzQuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFOwogICAgICB2YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMjE0NzQ4MzY0OCB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFOwogICAgICB2YXIgTG9uZ1Byb3RvdHlwZSA9IExvbmc0LnByb3RvdHlwZTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uIHRvSW50KCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyMigpIHsKICAgICAgICBpZiAodGhpcy51bnNpZ25lZCkKICAgICAgICAgIHJldHVybiAodGhpcy5oaWdoID4+PiAwKSAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcocmFkaXgpIHsKICAgICAgICByYWRpeCA9IHJhZGl4IHx8IDEwOwogICAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkKICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoInJhZGl4Iik7CiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpCiAgICAgICAgICByZXR1cm4gIjAiOwogICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgewogICAgICAgICAgICB2YXIgcmFkaXhMb25nID0gZnJvbU51bWJlcihyYWRpeCksIGRpdiA9IHRoaXMuZGl2KHJhZGl4TG9uZyksIHJlbTEgPSBkaXYubXVsKHJhZGl4TG9uZykuc3ViKHRoaXMpOwogICAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgcmV0dXJuICItIiArIHRoaXMubmVnKCkudG9TdHJpbmcocmFkaXgpOwogICAgICAgIH0KICAgICAgICB2YXIgcmFkaXhUb1Bvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCA2KSwgdGhpcy51bnNpZ25lZCksIHJlbSA9IHRoaXM7CiAgICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLCBpbnR2YWwgPSByZW0uc3ViKHJlbURpdi5tdWwocmFkaXhUb1Bvd2VyKSkudG9JbnQoKSA+Pj4gMCwgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTsKICAgICAgICAgIHJlbSA9IHJlbURpdjsKICAgICAgICAgIGlmIChyZW0uaXNaZXJvKCkpCiAgICAgICAgICAgIHJldHVybiBkaWdpdHMgKyByZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KQogICAgICAgICAgICAgIGRpZ2l0cyA9ICIwIiArIGRpZ2l0czsKICAgICAgICAgICAgcmVzdWx0ID0gIiIgKyBkaWdpdHMgKyByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID4+PiAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldExvd0JpdHMgPSBmdW5jdGlvbiBnZXRMb3dCaXRzKCkgewogICAgICAgIHJldHVybiB0aGlzLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZXRMb3dCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRMb3dCaXRzVW5zaWduZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubG93ID4+PiAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkgewogICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkKICAgICAgICAgIHJldHVybiB0aGlzLmVxKE1JTl9WQUxVRSkgPyA2NCA6IHRoaXMubmVnKCkuZ2V0TnVtQml0c0FicygpOwogICAgICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93OwogICAgICAgIGZvciAodmFyIGJpdCA9IDMxOyBiaXQgPiAwOyBiaXQtLSkKICAgICAgICAgIGlmICgodmFsICYgMSA8PCBiaXQpICE9IDApCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggIT0gMCA/IGJpdCArIDMzIDogYml0ICsgMTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gMCAmJiB0aGlzLmxvdyA9PT0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5lcXogPSBMb25nUHJvdG90eXBlLmlzWmVybzsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc05lZ2F0aXZlID0gZnVuY3Rpb24gaXNOZWdhdGl2ZSgpIHsKICAgICAgICByZXR1cm4gIXRoaXMudW5zaWduZWQgJiYgdGhpcy5oaWdoIDwgMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCB8fCB0aGlzLmhpZ2ggPj0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkKCkgewogICAgICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4oKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICBpZiAodGhpcy51bnNpZ25lZCAhPT0gb3RoZXIudW5zaWduZWQgJiYgdGhpcy5oaWdoID4+PiAzMSA9PT0gMSAmJiBvdGhlci5oaWdoID4+PiAzMSA9PT0gMSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID09PSBvdGhlci5oaWdoICYmIHRoaXMubG93ID09PSBvdGhlci5sb3c7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZXEgPSBMb25nUHJvdG90eXBlLmVxdWFsczsKICAgICAgTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHMgPSBmdW5jdGlvbiBub3RFcXVhbHMob3RoZXIpIHsKICAgICAgICByZXR1cm4gIXRoaXMuZXEob3RoZXIpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm5lcSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzOwogICAgICBMb25nUHJvdG90eXBlLm5lID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7CiAgICAgIExvbmdQcm90b3R5cGUubGVzc1RoYW4gPSBmdW5jdGlvbiBsZXNzVGhhbihvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpIDwgMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5sdCA9IExvbmdQcm90b3R5cGUubGVzc1RoYW47CiAgICAgIExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsID0gZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPD0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5sdGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wKG90aGVyKSA+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ3QgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuOwogICAgICBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbCA9IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuT3JFcXVhbChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpID49IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ3RlID0gTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWw7CiAgICAgIExvbmdQcm90b3R5cGUuZ2UgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICBpZiAodGhpcy5lcShvdGhlcikpCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB2YXIgdGhpc05lZyA9IHRoaXMuaXNOZWdhdGl2ZSgpLCBvdGhlck5lZyA9IG90aGVyLmlzTmVnYXRpdmUoKTsKICAgICAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuIHRoaXMuc3ViKG90aGVyKS5pc05lZ2F0aXZlKCkgPyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIG90aGVyLmhpZ2ggPj4+IDAgPiB0aGlzLmhpZ2ggPj4+IDAgfHwgb3RoZXIuaGlnaCA9PT0gdGhpcy5oaWdoICYmIG90aGVyLmxvdyA+Pj4gMCA+IHRoaXMubG93ID4+PiAwID8gLTEgOiAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmNvbXAgPSBMb25nUHJvdG90eXBlLmNvbXBhcmU7CiAgICAgIExvbmdQcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24gbmVnYXRlKCkgewogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJiB0aGlzLmVxKE1JTl9WQUxVRSkpCiAgICAgICAgICByZXR1cm4gTUlOX1ZBTFVFOwogICAgICAgIHJldHVybiB0aGlzLm5vdCgpLmFkZChPTkUpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm5lZyA9IExvbmdQcm90b3R5cGUubmVnYXRlOwogICAgICBMb25nUHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChhZGRlbmQpIHsKICAgICAgICBpZiAoIWlzTG9uZyhhZGRlbmQpKQogICAgICAgICAgYWRkZW5kID0gZnJvbVZhbHVlKGFkZGVuZCk7CiAgICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGI0OCA9IGFkZGVuZC5oaWdoID4+PiAxNjsKICAgICAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiA2NTUzNTsKICAgICAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGIwMCA9IGFkZGVuZC5sb3cgJiA2NTUzNTsKICAgICAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDsKICAgICAgICBjMDAgKz0gYTAwICsgYjAwOwogICAgICAgIGMxNiArPSBjMDAgPj4+IDE2OwogICAgICAgIGMwMCAmPSA2NTUzNTsKICAgICAgICBjMTYgKz0gYTE2ICsgYjE2OwogICAgICAgIGMzMiArPSBjMTYgPj4+IDE2OwogICAgICAgIGMxNiAmPSA2NTUzNTsKICAgICAgICBjMzIgKz0gYTMyICsgYjMyOwogICAgICAgIGM0OCArPSBjMzIgPj4+IDE2OwogICAgICAgIGMzMiAmPSA2NTUzNTsKICAgICAgICBjNDggKz0gYTQ4ICsgYjQ4OwogICAgICAgIGM0OCAmPSA2NTUzNTsKICAgICAgICByZXR1cm4gZnJvbUJpdHMoYzE2IDw8IDE2IHwgYzAwLCBjNDggPDwgMTYgfCBjMzIsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gc3VidHJhY3Qoc3VidHJhaGVuZCkgewogICAgICAgIGlmICghaXNMb25nKHN1YnRyYWhlbmQpKQogICAgICAgICAgc3VidHJhaGVuZCA9IGZyb21WYWx1ZShzdWJ0cmFoZW5kKTsKICAgICAgICByZXR1cm4gdGhpcy5hZGQoc3VidHJhaGVuZC5uZWcoKSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc3ViID0gTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdDsKICAgICAgTG9uZ1Byb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHsKICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICghaXNMb25nKG11bHRpcGxpZXIpKQogICAgICAgICAgbXVsdGlwbGllciA9IGZyb21WYWx1ZShtdWx0aXBsaWVyKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgdmFyIGxvdyA9IHdhc20ubXVsKHRoaXMubG93LCB0aGlzLmhpZ2gsIG11bHRpcGxpZXIubG93LCBtdWx0aXBsaWVyLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpCiAgICAgICAgICByZXR1cm4gWkVSTzsKICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKQogICAgICAgICAgcmV0dXJuIG11bHRpcGxpZXIuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87CiAgICAgICAgaWYgKG11bHRpcGxpZXIuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgIHJldHVybiB0aGlzLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPOwogICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5tdWwobXVsdGlwbGllci5uZWcoKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyKS5uZWcoKTsKICAgICAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgcmV0dXJuIHRoaXMubXVsKG11bHRpcGxpZXIubmVnKCkpLm5lZygpOwogICAgICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpCiAgICAgICAgICByZXR1cm4gZnJvbU51bWJlcih0aGlzLnRvTnVtYmVyKCkgKiBtdWx0aXBsaWVyLnRvTnVtYmVyKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiA2NTUzNTsKICAgICAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2OwogICAgICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBiNDggPSBtdWx0aXBsaWVyLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiA2NTUzNTsKICAgICAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2OwogICAgICAgIHZhciBiMDAgPSBtdWx0aXBsaWVyLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwOwogICAgICAgIGMwMCArPSBhMDAgKiBiMDA7CiAgICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7CiAgICAgICAgYzAwICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMTYgKiBiMDA7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMDAgKiBiMTY7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMzIgKiBiMDA7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMTYgKiBiMTY7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMDAgKiBiMzI7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGM0OCArPSBhNDggKiBiMDAgKyBhMzIgKiBiMTYgKyBhMTYgKiBiMzIgKyBhMDAgKiBiNDg7CiAgICAgICAgYzQ4ICY9IDY1NTM1OwogICAgICAgIHJldHVybiBmcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubXVsID0gTG9uZ1Byb3RvdHlwZS5tdWx0aXBseTsKICAgICAgTG9uZ1Byb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiBkaXZpZGUoZGl2aXNvcikgewogICAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKQogICAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTsKICAgICAgICBpZiAoZGl2aXNvci5pc1plcm8oKSkKICAgICAgICAgIHRocm93IEVycm9yKCJkaXZpc2lvbiBieSB6ZXJvIik7CiAgICAgICAgaWYgKHdhc20pIHsKICAgICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPT09IC0yMTQ3NDgzNjQ4ICYmIGRpdmlzb3IubG93ID09PSAtMSAmJiBkaXZpc29yLmhpZ2ggPT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5kaXZfdSA6IHdhc20uZGl2X3MpKHRoaXMubG93LCB0aGlzLmhpZ2gsIGRpdmlzb3IubG93LCBkaXZpc29yLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpCiAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICB2YXIgYXBwcm94LCByZW0sIHJlczsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpIHsKICAgICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHsKICAgICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKQogICAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgICAgICByZXR1cm4gT05FOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2YXIgaGFsZlRoaXMgPSB0aGlzLnNocigxKTsKICAgICAgICAgICAgICBhcHByb3ggPSBoYWxmVGhpcy5kaXYoZGl2aXNvcikuc2hsKDEpOwogICAgICAgICAgICAgIGlmIChhcHByb3guZXEoWkVSTykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlbSA9IHRoaXMuc3ViKGRpdmlzb3IubXVsKGFwcHJveCkpOwogICAgICAgICAgICAgICAgcmVzID0gYXBwcm94LmFkZChyZW0uZGl2KGRpdmlzb3IpKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyBVWkVSTyA6IFpFUk87CiAgICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLmRpdihkaXZpc29yLm5lZygpKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IpLm5lZygpOwogICAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2KGRpdmlzb3IubmVnKCkpLm5lZygpOwogICAgICAgICAgcmVzID0gWkVSTzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFkaXZpc29yLnVuc2lnbmVkKQogICAgICAgICAgICBkaXZpc29yID0gZGl2aXNvci50b1Vuc2lnbmVkKCk7CiAgICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzKSkKICAgICAgICAgICAgcmV0dXJuIFVaRVJPOwogICAgICAgICAgaWYgKGRpdmlzb3IuZ3QodGhpcy5zaHJ1KDEpKSkKICAgICAgICAgICAgcmV0dXJuIFVPTkU7CiAgICAgICAgICByZXMgPSBVWkVSTzsKICAgICAgICB9CiAgICAgICAgcmVtID0gdGhpczsKICAgICAgICB3aGlsZSAocmVtLmd0ZShkaXZpc29yKSkgewogICAgICAgICAgYXBwcm94ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihyZW0udG9OdW1iZXIoKSAvIGRpdmlzb3IudG9OdW1iZXIoKSkpOwogICAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSwgZGVsdGEgPSBsb2cyIDw9IDQ4ID8gMSA6IHBvd19kYmwoMiwgbG9nMiAtIDQ4KSwgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gpLCBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpOwogICAgICAgICAgd2hpbGUgKGFwcHJveFJlbS5pc05lZ2F0aXZlKCkgfHwgYXBwcm94UmVtLmd0KHJlbSkpIHsKICAgICAgICAgICAgYXBwcm94IC09IGRlbHRhOwogICAgICAgICAgICBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYXBwcm94UmVzLmlzWmVybygpKQogICAgICAgICAgICBhcHByb3hSZXMgPSBPTkU7CiAgICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7CiAgICAgICAgICByZW0gPSByZW0uc3ViKGFwcHJveFJlbSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZGl2ID0gTG9uZ1Byb3RvdHlwZS5kaXZpZGU7CiAgICAgIExvbmdQcm90b3R5cGUubW9kdWxvID0gZnVuY3Rpb24gbW9kdWxvKGRpdmlzb3IpIHsKICAgICAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSkKICAgICAgICAgIGRpdmlzb3IgPSBmcm9tVmFsdWUoZGl2aXNvcik7CiAgICAgICAgaWYgKHdhc20pIHsKICAgICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20ucmVtX3UgOiB3YXNtLnJlbV9zKSh0aGlzLmxvdywgdGhpcy5oaWdoLCBkaXZpc29yLmxvdywgZGl2aXNvci5oaWdoKTsKICAgICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnN1Yih0aGlzLmRpdihkaXZpc29yKS5tdWwoZGl2aXNvcikpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm1vZCA9IExvbmdQcm90b3R5cGUubW9kdWxvOwogICAgICBMb25nUHJvdG90eXBlLnJlbSA9IExvbmdQcm90b3R5cGUubW9kdWxvOwogICAgICBMb25nUHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uIG5vdCgpIHsKICAgICAgICByZXR1cm4gZnJvbUJpdHMofnRoaXMubG93LCB+dGhpcy5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93ICYgb3RoZXIubG93LCB0aGlzLmhpZ2ggJiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyB8IG90aGVyLmxvdywgdGhpcy5oaWdoIHwgb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyBeIG90aGVyLmxvdywgdGhpcy5oaWdoIF4gb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHsKICAgICAgICBpZiAoaXNMb25nKG51bUJpdHMpKQogICAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTsKICAgICAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZWxzZSBpZiAobnVtQml0cyA8IDMyKQogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsIHRoaXMuaGlnaCA8PCBudW1CaXRzIHwgdGhpcy5sb3cgPj4+IDMyIC0gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKDAsIHRoaXMubG93IDw8IG51bUJpdHMgLSAzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc2hsID0gTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hpZnRSaWdodCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPj4+IG51bUJpdHMgfCB0aGlzLmhpZ2ggPDwgMzIgLSBudW1CaXRzLCB0aGlzLmhpZ2ggPj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCA+PiBudW1CaXRzIC0gMzIsIHRoaXMuaGlnaCA+PSAwID8gMCA6IC0xLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaHIgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkID0gZnVuY3Rpb24gc2hpZnRSaWdodFVuc2lnbmVkKG51bUJpdHMpIHsKICAgICAgICBpZiAoaXNMb25nKG51bUJpdHMpKQogICAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTsKICAgICAgICBudW1CaXRzICY9IDYzOwogICAgICAgIGlmIChudW1CaXRzID09PSAwKQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgaGlnaCA9IHRoaXMuaGlnaDsKICAgICAgICAgIGlmIChudW1CaXRzIDwgMzIpIHsKICAgICAgICAgICAgdmFyIGxvdyA9IHRoaXMubG93OwogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93ID4+PiBudW1CaXRzIHwgaGlnaCA8PCAzMiAtIG51bUJpdHMsIGhpZ2ggPj4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpOwogICAgICAgICAgfSBlbHNlIGlmIChudW1CaXRzID09PSAzMikKICAgICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGhpZ2gsIDAsIHRoaXMudW5zaWduZWQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCA+Pj4gbnVtQml0cyAtIDMyLCAwLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc2hydSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkOwogICAgICBMb25nUHJvdG90eXBlLnNocl91ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7CiAgICAgIExvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgZmFsc2UpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvVW5zaWduZWQgPSBmdW5jdGlvbiB0b1Vuc2lnbmVkKCkgewogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93LCB0aGlzLmhpZ2gsIHRydWUpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKGxlKSB7CiAgICAgICAgcmV0dXJuIGxlID8gdGhpcy50b0J5dGVzTEUoKSA6IHRoaXMudG9CeXRlc0JFKCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0xFID0gZnVuY3Rpb24gdG9CeXRlc0xFKCkgewogICAgICAgIHZhciBoaSA9IHRoaXMuaGlnaCwgbG8gPSB0aGlzLmxvdzsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgbG8gJiAyNTUsCiAgICAgICAgICBsbyA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGxvID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGxvID4+PiAyNCwKICAgICAgICAgIGhpICYgMjU1LAogICAgICAgICAgaGkgPj4+IDggJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gMTYgJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gMjQKICAgICAgICBdOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvQnl0ZXNCRSA9IGZ1bmN0aW9uIHRvQnl0ZXNCRSgpIHsKICAgICAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsIGxvID0gdGhpcy5sb3c7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGhpID4+PiAyNCwKICAgICAgICAgIGhpID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGhpID4+PiA4ICYgMjU1LAogICAgICAgICAgaGkgJiAyNTUsCiAgICAgICAgICBsbyA+Pj4gMjQsCiAgICAgICAgICBsbyA+Pj4gMTYgJiAyNTUsCiAgICAgICAgICBsbyA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGxvICYgMjU1CiAgICAgICAgXTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzID0gZnVuY3Rpb24gZnJvbUJ5dGVzMihieXRlcywgdW5zaWduZWQsIGxlKSB7CiAgICAgICAgcmV0dXJuIGxlID8gTG9uZzQuZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSA6IExvbmc0LmZyb21CeXRlc0JFKGJ5dGVzLCB1bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmc0LmZyb21CeXRlc0xFID0gZnVuY3Rpb24gZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMb25nNChieXRlc1swXSB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzNdIDw8IDI0LCBieXRlc1s0XSB8IGJ5dGVzWzVdIDw8IDggfCBieXRlc1s2XSA8PCAxNiB8IGJ5dGVzWzddIDw8IDI0LCB1bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmc0LmZyb21CeXRlc0JFID0gZnVuY3Rpb24gZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMb25nNChieXRlc1s0XSA8PCAyNCB8IGJ5dGVzWzVdIDw8IDE2IHwgYnl0ZXNbNl0gPDwgOCB8IGJ5dGVzWzddLCBieXRlc1swXSA8PCAyNCB8IGJ5dGVzWzFdIDw8IDE2IHwgYnl0ZXNbMl0gPDwgOCB8IGJ5dGVzWzNdLCB1bnNpZ25lZCk7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfaXNfb2JzZXJ2YWJsZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gKHZhbHVlKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFN5bWJvbC5vYnNlcnZhYmxlID09PSAic3ltYm9sIiAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLm9ic2VydmFibGVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlW1N5bWJvbC5vYnNlcnZhYmxlXSgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHZhbHVlWyJAQG9ic2VydmFibGUiXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVsiQEBvYnNlcnZhYmxlIl0oKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzCiAgdmFyIHJlcXVpcmVfc2VyaWFsaXplcnMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLkRlZmF1bHRTZXJpYWxpemVyID0gZXhwb3J0czIuZXh0ZW5kU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VyaWFsaXplcihleHRlbmQsIGltcGxlbWVudGF0aW9uKSB7CiAgICAgICAgY29uc3QgZmFsbGJhY2tEZXNlcmlhbGl6ZXIgPSBleHRlbmQuZGVzZXJpYWxpemUuYmluZChleHRlbmQpOwogICAgICAgIGNvbnN0IGZhbGxiYWNrU2VyaWFsaXplciA9IGV4dGVuZC5zZXJpYWxpemUuYmluZChleHRlbmQpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5kZXNlcmlhbGl6ZShtZXNzYWdlLCBmYWxsYmFja0Rlc2VyaWFsaXplcik7CiAgICAgICAgICB9LAogICAgICAgICAgc2VyaWFsaXplKGlucHV0KSB7CiAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5zZXJpYWxpemUoaW5wdXQsIGZhbGxiYWNrU2VyaWFsaXplcik7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICBleHBvcnRzMi5leHRlbmRTZXJpYWxpemVyID0gZXh0ZW5kU2VyaWFsaXplcjsKICAgICAgdmFyIERlZmF1bHRFcnJvclNlcmlhbGl6ZXIgPSB7CiAgICAgICAgZGVzZXJpYWxpemUobWVzc2FnZSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oRXJyb3IobWVzc2FnZS5tZXNzYWdlKSwgewogICAgICAgICAgICBuYW1lOiBtZXNzYWdlLm5hbWUsCiAgICAgICAgICAgIHN0YWNrOiBtZXNzYWdlLnN0YWNrCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZShlcnJvcikgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgX19lcnJvcl9tYXJrZXI6ICIkJGVycm9yIiwKICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwKICAgICAgICAgICAgbmFtZTogZXJyb3IubmFtZSwKICAgICAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGlzU2VyaWFsaXplZEVycm9yID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmICJfX2Vycm9yX21hcmtlciIgaW4gdGhpbmcgJiYgdGhpbmcuX19lcnJvcl9tYXJrZXIgPT09ICIkJGVycm9yIjsKICAgICAgZXhwb3J0czIuRGVmYXVsdFNlcmlhbGl6ZXIgPSB7CiAgICAgICAgZGVzZXJpYWxpemUobWVzc2FnZSkgewogICAgICAgICAgaWYgKGlzU2VyaWFsaXplZEVycm9yKG1lc3NhZ2UpKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLmRlc2VyaWFsaXplKG1lc3NhZ2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLnNlcmlhbGl6ZShpbnB1dCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L2NvbW1vbi5qcwogIHZhciByZXF1aXJlX2NvbW1vbjIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L2NvbW1vbi5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5zZXJpYWxpemUgPSBleHBvcnRzMi5kZXNlcmlhbGl6ZSA9IGV4cG9ydHMyLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIHNlcmlhbGl6ZXJzXzEgPSByZXF1aXJlX3NlcmlhbGl6ZXJzKCk7CiAgICAgIHZhciByZWdpc3RlcmVkU2VyaWFsaXplciA9IHNlcmlhbGl6ZXJzXzEuRGVmYXVsdFNlcmlhbGl6ZXI7CiAgICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2VyaWFsaXplcjIoc2VyaWFsaXplcikgewogICAgICAgIHJlZ2lzdGVyZWRTZXJpYWxpemVyID0gc2VyaWFsaXplcnNfMS5leHRlbmRTZXJpYWxpemVyKHJlZ2lzdGVyZWRTZXJpYWxpemVyLCBzZXJpYWxpemVyKTsKICAgICAgfQogICAgICBleHBvcnRzMi5yZWdpc3RlclNlcmlhbGl6ZXIgPSByZWdpc3RlclNlcmlhbGl6ZXIyOwogICAgICBmdW5jdGlvbiBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmRlc2VyaWFsaXplID0gZGVzZXJpYWxpemU7CiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZShpbnB1dCkgewogICAgICAgIHJldHVybiByZWdpc3RlcmVkU2VyaWFsaXplci5zZXJpYWxpemUoaW5wdXQpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC9zeW1ib2xzLmpzCiAgdmFyIHJlcXVpcmVfc3ltYm9scyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc3ltYm9scy5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi4kd29ya2VyID0gZXhwb3J0czIuJHRyYW5zZmVyYWJsZSA9IGV4cG9ydHMyLiR0ZXJtaW5hdGUgPSBleHBvcnRzMi4kZXZlbnRzID0gZXhwb3J0czIuJGVycm9ycyA9IHZvaWQgMDsKICAgICAgZXhwb3J0czIuJGVycm9ycyA9IFN5bWJvbCgidGhyZWFkLmVycm9ycyIpOwogICAgICBleHBvcnRzMi4kZXZlbnRzID0gU3ltYm9sKCJ0aHJlYWQuZXZlbnRzIik7CiAgICAgIGV4cG9ydHMyLiR0ZXJtaW5hdGUgPSBTeW1ib2woInRocmVhZC50ZXJtaW5hdGUiKTsKICAgICAgZXhwb3J0czIuJHRyYW5zZmVyYWJsZSA9IFN5bWJvbCgidGhyZWFkLnRyYW5zZmVyYWJsZSIpOwogICAgICBleHBvcnRzMi4kd29ya2VyID0gU3ltYm9sKCJ0aHJlYWQud29ya2VyIik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvdHJhbnNmZXJhYmxlLmpzCiAgdmFyIHJlcXVpcmVfdHJhbnNmZXJhYmxlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90cmFuc2ZlcmFibGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuVHJhbnNmZXIgPSBleHBvcnRzMi5pc1RyYW5zZmVyRGVzY3JpcHRvciA9IHZvaWQgMDsKICAgICAgdmFyIHN5bWJvbHNfMSA9IHJlcXVpcmVfc3ltYm9scygpOwogICAgICBmdW5jdGlvbiBpc1RyYW5zZmVyYWJsZSh0aGluZykgewogICAgICAgIGlmICghdGhpbmcgfHwgdHlwZW9mIHRoaW5nICE9PSAib2JqZWN0IikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpc1RyYW5zZmVyRGVzY3JpcHRvcih0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmIHRoaW5nW3N5bWJvbHNfMS4kdHJhbnNmZXJhYmxlXTsKICAgICAgfQogICAgICBleHBvcnRzMi5pc1RyYW5zZmVyRGVzY3JpcHRvciA9IGlzVHJhbnNmZXJEZXNjcmlwdG9yOwogICAgICBmdW5jdGlvbiBUcmFuc2ZlcjIocGF5bG9hZCwgdHJhbnNmZXJhYmxlcykgewogICAgICAgIGlmICghdHJhbnNmZXJhYmxlcykgewogICAgICAgICAgaWYgKCFpc1RyYW5zZmVyYWJsZShwYXlsb2FkKSkKICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTsKICAgICAgICAgIHRyYW5zZmVyYWJsZXMgPSBbcGF5bG9hZF07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBbc3ltYm9sc18xLiR0cmFuc2ZlcmFibGVdOiB0cnVlLAogICAgICAgICAgc2VuZDogcGF5bG9hZCwKICAgICAgICAgIHRyYW5zZmVyYWJsZXMKICAgICAgICB9OwogICAgICB9CiAgICAgIGV4cG9ydHMyLlRyYW5zZmVyID0gVHJhbnNmZXIyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzCiAgdmFyIHJlcXVpcmVfbWVzc2FnZXMyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90eXBlcy9tZXNzYWdlcy5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5Xb3JrZXJNZXNzYWdlVHlwZSA9IGV4cG9ydHMyLk1hc3Rlck1lc3NhZ2VUeXBlID0gdm9pZCAwOwogICAgICB2YXIgTWFzdGVyTWVzc2FnZVR5cGU7CiAgICAgIChmdW5jdGlvbihNYXN0ZXJNZXNzYWdlVHlwZTIpIHsKICAgICAgICBNYXN0ZXJNZXNzYWdlVHlwZTJbImNhbmNlbCJdID0gImNhbmNlbCI7CiAgICAgICAgTWFzdGVyTWVzc2FnZVR5cGUyWyJydW4iXSA9ICJydW4iOwogICAgICB9KShNYXN0ZXJNZXNzYWdlVHlwZSA9IGV4cG9ydHMyLk1hc3Rlck1lc3NhZ2VUeXBlIHx8IChleHBvcnRzMi5NYXN0ZXJNZXNzYWdlVHlwZSA9IHt9KSk7CiAgICAgIHZhciBXb3JrZXJNZXNzYWdlVHlwZTsKICAgICAgKGZ1bmN0aW9uKFdvcmtlck1lc3NhZ2VUeXBlMikgewogICAgICAgIFdvcmtlck1lc3NhZ2VUeXBlMlsiZXJyb3IiXSA9ICJlcnJvciI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJpbml0Il0gPSAiaW5pdCI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJyZXN1bHQiXSA9ICJyZXN1bHQiOwogICAgICAgIFdvcmtlck1lc3NhZ2VUeXBlMlsicnVubmluZyJdID0gInJ1bm5pbmciOwogICAgICAgIFdvcmtlck1lc3NhZ2VUeXBlMlsidW5jYXVnaHRFcnJvciJdID0gInVuY2F1Z2h0RXJyb3IiOwogICAgICB9KShXb3JrZXJNZXNzYWdlVHlwZSA9IGV4cG9ydHMyLldvcmtlck1lc3NhZ2VUeXBlIHx8IChleHBvcnRzMi5Xb3JrZXJNZXNzYWdlVHlwZSA9IHt9KSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvd29ya2VyL2ltcGxlbWVudGF0aW9uLmJyb3dzZXIuanMKICB2YXIgcmVxdWlyZV9pbXBsZW1lbnRhdGlvbl9icm93c2VyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW1wbGVtZW50YXRpb24uYnJvd3Nlci5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgaXNXb3JrZXJSdW50aW1lID0gZnVuY3Rpb24gaXNXb3JrZXJSdW50aW1lMigpIHsKICAgICAgICBjb25zdCBpc1dpbmRvd0NvbnRleHQgPSB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdpbmRvdzsKICAgICAgICByZXR1cm4gdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiICYmIHNlbGYucG9zdE1lc3NhZ2UgJiYgIWlzV2luZG93Q29udGV4dCA/IHRydWUgOiBmYWxzZTsKICAgICAgfTsKICAgICAgdmFyIHBvc3RNZXNzYWdlVG9NYXN0ZXIgPSBmdW5jdGlvbiBwb3N0TWVzc2FnZVRvTWFzdGVyMihkYXRhLCB0cmFuc2Zlckxpc3QpIHsKICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGRhdGEsIHRyYW5zZmVyTGlzdCk7CiAgICAgIH07CiAgICAgIHZhciBzdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzID0gZnVuY3Rpb24gc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlczIob25NZXNzYWdlKSB7CiAgICAgICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSAobWVzc2FnZUV2ZW50KSA9PiB7CiAgICAgICAgICBvbk1lc3NhZ2UobWVzc2FnZUV2ZW50LmRhdGEpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgICAgICBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBtZXNzYWdlSGFuZGxlcik7CiAgICAgICAgfTsKICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBtZXNzYWdlSGFuZGxlcik7CiAgICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlOwogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gewogICAgICAgIGlzV29ya2VyUnVudGltZSwKICAgICAgICBwb3N0TWVzc2FnZVRvTWFzdGVyLAogICAgICAgIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW5kZXguanMKICB2YXIgcmVxdWlyZV93b3JrZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2F3YWl0ZXIgPSBleHBvcnRzMiAmJiBleHBvcnRzMi5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgewogICAgICAgICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMyICYmIGV4cG9ydHMyLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyAiZGVmYXVsdCI6IG1vZCB9OwogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuZXhwb3NlID0gZXhwb3J0czIuaXNXb3JrZXJSdW50aW1lID0gZXhwb3J0czIuVHJhbnNmZXIgPSBleHBvcnRzMi5yZWdpc3RlclNlcmlhbGl6ZXIgPSB2b2lkIDA7CiAgICAgIHZhciBpc19vYnNlcnZhYmxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9pc19vYnNlcnZhYmxlKCkpOwogICAgICB2YXIgY29tbW9uXzEgPSByZXF1aXJlX2NvbW1vbjIoKTsKICAgICAgdmFyIHRyYW5zZmVyYWJsZV8xID0gcmVxdWlyZV90cmFuc2ZlcmFibGUoKTsKICAgICAgdmFyIG1lc3NhZ2VzXzEgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgaW1wbGVtZW50YXRpb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2ltcGxlbWVudGF0aW9uX2Jyb3dzZXIoKSk7CiAgICAgIHZhciBjb21tb25fMiA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJyZWdpc3RlclNlcmlhbGl6ZXIiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGNvbW1vbl8yLnJlZ2lzdGVyU2VyaWFsaXplcjsKICAgICAgfSB9KTsKICAgICAgdmFyIHRyYW5zZmVyYWJsZV8yID0gcmVxdWlyZV90cmFuc2ZlcmFibGUoKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiVHJhbnNmZXIiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZV8yLlRyYW5zZmVyOwogICAgICB9IH0pOwogICAgICBleHBvcnRzMi5pc1dvcmtlclJ1bnRpbWUgPSBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuaXNXb3JrZXJSdW50aW1lOwogICAgICB2YXIgZXhwb3NlQ2FsbGVkID0gZmFsc2U7CiAgICAgIHZhciBhY3RpdmVTdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpOwogICAgICB2YXIgaXNNYXN0ZXJKb2JDYW5jZWxNZXNzYWdlID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0aGluZy50eXBlID09PSBtZXNzYWdlc18xLk1hc3Rlck1lc3NhZ2VUeXBlLmNhbmNlbDsKICAgICAgdmFyIGlzTWFzdGVySm9iUnVuTWVzc2FnZSA9ICh0aGluZykgPT4gdGhpbmcgJiYgdGhpbmcudHlwZSA9PT0gbWVzc2FnZXNfMS5NYXN0ZXJNZXNzYWdlVHlwZS5ydW47CiAgICAgIHZhciBpc09ic2VydmFibGUgPSAodGhpbmcpID0+IGlzX29ic2VydmFibGVfMS5kZWZhdWx0KHRoaW5nKSB8fCBpc1plbk9ic2VydmFibGUodGhpbmcpOwogICAgICBmdW5jdGlvbiBpc1plbk9ic2VydmFibGUodGhpbmcpIHsKICAgICAgICByZXR1cm4gdGhpbmcgJiYgdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiAmJiB0eXBlb2YgdGhpbmcuc3Vic2NyaWJlID09PSAiZnVuY3Rpb24iOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlY29uc3RydWN0VHJhbnNmZXIodGhpbmcpIHsKICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlXzEuaXNUcmFuc2ZlckRlc2NyaXB0b3IodGhpbmcpID8geyBwYXlsb2FkOiB0aGluZy5zZW5kLCB0cmFuc2ZlcmFibGVzOiB0aGluZy50cmFuc2ZlcmFibGVzIH0gOiB7IHBheWxvYWQ6IHRoaW5nLCB0cmFuc2ZlcmFibGVzOiB2b2lkIDAgfTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0RnVuY3Rpb25Jbml0TWVzc2FnZSgpIHsKICAgICAgICBjb25zdCBpbml0TWVzc2FnZSA9IHsKICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUuaW5pdCwKICAgICAgICAgIGV4cG9zZWQ6IHsKICAgICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoaW5pdE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RNb2R1bGVJbml0TWVzc2FnZShtZXRob2ROYW1lcykgewogICAgICAgIGNvbnN0IGluaXRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5pbml0LAogICAgICAgICAgZXhwb3NlZDogewogICAgICAgICAgICB0eXBlOiAibW9kdWxlIiwKICAgICAgICAgICAgbWV0aG9kczogbWV0aG9kTmFtZXMKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5wb3N0TWVzc2FnZVRvTWFzdGVyKGluaXRNZXNzYWdlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0Sm9iRXJyb3JNZXNzYWdlKHVpZCwgcmF3RXJyb3IpIHsKICAgICAgICBjb25zdCB7IHBheWxvYWQ6IGVycm9yLCB0cmFuc2ZlcmFibGVzIH0gPSBkZWNvbnN0cnVjdFRyYW5zZmVyKHJhd0Vycm9yKTsKICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLmVycm9yLAogICAgICAgICAgdWlkLAogICAgICAgICAgZXJyb3I6IGNvbW1vbl8xLnNlcmlhbGl6ZShlcnJvcikKICAgICAgICB9OwogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5wb3N0TWVzc2FnZVRvTWFzdGVyKGVycm9yTWVzc2FnZSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdEpvYlJlc3VsdE1lc3NhZ2UodWlkLCBjb21wbGV0ZWQsIHJlc3VsdFZhbHVlKSB7CiAgICAgICAgY29uc3QgeyBwYXlsb2FkLCB0cmFuc2ZlcmFibGVzIH0gPSBkZWNvbnN0cnVjdFRyYW5zZmVyKHJlc3VsdFZhbHVlKTsKICAgICAgICBjb25zdCByZXN1bHRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5yZXN1bHQsCiAgICAgICAgICB1aWQsCiAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGVkID8gdHJ1ZSA6IHZvaWQgMCwKICAgICAgICAgIHBheWxvYWQKICAgICAgICB9OwogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5wb3N0TWVzc2FnZVRvTWFzdGVyKHJlc3VsdE1lc3NhZ2UsIHRyYW5zZmVyYWJsZXMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RKb2JTdGFydE1lc3NhZ2UodWlkLCByZXN1bHRUeXBlKSB7CiAgICAgICAgY29uc3Qgc3RhcnRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5ydW5uaW5nLAogICAgICAgICAgdWlkLAogICAgICAgICAgcmVzdWx0VHlwZQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoc3RhcnRNZXNzYWdlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gewogICAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnVuY2F1Z2h0RXJyb3IsCiAgICAgICAgICAgIGVycm9yOiBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpCiAgICAgICAgICB9OwogICAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoZXJyb3JNZXNzYWdlKTsKICAgICAgICB9IGNhdGNoIChzdWJFcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcigiTm90IHJlcG9ydGluZyB1bmNhdWdodCBlcnJvciBiYWNrIHRvIG1hc3RlciB0aHJlYWQgYXMgaXQgb2NjdXJlZCB3aGlsZSByZXBvcnRpbmcgYW4gdW5jYXVnaHQgZXJyb3IgYWxyZWFkeS5cbkxhdGVzdCBlcnJvcjoiLCBzdWJFcnJvciwgIlxuT3JpZ2luYWwgZXJyb3I6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBydW5GdW5jdGlvbihqb2JVSUQsIGZuLCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsKICAgICAgICAgIGxldCBzeW5jUmVzdWx0OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc3luY1Jlc3VsdCA9IGZuKC4uLmFyZ3MpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgcmV0dXJuIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHRUeXBlID0gaXNPYnNlcnZhYmxlKHN5bmNSZXN1bHQpID8gIm9ic2VydmFibGUiIDogInByb21pc2UiOwogICAgICAgICAgcG9zdEpvYlN0YXJ0TWVzc2FnZShqb2JVSUQsIHJlc3VsdFR5cGUpOwogICAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShzeW5jUmVzdWx0KSkgewogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzeW5jUmVzdWx0LnN1YnNjcmliZSgodmFsdWUpID0+IHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgZmFsc2UsIGNvbW1vbl8xLnNlcmlhbGl6ZSh2YWx1ZSkpLCAoZXJyb3IpID0+IHsKICAgICAgICAgICAgICBwb3N0Sm9iRXJyb3JNZXNzYWdlKGpvYlVJRCwgY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKSk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfSwgKCkgPT4gewogICAgICAgICAgICAgIHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgdHJ1ZSk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGFjdGl2ZVN1YnNjcmlwdGlvbnMuc2V0KGpvYlVJRCwgc3Vic2NyaXB0aW9uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgc3luY1Jlc3VsdDsKICAgICAgICAgICAgICBwb3N0Sm9iUmVzdWx0TWVzc2FnZShqb2JVSUQsIHRydWUsIGNvbW1vbl8xLnNlcmlhbGl6ZShyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICBwb3N0Sm9iRXJyb3JNZXNzYWdlKGpvYlVJRCwgY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBleHBvc2UyKGV4cG9zZWQpIHsKICAgICAgICBpZiAoIWltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWUoKSkgewogICAgICAgICAgdGhyb3cgRXJyb3IoImV4cG9zZSgpIGNhbGxlZCBpbiB0aGUgbWFzdGVyIHRocmVhZC4iKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cG9zZUNhbGxlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoImV4cG9zZSgpIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4gVGhpcyBpcyBub3QgcG9zc2libGUuIFBhc3MgYW4gb2JqZWN0IHRvIGV4cG9zZSgpIGlmIHlvdSB3YW50IHRvIGV4cG9zZSBtdWx0aXBsZSBmdW5jdGlvbnMuIik7CiAgICAgICAgfQogICAgICAgIGV4cG9zZUNhbGxlZCA9IHRydWU7CiAgICAgICAgaWYgKHR5cGVvZiBleHBvc2VkID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcygobWVzc2FnZURhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGlzTWFzdGVySm9iUnVuTWVzc2FnZShtZXNzYWdlRGF0YSkgJiYgIW1lc3NhZ2VEYXRhLm1ldGhvZCkgewogICAgICAgICAgICAgIHJ1bkZ1bmN0aW9uKG1lc3NhZ2VEYXRhLnVpZCwgZXhwb3NlZCwgbWVzc2FnZURhdGEuYXJncy5tYXAoY29tbW9uXzEuZGVzZXJpYWxpemUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBwb3N0RnVuY3Rpb25Jbml0TWVzc2FnZSgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9zZWQgPT09ICJvYmplY3QiICYmIGV4cG9zZWQpIHsKICAgICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgICBpZiAoaXNNYXN0ZXJKb2JSdW5NZXNzYWdlKG1lc3NhZ2VEYXRhKSAmJiBtZXNzYWdlRGF0YS5tZXRob2QpIHsKICAgICAgICAgICAgICBydW5GdW5jdGlvbihtZXNzYWdlRGF0YS51aWQsIGV4cG9zZWRbbWVzc2FnZURhdGEubWV0aG9kXSwgbWVzc2FnZURhdGEuYXJncy5tYXAoY29tbW9uXzEuZGVzZXJpYWxpemUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lcyA9IE9iamVjdC5rZXlzKGV4cG9zZWQpLmZpbHRlcigoa2V5KSA9PiB0eXBlb2YgZXhwb3NlZFtrZXldID09PSAiZnVuY3Rpb24iKTsKICAgICAgICAgIHBvc3RNb2R1bGVJbml0TWVzc2FnZShtZXRob2ROYW1lcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHBvc2UoKS4gRXhwZWN0ZWQgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QsIGdvdDogJHtleHBvc2VkfWApOwogICAgICAgIH0KICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcygobWVzc2FnZURhdGEpID0+IHsKICAgICAgICAgIGlmIChpc01hc3RlckpvYkNhbmNlbE1lc3NhZ2UobWVzc2FnZURhdGEpKSB7CiAgICAgICAgICAgIGNvbnN0IGpvYlVJRCA9IG1lc3NhZ2VEYXRhLnVpZDsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gYWN0aXZlU3Vic2NyaXB0aW9ucy5nZXQoam9iVUlEKTsKICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikgewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIGFjdGl2ZVN1YnNjcmlwdGlvbnMuZGVsZXRlKGpvYlVJRCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBleHBvcnRzMi5leHBvc2UgPSBleHBvc2UyOwogICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBzZWxmLmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIgJiYgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIChldmVudCkgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IgfHwgZXZlbnQpLCAyNTApOwogICAgICAgIH0pOwogICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGV2ZW50LnJlYXNvbjsKICAgICAgICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpLCAyNTApOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHByb2Nlc3Mub24gPT09ICJmdW5jdGlvbiIgJiYgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgcHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLCAoZXJyb3IpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGVycm9yKSwgMjUwKTsKICAgICAgICB9KTsKICAgICAgICBwcm9jZXNzLm9uKCJ1bmhhbmRsZWRSZWplY3Rpb24iLCAoZXJyb3IpID0+IHsKICAgICAgICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpLCAyNTApOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIHNyYy9kYXRhLWZldGNoZXJzL3ZjZi92Y2Ytd29ya2VyLnRzP3dvcmtlciZpbmxpbmU/d29ya2VyX2ZpbGUKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3RhYml4SW5kZXhlZEZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9hYm9ydGFibGVfcHJvbWlzZV9jYWNoZSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9lc20oKSk7CiAgdmFyIGltcG9ydF9xdWlja19scnUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfcXVpY2tfbHJ1KCkpOwogIHZhciBpbXBvcnRfYnVmZmVyNyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vaW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9sb2NhbEZpbGUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9jYWxGaWxlKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL3JlbW90ZUZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXIyID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKICB2YXIgUmVtb3RlRmlsZSA9IGNsYXNzIHsKICAgIGFzeW5jIGdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSkgewogICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmJ1ZmZlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiByZXNwb25zZS5idWZmZXIoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2UuYXJyYXlCdWZmZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTsKICAgICAgICByZXR1cm4gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmZyb20ocmVzcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBIVFRQIHJlc3BvbnNlIG9iamVjdCwgaGFzIG5vIGJ1ZmZlciBtZXRob2QsIGFuZCBubyBhcnJheUJ1ZmZlciBtZXRob2QiKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRzID0ge30pIHsKICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0ge307CiAgICAgIHRoaXMudXJsID0gc291cmNlOwogICAgICBjb25zdCBmZXRjaCA9IG9wdHMuZmV0Y2ggfHwgZ2xvYmFsVGhpcy5mZXRjaC5iaW5kKGdsb2JhbFRoaXMpOwogICAgICBpZiAoIWZldGNoKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgbm8gZmV0Y2ggZnVuY3Rpb24gc3VwcGxpZWQsIGFuZCBub25lIGZvdW5kIGluIGdsb2JhbCBlbnZpcm9ubWVudGApOwogICAgICB9CiAgICAgIGlmIChvcHRzLm92ZXJyaWRlcykgewogICAgICAgIHRoaXMuYmFzZU92ZXJyaWRlcyA9IG9wdHMub3ZlcnJpZGVzOwogICAgICB9CiAgICAgIHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbiA9IGZldGNoOwogICAgfQogICAgYXN5bmMgZmV0Y2goaW5wdXQsIGluaXQyKSB7CiAgICAgIGxldCByZXNwb25zZTsKICAgICAgdHJ5IHsKICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgaW5pdDIpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgaWYgKGAke2V9YC5pbmNsdWRlcygiRmFpbGVkIHRvIGZldGNoIikpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgZ2VuZXJpYy1maWxlaGFuZGxlOiByZWZldGNoaW5nICR7aW5wdXR9IHRvIGF0dGVtcHQgdG8gd29yayBhcm91bmQgY2hyb21lIENPUlMgaGVhZGVyIGNhY2hpbmcgYnVnYCk7CiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgewogICAgICAgICAgICAuLi5pbml0MiwKICAgICAgICAgICAgY2FjaGU6ICJyZWxvYWQiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQogICAgYXN5bmMgcmVhZChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgJiYgcG9zaXRpb24gPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIke3RoaXMudXJsfSBmZXRjaCByZXR1cm5lZCBzdGF0dXMgMjAwLCBleHBlY3RlZCAyMDYiKTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZldGNoaW5nICR7dGhpcy51cmx9YCk7CiAgICB9CiAgICBhc3luYyByZWFkRmlsZShvcHRpb25zID0ge30pIHsKICAgICAgbGV0IGVuY29kaW5nOwogICAgICBsZXQgb3B0czsKICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIikgewogICAgICAgIGVuY29kaW5nID0gb3B0aW9uczsKICAgICAgICBvcHRzID0ge307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nOwogICAgICAgIG9wdHMgPSBvcHRpb25zOwogICAgICAgIGRlbGV0ZSBvcHRzLmVuY29kaW5nOwogICAgICB9CiAgICAgIGNvbnN0IHsgaGVhZGVycyA9IHt9LCBzaWduYWwsIG92ZXJyaWRlcyA9IHt9IH0gPSBvcHRzOwogICAgICBjb25zdCBhcmdzID0gewogICAgICAgIGhlYWRlcnMsCiAgICAgICAgbWV0aG9kOiAiR0VUIiwKICAgICAgICByZWRpcmVjdDogImZvbGxvdyIsCiAgICAgICAgbW9kZTogImNvcnMiLAogICAgICAgIHNpZ25hbCwKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdlbmVyaWMtZmlsZWhhbmRsZSBmYWlsZWQgdG8gZmV0Y2giKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZmV0Y2hpbmcgJHt0aGlzLnVybH1gKSwgewogICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IikgewogICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBlbmNvZGluZzogJHtlbmNvZGluZ31gKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJGcm9tUmVzcG9uc2UocmVzcG9uc2UpOwogICAgfQogICAgYXN5bmMgc3RhdCgpIHsKICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgY29uc3QgYnVmID0gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmFsbG9jVW5zYWZlKDEwKTsKICAgICAgICBhd2FpdCB0aGlzLnJlYWQoYnVmLCAwLCAxMCwgMCk7CiAgICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBkZXRlcm1pbmUgc2l6ZSBvZiBmaWxlIGF0ICR7dGhpcy51cmx9YCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zdGF0OwogICAgfQogICAgYXN5bmMgY2xvc2UoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2Jsb2JGaWxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyMyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vZmlsZWhhbmRsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9iZ3pGaWxlaGFuZGxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNiA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiZ3pmLWZpbGVoYW5kbGVAMS40Ljcvbm9kZV9tb2R1bGVzL0BnbW9kL2JnemYtZmlsZWhhbmRsZS9lc20vdW56aXAtcGFrby5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjQgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwogIHZhciBpbXBvcnRfcGFrbyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9wYWtvKCkpOwogIGFzeW5jIGZ1bmN0aW9uIHVuemlwKGlucHV0RGF0YSkgewogICAgdHJ5IHsKICAgICAgbGV0IHN0cm07CiAgICAgIGxldCBwb3MgPSAwOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBsZXQgdG90YWxTaXplID0gMDsKICAgICAgbGV0IGluZmxhdG9yOwogICAgICBkbyB7CiAgICAgICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc3ViYXJyYXkocG9zKTsKICAgICAgICBpbmZsYXRvciA9IG5ldyBpbXBvcnRfcGFrby5JbmZsYXRlKCk7CiAgICAgICAgKHsgc3RybSB9ID0gaW5mbGF0b3IpOwogICAgICAgIGluZmxhdG9yLnB1c2gocmVtYWluaW5nSW5wdXQsIGltcG9ydF9wYWtvLlpfU1lOQ19GTFVTSCk7CiAgICAgICAgaWYgKGluZmxhdG9yLmVycikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGluZmxhdG9yLm1zZyk7CiAgICAgICAgfQogICAgICAgIHBvcyArPSBzdHJtLm5leHRfaW47CiAgICAgICAgY2h1bmtzW2ldID0gaW5mbGF0b3IucmVzdWx0OwogICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgIGkgKz0gMTsKICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7CiAgICAgIGZvciAobGV0IGkyID0gMCwgb2Zmc2V0ID0gMDsgaTIgPCBjaHVua3MubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgcmVzdWx0LnNldChjaHVua3NbaTJdLCBvZmZzZXQpOwogICAgICAgIG9mZnNldCArPSBjaHVua3NbaTJdLmxlbmd0aDsKICAgICAgfQogICAgICByZXR1cm4gaW1wb3J0X2J1ZmZlcjQuQnVmZmVyLmZyb20ocmVzdWx0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGAke2V9YC5tYXRjaCgvaW5jb3JyZWN0IGhlYWRlciBjaGVjay8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJwcm9ibGVtIGRlY29tcHJlc3NpbmcgYmxvY2s6IGluY29ycmVjdCBnemlwIGhlYWRlciBjaGVjayIpOwogICAgICB9CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHVuemlwQ2h1bmtTbGljZShpbnB1dERhdGEsIGNodW5rKSB7CiAgICB0cnkgewogICAgICBsZXQgc3RybTsKICAgICAgY29uc3QgeyBtaW52LCBtYXh2IH0gPSBjaHVuazsKICAgICAgbGV0IGNwb3MgPSBtaW52LmJsb2NrUG9zaXRpb247CiAgICAgIGxldCBkcG9zID0gbWludi5kYXRhUG9zaXRpb247CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBjb25zdCBjcG9zaXRpb25zID0gW107CiAgICAgIGNvbnN0IGRwb3NpdGlvbnMgPSBbXTsKICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7CiAgICAgIGxldCBpID0gMDsKICAgICAgZG8gewogICAgICAgIGNvbnN0IHJlbWFpbmluZ0lucHV0ID0gaW5wdXREYXRhLnN1YmFycmF5KGNwb3MgLSBtaW52LmJsb2NrUG9zaXRpb24pOwogICAgICAgIGNvbnN0IGluZmxhdG9yID0gbmV3IGltcG9ydF9wYWtvLkluZmxhdGUoKTsKICAgICAgICAoeyBzdHJtIH0gPSBpbmZsYXRvcik7CiAgICAgICAgaW5mbGF0b3IucHVzaChyZW1haW5pbmdJbnB1dCwgaW1wb3J0X3Bha28uWl9TWU5DX0ZMVVNIKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYnVmZmVyMiA9IGluZmxhdG9yLnJlc3VsdDsKICAgICAgICBjaHVua3MucHVzaChidWZmZXIyKTsKICAgICAgICBsZXQgbGVuID0gYnVmZmVyMi5sZW5ndGg7CiAgICAgICAgY3Bvc2l0aW9ucy5wdXNoKGNwb3MpOwogICAgICAgIGRwb3NpdGlvbnMucHVzaChkcG9zKTsKICAgICAgICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMSAmJiBtaW52LmRhdGFQb3NpdGlvbikgewogICAgICAgICAgY2h1bmtzWzBdID0gY2h1bmtzWzBdLnN1YmFycmF5KG1pbnYuZGF0YVBvc2l0aW9uKTsKICAgICAgICAgIGxlbiA9IGNodW5rc1swXS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG9yaWdDcG9zID0gY3BvczsKICAgICAgICBjcG9zICs9IHN0cm0ubmV4dF9pbjsKICAgICAgICBkcG9zICs9IGxlbjsKICAgICAgICBpZiAob3JpZ0Nwb3MgPj0gbWF4di5ibG9ja1Bvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3NbaV0gPSBjaHVua3NbaV0uc3ViYXJyYXkoMCwgbWF4di5ibG9ja1Bvc2l0aW9uID09PSBtaW52LmJsb2NrUG9zaXRpb24gPyBtYXh2LmRhdGFQb3NpdGlvbiAtIG1pbnYuZGF0YVBvc2l0aW9uICsgMSA6IG1heHYuZGF0YVBvc2l0aW9uICsgMSk7CiAgICAgICAgICBjcG9zaXRpb25zLnB1c2goY3Bvcyk7CiAgICAgICAgICBkcG9zaXRpb25zLnB1c2goZHBvcyk7CiAgICAgICAgICB0b3RhbFNpemUgKz0gY2h1bmtzW2ldLmxlbmd0aDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0b3RhbFNpemUgKz0gY2h1bmtzW2ldLmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfaW4pOwogICAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSh0b3RhbFNpemUpOwogICAgICBmb3IgKGxldCBpMiA9IDAsIG9mZnNldCA9IDA7IGkyIDwgY2h1bmtzLmxlbmd0aDsgaTIrKykgewogICAgICAgIHJlc3VsdC5zZXQoY2h1bmtzW2kyXSwgb2Zmc2V0KTsKICAgICAgICBvZmZzZXQgKz0gY2h1bmtzW2kyXS5sZW5ndGg7CiAgICAgIH0KICAgICAgY29uc3QgYnVmZmVyID0gaW1wb3J0X2J1ZmZlcjQuQnVmZmVyLmZyb20ocmVzdWx0KTsKICAgICAgcmV0dXJuIHsgYnVmZmVyLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChgJHtlfWAubWF0Y2goL2luY29ycmVjdCBoZWFkZXIgY2hlY2svKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigicHJvYmxlbSBkZWNvbXByZXNzaW5nIGJsb2NrOiBpbmNvcnJlY3QgZ3ppcCBoZWFkZXIgY2hlY2siKTsKICAgICAgfQogICAgICB0aHJvdyBlOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9nemlJbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2xvbmcgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdXRpbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBsb25nVG9OdW1iZXIobG9uZykgewogICAgaWYgKGxvbmcuZ3JlYXRlclRoYW4oTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHx8IGxvbmcubGVzc1RoYW4oTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiaW50ZWdlciBvdmVyZmxvdyIpOwogICAgfQogICAgcmV0dXJuIGxvbmcudG9OdW1iZXIoKTsKICB9CiAgdmFyIEFib3J0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICB9OwogIGZ1bmN0aW9uIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKSB7CiAgICBpZiAoIXNpZ25hbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgaWYgKHR5cGVvZiBET01FeGNlcHRpb24gIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiYWJvcnRlZCIsICJBYm9ydEVycm9yIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgZSA9IG5ldyBBYm9ydEVycm9yKCJhYm9ydGVkIik7CiAgICAgICAgZS5jb2RlID0gIkVSUl9BQk9SVEVEIjsKICAgICAgICB0aHJvdyBlOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNhbk1lcmdlQmxvY2tzKGNodW5rMSwgY2h1bmsyKSB7CiAgICByZXR1cm4gY2h1bmsyLm1pbnYuYmxvY2tQb3NpdGlvbiAtIGNodW5rMS5tYXh2LmJsb2NrUG9zaXRpb24gPCA2NWUzICYmIGNodW5rMi5tYXh2LmJsb2NrUG9zaXRpb24gLSBjaHVuazEubWludi5ibG9ja1Bvc2l0aW9uIDwgNWU2OwogIH0KICBmdW5jdGlvbiBvcHRpbWl6ZUNodW5rcyhjaHVua3MsIGxvd2VzdCkgewogICAgY29uc3QgbWVyZ2VkQ2h1bmtzID0gW107CiAgICBsZXQgbGFzdENodW5rID0gbnVsbDsKICAgIGlmIChjaHVua3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBjaHVua3M7CiAgICB9CiAgICBjaHVua3Muc29ydChmdW5jdGlvbihjMCwgYzEpIHsKICAgICAgY29uc3QgZGlmID0gYzAubWludi5ibG9ja1Bvc2l0aW9uIC0gYzEubWludi5ibG9ja1Bvc2l0aW9uOwogICAgICBpZiAoZGlmICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGRpZjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gYzAubWludi5kYXRhUG9zaXRpb24gLSBjMS5taW52LmRhdGFQb3NpdGlvbjsKICAgICAgfQogICAgfSk7CiAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHsKICAgICAgaWYgKCFsb3dlc3QgfHwgY2h1bmsubWF4di5jb21wYXJlVG8obG93ZXN0KSA+IDApIHsKICAgICAgICBpZiAobGFzdENodW5rID09PSBudWxsKSB7CiAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICBsYXN0Q2h1bmsgPSBjaHVuazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGNhbk1lcmdlQmxvY2tzKGxhc3RDaHVuaywgY2h1bmspKSB7CiAgICAgICAgICAgIGlmIChjaHVuay5tYXh2LmNvbXBhcmVUbyhsYXN0Q2h1bmsubWF4dikgPiAwKSB7CiAgICAgICAgICAgICAgbGFzdENodW5rLm1heHYgPSBjaHVuay5tYXh2OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbWVyZ2VkQ2h1bmtzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3RiaS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2xvbmcyID0gX190b01vZHVsZShyZXF1aXJlX2xvbmcoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS92aXJ0dWFsT2Zmc2V0LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBWaXJ0dWFsT2Zmc2V0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoYmxvY2tQb3NpdGlvbiwgZGF0YVBvc2l0aW9uKSB7CiAgICAgIHRoaXMuYmxvY2tQb3NpdGlvbiA9IGJsb2NrUG9zaXRpb247CiAgICAgIHRoaXMuZGF0YVBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBgJHt0aGlzLmJsb2NrUG9zaXRpb259OiR7dGhpcy5kYXRhUG9zaXRpb259YDsKICAgIH0KICAgIGNvbXBhcmVUbyhiKSB7CiAgICAgIHJldHVybiB0aGlzLmJsb2NrUG9zaXRpb24gLSBiLmJsb2NrUG9zaXRpb24gfHwgdGhpcy5kYXRhUG9zaXRpb24gLSBiLmRhdGFQb3NpdGlvbjsKICAgIH0KICAgIHN0YXRpYyBtaW4oLi4uYXJncykgewogICAgICBsZXQgbWluOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGZvciAoOyAhbWluOyBpICs9IDEpIHsKICAgICAgICBtaW4gPSBhcmdzW2ldOwogICAgICB9CiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgIGlmIChtaW4uY29tcGFyZVRvKGFyZ3NbaV0pID4gMCkgewogICAgICAgICAgbWluID0gYXJnc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG1pbjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlcywgb2Zmc2V0ID0gMCwgYmlnZW5kaWFuID0gZmFsc2UpIHsKICAgIGlmIChiaWdlbmRpYW4pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWctZW5kaWFuIHZpcnR1YWwgZmlsZSBvZmZzZXRzIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBWaXJ0dWFsT2Zmc2V0KGJ5dGVzW29mZnNldCArIDddICogMTA5OTUxMTYyNzc3NiArIGJ5dGVzW29mZnNldCArIDZdICogNDI5NDk2NzI5NiArIGJ5dGVzW29mZnNldCArIDVdICogMTY3NzcyMTYgKyBieXRlc1tvZmZzZXQgKyA0XSAqIDY1NTM2ICsgYnl0ZXNbb2Zmc2V0ICsgM10gKiAyNTYgKyBieXRlc1tvZmZzZXQgKyAyXSwgYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCB8IGJ5dGVzW29mZnNldF0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL2NodW5rLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBDaHVuayA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKG1pbnYsIG1heHYsIGJpbiwgZmV0Y2hlZFNpemUgPSB2b2lkIDApIHsKICAgICAgdGhpcy5taW52ID0gbWludjsKICAgICAgdGhpcy5tYXh2ID0gbWF4djsKICAgICAgdGhpcy5iaW4gPSBiaW47CiAgICAgIHRoaXMuX2ZldGNoZWRTaXplID0gZmV0Y2hlZFNpemU7CiAgICB9CiAgICB0b1VuaXF1ZVN0cmluZygpIHsKICAgICAgcmV0dXJuIGAke3RoaXMubWludn0uLiR7dGhpcy5tYXh2fSAoYmluICR7dGhpcy5iaW59LCBmZXRjaGVkU2l6ZSAke3RoaXMuZmV0Y2hlZFNpemUoKX0pYDsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy50b1VuaXF1ZVN0cmluZygpOwogICAgfQogICAgY29tcGFyZVRvKGIpIHsKICAgICAgcmV0dXJuIHRoaXMubWludi5jb21wYXJlVG8oYi5taW52KSB8fCB0aGlzLm1heHYuY29tcGFyZVRvKGIubWF4dikgfHwgdGhpcy5iaW4gLSBiLmJpbjsKICAgIH0KICAgIGZldGNoZWRTaXplKCkgewogICAgICBpZiAodGhpcy5fZmV0Y2hlZFNpemUgIT09IHZvaWQgMCkgewogICAgICAgIHJldHVybiB0aGlzLl9mZXRjaGVkU2l6ZTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5tYXh2LmJsb2NrUG9zaXRpb24gKyAoMSA8PCAxNikgLSB0aGlzLm1pbnYuYmxvY2tQb3NpdGlvbjsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vaW5kZXhGaWxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBJbmRleEZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMgPSAobikgPT4gbiB9KSB7CiAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGU7CiAgICAgIHRoaXMucmVuYW1lUmVmU2VxID0gcmVuYW1lUmVmU2VxczsKICAgIH0KICAgIGFzeW5jIGdldE1ldGFkYXRhKG9wdHMgPSB7fSkgewogICAgICBjb25zdCB7IGluZGljZXMsIC4uLnJlc3QgfSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIHJldHVybiByZXN0OwogICAgfQogICAgX2ZpbmRGaXJzdERhdGEoY3VycmVudEZkbCwgdmlydHVhbE9mZnNldCkgewogICAgICBpZiAoY3VycmVudEZkbCkgewogICAgICAgIHJldHVybiBjdXJyZW50RmRsLmNvbXBhcmVUbyh2aXJ0dWFsT2Zmc2V0KSA+IDAgPyB2aXJ0dWFsT2Zmc2V0IDogY3VycmVudEZkbDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdmlydHVhbE9mZnNldDsKICAgICAgfQogICAgfQogICAgYXN5bmMgcGFyc2Uob3B0cyA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5wYXJzZVApIHsKICAgICAgICB0aGlzLnBhcnNlUCA9IHRoaXMuX3BhcnNlKG9wdHMpLmNhdGNoKChlKSA9PiB7CiAgICAgICAgICB0aGlzLnBhcnNlUCA9IHZvaWQgMDsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMucGFyc2VQOwogICAgfQogICAgYXN5bmMgaGFzUmVmU2VxKHNlcUlkLCBvcHRzID0ge30pIHsKICAgICAgcmV0dXJuICEhKChhd2FpdCB0aGlzLnBhcnNlKG9wdHMpKS5pbmRpY2VzW3NlcUlkXSB8fCB7fSkuYmluSW5kZXg7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3RiaS5qcwogIHZhciBUQklfTUFHSUMgPSAyMTU3ODMyNDsKICB2YXIgVEFEX0xJRFhfU0hJRlQgPSAxNDsKICBmdW5jdGlvbiByZWcyYmlucyhiZWcsIGVuZCkgewogICAgYmVnICs9IDE7CiAgICBlbmQgLT0gMTsKICAgIHJldHVybiBbCiAgICAgIFswLCAwXSwKICAgICAgWzEgKyAoYmVnID4+IDI2KSwgMSArIChlbmQgPj4gMjYpXSwKICAgICAgWzkgKyAoYmVnID4+IDIzKSwgOSArIChlbmQgPj4gMjMpXSwKICAgICAgWzczICsgKGJlZyA+PiAyMCksIDczICsgKGVuZCA+PiAyMCldLAogICAgICBbNTg1ICsgKGJlZyA+PiAxNyksIDU4NSArIChlbmQgPj4gMTcpXSwKICAgICAgWzQ2ODEgKyAoYmVnID4+IDE0KSwgNDY4MSArIChlbmQgPj4gMTQpXQogICAgXTsKICB9CiAgdmFyIFRhYml4SW5kZXggPSBjbGFzcyBleHRlbmRzIEluZGV4RmlsZSB7CiAgICBhc3luYyBsaW5lQ291bnQocmVmTmFtZSwgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGlmICghaW5kZXhEYXRhKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHJlZklkID0gaW5kZXhEYXRhLnJlZk5hbWVUb0lkW3JlZk5hbWVdOwogICAgICBjb25zdCBpZHggPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghaWR4KSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHsgc3RhdHMgfSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKHN0YXRzKSB7CiAgICAgICAgcmV0dXJuIHN0YXRzLmxpbmVDb3VudDsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBhc3luYyBfcGFyc2Uob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZShvcHRzKTsKICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCB1bnppcChidWYpOwogICAgICBjaGVja0Fib3J0U2lnbmFsKG9wdHMuc2lnbmFsKTsKICAgICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSAhPT0gVEJJX01BR0lDKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBUQkkgZmlsZSIpOwogICAgICB9CiAgICAgIGNvbnN0IHJlZkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoNCk7CiAgICAgIGNvbnN0IGZvcm1hdEZsYWdzID0gYnl0ZXMucmVhZEludDMyTEUoOCk7CiAgICAgIGNvbnN0IGNvb3JkaW5hdGVUeXBlID0gZm9ybWF0RmxhZ3MgJiA2NTUzNiA/ICJ6ZXJvLWJhc2VkLWhhbGYtb3BlbiIgOiAiMS1iYXNlZC1jbG9zZWQiOwogICAgICBjb25zdCBmb3JtYXRPcHRzID0gewogICAgICAgIDA6ICJnZW5lcmljIiwKICAgICAgICAxOiAiU0FNIiwKICAgICAgICAyOiAiVkNGIgogICAgICB9OwogICAgICBjb25zdCBmb3JtYXQgPSBmb3JtYXRPcHRzW2Zvcm1hdEZsYWdzICYgMTVdOwogICAgICBpZiAoIWZvcm1hdCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBUYWJpeCBwcmVzZXQgZm9ybWF0IGZsYWdzICR7Zm9ybWF0RmxhZ3N9YCk7CiAgICAgIH0KICAgICAgY29uc3QgY29sdW1uTnVtYmVycyA9IHsKICAgICAgICByZWY6IGJ5dGVzLnJlYWRJbnQzMkxFKDEyKSwKICAgICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUoMTYpLAogICAgICAgIGVuZDogYnl0ZXMucmVhZEludDMyTEUoMjApCiAgICAgIH07CiAgICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGJ5dGVzLnJlYWRJbnQzMkxFKDI0KTsKICAgICAgY29uc3QgZGVwdGggPSA1OwogICAgICBjb25zdCBtYXhCaW5OdW1iZXIgPSAoKDEgPDwgKGRlcHRoICsgMSkgKiAzKSAtIDEpIC8gNzsKICAgICAgY29uc3QgbWF4UmVmTGVuZ3RoID0gMiAqKiAoMTQgKyBkZXB0aCAqIDMpOwogICAgICBjb25zdCBtZXRhQ2hhciA9IG1ldGFWYWx1ZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUobWV0YVZhbHVlKSA6IG51bGw7CiAgICAgIGNvbnN0IHNraXBMaW5lcyA9IGJ5dGVzLnJlYWRJbnQzMkxFKDI4KTsKICAgICAgY29uc3QgbmFtZVNlY3Rpb25MZW5ndGggPSBieXRlcy5yZWFkSW50MzJMRSgzMik7CiAgICAgIGNvbnN0IHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH0gPSB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zbGljZSgzNiwgMzYgKyBuYW1lU2VjdGlvbkxlbmd0aCkpOwogICAgICBsZXQgY3Vyck9mZnNldCA9IDM2ICsgbmFtZVNlY3Rpb25MZW5ndGg7CiAgICAgIGxldCBmaXJzdERhdGFMaW5lOwogICAgICBjb25zdCBpbmRpY2VzID0gbmV3IEFycmF5KHJlZkNvdW50KS5maWxsKDApLm1hcCgoKSA9PiB7CiAgICAgICAgY29uc3QgYmluQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgY29uc3QgYmluSW5kZXggPSB7fTsKICAgICAgICBsZXQgc3RhdHM7CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiaW5Db3VudDsgaiArPSAxKSB7CiAgICAgICAgICBjb25zdCBiaW4gPSBieXRlcy5yZWFkVUludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICBpZiAoYmluID4gbWF4QmluTnVtYmVyICsgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRhYml4IGluZGV4IGNvbnRhaW5zIHRvbyBtYW55IGJpbnMsIHBsZWFzZSB1c2UgYSBDU0kgaW5kZXgiKTsKICAgICAgICAgIH0gZWxzZSBpZiAoYmluID09PSBtYXhCaW5OdW1iZXIgKyAxKSB7CiAgICAgICAgICAgIGNvbnN0IGNodW5rQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgICAgICBpZiAoY2h1bmtDb3VudCA9PT0gMikgewogICAgICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNiAqIGNodW5rQ291bnQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gbmV3IEFycmF5KGNodW5rQ291bnQpOwogICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgICAgIGNvbnN0IHUgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KTsKICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2OwogICAgICAgICAgICAgIGZpcnN0RGF0YUxpbmUgPSB0aGlzLl9maW5kRmlyc3REYXRhKGZpcnN0RGF0YUxpbmUsIHUpOwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxpbmVhckNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgIGNvbnN0IGxpbmVhckluZGV4ID0gbmV3IEFycmF5KGxpbmVhckNvdW50KTsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmVhckNvdW50OyBrICs9IDEpIHsKICAgICAgICAgIGxpbmVhckluZGV4W2tdID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gODsKICAgICAgICAgIGZpcnN0RGF0YUxpbmUgPSB0aGlzLl9maW5kRmlyc3REYXRhKGZpcnN0RGF0YUxpbmUsIGxpbmVhckluZGV4W2tdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYmluSW5kZXgsIGxpbmVhckluZGV4LCBzdGF0cyB9OwogICAgICB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBpbmRpY2VzLAogICAgICAgIG1ldGFDaGFyLAogICAgICAgIG1heEJpbk51bWJlciwKICAgICAgICBtYXhSZWZMZW5ndGgsCiAgICAgICAgc2tpcExpbmVzLAogICAgICAgIGZpcnN0RGF0YUxpbmUsCiAgICAgICAgY29sdW1uTnVtYmVycywKICAgICAgICBjb29yZGluYXRlVHlwZSwKICAgICAgICBmb3JtYXQsCiAgICAgICAgcmVmSWRUb05hbWUsCiAgICAgICAgcmVmTmFtZVRvSWQsCiAgICAgICAgbWF4QmxvY2tTaXplOiAxIDw8IDE2CiAgICAgIH07CiAgICB9CiAgICBwYXJzZVBzZXVkb0JpbihieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihpbXBvcnRfbG9uZzIuZGVmYXVsdC5mcm9tQnl0ZXNMRShieXRlcy5zbGljZShvZmZzZXQgKyAxNiwgb2Zmc2V0ICsgMjQpLCB0cnVlKSk7CiAgICAgIHJldHVybiB7IGxpbmVDb3VudCB9OwogICAgfQogICAgX3BhcnNlTmFtZUJ5dGVzKG5hbWVzQnl0ZXMpIHsKICAgICAgbGV0IGN1cnJSZWZJZCA9IDA7CiAgICAgIGxldCBjdXJyTmFtZVN0YXJ0ID0gMDsKICAgICAgY29uc3QgcmVmSWRUb05hbWUgPSBbXTsKICAgICAgY29uc3QgcmVmTmFtZVRvSWQgPSB7fTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc0J5dGVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKCFuYW1lc0J5dGVzW2ldKSB7CiAgICAgICAgICBpZiAoY3Vyck5hbWVTdGFydCA8IGkpIHsKICAgICAgICAgICAgbGV0IHJlZk5hbWUgPSBuYW1lc0J5dGVzLnRvU3RyaW5nKCJ1dGY4IiwgY3Vyck5hbWVTdGFydCwgaSk7CiAgICAgICAgICAgIHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcShyZWZOYW1lKTsKICAgICAgICAgICAgcmVmSWRUb05hbWVbY3VyclJlZklkXSA9IHJlZk5hbWU7CiAgICAgICAgICAgIHJlZk5hbWVUb0lkW3JlZk5hbWVdID0gY3VyclJlZklkOwogICAgICAgICAgfQogICAgICAgICAgY3Vyck5hbWVTdGFydCA9IGkgKyAxOwogICAgICAgICAgY3VyclJlZklkICs9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHJlZk5hbWVUb0lkLCByZWZJZFRvTmFtZSB9OwogICAgfQogICAgYXN5bmMgYmxvY2tzRm9yUmFuZ2UocmVmTmFtZSwgbWluLCBtYXgsIG9wdHMgPSB7fSkgewogICAgICBpZiAobWluIDwgMCkgewogICAgICAgIG1pbiA9IDA7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgcmVmSWQgPSBpbmRleERhdGEucmVmTmFtZVRvSWRbcmVmTmFtZV07CiAgICAgIGNvbnN0IGJhID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoIWJhKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGNvbnN0IG1pbk9mZnNldCA9IGJhLmxpbmVhckluZGV4Lmxlbmd0aCA/IGJhLmxpbmVhckluZGV4W21pbiA+PiBUQURfTElEWF9TSElGVCA+PSBiYS5saW5lYXJJbmRleC5sZW5ndGggPyBiYS5saW5lYXJJbmRleC5sZW5ndGggLSAxIDogbWluID4+IFRBRF9MSURYX1NISUZUXSA6IG5ldyBWaXJ0dWFsT2Zmc2V0KDAsIDApOwogICAgICBpZiAoIW1pbk9mZnNldCkgewogICAgICAgIGNvbnNvbGUud2FybigicXVlcnlpbmcgb3V0c2lkZSBvZiBwb3NzaWJsZSB0YWJpeCByYW5nZSIpOwogICAgICB9CiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nQmlucyA9IHJlZzJiaW5zKG1pbiwgbWF4KTsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykgewogICAgICAgIGZvciAobGV0IGJpbiA9IHN0YXJ0OyBiaW4gPD0gZW5kOyBiaW4rKykgewogICAgICAgICAgaWYgKGJhLmJpbkluZGV4W2Jpbl0pIHsKICAgICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXTsKICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBiaW5DaHVua3MubGVuZ3RoOyArK2MpIHsKICAgICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBuaW50diA9IGJhLmxpbmVhckluZGV4Lmxlbmd0aDsKICAgICAgbGV0IGxvd2VzdCA9IG51bGw7CiAgICAgIGNvbnN0IG1pbkxpbiA9IE1hdGgubWluKG1pbiA+PiAxNCwgbmludHYgLSAxKTsKICAgICAgY29uc3QgbWF4TGluID0gTWF0aC5taW4obWF4ID4+IDE0LCBuaW50diAtIDEpOwogICAgICBmb3IgKGxldCBpID0gbWluTGluOyBpIDw9IG1heExpbjsgKytpKSB7CiAgICAgICAgY29uc3QgdnAgPSBiYS5saW5lYXJJbmRleFtpXTsKICAgICAgICBpZiAodnApIHsKICAgICAgICAgIGlmICghbG93ZXN0IHx8IHZwLmNvbXBhcmVUbyhsb3dlc3QpIDwgMCkgewogICAgICAgICAgICBsb3dlc3QgPSB2cDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vY3NpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzMgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKICB2YXIgQ1NJMV9NQUdJQyA9IDIxNTgyNjU5OwogIHZhciBDU0kyX01BR0lDID0gMzgzNTk4NzU7CiAgZnVuY3Rpb24gbHNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIG51bSAqIDIgKiogYml0czsKICB9CiAgZnVuY3Rpb24gcnNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIE1hdGguZmxvb3IobnVtIC8gMiAqKiBiaXRzKTsKICB9CiAgdmFyIENTSSA9IGNsYXNzIGV4dGVuZHMgSW5kZXhGaWxlIHsKICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHsKICAgICAgc3VwZXIoYXJncyk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gMDsKICAgICAgdGhpcy5kZXB0aCA9IDA7CiAgICAgIHRoaXMubWluU2hpZnQgPSAwOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZk5hbWUsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBpZiAoIWluZGV4RGF0YSkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCByZWZJZCA9IGluZGV4RGF0YS5yZWZOYW1lVG9JZFtyZWZOYW1lXTsKICAgICAgY29uc3QgaWR4ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoIWlkeCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCB7IHN0YXRzIH0gPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmIChzdGF0cykgewogICAgICAgIHJldHVybiBzdGF0cy5saW5lQ291bnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgYXN5bmMgaW5kZXhDb3YoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ1NJIGluZGV4ZXMgZG8gbm90IHN1cHBvcnQgaW5kZXhjb3YiKTsKICAgIH0KICAgIHBhcnNlQXV4RGF0YShieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGZvcm1hdEZsYWdzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0KTsKICAgICAgY29uc3QgY29vcmRpbmF0ZVR5cGUgPSBmb3JtYXRGbGFncyAmIDY1NTM2ID8gInplcm8tYmFzZWQtaGFsZi1vcGVuIiA6ICIxLWJhc2VkLWNsb3NlZCI7CiAgICAgIGNvbnN0IGZvcm1hdCA9IHsgMDogImdlbmVyaWMiLCAxOiAiU0FNIiwgMjogIlZDRiIgfVtmb3JtYXRGbGFncyAmIDE1XTsKICAgICAgaWYgKCFmb3JtYXQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgVGFiaXggcHJlc2V0IGZvcm1hdCBmbGFncyAke2Zvcm1hdEZsYWdzfWApOwogICAgICB9CiAgICAgIGNvbnN0IGNvbHVtbk51bWJlcnMgPSB7CiAgICAgICAgcmVmOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyA0KSwKICAgICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgOCksCiAgICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxMikKICAgICAgfTsKICAgICAgY29uc3QgbWV0YVZhbHVlID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMTYpOwogICAgICBjb25zdCBtZXRhQ2hhciA9IG1ldGFWYWx1ZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUobWV0YVZhbHVlKSA6IG51bGw7CiAgICAgIGNvbnN0IHNraXBMaW5lcyA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDIwKTsKICAgICAgY29uc3QgbmFtZVNlY3Rpb25MZW5ndGggPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAyNCk7CiAgICAgIGNvbnN0IHsgcmVmSWRUb05hbWUsIHJlZk5hbWVUb0lkIH0gPSB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zbGljZShvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMjggKyBuYW1lU2VjdGlvbkxlbmd0aCkpOwogICAgICByZXR1cm4gewogICAgICAgIHJlZklkVG9OYW1lLAogICAgICAgIHJlZk5hbWVUb0lkLAogICAgICAgIHNraXBMaW5lcywKICAgICAgICBtZXRhQ2hhciwKICAgICAgICBjb2x1bW5OdW1iZXJzLAogICAgICAgIGZvcm1hdCwKICAgICAgICBjb29yZGluYXRlVHlwZQogICAgICB9OwogICAgfQogICAgX3BhcnNlTmFtZUJ5dGVzKG5hbWVzQnl0ZXMpIHsKICAgICAgbGV0IGN1cnJSZWZJZCA9IDA7CiAgICAgIGxldCBjdXJyTmFtZVN0YXJ0ID0gMDsKICAgICAgY29uc3QgcmVmSWRUb05hbWUgPSBbXTsKICAgICAgY29uc3QgcmVmTmFtZVRvSWQgPSB7fTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc0J5dGVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKCFuYW1lc0J5dGVzW2ldKSB7CiAgICAgICAgICBpZiAoY3Vyck5hbWVTdGFydCA8IGkpIHsKICAgICAgICAgICAgbGV0IHJlZk5hbWUgPSBuYW1lc0J5dGVzLnRvU3RyaW5nKCJ1dGY4IiwgY3Vyck5hbWVTdGFydCwgaSk7CiAgICAgICAgICAgIHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcShyZWZOYW1lKTsKICAgICAgICAgICAgcmVmSWRUb05hbWVbY3VyclJlZklkXSA9IHJlZk5hbWU7CiAgICAgICAgICAgIHJlZk5hbWVUb0lkW3JlZk5hbWVdID0gY3VyclJlZklkOwogICAgICAgICAgfQogICAgICAgICAgY3Vyck5hbWVTdGFydCA9IGkgKyAxOwogICAgICAgICAgY3VyclJlZklkICs9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHJlZk5hbWVUb0lkLCByZWZJZFRvTmFtZSB9OwogICAgfQogICAgYXN5bmMgX3BhcnNlKG9wdHMgPSB7fSkgewogICAgICBjb25zdCBieXRlcyA9IGF3YWl0IHVuemlwKGF3YWl0IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZShvcHRzKSk7CiAgICAgIGxldCBjc2lWZXJzaW9uOwogICAgICBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kxX01BR0lDKSB7CiAgICAgICAgY3NpVmVyc2lvbiA9IDE7CiAgICAgIH0gZWxzZSBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kyX01BR0lDKSB7CiAgICAgICAgY3NpVmVyc2lvbiA9IDI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBDU0kgZmlsZSIpOwogICAgICB9CiAgICAgIHRoaXMubWluU2hpZnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KTsKICAgICAgdGhpcy5kZXB0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDgpOwogICAgICB0aGlzLm1heEJpbk51bWJlciA9ICgoMSA8PCAodGhpcy5kZXB0aCArIDEpICogMykgLSAxKSAvIDc7CiAgICAgIGNvbnN0IG1heFJlZkxlbmd0aCA9IDIgKiogKHRoaXMubWluU2hpZnQgKyB0aGlzLmRlcHRoICogMyk7CiAgICAgIGNvbnN0IGF1eExlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDEyKTsKICAgICAgY29uc3QgYXV4ID0gYXV4TGVuZ3RoICYmIGF1eExlbmd0aCA+PSAzMCA/IHRoaXMucGFyc2VBdXhEYXRhKGJ5dGVzLCAxNikgOiB7CiAgICAgICAgcmVmSWRUb05hbWU6IFtdLAogICAgICAgIHJlZk5hbWVUb0lkOiB7fSwKICAgICAgICBtZXRhQ2hhcjogbnVsbCwKICAgICAgICBjb2x1bW5OdW1iZXJzOiB7IHJlZjogMCwgc3RhcnQ6IDEsIGVuZDogMiB9LAogICAgICAgIGNvb3JkaW5hdGVUeXBlOiAiemVyby1iYXNlZC1oYWxmLW9wZW4iLAogICAgICAgIGZvcm1hdDogImdlbmVyaWMiCiAgICAgIH07CiAgICAgIGNvbnN0IHJlZkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoMTYgKyBhdXhMZW5ndGgpOwogICAgICBsZXQgZmlyc3REYXRhTGluZTsKICAgICAgbGV0IGN1cnJPZmZzZXQgPSAxNiArIGF1eExlbmd0aCArIDQ7CiAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgQXJyYXkocmVmQ291bnQpLmZpbGwoMCkubWFwKCgpID0+IHsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICBjb25zdCBiaW5JbmRleCA9IHt9OwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGlmIChiaW4gPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgICBzdGF0cyA9IHRoaXMucGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIGN1cnJPZmZzZXQgKyA0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0ICsgOCArIDQgKyAxNiArIDE2OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbG9mZnNldCA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDQpOwogICAgICAgICAgICBmaXJzdERhdGFMaW5lID0gdGhpcy5fZmluZEZpcnN0RGF0YShmaXJzdERhdGFMaW5lLCBsb2Zmc2V0KTsKICAgICAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQgKyAxMik7CiAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMTY7CiAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IG5ldyBBcnJheShjaHVua0NvdW50KTsKICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjaHVua0NvdW50OyBrICs9IDEpIHsKICAgICAgICAgICAgICBjb25zdCB1ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgICBjb25zdCB2ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0ICsgOCk7CiAgICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgICBjaHVua3Nba10gPSBuZXcgQ2h1bmsodSwgdiwgYmluKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBiaW5JbmRleFtiaW5dID0gY2h1bmtzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4geyBiaW5JbmRleCwgc3RhdHMgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgLi4uYXV4LAogICAgICAgIGNzaTogdHJ1ZSwKICAgICAgICByZWZDb3VudCwKICAgICAgICBtYXhCbG9ja1NpemU6IDEgPDwgMTYsCiAgICAgICAgZmlyc3REYXRhTGluZSwKICAgICAgICBjc2lWZXJzaW9uLAogICAgICAgIGluZGljZXMsCiAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsCiAgICAgICAgbWF4QmluTnVtYmVyOiB0aGlzLm1heEJpbk51bWJlciwKICAgICAgICBtYXhSZWZMZW5ndGgKICAgICAgfTsKICAgIH0KICAgIHBhcnNlUHNldWRvQmluKGJ5dGVzLCBvZmZzZXQpIHsKICAgICAgY29uc3QgbGluZUNvdW50ID0gbG9uZ1RvTnVtYmVyKGltcG9ydF9sb25nMy5kZWZhdWx0LmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDI4LCBvZmZzZXQgKyAzNiksIHRydWUpKTsKICAgICAgcmV0dXJuIHsgbGluZUNvdW50IH07CiAgICB9CiAgICBhc3luYyBibG9ja3NGb3JSYW5nZShyZWZOYW1lLCBtaW4sIG1heCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChtaW4gPCAwKSB7CiAgICAgICAgbWluID0gMDsKICAgICAgfQogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBpZiAoIWluZGV4RGF0YSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCByZWZJZCA9IGluZGV4RGF0YS5yZWZOYW1lVG9JZFtyZWZOYW1lXTsKICAgICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghYmEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdCaW5zID0gdGhpcy5yZWcyYmlucyhtaW4sIG1heCk7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IFtzdGFydCwgZW5kXSBvZiBvdmVybGFwcGluZ0JpbnMpIHsKICAgICAgICBmb3IgKGxldCBiaW4gPSBzdGFydDsgYmluIDw9IGVuZDsgYmluKyspIHsKICAgICAgICAgIGlmIChiYS5iaW5JbmRleFtiaW5dKSB7CiAgICAgICAgICAgIGNvbnN0IGJpbkNodW5rcyA9IGJhLmJpbkluZGV4W2Jpbl07CiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgYmluQ2h1bmtzLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICAgICAgY2h1bmtzLnB1c2gobmV3IENodW5rKGJpbkNodW5rc1tjXS5taW52LCBiaW5DaHVua3NbY10ubWF4diwgYmluKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbmV3IFZpcnR1YWxPZmZzZXQoMCwgMCkpOwogICAgfQogICAgcmVnMmJpbnMoYmVnLCBlbmQpIHsKICAgICAgYmVnIC09IDE7CiAgICAgIGlmIChiZWcgPCAxKSB7CiAgICAgICAgYmVnID0gMTsKICAgICAgfQogICAgICBpZiAoZW5kID4gMiAqKiA1MCkgewogICAgICAgIGVuZCA9IDIgKiogMzQ7CiAgICAgIH0KICAgICAgZW5kIC09IDE7CiAgICAgIGxldCBsID0gMDsKICAgICAgbGV0IHQgPSAwOwogICAgICBsZXQgcyA9IHRoaXMubWluU2hpZnQgKyB0aGlzLmRlcHRoICogMzsKICAgICAgY29uc3QgYmlucyA9IFtdOwogICAgICBmb3IgKDsgbCA8PSB0aGlzLmRlcHRoOyBzIC09IDMsIHQgKz0gbHNoaWZ0KDEsIGwgKiAzKSwgbCArPSAxKSB7CiAgICAgICAgY29uc3QgYiA9IHQgKyByc2hpZnQoYmVnLCBzKTsKICAgICAgICBjb25zdCBlID0gdCArIHJzaGlmdChlbmQsIHMpOwogICAgICAgIGlmIChlIC0gYiArIGJpbnMubGVuZ3RoID4gdGhpcy5tYXhCaW5OdW1iZXIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcXVlcnkgJHtiZWd9LSR7ZW5kfSBpcyB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgYmlubmluZyBzY2hlbWUgKHNoaWZ0ICR7dGhpcy5taW5TaGlmdH0sIGRlcHRoICR7dGhpcy5kZXB0aH0pLCB0cnkgYSBzbWFsbGVyIHF1ZXJ5IG9yIGEgY29hcnNlciBpbmRleCBiaW5uaW5nIHNjaGVtZWApOwogICAgICAgIH0KICAgICAgICBiaW5zLnB1c2goW2IsIGVdKTsKICAgICAgfQogICAgICByZXR1cm4gYmluczsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGFiaXhJbmRleGVkRmlsZS5qcwogIHZhciBkZWNvZGVyID0gdHlwZW9mIFRleHREZWNvZGVyICE9PSAidW5kZWZpbmVkIiA/IG5ldyBUZXh0RGVjb2RlcigidXRmLTgiKSA6IHZvaWQgMDsKICBmdW5jdGlvbiB0aW1lb3V0KHRpbWUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lKSk7CiAgfQogIHZhciBUYWJpeEluZGV4ZWRGaWxlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoeyBwYXRoLCBmaWxlaGFuZGxlLCB0YmlQYXRoLCB0YmlGaWxlaGFuZGxlLCBjc2lQYXRoLCBjc2lGaWxlaGFuZGxlLCB5aWVsZFRpbWUgPSA1MDAsIGNodW5rU2l6ZUxpbWl0ID0gNWU3LCByZW5hbWVSZWZTZXFzID0gKG4pID0+IG4sIGNodW5rQ2FjaGVTaXplID0gNSAqIDIgKiogMjAgfSkgewogICAgICBpZiAoZmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGU7CiAgICAgIH0gZWxzZSBpZiAocGF0aCkgewogICAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IG5ldyBpbXBvcnRfbG9jYWxGaWxlLmRlZmF1bHQocGF0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwcm92aWRlIGVpdGhlciBmaWxlaGFuZGxlIG9yIHBhdGgiKTsKICAgICAgfQogICAgICBpZiAodGJpRmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgVGFiaXhJbmRleCh7CiAgICAgICAgICBmaWxlaGFuZGxlOiB0YmlGaWxlaGFuZGxlLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGNzaUZpbGVoYW5kbGUpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IENTSSh7CiAgICAgICAgICBmaWxlaGFuZGxlOiBjc2lGaWxlaGFuZGxlLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHRiaVBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IFRhYml4SW5kZXgoewogICAgICAgICAgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdCh0YmlQYXRoKSwKICAgICAgICAgIHJlbmFtZVJlZlNlcXMKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChjc2lQYXRoKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBDU0koewogICAgICAgICAgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChjc2lQYXRoKSwKICAgICAgICAgIHJlbmFtZVJlZlNlcXMKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChwYXRoKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBUYWJpeEluZGV4KHsKICAgICAgICAgIGZpbGVoYW5kbGU6IG5ldyBpbXBvcnRfbG9jYWxGaWxlLmRlZmF1bHQoYCR7cGF0aH0udGJpYCksCiAgICAgICAgICByZW5hbWVSZWZTZXFzCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwcm92aWRlIG9uZSBvZiB0YmlGaWxlaGFuZGxlLCB0YmlQYXRoLCBjc2lGaWxlaGFuZGxlLCBvciBjc2lQYXRoIik7CiAgICAgIH0KICAgICAgdGhpcy5jaHVua1NpemVMaW1pdCA9IGNodW5rU2l6ZUxpbWl0OwogICAgICB0aGlzLnJlbmFtZVJlZlNlcSA9IHJlbmFtZVJlZlNlcXM7CiAgICAgIHRoaXMueWllbGRUaW1lID0geWllbGRUaW1lOwogICAgICB0aGlzLmNodW5rQ2FjaGUgPSBuZXcgaW1wb3J0X2Fib3J0YWJsZV9wcm9taXNlX2NhY2hlLmRlZmF1bHQoewogICAgICAgIGNhY2hlOiBuZXcgaW1wb3J0X3F1aWNrX2xydS5kZWZhdWx0KHsgbWF4U2l6ZTogTWF0aC5mbG9vcihjaHVua0NhY2hlU2l6ZSAvICgxIDw8IDE2KSkgfSksCiAgICAgICAgZmlsbDogKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5yZWFkQ2h1bmsoYXJncywgeyBzaWduYWwgfSkKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBnZXRMaW5lcyhyZWZOYW1lLCBzdGFydCwgZW5kLCBvcHRzKSB7CiAgICAgIGxldCBzaWduYWw7CiAgICAgIGxldCBvcHRpb25zID0ge307CiAgICAgIGxldCBjYWxsYmFjazsKICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImxpbmUgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIGNhbGxiYWNrID0gb3B0czsKICAgICAgfSBlbHNlIHsKICAgICAgICBvcHRpb25zID0gb3B0czsKICAgICAgICBjYWxsYmFjayA9IG9wdHMubGluZUNhbGxiYWNrOwogICAgICB9CiAgICAgIGlmIChyZWZOYW1lID09PSB2b2lkIDApIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHByb3ZpZGUgYSByZWZlcmVuY2Ugc2VxdWVuY2UgbmFtZSIpOwogICAgICB9CiAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJsaW5lIGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQiKTsKICAgICAgfQogICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuaW5kZXguZ2V0TWV0YWRhdGEob3B0aW9ucyk7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKTsKICAgICAgaWYgKCFzdGFydCkgewogICAgICAgIHN0YXJ0ID0gMDsKICAgICAgfQogICAgICBpZiAoIWVuZCkgewogICAgICAgIGVuZCA9IG1ldGFkYXRhLm1heFJlZkxlbmd0aDsKICAgICAgfQogICAgICBpZiAoIShzdGFydCA8PSBlbmQpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdGFydCBhbmQgZW5kIGNvb3JkaW5hdGVzLiBzdGFydCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBlbmQiKTsKICAgICAgfQogICAgICBpZiAoc3RhcnQgPT09IGVuZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBjaHVua3MgPSBhd2FpdCB0aGlzLmluZGV4LmJsb2Nrc0ZvclJhbmdlKHJlZk5hbWUsIHN0YXJ0LCBlbmQsIG9wdGlvbnMpOwogICAgICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgY29uc3Qgc2l6ZSA9IGNodW5rc1tpXS5mZXRjaGVkU2l6ZSgpOwogICAgICAgIGlmIChzaXplID4gdGhpcy5jaHVua1NpemVMaW1pdCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb28gbXVjaCBkYXRhLiBDaHVuayBzaXplICR7c2l6ZS50b0xvY2FsZVN0cmluZygpfSBieXRlcyBleGNlZWRzIGNodW5rU2l6ZUxpbWl0IG9mICR7dGhpcy5jaHVua1NpemVMaW1pdC50b0xvY2FsZVN0cmluZygpfS5gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IGxhc3QgPSBEYXRlLm5vdygpOwogICAgICBmb3IgKGxldCBjaHVua051bSA9IDA7IGNodW5rTnVtIDwgY2h1bmtzLmxlbmd0aDsgY2h1bmtOdW0gKz0gMSkgewogICAgICAgIGxldCBwcmV2aW91c1N0YXJ0Q29vcmRpbmF0ZTsKICAgICAgICBjb25zdCBjID0gY2h1bmtzW2NodW5rTnVtXTsKICAgICAgICBjb25zdCB7IGJ1ZmZlciwgY3Bvc2l0aW9ucywgZHBvc2l0aW9ucyB9ID0gYXdhaXQgdGhpcy5jaHVua0NhY2hlLmdldChjLnRvU3RyaW5nKCksIGMpOwogICAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKTsKICAgICAgICBsZXQgYmxvY2tTdGFydCA9IDA7CiAgICAgICAgbGV0IHBvcyA9IDA7CiAgICAgICAgd2hpbGUgKGJsb2NrU3RhcnQgPCBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBuID0gYnVmZmVyLmluZGV4T2YoIlxuIiwgYmxvY2tTdGFydCk7CiAgICAgICAgICBpZiAobiA9PT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBiID0gYnVmZmVyLnNsaWNlKGJsb2NrU3RhcnQsIG4pOwogICAgICAgICAgY29uc3QgbGluZSA9IChkZWNvZGVyID09PSBudWxsIHx8IGRlY29kZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlY29kZXIuZGVjb2RlKGIpKSB8fCBiLnRvU3RyaW5nKCk7CiAgICAgICAgICBpZiAoZHBvc2l0aW9ucykgewogICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFydCArIGMubWludi5kYXRhUG9zaXRpb24gPj0gZHBvc2l0aW9uc1twb3MrK10pIHsKICAgICAgICAgICAgfQogICAgICAgICAgICBwb3MtLTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb29yZGluYXRlLCBvdmVybGFwcyB9ID0gdGhpcy5jaGVja0xpbmUobWV0YWRhdGEsIHJlZk5hbWUsIHN0YXJ0LCBlbmQsIGxpbmUpOwogICAgICAgICAgaWYgKHByZXZpb3VzU3RhcnRDb29yZGluYXRlICE9PSB2b2lkIDAgJiYgc3RhcnRDb29yZGluYXRlICE9PSB2b2lkIDAgJiYgcHJldmlvdXNTdGFydENvb3JkaW5hdGUgPiBzdGFydENvb3JkaW5hdGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lcyBub3Qgc29ydGVkIGJ5IHN0YXJ0IGNvb3JkaW5hdGUgKCR7cHJldmlvdXNTdGFydENvb3JkaW5hdGV9ID4gJHtzdGFydENvb3JkaW5hdGV9KSwgdGhpcyBmaWxlIGlzIG5vdCB1c2FibGUgd2l0aCBUYWJpeC5gKTsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZpb3VzU3RhcnRDb29yZGluYXRlID0gc3RhcnRDb29yZGluYXRlOwogICAgICAgICAgaWYgKG92ZXJsYXBzKSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGxpbmUudHJpbSgpLCBjcG9zaXRpb25zW3Bvc10gKiAoMSA8PCA4KSArIChibG9ja1N0YXJ0IC0gZHBvc2l0aW9uc1twb3NdKSArIGMubWludi5kYXRhUG9zaXRpb24gKyAxKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRDb29yZGluYXRlICE9PSB2b2lkIDAgJiYgc3RhcnRDb29yZGluYXRlID49IGVuZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy55aWVsZFRpbWUgJiYgbGFzdCAtIERhdGUubm93KCkgPiB0aGlzLnlpZWxkVGltZSkgewogICAgICAgICAgICBsYXN0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpOwogICAgICAgICAgICBhd2FpdCB0aW1lb3V0KDEpOwogICAgICAgICAgfQogICAgICAgICAgYmxvY2tTdGFydCA9IG4gKyAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZ2V0TWV0YWRhdGEob3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmluZGV4LmdldE1ldGFkYXRhKG9wdHMpOwogICAgfQogICAgYXN5bmMgZ2V0SGVhZGVyQnVmZmVyKG9wdHMgPSB7fSkgewogICAgICBjb25zdCB7IGZpcnN0RGF0YUxpbmUsIG1ldGFDaGFyLCBtYXhCbG9ja1NpemUgfSA9IGF3YWl0IHRoaXMuZ2V0TWV0YWRhdGEob3B0cyk7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwob3B0cy5zaWduYWwpOwogICAgICBjb25zdCBtYXhGZXRjaCA9ICgoZmlyc3REYXRhTGluZSA9PT0gbnVsbCB8fCBmaXJzdERhdGFMaW5lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaXJzdERhdGFMaW5lLmJsb2NrUG9zaXRpb24pIHx8IDApICsgbWF4QmxvY2tTaXplOwogICAgICBsZXQgYnl0ZXMgPSBhd2FpdCB0aGlzLl9yZWFkUmVnaW9uKDAsIG1heEZldGNoLCBvcHRzKTsKICAgICAgY2hlY2tBYm9ydFNpZ25hbChvcHRzLnNpZ25hbCk7CiAgICAgIHRyeSB7CiAgICAgICAgYnl0ZXMgPSBhd2FpdCB1bnppcChieXRlcyk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgZGVjb21wcmVzc2luZyBibG9jayAke2UuY29kZX0gYXQgMCAobGVuZ3RoICR7bWF4RmV0Y2h9KSAke2V9YCk7CiAgICAgIH0KICAgICAgaWYgKG1ldGFDaGFyKSB7CiAgICAgICAgbGV0IGxhc3ROZXdsaW5lID0gLTE7CiAgICAgICAgY29uc3QgbmV3bGluZUJ5dGUgPSAiXG4iLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgY29uc3QgbWV0YUJ5dGUgPSBtZXRhQ2hhci5jaGFyQ29kZUF0KDApOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGlmIChpID09PSBsYXN0TmV3bGluZSArIDEgJiYgYnl0ZXNbaV0gIT09IG1ldGFCeXRlKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJ5dGVzW2ldID09PSBuZXdsaW5lQnl0ZSkgewogICAgICAgICAgICBsYXN0TmV3bGluZSA9IGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJ5dGVzID0gYnl0ZXMuc2xpY2UoMCwgbGFzdE5ld2xpbmUgKyAxKTsKICAgICAgfQogICAgICByZXR1cm4gYnl0ZXM7CiAgICB9CiAgICBhc3luYyBnZXRIZWFkZXIob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgdGhpcy5nZXRIZWFkZXJCdWZmZXIob3B0cyk7CiAgICAgIHJldHVybiBieXRlcy50b1N0cmluZygidXRmOCIpOwogICAgfQogICAgYXN5bmMgZ2V0UmVmZXJlbmNlU2VxdWVuY2VOYW1lcyhvcHRzID0ge30pIHsKICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLmdldE1ldGFkYXRhKG9wdHMpOwogICAgICByZXR1cm4gbWV0YWRhdGEucmVmSWRUb05hbWU7CiAgICB9CiAgICBjaGVja0xpbmUobWV0YWRhdGEsIHJlZ2lvblJlZk5hbWUsIHJlZ2lvblN0YXJ0LCByZWdpb25FbmQsIGxpbmUpIHsKICAgICAgY29uc3QgeyBjb2x1bW5OdW1iZXJzLCBtZXRhQ2hhciwgY29vcmRpbmF0ZVR5cGUsIGZvcm1hdCB9ID0gbWV0YWRhdGE7CiAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gbWV0YUNoYXIpIHsKICAgICAgICByZXR1cm4geyBvdmVybGFwczogZmFsc2UgfTsKICAgICAgfQogICAgICBsZXQgeyByZWYsIHN0YXJ0LCBlbmQgfSA9IGNvbHVtbk51bWJlcnM7CiAgICAgIGlmICghcmVmKSB7CiAgICAgICAgcmVmID0gMDsKICAgICAgfQogICAgICBpZiAoIXN0YXJ0KSB7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICB9CiAgICAgIGlmICghZW5kKSB7CiAgICAgICAgZW5kID0gMDsKICAgICAgfQogICAgICBpZiAoZm9ybWF0ID09PSAiVkNGIikgewogICAgICAgIGVuZCA9IDg7CiAgICAgIH0KICAgICAgY29uc3QgbWF4Q29sdW1uID0gTWF0aC5tYXgocmVmLCBzdGFydCwgZW5kKTsKICAgICAgbGV0IGN1cnJlbnRDb2x1bW5OdW1iZXIgPSAxOwogICAgICBsZXQgY3VycmVudENvbHVtblN0YXJ0ID0gMDsKICAgICAgbGV0IHJlZlNlcSA9ICIiOwogICAgICBsZXQgc3RhcnRDb29yZGluYXRlID0gLUluZmluaXR5OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoICsgMTsgaSArPSAxKSB7CiAgICAgICAgaWYgKGxpbmVbaV0gPT09ICIJIiB8fCBpID09PSBsaW5lLmxlbmd0aCkgewogICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPT09IHJlZikgewogICAgICAgICAgICBpZiAodGhpcy5yZW5hbWVSZWZTZXEobGluZS5zbGljZShjdXJyZW50Q29sdW1uU3RhcnQsIGkpKSAhPT0gcmVnaW9uUmVmTmFtZSkgewogICAgICAgICAgICAgIHJldHVybiB7IG92ZXJsYXBzOiBmYWxzZSB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPT09IHN0YXJ0KSB7CiAgICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZSA9IHBhcnNlSW50KGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKSwgMTApOwogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZVR5cGUgPT09ICIxLWJhc2VkLWNsb3NlZCIpIHsKICAgICAgICAgICAgICBzdGFydENvb3JkaW5hdGUgLT0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RhcnRDb29yZGluYXRlID49IHJlZ2lvbkVuZCkgewogICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0Q29vcmRpbmF0ZSwgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGVuZCA9PT0gMCB8fCBlbmQgPT09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29vcmRpbmF0ZSArIDEgPD0gcmVnaW9uU3RhcnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0Q29vcmRpbmF0ZSwgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gIlZDRiIgJiYgY3VycmVudENvbHVtbk51bWJlciA9PT0gNCkgewogICAgICAgICAgICByZWZTZXEgPSBsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPT09IGVuZCkgewogICAgICAgICAgICBsZXQgZW5kQ29vcmRpbmF0ZTsKICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gIlZDRiIpIHsKICAgICAgICAgICAgICBlbmRDb29yZGluYXRlID0gdGhpcy5fZ2V0VmNmRW5kKHN0YXJ0Q29vcmRpbmF0ZSwgcmVmU2VxLCBsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVuZENvb3JkaW5hdGUgPSBwYXJzZUludChsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSksIDEwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kQ29vcmRpbmF0ZSA8PSByZWdpb25TdGFydCkgewogICAgICAgICAgICAgIHJldHVybiB7IG92ZXJsYXBzOiBmYWxzZSB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50Q29sdW1uU3RhcnQgPSBpICsgMTsKICAgICAgICAgIGN1cnJlbnRDb2x1bW5OdW1iZXIgKz0gMTsKICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uTnVtYmVyID4gbWF4Q29sdW1uKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyBzdGFydENvb3JkaW5hdGUsIG92ZXJsYXBzOiB0cnVlIH07CiAgICB9CiAgICBfZ2V0VmNmRW5kKHN0YXJ0Q29vcmRpbmF0ZSwgcmVmU2VxLCBpbmZvKSB7CiAgICAgIGxldCBlbmRDb29yZGluYXRlID0gc3RhcnRDb29yZGluYXRlICsgcmVmU2VxLmxlbmd0aDsKICAgICAgY29uc3QgaXNUUkEgPSBpbmZvLmluZGV4T2YoIlNWVFlQRT1UUkEiKSAhPT0gLTE7CiAgICAgIGlmIChpbmZvWzBdICE9PSAiLiIgJiYgIWlzVFJBKSB7CiAgICAgICAgbGV0IHByZXZDaGFyID0gIjsiOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5mby5sZW5ndGg7IGogKz0gMSkgewogICAgICAgICAgaWYgKHByZXZDaGFyID09PSAiOyIgJiYgaW5mby5zbGljZShqLCBqICsgNCkgPT09ICJFTkQ9IikgewogICAgICAgICAgICBsZXQgdmFsdWVFbmQgPSBpbmZvLmluZGV4T2YoIjsiLCBqKTsKICAgICAgICAgICAgaWYgKHZhbHVlRW5kID09PSAtMSkgewogICAgICAgICAgICAgIHZhbHVlRW5kID0gaW5mby5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kQ29vcmRpbmF0ZSA9IHBhcnNlSW50KGluZm8uc2xpY2UoaiArIDQsIHZhbHVlRW5kKSwgMTApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZDaGFyID0gaW5mb1tqXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNUUkEpIHsKICAgICAgICByZXR1cm4gc3RhcnRDb29yZGluYXRlICsgMTsKICAgICAgfQogICAgICByZXR1cm4gZW5kQ29vcmRpbmF0ZTsKICAgIH0KICAgIGFzeW5jIGxpbmVDb3VudChyZWZOYW1lLCBvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXgubGluZUNvdW50KHJlZk5hbWUsIG9wdHMpOwogICAgfQogICAgYXN5bmMgX3JlYWRSZWdpb24ocG9zLCBzaXplLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgYiA9IGltcG9ydF9idWZmZXI3LkJ1ZmZlci5hbGxvYyhzaXplKTsKICAgICAgY29uc3QgeyBieXRlc1JlYWQsIGJ1ZmZlciB9ID0gYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWQoYiwgMCwgc2l6ZSwgcG9zLCBvcHRzKTsKICAgICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgwLCBieXRlc1JlYWQpOwogICAgfQogICAgYXN5bmMgcmVhZENodW5rKGMsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fcmVhZFJlZ2lvbihjLm1pbnYuYmxvY2tQb3NpdGlvbiwgYy5mZXRjaGVkU2l6ZSgpLCBvcHRzKTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW56aXBDaHVua1NsaWNlKGRhdGEsIGMpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBkZWNvbXByZXNzaW5nIGMgJHtjLnRvU3RyaW5nKCl9ICR7ZX1gKTsKICAgICAgfQogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt2Y2ZANS4wLjEwL25vZGVfbW9kdWxlcy9AZ21vZC92Y2YvZXNtL2luZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdmNmQDUuMC4xMC9ub2RlX21vZHVsZXMvQGdtb2QvdmNmL2VzbS9wYXJzZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3ZjZkA1LjAuMTAvbm9kZV9tb2R1bGVzL0BnbW9kL3ZjZi9lc20vdmNmUmVzZXJ2ZWQuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIHZjZlJlc2VydmVkX2RlZmF1bHQgPSB7CiAgICBJbmZvRmllbGRzOiB7CiAgICAgIEFBOiB7IE51bWJlcjogMSwgVHlwZTogIlN0cmluZyIsIERlc2NyaXB0aW9uOiAiQW5jZXN0cmFsIGFsbGVsZSIgfSwKICAgICAgQUM6IHsKICAgICAgICBOdW1iZXI6ICJBIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJBbGxlbGUgY291bnQgaW4gZ2Vub3R5cGVzLCBmb3IgZWFjaCBBTFQgYWxsZWxlLCBpbiB0aGUgc2FtZSBvcmRlciBhcyBsaXN0ZWQiCiAgICAgIH0sCiAgICAgIEFEOiB7CiAgICAgICAgTnVtYmVyOiAiUiIsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiVG90YWwgcmVhZCBkZXB0aCBmb3IgZWFjaCBhbGxlbGUiCiAgICAgIH0sCiAgICAgIEFERjogewogICAgICAgIE51bWJlcjogIlIiLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJlYWQgZGVwdGggZm9yIGVhY2ggYWxsZWxlIG9uIHRoZSBmb3J3YXJkIHN0cmFuZCIKICAgICAgfSwKICAgICAgQURSOiB7CiAgICAgICAgTnVtYmVyOiAiUiIsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiUmVhZCBkZXB0aCBmb3IgZWFjaCBhbGxlbGUgb24gdGhlIHJldmVyc2Ugc3RyYW5kIgogICAgICB9LAogICAgICBBRjogewogICAgICAgIE51bWJlcjogIkEiLAogICAgICAgIFR5cGU6ICJGbG9hdCIsCiAgICAgICAgRGVzY3JpcHRpb246ICJBbGxlbGUgZnJlcXVlbmN5IGZvciBlYWNoIEFMVCBhbGxlbGUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgbGlzdGVkIChlc3RpbWF0ZWQgZnJvbSBwcmltYXJ5IGRhdGEsIG5vdCBjYWxsZWQgZ2Vub3R5cGVzKSIKICAgICAgfSwKICAgICAgQU46IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiVG90YWwgbnVtYmVyIG9mIGFsbGVsZXMgaW4gY2FsbGVkIGdlbm90eXBlcyIKICAgICAgfSwKICAgICAgQlE6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkZsb2F0IiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJNUyBiYXNlIHF1YWxpdHkiCiAgICAgIH0sCiAgICAgIENJR0FSOiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6ICJGbG9hdCIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDaWdhciBzdHJpbmcgZGVzY3JpYmluZyBob3cgdG8gYWxpZ24gYW4gYWx0ZXJuYXRlIGFsbGVsZSB0byB0aGUgcmVmZXJlbmNlIGFsbGVsZSIKICAgICAgfSwKICAgICAgREI6IHsKICAgICAgICBOdW1iZXI6IDAsCiAgICAgICAgVHlwZTogIkZsYWciLAogICAgICAgIERlc2NyaXB0aW9uOiAiZGJTTlAgbWVtYmVyc2hpcCIKICAgICAgfSwKICAgICAgRFA6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiY29tYmluZWQgZGVwdGggYWNyb3NzIHNhbXBsZXMiCiAgICAgIH0sCiAgICAgIEVORDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJFbmQgcG9zaXRpb24gKGZvciB1c2Ugd2l0aCBzeW1ib2xpYyBhbGxlbGVzKSIKICAgICAgfSwKICAgICAgSDI6IHsKICAgICAgICBOdW1iZXI6IDAsCiAgICAgICAgVHlwZTogIkZsYWciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSGFwTWFwMiBtZW1iZXJzaGlwIgogICAgICB9LAogICAgICBIMzogewogICAgICAgIE51bWJlcjogMCwKICAgICAgICBUeXBlOiAiRmxhZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJIYXBNYXAzIG1lbWJlcnNoaXAiCiAgICAgIH0sCiAgICAgIE1ROiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6IG51bGwsCiAgICAgICAgRGVzY3JpcHRpb246ICJSTVMgbWFwcGluZyBxdWFsaXR5IgogICAgICB9LAogICAgICBNUTA6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiTnVtYmVyIG9mIE1BUFEgPT0gMCByZWFkcyIKICAgICAgfSwKICAgICAgTlM6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiTnVtYmVyIG9mIHNhbXBsZXMgd2l0aCBkYXRhIgogICAgICB9LAogICAgICBTQjogewogICAgICAgIE51bWJlcjogNCwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJTdHJhbmQgYmlhcyIKICAgICAgfSwKICAgICAgU09NQVRJQzogewogICAgICAgIE51bWJlcjogMCwKICAgICAgICBUeXBlOiAiRmxhZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJTb21hdGljIG11dGF0aW9uIChmb3IgY2FuY2VyIGdlbm9taWNzKSIKICAgICAgfSwKICAgICAgVkFMSURBVEVEOiB7CiAgICAgICAgTnVtYmVyOiAwLAogICAgICAgIFR5cGU6ICJGbGFnIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlZhbGlkYXRlZCBieSBmb2xsb3ctdXAgZXhwZXJpbWVudCIKICAgICAgfSwKICAgICAgIjEwMDBHIjogewogICAgICAgIE51bWJlcjogMCwKICAgICAgICBUeXBlOiAiRmxhZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICIxMDAwIEdlbm9tZXMgbWVtYmVyc2hpcCIKICAgICAgfSwKICAgICAgSU1QUkVDSVNFOiB7CiAgICAgICAgTnVtYmVyOiAwLAogICAgICAgIFR5cGU6ICJGbGFnIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkltcHJlY2lzZSBzdHJ1Y3R1cmFsIHZhcmlhdGlvbiIKICAgICAgfSwKICAgICAgTk9WRUw6IHsKICAgICAgICBOdW1iZXI6IDAsCiAgICAgICAgVHlwZTogIkZsYWciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSW5kaWNhdGVzIGEgbm92ZWwgc3RydWN0dXJhbCB2YXJpYXRpb24iCiAgICAgIH0sCiAgICAgIFNWVFlQRTogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlR5cGUgb2Ygc3RydWN0dXJhbCB2YXJpYW50IgogICAgICB9LAogICAgICBTVkxFTjogewogICAgICAgIE51bWJlcjogbnVsbCwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJEaWZmZXJlbmNlIGluIGxlbmd0aCBiZXR3ZWVuIFJFRiBhbmQgQUxUIGFsbGVsZXMiCiAgICAgIH0sCiAgICAgIENJUE9TOiB7CiAgICAgICAgTnVtYmVyOiAyLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkNvbmZpZGVuY2UgaW50ZXJ2YWwgYXJvdW5kIFBPUyBmb3IgaW1wcmVjaXNlIHZhcmlhbnRzIgogICAgICB9LAogICAgICBDSUVORDogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25maWRlbmNlIGludGVydmFsIGFyb3VuZCBFTkQgZm9yIGltcHJlY2lzZSB2YXJpYW50cyIKICAgICAgfSwKICAgICAgSE9NTEVOOiB7CiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiTGVuZ3RoIG9mIGJhc2UgcGFpciBpZGVudGljYWwgbWljcm8taG9tb2xvZ3kgYXQgZXZlbnQgYnJlYWtwb2ludHMiCiAgICAgIH0sCiAgICAgIEhPTVNFUTogewogICAgICAgIFR5cGU6ICJTdHJpbmciLAogICAgICAgIERlc2NyaXB0aW9uOiAiU2VxdWVuY2Ugb2YgYmFzZSBwYWlyIGlkZW50aWNhbCBtaWNyby1ob21vbG9neSBhdCBldmVudCBicmVha3BvaW50cyIKICAgICAgfSwKICAgICAgQktQVElEOiB7CiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJJRCBvZiB0aGUgYXNzZW1ibGVkIGFsdGVybmF0ZSBhbGxlbGUgaW4gdGhlIGFzc2VtYmx5IGZpbGUiCiAgICAgIH0sCiAgICAgIE1FSU5GTzogewogICAgICAgIE51bWJlcjogNCwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIk1vYmlsZSBlbGVtZW50IGluZm8gb2YgdGhlIGZvcm0gTkFNRSxTVEFSVCxFTkQsUE9MQVJJVFkiCiAgICAgIH0sCiAgICAgIE1FVFJBTlM6IHsKICAgICAgICBOdW1iZXI6IDQsCiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJNb2JpbGUgZWxlbWVudCB0cmFuc2R1Y3Rpb24gaW5mbyBvZiB0aGUgZm9ybSBDSFIsU1RBUlQsRU5ELFBPTEFSSVRZIgogICAgICB9LAogICAgICBER1ZJRDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIklEIG9mIHRoaXMgZWxlbWVudCBpbiBEYXRhYmFzZSBvZiBHZW5vbWljIFZhcmlhdGlvbiIKICAgICAgfSwKICAgICAgREJWQVJJRDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIklEIG9mIHRoaXMgZWxlbWVudCBpbiBEQlZBUiIKICAgICAgfSwKICAgICAgREJSSVBJRDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIklEIG9mIHRoaXMgZWxlbWVudCBpbiBEQlJJUCIKICAgICAgfSwKICAgICAgTUFURUlEOiB7CiAgICAgICAgTnVtYmVyOiBudWxsLAogICAgICAgIFR5cGU6ICJTdHJpbmciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSUQgb2YgbWF0ZSBicmVha2VuZHMiCiAgICAgIH0sCiAgICAgIFBBUklEOiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6ICJTdHJpbmciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSUQgb2YgcGFydG5lciBicmVha2VuZCIKICAgICAgfSwKICAgICAgRVZFTlQ6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJJRCBvZiBldmVudCBhc3NvY2lhdGVkIHRvIGJyZWFrZW5kIgogICAgICB9LAogICAgICBDSUxFTjogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25maWRlbmNlIGludGVydmFsIGFyb3VuZCB0aGUgaW5zZXJ0ZWQgbWF0ZXJpYWwgYmV0d2VlbiBicmVha2VuZCIKICAgICAgfSwKICAgICAgRFBBREo6IHsgVHlwZTogIkludGVnZXIiLCBEZXNjcmlwdGlvbjogIlJlYWQgRGVwdGggb2YgYWRqYWNlbmN5IiB9LAogICAgICBDTjogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb3B5IG51bWJlciBvZiBzZWdtZW50IGNvbnRhaW5pbmcgYnJlYWtlbmQiCiAgICAgIH0sCiAgICAgIENOQURKOiB7CiAgICAgICAgTnVtYmVyOiBudWxsLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkNvcHkgbnVtYmVyIG9mIGFkamFjZW5jeSIKICAgICAgfSwKICAgICAgQ0lDTjogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25maWRlbmNlIGludGVydmFsIGFyb3VuZCBjb3B5IG51bWJlciBmb3IgdGhlIHNlZ21lbnQiCiAgICAgIH0sCiAgICAgIENJQ05BREo6IHsKICAgICAgICBOdW1iZXI6IG51bGwsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiQ29uZmlkZW5jZSBpbnRlcnZhbCBhcm91bmQgY29weSBudW1iZXIgZm9yIHRoZSBhZGphY2VuY3kiCiAgICAgIH0KICAgIH0sCiAgICBHZW5vdHlwZUZpZWxkczogewogICAgICBBRDogewogICAgICAgIE51bWJlcjogIlIiLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJlYWQgZGVwdGggZm9yIGVhY2ggYWxsZWxlIgogICAgICB9LAogICAgICBBREY6IHsKICAgICAgICBOdW1iZXI6ICJSIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJSZWFkIGRlcHRoIGZvciBlYWNoIGFsbGVsZSBvbiB0aGUgZm9yd2FyZCBzdHJhbmQiCiAgICAgIH0sCiAgICAgIEFEUjogewogICAgICAgIE51bWJlcjogIlIiLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJlYWQgZGVwdGggZm9yIGVhY2ggYWxsZWxlIG9uIHRoZSByZXZlcnNlIHN0cmFuZCIKICAgICAgfSwKICAgICAgRFA6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiUmVhZCBkZXB0aCIKICAgICAgfSwKICAgICAgRUM6IHsKICAgICAgICBOdW1iZXI6ICJBIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJFeHBlY3RlZCBhbHRlcm5hdGUgYWxsZWxlIGNvdW50cyIKICAgICAgfSwKICAgICAgRlQ6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICdGaWx0ZXIgaW5kaWNhdGluZyBpZiB0aGlzIGdlbm90eXBlIHdhcyAiY2FsbGVkIicKICAgICAgfSwKICAgICAgR0w6IHsKICAgICAgICBOdW1iZXI6ICJHIiwKICAgICAgICBUeXBlOiAiRmxvYXQiLAogICAgICAgIERlc2NyaXB0aW9uOiAiR2Vub3R5cGUgbGlrZWxpaG9vZHMiCiAgICAgIH0sCiAgICAgIEdQOiB7CiAgICAgICAgTnVtYmVyOiAiRyIsCiAgICAgICAgVHlwZTogIkZsb2F0IiwKICAgICAgICBEZXNjcmlwdGlvbjogIkdlbm90eXBlIHBvc3RlcmlvciBwcm9iYWJpbGl0aWVzIgogICAgICB9LAogICAgICBHUTogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25kaXRpb25hbCBnZW5vdHlwZSBxdWFsaXR5IgogICAgICB9LAogICAgICBHVDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkdlbm90eXBlIgogICAgICB9LAogICAgICBIUTogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJIYXBsb3R5cGUgcXVhbGl0eSIKICAgICAgfSwKICAgICAgTVE6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiUk1TIG1hcHBpbmcgcXVhbGl0eSIKICAgICAgfSwKICAgICAgUEw6IHsKICAgICAgICBOdW1iZXI6ICJHIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJQaHJlZC1zY2FsZWQgZ2Vub3R5cGUgbGlrZWxpaG9vZHMgcm91bmRlZCB0byB0aGUgY2xvc2VzdCBpbnRlZ2VyIgogICAgICB9LAogICAgICBQUTogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJQaGFzaW5nIHF1YWxpdHkiCiAgICAgIH0sCiAgICAgIFBTOiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlBoYXNlIHNldCIKICAgICAgfQogICAgfSwKICAgIEFsdFR5cGVzOiB7CiAgICAgIERFTDogewogICAgICAgIERlc2NyaXB0aW9uOiAiRGVsZXRpb24gcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgSU5TOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJJbnNlcnRpb24gb2Ygbm92ZWwgc2VxdWVuY2UgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgRFVQOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJSZWdpb24gb2YgZWxldmF0ZWQgY29weSBudW1iZXIgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgSU5WOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJJbnZlcnNpb24gb2YgcmVmZXJlbmNlIHNlcXVlbmNlIgogICAgICB9LAogICAgICBDTlY6IHsKICAgICAgICBEZXNjcmlwdGlvbjogIkNvcHkgbnVtYmVyIHZhcmlhYmxlIHJlZ2lvbiAobWF5IGJlIGJvdGggZGVsZXRpb24gYW5kIGR1cGxpY2F0aW9uKSIKICAgICAgfSwKICAgICAgIkRVUDpUQU5ERU0iOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJUYW5kZW0gZHVwbGljYXRpb24iCiAgICAgIH0sCiAgICAgICJERUw6TUUiOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJEZWxldGlvbiBvZiBtb2JpbGUgZWxlbWVudCByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIgogICAgICB9LAogICAgICAiSU5TOk1FIjogewogICAgICAgIERlc2NyaXB0aW9uOiAiSW5zZXJ0aW9uIG9mIGEgbW9iaWxlIGVsZW1lbnQgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgTk9OX1JFRjogewogICAgICAgIERlc2NyaXB0aW9uOiAiUmVwcmVzZW50cyBhbnkgcG9zc2libGUgYWx0ZXJuYXRpdmUgYWxsZWxlIGF0IHRoaXMgbG9jYXRpb24iCiAgICAgIH0sCiAgICAgICIqIjogewogICAgICAgIERlc2NyaXB0aW9uOiAiUmVwcmVzZW50cyBhbnkgcG9zc2libGUgYWx0ZXJuYXRpdmUgYWxsZWxlIGF0IHRoaXMgbG9jYXRpb24iCiAgICAgIH0KICAgIH0sCiAgICBGaWx0ZXJUeXBlczogewogICAgICBQQVNTOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJQYXNzZWQgYWxsIGZpbHRlcnMiCiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdmNmQDUuMC4xMC9ub2RlX21vZHVsZXMvQGdtb2QvdmNmL2VzbS9wYXJzZS5qcwogIGZ1bmN0aW9uIFZhcmlhbnQoc3R1ZmYpIHsKICAgIE9iamVjdC5hc3NpZ24odGhpcywgc3R1ZmYpOwogIH0KICBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnROb1Rocm93KHVyaSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1cmkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gdXJpOwogICAgfQogIH0KICB2YXIgVkNGID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoeyBoZWFkZXIgPSAiIiwgc3RyaWN0ID0gdHJ1ZSB9KSB7CiAgICAgIGlmICghaGVhZGVyIHx8ICFoZWFkZXIubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBoZWFkZXIgcmVjZWl2ZWQiKTsKICAgICAgfQogICAgICBjb25zdCBoZWFkZXJMaW5lcyA9IGhlYWRlci5zcGxpdCgvW1xyXG5dKy8pLmZpbHRlcigobGluZSkgPT4gbGluZSk7CiAgICAgIGlmICghaGVhZGVyTGluZXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJubyBub24tZW1wdHkgaGVhZGVyIGxpbmVzIHNwZWNpZmllZCIpOwogICAgICB9CiAgICAgIHRoaXMuc3RyaWN0ID0gc3RyaWN0OwogICAgICB0aGlzLm1ldGFkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgSU5GTzogdmNmUmVzZXJ2ZWRfZGVmYXVsdC5JbmZvRmllbGRzLAogICAgICAgIEZPUk1BVDogdmNmUmVzZXJ2ZWRfZGVmYXVsdC5HZW5vdHlwZUZpZWxkcywKICAgICAgICBBTFQ6IHZjZlJlc2VydmVkX2RlZmF1bHQuQWx0VHlwZXMsCiAgICAgICAgRklMVEVSOiB2Y2ZSZXNlcnZlZF9kZWZhdWx0LkZpbHRlclR5cGVzCiAgICAgIH0pKTsKICAgICAgbGV0IGxhc3RMaW5lOwogICAgICBoZWFkZXJMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7CiAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoIiMiKSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgbGluZSBpbiBoZWFkZXI6CiR7bGluZX1gKTsKICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiIyMiKSkgewogICAgICAgICAgdGhpcy5fcGFyc2VNZXRhZGF0YShsaW5lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGFzdExpbmUgPSBsaW5lOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICghbGFzdExpbmUpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIGZvcm1hdCBsaW5lIGZvdW5kIGluIGhlYWRlciIpOwogICAgICB9CiAgICAgIGNvbnN0IGZpZWxkcyA9IGxhc3RMaW5lLnRyaW0oKS5zcGxpdCgiCSIpOwogICAgICBjb25zdCB0aGlzSGVhZGVyID0gZmllbGRzLnNsaWNlKDAsIDgpOwogICAgICBjb25zdCBjb3JyZWN0SGVhZGVyID0gWwogICAgICAgICIjQ0hST00iLAogICAgICAgICJQT1MiLAogICAgICAgICJJRCIsCiAgICAgICAgIlJFRiIsCiAgICAgICAgIkFMVCIsCiAgICAgICAgIlFVQUwiLAogICAgICAgICJGSUxURVIiLAogICAgICAgICJJTkZPIgogICAgICBdOwogICAgICBpZiAoZmllbGRzLmxlbmd0aCA8IDgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZDRiBoZWFkZXIgbWlzc2luZyBjb2x1bW5zOgoke2xhc3RMaW5lfWApOwogICAgICB9IGVsc2UgaWYgKHRoaXNIZWFkZXIubGVuZ3RoICE9PSBjb3JyZWN0SGVhZGVyLmxlbmd0aCB8fCAhdGhpc0hlYWRlci5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gY29ycmVjdEhlYWRlcltpbmRleF0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWQ0YgY29sdW1uIGhlYWRlcnMgbm90IGNvcnJlY3Q6CiR7bGFzdExpbmV9YCk7CiAgICAgIH0KICAgICAgdGhpcy5zYW1wbGVzID0gZmllbGRzLnNsaWNlKDkpOwogICAgfQogICAgX3BhcnNlR2Vub3R5cGVzKGZvcm1hdCwgcHJlcmVzdCkgewogICAgICBjb25zdCByZXN0ID0gcHJlcmVzdC5zcGxpdCgiCSIpOwogICAgICBjb25zdCBnZW5vdHlwZXMgPSB7fTsKICAgICAgY29uc3QgZm9ybWF0S2V5cyA9IGZvcm1hdCA9PT0gbnVsbCB8fCBmb3JtYXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZvcm1hdC5zcGxpdCgiOiIpOwogICAgICBpZiAoZm9ybWF0S2V5cykgewogICAgICAgIHRoaXMuc2FtcGxlcy5mb3JFYWNoKChzYW1wbGUsIGluZGV4KSA9PiB7CiAgICAgICAgICBnZW5vdHlwZXNbc2FtcGxlXSA9IHt9OwogICAgICAgICAgZm9ybWF0S2V5cy5mb3JFYWNoKChrZXkpID0+IHsKICAgICAgICAgICAgZ2Vub3R5cGVzW3NhbXBsZV1ba2V5XSA9IG51bGw7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJlc3RbaW5kZXhdLnNwbGl0KCI6IikuZmlsdGVyKChmKSA9PiBmKS5mb3JFYWNoKCh2YWwsIGluZGV4MikgPT4gewogICAgICAgICAgICBsZXQgdGhpc1ZhbHVlOwogICAgICAgICAgICBpZiAodmFsID09PSAiIiB8fCB2YWwgPT09ICIuIiB8fCB2YWwgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IHZhbC5zcGxpdCgiLCIpLm1hcCgoZW50KSA9PiBlbnQgPT09ICIuIiA/IG51bGwgOiBlbnQpOwogICAgICAgICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0TWV0YWRhdGEoIkZPUk1BVCIsIGZvcm1hdEtleXNbaW5kZXgyXSwgIlR5cGUiKTsKICAgICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAiSW50ZWdlciIgfHwgdmFsdWVUeXBlID09PSAiRmxvYXQiKSB7CiAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSBlbnRyaWVzLm1hcCgodmFsMikgPT4gdmFsMiA/ICt2YWwyIDogdmFsMik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IGVudHJpZXM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGdlbm90eXBlc1tzYW1wbGVdW2Zvcm1hdEtleXNbaW5kZXgyXV0gPSB0aGlzVmFsdWU7CiAgICAgICAgICB9LCB7fSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGdlbm90eXBlczsKICAgIH0KICAgIF9wYXJzZU1ldGFkYXRhKGxpbmUpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLnRyaW0oKS5tYXRjaCgvXiMjKC4rPyk9KC4qKS8pOwogICAgICBpZiAoIW1hdGNoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lIGlzIG5vdCBhIHZhbGlkIG1ldGFkYXRhIGxpbmU6ICR7bGluZX1gKTsKICAgICAgfQogICAgICBjb25zdCBbbWV0YUtleSwgbWV0YVZhbF0gPSBtYXRjaC5zbGljZSgxLCAzKTsKICAgICAgaWYgKG1ldGFWYWwuc3RhcnRzV2l0aCgiPCIpKSB7CiAgICAgICAgaWYgKCEobWV0YUtleSBpbiB0aGlzLm1ldGFkYXRhKSkgewogICAgICAgICAgdGhpcy5tZXRhZGF0YVttZXRhS2V5XSA9IHt9OwogICAgICAgIH0KICAgICAgICBjb25zdCBbaWQsIGtleVZhbHNdID0gdGhpcy5fcGFyc2VTdHJ1Y3R1cmVkTWV0YVZhbChtZXRhVmFsKTsKICAgICAgICB0aGlzLm1ldGFkYXRhW21ldGFLZXldW2lkXSA9IGtleVZhbHM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5tZXRhZGF0YVttZXRhS2V5XSA9IG1ldGFWYWw7CiAgICAgIH0KICAgIH0KICAgIF9wYXJzZVN0cnVjdHVyZWRNZXRhVmFsKG1ldGFWYWwpIHsKICAgICAgY29uc3Qga2V5VmFscyA9IHRoaXMuX3BhcnNlS2V5VmFsdWUobWV0YVZhbC5yZXBsYWNlKC9ePHw+JC9nLCAiIiksICIsIik7CiAgICAgIGNvbnN0IGlkID0ga2V5VmFscy5JRDsKICAgICAgZGVsZXRlIGtleVZhbHMuSUQ7CiAgICAgIGlmICgiTnVtYmVyIiBpbiBrZXlWYWxzKSB7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyKGtleVZhbHMuTnVtYmVyKSkpIHsKICAgICAgICAgIGtleVZhbHMuTnVtYmVyID0gTnVtYmVyKGtleVZhbHMuTnVtYmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIFtpZCwga2V5VmFsc107CiAgICB9CiAgICBnZXRNZXRhZGF0YSguLi5hcmdzKSB7CiAgICAgIGxldCBmaWx0ZXJlZE1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgZmlsdGVyZWRNZXRhZGF0YSA9IGZpbHRlcmVkTWV0YWRhdGFbYXJnc1tpXV07CiAgICAgICAgaWYgKCFmaWx0ZXJlZE1ldGFkYXRhKSB7CiAgICAgICAgICByZXR1cm4gZmlsdGVyZWRNZXRhZGF0YTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZpbHRlcmVkTWV0YWRhdGE7CiAgICB9CiAgICBfcGFyc2VLZXlWYWx1ZShzdHIsIHBhaXJTZXBhcmF0b3IgPSAiOyIpIHsKICAgICAgY29uc3QgZGF0YSA9IHt9OwogICAgICBsZXQgY3VycktleSA9ICIiOwogICAgICBsZXQgY3VyclZhbHVlID0gIiI7CiAgICAgIGxldCBzdGF0ZSA9IDE7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKHN0YXRlID09PSAxKSB7CiAgICAgICAgICBpZiAoc3RyW2ldID09PSAiPSIpIHsKICAgICAgICAgICAgc3RhdGUgPSAyOwogICAgICAgICAgfSBlbHNlIGlmIChzdHJbaV0gIT09IHBhaXJTZXBhcmF0b3IpIHsKICAgICAgICAgICAgY3VycktleSArPSBzdHJbaV07CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJWYWx1ZSA9PT0gIiIpIHsKICAgICAgICAgICAgZGF0YVtjdXJyS2V5XSA9IG51bGw7CiAgICAgICAgICAgIGN1cnJLZXkgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyKSB7CiAgICAgICAgICBpZiAoc3RyW2ldID09PSBwYWlyU2VwYXJhdG9yKSB7CiAgICAgICAgICAgIGRhdGFbY3VycktleV0gPSBjdXJyVmFsdWU7CiAgICAgICAgICAgIGN1cnJLZXkgPSAiIjsKICAgICAgICAgICAgY3VyclZhbHVlID0gIiI7CiAgICAgICAgICAgIHN0YXRlID0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnIicpIHsKICAgICAgICAgICAgc3RhdGUgPSAzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY3VyclZhbHVlICs9IHN0cltpXTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAzKSB7CiAgICAgICAgICBpZiAoc3RyW2ldICE9PSAnIicpIHsKICAgICAgICAgICAgY3VyclZhbHVlICs9IHN0cltpXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlID0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0YXRlID09PSAyIHx8IHN0YXRlID09PSAzKSB7CiAgICAgICAgZGF0YVtjdXJyS2V5XSA9IGN1cnJWYWx1ZTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSkgewogICAgICAgIGRhdGFbY3VycktleV0gPSBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgcGFyc2VMaW5lKGxpbmUpIHsKICAgICAgbGluZSA9IGxpbmUudHJpbSgpOwogICAgICBpZiAoIWxpbmUubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdCBwYXJzZXIgPSB0aGlzOwogICAgICBsZXQgY3VyckNoYXIgPSAwOwogICAgICBmb3IgKGxldCBjdXJyRmllbGQgPSAwOyBjdXJyQ2hhciA8IGxpbmUubGVuZ3RoOyBjdXJyQ2hhciArPSAxKSB7CiAgICAgICAgaWYgKGxpbmVbY3VyckNoYXJdID09PSAiCSIpIHsKICAgICAgICAgIGN1cnJGaWVsZCArPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoY3VyckZpZWxkID09PSA5KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgZmllbGRzID0gbGluZS5zdWJzdHIoMCwgY3VyckNoYXIpLnNwbGl0KCIJIik7CiAgICAgIGNvbnN0IHJlc3QgPSBsaW5lLnN1YnN0cihjdXJyQ2hhciArIDEpOwogICAgICBjb25zdCBbQ0hST00sIFBPUywgSUQsIFJFRiwgQUxULCBRVUFMLCBGSUxURVJdID0gZmllbGRzOwogICAgICBjb25zdCBjaHJvbSA9IENIUk9NOwogICAgICBjb25zdCBwb3MgPSArUE9TOwogICAgICBjb25zdCBpZCA9IElEID09PSAiLiIgPyBudWxsIDogSUQuc3BsaXQoIjsiKTsKICAgICAgY29uc3QgcmVmID0gUkVGOwogICAgICBjb25zdCBhbHQgPSBBTFQgPT09ICIuIiA/IG51bGwgOiBBTFQuc3BsaXQoIiwiKTsKICAgICAgY29uc3QgcXVhbCA9IFFVQUwgPT09ICIuIiA/IG51bGwgOiArUVVBTDsKICAgICAgY29uc3QgZmlsdGVyID0gRklMVEVSID09PSAiLiIgPyBudWxsIDogRklMVEVSLnNwbGl0KCI7Iik7CiAgICAgIGlmICh0aGlzLnN0cmljdCAmJiBmaWVsZHNbN10gPT09IHZvaWQgMCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigibm8gSU5GTyBmaWVsZCBzcGVjaWZpZWQsIG11c3QgY29udGFpbiBhdCBsZWFzdCBhICcuJyAodHVybiBvZmYgc3RyaWN0IG1vZGUgdG8gYWxsb3cpIik7CiAgICAgIH0KICAgICAgY29uc3QgaW5mbyA9IGZpZWxkc1s3XSA9PT0gdm9pZCAwIHx8IGZpZWxkc1s3XSA9PT0gIi4iID8ge30gOiB0aGlzLl9wYXJzZUtleVZhbHVlKGZpZWxkc1s3XSk7CiAgICAgIE9iamVjdC5rZXlzKGluZm8pLmZvckVhY2goKGtleSkgPT4gewogICAgICAgIGxldCBpdGVtczsKICAgICAgICBpZiAoaW5mb1trZXldKSB7CiAgICAgICAgICBpdGVtcyA9IGluZm9ba2V5XS5zcGxpdCgiLCIpLm1hcCgodmFsKSA9PiB2YWwgPT09ICIuIiA/IG51bGwgOiB2YWwpLm1hcCgoZikgPT4gZiA/IGRlY29kZVVSSUNvbXBvbmVudE5vVGhyb3coZikgOiBmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlbXMgPSBpbmZvW2tleV07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5nZXRNZXRhZGF0YSgiSU5GTyIsIGtleSwgIlR5cGUiKTsKICAgICAgICBpZiAoaXRlbVR5cGUpIHsKICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gIkludGVnZXIiIHx8IGl0ZW1UeXBlID09PSAiRmxvYXQiKSB7CiAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMubWFwKCh2YWwpID0+IHsKICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgPT09ICJGbGFnIikgewogICAgICAgICAgICBpZiAoaW5mb1trZXldKSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbmZvIGZpZWxkICR7a2V5fSBpcyBhIEZsYWcgYW5kIHNob3VsZCBub3QgaGF2ZSBhIHZhbHVlIChnb3QgdmFsdWUgJHtpbmZvW2tleV19KWApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGl0ZW1zID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbmZvW2tleV0gPSBpdGVtczsKICAgICAgfSk7CiAgICAgIGNvbnN0IHZhcmlhbnQgPSBuZXcgVmFyaWFudCh7CiAgICAgICAgQ0hST006IGNocm9tLAogICAgICAgIFBPUzogcG9zLAogICAgICAgIEFMVDogYWx0LAogICAgICAgIElORk86IGluZm8sCiAgICAgICAgUkVGOiByZWYsCiAgICAgICAgRklMVEVSOiBmaWx0ZXIgJiYgZmlsdGVyLmxlbmd0aCA9PT0gMSAmJiBmaWx0ZXJbMF0gPT09ICJQQVNTIiA/ICJQQVNTIiA6IGZpbHRlciwKICAgICAgICBJRDogaWQsCiAgICAgICAgUVVBTDogcXVhbAogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhcmlhbnQsICJTQU1QTEVTIiwgewogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHNhbXBsZXMgPSBwYXJzZXIuX3BhcnNlR2Vub3R5cGVzKGZpZWxkc1s4XSwgcmVzdCk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIlNBTVBMRVMiLCB7CiAgICAgICAgICAgIHZhbHVlOiBzYW1wbGVzLAogICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBzYW1wbGVzOwogICAgICAgIH0sCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgIH0pOwogICAgICByZXR1cm4gdmFyaWFudDsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdmNmQDUuMC4xMC9ub2RlX21vZHVsZXMvQGdtb2QvdmNmL2VzbS9pbmRleC5qcwogIHZhciBlc21fZGVmYXVsdCA9IFZDRjsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvd29ya2VyLm1qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X3dvcmtlciA9IF9fdG9Nb2R1bGUocmVxdWlyZV93b3JrZXIoKSk7CiAgdmFyIGV4cG9zZSA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5leHBvc2U7CiAgdmFyIHJlZ2lzdGVyU2VyaWFsaXplciA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5yZWdpc3RlclNlcmlhbGl6ZXI7CiAgdmFyIFRyYW5zZmVyID0gaW1wb3J0X3dvcmtlci5kZWZhdWx0LlRyYW5zZmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sb2Rhc2guanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAib2JqZWN0IiAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDsKICB2YXIgZnJlZUdsb2JhbF9kZWZhdWx0ID0gZnJlZUdsb2JhbDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMKICB2YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAib2JqZWN0IiAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjsKICB2YXIgcm9vdCA9IGZyZWVHbG9iYWxfZGVmYXVsdCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogIHZhciByb290X2RlZmF1bHQgPSByb290OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzCiAgdmFyIFN5bWJvbDIgPSByb290X2RlZmF1bHQuU3ltYm9sOwogIHZhciBTeW1ib2xfZGVmYXVsdCA9IFN5bWJvbDI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsKICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZzsKICB2YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2xfZGVmYXVsdCA/IFN5bWJvbF9kZWZhdWx0LnRvU3RyaW5nVGFnIDogdm9pZCAwOwogIGZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkgewogICAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLCB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107CiAgICB0cnkgewogICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB2b2lkIDA7CiAgICAgIHZhciB1bm1hc2tlZCA9IHRydWU7CiAgICB9IGNhdGNoIChlKSB7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7CiAgICBpZiAodW5tYXNrZWQpIHsKICAgICAgaWYgKGlzT3duKSB7CiAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnOwogICAgICB9IGVsc2UgewogICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBnZXRSYXdUYWdfZGVmYXVsdCA9IGdldFJhd1RhZzsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBvYmplY3RQcm90bzIgPSBPYmplY3QucHJvdG90eXBlOwogIHZhciBuYXRpdmVPYmplY3RUb1N0cmluZzIgPSBvYmplY3RQcm90bzIudG9TdHJpbmc7CiAgZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHsKICAgIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZSk7CiAgfQogIHZhciBvYmplY3RUb1N0cmluZ19kZWZhdWx0ID0gb2JqZWN0VG9TdHJpbmc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzCiAgdmFyIG51bGxUYWcgPSAiW29iamVjdCBOdWxsXSI7CiAgdmFyIHVuZGVmaW5lZFRhZyA9ICJbb2JqZWN0IFVuZGVmaW5lZF0iOwogIHZhciBzeW1Ub1N0cmluZ1RhZzIgPSBTeW1ib2xfZGVmYXVsdCA/IFN5bWJvbF9kZWZhdWx0LnRvU3RyaW5nVGFnIDogdm9pZCAwOwogIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdm9pZCAwID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZzsKICAgIH0KICAgIHJldHVybiBzeW1Ub1N0cmluZ1RhZzIgJiYgc3ltVG9TdHJpbmdUYWcyIGluIE9iamVjdCh2YWx1ZSkgPyBnZXRSYXdUYWdfZGVmYXVsdCh2YWx1ZSkgOiBvYmplY3RUb1N0cmluZ19kZWZhdWx0KHZhbHVlKTsKICB9CiAgdmFyIGJhc2VHZXRUYWdfZGVmYXVsdCA9IGJhc2VHZXRUYWc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAib2JqZWN0IjsKICB9CiAgdmFyIGlzT2JqZWN0TGlrZV9kZWZhdWx0ID0gaXNPYmplY3RMaWtlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcwogIHZhciBzeW1ib2xUYWcgPSAiW29iamVjdCBTeW1ib2xdIjsKICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkgewogICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAic3ltYm9sIiB8fCBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKSA9PSBzeW1ib2xUYWc7CiAgfQogIHZhciBpc1N5bWJvbF9kZWZhdWx0ID0gaXNTeW1ib2w7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHsKICAgIHZhciBpbmRleCA9IC0xLCBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCwgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYXJyYXlNYXBfZGVmYXVsdCA9IGFycmF5TWFwOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB2YXIgaXNBcnJheV9kZWZhdWx0ID0gaXNBcnJheTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0Zpbml0ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9OdW1iZXIuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVHJpbS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RyaW1tZWRFbmRJbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgcmVXaGl0ZXNwYWNlID0gL1xzLzsKICBmdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7CiAgICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoOwogICAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7CiAgICB9CiAgICByZXR1cm4gaW5kZXg7CiAgfQogIHZhciB0cmltbWVkRW5kSW5kZXhfZGVmYXVsdCA9IHRyaW1tZWRFbmRJbmRleDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUcmltLmpzCiAgdmFyIHJlVHJpbVN0YXJ0ID0gL15ccysvOwogIGZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXhfZGVmYXVsdChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgIiIpIDogc3RyaW5nOwogIH0KICB2YXIgYmFzZVRyaW1fZGVmYXVsdCA9IGJhc2VUcmltOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAib2JqZWN0IiB8fCB0eXBlID09ICJmdW5jdGlvbiIpOwogIH0KICB2YXIgaXNPYmplY3RfZGVmYXVsdCA9IGlzT2JqZWN0OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b051bWJlci5qcwogIHZhciBOQU4gPSAwIC8gMDsKICB2YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pOwogIHZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pOwogIHZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pOwogIHZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDsKICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAibnVtYmVyIikgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICBpZiAoaXNTeW1ib2xfZGVmYXVsdCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIE5BTjsKICAgIH0KICAgIGlmIChpc09iamVjdF9kZWZhdWx0KHZhbHVlKSkgewogICAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAiZnVuY3Rpb24iID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7CiAgICAgIHZhbHVlID0gaXNPYmplY3RfZGVmYXVsdChvdGhlcikgPyBvdGhlciArICIiIDogb3RoZXI7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlICE9ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlOwogICAgfQogICAgdmFsdWUgPSBiYXNlVHJpbV9kZWZhdWx0KHZhbHVlKTsKICAgIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7CiAgICByZXR1cm4gaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KSA6IHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWU7CiAgfQogIHZhciB0b051bWJlcl9kZWZhdWx0ID0gdG9OdW1iZXI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvRmluaXRlLmpzCiAgdmFyIElORklOSVRZID0gMSAvIDA7CiAgdmFyIE1BWF9JTlRFR0VSID0gMTc5NzY5MzEzNDg2MjMxNTdlMjkyOwogIGZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDsKICAgIH0KICAgIHZhbHVlID0gdG9OdW1iZXJfZGVmYXVsdCh2YWx1ZSk7CiAgICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHsKICAgICAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyAtMSA6IDE7CiAgICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7CiAgICB9CiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwOwogIH0KICB2YXIgdG9GaW5pdGVfZGVmYXVsdCA9IHRvRmluaXRlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0ludGVnZXIuanMKICBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHsKICAgIHZhciByZXN1bHQgPSB0b0Zpbml0ZV9kZWZhdWx0KHZhbHVlKSwgcmVtYWluZGVyID0gcmVzdWx0ICUgMTsKICAgIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCA6IDA7CiAgfQogIHZhciB0b0ludGVnZXJfZGVmYXVsdCA9IHRvSW50ZWdlcjsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgYXN5bmNUYWcgPSAiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI7CiAgdmFyIGZ1bmNUYWcgPSAiW29iamVjdCBGdW5jdGlvbl0iOwogIHZhciBnZW5UYWcgPSAiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iOwogIHZhciBwcm94eVRhZyA9ICJbb2JqZWN0IFByb3h5XSI7CiAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkgewogICAgaWYgKCFpc09iamVjdF9kZWZhdWx0KHZhbHVlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB2YXIgdGFnID0gYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKTsKICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7CiAgfQogIHZhciBpc0Z1bmN0aW9uX2RlZmF1bHQgPSBpc0Z1bmN0aW9uOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weUFycmF5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7CiAgICB2YXIgaW5kZXggPSAtMSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpOwogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgdmFyIGNvcHlBcnJheV9kZWZhdWx0ID0gY29weUFycmF5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7CiAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXGQqKSQvOwogIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CiAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7CiAgICByZXR1cm4gISFsZW5ndGggJiYgKHR5cGUgPT0gIm51bWJlciIgfHwgdHlwZSAhPSAic3ltYm9sIiAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkgJiYgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpOwogIH0KICB2YXIgaXNJbmRleF9kZWZhdWx0ID0gaXNJbmRleDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7CiAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8IHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7CiAgfQogIHZhciBlcV9kZWZhdWx0ID0gZXE7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0l0ZXJhdGVlQ2FsbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBNQVhfU0FGRV9JTlRFR0VSMiA9IDkwMDcxOTkyNTQ3NDA5OTE7CiAgZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHsKICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gIm51bWJlciIgJiYgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSMjsKICB9CiAgdmFyIGlzTGVuZ3RoX2RlZmF1bHQgPSBpc0xlbmd0aDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMKICBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGhfZGVmYXVsdCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uX2RlZmF1bHQodmFsdWUpOwogIH0KICB2YXIgaXNBcnJheUxpa2VfZGVmYXVsdCA9IGlzQXJyYXlMaWtlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMKICBmdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkgewogICAgaWYgKCFpc09iamVjdF9kZWZhdWx0KG9iamVjdCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7CiAgICBpZiAodHlwZSA9PSAibnVtYmVyIiA/IGlzQXJyYXlMaWtlX2RlZmF1bHQob2JqZWN0KSAmJiBpc0luZGV4X2RlZmF1bHQoaW5kZXgsIG9iamVjdC5sZW5ndGgpIDogdHlwZSA9PSAic3RyaW5nIiAmJiBpbmRleCBpbiBvYmplY3QpIHsKICAgICAgcmV0dXJuIGVxX2RlZmF1bHQob2JqZWN0W2luZGV4XSwgdmFsdWUpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgaXNJdGVyYXRlZUNhbGxfZGVmYXVsdCA9IGlzSXRlcmF0ZWVDYWxsOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIG9iamVjdFByb3RvMyA9IE9iamVjdC5wcm90b3R5cGU7CiAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHsKICAgIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsIHByb3RvID0gdHlwZW9mIEN0b3IgPT0gImZ1bmN0aW9uIiAmJiBDdG9yLnByb3RvdHlwZSB8fCBvYmplY3RQcm90bzM7CiAgICByZXR1cm4gdmFsdWUgPT09IHByb3RvOwogIH0KICB2YXIgaXNQcm90b3R5cGVfZGVmYXVsdCA9IGlzUHJvdG90eXBlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUaW1lcy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHsKICAgIHZhciBpbmRleCA9IC0xLCByZXN1bHQgPSBBcnJheShuKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbikgewogICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGJhc2VUaW1lc19kZWZhdWx0ID0gYmFzZVRpbWVzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgYXJnc1RhZyA9ICJbb2JqZWN0IEFyZ3VtZW50c10iOwogIGZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkgewogICAgcmV0dXJuIGlzT2JqZWN0TGlrZV9kZWZhdWx0KHZhbHVlKSAmJiBiYXNlR2V0VGFnX2RlZmF1bHQodmFsdWUpID09IGFyZ3NUYWc7CiAgfQogIHZhciBiYXNlSXNBcmd1bWVudHNfZGVmYXVsdCA9IGJhc2VJc0FyZ3VtZW50czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMKICB2YXIgb2JqZWN0UHJvdG80ID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgaGFzT3duUHJvcGVydHkyID0gb2JqZWN0UHJvdG80Lmhhc093blByb3BlcnR5OwogIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvNC5wcm9wZXJ0eUlzRW51bWVyYWJsZTsKICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHNfZGVmYXVsdChmdW5jdGlvbigpIHsKICAgIHJldHVybiBhcmd1bWVudHM7CiAgfSgpKSA/IGJhc2VJc0FyZ3VtZW50c19kZWZhdWx0IDogZnVuY3Rpb24odmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkyLmNhbGwodmFsdWUsICJjYWxsZWUiKSAmJiAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgImNhbGxlZSIpOwogIH07CiAgdmFyIGlzQXJndW1lbnRzX2RlZmF1bHQgPSBpc0FyZ3VtZW50czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBzdHViRmFsc2UoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHZhciBzdHViRmFsc2VfZGVmYXVsdCA9IHN0dWJGYWxzZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMKICB2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7CiAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0czsKICB2YXIgQnVmZmVyOSA9IG1vZHVsZUV4cG9ydHMgPyByb290X2RlZmF1bHQuQnVmZmVyIDogdm9pZCAwOwogIHZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlcjkgPyBCdWZmZXI5LmlzQnVmZmVyIDogdm9pZCAwOwogIHZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZV9kZWZhdWx0OwogIHZhciBpc0J1ZmZlcl9kZWZhdWx0ID0gaXNCdWZmZXI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGFyZ3NUYWcyID0gIltvYmplY3QgQXJndW1lbnRzXSI7CiAgdmFyIGFycmF5VGFnID0gIltvYmplY3QgQXJyYXldIjsKICB2YXIgYm9vbFRhZyA9ICJbb2JqZWN0IEJvb2xlYW5dIjsKICB2YXIgZGF0ZVRhZyA9ICJbb2JqZWN0IERhdGVdIjsKICB2YXIgZXJyb3JUYWcgPSAiW29iamVjdCBFcnJvcl0iOwogIHZhciBmdW5jVGFnMiA9ICJbb2JqZWN0IEZ1bmN0aW9uXSI7CiAgdmFyIG1hcFRhZyA9ICJbb2JqZWN0IE1hcF0iOwogIHZhciBudW1iZXJUYWcgPSAiW29iamVjdCBOdW1iZXJdIjsKICB2YXIgb2JqZWN0VGFnID0gIltvYmplY3QgT2JqZWN0XSI7CiAgdmFyIHJlZ2V4cFRhZyA9ICJbb2JqZWN0IFJlZ0V4cF0iOwogIHZhciBzZXRUYWcgPSAiW29iamVjdCBTZXRdIjsKICB2YXIgc3RyaW5nVGFnID0gIltvYmplY3QgU3RyaW5nXSI7CiAgdmFyIHdlYWtNYXBUYWcgPSAiW29iamVjdCBXZWFrTWFwXSI7CiAgdmFyIGFycmF5QnVmZmVyVGFnID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICB2YXIgZGF0YVZpZXdUYWcgPSAiW29iamVjdCBEYXRhVmlld10iOwogIHZhciBmbG9hdDMyVGFnID0gIltvYmplY3QgRmxvYXQzMkFycmF5XSI7CiAgdmFyIGZsb2F0NjRUYWcgPSAiW29iamVjdCBGbG9hdDY0QXJyYXldIjsKICB2YXIgaW50OFRhZyA9ICJbb2JqZWN0IEludDhBcnJheV0iOwogIHZhciBpbnQxNlRhZyA9ICJbb2JqZWN0IEludDE2QXJyYXldIjsKICB2YXIgaW50MzJUYWcgPSAiW29iamVjdCBJbnQzMkFycmF5XSI7CiAgdmFyIHVpbnQ4VGFnID0gIltvYmplY3QgVWludDhBcnJheV0iOwogIHZhciB1aW50OENsYW1wZWRUYWcgPSAiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOwogIHZhciB1aW50MTZUYWcgPSAiW29iamVjdCBVaW50MTZBcnJheV0iOwogIHZhciB1aW50MzJUYWcgPSAiW29iamVjdCBVaW50MzJBcnJheV0iOwogIHZhciB0eXBlZEFycmF5VGFncyA9IHt9OwogIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7CiAgdHlwZWRBcnJheVRhZ3NbYXJnc1RhZzJdID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWcyXSA9IHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID0gdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7CiAgZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIGlzT2JqZWN0TGlrZV9kZWZhdWx0KHZhbHVlKSAmJiBpc0xlbmd0aF9kZWZhdWx0KHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnX2RlZmF1bHQodmFsdWUpXTsKICB9CiAgdmFyIGJhc2VJc1R5cGVkQXJyYXlfZGVmYXVsdCA9IGJhc2VJc1R5cGVkQXJyYXk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHsKICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7CiAgICB9OwogIH0KICB2YXIgYmFzZVVuYXJ5X2RlZmF1bHQgPSBiYXNlVW5hcnk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgZnJlZUV4cG9ydHMyID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogIHZhciBmcmVlTW9kdWxlMiA9IGZyZWVFeHBvcnRzMiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICB2YXIgbW9kdWxlRXhwb3J0czIgPSBmcmVlTW9kdWxlMiAmJiBmcmVlTW9kdWxlMi5leHBvcnRzID09PSBmcmVlRXhwb3J0czI7CiAgdmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0czIgJiYgZnJlZUdsb2JhbF9kZWZhdWx0LnByb2Nlc3M7CiAgdmFyIG5vZGVVdGlsID0gZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlMiAmJiBmcmVlTW9kdWxlMi5yZXF1aXJlICYmIGZyZWVNb2R1bGUyLnJlcXVpcmUoInV0aWwiKS50eXBlczsKICAgICAgaWYgKHR5cGVzKSB7CiAgICAgICAgcmV0dXJuIHR5cGVzOwogICAgICB9CiAgICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoInV0aWwiKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgIH0KICB9KCk7CiAgdmFyIG5vZGVVdGlsX2RlZmF1bHQgPSBub2RlVXRpbDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzCiAgdmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbF9kZWZhdWx0ICYmIG5vZGVVdGlsX2RlZmF1bHQuaXNUeXBlZEFycmF5OwogIHZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5X2RlZmF1bHQobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5X2RlZmF1bHQ7CiAgdmFyIGlzVHlwZWRBcnJheV9kZWZhdWx0ID0gaXNUeXBlZEFycmF5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcwogIHZhciBvYmplY3RQcm90bzUgPSBPYmplY3QucHJvdG90eXBlOwogIHZhciBoYXNPd25Qcm9wZXJ0eTMgPSBvYmplY3RQcm90bzUuaGFzT3duUHJvcGVydHk7CiAgZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7CiAgICB2YXIgaXNBcnIgPSBpc0FycmF5X2RlZmF1bHQodmFsdWUpLCBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50c19kZWZhdWx0KHZhbHVlKSwgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcl9kZWZhdWx0KHZhbHVlKSwgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheV9kZWZhdWx0KHZhbHVlKSwgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLCByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lc19kZWZhdWx0KHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOwogICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7CiAgICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5My5jYWxsKHZhbHVlLCBrZXkpKSAmJiAhKHNraXBJbmRleGVzICYmIChrZXkgPT0gImxlbmd0aCIgfHwgaXNCdWZmICYmIChrZXkgPT0gIm9mZnNldCIgfHwga2V5ID09ICJwYXJlbnQiKSB8fCBpc1R5cGUgJiYgKGtleSA9PSAiYnVmZmVyIiB8fCBrZXkgPT0gImJ5dGVMZW5ndGgiIHx8IGtleSA9PSAiYnl0ZU9mZnNldCIpIHx8IGlzSW5kZXhfZGVmYXVsdChrZXksIGxlbmd0aCkpKSkgewogICAgICAgIHJlc3VsdC5wdXNoKGtleSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBhcnJheUxpa2VLZXlzX2RlZmF1bHQgPSBhcnJheUxpa2VLZXlzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykgewogICAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7CiAgICB9OwogIH0KICB2YXIgb3ZlckFyZ19kZWZhdWx0ID0gb3ZlckFyZzsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMKICB2YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmdfZGVmYXVsdChPYmplY3Qua2V5cywgT2JqZWN0KTsKICB2YXIgbmF0aXZlS2V5c19kZWZhdWx0ID0gbmF0aXZlS2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzCiAgdmFyIG9iamVjdFByb3RvNiA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIGhhc093blByb3BlcnR5NCA9IG9iamVjdFByb3RvNi5oYXNPd25Qcm9wZXJ0eTsKICBmdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHsKICAgIGlmICghaXNQcm90b3R5cGVfZGVmYXVsdChvYmplY3QpKSB7CiAgICAgIHJldHVybiBuYXRpdmVLZXlzX2RlZmF1bHQob2JqZWN0KTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBbXTsKICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkgewogICAgICBpZiAoaGFzT3duUHJvcGVydHk0LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAiY29uc3RydWN0b3IiKSB7CiAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGJhc2VLZXlzX2RlZmF1bHQgPSBiYXNlS2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcwogIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CiAgICByZXR1cm4gaXNBcnJheUxpa2VfZGVmYXVsdChvYmplY3QpID8gYXJyYXlMaWtlS2V5c19kZWZhdWx0KG9iamVjdCkgOiBiYXNlS2V5c19kZWZhdWx0KG9iamVjdCk7CiAgfQogIHZhciBrZXlzX2RlZmF1bHQgPSBrZXlzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNsYW1wLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikgewogICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7CiAgICAgIGlmICh1cHBlciAhPT0gdm9pZCAwKSB7CiAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7CiAgICAgIH0KICAgICAgaWYgKGxvd2VyICE9PSB2b2lkIDApIHsKICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bWJlcjsKICB9CiAgdmFyIGJhc2VDbGFtcF9kZWZhdWx0ID0gYmFzZUNsYW1wOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykgewogICAgcmV0dXJuIGFycmF5TWFwX2RlZmF1bHQocHJvcHMsIGZ1bmN0aW9uKGtleSkgewogICAgICByZXR1cm4gb2JqZWN0W2tleV07CiAgICB9KTsKICB9CiAgdmFyIGJhc2VWYWx1ZXNfZGVmYXVsdCA9IGJhc2VWYWx1ZXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3ZhbHVlcy5qcwogIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlc19kZWZhdWx0KG9iamVjdCwga2V5c19kZWZhdWx0KG9iamVjdCkpOwogIH0KICB2YXIgdmFsdWVzX2RlZmF1bHQgPSB2YWx1ZXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmFuZG9tLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3I7CiAgdmFyIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tOwogIGZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7CiAgICByZXR1cm4gbG93ZXIgKyBuYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSAqICh1cHBlciAtIGxvd2VyICsgMSkpOwogIH0KICB2YXIgYmFzZVJhbmRvbV9kZWZhdWx0ID0gYmFzZVJhbmRvbTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc2FtcGxlU2l6ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5U2FtcGxlU2l6ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NodWZmbGVTZWxmLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7CiAgICB2YXIgaW5kZXggPSAtMSwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLCBsYXN0SW5kZXggPSBsZW5ndGggLSAxOwogICAgc2l6ZSA9IHNpemUgPT09IHZvaWQgMCA/IGxlbmd0aCA6IHNpemU7CiAgICB3aGlsZSAoKytpbmRleCA8IHNpemUpIHsKICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tX2RlZmF1bHQoaW5kZXgsIGxhc3RJbmRleCksIHZhbHVlID0gYXJyYXlbcmFuZF07CiAgICAgIGFycmF5W3JhbmRdID0gYXJyYXlbaW5kZXhdOwogICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTsKICAgIH0KICAgIGFycmF5Lmxlbmd0aCA9IHNpemU7CiAgICByZXR1cm4gYXJyYXk7CiAgfQogIHZhciBzaHVmZmxlU2VsZl9kZWZhdWx0ID0gc2h1ZmZsZVNlbGY7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNhbXBsZVNpemUuanMKICBmdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksIG4pIHsKICAgIHJldHVybiBzaHVmZmxlU2VsZl9kZWZhdWx0KGNvcHlBcnJheV9kZWZhdWx0KGFycmF5KSwgYmFzZUNsYW1wX2RlZmF1bHQobiwgMCwgYXJyYXkubGVuZ3RoKSk7CiAgfQogIHZhciBhcnJheVNhbXBsZVNpemVfZGVmYXVsdCA9IGFycmF5U2FtcGxlU2l6ZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTYW1wbGVTaXplLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4pIHsKICAgIHZhciBhcnJheSA9IHZhbHVlc19kZWZhdWx0KGNvbGxlY3Rpb24pOwogICAgcmV0dXJuIHNodWZmbGVTZWxmX2RlZmF1bHQoYXJyYXksIGJhc2VDbGFtcF9kZWZhdWx0KG4sIDAsIGFycmF5Lmxlbmd0aCkpOwogIH0KICB2YXIgYmFzZVNhbXBsZVNpemVfZGVmYXVsdCA9IGJhc2VTYW1wbGVTaXplOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zYW1wbGVTaXplLmpzCiAgZnVuY3Rpb24gc2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuLCBndWFyZCkgewogICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGxfZGVmYXVsdChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB2b2lkIDApIHsKICAgICAgbiA9IDE7CiAgICB9IGVsc2UgewogICAgICBuID0gdG9JbnRlZ2VyX2RlZmF1bHQobik7CiAgICB9CiAgICB2YXIgZnVuYyA9IGlzQXJyYXlfZGVmYXVsdChjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlU2l6ZV9kZWZhdWx0IDogYmFzZVNhbXBsZVNpemVfZGVmYXVsdDsKICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG4pOwogIH0KICB2YXIgc2FtcGxlU2l6ZV9kZWZhdWx0ID0gc2FtcGxlU2l6ZTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kMy1hcnJheUAyLjEyLjEvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2QzLWFycmF5QDIuMTIuMS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhc2NlbmRpbmdfZGVmYXVsdChhLCBiKSB7CiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZDMtYXJyYXlAMi4xMi4xL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmlzZWN0b3JfZGVmYXVsdChmKSB7CiAgICBsZXQgZGVsdGEgPSBmOwogICAgbGV0IGNvbXBhcmUgPSBmOwogICAgaWYgKGYubGVuZ3RoID09PSAxKSB7CiAgICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4OwogICAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICBjb25zdCBtaWQgPSBsbyArIGhpID4+PiAxOwogICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKQogICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgIGhpID0gbWlkOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICAgIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkKICAgICAgICBsbyA9IDA7CiAgICAgIGlmIChoaSA9PSBudWxsKQogICAgICAgIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkKICAgICAgICAgIGhpID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgIGxvID0gbWlkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbG87CiAgICB9CiAgICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7CiAgICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpOwogICAgfQogICAgcmV0dXJuIHsgbGVmdCwgY2VudGVyLCByaWdodCB9OwogIH0KICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHsKICAgIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nX2RlZmF1bHQoZihkKSwgeCk7CiAgfQoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy91dGlscy50cwogIHZhciBEYXRhU291cmNlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZmlsZSwgY2hyb21TaXplcywgb3B0aW9ucykgewogICAgICB0aGlzLmZpbGUgPSBmaWxlOwogICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmNocm9tSW5mbyA9IHNpemVzVG9DaHJvbUluZm8oY2hyb21TaXplcyk7CiAgICAgIHRoaXMudGlsZXNldEluZm8gPSB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8odGhpcy5jaHJvbUluZm8pOwogICAgfQogICAgY2hyb21JbmZvOwogICAgdGlsZXNldEluZm87CiAgfTsKICB2YXIgY2hyb21JbmZvQmlzZWN0b3IgPSBiaXNlY3Rvcl9kZWZhdWx0KChkKSA9PiBkLnBvcykubGVmdDsKICB2YXIgY2hyVG9BYnMgPSAoY2hyb20sIGNocm9tUG9zLCBjaHJvbUluZm8pID0+IGNocm9tSW5mby5jaHJQb3NpdGlvbnNbY2hyb21dLnBvcyArIGNocm9tUG9zOwogIHZhciBhYnNUb0NociA9IChhYnNQb3NpdGlvbiwgY2hyb21JbmZvKSA9PiB7CiAgICBpZiAoIWNocm9tSW5mbyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgaW5zZXJ0UG9pbnQgPSBjaHJvbUluZm9CaXNlY3RvcihjaHJvbUluZm8uY3VtUG9zaXRpb25zLCBhYnNQb3NpdGlvbik7CiAgICBjb25zdCBsYXN0Q2hyID0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tjaHJvbUluZm8uY3VtUG9zaXRpb25zLmxlbmd0aCAtIDFdLmNocjsKICAgIGNvbnN0IGxhc3RMZW5ndGggPSBjaHJvbUluZm8uY2hyb21MZW5ndGhzW2xhc3RDaHJdOwogICAgaW5zZXJ0UG9pbnQgLT0gaW5zZXJ0UG9pbnQgPiAwICYmIDE7CiAgICBsZXQgY2hyUG9zaXRpb24gPSBNYXRoLmZsb29yKGFic1Bvc2l0aW9uIC0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0ucG9zKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaWYgKGNoclBvc2l0aW9uIDwgMCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIDE7CiAgICAgIGNoclBvc2l0aW9uID0gMTsKICAgIH0KICAgIGlmIChpbnNlcnRQb2ludCA9PT0gY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIGNoclBvc2l0aW9uID4gbGFzdExlbmd0aCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIGxhc3RMZW5ndGg7CiAgICAgIGNoclBvc2l0aW9uID0gbGFzdExlbmd0aDsKICAgIH0KICAgIHJldHVybiBbY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0uY2hyLCBjaHJQb3NpdGlvbiwgb2Zmc2V0LCBpbnNlcnRQb2ludF07CiAgfTsKICBmdW5jdGlvbiB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8oY2hyb21JbmZvLCB0aWxlU2l6ZSA9IDEwMjQpIHsKICAgIHJldHVybiB7CiAgICAgIHRpbGVfc2l6ZTogdGlsZVNpemUsCiAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbjogdGlsZVNpemUsCiAgICAgIG1heF96b29tOiBNYXRoLmNlaWwoTWF0aC5sb2coY2hyb21JbmZvLnRvdGFsTGVuZ3RoIC8gdGlsZVNpemUpIC8gTWF0aC5sb2coMikpLAogICAgICBtYXhfd2lkdGg6IGNocm9tSW5mby50b3RhbExlbmd0aCwKICAgICAgbWluX3BvczogWzBdLAogICAgICBtYXhfcG9zOiBbY2hyb21JbmZvLnRvdGFsTGVuZ3RoXQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2l6ZXNUb0Nocm9tSW5mbyhzaXplcykgewogICAgY29uc3QgaW5mbyA9IHsKICAgICAgY3VtUG9zaXRpb25zOiBbXSwKICAgICAgY2hyb21MZW5ndGhzOiB7fSwKICAgICAgY2hyUG9zaXRpb25zOiB7fSwKICAgICAgdG90YWxMZW5ndGg6IDAKICAgIH07CiAgICBzaXplcy5mb3JFYWNoKChbY2hyLCBsZW5ndGhdLCBpKSA9PiB7CiAgICAgIGNvbnN0IGNoclBvc2l0aW9uID0geyBpZDogaSwgY2hyLCBwb3M6IGluZm8udG90YWxMZW5ndGggfTsKICAgICAgaW5mby5jaHJQb3NpdGlvbnNbY2hyXSA9IGNoclBvc2l0aW9uOwogICAgICBpbmZvLmNocm9tTGVuZ3Roc1tjaHJdID0gbGVuZ3RoOwogICAgICBpbmZvLmN1bVBvc2l0aW9ucy5wdXNoKGNoclBvc2l0aW9uKTsKICAgICAgaW5mby50b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmluZm8sCiAgICAgIGFic1RvQ2hyOiAoYWJzUG9zKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGFic1RvQ2hyKGFic1BvcywgaW5mbykgOiBudWxsLAogICAgICBjaHJUb0FiczogKFtjaHJOYW1lLCBjaHJQb3NdKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGNoclRvQWJzKGNock5hbWUsIGNoclBvcywgaW5mbykgOiBudWxsCiAgICB9OwogIH0KICB2YXIgUmVtb3RlRmlsZTIgPSBjbGFzcyBleHRlbmRzIFJlbW90ZUZpbGUgewogICAgcmVhZCA9IGFzeW5jIChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pID0+IHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApOwogICAgfTsKICB9OwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy92Y2YvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGdldE11dGF0aW9uVHlwZSA9IChyZWYsIGFsdCkgPT4gewogICAgaWYgKCFhbHQpCiAgICAgIHJldHVybiAidW5rbm93biI7CiAgICBpZiAocmVmLmxlbmd0aCA9PT0gYWx0Lmxlbmd0aCkKICAgICAgcmV0dXJuICJzdWJzdGl0dXRpb24iOwogICAgaWYgKHJlZi5sZW5ndGggPiBhbHQubGVuZ3RoKQogICAgICByZXR1cm4gImRlbGV0aW9uIjsKICAgIGlmIChyZWYubGVuZ3RoIDwgYWx0Lmxlbmd0aCkKICAgICAgcmV0dXJuICJpbnNlcnRpb24iOwogICAgcmV0dXJuICJ1bmtub3duIjsKICB9OwogIHZhciBnZXRTdWJzdGl0dXRpb25UeXBlID0gKHJlZiwgYWx0KSA9PiB7CiAgICBzd2l0Y2ggKHJlZiArIGFsdCkgewogICAgICBjYXNlICJDQSI6CiAgICAgIGNhc2UgIkdUIjoKICAgICAgICByZXR1cm4gIkM+QSI7CiAgICAgIGNhc2UgIkNHIjoKICAgICAgY2FzZSAiR0MiOgogICAgICAgIHJldHVybiAiQz5HIjsKICAgICAgY2FzZSAiQ1QiOgogICAgICBjYXNlICJHQSI6CiAgICAgICAgcmV0dXJuICJDPlQiOwogICAgICBjYXNlICJUQSI6CiAgICAgIGNhc2UgIkFUIjoKICAgICAgICByZXR1cm4gIlQ+QSI7CiAgICAgIGNhc2UgIlRDIjoKICAgICAgY2FzZSAiQUciOgogICAgICAgIHJldHVybiAiVD5DIjsKICAgICAgY2FzZSAiVEciOgogICAgICBjYXNlICJBQyI6CiAgICAgICAgcmV0dXJuICJUPkciOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAidW5rbm93biI7CiAgICB9CiAgfTsKICBmdW5jdGlvbiByZWNvcmRUb1RpbGUodmNmUmVjb3JkLCBjaHJQb3MsIHByZXZBYnNQb3MpIHsKICAgIGNvbnN0IGFic1BvcyA9IGNoclBvcyArIHZjZlJlY29yZC5QT1MgKyAxOwogICAgbGV0IEFMVDsKICAgIGlmIChBcnJheS5pc0FycmF5KHZjZlJlY29yZC5BTFQpICYmIHZjZlJlY29yZC5BTFQubGVuZ3RoID4gMCkgewogICAgICBBTFQgPSB2Y2ZSZWNvcmQuQUxUWzBdOwogICAgfQogICAgY29uc3QgRElTVFBSRVYgPSAhcHJldkFic1BvcyA/IG51bGwgOiBhYnNQb3MgLSBwcmV2QWJzUG9zOwogICAgY29uc3QgRElTVFBSRVZMT0dFID0gIXByZXZBYnNQb3MgPyBudWxsIDogTWF0aC5sb2coYWJzUG9zIC0gcHJldkFic1Bvcyk7CiAgICBjb25zdCBNVVRUWVBFID0gZ2V0TXV0YXRpb25UeXBlKHZjZlJlY29yZC5SRUYsIEFMVCk7CiAgICBjb25zdCBTVUJUWVBFID0gZ2V0U3Vic3RpdHV0aW9uVHlwZSh2Y2ZSZWNvcmQuUkVGLCBBTFQpOwogICAgY29uc3QgUE9TRU5EID0gYWJzUG9zICsgdmNmUmVjb3JkLlJFRi5sZW5ndGg7CiAgICBjb25zdCBkYXRhID0gewogICAgICAuLi52Y2ZSZWNvcmQsCiAgICAgIEFMVCwKICAgICAgTVVUVFlQRSwKICAgICAgU1VCVFlQRSwKICAgICAgSU5GTzogSlNPTi5zdHJpbmdpZnkodmNmUmVjb3JkLklORk8pLAogICAgICBPUklHSU5BTFBPUzogdmNmUmVjb3JkLlBPUywKICAgICAgUE9TOiBhYnNQb3MsCiAgICAgIFBPU0VORCwKICAgICAgRElTVFBSRVYsCiAgICAgIERJU1RQUkVWTE9HRQogICAgfTsKICAgIE9iamVjdC5rZXlzKHZjZlJlY29yZC5JTkZPKS5mb3JFYWNoKChrZXkpID0+IHsKICAgICAgY29uc3QgdmFsID0gdmNmUmVjb3JkLklORk9ba2V5XTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICAgIGRhdGFba2V5XSA9IHZhbC5qb2luKCIsICIpOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGFba2V5XSA9IHZhbDsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIHNyYy9kYXRhLWZldGNoZXJzL3ZjZi92Y2Ytd29ya2VyLnRzP3dvcmtlciZpbmxpbmU/d29ya2VyX2ZpbGUKICB2YXIgdmNmRmlsZXMgPSBuZXcgTWFwKCk7CiAgdmFyIFZjZkZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0YmksIHVpZCkgewogICAgICB0aGlzLnRiaSA9IHRiaTsKICAgICAgdGhpcy4jdWlkID0gdWlkOwogICAgfQogICAgI3BhcnNlcjsKICAgICN1aWQ7CiAgICBzdGF0aWMgZnJvbVVybCh1cmwsIGluZGV4VXJsLCB1aWQsIHVybEZldGNoT3B0aW9ucywgaW5kZXhVcmxGZXRjaE9wdGlvbnMpIHsKICAgICAgY29uc3QgdGJpID0gbmV3IFRhYml4SW5kZXhlZEZpbGUoewogICAgICAgIGZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlMih1cmwsIHsgb3ZlcnJpZGVzOiB1cmxGZXRjaE9wdGlvbnMgfSksCiAgICAgICAgdGJpRmlsZWhhbmRsZTogbmV3IFJlbW90ZUZpbGUyKGluZGV4VXJsLCB7IG92ZXJyaWRlczogaW5kZXhVcmxGZXRjaE9wdGlvbnMgfSkKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgVmNmRmlsZSh0YmksIHVpZCk7CiAgICB9CiAgICBhc3luYyBnZXRQYXJzZXIoKSB7CiAgICAgIGlmICghdGhpcy4jcGFyc2VyKSB7CiAgICAgICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy50YmkuZ2V0SGVhZGVyKCk7CiAgICAgICAgdGhpcy4jcGFyc2VyID0gbmV3IGVzbV9kZWZhdWx0KHsgaGVhZGVyIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLiNwYXJzZXI7CiAgICB9CiAgICBhc3luYyBnZXRUaWxlRGF0YShtaW5YLCBtYXhYKSB7CiAgICAgIGNvbnN0IHNvdXJjZSA9IGRhdGFTb3VyY2VzLmdldCh0aGlzLiN1aWQpOwogICAgICBjb25zdCBwYXJzZXIgPSBhd2FpdCB0aGlzLmdldFBhcnNlcigpOwogICAgICBsZXQgY3VyTWluWCA9IG1pblg7CiAgICAgIGNvbnN0IHsgY2hyb21MZW5ndGhzLCBjdW1Qb3NpdGlvbnMgfSA9IHNvdXJjZS5jaHJvbUluZm87CiAgICAgIGNvbnN0IHJlY29yZFByb21pc2VzID0gW107CiAgICAgIGZvciAoY29uc3QgY3VtUG9zIG9mIGN1bVBvc2l0aW9ucykgewogICAgICAgIGNvbnN0IGNocm9tTmFtZSA9IGN1bVBvcy5jaHI7CiAgICAgICAgY29uc3QgY2hyb21TdGFydCA9IGN1bVBvcy5wb3M7CiAgICAgICAgY29uc3QgY2hyb21FbmQgPSBjdW1Qb3MucG9zICsgY2hyb21MZW5ndGhzW2Nocm9tTmFtZV07CiAgICAgICAgbGV0IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgICAgaWYgKGNocm9tU3RhcnQgPiBjdXJNaW5YIHx8IGN1ck1pblggPj0gY2hyb21FbmQpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBsZXQgcHJldlBPUzsKICAgICAgICBjb25zdCB0aWxlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgICAgY29uc3QgdGlsZXMgPSBbXTsKICAgICAgICAgIGNvbnN0IGxpbmVDYWxsYmFjayA9IChsaW5lKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHZjZlJlY29yZCA9IHBhcnNlci5wYXJzZUxpbmUobGluZSk7CiAgICAgICAgICAgIGNvbnN0IHZjZlRpbGUgPSByZWNvcmRUb1RpbGUodmNmUmVjb3JkLCBjaHJvbVN0YXJ0LCBwcmV2UE9TKTsKICAgICAgICAgICAgcHJldlBPUyA9IHZjZlRpbGUuUE9TOwogICAgICAgICAgICB0aWxlcy5wdXNoKHZjZlRpbGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmIChtYXhYID4gY2hyb21FbmQpIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBjdXJNaW5YIC0gY2hyb21TdGFydDsKICAgICAgICAgICAgZW5kUG9zID0gY2hyb21FbmQgLSBjaHJvbVN0YXJ0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBNYXRoLmZsb29yKGN1ck1pblggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgICAgZW5kUG9zID0gTWF0aC5jZWlsKG1heFggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHNvdXJjZS5maWxlLnRiaS5nZXRMaW5lcyhjaHJvbU5hbWUsIHN0YXJ0UG9zLCBlbmRQb3MsIGxpbmVDYWxsYmFjaykudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHJlc29sdmUodGlsZXMpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgcmVjb3JkUHJvbWlzZXMucHVzaCh0aWxlc1Byb21pc2UpOwogICAgICAgIGlmIChtYXhYIDw9IGNocm9tRW5kKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY3VyTWluWCA9IGNocm9tRW5kOwogICAgICB9CiAgICAgIGNvbnN0IHRpbGVBcnJheXMgPSBhd2FpdCBQcm9taXNlLmFsbChyZWNvcmRQcm9taXNlcyk7CiAgICAgIHJldHVybiB0aWxlQXJyYXlzLmZsYXQoKTsKICAgIH0KICB9OwogIHZhciB0aWxlVmFsdWVzID0ge307CiAgdmFyIGRhdGFTb3VyY2VzID0gbmV3IE1hcCgpOwogIGZ1bmN0aW9uIGluaXQodWlkLCB2Y2YsIGNocm9tU2l6ZXMsIG9wdGlvbnMgPSB7fSkgewogICAgbGV0IHZjZkZpbGUgPSB2Y2ZGaWxlcy5nZXQodmNmLnVybCk7CiAgICBpZiAoIXZjZkZpbGUpIHsKICAgICAgdmNmRmlsZSA9IFZjZkZpbGUuZnJvbVVybCh2Y2YudXJsLCB2Y2YuaW5kZXhVcmwsIHVpZCwgb3B0aW9ucy51cmxGZXRjaE9wdGlvbnMsIG9wdGlvbnMuaW5kZXhVcmxGZXRjaE9wdGlvbnMpOwogICAgfQogICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBEYXRhU291cmNlKHZjZkZpbGUsIGNocm9tU2l6ZXMsIHsKICAgICAgc2FtcGxlTGVuZ3RoOiAxZTMsCiAgICAgIC4uLm9wdGlvbnMKICAgIH0pOwogICAgZGF0YVNvdXJjZXMuc2V0KHVpZCwgZGF0YVNvdXJjZSk7CiAgfQogIHZhciB0aWxlc2V0SW5mbyA9ICh1aWQpID0+IHsKICAgIHJldHVybiBkYXRhU291cmNlcy5nZXQodWlkKS50aWxlc2V0SW5mbzsKICB9OwogIHZhciB0aWxlID0gYXN5bmMgKHVpZCwgeiwgeCkgPT4gewogICAgY29uc3Qgc291cmNlID0gZGF0YVNvdXJjZXMuZ2V0KHVpZCk7CiAgICBjb25zdCBDQUNIRV9LRVkgPSBgJHt1aWR9LiR7en0uJHt4fWA7CiAgICB0aWxlVmFsdWVzW0NBQ0hFX0tFWV0gPSBbXTsKICAgIGNvbnN0IHRpbGVXaWR0aCA9ICtzb3VyY2UudGlsZXNldEluZm8ubWF4X3dpZHRoIC8gMiAqKiArejsKICAgIGNvbnN0IG1pblggPSBzb3VyY2UudGlsZXNldEluZm8ubWluX3Bvc1swXSArIHggKiB0aWxlV2lkdGg7CiAgICBjb25zdCBtYXhYID0gc291cmNlLnRpbGVzZXRJbmZvLm1pbl9wb3NbMF0gKyAoeCArIDEpICogdGlsZVdpZHRoOwogICAgdGlsZVZhbHVlc1tDQUNIRV9LRVldID0gYXdhaXQgc291cmNlLmZpbGUuZ2V0VGlsZURhdGEobWluWCwgbWF4WCk7CiAgICByZXR1cm4gdGlsZVZhbHVlc1tDQUNIRV9LRVldOwogIH07CiAgdmFyIGZldGNoVGlsZXNEZWJvdW5jZWQgPSBhc3luYyAodWlkLCB0aWxlSWRzKSA9PiB7CiAgICBjb25zdCB0aWxlcyA9IHt9OwogICAgY29uc3QgdmFsaWRUaWxlSWRzID0gW107CiAgICBjb25zdCB0aWxlUHJvbWlzZXMgPSBbXTsKICAgIGZvciAoY29uc3QgdGlsZUlkIG9mIHRpbGVJZHMpIHsKICAgICAgY29uc3QgcGFydHMgPSB0aWxlSWQuc3BsaXQoIi4iKTsKICAgICAgY29uc3QgeiA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7CiAgICAgIGNvbnN0IHggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApOwogICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpIHx8IE51bWJlci5pc05hTih6KSkgewogICAgICAgIGNvbnNvbGUud2FybigiSW52YWxpZCB0aWxlIHpvb20gb3IgcG9zaXRpb246IiwgeiwgeCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdmFsaWRUaWxlSWRzLnB1c2godGlsZUlkKTsKICAgICAgdGlsZVByb21pc2VzLnB1c2godGlsZSh1aWQsIHosIHgpKTsKICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbCh0aWxlUHJvbWlzZXMpLnRoZW4oKHZhbHVlczIpID0+IHsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgdmFsaWRUaWxlSWQgPSB2YWxpZFRpbGVJZHNbaV07CiAgICAgICAgdGlsZXNbdmFsaWRUaWxlSWRdID0gdmFsdWVzMltpXTsKICAgICAgICB0aWxlc1t2YWxpZFRpbGVJZF0udGlsZVBvc2l0aW9uSWQgPSB2YWxpZFRpbGVJZDsKICAgICAgfQogICAgICByZXR1cm4gdGlsZXM7CiAgICB9KTsKICB9OwogIHZhciBnZXRUYWJ1bGFyRGF0YSA9ICh1aWQsIHRpbGVJZHMpID0+IHsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIHRpbGVJZHMuZm9yRWFjaCgodGlsZUlkKSA9PiB7CiAgICAgIGNvbnN0IHBhcnRzID0gdGlsZUlkLnNwbGl0KCIuIik7CiAgICAgIGNvbnN0IHogPSBwYXJzZUludChwYXJ0c1swXSwgMTApOwogICAgICBjb25zdCB4ID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTsKICAgICAgY29uc3QgdGlsZVZhbHVlID0gdGlsZVZhbHVlc1tgJHt1aWR9LiR7en0uJHt4fWBdOwogICAgICBpZiAoIXRpbGVWYWx1ZSkgewogICAgICAgIGNvbnNvbGUud2FybihgTm8gdGlsZSBkYXRhIGNvbnN0cnVjdGVkICgke3RpbGVJZH0pYCk7CiAgICAgIH0KICAgICAgZGF0YS5wdXNoKHRpbGVWYWx1ZSk7CiAgICB9KTsKICAgIGxldCBvdXRwdXQgPSBPYmplY3QudmFsdWVzKGRhdGEpLmZsYXQoKTsKICAgIGNvbnN0IHNhbXBsZUxlbmd0aCA9IGRhdGFTb3VyY2VzLmdldCh1aWQpLm9wdGlvbnMuc2FtcGxlTGVuZ3RoOwogICAgaWYgKG91dHB1dC5sZW5ndGggPj0gc2FtcGxlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGhpZ2hQcmlvcml0eSA9IG91dHB1dC5zb3J0KChhLCBiKSA9PiAtKGEuRElTVFBSRVYgPz8gMCkgKyAoYi5ESVNUUFJFViA/PyAwKSkuc2xpY2UoMCwgc2FtcGxlTGVuZ3RoIC8gMik7CiAgICAgIG91dHB1dCA9IHNhbXBsZVNpemVfZGVmYXVsdChvdXRwdXQsIHNhbXBsZUxlbmd0aCAvIDIpLmNvbmNhdChoaWdoUHJpb3JpdHkpOwogICAgfQogICAgY29uc3QgYnVmZmVyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpLmJ1ZmZlcjsKICAgIHJldHVybiBUcmFuc2ZlcihidWZmZXIsIFtidWZmZXJdKTsKICB9OwogIHZhciB0aWxlRnVuY3Rpb25zID0gewogICAgaW5pdCwKICAgIHRpbGVzZXRJbmZvLAogICAgZmV0Y2hUaWxlc0RlYm91bmNlZCwKICAgIHRpbGUsCiAgICBnZXRUYWJ1bGFyRGF0YQogIH07CiAgZXhwb3NlKHRpbGVGdW5jdGlvbnMpOwp9KSgpOwovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCi8qKgogKiBAbGljZW5zZQogKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz0iZXMiIC1vIC4vYAogKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+CiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT4KICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCiAqLwo=",Ble=typeof window<"u"&&window.Blob&&new Blob([atob(w2e)],{type:"text/javascript;charset=utf-8"});function Ngg(){const e=Ble&&(window.URL||window.webkitURL).createObjectURL(Ble);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+w2e,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const kgg=200;class R2e{constructor(g,I){rt(this,"dataConfig",{}),rt(this,"uid"),rt(this,"prevRequestTime"),rt(this,"track"),rt(this,"toFetch"),rt(this,"fetchTimeout"),rt(this,"worker"),this.uid=g.libraries.slugid.nice(),this.prevRequestTime=0,this.toFetch=new Set;const{url:i,indexUrl:n,assembly:C,...r}=I;this.worker=UT(new Ngg).then(async o=>{const a=Object.entries(bI(C).size);return await o.init(this.uid,{url:i,indexUrl:n},a,r),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,I){this.track.drawLoadingCue(),I.forEach(i=>this.toFetch.add(i)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},kgg)}async sendFetch(g,I){(await this.worker).fetchTilesDebounced(this.uid,I).then(g)}async getTabularData(g){const I=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(I))}}rt(R2e,"config",{type:"vcf"});const eY=BigInt(32);function Ygg(e,g,I){const i=+!!I,n=+!I;return BigInt(e.getInt32(g,I)*n+e.getInt32(g+4,I)*i)<>eY),C=Number(I&BigInt(4294967295));i?(e.setInt32(g+4,n,i),e.setUint32(g,C,i)):(e.setInt32(g,n,i),e.setUint32(g+4,C,i))}function Dgg(e,g,I,i){const n=Number(I>>eY),C=Number(I&BigInt(4294967295));i?(e.setUint32(g+4,n,i),e.setUint32(g,C,i)):(e.setUint32(g,n,i),e.setUint32(g+4,C,i))}"getBigInt64"in DataView||(DataView.prototype.getBigInt64=function(e,g){return Ygg(this,e,g)});"getBigUint64"in DataView||(DataView.prototype.getBigUint64=function(e,g){return Kgg(this,e,g)});"setBigInt64"in DataView||(DataView.prototype.setBigInt64=function(e,g,I){Fgg(this,e,g,I)});"setBigUint64"in DataView||(DataView.prototype.setBigUint64=function(e,g,I){Dgg(this,e,g,I)});class xgg{constructor(g,I){this.code="",this.scopes=[["vars"]],this.bitFields=[],this.tmpVariableCount=0,this.references=new Map,this.imports=[],this.reverseImports=new Map,this.useContextVariables=!1,this.importPath=g,this.useContextVariables=I}generateVariable(g){const I=[...this.scopes[this.scopes.length-1]];return g&&I.push(g),I.join(".")}generateOption(g){switch(typeof g){case"number":return g.toString();case"string":return this.generateVariable(g);case"function":return`${this.addImport(g)}.call(${this.generateVariable()}, vars)`}}generateError(g){this.pushCode(`throw new Error(${g});`)}generateTmpVariable(){return"$tmp"+this.tmpVariableCount++}pushCode(g){this.code+=g+` -`}pushPath(g){g&&this.scopes[this.scopes.length-1].push(g)}popPath(g){g&&this.scopes[this.scopes.length-1].pop()}pushScope(g){this.scopes.push([g])}popScope(){this.scopes.pop()}addImport(g){if(!this.importPath)return`(${g})`;let I=this.reverseImports.get(g);return I||(I=this.imports.push(g)-1,this.reverseImports.set(g,I)),`${this.importPath}[${I}]`}addReference(g){this.references.has(g)||this.references.set(g,{resolved:!1,requested:!1})}markResolved(g){const I=this.references.get(g);I&&(I.resolved=!0)}markRequested(g){g.forEach(I=>{const i=this.references.get(I);i&&(i.requested=!0)})}getUnresolvedReferences(){return Array.from(this.references).filter(([g,I])=>!I.resolved&&!I.requested).map(([g,I])=>g)}}const No=new Map,Du="___parser_",ko={uint8:1,uint16le:2,uint16be:2,uint32le:4,uint32be:4,int8:1,int16le:2,int16be:2,int32le:4,int32be:4,int64be:8,int64le:8,uint64be:8,uint64le:8,floatle:4,floatbe:4,doublele:8,doublebe:8},g1={uint8:"Uint8",uint16le:"Uint16",uint16be:"Uint16",uint32le:"Uint32",uint32be:"Uint32",int8:"Int8",int16le:"Int16",int16be:"Int16",int32le:"Int32",int32be:"Int32",int64be:"BigInt64",int64le:"BigInt64",uint64be:"BigUint64",uint64le:"BigUint64",floatle:"Float32",floatbe:"Float32",doublele:"Float64",doublebe:"Float64"},I1={uint8:!1,uint16le:!0,uint16be:!1,uint32le:!0,uint32be:!1,int8:!1,int16le:!0,int16be:!1,int32le:!0,int32be:!1,int64be:!1,int64le:!0,uint64be:!1,uint64le:!0,floatle:!0,floatbe:!1,doublele:!0,doublebe:!1};class kg{constructor(){this.varName="",this.type="",this.options={},this.endian="be",this.useContextVariables=!1}static start(){return new kg}primitiveGenerateN(g,I){const i=g1[g],n=I1[g];I.pushCode(`${I.generateVariable(this.varName)} = dataView.get${i}(offset, ${n});`),I.pushCode(`offset += ${ko[g]};`)}primitiveN(g,I,i){return this.setNextParser(g,I,i)}useThisEndian(g){return g+this.endian.toLowerCase()}uint8(g,I={}){return this.primitiveN("uint8",g,I)}uint16(g,I={}){return this.primitiveN(this.useThisEndian("uint16"),g,I)}uint16le(g,I={}){return this.primitiveN("uint16le",g,I)}uint16be(g,I={}){return this.primitiveN("uint16be",g,I)}uint32(g,I={}){return this.primitiveN(this.useThisEndian("uint32"),g,I)}uint32le(g,I={}){return this.primitiveN("uint32le",g,I)}uint32be(g,I={}){return this.primitiveN("uint32be",g,I)}int8(g,I={}){return this.primitiveN("int8",g,I)}int16(g,I={}){return this.primitiveN(this.useThisEndian("int16"),g,I)}int16le(g,I={}){return this.primitiveN("int16le",g,I)}int16be(g,I={}){return this.primitiveN("int16be",g,I)}int32(g,I={}){return this.primitiveN(this.useThisEndian("int32"),g,I)}int32le(g,I={}){return this.primitiveN("int32le",g,I)}int32be(g,I={}){return this.primitiveN("int32be",g,I)}bigIntVersionCheck(){if(!DataView.prototype.getBigInt64)throw new Error("BigInt64 is unsupported on this runtime")}int64(g,I={}){return this.bigIntVersionCheck(),this.primitiveN(this.useThisEndian("int64"),g,I)}int64be(g,I={}){return this.bigIntVersionCheck(),this.primitiveN("int64be",g,I)}int64le(g,I={}){return this.bigIntVersionCheck(),this.primitiveN("int64le",g,I)}uint64(g,I={}){return this.bigIntVersionCheck(),this.primitiveN(this.useThisEndian("uint64"),g,I)}uint64be(g,I={}){return this.bigIntVersionCheck(),this.primitiveN("uint64be",g,I)}uint64le(g,I={}){return this.bigIntVersionCheck(),this.primitiveN("uint64le",g,I)}floatle(g,I={}){return this.primitiveN("floatle",g,I)}floatbe(g,I={}){return this.primitiveN("floatbe",g,I)}doublele(g,I={}){return this.primitiveN("doublele",g,I)}doublebe(g,I={}){return this.primitiveN("doublebe",g,I)}bitN(g,I,i){return i.length=g,this.setNextParser("bit",I,i)}bit1(g,I={}){return this.bitN(1,g,I)}bit2(g,I={}){return this.bitN(2,g,I)}bit3(g,I={}){return this.bitN(3,g,I)}bit4(g,I={}){return this.bitN(4,g,I)}bit5(g,I={}){return this.bitN(5,g,I)}bit6(g,I={}){return this.bitN(6,g,I)}bit7(g,I={}){return this.bitN(7,g,I)}bit8(g,I={}){return this.bitN(8,g,I)}bit9(g,I={}){return this.bitN(9,g,I)}bit10(g,I={}){return this.bitN(10,g,I)}bit11(g,I={}){return this.bitN(11,g,I)}bit12(g,I={}){return this.bitN(12,g,I)}bit13(g,I={}){return this.bitN(13,g,I)}bit14(g,I={}){return this.bitN(14,g,I)}bit15(g,I={}){return this.bitN(15,g,I)}bit16(g,I={}){return this.bitN(16,g,I)}bit17(g,I={}){return this.bitN(17,g,I)}bit18(g,I={}){return this.bitN(18,g,I)}bit19(g,I={}){return this.bitN(19,g,I)}bit20(g,I={}){return this.bitN(20,g,I)}bit21(g,I={}){return this.bitN(21,g,I)}bit22(g,I={}){return this.bitN(22,g,I)}bit23(g,I={}){return this.bitN(23,g,I)}bit24(g,I={}){return this.bitN(24,g,I)}bit25(g,I={}){return this.bitN(25,g,I)}bit26(g,I={}){return this.bitN(26,g,I)}bit27(g,I={}){return this.bitN(27,g,I)}bit28(g,I={}){return this.bitN(28,g,I)}bit29(g,I={}){return this.bitN(29,g,I)}bit30(g,I={}){return this.bitN(30,g,I)}bit31(g,I={}){return this.bitN(31,g,I)}bit32(g,I={}){return this.bitN(32,g,I)}namely(g){return No.set(g,this),this.alias=g,this}skip(g,I={}){return this.seek(g,I)}seek(g,I={}){if(I.assert)throw new Error("assert option on seek is not allowed.");return this.setNextParser("seek","",{length:g})}string(g,I){if(!I.zeroTerminated&&!I.length&&!I.greedy)throw new Error("One of length, zeroTerminated, or greedy must be defined for string.");if((I.zeroTerminated||I.length)&&I.greedy)throw new Error("greedy is mutually exclusive with length and zeroTerminated for string.");if(I.stripNull&&!(I.length||I.greedy))throw new Error("length or greedy must be defined if stripNull is enabled.");return I.encoding=I.encoding||"utf8",this.setNextParser("string",g,I)}buffer(g,I){if(!I.length&&!I.readUntil)throw new Error("length or readUntil must be defined for buffer.");return this.setNextParser("buffer",g,I)}wrapped(g,I){if(typeof I!="object"&&typeof g=="object"&&(I=g,g=""),!I||!I.wrapper||!I.type)throw new Error("Both wrapper and type must be defined for wrapped.");if(!I.length&&!I.readUntil)throw new Error("length or readUntil must be defined for wrapped.");return this.setNextParser("wrapper",g,I)}array(g,I){if(!I.readUntil&&!I.length&&!I.lengthInBytes)throw new Error("One of readUntil, length and lengthInBytes must be defined for array.");if(!I.type)throw new Error("type is required for array.");if(typeof I.type=="string"&&!No.has(I.type)&&!(I.type in ko))throw new Error(`Array element type "${I.type}" is unkown.`);return this.setNextParser("array",g,I)}choice(g,I){if(typeof I!="object"&&typeof g=="object"&&(I=g,g=""),!I)throw new Error("tag and choices are are required for choice.");if(!I.tag)throw new Error("tag is requird for choice.");if(!I.choices)throw new Error("choices is required for choice.");for(const i in I.choices){const n=parseInt(i,10),C=I.choices[n];if(isNaN(n))throw new Error(`Choice key "${i}" is not a number.`);if(typeof C=="string"&&!No.has(C)&&!(C in ko))throw new Error(`Choice type "${C}" is unkown.`)}return this.setNextParser("choice",g,I)}nest(g,I){if(typeof I!="object"&&typeof g=="object"&&(I=g,g=""),!I||!I.type)throw new Error("type is required for nest.");if(!(I.type instanceof kg)&&!No.has(I.type))throw new Error("type must be a known parser name or a Parser object.");if(!(I.type instanceof kg)&&!g)throw new Error("type must be a Parser object if the variable name is omitted.");return this.setNextParser("nest",g,I)}pointer(g,I){if(!I.offset)throw new Error("offset is required for pointer.");if(!I.type)throw new Error("type is required for pointer.");if(typeof I.type=="string"&&!(I.type in ko)&&!No.has(I.type))throw new Error(`Pointer type "${I.type}" is unkown.`);return this.setNextParser("pointer",g,I)}saveOffset(g,I={}){return this.setNextParser("saveOffset",g,I)}endianness(g){switch(g.toLowerCase()){case"little":this.endian="le";break;case"big":this.endian="be";break;default:throw new Error('endianness must be one of "little" or "big"')}return this}endianess(g){return this.endianness(g)}useContextVars(g=!0){return this.useContextVariables=g,this}create(g){if(!(g instanceof Function))throw new Error("Constructor must be a Function object.");return this.constructorFn=g,this}getContext(g){const I=new xgg(g,this.useContextVariables);return I.pushCode("var dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);"),this.alias?(this.addAliasedCode(I),I.pushCode(`return ${Du+this.alias}(0).result;`)):this.addRawCode(I),I}getCode(){const g="imports";return this.getContext(g).code}addRawCode(g){g.pushCode("var offset = 0;"),g.pushCode(`var vars = ${this.constructorFn?"new constructorFn()":"{}"};`),g.pushCode("vars.$parent = null;"),g.pushCode("vars.$root = vars;"),this.generate(g),this.resolveReferences(g),g.pushCode("delete vars.$parent;"),g.pushCode("delete vars.$root;"),g.pushCode("return vars;")}addAliasedCode(g){return g.pushCode(`function ${Du+this.alias}(offset, context) {`),g.pushCode(`var vars = ${this.constructorFn?"new constructorFn()":"{}"};`),g.pushCode("var ctx = Object.assign({$parent: null, $root: vars}, context || {});"),g.pushCode("vars = Object.assign(vars, ctx);"),this.generate(g),g.markResolved(this.alias),this.resolveReferences(g),g.pushCode("Object.keys(ctx).forEach(function (item) { delete vars[item]; });"),g.pushCode("return { offset: offset, result: vars };"),g.pushCode("}"),g}resolveReferences(g){const I=g.getUnresolvedReferences();g.markRequested(I),I.forEach(i=>{var n;(n=No.get(i))===null||n===void 0||n.addAliasedCode(g)})}compile(){const g="imports",I=this.getContext(g);this.compiled=new Function(g,"TextDecoder",`return function (buffer, constructorFn) { ${I.code} };`)(I.imports,TextDecoder)}sizeOf(){let g=NaN;if(Object.keys(ko).indexOf(this.type)>=0)g=ko[this.type];else if(this.type==="string"&&typeof this.options.length=="number")g=this.options.length;else if(this.type==="buffer"&&typeof this.options.length=="number")g=this.options.length;else if(this.type==="array"&&typeof this.options.length=="number"){let I=NaN;typeof this.options.type=="string"?I=ko[this.options.type]:this.options.type instanceof kg&&(I=this.options.type.sizeOf()),g=this.options.length*I}else this.type==="seek"?g=this.options.length:this.type==="nest"?g=this.options.type.sizeOf():this.type||(g=0);return this.next&&(g+=this.next.sizeOf()),g}parse(g){return this.compiled||this.compile(),this.compiled(g,this.constructorFn)}setNextParser(g,I,i){const n=new kg;return n.type=g,n.varName=I,n.options=i,n.endian=this.endian,this.head?this.head.next=n:this.next=n,this.head=n,this}generate(g){if(this.type){switch(this.type){case"uint8":case"uint16le":case"uint16be":case"uint32le":case"uint32be":case"int8":case"int16le":case"int16be":case"int32le":case"int32be":case"int64be":case"int64le":case"uint64be":case"uint64le":case"floatle":case"floatbe":case"doublele":case"doublebe":this.primitiveGenerateN(this.type,g);break;case"bit":this.generateBit(g);break;case"string":this.generateString(g);break;case"buffer":this.generateBuffer(g);break;case"seek":this.generateSeek(g);break;case"nest":this.generateNest(g);break;case"array":this.generateArray(g);break;case"choice":this.generateChoice(g);break;case"pointer":this.generatePointer(g);break;case"saveOffset":this.generateSaveOffset(g);break;case"wrapper":this.generateWrapper(g);break}this.type!=="bit"&&this.generateAssert(g)}const I=g.generateVariable(this.varName);return this.options.formatter&&this.type!=="bit"&&this.generateFormatter(g,I,this.options.formatter),this.generateNext(g)}generateAssert(g){if(!this.options.assert)return;const I=g.generateVariable(this.varName);switch(typeof this.options.assert){case"function":{const i=g.addImport(this.options.assert);g.pushCode(`if (!${i}.call(vars, ${I})) {`)}break;case"number":g.pushCode(`if (${this.options.assert} !== ${I}) {`);break;case"string":g.pushCode(`if (${JSON.stringify(this.options.assert)} !== ${I}) {`);break;default:throw new Error("assert option must be a string, number or a function.")}g.generateError(`"Assertion error: ${I} is " + ${JSON.stringify(this.options.assert.toString())}`),g.pushCode("}")}generateNext(g){return this.next&&(g=this.next.generate(g)),g}generateBit(g){const I=JSON.parse(JSON.stringify(this));if(I.options=this.options,I.generateAssert=this.generateAssert.bind(this),I.generateFormatter=this.generateFormatter.bind(this),I.varName=g.generateVariable(I.varName),g.bitFields.push(I),!this.next||this.next&&["bit","nest"].indexOf(this.next.type)<0){const i=g.generateTmpVariable();g.pushCode(`var ${i} = 0;`);const n=(A=0)=>{let l=0;for(let c=A;c32)break;l+=u}return l},C=A=>(A<=8?(g.pushCode(`${i} = dataView.getUint8(offset);`),A=8):A<=16?(g.pushCode(`${i} = dataView.getUint16(offset);`),A=16):A<=24?(g.pushCode(`${i} = (dataView.getUint16(offset) << 8) | dataView.getUint8(offset + 2);`),A=24):(g.pushCode(`${i} = dataView.getUint32(offset);`),A=32),g.pushCode(`offset += ${A/8};`),A);let r=0;const o=this.endian==="be";let a=0,s=0;g.bitFields.forEach((A,l)=>{let c=A.options.length;if(c>s){if(s){const h=-1>>>32-s;g.pushCode(`${A.varName} = (${i} & 0x${h.toString(16)}) << ${c-s};`),c-=s}r=0,s=a=C(n(l)-s)}const u=o?a-r-c:r,d=-1>>>32-c;g.pushCode(`${A.varName} ${c> ${u} & 0x${d.toString(16)};`),A.options.length===32&&g.pushCode(`${A.varName} >>>= 0`),A.options.assert&&A.generateAssert(g),A.options.formatter&&A.generateFormatter(g,A.varName,A.options.formatter),r+=c,s-=c}),g.bitFields=[]}}generateSeek(g){const I=g.generateOption(this.options.length);g.pushCode(`offset += ${I};`)}generateString(g){const I=g.generateVariable(this.varName),i=g.generateTmpVariable(),n=this.options.encoding,C=n.toLowerCase()==="hex",r='b => b.toString(16).padStart(2, "0")';if(this.options.length&&this.options.zeroTerminated){const o=this.options.length;g.pushCode(`var ${i} = offset;`),g.pushCode(`while(dataView.getUint8(offset++) !== 0 && offset - ${i} < ${o});`);const a=`offset - ${i} < ${o} ? offset - 1 : offset`;g.pushCode(C?`${I} = Array.from(buffer.subarray(${i}, ${a}), ${r}).join('');`:`${I} = new TextDecoder('${n}').decode(buffer.subarray(${i}, ${a}));`)}else if(this.options.length){const o=g.generateOption(this.options.length);g.pushCode(C?`${I} = Array.from(buffer.subarray(offset, offset + ${o}), ${r}).join('');`:`${I} = new TextDecoder('${n}').decode(buffer.subarray(offset, offset + ${o}));`),g.pushCode(`offset += ${o};`)}else this.options.zeroTerminated?(g.pushCode(`var ${i} = offset;`),g.pushCode("while(dataView.getUint8(offset++) !== 0);"),g.pushCode(C?`${I} = Array.from(buffer.subarray(${i}, offset - 1), ${r}).join('');`:`${I} = new TextDecoder('${n}').decode(buffer.subarray(${i}, offset - 1));`)):this.options.greedy&&(g.pushCode(`var ${i} = offset;`),g.pushCode("while(buffer.length > offset++);"),g.pushCode(C?`${I} = Array.from(buffer.subarray(${i}, offset), ${r}).join('');`:`${I} = new TextDecoder('${n}').decode(buffer.subarray(${i}, offset));`));this.options.stripNull&&g.pushCode(`${I} = ${I}.replace(/\\x00+$/g, '')`)}generateBuffer(g){const I=g.generateVariable(this.varName);if(typeof this.options.readUntil=="function"){const i=this.options.readUntil,n=g.generateTmpVariable(),C=g.generateTmpVariable();g.pushCode(`var ${n} = offset;`),g.pushCode(`var ${C} = 0;`),g.pushCode("while (offset < buffer.length) {"),g.pushCode(`${C} = dataView.getUint8(offset);`);const r=g.addImport(i);g.pushCode(`if (${r}.call(${g.generateVariable()}, ${C}, buffer.subarray(offset))) break;`),g.pushCode("offset += 1;"),g.pushCode("}"),g.pushCode(`${I} = buffer.subarray(${n}, offset);`)}else if(this.options.readUntil==="eof")g.pushCode(`${I} = buffer.subarray(offset);`);else{const i=g.generateOption(this.options.length);g.pushCode(`${I} = buffer.subarray(offset, offset + ${i});`),g.pushCode(`offset += ${i};`)}this.options.clone&&g.pushCode(`${I} = buffer.constructor.from(${I});`)}generateArray(g){const I=g.generateOption(this.options.length),i=g.generateOption(this.options.lengthInBytes),n=this.options.type,C=g.generateTmpVariable(),r=g.generateVariable(this.varName),o=g.generateTmpVariable(),a=this.options.key,s=typeof a=="string";if(s?g.pushCode(`${r} = {};`):g.pushCode(`${r} = [];`),typeof this.options.readUntil=="function"?g.pushCode("do {"):this.options.readUntil==="eof"?g.pushCode(`for (var ${C} = 0; offset < buffer.length; ${C}++) {`):i!==void 0?g.pushCode(`for (var ${C} = offset + ${i}; offset < ${C}; ) {`):g.pushCode(`for (var ${C} = ${I}; ${C} > 0; ${C}--) {`),typeof n=="string")if(No.get(n)){const A=g.generateTmpVariable();if(g.pushCode(`var ${A} = ${Du+n}(offset, {`),g.useContextVariables){const l=g.generateVariable();g.pushCode(`$parent: ${l},`),g.pushCode(`$root: ${l}.$root,`),!this.options.readUntil&&i===void 0&&g.pushCode(`$index: ${I} - ${C},`)}g.pushCode("});"),g.pushCode(`var ${o} = ${A}.result; offset = ${A}.offset;`),n!==this.alias&&g.addReference(n)}else{const A=g1[n],l=I1[n];g.pushCode(`var ${o} = dataView.get${A}(offset, ${l});`),g.pushCode(`offset += ${ko[n]};`)}else if(n instanceof kg){g.pushCode(`var ${o} = {};`);const A=g.generateVariable();g.pushScope(o),g.useContextVariables&&(g.pushCode(`${o}.$parent = ${A};`),g.pushCode(`${o}.$root = ${A}.$root;`),!this.options.readUntil&&i===void 0&&g.pushCode(`${o}.$index = ${I} - ${C};`)),n.generate(g),g.useContextVariables&&(g.pushCode(`delete ${o}.$parent;`),g.pushCode(`delete ${o}.$root;`),g.pushCode(`delete ${o}.$index;`)),g.popScope()}if(s?g.pushCode(`${r}[${o}.${a}] = ${o};`):g.pushCode(`${r}.push(${o});`),g.pushCode("}"),typeof this.options.readUntil=="function"){const A=this.options.readUntil,l=g.addImport(A);g.pushCode(`while (!${l}.call(${g.generateVariable()}, ${o}, buffer.subarray(offset)));`)}}generateChoiceCase(g,I,i){if(typeof i=="string"){const n=g.generateVariable(this.varName);if(No.has(i)){const C=g.generateTmpVariable();g.pushCode(`var ${C} = ${Du+i}(offset, {`),g.useContextVariables&&(g.pushCode(`$parent: ${n}.$parent,`),g.pushCode(`$root: ${n}.$root,`)),g.pushCode("});"),g.pushCode(`${n} = ${C}.result; offset = ${C}.offset;`),i!==this.alias&&g.addReference(i)}else{const C=g1[i],r=I1[i];g.pushCode(`${n} = dataView.get${C}(offset, ${r});`),g.pushCode(`offset += ${ko[i]}`)}}else i instanceof kg&&(g.pushPath(I),i.generate(g),g.popPath(I))}generateChoice(g){const I=g.generateOption(this.options.tag),i=g.generateVariable(this.varName);if(this.varName&&(g.pushCode(`${i} = {};`),g.useContextVariables)){const n=g.generateVariable();g.pushCode(`${i}.$parent = ${n};`),g.pushCode(`${i}.$root = ${n}.$root;`)}g.pushCode(`switch(${I}) {`);for(const n in this.options.choices){const C=parseInt(n,10),r=this.options.choices[C];g.pushCode(`case ${C}:`),this.generateChoiceCase(g,this.varName,r),g.pushCode("break;")}g.pushCode("default:"),this.options.defaultChoice?this.generateChoiceCase(g,this.varName,this.options.defaultChoice):g.generateError(`"Met undefined tag value " + ${I} + " at choice"`),g.pushCode("}"),this.varName&&g.useContextVariables&&(g.pushCode(`delete ${i}.$parent;`),g.pushCode(`delete ${i}.$root;`))}generateNest(g){const I=g.generateVariable(this.varName);if(this.options.type instanceof kg){if(this.varName&&(g.pushCode(`${I} = {};`),g.useContextVariables)){const i=g.generateVariable();g.pushCode(`${I}.$parent = ${i};`),g.pushCode(`${I}.$root = ${i}.$root;`)}g.pushPath(this.varName),this.options.type.generate(g),g.popPath(this.varName),this.varName&&g.useContextVariables&&g.useContextVariables&&(g.pushCode(`delete ${I}.$parent;`),g.pushCode(`delete ${I}.$root;`))}else if(No.has(this.options.type)){const i=g.generateTmpVariable();if(g.pushCode(`var ${i} = ${Du+this.options.type}(offset, {`),g.useContextVariables){const n=g.generateVariable();g.pushCode(`$parent: ${n},`),g.pushCode(`$root: ${n}.$root,`)}g.pushCode("});"),g.pushCode(`${I} = ${i}.result; offset = ${i}.offset;`),this.options.type!==this.alias&&g.addReference(this.options.type)}}generateWrapper(g){const I=g.generateVariable(this.varName),i=g.generateTmpVariable();if(typeof this.options.readUntil=="function"){const a=this.options.readUntil,s=g.generateTmpVariable(),A=g.generateTmpVariable();g.pushCode(`var ${s} = offset;`),g.pushCode(`var ${A} = 0;`),g.pushCode("while (offset < buffer.length) {"),g.pushCode(`${A} = dataView.getUint8(offset);`);const l=g.addImport(a);g.pushCode(`if (${l}.call(${g.generateVariable()}, ${A}, buffer.subarray(offset))) break;`),g.pushCode("offset += 1;"),g.pushCode("}"),g.pushCode(`${i} = buffer.subarray(${s}, offset);`)}else if(this.options.readUntil==="eof")g.pushCode(`${i} = buffer.subarray(offset);`);else{const a=g.generateOption(this.options.length);g.pushCode(`${i} = buffer.subarray(offset, offset + ${a});`),g.pushCode(`offset += ${a};`)}this.options.clone&&g.pushCode(`${i} = buffer.constructor.from(${i});`);const n=g.generateTmpVariable(),C=g.generateTmpVariable(),r=g.generateTmpVariable(),o=g.addImport(this.options.wrapper);if(g.pushCode(`${i} = ${o}.call(this, ${i}).subarray(0);`),g.pushCode(`var ${n} = buffer;`),g.pushCode(`var ${C} = offset;`),g.pushCode(`var ${r} = dataView;`),g.pushCode(`buffer = ${i};`),g.pushCode("offset = 0;"),g.pushCode("dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);"),this.options.type instanceof kg)this.varName&&g.pushCode(`${I} = {};`),g.pushPath(this.varName),this.options.type.generate(g),g.popPath(this.varName);else if(No.has(this.options.type)){const a=g.generateTmpVariable();g.pushCode(`var ${a} = ${Du+this.options.type}(0);`),g.pushCode(`${I} = ${a}.result;`),this.options.type!==this.alias&&g.addReference(this.options.type)}g.pushCode(`buffer = ${n};`),g.pushCode(`dataView = ${r};`),g.pushCode(`offset = ${C};`)}generateFormatter(g,I,i){if(typeof i=="function"){const n=g.addImport(i);g.pushCode(`${I} = ${n}.call(${g.generateVariable()}, ${I});`)}}generatePointer(g){const I=this.options.type,i=g.generateOption(this.options.offset),n=g.generateTmpVariable(),C=g.generateVariable(this.varName);if(g.pushCode(`var ${n} = offset;`),g.pushCode(`offset = ${i};`),this.options.type instanceof kg){if(g.pushCode(`${C} = {};`),g.useContextVariables){const r=g.generateVariable();g.pushCode(`${C}.$parent = ${r};`),g.pushCode(`${C}.$root = ${r}.$root;`)}g.pushPath(this.varName),this.options.type.generate(g),g.popPath(this.varName),g.useContextVariables&&(g.pushCode(`delete ${C}.$parent;`),g.pushCode(`delete ${C}.$root;`))}else if(No.has(this.options.type)){const r=g.generateTmpVariable();if(g.pushCode(`var ${r} = ${Du+this.options.type}(offset, {`),g.useContextVariables){const o=g.generateVariable();g.pushCode(`$parent: ${o},`),g.pushCode(`$root: ${o}.$root,`)}g.pushCode("});"),g.pushCode(`${C} = ${r}.result; offset = ${r}.offset;`),this.options.type!==this.alias&&g.addReference(this.options.type)}else if(Object.keys(ko).indexOf(this.options.type)>=0){const r=g1[I],o=I1[I];g.pushCode(`${C} = dataView.get${r}(offset, ${o});`),g.pushCode(`offset += ${ko[I]};`)}g.pushCode(`offset = ${n};`)}generateSaveOffset(g){const I=g.generateVariable(this.varName);g.pushCode(`${I} = offset`)}}var V2e={},Q$={},Kh={},Kw={};Object.defineProperty(Kw,"__esModule",{value:!0});function j$(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Sle(e,g){for(var I=0;I"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bG(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function zgg(e,g){if(g&&(typeof g=="object"||typeof g=="function"))return g;if(g!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return bG(e)}function Pgg(e){var g=Mgg();return function(){var i=h0(e),n;if(g){var C=h0(this).constructor;n=Reflect.construct(i,arguments,C)}else n=i.apply(this,arguments);return zgg(this,n)}}function Jgg(e,g){for(;!Object.prototype.hasOwnProperty.call(e,g)&&(e=h0(e),e!==null););return e}function xW(){return typeof Reflect<"u"&&Reflect.get?xW=Reflect.get.bind():xW=function(g,I,i){var n=Jgg(g,I);if(n){var C=Object.getOwnPropertyDescriptor(n,I);return C.get?C.get.call(arguments.length<3?g:i):C.value}},xW.apply(this,arguments)}var wle=function(){function e(){j$(this,e),Object.defineProperty(this,"listeners",{value:{},writable:!0,configurable:!0})}return q$(e,[{key:"addEventListener",value:function(I,i,n){I in this.listeners||(this.listeners[I]=[]),this.listeners[I].push({callback:i,options:n})}},{key:"removeEventListener",value:function(I,i){if(I in this.listeners){for(var n=this.listeners[I],C=0,r=n.length;C"u")n=new Error("This operation was aborted"),n.name="AbortError";else try{n=new DOMException("signal is aborted without reason")}catch{n=new Error("This operation was aborted"),n.name="AbortError"}this.signal.reason=n,this.signal.dispatchEvent(i)}},{key:"toString",value:function(){return"[object AbortController]"}}]),e}();typeof Symbol<"u"&&Symbol.toStringTag&&(W2e.prototype[Symbol.toStringTag]="AbortController",e8.prototype[Symbol.toStringTag]="AbortSignal");function Ogg(e){return e.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL?(console.log("__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill"),!0):typeof e.Request=="function"&&!e.Request.prototype.hasOwnProperty("signal")||!e.AbortController}function _gg(e){typeof e=="function"&&(e={fetch:e});var g=e,I=g.fetch,i=g.Request,n=i===void 0?I.Request:i,C=g.AbortController,r=g.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,o=r===void 0?!1:r;if(!Ogg({fetch:I,Request:n,AbortController:C,__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL:o}))return{fetch:I,Request:a};var a=n;(a&&!a.prototype.hasOwnProperty("signal")||o)&&(a=function(c,u){var d;u&&u.signal&&(d=u.signal,delete u.signal);var h=new n(c,u);return d&&Object.defineProperty(h,"signal",{writable:!1,enumerable:!1,configurable:!0,value:d}),h},a.prototype=n.prototype);var s=I,A=function(c,u){var d=a&&a.prototype.isPrototypeOf(c)?c.signal:u?u.signal:void 0;if(d){var h;try{h=new DOMException("Aborted","AbortError")}catch{h=new Error("Aborted"),h.name="AbortError"}if(d.aborted)return Promise.reject(h);var m=new Promise(function(f,b){d.addEventListener("abort",function(){return b(h)},{once:!0})});return u&&u.signal&&delete u.signal,Promise.race([m,s(c,u)])}return s(c,u)};return{fetch:A,Request:a}}Kw.AbortController=W2e;Kw.AbortSignal=e8;Kw.abortableFetch=_gg;Object.defineProperty(Kh,"__esModule",{value:!0});Kh.AbortSignal=Kh.AbortController=void 0;const X2e=Kw;var WH=function(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof gh<"u")return gh;throw new Error("unable to locate global object")};let Lgg=typeof WH().AbortController>"u"?X2e.AbortController:WH().AbortController;Kh.AbortController=Lgg;let Ugg=typeof WH().AbortController>"u"?X2e.AbortSignal:WH().AbortSignal;Kh.AbortSignal=Ugg;var t8={};Object.defineProperty(t8,"__esModule",{value:!0});const Qgg=Kh;class jgg{}class $gg{constructor(){this.signals=new Set,this.abortController=new Qgg.AbortController}addSignal(g=new jgg){if(this.signal.aborted)throw new Error("cannot add a signal, already aborted!");this.signals.add(g),g.aborted?this.handleAborted(g):typeof g.addEventListener=="function"&&g.addEventListener("abort",()=>{this.handleAborted(g)})}handleAborted(g){this.signals.delete(g),this.signals.size===0&&this.abortController.abort()}get signal(){return this.abortController.signal}abort(){this.abortController.abort()}}t8.default=$gg;var g8={};Object.defineProperty(g8,"__esModule",{value:!0});class qgg{constructor(){this.callbacks=new Set}addCallback(g=()=>{}){this.callbacks.add(g),g(this.currentMessage)}callback(g){this.currentMessage=g,this.callbacks.forEach(I=>{I(g)})}}g8.default=qgg;var H2e=gh&&gh.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Q$,"__esModule",{value:!0});const eIg=Kh,tIg=H2e(t8),gIg=H2e(g8);class XH{constructor({fill:g,cache:I}){if(typeof g!="function")throw new TypeError("must pass a fill function");if(typeof I!="object")throw new TypeError("must pass a cache object");if(typeof I.get!="function"||typeof I.set!="function"||typeof I.delete!="function")throw new TypeError("cache must implement get(key), set(key, val), and and delete(key)");this.cache=I,this.fillCallback=g}static isAbortException(g){return g.name==="AbortError"||g.code==="ERR_ABORTED"||g.message==="AbortError: aborted"||g.message==="Error: aborted"}evict(g,I){this.cache.get(g)===I&&this.cache.delete(g)}fill(g,I,i,n){const C=new tIg.default,r=new gIg.default;r.addCallback(n);const o={aborter:C,promise:this.fillCallback(I,C.signal,a=>{r.callback(a)}),settled:!1,statusReporter:r,get aborted(){return this.aborter.signal.aborted}};o.aborter.addSignal(i),o.aborter.signal.addEventListener("abort",()=>{o.settled||this.evict(g,o)}),o.promise.then(()=>{o.settled=!0},()=>{o.settled=!0,this.evict(g,o)}).catch(a=>{throw console.error(a),a}),this.cache.set(g,o)}static checkSinglePromise(g,I){function i(){if(I&&I.aborted)throw Object.assign(new Error("aborted"),{code:"ERR_ABORTED"})}return g.then(n=>(i(),n),n=>{throw i(),n})}has(g){return this.cache.has(g)}get(g,I,i,n){if(!i&&I instanceof eIg.AbortSignal)throw new TypeError("second get argument appears to be an AbortSignal, perhaps you meant to pass `null` for the fill data?");const C=this.cache.get(g);return C?C.aborted&&!C.settled?(this.evict(g,C),this.get(g,I,i,n)):C.settled?C.promise:(C.aborter.addSignal(i),C.statusReporter.addCallback(n),XH.checkSinglePromise(C.promise,i)):(this.fill(g,I,i,n),XH.checkSinglePromise(this.cache.get(g).promise,i))}delete(g){const I=this.cache.get(g);I&&(I.settled||I.aborter.abort(),this.cache.delete(g))}clear(){const g=this.cache.keys();let I=0;for(let i=g.next();!i.done;i=g.next())this.delete(i.value),I+=1;return I}}Q$.default=XH;var IIg=gh&&gh.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(V2e,"__esModule",{value:!0});const iIg=IIg(Q$);var nIg=V2e.default=iIg.default;class nc{constructor(g,I){this.ranges=arguments.length===2?[{min:g,max:I}]:0 in g?Object.assign({},g):[g]}min(){return this.ranges[0].min}max(){return this.ranges[this.ranges.length-1].max}contains(g){for(let I=0;I=g)return!0}return!1}isContiguous(){return this.ranges.length>1}getRanges(){return this.ranges.map(g=>new nc(g.min,g.max))}toString(){return this.ranges.map(g=>`[${g.min}-${g.max}]`).join(",")}union(g){const I=this.getRanges().concat(g.getRanges()).sort(this.rangeOrder),i=[];let n=I[0];for(let C=1;Cn.max()+1?(i.push(n),n=r):r.max()>n.max()&&(n=new nc(n.min(),r.max()))}return i.push(n),i.length===1?i[0]:new nc(i)}intersection(g){let I=this,i=g;const n=this.ranges(),C=i.ranges(),r=n.length,o=C.length;let a=0,s=0;const A=[];for(;a=l&&A.push(new nc(l,c)),I.max()>i.max()?s+=1:a+=1}if(A.length===0)throw new Error("found range of length 0");return A.length===1?A[0]:new nc(A)}coverage(){let g=0;const I=this.ranges();for(let i=0;in.min()?1:i.max()i.max()?1:0}}function hy(e){let g=e.length;for(;--g>=0;)e[g]=0}const CIg=3,rIg=258,T2e=29,oIg=256,aIg=oIg+1+T2e,N2e=30,AIg=512,sIg=new Array((aIg+2)*2);hy(sIg);const lIg=new Array(N2e*2);hy(lIg);const cIg=new Array(AIg);hy(cIg);const uIg=new Array(rIg-CIg+1);hy(uIg);const dIg=new Array(T2e);hy(dIg);const hIg=new Array(N2e);hy(hIg);const mIg=(e,g,I,i)=>{let n=e&65535|0,C=e>>>16&65535|0,r=0;for(;I!==0;){r=I>2e3?2e3:I,I-=r;do n=n+g[i++]|0,C=C+n|0;while(--r);n%=65521,C%=65521}return n|C<<16|0};var a_=mIg;const fIg=()=>{let e,g=[];for(var I=0;I<256;I++){e=I;for(var i=0;i<8;i++)e=e&1?3988292384^e>>>1:e>>>1;g[I]=e}return g},pIg=new Uint32Array(fIg()),bIg=(e,g,I,i)=>{const n=pIg,C=i+I;e^=-1;for(let r=i;r>>8^n[(e^g[r])&255];return e^-1};var ka=bIg,A_={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},I8={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const yIg=(e,g)=>Object.prototype.hasOwnProperty.call(e,g);var ZIg=function(e){const g=Array.prototype.slice.call(arguments,1);for(;g.length;){const I=g.shift();if(I){if(typeof I!="object")throw new TypeError(I+"must be non-object");for(const i in I)yIg(I,i)&&(e[i]=I[i])}}return e},GIg=e=>{let g=0;for(let i=0,n=e.length;i=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;lS[254]=lS[254]=1;var vIg=e=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let g,I,i,n,C,r=e.length,o=0;for(n=0;n>>6,g[C++]=128|I&63):I<65536?(g[C++]=224|I>>>12,g[C++]=128|I>>>6&63,g[C++]=128|I&63):(g[C++]=240|I>>>18,g[C++]=128|I>>>12&63,g[C++]=128|I>>>6&63,g[C++]=128|I&63);return g};const BIg=(e,g)=>{if(g<65534&&e.subarray&&Y2e)return String.fromCharCode.apply(null,e.length===g?e:e.subarray(0,g));let I="";for(let i=0;i{const I=g||e.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,g));let i,n;const C=new Array(I*2);for(n=0,i=0;i4){C[n++]=65533,i+=o-1;continue}for(r&=o===2?31:o===3?15:7;o>1&&i1){C[n++]=65533;continue}r<65536?C[n++]=r:(r-=65536,C[n++]=55296|r>>10&1023,C[n++]=56320|r&1023)}return BIg(C,n)},wIg=(e,g)=>{g=g||e.length,g>e.length&&(g=e.length);let I=g-1;for(;I>=0&&(e[I]&192)===128;)I--;return I<0||I===0?g:I+lS[e[I]]>g?I:g},s_={string2buf:vIg,buf2string:SIg,utf8border:wIg};function RIg(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var VIg=RIg;const i1=16209,WIg=16191;var XIg=function(g,I){let i,n,C,r,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G,v,w,R;const S=g.state;i=g.next_in,w=g.input,n=i+(g.avail_in-5),C=g.next_out,R=g.output,r=C-(I-g.avail_out),o=C+(g.avail_out-257),a=S.dmax,s=S.wsize,A=S.whave,l=S.wnext,c=S.window,u=S.hold,d=S.bits,h=S.lencode,m=S.distcode,f=(1<>>24,u>>>=y,d-=y,y=p>>>16&255,y===0)R[C++]=p&65535;else if(y&16){Z=p&65535,y&=15,y&&(d>>=y,d-=y),d<15&&(u+=w[i++]<>>24,u>>>=y,d-=y,y=p>>>16&255,y&16){if(B=p&65535,y&=15,da){g.msg="invalid distance too far back",S.mode=i1;break e}if(u>>>=y,d-=y,y=C-r,B>y){if(y=B-y,y>A&&S.sane){g.msg="invalid distance too far back",S.mode=i1;break e}if(G=0,v=c,l===0){if(G+=s-y,y2;)R[C++]=v[G++],R[C++]=v[G++],R[C++]=v[G++],Z-=3;Z&&(R[C++]=v[G++],Z>1&&(R[C++]=v[G++]))}else{G=C-B;do R[C++]=R[G++],R[C++]=R[G++],R[C++]=R[G++],Z-=3;while(Z>2);Z&&(R[C++]=R[G++],Z>1&&(R[C++]=R[G++]))}}else if(y&64){g.msg="invalid distance code",S.mode=i1;break e}else{p=m[(p&65535)+(u&(1<>3,i-=Z,d-=Z<<3,u&=(1<{const a=o.bits;let s=0,A=0,l=0,c=0,u=0,d=0,h=0,m=0,f=0,b=0,p,y,Z,B,G,v=null,w;const R=new Uint16Array(rf+1),S=new Uint16Array(rf+1);let X=null,W,V,H;for(s=0;s<=rf;s++)R[s]=0;for(A=0;A=1&&R[c]===0;c--);if(u>c&&(u=c),c===0)return n[C++]=1<<24|64<<16|0,n[C++]=1<<24|64<<16|0,o.bits=1,0;for(l=1;l0&&(e===Wle||c!==1))return-1;for(S[1]=0,s=1;sRle||e===Xle&&f>Vle)return 1;for(;;){W=s-h,r[A]+1=w?(V=X[r[A]-w],H=v[r[A]-w]):(V=32+64,H=0),p=1<>h)+y]=W<<24|V<<16|H|0;while(y!==0);for(p=1<>=1;if(p!==0?(b&=p-1,b+=p):b=0,A++,--R[s]===0){if(s===c)break;s=g[I+r[A]]}if(s>u&&(b&B)!==Z){for(h===0&&(h=u),G+=l,d=s-h,m=1<Rle||e===Xle&&f>Vle)return 1;Z=b&B,n[Z]=u<<24|d<<16|G-C|0}}return b!==0&&(n[G+b]=s-h<<24|64<<16|0),o.bits=u,0};var Nv=YIg;const KIg=0,K2e=1,F2e=2,{Z_FINISH:Hle,Z_BLOCK:FIg,Z_TREES:n1,Z_OK:Fh,Z_STREAM_END:DIg,Z_NEED_DICT:xIg,Z_STREAM_ERROR:ao,Z_DATA_ERROR:D2e,Z_MEM_ERROR:x2e,Z_BUF_ERROR:EIg,Z_DEFLATED:Tle}=I8,tY=16180,Nle=16181,kle=16182,Yle=16183,Kle=16184,Fle=16185,Dle=16186,xle=16187,Ele=16188,Mle=16189,HH=16190,LA=16191,Rx=16192,zle=16193,Vx=16194,Ple=16195,Jle=16196,Ole=16197,_le=16198,C1=16199,r1=16200,Lle=16201,Ule=16202,Qle=16203,jle=16204,$le=16205,Wx=16206,qle=16207,ece=16208,vI=16209,E2e=16210,M2e=16211,MIg=852,zIg=592,PIg=15,JIg=PIg,tce=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function OIg(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Zm=e=>{if(!e)return 1;const g=e.state;return!g||g.strm!==e||g.modeM2e?1:0},z2e=e=>{if(Zm(e))return ao;const g=e.state;return e.total_in=e.total_out=g.total=0,e.msg="",g.wrap&&(e.adler=g.wrap&1),g.mode=tY,g.last=0,g.havedict=0,g.flags=-1,g.dmax=32768,g.head=null,g.hold=0,g.bits=0,g.lencode=g.lendyn=new Int32Array(MIg),g.distcode=g.distdyn=new Int32Array(zIg),g.sane=1,g.back=-1,Fh},P2e=e=>{if(Zm(e))return ao;const g=e.state;return g.wsize=0,g.whave=0,g.wnext=0,z2e(e)},J2e=(e,g)=>{let I;if(Zm(e))return ao;const i=e.state;return g<0?(I=0,g=-g):(I=(g>>4)+5,g<48&&(g&=15)),g&&(g<8||g>15)?ao:(i.window!==null&&i.wbits!==g&&(i.window=null),i.wrap=I,i.wbits=g,P2e(e))},O2e=(e,g)=>{if(!e)return ao;const I=new OIg;e.state=I,I.strm=e,I.window=null,I.mode=tY;const i=J2e(e,g);return i!==Fh&&(e.state=null),i},_Ig=e=>O2e(e,JIg);let gce=!0,Xx,Hx;const LIg=e=>{if(gce){Xx=new Int32Array(512),Hx=new Int32Array(32);let g=0;for(;g<144;)e.lens[g++]=8;for(;g<256;)e.lens[g++]=9;for(;g<280;)e.lens[g++]=7;for(;g<288;)e.lens[g++]=8;for(Nv(K2e,e.lens,0,288,Xx,0,e.work,{bits:9}),g=0;g<32;)e.lens[g++]=5;Nv(F2e,e.lens,0,32,Hx,0,e.work,{bits:5}),gce=!1}e.lencode=Xx,e.lenbits=9,e.distcode=Hx,e.distbits=5},_2e=(e,g,I,i)=>{let n;const C=e.state;return C.window===null&&(C.wsize=1<=C.wsize?(C.window.set(g.subarray(I-C.wsize,I),0),C.wnext=0,C.whave=C.wsize):(n=C.wsize-C.wnext,n>i&&(n=i),C.window.set(g.subarray(I-i,I-i+n),C.wnext),i-=n,i?(C.window.set(g.subarray(I-i,I),0),C.wnext=i,C.whave=C.wsize):(C.wnext+=n,C.wnext===C.wsize&&(C.wnext=0),C.whave{let I,i,n,C,r,o,a,s,A,l,c,u,d,h,m=0,f,b,p,y,Z,B,G,v;const w=new Uint8Array(4);let R,S;const X=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Zm(e)||!e.output||!e.input&&e.avail_in!==0)return ao;I=e.state,I.mode===LA&&(I.mode=Rx),r=e.next_out,n=e.output,a=e.avail_out,C=e.next_in,i=e.input,o=e.avail_in,s=I.hold,A=I.bits,l=o,c=a,v=Fh;e:for(;;)switch(I.mode){case tY:if(I.wrap===0){I.mode=Rx;break}for(;A<16;){if(o===0)break e;o--,s+=i[C++]<>>8&255,I.check=ka(I.check,w,2,0),s=0,A=0,I.mode=Nle;break}if(I.head&&(I.head.done=!1),!(I.wrap&1)||(((s&255)<<8)+(s>>8))%31){e.msg="incorrect header check",I.mode=vI;break}if((s&15)!==Tle){e.msg="unknown compression method",I.mode=vI;break}if(s>>>=4,A-=4,G=(s&15)+8,I.wbits===0&&(I.wbits=G),G>15||G>I.wbits){e.msg="invalid window size",I.mode=vI;break}I.dmax=1<>8&1),I.flags&512&&I.wrap&4&&(w[0]=s&255,w[1]=s>>>8&255,I.check=ka(I.check,w,2,0)),s=0,A=0,I.mode=kle;case kle:for(;A<32;){if(o===0)break e;o--,s+=i[C++]<>>8&255,w[2]=s>>>16&255,w[3]=s>>>24&255,I.check=ka(I.check,w,4,0)),s=0,A=0,I.mode=Yle;case Yle:for(;A<16;){if(o===0)break e;o--,s+=i[C++]<>8),I.flags&512&&I.wrap&4&&(w[0]=s&255,w[1]=s>>>8&255,I.check=ka(I.check,w,2,0)),s=0,A=0,I.mode=Kle;case Kle:if(I.flags&1024){for(;A<16;){if(o===0)break e;o--,s+=i[C++]<>>8&255,I.check=ka(I.check,w,2,0)),s=0,A=0}else I.head&&(I.head.extra=null);I.mode=Fle;case Fle:if(I.flags&1024&&(u=I.length,u>o&&(u=o),u&&(I.head&&(G=I.head.extra_len-I.length,I.head.extra||(I.head.extra=new Uint8Array(I.head.extra_len)),I.head.extra.set(i.subarray(C,C+u),G)),I.flags&512&&I.wrap&4&&(I.check=ka(I.check,i,u,C)),o-=u,C+=u,I.length-=u),I.length))break e;I.length=0,I.mode=Dle;case Dle:if(I.flags&2048){if(o===0)break e;u=0;do G=i[C+u++],I.head&&G&&I.length<65536&&(I.head.name+=String.fromCharCode(G));while(G&&u>9&1,I.head.done=!0),e.adler=I.check=0,I.mode=LA;break;case Mle:for(;A<32;){if(o===0)break e;o--,s+=i[C++]<>>=A&7,A-=A&7,I.mode=Wx;break}for(;A<3;){if(o===0)break e;o--,s+=i[C++]<>>=1,A-=1,s&3){case 0:I.mode=zle;break;case 1:if(LIg(I),I.mode=C1,g===n1){s>>>=2,A-=2;break e}break;case 2:I.mode=Jle;break;case 3:e.msg="invalid block type",I.mode=vI}s>>>=2,A-=2;break;case zle:for(s>>>=A&7,A-=A&7;A<32;){if(o===0)break e;o--,s+=i[C++]<>>16^65535)){e.msg="invalid stored block lengths",I.mode=vI;break}if(I.length=s&65535,s=0,A=0,I.mode=Vx,g===n1)break e;case Vx:I.mode=Ple;case Ple:if(u=I.length,u){if(u>o&&(u=o),u>a&&(u=a),u===0)break e;n.set(i.subarray(C,C+u),r),o-=u,C+=u,a-=u,r+=u,I.length-=u;break}I.mode=LA;break;case Jle:for(;A<14;){if(o===0)break e;o--,s+=i[C++]<>>=5,A-=5,I.ndist=(s&31)+1,s>>>=5,A-=5,I.ncode=(s&15)+4,s>>>=4,A-=4,I.nlen>286||I.ndist>30){e.msg="too many length or distance symbols",I.mode=vI;break}I.have=0,I.mode=Ole;case Ole:for(;I.have>>=3,A-=3}for(;I.have<19;)I.lens[X[I.have++]]=0;if(I.lencode=I.lendyn,I.lenbits=7,R={bits:I.lenbits},v=Nv(KIg,I.lens,0,19,I.lencode,0,I.work,R),I.lenbits=R.bits,v){e.msg="invalid code lengths set",I.mode=vI;break}I.have=0,I.mode=_le;case _le:for(;I.have>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=i[C++]<>>=f,A-=f,I.lens[I.have++]=p;else{if(p===16){for(S=f+2;A>>=f,A-=f,I.have===0){e.msg="invalid bit length repeat",I.mode=vI;break}G=I.lens[I.have-1],u=3+(s&3),s>>>=2,A-=2}else if(p===17){for(S=f+3;A>>=f,A-=f,G=0,u=3+(s&7),s>>>=3,A-=3}else{for(S=f+7;A>>=f,A-=f,G=0,u=11+(s&127),s>>>=7,A-=7}if(I.have+u>I.nlen+I.ndist){e.msg="invalid bit length repeat",I.mode=vI;break}for(;u--;)I.lens[I.have++]=G}}if(I.mode===vI)break;if(I.lens[256]===0){e.msg="invalid code -- missing end-of-block",I.mode=vI;break}if(I.lenbits=9,R={bits:I.lenbits},v=Nv(K2e,I.lens,0,I.nlen,I.lencode,0,I.work,R),I.lenbits=R.bits,v){e.msg="invalid literal/lengths set",I.mode=vI;break}if(I.distbits=6,I.distcode=I.distdyn,R={bits:I.distbits},v=Nv(F2e,I.lens,I.nlen,I.ndist,I.distcode,0,I.work,R),I.distbits=R.bits,v){e.msg="invalid distances set",I.mode=vI;break}if(I.mode=C1,g===n1)break e;case C1:I.mode=r1;case r1:if(o>=6&&a>=258){e.next_out=r,e.avail_out=a,e.next_in=C,e.avail_in=o,I.hold=s,I.bits=A,XIg(e,c),r=e.next_out,n=e.output,a=e.avail_out,C=e.next_in,i=e.input,o=e.avail_in,s=I.hold,A=I.bits,I.mode===LA&&(I.back=-1);break}for(I.back=0;m=I.lencode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=i[C++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=i[C++]<>>=y,A-=y,I.back+=y}if(s>>>=f,A-=f,I.back+=f,I.length=p,b===0){I.mode=$le;break}if(b&32){I.back=-1,I.mode=LA;break}if(b&64){e.msg="invalid literal/length code",I.mode=vI;break}I.extra=b&15,I.mode=Lle;case Lle:if(I.extra){for(S=I.extra;A>>=I.extra,A-=I.extra,I.back+=I.extra}I.was=I.length,I.mode=Ule;case Ule:for(;m=I.distcode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=i[C++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=i[C++]<>>=y,A-=y,I.back+=y}if(s>>>=f,A-=f,I.back+=f,b&64){e.msg="invalid distance code",I.mode=vI;break}I.offset=p,I.extra=b&15,I.mode=Qle;case Qle:if(I.extra){for(S=I.extra;A>>=I.extra,A-=I.extra,I.back+=I.extra}if(I.offset>I.dmax){e.msg="invalid distance too far back",I.mode=vI;break}I.mode=jle;case jle:if(a===0)break e;if(u=c-a,I.offset>u){if(u=I.offset-u,u>I.whave&&I.sane){e.msg="invalid distance too far back",I.mode=vI;break}u>I.wnext?(u-=I.wnext,d=I.wsize-u):d=I.wnext-u,u>I.length&&(u=I.length),h=I.window}else h=n,d=r-I.offset,u=I.length;u>a&&(u=a),a-=u,I.length-=u;do n[r++]=h[d++];while(--u);I.length===0&&(I.mode=r1);break;case $le:if(a===0)break e;n[r++]=I.length,a--,I.mode=r1;break;case Wx:if(I.wrap){for(;A<32;){if(o===0)break e;o--,s|=i[C++]<{if(Zm(e))return ao;let g=e.state;return g.window&&(g.window=null),e.state=null,Fh},jIg=(e,g)=>{if(Zm(e))return ao;const I=e.state;return I.wrap&2?(I.head=g,g.done=!1,Fh):ao},$Ig=(e,g)=>{const I=g.length;let i,n,C;return Zm(e)||(i=e.state,i.wrap!==0&&i.mode!==HH)?ao:i.mode===HH&&(n=1,n=a_(n,g,I,0),n!==i.check)?D2e:(C=_2e(e,g,I,I),C?(i.mode=E2e,x2e):(i.havedict=1,Fh))};var qIg=P2e,eig=J2e,tig=z2e,gig=_Ig,Iig=O2e,iig=UIg,nig=QIg,Cig=jIg,rig=$Ig,oig="pako inflate (from Nodeca project)",os={inflateReset:qIg,inflateReset2:eig,inflateResetKeep:tig,inflateInit:gig,inflateInit2:Iig,inflate:iig,inflateEnd:nig,inflateGetHeader:Cig,inflateSetDictionary:rig,inflateInfo:oig};function aig(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var Aig=aig;const L2e=Object.prototype.toString,{Z_NO_FLUSH:sig,Z_FINISH:lig,Z_OK:cS,Z_STREAM_END:Tx,Z_NEED_DICT:Nx,Z_STREAM_ERROR:cig,Z_DATA_ERROR:Ice,Z_MEM_ERROR:uig}=I8;function Fw(e){this.options=k2e.assign({chunkSize:1024*64,windowBits:15,to:""},e||{});const g=this.options;g.raw&&g.windowBits>=0&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),g.windowBits>=0&&g.windowBits<16&&!(e&&e.windowBits)&&(g.windowBits+=32),g.windowBits>15&&g.windowBits<48&&(g.windowBits&15||(g.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new VIg,this.strm.avail_out=0;let I=os.inflateInit2(this.strm,g.windowBits);if(I!==cS)throw new Error(A_[I]);if(this.header=new Aig,os.inflateGetHeader(this.strm,this.header),g.dictionary&&(typeof g.dictionary=="string"?g.dictionary=s_.string2buf(g.dictionary):L2e.call(g.dictionary)==="[object ArrayBuffer]"&&(g.dictionary=new Uint8Array(g.dictionary)),g.raw&&(I=os.inflateSetDictionary(this.strm,g.dictionary),I!==cS)))throw new Error(A_[I])}Fw.prototype.push=function(e,g){const I=this.strm,i=this.options.chunkSize,n=this.options.dictionary;let C,r,o;if(this.ended)return!1;for(g===~~g?r=g:r=g===!0?lig:sig,L2e.call(e)==="[object ArrayBuffer]"?I.input=new Uint8Array(e):I.input=e,I.next_in=0,I.avail_in=I.input.length;;){for(I.avail_out===0&&(I.output=new Uint8Array(i),I.next_out=0,I.avail_out=i),C=os.inflate(I,r),C===Nx&&n&&(C=os.inflateSetDictionary(I,n),C===cS?C=os.inflate(I,r):C===Ice&&(C=Nx));I.avail_in>0&&C===Tx&&I.state.wrap>0&&e[I.next_in]!==0;)os.inflateReset(I),C=os.inflate(I,r);switch(C){case cig:case Ice:case Nx:case uig:return this.onEnd(C),this.ended=!0,!1}if(o=I.avail_out,I.next_out&&(I.avail_out===0||C===Tx))if(this.options.to==="string"){let a=s_.utf8border(I.output,I.next_out),s=I.next_out-a,A=s_.buf2string(I.output,a);I.next_out=s,I.avail_out=i-s,s&&I.output.set(I.output.subarray(a,a+s),0),this.onData(A)}else this.onData(I.output.length===I.next_out?I.output:I.output.subarray(0,I.next_out));if(!(C===cS&&o===0)){if(C===Tx)return C=os.inflateEnd(this.strm),this.onEnd(C),this.ended=!0,!0;if(I.avail_in===0)break}}return!0};Fw.prototype.onData=function(e){this.chunks.push(e)};Fw.prototype.onEnd=function(e){e===cS&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=k2e.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function i8(e,g){const I=new Fw(g);if(I.push(e),I.err)throw I.msg||A_[I.err];return I.result}function dig(e,g){return g=g||{},g.raw=!0,i8(e,g)}var hig=Fw,mig=i8,fig=dig,pig=i8,big=I8,yig={Inflate:hig,inflate:mig,inflateRaw:fig,ungzip:pig,constants:big};const{Inflate:upg,inflate:dpg,inflateRaw:Zig,ungzip:hpg}=yig;var Gig=Zig;function vig(e){return Gig(e.subarray(2))}class Big extends Error{constructor(g){super(g),this.code="ERR_ABORTED"}}function Sig(e){e.sort((n,C)=>Number(n.offset)-Number(C.offset));const g=[];let I,i;for(let n=0;n=I}function Wig(e){const g=e?"big":"little",I=new kg().endianess(g).uint32("chromId").uint32("start").uint32("end").uint32("validCnt").floatle("minScore").floatle("maxScore").floatle("sumData").floatle("sumSqData").saveOffset("offset"),i=new kg().endianess(g).uint8("isLeaf").skip(1).uint16("cnt").choice({tag:"isLeaf",choices:{1:new kg().endianess(g).array("blocksToFetch",{length:"cnt",type:new kg().endianess(g).uint32("startChrom").uint32("startBase").uint32("endChrom").uint32("endBase").uint64("blockOffset").uint64("blockSize").saveOffset("offset")}),0:new kg().array("recurOffsets",{length:"cnt",type:new kg().endianess(g).uint32("startChrom").uint32("startBase").uint32("endChrom").uint32("endBase").uint64("blockOffset").saveOffset("offset")})}}),n=new kg().endianess(g).uint32("chromId").int32("start").int32("end").string("rest",{zeroTerminated:!0}).saveOffset("offset");return{bigWigParser:new kg().endianess(g).skip(4).int32("blockStart").skip(4).uint32("itemStep").uint32("itemSpan").uint8("blockType").skip(1).uint16("itemCount").choice({tag:"blockType",choices:{[Vig]:new kg().array("items",{length:"itemCount",type:new kg().floatle("score")}),[Rig]:new kg().array("items",{length:"itemCount",type:new kg().endianess(g).int32("start").floatle("score")}),[wig]:new kg().array("items",{length:"itemCount",type:new kg().endianess(g).int32("start").int32("end").floatle("score")})}}),bigBedParser:n,summaryParser:I,leafParser:i}}class U2e{constructor(g,I,i,n,C,r){if(this.bbi=g,this.refsByName=I,this.cirTreeOffset=i,this.isBigEndian=n,this.isCompressed=C,this.blockType=r,this.featureCache=new nIg({cache:new Pet({maxSize:1e3}),fill:async(a,s)=>{const A=Number(a.length),l=Number(a.offset),{buffer:c}=await this.bbi.read(th.Buffer.alloc(A),0,A,l,{signal:s});return c}}),!(i>=0))throw new Error("invalid cirTreeOffset!");const o=Wig(n);this.leafParser=o.leafParser,this.bigBedParser=o.bigBedParser}async readWigData(g,I,i,n,C){try{const{refsByName:r,bbi:o,cirTreeOffset:a,isBigEndian:s}=this,A=r[g];A===void 0&&n.complete();const l={chrId:A,start:I,end:i};this.cirTreePromise||(this.cirTreePromise=o.read(th.Buffer.alloc(48),0,48,Number(a),C));const{buffer:c}=await this.cirTreePromise,u=s?c.readUInt32BE(4):c.readUInt32LE(4);let d=[],h=0;const m=(y,Z,B)=>{try{const G=y.subarray(Z),v=this.leafParser.parse(G);if(v.blocksToFetch&&(d=d.concat(v.blocksToFetch.filter(f).map(w=>({offset:w.blockOffset,length:w.blockSize})))),v.recurOffsets){const w=v.recurOffsets.filter(f).map(R=>Number(R.blockOffset));w.length>0&&p(w,B+1)}}catch(G){n.error(G)}},f=y=>{const{startChrom:Z,startBase:B,endChrom:G,endBase:v}=y;return(ZA||G===A&&v>=I)},b=async(y,Z,B)=>{try{const G=Z.max()-Z.min(),v=Z.min(),w=await this.featureCache.get(`${G}_${v}`,{length:G,offset:v},C.signal);for(let R=0;R{try{h+=y.length;const B=4+Number(u)*32;let G=new nc(y[0],y[0]+B);for(let v=1;vb(y,v,Z))}catch(B){n.error(B)}};return p([Number(a)+48],1)}catch(r){n.error(r)}}parseSummaryBlock(g,I,i){const n=[];let C=I;const r=new DataView(g.buffer,g.byteOffset,g.length);for(;Ckx(o.start,o.end,n.start,n.end)):C}parseBigWigBlock(g,I,i){const n=g.subarray(I),C=new DataView(n.buffer,n.byteOffset,n.length);let r=0;r+=4;const o=C.getInt32(r,!0);r+=8;const a=C.getUint32(r,!0);r+=4;const s=C.getUint32(r,!0);r+=4;const A=C.getUint8(r);r+=2;const l=C.getUint16(r,!0);r+=2;const c=new Array(l);switch(A){case 1:for(let u=0;ukx(u.start,u.end,i.start,i.end)):c}async readFeatures(g,I,i={}){try{const{blockType:n,isCompressed:C}=this,{signal:r,request:o}=i,a=Sig(I);o1(r),await Promise.all(a.map(async s=>{o1(r);const{length:A,offset:l}=s,c=await this.featureCache.get(`${A}_${l}`,s,r);s.blocks.forEach(u=>{o1(r);let d=Number(u.offset)-Number(s.offset),h=c;switch(C&&(h=vig(c.subarray(d)),d=0),o1(r),n){case"summary":g.next(this.parseSummaryBlock(h,d,o));break;case"bigwig":g.next(this.parseBigWigBlock(h,d,o));break;case"bigbed":g.next(this.parseBigBedBlock(h,d,Number(u.offset)*256,o));break;default:console.warn(`Don't know what to do with ${n}`)}})})),g.complete()}catch(n){g.error(n)}}}var l_=function(e,g){return l_=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(I,i){I.__proto__=i}||function(I,i){for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(I[n]=i[n])},l_(e,g)};function n8(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Class extends value "+String(g)+" is not a constructor or null");l_(e,g);function I(){this.constructor=e}e.prototype=g===null?Object.create(g):(I.prototype=g.prototype,new I)}function ice(e){var g=typeof Symbol=="function"&&Symbol.iterator,I=g&&e[g],i=0;if(I)return I.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(g?"Object is not iterable.":"Symbol.iterator is not defined.")}function c_(e,g){var I=typeof Symbol=="function"&&e[Symbol.iterator];if(!I)return e;var i=I.call(e),n,C=[],r;try{for(;(g===void 0||g-- >0)&&!(n=i.next()).done;)C.push(n.value)}catch(o){r={error:o}}finally{try{n&&!n.done&&(I=i.return)&&I.call(i)}finally{if(r)throw r.error}}return C}function u_(e,g,I){if(I||arguments.length===2)for(var i=0,n=g.length,C;i=2,!1,!0))}var jig=function(e,g){return e.push(g),e};function $ig(){return q2e(function(e,g){Qig(jig,[])(e).subscribe(g)})}const ace=-2003829722,Fx=-2021002517;function qig(e){return new TextDecoder().decode(e)}function Ace(e){const g=e?"big":"little",I=new kg().endianess(g).int32("magic").uint16("version").uint16("numZoomLevels").uint64("chromTreeOffset").uint64("unzoomedDataOffset").uint64("unzoomedIndexOffset").uint16("fieldCount").uint16("definedFieldCount").uint64("asOffset").uint64("totalSummaryOffset").uint32("uncompressBufSize").uint64("extHeaderOffset").array("zoomLevels",{length:"numZoomLevels",type:new kg().endianess(g).uint32("reductionLevel").uint32("reserved").uint64("dataOffset").uint64("indexOffset")}),i=new kg().endianess(g).uint64("basesCovered").doublele("scoreMin").doublele("scoreMax").doublele("scoreSum").doublele("scoreSumSquares"),n=new kg().endianess(g).uint32("magic").uint32("blockSize").uint32("keySize").uint32("valSize").uint64("itemCount"),C=new kg().endianess(g).uint8("isLeafNode").skip(1).uint16("cnt").saveOffset("offset");return{chromTreeParser:n,totalSummaryParser:i,headerParser:I,isLeafNode:C}}class eng{getHeader(g={}){const I="aborted"in g?{signal:g}:g;return this.headerP||(this.headerP=this._getHeader(I).catch(i=>{throw this.headerP=void 0,i})),this.headerP}constructor(g={}){const{filehandle:I,renameRefSeqs:i=r=>r,path:n,url:C}=g;if(this.renameRefSeqs=i,I)this.bbi=I;else if(C)this.bbi=new Wbe(C);else if(n)this.bbi=new Nme(n);else throw new Error("no file given")}async _getHeader(g){const I=await this._getMainHeader(g),i=await this._readChromTree(I,g);return{...I,...i}}async _getMainHeader(g,I=2e3){const{buffer:i}=await this.bbi.read(th.Buffer.alloc(I),0,I,0,g),n=this._isBigEndian(i),C=Ace(n),r=C.headerParser.parse(i),{magic:o,asOffset:a,totalSummaryOffset:s}=r;if(r.fileType=o===Fx?"bigbed":"bigwig",a>I||s>I)return this._getMainHeader(g,I*2);if(a){const A=Number(r.asOffset);r.autoSql=qig(i.subarray(A,i.indexOf(0,A)))}if(r.totalSummaryOffset>I)return this._getMainHeader(g,I*2);if(r.totalSummaryOffset){const A=i.subarray(Number(r.totalSummaryOffset)),l=C.totalSummaryParser.parse(A);r.totalSummary={...l,basesCovered:Number(l.basesCovered)}}return{...r,isBigEndian:n}}_isBigEndian(g){let I=g.readInt32LE(0);if(I===ace||I===Fx)return!1;if(I=g.readInt32BE(0),I===ace||I===Fx)return!0;throw new Error("not a BigWig/BigBed file")}async _readChromTree(g,I){const i=g.isBigEndian,n=i?"big":"little",C=[],r={};let o=Number(g.unzoomedDataOffset);const a=Number(g.chromTreeOffset);for(;o%4!==0;)o+=1;const s=o-a,{buffer:A}=await this.bbi.read(th.Buffer.alloc(s),0,s,Number(a),I),l=Ace(i),{keySize:c}=l.chromTreeParser.parse(A),u=new kg().endianess(n).string("key",{stripNull:!0,length:c}).uint32("refId").uint32("refSize").saveOffset("offset"),d=new kg().endianess(n).skip(c).uint64("childOffset").saveOffset("offset"),h=32,m=async f=>{let b=f;if(b>=A.length)throw new Error("reading beyond end of buffer");const p=l.isLeafNode.parse(A.subarray(b)),{isLeafNode:y,cnt:Z}=p;if(b+=p.offset,y)for(let B=0;B0,r)}async getFeatureStream(g,I,i,n={scale:1}){await this.getHeader(n);const C=this.renameRefSeqs(g);let r;if(n.basesPerSpan?r=await this.getView(1/n.basesPerSpan,n):n.scale?r=await this.getView(n.scale,n):r=await this.getView(1,n),!r)throw new Error("unable to get block view for data");return new Eig(o=>{r.readWigData(C,I,i,o,n)})}async getFeatures(g,I,i,n={scale:1}){const C=await this.getFeatureStream(g,I,i,n);return(await Lig(C.pipe($ig()))).flat()}}class tng extends eng{async getView(g,I){const{zoomLevels:i,refsByName:n,fileSize:C,isBigEndian:r,uncompressBufSize:o}=await this.getHeader(I),a=1/g;let s=i.length;C||(s-=1);for(let A=s;A>=0;A-=1){const l=i[A];if(l&&l.reductionLevel<=2*a){const c=Number(l.indexOffset);return new U2e(this.bbi,n,c,r,o>0,"summary")}}return this.getUnzoomedView(I)}}function eHe(e,g){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');const I=class{constructor(){rt(this,"dataConfig"),rt(this,"bwFileHeader"),rt(this,"bwFile"),rt(this,"TILE_SIZE"),rt(this,"errorTxt"),rt(this,"dataPromises"),rt(this,"chromSizes"),rt(this,"assembly"),rt(this,"tilesetInfoLoading"),this.dataConfig=g,this.assembly=this.dataConfig.assembly,this.bwFileHeader=null,this.bwFile=null,this.TILE_SIZE=1024,this.errorTxt="",this.dataPromises=[];const n=bI(this.assembly).size,C=[],r={};let o=0;Object.keys(bI(this.assembly).size).forEach((a,s)=>{const A={id:s,chr:a,pos:o};C.push(A),r[a]=A,o+=bI(this.assembly).size[a]}),this.chromSizes={chrToAbs:(a,s)=>this.chromSizes.chrPositions[a].pos+s,cumPositions:C,chrPositions:r,totalLength:o,chromLengths:n},this.dataPromises.push(this.loadBBI(g))}async loadBBI(n){return n.url?(this.bwFile=new tng({filehandle:new d0e(n.url,{overrides:n.urlFetchOptions})}),this.bwFile.getHeader().then(C=>{this.bwFileHeader=C})):(console.error('Please enter a "url" field to the data config'),null)}tilesetInfo(n){return this.tilesetInfoLoading=!0,Promise.all(this.dataPromises).then(()=>{this.tilesetInfoLoading=!1;const C=this.chromSizes.totalLength,r={tile_size:this.TILE_SIZE,max_zoom:Math.ceil(Math.log(C/this.TILE_SIZE)/Math.log(2)),max_width:2**Math.ceil(Math.log(C)/Math.log(2)),min_pos:[0],max_pos:[C]};return n&&n(r),r}).catch(C=>(this.tilesetInfoLoading=!1,console.error(C),n&&n({error:`Error parsing bigwig: ${C}`}),null))}fetchTilesDebounced(n,C){const r={},o=[],a=[];for(const s of C){const A=s.split("."),l=parseInt(A[0],10),c=parseInt(A[1],10);if(Number.isNaN(c)||Number.isNaN(l)){console.warn("Invalid tile zoom or position:",l,c);continue}o.push(s),a.push(this.tile(l,c))}return Promise.all(a).then(s=>{for(let A=0;A{const p=b.chr,y=b.pos,Z=b.pos+m[p];let B,G;if(y<=l&&lZ)B=l-y,G=Z-y,a.push(this.bwFile.getFeatures(p,B,G,{scale:1/u}).then(v=>(v.forEach(w=>{w.startAbs=e.utils.chrToAbs(p,w.start,this.chromSizes),w.endAbs=e.utils.chrToAbs(p,w.end,this.chromSizes)}),v))),l=Z;else{if(B=Math.floor(l-y),G=Math.ceil(c-y),!this.bwFile)return;a.push(this.bwFile.getFeatures(p,B,G,{scale:1/u}).then(v=>(v.forEach(w=>{w.startAbs=e.utils.chrToAbs(p,w.start,this.chromSizes),w.endAbs=e.utils.chrToAbs(p,w.end,this.chromSizes)}),v)));return}}),Promise.all(a).then(b=>{const p=b.flat(),y=[];for(let B=0;B{if(Bc)return;const v=p.filter(w=>B>=w.startAbs&&Bw.score);y[G]=v.length>0?v[0]:null});const Z=new e.utils.DenseDataExtrema1D(y);return s.min_value=Math.min(...y),s.max_value=Math.max(...y),s.dense=y,s.denseDataExtrema=Z,s.minNonZero=Z.minNonZeroInTile,s.maxNonZero=Z.maxNonZeroInTile,s})}determineScale(n,C){const r=[1],o=C-n;if(!this.bwFileHeader)throw Error("no bigwig header");this.bwFileHeader.zoomLevels.forEach(s=>{r.push(s.reductionLevel)});let a;return r.forEach(s=>{if(a)return;o/s<=this.TILE_SIZE*20&&(a=s)}),a||r.slice(-1)[0]}};return new I}eHe.config={type:"bigwig"};function tHe(e,g){const{field:I,not:i}=e;let n=Array.from(g);if(Fje(e)){const{oneOf:C}=e;n=n.filter(r=>i?C.indexOf(r[I])===-1:C.indexOf(r[I])!==-1)}else if(Dje(e)){const{inRange:C}=e;n=n.filter(r=>{const o=+r[I];return i?!(C[0]<=o&&o<=C[1]):C[0]<=o&&o<=C[1]})}else if(xje(e)){const{include:C}=e;n=n.filter(r=>i?`${r[I]}`.includes(C):!`${r[I]}`.includes(C))}return n}function gng(e,g){const{fields:I,separator:i,newField:n}=e;let C=Array.from(g);return C=C.map(r=>{const o=I.map(a=>r[a]);return r[n]=o.join(i),r}),C}function Ing(e,g){const{field:I,replace:i,newField:n}=e;let C=Array.from(g);return C=C.map(r=>(r[n]=r[I],i.forEach(o=>{const{from:a,to:s}=o;r[n]=r[n].toString().replaceAll(a,s)}),r)),C}function ing(e,g){const{field:I,base:i,newField:n}=e;let C=Array.from(g);return C=C.map(r=>(+r[I]&&(i==="e"?r[n??I]=Math.log(+r[I]):r[n??I]=Math.log(+r[I])/Math.log(i??10)),r)),C}function nng(e,g){const{startField:I,endField:i,newField:n}=e,C=Array.from(g);return C.forEach(r=>{const o=r[I],a=r[i];!o||!a||(r[n]=Math.abs(+a-+o))}),C}function Cng(e,g){const{firstBp:I,secondBp:i,newField:n}=e,C=Array.from(g),[r,o,a,s,A]=["DUP","TRA","DEL","t2tINV","h2hINV"];return C.forEach(l=>{const c=l[I.chrField],u=l[i.chrField];if(c!==u){l[n]=o;return}let d=l[I.posField],h=l[i.posField],m=l[I.strandField],f=l[i.strandField];if(d>h){const b=d,p=m;d=h,m=f,h=b,f=p}switch(`${m}${f}`){case"+-":l[n]=a;break;case"--":l[n]=s;break;case"++":l[n]=A;break;case"-+":l[n]=r;break;default:l[n]="unknown"}}),C}function rng(e,g,I){const{startField:i,endField:n,newField:C,groupField:r}=e,o={},a=1;return g.forEach(A=>{const l=I(A[i]),c=I(A[n]),u=r?A[r]:"__NO_GROUP__",d=Math.floor(l);for(let h=d;h{const[l,c]=A;return Object.entries(c).map(u=>{const[d,h]=u;return{[i]:I.invert(+d),[n]:I.invert(+d+a),[C??"coverage"]:h,[r??"group"]:l}})})}function ong(e,g,I){const{boundingBox:i,method:n,newField:C}=e,{startField:r,endField:o,groupField:a}=i;let s=0;i.padding&&I&&!i.isPaddingBP?s=Math.abs(I.invert(i.padding)-I.invert(0)):i.padding&&i.isPaddingBP&&(s=i.padding);const A=Array.from(g);if(A&&A.length>0&&(!Object.keys(A[0]).find(l=>l===r)||!Object.keys(A[0]).find(l=>l===o)))return A;if(n==="pile"){const{maxRows:l}=e,c={};A.sort((d,h)=>d[r]-h[r]).forEach(d=>{const h=+d[r]-s,m=+d[o]+s,f=a?d[a]:"__NO_GROUP__";c[f]||(c[f]=[]);let b=c[f].findIndex(p=>mc[r]-u[r]).forEach(c=>{let u=c[r]-s,d=c[o]+s,h=l.filter(m=>m.start===u&&d===m.end||m.start0){let m=0;do h=l.filter(f=>f.start===u&&d===f.end||f.start0&&(m%2===0?(u+=s*m,d+=s*m):(u-=s*m,d-=s*m)),m++;while(h.length>0&&m<1e3)}c[`${C}Start`]=`${u+s}`,c[`${C}Etart`]=`${d-s}`,l.push({start:u,end:d})})}return A}function ang(e,g,I="hg38"){const{separator:i,fields:n,flag:C}=e;let r=Array.from(g);return r=r.map(o=>{const a=[];return n.forEach(s=>{const{field:A,type:l,newField:c,chrField:u}=s;o[A].toString().split(i).forEach((h,m)=>{let f=h;l==="genomic"&&(f=bI(I).interval[o[u]][0]+ +h),a[m]?a[m][c]=f:a[m]=Object.assign(JSON.parse(JSON.stringify(o)),{[c]:f,[C.field]:C.value})})}),[o,...a]}).reduce((o,a)=>o.concat(a),[]),r}function Ang(e,g){const{field:I,genomicField:i,baseGenomicField:n,genomicLengthField:C}=e;let r=Array.from(g);return r=r.map(o=>{let a=JSON.parse(o[I]);return a=a.map(s=>{var A,l;return s[i]&&o[n]&&(s[`${i}_start`]=+s[i]+ +o[n],s[`${i}_end`]=+s[i]+ +o[n]+ +s[C]),Object.assign(JSON.parse(JSON.stringify(o)),{...s,[`${i}_start`]:s[`${i}_start`],[`${i}_end`]:s[`${i}_end`],type:(l=(A=s.type)!=null?A:s.variant)!=null?l:null,isParsedRow:"yes"})}),[o,...a]}).reduce((o,a)=>o.concat(a),[]),r}function sng(e,g){if(zje(e).length===0)return g;const I=u5(e,"nominal");if(I.length!==1)return console.warn("Currently, we only support aggregating datasets with single nominal field."),g;const i=e[I[0]];if(!ut(i))return g;const n=i.field;if(!n)return g;const C=[...u5(e,"quantitative"),...u5(e,"genomic")],r=[],o=Array.from(new Set(g.map(s=>s[n])));let a=!1;return o.forEach(s=>{const A={};A[n]=s,C.forEach(l=>{const c=e[l];if(!ut(c)){a=!0;return}const{field:u}=c;if(!u||!("aggregate"in c)){a=!0;return}A[u]=c.aggregate==="max"?Math.max(...g.filter(d=>d[n]===s).map(d=>+d[u])):Math.min(...g.filter(d=>d[n]===s).map(d=>+d[u]))}),r.push(A)}),a?g:r}class lng{constructor(g){pg(this,qO),pg(this,_$),pg(this,RH),pg(this,t_),pg(this,g_),pg(this,I_),rt(this,"dataConfig"),rt(this,"tilesetInfoLoading"),pg(this,fG,void 0),pg(this,AS,void 0),pg(this,sS,void 0),pg(this,Ed,void 0),pg(this,SH,void 0),pg(this,wH,void 0),this.dataConfig=g,this.tilesetInfoLoading=!1,VC(this,Ed,this.dataConfig.assembly),VC(this,SH,this.dataConfig.filter),g.url||console.error("Please provide the `url` of the data");const{urlFetchOptions:I,url:i}=g;VC(this,wH,new d0e(i,{overrides:I})),VC(this,AS,SI(this,I_,y2e).call(this)),VC(this,fG,SI(this,qO,m2e).call(this))}tilesetInfo(g){if(Dt(this,fG))return this.tilesetInfoLoading=!0,Dt(this,fG).then(()=>SI(this,t_,p2e).call(this,g)).catch(I=>{this.tilesetInfoLoading=!1,console.error("[Gosling Data Fetcher] Error parsing data:",I)})}fetchTilesDebounced(g,I){const i={},n=[],C=[];for(const r of I){const o=r.split("."),a=parseInt(o[0],10),s=parseInt(o[1],10),A=parseInt(o[2],10);if(Number.isNaN(s)||Number.isNaN(a)){console.warn("[Gosling Data Fetcher] Invalid tile zoom or position:",a,s,A);continue}n.push(r),C.push(SI(this,g_,b2e).call(this,a,s,A))}Promise.all(C).then(r=>{r.forEach((o,a)=>{if(o){const s=n[a];i[s]=o,i[s].tilePositionId=s}}),g(i)})}}fG=new WeakMap;AS=new WeakMap;sS=new WeakMap;Ed=new WeakMap;SH=new WeakMap;wH=new WeakMap;qO=new WeakSet;m2e=async function(){var e,g;const{chromosomeField:I,genomicFields:i,headerNames:n,longToWideId:C,genomicFieldsToConvert:r}=this.dataConfig,o=(e=this.dataConfig.separator)!=null?e:",";try{const s=(await Dt(this,wH).readFile()).toString(),A=n?`${n.join(o)} -${s}`:s,l=Let(o).parse(A,c=>SI(this,_$,f2e).call(this,c,r,I,i));if(C&&((g=l[0])!=null&&g[C])){const c=Object.keys(l[0]),u={};l.forEach(d=>{u[d[C]]?c.forEach(h=>{u[d[C]][`${h}_2`]=d[h]}):u[d[C]]=JSON.parse(JSON.stringify(d))}),VC(this,sS,Object.keys(u).map(d=>u[d]))}else VC(this,sS,l)}catch(a){console.error("[Gosling Data Fetcher] Error fetching data",a)}};_$=new WeakSet;f2e=function(e,g,I,i){try{return g?g.forEach(n=>{const C=n.genomicFields,r=e[n.chromosomeField];C.forEach(o=>{const a=e[o];e[o]=String(SI(this,RH,e_).call(this,r,a))})}):I&&i&&i.forEach(n=>{const C=e[n],r=e[I];e[n]=String(SI(this,RH,e_).call(this,r,C))}),e}catch{return}};RH=new WeakSet;e_=function(e,g){if(Dt(this,Ed)!=="unknown"){const I=G3(e,Dt(this,Ed),this.dataConfig.chromosomePrefix);return bI(Dt(this,Ed)).interval[I][0]+ +g}else return g};t_=new WeakSet;p2e=function(e){this.tilesetInfoLoading=!1;const g=1024,I=Dt(this,AS).totalLength,i={tile_size:g,max_zoom:Math.ceil(Math.log(I/g)/Math.log(2)),max_width:I,min_pos:[0,0],max_pos:[I,I]};return e&&e(i),i};g_=new WeakSet;b2e=async function(e,g,I){var i,n;const C=await this.tilesetInfo();if(!C)return;const r=+C.max_width/2**+e,o=C.min_pos[0]+g*r,a=C.min_pos[0]+(g+1)*r;let s=u0e(Dt(this,sS),[o,a],this.dataConfig);(i=Dt(this,SH))==null||i.forEach(l=>{s=tHe(l,s)});const A=(n=this.dataConfig.sampleLength)!=null?n:1e3;return{tabularData:s.length>A?a7(s,A):s,server:null,tilePos:[g,I],zoomLevel:e}};I_=new WeakSet;y2e=function(){const e=bI(Dt(this,Ed)).size,g=[],I={};let i=0;return Object.keys(e).forEach((n,C)=>{const r={id:C,chr:n,pos:i};g.push(r),I[n]=r,i+=e[n]}),{chrToAbs:(n,C)=>Dt(this,AS).chrPositions[n].pos+C,cumPositions:g,chrPositions:I,totalLength:i,chromLengths:e}};function gHe(e,g,I){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');return new lng(g)}gHe.config={type:"csv"};function IHe(e,...g){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');class I{constructor(n){rt(this,"dataConfig"),rt(this,"tilesetInfoLoading"),rt(this,"chromSizes"),rt(this,"values"),rt(this,"assembly");const[C]=n;if(this.dataConfig=C,this.tilesetInfoLoading=!1,this.assembly=this.dataConfig.assembly,!C.values){console.error("Please provide `values` of the JSON data");return}const r=bI(this.assembly).size,o=[],a={};let s=0;Object.keys(bI(this.assembly).size).forEach((u,d)=>{const h={id:d,chr:u,pos:s};o.push(h),a[u]=h,s+=bI(this.assembly).size[u]}),this.chromSizes={chrToAbs:(u,d)=>this.chromSizes.chrPositions[u].pos+d,cumPositions:o,chrPositions:a,totalLength:s,chromLengths:r};const{chromosomeField:A,genomicFields:l,genomicFieldsToConvert:c}=this.dataConfig;this.values=C.values.map(u=>{try{return c?c.forEach(d=>{const h=d.genomicFields,m=G3(u[d.chromosomeField],this.assembly);h.forEach(f=>{const b=u[f];u[f]=String(this.chromSizes.chrToAbs(m,b))})}):A&&l&&l.forEach(d=>{const h=u[d],m=G3(u[A],this.assembly);u[d]=String(this.chromSizes.chrToAbs(m,h))}),u}catch{return}})}tilesetInfo(n){this.tilesetInfoLoading=!1;const C=1024,r=this.chromSizes.totalLength,o={tile_size:C,max_zoom:Math.ceil(Math.log(r/C)/Math.log(2)),max_width:r,min_pos:[0,0],max_pos:[r,r]};return n&&n(o),o}fetchTilesDebounced(n,C){const r={},o=[],a=[];for(const s of C){const A=s.split("."),l=parseInt(A[0],10),c=parseInt(A[1],10),u=parseInt(A[2],10);if(Number.isNaN(c)||Number.isNaN(l)){console.warn("[Gosling Data Fetcher] Invalid tile zoom or position:",l,c,u);continue}o.push(s),a.push(this.tile(l,c,u))}return Promise.all(a).then(s=>{s.forEach((A,l)=>{const c=o[l];r[c]=A,r[c].tilePositionId=c}),n(r)}),r}tile(n,C,r){var o;const a=this.tilesetInfo(),s=+a.max_width/2**+n,A=a.min_pos[0]+C*s,l=a.min_pos[0]+(C+1)*s;let c=u0e(this.values,[A,l],this.dataConfig);const u=(o=this.dataConfig.sampleLength)!=null?o:1e3;return u{const a=Object.entries(bI(C).size);return await o.init(this.uid,{url:i,indexUrl:n},a,r),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,I){this.track.drawLoadingCue(),I.forEach(i=>this.toFetch.add(i)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},ung)}async sendFetch(g,I){(await this.worker).fetchTilesDebounced(this.uid,I).then(g)}async getTabularData(g){const I=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(I))}}rt(nHe,"config",{type:"gff"});const CHe="KCgpID0+IHsKICB2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIF9fbWFya0FzTW9kdWxlID0gKHRhcmdldCkgPT4gX19kZWZQcm9wKHRhcmdldCwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7CiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltPYmplY3Qua2V5cyhmbilbMF1dKShmbiA9IDApKSwgcmVzOwogIH07CiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkgewogICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbT2JqZWN0LmtleXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIF9fbWFya0FzTW9kdWxlKHRhcmdldCk7CiAgICBmb3IgKHZhciBuYW1lIGluIGFsbCkKICAgICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKICB9OwogIHZhciBfX3JlRXhwb3J0ID0gKHRhcmdldCwgbW9kdWxlMiwgZGVzYykgPT4gewogICAgaWYgKG1vZHVsZTIgJiYgdHlwZW9mIG1vZHVsZTIgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBtb2R1bGUyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhtb2R1bGUyKSkKICAgICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRhcmdldCwga2V5KSAmJiBrZXkgIT09ICJkZWZhdWx0IikKICAgICAgICAgIF9fZGVmUHJvcCh0YXJnZXQsIGtleSwgeyBnZXQ6ICgpID0+IG1vZHVsZTJba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhtb2R1bGUyLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0OwogIH07CiAgdmFyIF9fdG9Nb2R1bGUgPSAobW9kdWxlMikgPT4gewogICAgcmV0dXJuIF9fcmVFeHBvcnQoX19tYXJrQXNNb2R1bGUoX19kZWZQcm9wKG1vZHVsZTIgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2R1bGUyKSkgOiB7fSwgImRlZmF1bHQiLCBtb2R1bGUyICYmIG1vZHVsZTIuX19lc01vZHVsZSAmJiAiZGVmYXVsdCIgaW4gbW9kdWxlMiA/IHsgZ2V0OiAoKSA9PiBtb2R1bGUyLmRlZmF1bHQsIGVudW1lcmFibGU6IHRydWUgfSA6IHsgdmFsdWU6IG1vZHVsZTIsIGVudW1lcmFibGU6IHRydWUgfSkpLCBtb2R1bGUyKTsKICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMKICB2YXIgcmVxdWlyZV9iYXNlNjRfanMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBleHBvcnRzMi5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDsKICAgICAgZXhwb3J0czIudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheTsKICAgICAgZXhwb3J0czIuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXk7CiAgICAgIHZhciBsb29rdXAgPSBbXTsKICAgICAgdmFyIHJldkxvb2t1cCA9IFtdOwogICAgICB2YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICJ1bmRlZmluZWQiID8gVWludDhBcnJheSA6IEFycmF5OwogICAgICB2YXIgY29kZSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKICAgICAgZm9yIChpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgewogICAgICAgIGxvb2t1cFtpXSA9IGNvZGVbaV07CiAgICAgICAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpOwogICAgICB9CiAgICAgIHZhciBpOwogICAgICB2YXIgbGVuOwogICAgICByZXZMb29rdXBbIi0iLmNoYXJDb2RlQXQoMCldID0gNjI7CiAgICAgIHJldkxvb2t1cFsiXyIuY2hhckNvZGVBdCgwKV0gPSA2MzsKICAgICAgZnVuY3Rpb24gZ2V0TGVucyhiNjQpIHsKICAgICAgICB2YXIgbGVuMiA9IGI2NC5sZW5ndGg7CiAgICAgICAgaWYgKGxlbjIgJSA0ID4gMCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7CiAgICAgICAgfQogICAgICAgIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCI9Iik7CiAgICAgICAgaWYgKHZhbGlkTGVuID09PSAtMSkKICAgICAgICAgIHZhbGlkTGVuID0gbGVuMjsKICAgICAgICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlbjIgPyAwIDogNCAtIHZhbGlkTGVuICUgNDsKICAgICAgICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJ5dGVMZW5ndGgoYjY0KSB7CiAgICAgICAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NCk7CiAgICAgICAgdmFyIHZhbGlkTGVuID0gbGVuc1swXTsKICAgICAgICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXTsKICAgICAgICByZXR1cm4gKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzTGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikgewogICAgICAgIHJldHVybiAodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQgLSBwbGFjZUhvbGRlcnNMZW47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdG9CeXRlQXJyYXkoYjY0KSB7CiAgICAgICAgdmFyIHRtcDsKICAgICAgICB2YXIgbGVucyA9IGdldExlbnMoYjY0KTsKICAgICAgICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdOwogICAgICAgIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdOwogICAgICAgIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpOwogICAgICAgIHZhciBjdXJCeXRlID0gMDsKICAgICAgICB2YXIgbGVuMiA9IHBsYWNlSG9sZGVyc0xlbiA+IDAgPyB2YWxpZExlbiAtIDQgOiB2YWxpZExlbjsKICAgICAgICB2YXIgaTI7CiAgICAgICAgZm9yIChpMiA9IDA7IGkyIDwgbGVuMjsgaTIgKz0gNCkgewogICAgICAgICAgdG1wID0gcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyKV0gPDwgMTggfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAxKV0gPDwgMTIgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAyKV0gPDwgNiB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDMpXTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wID4+IDE2ICYgMjU1OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgPj4gOCAmIDI1NTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMjU1OwogICAgICAgIH0KICAgICAgICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7CiAgICAgICAgICB0bXAgPSByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIpXSA8PCAyIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMSldID4+IDQ7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkgewogICAgICAgICAgdG1wID0gcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyKV0gPDwgMTAgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAxKV0gPDwgNCB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDIpXSA+PiAyOwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgPj4gOCAmIDI1NTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NChudW0pIHsKICAgICAgICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDYzXSArIGxvb2t1cFtudW0gPj4gMTIgJiA2M10gKyBsb29rdXBbbnVtID4+IDYgJiA2M10gKyBsb29rdXBbbnVtICYgNjNdOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGVuY29kZUNodW5rKHVpbnQ4LCBzdGFydCwgZW5kKSB7CiAgICAgICAgdmFyIHRtcDsKICAgICAgICB2YXIgb3V0cHV0ID0gW107CiAgICAgICAgZm9yICh2YXIgaTIgPSBzdGFydDsgaTIgPCBlbmQ7IGkyICs9IDMpIHsKICAgICAgICAgIHRtcCA9ICh1aW50OFtpMl0gPDwgMTYgJiAxNjcxMTY4MCkgKyAodWludDhbaTIgKyAxXSA8PCA4ICYgNjUyODApICsgKHVpbnQ4W2kyICsgMl0gJiAyNTUpOwogICAgICAgICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oIiIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21CeXRlQXJyYXkodWludDgpIHsKICAgICAgICB2YXIgdG1wOwogICAgICAgIHZhciBsZW4yID0gdWludDgubGVuZ3RoOwogICAgICAgIHZhciBleHRyYUJ5dGVzID0gbGVuMiAlIDM7CiAgICAgICAgdmFyIHBhcnRzID0gW107CiAgICAgICAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODM7CiAgICAgICAgZm9yICh2YXIgaTIgPSAwLCBsZW4yMiA9IGxlbjIgLSBleHRyYUJ5dGVzOyBpMiA8IGxlbjIyOyBpMiArPSBtYXhDaHVua0xlbmd0aCkgewogICAgICAgICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaTIsIGkyICsgbWF4Q2h1bmtMZW5ndGggPiBsZW4yMiA/IGxlbjIyIDogaTIgKyBtYXhDaHVua0xlbmd0aCkpOwogICAgICAgIH0KICAgICAgICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkgewogICAgICAgICAgdG1wID0gdWludDhbbGVuMiAtIDFdOwogICAgICAgICAgcGFydHMucHVzaChsb29rdXBbdG1wID4+IDJdICsgbG9va3VwW3RtcCA8PCA0ICYgNjNdICsgIj09Iik7CiAgICAgICAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7CiAgICAgICAgICB0bXAgPSAodWludDhbbGVuMiAtIDJdIDw8IDgpICsgdWludDhbbGVuMiAtIDFdOwogICAgICAgICAgcGFydHMucHVzaChsb29rdXBbdG1wID4+IDEwXSArIGxvb2t1cFt0bXAgPj4gNCAmIDYzXSArIGxvb2t1cFt0bXAgPDwgMiAmIDYzXSArICI9Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCIiKTsKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vaWVlZTc1NEAxLjIuMS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcwogIHZhciByZXF1aXJlX2llZWU3NTQgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vaWVlZTc1NEAxLjIuMS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICBleHBvcnRzMi5yZWFkID0gZnVuY3Rpb24oYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykgewogICAgICAgIHZhciBlLCBtOwogICAgICAgIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxOwogICAgICAgIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxOwogICAgICAgIHZhciBlQmlhcyA9IGVNYXggPj4gMTsKICAgICAgICB2YXIgbkJpdHMgPSAtNzsKICAgICAgICB2YXIgaSA9IGlzTEUgPyBuQnl0ZXMgLSAxIDogMDsKICAgICAgICB2YXIgZCA9IGlzTEUgPyAtMSA6IDE7CiAgICAgICAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV07CiAgICAgICAgaSArPSBkOwogICAgICAgIGUgPSBzICYgKDEgPDwgLW5CaXRzKSAtIDE7CiAgICAgICAgcyA+Pj0gLW5CaXRzOwogICAgICAgIG5CaXRzICs9IGVMZW47CiAgICAgICAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkgewogICAgICAgIH0KICAgICAgICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxOwogICAgICAgIGUgPj49IC1uQml0czsKICAgICAgICBuQml0cyArPSBtTGVuOwogICAgICAgIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgaWYgKGUgPT09IDApIHsKICAgICAgICAgIGUgPSAxIC0gZUJpYXM7CiAgICAgICAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7CiAgICAgICAgICByZXR1cm4gbSA/IE5hTiA6IChzID8gLTEgOiAxKSAqIEluZmluaXR5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgZSA9IGUgLSBlQmlhczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbik7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLndyaXRlID0gZnVuY3Rpb24oYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHsKICAgICAgICB2YXIgZSwgbSwgYzsKICAgICAgICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTsKICAgICAgICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTsKICAgICAgICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7CiAgICAgICAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDA7CiAgICAgICAgdmFyIGkgPSBpc0xFID8gMCA6IG5CeXRlcyAtIDE7CiAgICAgICAgdmFyIGQgPSBpc0xFID8gMSA6IC0xOwogICAgICAgIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDsKICAgICAgICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkgewogICAgICAgICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwOwogICAgICAgICAgZSA9IGVNYXg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKTsKICAgICAgICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHsKICAgICAgICAgICAgZS0tOwogICAgICAgICAgICBjICo9IDI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZSArIGVCaWFzID49IDEpIHsKICAgICAgICAgICAgdmFsdWUgKz0gcnQgLyBjOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHZhbHVlICogYyA+PSAyKSB7CiAgICAgICAgICAgIGUrKzsKICAgICAgICAgICAgYyAvPSAyOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7CiAgICAgICAgICAgIG0gPSAwOwogICAgICAgICAgICBlID0gZU1heDsKICAgICAgICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHsKICAgICAgICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgICBlID0gZSArIGVCaWFzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgICBlID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDI1NSwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7CiAgICAgICAgfQogICAgICAgIGUgPSBlIDw8IG1MZW4gfCBtOwogICAgICAgIGVMZW4gKz0gbUxlbjsKICAgICAgICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAyNTUsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkgewogICAgICAgIH0KICAgICAgICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjg7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXJANi4wLjMvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcwogIHZhciByZXF1aXJlX2J1ZmZlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXJANi4wLjMvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBiYXNlNjQgPSByZXF1aXJlX2Jhc2U2NF9qcygpOwogICAgICB2YXIgaWVlZTc1NCA9IHJlcXVpcmVfaWVlZTc1NCgpOwogICAgICB2YXIgY3VzdG9tSW5zcGVjdFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbFsiZm9yIl0gPT09ICJmdW5jdGlvbiIgPyBTeW1ib2xbImZvciJdKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpIDogbnVsbDsKICAgICAgZXhwb3J0czIuQnVmZmVyID0gQnVmZmVyMTA7CiAgICAgIGV4cG9ydHMyLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyOwogICAgICBleHBvcnRzMi5JTlNQRUNUX01BWF9CWVRFUyA9IDUwOwogICAgICB2YXIgS19NQVhfTEVOR1RIID0gMjE0NzQ4MzY0NzsKICAgICAgZXhwb3J0czIua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSDsKICAgICAgQnVmZmVyMTAuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KCk7CiAgICAgIGlmICghQnVmZmVyMTAuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICAgICAgICBjb25zdCBwcm90byA9IHsgZm9vOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIDQyOwogICAgICAgICAgfSB9OwogICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSk7CiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90byk7CiAgICAgICAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MjsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIxMC5wcm90b3R5cGUsICJwYXJlbnQiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcih0aGlzKSkKICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcjsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyMTAucHJvdG90eXBlLCAib2Zmc2V0IiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGhpcykpCiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0OwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcihsZW5ndGgpIHsKICAgICAgICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInICsgbGVuZ3RoICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpOwogICAgICAgIH0KICAgICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlcjEwLnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBCdWZmZXIxMChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAibnVtYmVyIikgewogICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucG9vbFNpemUgPSA4MTkyOwogICAgICBmdW5jdGlvbiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHwgdmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gInVuZGVmaW5lZCIgJiYgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fCB2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKCk7CiAgICAgICAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlcjEwLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpOwogICAgICAgIGlmIChiKQogICAgICAgICAgcmV0dXJuIGI7CiAgICAgICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyMTAuZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAuZnJvbSA9IGZ1bmN0aW9uKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjEwLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpOwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyMTAsIFVpbnQ4QXJyYXkpOwogICAgICBmdW5jdGlvbiBhc3NlcnRTaXplKHNpemUpIHsKICAgICAgICBpZiAodHlwZW9mIHNpemUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpOwogICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicgKyBzaXplICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykgewogICAgICAgIGFzc2VydFNpemUoc2l6ZSk7CiAgICAgICAgaWYgKHNpemUgPD0gMCkgewogICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZykgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgfQogICAgICBCdWZmZXIxMC5hbGxvYyA9IGZ1bmN0aW9uKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYWxsb2NVbnNhZmUoc2l6ZSkgewogICAgICAgIGFzc2VydFNpemUoc2l6ZSk7CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMCk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZywgZW5jb2RpbmcpIHsKICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIiB8fCBlbmNvZGluZyA9PT0gIiIpIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgIH0KICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMDsKICAgICAgICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aCk7CiAgICAgICAgY29uc3QgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpOwogICAgICAgIGlmIChhY3R1YWwgIT09IGxlbmd0aCkgewogICAgICAgICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkgewogICAgICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMDsKICAgICAgICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQXJyYXlWaWV3KGFycmF5VmlldykgewogICAgICAgIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHsKICAgICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpOwogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlcihhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7CiAgICAgICAgfQogICAgICAgIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTsKICAgICAgICB9CiAgICAgICAgbGV0IGJ1ZjsKICAgICAgICBpZiAoYnl0ZU9mZnNldCA9PT0gdm9pZCAwICYmIGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSk7CiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyMTAucHJvdG90eXBlKTsKICAgICAgICByZXR1cm4gYnVmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqKSB7CiAgICAgICAgaWYgKEJ1ZmZlcjEwLmlzQnVmZmVyKG9iaikpIHsKICAgICAgICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwOwogICAgICAgICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbik7CiAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgICAgfQogICAgICAgICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pOwogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai5sZW5ndGggIT09IHZvaWQgMCkgewogICAgICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAibnVtYmVyIiB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkgewogICAgICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai50eXBlID09PSAiQnVmZmVyIiAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgIiBieXRlcyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVuZ3RoIHwgMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCkgewogICAgICAgIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgewogICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJ1ZmZlcjEwLmFsbG9jKCtsZW5ndGgpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIyKGIpIHsKICAgICAgICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmIGIgIT09IEJ1ZmZlcjEwLnByb3RvdHlwZTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikgewogICAgICAgIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKQogICAgICAgICAgYSA9IEJ1ZmZlcjEwLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aCk7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpCiAgICAgICAgICBiID0gQnVmZmVyMTAuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKTsKICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIxMC5pc0J1ZmZlcihiKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7CiAgICAgICAgfQogICAgICAgIGlmIChhID09PSBiKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbGV0IHggPSBhLmxlbmd0aDsKICAgICAgICBsZXQgeSA9IGIubGVuZ3RoOwogICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkgewogICAgICAgICAgICB4ID0gYVtpXTsKICAgICAgICAgICAgeSA9IGJbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nKGVuY29kaW5nKSB7CiAgICAgICAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgIGNhc2UgInV0Zi04IjoKICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgIGNhc2UgImxhdGluMSI6CiAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgY2FzZSAidXRmMTZsZSI6CiAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQnVmZmVyMTAuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KGxpc3QsIGxlbmd0aCkgewogICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBCdWZmZXIxMC5hbGxvYygwKTsKICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIxMC5hbGxvY1Vuc2FmZShsZW5ndGgpOwogICAgICAgIGxldCBwb3MgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBsZXQgYnVmID0gbGlzdFtpXTsKICAgICAgICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHsKICAgICAgICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcihidWYpKQogICAgICAgICAgICAgICAgYnVmID0gQnVmZmVyMTAuZnJvbShidWYpOwogICAgICAgICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChidWZmZXIsIGJ1ZiwgcG9zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYnVmKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWYuY29weShidWZmZXIsIHBvcyk7CiAgICAgICAgICB9CiAgICAgICAgICBwb3MgKz0gYnVmLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB7CiAgICAgICAgaWYgKEJ1ZmZlcjEwLmlzQnVmZmVyKHN0cmluZykpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmcubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkgewogICAgICAgICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHN0cmluZyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGg7CiAgICAgICAgY29uc3QgbXVzdE1hdGNoID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlOwogICAgICAgIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlOwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgc3dpdGNoIChlbmNvZGluZykgewogICAgICAgICAgICBjYXNlICJhc2NpaSI6CiAgICAgICAgICAgIGNhc2UgImxhdGluMSI6CiAgICAgICAgICAgIGNhc2UgImJpbmFyeSI6CiAgICAgICAgICAgICAgcmV0dXJuIGxlbjsKICAgICAgICAgICAgY2FzZSAidXRmOCI6CiAgICAgICAgICAgIGNhc2UgInV0Zi04IjoKICAgICAgICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIGxlbiAqIDI7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbmNvZGluZyA9ICgiIiArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgQnVmZmVyMTAuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGZ1bmN0aW9uIHNsb3dUb1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkgewogICAgICAgIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlOwogICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwIHx8IHN0YXJ0IDwgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDAgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDw9IDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgZW5kID4+Pj0gMDsKICAgICAgICBzdGFydCA+Pj49IDA7CiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZTsKICAgICAgZnVuY3Rpb24gc3dhcChiLCBuLCBtKSB7CiAgICAgICAgY29uc3QgaSA9IGJbbl07CiAgICAgICAgYltuXSA9IGJbbV07CiAgICAgICAgYlttXSA9IGk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNigpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgMiAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMigpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgNCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDMpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCgpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgOCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDcpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKICAgICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKTsKICAgICAgICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlcjEwLnByb3RvdHlwZS50b1N0cmluZzsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhiKSB7CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcihiKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTsKICAgICAgICBpZiAodGhpcyA9PT0gYikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBCdWZmZXIxMC5jb21wYXJlKHRoaXMsIGIpID09PSAwOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7CiAgICAgICAgbGV0IHN0ciA9ICIiOwogICAgICAgIGNvbnN0IG1heCA9IGV4cG9ydHMyLklOU1BFQ1RfTUFYX0JZVEVTOwogICAgICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoImhleCIsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICIkMSAiKS50cmltKCk7CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KQogICAgICAgICAgc3RyICs9ICIgLi4uICI7CiAgICAgICAgcmV0dXJuICI8QnVmZmVyICIgKyBzdHIgKyAiPiI7CiAgICAgIH07CiAgICAgIGlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7CiAgICAgICAgQnVmZmVyMTAucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyMTAucHJvdG90eXBlLmluc3BlY3Q7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkgewogICAgICAgICAgdGFyZ2V0ID0gQnVmZmVyMTAuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcih0YXJnZXQpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPT09IHZvaWQgMCkgewogICAgICAgICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPT09IHZvaWQgMCkgewogICAgICAgICAgdGhpc1N0YXJ0ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXNFbmQgPT09IHZvaWQgMCkgewogICAgICAgICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkgewogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPj0gZW5kKSB7CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgc3RhcnQgPj4+PSAwOwogICAgICAgIGVuZCA+Pj49IDA7CiAgICAgICAgdGhpc1N0YXJ0ID4+Pj0gMDsKICAgICAgICB0aGlzRW5kID4+Pj0gMDsKICAgICAgICBpZiAodGhpcyA9PT0gdGFyZ2V0KQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbGV0IHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0OwogICAgICAgIGxldCB5ID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgY29uc3QgbGVuID0gTWF0aC5taW4oeCwgeSk7CiAgICAgICAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZCk7CiAgICAgICAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHsKICAgICAgICAgICAgeCA9IHRoaXNDb3B5W2ldOwogICAgICAgICAgICB5ID0gdGFyZ2V0Q29weVtpXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh4IDwgeSkKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAoeSA8IHgpCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHsKICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXQ7CiAgICAgICAgICBieXRlT2Zmc2V0ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAyMTQ3NDgzNjQ3KSB7CiAgICAgICAgICBieXRlT2Zmc2V0ID0gMjE0NzQ4MzY0NzsKICAgICAgICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMjE0NzQ4MzY0OCkgewogICAgICAgICAgYnl0ZU9mZnNldCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgIH0KICAgICAgICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQ7CiAgICAgICAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7CiAgICAgICAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IGJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICBpZiAoYnl0ZU9mZnNldCA8IDApCiAgICAgICAgICBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXQ7CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgaWYgKGRpcikKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDE7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkgewogICAgICAgICAgaWYgKGRpcikKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IDA7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICB2YWwgPSBCdWZmZXIxMC5mcm9tKHZhbCwgZW5jb2RpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoQnVmZmVyMTAuaXNCdWZmZXIodmFsKSkgewogICAgICAgICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgdmFsID0gdmFsICYgMjU1OwogICAgICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcik7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFycmF5SW5kZXhPZihhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikgewogICAgICAgIGxldCBpbmRleFNpemUgPSAxOwogICAgICAgIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoOwogICAgICAgIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoOwogICAgICAgIGlmIChlbmNvZGluZyAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gInVjczIiIHx8IGVuY29kaW5nID09PSAidWNzLTIiIHx8IGVuY29kaW5nID09PSAidXRmMTZsZSIgfHwgZW5jb2RpbmcgPT09ICJ1dGYtMTZsZSIpIHsKICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGluZGV4U2l6ZSA9IDI7CiAgICAgICAgICAgIGFyckxlbmd0aCAvPSAyOwogICAgICAgICAgICB2YWxMZW5ndGggLz0gMjsKICAgICAgICAgICAgYnl0ZU9mZnNldCAvPSAyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiByZWFkKGJ1ZiwgaTIpIHsKICAgICAgICAgIGlmIChpbmRleFNpemUgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGJ1ZltpMl07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpMiAqIGluZGV4U2l6ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxldCBpOwogICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgIGxldCBmb3VuZEluZGV4ID0gLTE7CiAgICAgICAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkgewogICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgIGZvdW5kSW5kZXggPSBpOwogICAgICAgICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkKICAgICAgICAgICAgICAgIGkgLT0gaSAtIGZvdW5kSW5kZXg7CiAgICAgICAgICAgICAgZm91bmRJbmRleCA9IC0xOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKQogICAgICAgICAgICBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoOwogICAgICAgICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgbGV0IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykgewogICAgICAgICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHsKICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGhleFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDA7CiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldDsKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTsKICAgICAgICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHsKICAgICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7CiAgICAgICAgICBsZW5ndGggPSBzdHJMZW4gLyAyOwogICAgICAgIH0KICAgICAgICBsZXQgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNik7CiAgICAgICAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjhXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiYXNlNjRXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHVjczJXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykgewogICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgewogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgICBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IHZvaWQgMCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgZW5jb2RpbmcgPSBvZmZzZXQ7CiAgICAgICAgICBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7CiAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkgewogICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDA7CiAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gdm9pZCAwKQogICAgICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBsZW5ndGg7CiAgICAgICAgICAgIGxlbmd0aCA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpOwogICAgICAgIH0KICAgICAgICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldDsKICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDAgfHwgbGVuZ3RoID4gcmVtYWluaW5nKQogICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nOwogICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7CiAgICAgICAgfQogICAgICAgIGlmICghZW5jb2RpbmcpCiAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBjYXNlICJiYXNlNjQiOgogICAgICAgICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAidWNzMiI6CiAgICAgICAgICAgIGNhc2UgInVjcy0yIjoKICAgICAgICAgICAgY2FzZSAidXRmMTZsZSI6CiAgICAgICAgICAgIGNhc2UgInV0Zi0xNmxlIjoKICAgICAgICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIGlmIChsb3dlcmVkQ2FzZSkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIgKyBlbmNvZGluZyk7CiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoIiIgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAiQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgY29uc3QgcmVzID0gW107CiAgICAgICAgbGV0IGkgPSBzdGFydDsKICAgICAgICB3aGlsZSAoaSA8IGVuZCkgewogICAgICAgICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldOwogICAgICAgICAgbGV0IGNvZGVQb2ludCA9IG51bGw7CiAgICAgICAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IGZpcnN0Qnl0ZSA+IDIzOSA/IDQgOiBmaXJzdEJ5dGUgPiAyMjMgPyAzIDogZmlyc3RCeXRlID4gMTkxID8gMiA6IDE7CiAgICAgICAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7CiAgICAgICAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkgewogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAxMjgpIHsKICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAzMSkgPDwgNiB8IHNlY29uZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAxMjcpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTsKICAgICAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKHRoaXJkQnl0ZSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDE1KSA8PCAxMiB8IChzZWNvbmRCeXRlICYgNjMpIDw8IDYgfCB0aGlyZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAyMDQ3ICYmICh0ZW1wQ29kZVBvaW50IDwgNTUyOTYgfHwgdGVtcENvZGVQb2ludCA+IDU3MzQzKSkgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdOwogICAgICAgICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXTsKICAgICAgICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKGZvdXJ0aEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTggfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCAxMiB8ICh0aGlyZEJ5dGUgJiA2MykgPDwgNiB8IGZvdXJ0aEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiA2NTUzNSAmJiB0ZW1wQ29kZVBvaW50IDwgMTExNDExMikgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkgewogICAgICAgICAgICBjb2RlUG9pbnQgPSA2NTUzMzsKICAgICAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDY1NTM1KSB7CiAgICAgICAgICAgIGNvZGVQb2ludCAtPSA2NTUzNjsKICAgICAgICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDEwMjMgfCA1NTI5Nik7CiAgICAgICAgICAgIGNvZGVQb2ludCA9IDU2MzIwIHwgY29kZVBvaW50ICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgICAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKTsKICAgICAgfQogICAgICB2YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSA0MDk2OwogICAgICBmdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkoY29kZVBvaW50cykgewogICAgICAgIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoOwogICAgICAgIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHsKICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cyk7CiAgICAgICAgfQogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMTI3KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBsYXRpbjFTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBoZXhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKQogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKQogICAgICAgICAgZW5kID0gbGVuOwogICAgICAgIGxldCBvdXQgPSAiIjsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGYxNmxlU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7CiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1Nik7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkgewogICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICAgIHN0YXJ0ID0gfn5zdGFydDsKICAgICAgICBlbmQgPSBlbmQgPT09IHZvaWQgMCA/IGxlbiA6IH5+ZW5kOwogICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgIHN0YXJ0ICs9IGxlbjsKICAgICAgICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7CiAgICAgICAgICBzdGFydCA9IGxlbjsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8IDApIHsKICAgICAgICAgIGVuZCArPSBsZW47CiAgICAgICAgICBpZiAoZW5kIDwgMCkKICAgICAgICAgICAgZW5kID0gMDsKICAgICAgICB9IGVsc2UgaWYgKGVuZCA+IGxlbikgewogICAgICAgICAgZW5kID0gbGVuOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDwgc3RhcnQpCiAgICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpOwogICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlcjEwLnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIG5ld0J1ZjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2hlY2tPZmZzZXQob2Zmc2V0LCBleHQsIGxlbmd0aCkgewogICAgICAgIGlmIChvZmZzZXQgJSAxICE9PSAwIHx8IG9mZnNldCA8IDApCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7CiAgICAgICAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIik7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50TEUgPSBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCB2YWwgPSB0aGlzW29mZnNldF07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnRCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoMl07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgd2hpbGUgKGJ5dGVMZW5ndGgyID4gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aDJdICogbXVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQ4ID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQxNkxFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgdGhpc1tvZmZzZXQgKyAxXSA8PCA4OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQxNkJFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDggfCB0aGlzW29mZnNldCArIDFdOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQzMkxFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gKHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpICsgdGhpc1tvZmZzZXQgKyAzXSAqIDE2Nzc3MjE2OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQzMkJFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdICogMTY3NzcyMTYgKyAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNiB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgM10pOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRMRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxvID0gZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNDsKICAgICAgICBjb25zdCBoaSA9IHRoaXNbKytvZmZzZXRdICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyBsYXN0ICogMiAqKiAyNDsKICAgICAgICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpOwogICAgICB9KTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF07CiAgICAgICAgY29uc3QgbG8gPSB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7CiAgICAgICAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCB2YWwgPSB0aGlzW29mZnNldF07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsOwogICAgICAgIH0KICAgICAgICBtdWwgKj0gMTI4OwogICAgICAgIGlmICh2YWwgPj0gbXVsKQogICAgICAgICAgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMik7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgbGV0IGkgPSBieXRlTGVuZ3RoMjsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldOwogICAgICAgIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWw7CiAgICAgICAgfQogICAgICAgIG11bCAqPSAxMjg7CiAgICAgICAgaWYgKHZhbCA+PSBtdWwpCiAgICAgICAgICB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKTsKICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKTsKICAgICAgICBpZiAoISh0aGlzW29mZnNldF0gJiAxMjgpKQogICAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgICByZXR1cm4gKDI1NSAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTE7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgODsKICAgICAgICByZXR1cm4gdmFsICYgMzI3NjggPyB2YWwgfCA0Mjk0OTAxNzYwIDogdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgdGhpc1tvZmZzZXRdIDw8IDg7CiAgICAgICAgcmV0dXJuIHZhbCAmIDMyNzY4ID8gdmFsIHwgNDI5NDkwMTc2MCA6IHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYgfCB0aGlzW29mZnNldCArIDNdIDw8IDI0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDI0IHwgdGhpc1tvZmZzZXQgKyAxXSA8PCAxNiB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgM107CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gKyB0aGlzW29mZnNldCArIDVdICogMiAqKiA4ICsgdGhpc1tvZmZzZXQgKyA2XSAqIDIgKiogMTYgKyAobGFzdCA8PCAyNCk7CiAgICAgICAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChmaXJzdCArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDI0KTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQodGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0KTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOCk7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGNoZWNrSW50KGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikgewogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYnVmKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTsKICAgICAgICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7CiAgICAgICAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludExFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpIC0gMTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBtYXhCeXRlcywgMCk7CiAgICAgICAgfQogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBpID0gMDsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludEJFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpIC0gMTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBtYXhCeXRlcywgMCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludDggPSBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDI1NSwgMCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCA2NTUzNSwgMCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAyOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgNjU1MzUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludDMyTEUgPSBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDQyOTQ5NjcyOTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCA0Mjk0OTY3Mjk1LCAwKTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBmdW5jdGlvbiB3cnRCaWdVSW50NjRMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7CiAgICAgICAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KTsKICAgICAgICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIHJldHVybiBvZmZzZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gd3J0QmlnVUludDY0QkUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkgewogICAgICAgIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNyk7CiAgICAgICAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0ICsgN10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDZdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyA1XSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgNF0gPSBsbzsKICAgICAgICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCArIDNdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyAyXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgMV0gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldF0gPSBoaTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgODsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NExFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyIC0gMSk7CiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbGltaXQgLSAxLCAtbGltaXQpOwogICAgICAgIH0KICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHN1YiA9IDA7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHsKICAgICAgICAgICAgc3ViID0gMTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwgPj4gMCkgLSBzdWIgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMiAtIDEpOwogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIGxpbWl0IC0gMSwgLWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgbGV0IGkgPSBieXRlTGVuZ3RoMiAtIDE7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHN1YiA9IDA7CiAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMjU1OwogICAgICAgIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7CiAgICAgICAgICAgIHN1YiA9IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsID4+IDApIC0gc3ViICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDEyNywgLTEyOCk7CiAgICAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgIHZhbHVlID0gMjU1ICsgdmFsdWUgKyAxOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAzMjc2NywgLTMyNzY4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDMyNzY3LCAtMzI3NjgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDIxNDc0ODM2NDcsIC0yMTQ3NDgzNjQ4KTsKICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgdmFsdWUgPSA0Mjk0OTY3Mjk1ICsgdmFsdWUgKyAxOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiAyNDsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLCBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLCBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKICAgICAgfSk7CiAgICAgIGZ1bmN0aW9uIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHsKICAgICAgICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzNDAyODIzNDY2Mzg1Mjg4NmUyMiwgLTM0MDI4MjM0NjYzODUyODg2ZTIyKTsKICAgICAgICB9CiAgICAgICAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMTc5NzY5MzEzNDg2MjMxNTdlMjkyLCAtMTc5NzY5MzEzNDg2MjMxNTdlMjkyKTsKICAgICAgICB9CiAgICAgICAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA4OwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGFyZ2V0KSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpOwogICAgICAgIGlmICghc3RhcnQpCiAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpCiAgICAgICAgICB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGg7CiAgICAgICAgaWYgKCF0YXJnZXRTdGFydCkKICAgICAgICAgIHRhcmdldFN0YXJ0ID0gMDsKICAgICAgICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkKICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgIGlmIChlbmQgPT09IHN0YXJ0KQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgIGlmIChlbmQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7CiAgICAgICAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydDsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodGFyZ2V0LCB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLCB0YXJnZXRTdGFydCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsZW47CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBlbmNvZGluZyA9IHN0YXJ0OwogICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAic3RyaW5nIikgewogICAgICAgICAgICBlbmNvZGluZyA9IGVuZDsKICAgICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW5jb2RpbmcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICJzdHJpbmciICYmICFCdWZmZXIxMC5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgY29uc3QgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IiAmJiBjb2RlIDwgMTI4IHx8IGVuY29kaW5nID09PSAibGF0aW4xIikgewogICAgICAgICAgICAgIHZhbCA9IGNvZGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB2YWwgPSB2YWwgJiAyNTU7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgIHZhbCA9IE51bWJlcih2YWwpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXJ0ID0gc3RhcnQgPj4+IDA7CiAgICAgICAgZW5kID0gZW5kID09PSB2b2lkIDAgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMDsKICAgICAgICBpZiAoIXZhbCkKICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICAgIHRoaXNbaV0gPSB2YWw7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyMTAuaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlcjEwLmZyb20odmFsLCBlbmNvZGluZyk7CiAgICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7CiAgICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJyArIHZhbCArICciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7CiAgICAgICAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgdmFyIGVycm9ycyA9IHt9OwogICAgICBmdW5jdGlvbiBFKHN5bSwgZ2V0TWVzc2FnZSwgQmFzZSkgewogICAgICAgIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7CiAgICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXNzYWdlIiwgewogICAgICAgICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksCiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IFske3N5bX1dYDsKICAgICAgICAgICAgdGhpcy5zdGFjazsKICAgICAgICAgICAgZGVsZXRlIHRoaXMubmFtZTsKICAgICAgICAgIH0KICAgICAgICAgIGdldCBjb2RlKCkgewogICAgICAgICAgICByZXR1cm4gc3ltOwogICAgICAgICAgfQogICAgICAgICAgc2V0IGNvZGUodmFsdWUpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgRSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIiwgZnVuY3Rpb24obmFtZSkgewogICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIjsKICAgICAgfSwgUmFuZ2VFcnJvcik7CiAgICAgIEUoIkVSUl9JTlZBTElEX0FSR19UWVBFIiwgZnVuY3Rpb24obmFtZSwgYWN0dWFsKSB7CiAgICAgICAgcmV0dXJuIGBUaGUgIiR7bmFtZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgYWN0dWFsfWA7CiAgICAgIH0sIFR5cGVFcnJvcik7CiAgICAgIEUoIkVSUl9PVVRfT0ZfUkFOR0UiLCBmdW5jdGlvbihzdHIsIHJhbmdlLCBpbnB1dCkgewogICAgICAgIGxldCBtc2cgPSBgVGhlIHZhbHVlIG9mICIke3N0cn0iIGlzIG91dCBvZiByYW5nZS5gOwogICAgICAgIGxldCByZWNlaXZlZCA9IGlucHV0OwogICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7CiAgICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIHJlY2VpdmVkID0gU3RyaW5nKGlucHV0KTsKICAgICAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHsKICAgICAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpOwogICAgICAgICAgfQogICAgICAgICAgcmVjZWl2ZWQgKz0gIm4iOwogICAgICAgIH0KICAgICAgICBtc2cgKz0gYCBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWA7CiAgICAgICAgcmV0dXJuIG1zZzsKICAgICAgfSwgUmFuZ2VFcnJvcik7CiAgICAgIGZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvcih2YWwpIHsKICAgICAgICBsZXQgcmVzID0gIiI7CiAgICAgICAgbGV0IGkgPSB2YWwubGVuZ3RoOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAiLSIgPyAxIDogMDsKICAgICAgICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykgewogICAgICAgICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGAke3ZhbC5zbGljZSgwLCBpKX0ke3Jlc31gOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMikgewogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGlmIChidWZbb2Zmc2V0XSA9PT0gdm9pZCAwIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoMl0gPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGgyICsgMSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICAgICAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7CiAgICAgICAgICBjb25zdCBuID0gdHlwZW9mIG1pbiA9PT0gImJpZ2ludCIgPyAibiIgOiAiIjsKICAgICAgICAgIGxldCByYW5nZTsKICAgICAgICAgIGlmIChieXRlTGVuZ3RoMiA+IDMpIHsKICAgICAgICAgICAgaWYgKG1pbiA9PT0gMCB8fCBtaW4gPT09IEJpZ0ludCgwKSkgewogICAgICAgICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4fSR7bn1gOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDggLSAxfSR7bn0pIGFuZCA8IDIgKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDggLSAxfSR7bn1gOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByYW5nZSA9IGA+PSAke21pbn0ke259IGFuZCA8PSAke21heH0ke259YDsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLCByYW5nZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCBuYW1lKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gIm51bWJlciIpIHsKICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgIm51bWJlciIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYm91bmRzRXJyb3IodmFsdWUsIGxlbmd0aCwgdHlwZSkgewogICAgICAgIGlmIChNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpIHsKICAgICAgICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKTsKICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICJvZmZzZXQiLCAiYW4gaW50ZWdlciIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKCk7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICJvZmZzZXQiLCBgPj0gJHt0eXBlID8gMSA6IDB9IGFuZCA8PSAke2xlbmd0aH1gLCB2YWx1ZSk7CiAgICAgIH0KICAgICAgdmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZzsKICAgICAgZnVuY3Rpb24gYmFzZTY0Y2xlYW4oc3RyKSB7CiAgICAgICAgc3RyID0gc3RyLnNwbGl0KCI9IilbMF07CiAgICAgICAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAiIik7CiAgICAgICAgaWYgKHN0ci5sZW5ndGggPCAyKQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkgewogICAgICAgICAgc3RyID0gc3RyICsgIj0iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cmluZywgdW5pdHMpIHsKICAgICAgICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5OwogICAgICAgIGxldCBjb2RlUG9pbnQ7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgICAgICBsZXQgbGVhZFN1cnJvZ2F0ZSA9IG51bGw7CiAgICAgICAgY29uc3QgYnl0ZXMgPSBbXTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKTsKICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiA1NTI5NSAmJiBjb2RlUG9pbnQgPCA1NzM0NCkgewogICAgICAgICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHsKICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID4gNTYzMTkpIHsKICAgICAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8IDU2MzIwKSB7CiAgICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50OwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gNTUyOTYgPDwgMTAgfCBjb2RlUG9pbnQgLSA1NjMyMCkgKyA2NTUzNjsKICAgICAgICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgIH0KICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsOwogICAgICAgICAgaWYgKGNvZGVQb2ludCA8IDEyOCkgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAyMDQ4KSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiA2IHwgMTkyLCBjb2RlUG9pbnQgJiA2MyB8IDEyOCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDY1NTM2KSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAxMiB8IDIyNCwgY29kZVBvaW50ID4+IDYgJiA2MyB8IDEyOCwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAxMTE0MTEyKSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAxOCB8IDI0MCwgY29kZVBvaW50ID4+IDEyICYgNjMgfCAxMjgsIGNvZGVQb2ludCA+PiA2ICYgNjMgfCAxMjgsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBieXRlczsKICAgICAgfQogICAgICBmdW5jdGlvbiBhc2NpaVRvQnl0ZXMoc3RyKSB7CiAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyhzdHIsIHVuaXRzKSB7CiAgICAgICAgbGV0IGMsIGhpLCBsbzsKICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgaGkgPSBjID4+IDg7CiAgICAgICAgICBsbyA9IGMgJSAyNTY7CiAgICAgICAgICBieXRlQXJyYXkucHVzaChsbyk7CiAgICAgICAgICBieXRlQXJyYXkucHVzaChoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyhzdHIpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJsaXRCdWZmZXIoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgbGV0IGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoIHx8IGkgPj0gc3JjLmxlbmd0aCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGlzSW5zdGFuY2Uob2JqLCB0eXBlKSB7CiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHwgb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIG51bWJlcklzTmFOKG9iaikgewogICAgICAgIHJldHVybiBvYmogIT09IG9iajsKICAgICAgfQogICAgICB2YXIgaGV4U2xpY2VMb29rdXBUYWJsZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGNvbnN0IGFscGhhYmV0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IEFycmF5KDI1Nik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7CiAgICAgICAgICBjb25zdCBpMTYgPSBpICogMTY7CiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHsKICAgICAgICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFibGU7CiAgICAgIH0oKTsKICAgICAgZnVuY3Rpb24gZGVmaW5lQmlnSW50TWV0aG9kKGZuKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICJ1bmRlZmluZWQiID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEJ1ZmZlckJpZ0ludE5vdERlZmluZWQoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpOwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIHNyYy9hbGlhcy9idWZmZXItc2hpbS5qcwogIHZhciBpbXBvcnRfYnVmZmVyOwogIHZhciBpbml0X2J1ZmZlcl9zaGltID0gX19lc20oewogICAgInNyYy9hbGlhcy9idWZmZXItc2hpbS5qcyIoKSB7CiAgICAgIGltcG9ydF9idWZmZXIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsQDEuNy41L25vZGVfbW9kdWxlcy9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9janMtcG9ueWZpbGwuanMKICB2YXIgcmVxdWlyZV9janNfcG9ueWZpbGwgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsQDEuNy41L25vZGVfbW9kdWxlcy9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9janMtcG9ueWZpbGwuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKQogICAgICAgICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgewogICAgICAgIGlmIChwcm90b1Byb3BzKQogICAgICAgICAgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgICAgICBpZiAoc3RhdGljUHJvcHMpCiAgICAgICAgICBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsKICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgICAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7CiAgICAgICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsICJwcm90b3R5cGUiLCB7CiAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgICBpZiAoc3VwZXJDbGFzcykKICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKICAgICAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mMihvMikgewogICAgICAgICAgcmV0dXJuIG8yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YobzIpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgewogICAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YyKG8yLCBwMikgewogICAgICAgICAgbzIuX19wcm90b19fID0gcDI7CiAgICAgICAgICByZXR1cm4gbzI7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkgewogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYyKSB7CiAgICAgICAgaWYgKHNlbGYyID09PSB2b2lkIDApIHsKICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmMjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmMiwgY2FsbCkgewogICAgICAgIGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpKSB7CiAgICAgICAgICByZXR1cm4gY2FsbDsKICAgICAgICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZjIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7CiAgICAgICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgewogICAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7CiAgICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgewogICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOwogICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7CiAgICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9nZXQoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSAidW5kZWZpbmVkIiAmJiBSZWZsZWN0LmdldCkgewogICAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0LmJpbmQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQyKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7CiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmICghYmFzZSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmIChkZXNjLmdldCkgewogICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9nZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfQogICAgICB2YXIgRW1pdHRlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBFbWl0dGVyMigpIHsKICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbWl0dGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImxpc3RlbmVycyIsIHsKICAgICAgICAgICAgdmFsdWU6IHt9LAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEVtaXR0ZXIyLCBbewogICAgICAgICAga2V5OiAiYWRkRXZlbnRMaXN0ZW5lciIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoISh0eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdID0gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0ucHVzaCh7CiAgICAgICAgICAgICAgY2FsbGJhY2ssCiAgICAgICAgICAgICAgb3B0aW9ucwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJyZW1vdmVFdmVudExpc3RlbmVyIiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgIGlmICghKHR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW3R5cGVdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIGlmIChzdGFja1tpXS5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJkaXNwYXRjaEV2ZW50IiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKGV2ZW50LnR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW2V2ZW50LnR5cGVdOwogICAgICAgICAgICB2YXIgc3RhY2tUb0NhbGwgPSBzdGFjay5zbGljZSgpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrVG9DYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHN0YWNrVG9DYWxsW2ldOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsaXN0ZW5lci5vcHRpb25zICYmIGxpc3RlbmVyLm9wdGlvbnMub25jZSkgewogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUsIGxpc3RlbmVyLmNhbGxiYWNrKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gRW1pdHRlcjI7CiAgICAgIH0oKTsKICAgICAgdmFyIEFib3J0U2lnbmFsID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKF9FbWl0dGVyKSB7CiAgICAgICAgX2luaGVyaXRzKEFib3J0U2lnbmFsMiwgX0VtaXR0ZXIpOwogICAgICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQWJvcnRTaWduYWwyKTsKICAgICAgICBmdW5jdGlvbiBBYm9ydFNpZ25hbDIoKSB7CiAgICAgICAgICB2YXIgX3RoaXM7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRTaWduYWwyKTsKICAgICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7CiAgICAgICAgICBpZiAoIV90aGlzLmxpc3RlbmVycykgewogICAgICAgICAgICBFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOwogICAgICAgICAgfQogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCAiYWJvcnRlZCIsIHsKICAgICAgICAgICAgdmFsdWU6IGZhbHNlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgIm9uYWJvcnQiLCB7CiAgICAgICAgICAgIHZhbHVlOiBudWxsLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgInJlYXNvbiIsIHsKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhBYm9ydFNpZ25hbDIsIFt7CiAgICAgICAgICBrZXk6ICJ0b1N0cmluZyIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiAiW29iamVjdCBBYm9ydFNpZ25hbF0iOwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGtleTogImRpc3BhdGNoRXZlbnQiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsKICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJhYm9ydCIpIHsKICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbmFib3J0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uYWJvcnQuY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9nZXQoX2dldFByb3RvdHlwZU9mKEFib3J0U2lnbmFsMi5wcm90b3R5cGUpLCAiZGlzcGF0Y2hFdmVudCIsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gQWJvcnRTaWduYWwyOwogICAgICB9KEVtaXR0ZXIpOwogICAgICB2YXIgQWJvcnRDb250cm9sbGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIEFib3J0Q29udHJvbGxlcjIoKSB7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRDb250cm9sbGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNpZ25hbCIsIHsKICAgICAgICAgICAgdmFsdWU6IG5ldyBBYm9ydFNpZ25hbCgpLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEFib3J0Q29udHJvbGxlcjIsIFt7CiAgICAgICAgICBrZXk6ICJhYm9ydCIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7CiAgICAgICAgICAgIHZhciBldmVudDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudCgiYWJvcnQiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7CiAgICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9ICJhYm9ydCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICAgICAgICAgICAgICBldmVudC5pbml0RXZlbnQoImFib3J0IiwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhYm9ydCIsCiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLAogICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNpZ25hbFJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgICAgaWYgKHNpZ25hbFJlYXNvbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbi5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRE9NRXhjZXB0aW9uKCJzaWduYWwgaXMgYWJvcnRlZCB3aXRob3V0IHJlYXNvbiIpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgICAgc2lnbmFsUmVhc29uLm5hbWUgPSAiQWJvcnRFcnJvciI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHNpZ25hbFJlYXNvbjsKICAgICAgICAgICAgdGhpcy5zaWduYWwuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAidG9TdHJpbmciLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gIltvYmplY3QgQWJvcnRDb250cm9sbGVyXSI7CiAgICAgICAgICB9CiAgICAgICAgfV0pOwogICAgICAgIHJldHVybiBBYm9ydENvbnRyb2xsZXIyOwogICAgICB9KCk7CiAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHsKICAgICAgICBBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiQWJvcnRDb250cm9sbGVyIjsKICAgICAgICBBYm9ydFNpZ25hbC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICJBYm9ydFNpZ25hbCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9seWZpbGxOZWVkZWQoc2VsZjIpIHsKICAgICAgICBpZiAoc2VsZjIuX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgY29uc29sZS5sb2coIl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEw9dHJ1ZSBpcyBzZXQsIHdpbGwgZm9yY2UgaW5zdGFsbCBwb2x5ZmlsbCIpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0eXBlb2Ygc2VsZjIuUmVxdWVzdCA9PT0gImZ1bmN0aW9uIiAmJiAhc2VsZjIuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpIHx8ICFzZWxmMi5BYm9ydENvbnRyb2xsZXI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWJvcnRhYmxlRmV0Y2hEZWNvcmF0b3IocGF0Y2hUYXJnZXRzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBwYXRjaFRhcmdldHMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBhdGNoVGFyZ2V0cyA9IHsKICAgICAgICAgICAgZmV0Y2g6IHBhdGNoVGFyZ2V0cwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIF9wYXRjaFRhcmdldHMgPSBwYXRjaFRhcmdldHMsIGZldGNoID0gX3BhdGNoVGFyZ2V0cy5mZXRjaCwgX3BhdGNoVGFyZ2V0cyRSZXF1ZXN0ID0gX3BhdGNoVGFyZ2V0cy5SZXF1ZXN0LCBOYXRpdmVSZXF1ZXN0ID0gX3BhdGNoVGFyZ2V0cyRSZXF1ZXN0ID09PSB2b2lkIDAgPyBmZXRjaC5SZXF1ZXN0IDogX3BhdGNoVGFyZ2V0cyRSZXF1ZXN0LCBOYXRpdmVBYm9ydENvbnRyb2xsZXIgPSBfcGF0Y2hUYXJnZXRzLkFib3J0Q29udHJvbGxlciwgX3BhdGNoVGFyZ2V0cyRfX0ZPUkNFID0gX3BhdGNoVGFyZ2V0cy5fX0ZPUkNFX0lOU1RBTExfQUJPUlRDT05UUk9MTEVSX1BPTFlGSUxMLCBfX0ZPUkNFX0lOU1RBTExfQUJPUlRDT05UUk9MTEVSX1BPTFlGSUxMID0gX3BhdGNoVGFyZ2V0cyRfX0ZPUkNFID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXRjaFRhcmdldHMkX19GT1JDRTsKICAgICAgICBpZiAoIXBvbHlmaWxsTmVlZGVkKHsKICAgICAgICAgIGZldGNoLAogICAgICAgICAgUmVxdWVzdDogTmF0aXZlUmVxdWVzdCwKICAgICAgICAgIEFib3J0Q29udHJvbGxlcjogTmF0aXZlQWJvcnRDb250cm9sbGVyLAogICAgICAgICAgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTAogICAgICAgIH0pKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBmZXRjaCwKICAgICAgICAgICAgUmVxdWVzdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIFJlcXVlc3QgPSBOYXRpdmVSZXF1ZXN0OwogICAgICAgIGlmIChSZXF1ZXN0ICYmICFSZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic2lnbmFsIikgfHwgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgUmVxdWVzdCA9IGZ1bmN0aW9uIFJlcXVlc3QyKGlucHV0LCBpbml0MikgewogICAgICAgICAgICB2YXIgc2lnbmFsOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgc2lnbmFsID0gaW5pdDIuc2lnbmFsOwogICAgICAgICAgICAgIGRlbGV0ZSBpbml0Mi5zaWduYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgaW5pdDIpOwogICAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVlc3QsICJzaWduYWwiLCB7CiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIHZhbHVlOiBzaWduYWwKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgICAgIH07CiAgICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QucHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICB2YXIgcmVhbEZldGNoID0gZmV0Y2g7CiAgICAgICAgdmFyIGFib3J0YWJsZUZldGNoID0gZnVuY3Rpb24gYWJvcnRhYmxlRmV0Y2gyKGlucHV0LCBpbml0MikgewogICAgICAgICAgdmFyIHNpZ25hbCA9IFJlcXVlc3QgJiYgUmVxdWVzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihpbnB1dCkgPyBpbnB1dC5zaWduYWwgOiBpbml0MiA/IGluaXQyLnNpZ25hbCA6IHZvaWQgMDsKICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgdmFyIGFib3J0RXJyb3I7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYWJvcnRFcnJvciA9IG5ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCAiQWJvcnRFcnJvciIpOwogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBhYm9ydEVycm9yID0gbmV3IEVycm9yKCJBYm9ydGVkIik7CiAgICAgICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChhYm9ydEVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgY2FuY2VsbGF0aW9uID0gbmV3IFByb21pc2UoZnVuY3Rpb24oXywgcmVqZWN0KSB7CiAgICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGFib3J0RXJyb3IpOwogICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIG9uY2U6IHRydWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChpbml0MiAmJiBpbml0Mi5zaWduYWwpIHsKICAgICAgICAgICAgICBkZWxldGUgaW5pdDIuc2lnbmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW2NhbmNlbGxhdGlvbiwgcmVhbEZldGNoKGlucHV0LCBpbml0MildKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZWFsRmV0Y2goaW5wdXQsIGluaXQyKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBmZXRjaDogYWJvcnRhYmxlRmV0Y2gsCiAgICAgICAgICBSZXF1ZXN0CiAgICAgICAgfTsKICAgICAgfQogICAgICBleHBvcnRzMi5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7CiAgICAgIGV4cG9ydHMyLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7CiAgICAgIGV4cG9ydHMyLmFib3J0YWJsZUZldGNoID0gYWJvcnRhYmxlRmV0Y2hEZWNvcmF0b3I7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2Fib3J0Y29udHJvbGxlci1wb255ZmlsbC5qcwogIHZhciByZXF1aXJlX2Fib3J0Y29udHJvbGxlcl9wb255ZmlsbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2Fib3J0Y29udHJvbGxlci1wb255ZmlsbC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5BYm9ydFNpZ25hbCA9IGV4cG9ydHMyLkFib3J0Q29udHJvbGxlciA9IHZvaWQgMDsKICAgICAgdmFyIGNqc19wb255ZmlsbF8xID0gcmVxdWlyZV9janNfcG9ueWZpbGwoKTsKICAgICAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBzZWxmOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIGdsb2JhbDsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QiKTsKICAgICAgfTsKICAgICAgdmFyIEFib3J0Q29udHJvbGxlciA9IHR5cGVvZiBnZXRHbG9iYWwoKS5BYm9ydENvbnRyb2xsZXIgPT09ICJ1bmRlZmluZWQiID8gY2pzX3BvbnlmaWxsXzEuQWJvcnRDb250cm9sbGVyIDogZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyOwogICAgICBleHBvcnRzMi5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7CiAgICAgIHZhciBBYm9ydFNpZ25hbCA9IHR5cGVvZiBnZXRHbG9iYWwoKS5BYm9ydENvbnRyb2xsZXIgPT09ICJ1bmRlZmluZWQiID8gY2pzX3BvbnlmaWxsXzEuQWJvcnRTaWduYWwgOiBnZXRHbG9iYWwoKS5BYm9ydFNpZ25hbDsKICAgICAgZXhwb3J0czIuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlQWJvcnRDb250cm9sbGVyLmpzCiAgdmFyIHJlcXVpcmVfQWdncmVnYXRlQWJvcnRDb250cm9sbGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlQWJvcnRDb250cm9sbGVyLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMSA9IHJlcXVpcmVfYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsKCk7CiAgICAgIHZhciBOdWxsU2lnbmFsID0gY2xhc3MgewogICAgICB9OwogICAgICB2YXIgQWdncmVnYXRlQWJvcnRDb250cm9sbGVyID0gY2xhc3MgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgdGhpcy5zaWduYWxzID0gbmV3IFNldCgpOwogICAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsXzEuQWJvcnRDb250cm9sbGVyKCk7CiAgICAgICAgfQogICAgICAgIGFkZFNpZ25hbChzaWduYWwgPSBuZXcgTnVsbFNpZ25hbCgpKSB7CiAgICAgICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBhZGQgYSBzaWduYWwsIGFscmVhZHkgYWJvcnRlZCEiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc2lnbmFscy5hZGQoc2lnbmFsKTsKICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICB0aGlzLmhhbmRsZUFib3J0ZWQoc2lnbmFsKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsICgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFib3J0ZWQoc2lnbmFsKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUFib3J0ZWQoc2lnbmFsKSB7CiAgICAgICAgICB0aGlzLnNpZ25hbHMuZGVsZXRlKHNpZ25hbCk7CiAgICAgICAgICBpZiAodGhpcy5zaWduYWxzLnNpemUgPT09IDApIHsKICAgICAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0IHNpZ25hbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWw7CiAgICAgICAgfQogICAgICAgIGFib3J0KCkgewogICAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyLmpzCiAgdmFyIHJlcXVpcmVfQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlci5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IG5ldyBTZXQoKTsKICAgICAgICB9CiAgICAgICAgYWRkQ2FsbGJhY2soY2FsbGJhY2sgPSAoKSA9PiB7CiAgICAgICAgfSkgewogICAgICAgICAgdGhpcy5jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTsKICAgICAgICAgIGNhbGxiYWNrKHRoaXMuY3VycmVudE1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgICBjYWxsYmFjayhtZXNzYWdlKSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlID0gbWVzc2FnZTsKICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmZvckVhY2goKGVsdCkgPT4gewogICAgICAgICAgICBlbHQobWVzc2FnZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWJvcnRhYmxlUHJvbWlzZUNhY2hlLmpzCiAgdmFyIHJlcXVpcmVfQWJvcnRhYmxlUHJvbWlzZUNhY2hlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWJvcnRhYmxlUHJvbWlzZUNhY2hlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMyICYmIGV4cG9ydHMyLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyAiZGVmYXVsdCI6IG1vZCB9OwogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xID0gcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwoKTsKICAgICAgdmFyIEFnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmVfQWdncmVnYXRlQWJvcnRDb250cm9sbGVyKCkpOwogICAgICB2YXIgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyKCkpOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlMiA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZpbGwsIGNhY2hlIH0pIHsKICAgICAgICAgIGlmICh0eXBlb2YgZmlsbCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBmaWxsIGZ1bmN0aW9uIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBjYWNoZSBvYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2YgY2FjaGUuZ2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBjYWNoZS5zZXQgIT09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIGNhY2hlLmRlbGV0ZSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWNoZSBtdXN0IGltcGxlbWVudCBnZXQoa2V5KSwgc2V0KGtleSwgdmFsKSwgYW5kIGFuZCBkZWxldGUoa2V5KSIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlOwogICAgICAgICAgdGhpcy5maWxsQ2FsbGJhY2sgPSBmaWxsOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaXNBYm9ydEV4Y2VwdGlvbihleGNlcHRpb24pIHsKICAgICAgICAgIHJldHVybiBleGNlcHRpb24ubmFtZSA9PT0gIkFib3J0RXJyb3IiIHx8IGV4Y2VwdGlvbi5jb2RlID09PSAiRVJSX0FCT1JURUQiIHx8IGV4Y2VwdGlvbi5tZXNzYWdlID09PSAiQWJvcnRFcnJvcjogYWJvcnRlZCIgfHwgZXhjZXB0aW9uLm1lc3NhZ2UgPT09ICJFcnJvcjogYWJvcnRlZCI7CiAgICAgICAgfQogICAgICAgIGV2aWN0KGtleSwgZW50cnkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmdldChrZXkpID09PSBlbnRyeSkgewogICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgY29uc3QgYWJvcnRlciA9IG5ldyBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXJfMS5kZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBzdGF0dXNSZXBvcnRlciA9IG5ldyBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcl8xLmRlZmF1bHQoKTsKICAgICAgICAgIHN0YXR1c1JlcG9ydGVyLmFkZENhbGxiYWNrKHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgIGNvbnN0IG5ld0VudHJ5ID0gewogICAgICAgICAgICBhYm9ydGVyLAogICAgICAgICAgICBwcm9taXNlOiB0aGlzLmZpbGxDYWxsYmFjayhkYXRhLCBhYm9ydGVyLnNpZ25hbCwgKG1lc3NhZ2UpID0+IHsKICAgICAgICAgICAgICBzdGF0dXNSZXBvcnRlci5jYWxsYmFjayhtZXNzYWdlKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHNldHRsZWQ6IGZhbHNlLAogICAgICAgICAgICBzdGF0dXNSZXBvcnRlciwKICAgICAgICAgICAgZ2V0IGFib3J0ZWQoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRlci5zaWduYWwuYWJvcnRlZDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIG5ld0VudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICBuZXdFbnRyeS5hYm9ydGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsICgpID0+IHsKICAgICAgICAgICAgaWYgKCFuZXdFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5ldmljdChrZXksIG5ld0VudHJ5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBuZXdFbnRyeS5wcm9taXNlLnRoZW4oKCkgPT4gewogICAgICAgICAgICBuZXdFbnRyeS5zZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0sICgpID0+IHsKICAgICAgICAgICAgbmV3RW50cnkuc2V0dGxlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIG5ld0VudHJ5KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGNoZWNrU2luZ2xlUHJvbWlzZShwcm9taXNlLCBzaWduYWwpIHsKICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2luZ2xlQWJvcnQoKSB7CiAgICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiYWJvcnRlZCIpLCB7IGNvZGU6ICJFUlJfQUJPUlRFRCIgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4gewogICAgICAgICAgICBjaGVja0ZvclNpbmdsZUFib3J0KCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9LCAoZXJyb3IpID0+IHsKICAgICAgICAgICAgY2hlY2tGb3JTaW5nbGVBYm9ydCgpOwogICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBoYXMoa2V5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgZ2V0KGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgaWYgKCFzaWduYWwgJiYgZGF0YSBpbnN0YW5jZW9mIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xLkFib3J0U2lnbmFsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInNlY29uZCBnZXQgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhbiBBYm9ydFNpZ25hbCwgcGVyaGFwcyB5b3UgbWVhbnQgdG8gcGFzcyBgbnVsbGAgZm9yIHRoZSBmaWxsIGRhdGE/Iik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjYWNoZUVudHJ5ID0gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIGlmIChjYWNoZUVudHJ5KSB7CiAgICAgICAgICAgIGlmIChjYWNoZUVudHJ5LmFib3J0ZWQgJiYgIWNhY2hlRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBjYWNoZUVudHJ5KTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoa2V5LCBkYXRhLCBzaWduYWwsIHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlRW50cnkucHJvbWlzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYWNoZUVudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICAgIGNhY2hlRW50cnkuc3RhdHVzUmVwb3J0ZXIuYWRkQ2FsbGJhY2soc3RhdHVzQ2FsbGJhY2spOwogICAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UoY2FjaGVFbnRyeS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UodGhpcy5jYWNoZS5nZXQoa2V5KS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgIH0KICAgICAgICBkZWxldGUoa2V5KSB7CiAgICAgICAgICBjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICBpZiAoY2FjaGVkRW50cnkpIHsKICAgICAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgY2FjaGVkRW50cnkuYWJvcnRlci5hYm9ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgY29uc3Qga2V5SXRlciA9IHRoaXMuY2FjaGUua2V5cygpOwogICAgICAgICAgbGV0IGRlbGV0ZUNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpOyAhcmVzdWx0LmRvbmU7IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpKSB7CiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHJlc3VsdC52YWx1ZSk7CiAgICAgICAgICAgIGRlbGV0ZUNvdW50ICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZGVsZXRlQ291bnQ7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vaW5kZXguanMKICB2YXIgcmVxdWlyZV9lc20gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2ltcG9ydERlZmF1bHQgPSBleHBvcnRzMiAmJiBleHBvcnRzMi5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBBYm9ydGFibGVQcm9taXNlQ2FjaGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0Fib3J0YWJsZVByb21pc2VDYWNoZSgpKTsKICAgICAgZXhwb3J0czIuZGVmYXVsdCA9IEFib3J0YWJsZVByb21pc2VDYWNoZV8xLmRlZmF1bHQ7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVANC4wLjEvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcwogIHZhciByZXF1aXJlX3F1aWNrX2xydSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVANC4wLjEvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBRdWlja0xSVSA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHsKICAgICAgICAgIGlmICghKG9wdGlvbnMubWF4U2l6ZSAmJiBvcHRpb25zLm1heFNpemUgPiAwKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4U2l6ZWAgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5tYXhTaXplID0gb3B0aW9ucy5tYXhTaXplOwogICAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICAgIHRoaXMub2xkQ2FjaGUgPSBuZXcgTWFwKCk7CiAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICB9CiAgICAgICAgX3NldChrZXksIHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTsKICAgICAgICAgIHRoaXMuX3NpemUrKzsKICAgICAgICAgIGlmICh0aGlzLl9zaXplID49IHRoaXMubWF4U2l6ZSkgewogICAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICAgICAgdGhpcy5vbGRDYWNoZSA9IHRoaXMuY2FjaGU7CiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTWFwKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldChrZXkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMub2xkQ2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm9sZENhY2hlLmdldChrZXkpOwogICAgICAgICAgICB0aGlzLm9sZENhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgICB0aGlzLl9zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGhhcyhrZXkpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmhhcyhrZXkpIHx8IHRoaXMub2xkQ2FjaGUuaGFzKGtleSk7CiAgICAgICAgfQogICAgICAgIHBlZWsoa2V5KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9sZENhY2hlLmdldChrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxldGUoa2V5KSB7CiAgICAgICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTsKICAgICAgICAgIGlmIChkZWxldGVkKSB7CiAgICAgICAgICAgIHRoaXMuX3NpemUtLTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLm9sZENhY2hlLmRlbGV0ZShrZXkpIHx8IGRlbGV0ZWQ7CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpOwogICAgICAgICAgdGhpcy5vbGRDYWNoZS5jbGVhcigpOwogICAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgfQogICAgICAgICprZXlzKCkgewogICAgICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB0aGlzKSB7CiAgICAgICAgICAgIHlpZWxkIGtleTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKnZhbHVlcygpIHsKICAgICAgICAgIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIHRoaXMpIHsKICAgICAgICAgICAgeWllbGQgdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNhY2hlKSB7CiAgICAgICAgICAgIHlpZWxkIGl0ZW07CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5vbGRDYWNoZSkgewogICAgICAgICAgICBjb25zdCBba2V5XSA9IGl0ZW07CiAgICAgICAgICAgIGlmICghdGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICAgIHlpZWxkIGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0IHNpemUoKSB7CiAgICAgICAgICBsZXQgb2xkQ2FjaGVTaXplID0gMDsKICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMub2xkQ2FjaGUua2V5cygpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICAgIG9sZENhY2hlU2l6ZSsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSArIG9sZENhY2hlU2l6ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IFF1aWNrTFJVOwogICAgfQogIH0pOwoKICAvLyAoZGlzYWJsZWQpOm5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vbG9jYWxGaWxlCiAgdmFyIHJlcXVpcmVfbG9jYWxGaWxlID0gX19jb21tb25KUyh7CiAgICAiKGRpc2FibGVkKTpub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2xvY2FsRmlsZSIoKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMKICB2YXIgcmVxdWlyZV9jb21tb24gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL2NvbW1vbi5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBUWVBFRF9PSyA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgVWludDE2QXJyYXkgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAidW5kZWZpbmVkIjsKICAgICAgZnVuY3Rpb24gX2hhcyhvYmosIGtleSkgewogICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmFzc2lnbiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7CiAgICAgICAgICBpZiAoIXNvdXJjZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNvdXJjZSArICJtdXN0IGJlIG5vbi1vYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7CiAgICAgICAgICAgIGlmIChfaGFzKHNvdXJjZSwgcCkpIHsKICAgICAgICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfTsKICAgICAgZXhwb3J0czIuc2hyaW5rQnVmID0gZnVuY3Rpb24oYnVmLCBzaXplKSB7CiAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPT09IHNpemUpIHsKICAgICAgICAgIHJldHVybiBidWY7CiAgICAgICAgfQogICAgICAgIGlmIChidWYuc3ViYXJyYXkpIHsKICAgICAgICAgIHJldHVybiBidWYuc3ViYXJyYXkoMCwgc2l6ZSk7CiAgICAgICAgfQogICAgICAgIGJ1Zi5sZW5ndGggPSBzaXplOwogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIHZhciBmblR5cGVkID0gewogICAgICAgIGFycmF5U2V0OiBmdW5jdGlvbihkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2ZmcykgewogICAgICAgICAgaWYgKHNyYy5zdWJhcnJheSAmJiBkZXN0LnN1YmFycmF5KSB7CiAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNfb2Zmcywgc3JjX29mZnMgKyBsZW4pLCBkZXN0X29mZnMpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uKGNodW5rcykgewogICAgICAgICAgdmFyIGksIGwsIGxlbiwgcG9zLCBjaHVuaywgcmVzdWx0OwogICAgICAgICAgbGVuID0gMDsKICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGxlbiArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBjaHVuayA9IGNodW5rc1tpXTsKICAgICAgICAgICAgcmVzdWx0LnNldChjaHVuaywgcG9zKTsKICAgICAgICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgZm5VbnR5cGVkID0gewogICAgICAgIGFycmF5U2V0OiBmdW5jdGlvbihkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2ZmcykgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbihjaHVua3MpIHsKICAgICAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGNodW5rcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5zZXRUeXBlZCA9IGZ1bmN0aW9uKG9uKSB7CiAgICAgICAgaWYgKG9uKSB7CiAgICAgICAgICBleHBvcnRzMi5CdWY4ID0gVWludDhBcnJheTsKICAgICAgICAgIGV4cG9ydHMyLkJ1ZjE2ID0gVWludDE2QXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5CdWYzMiA9IEludDMyQXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5hc3NpZ24oZXhwb3J0czIsIGZuVHlwZWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHBvcnRzMi5CdWY4ID0gQXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5CdWYxNiA9IEFycmF5OwogICAgICAgICAgZXhwb3J0czIuQnVmMzIgPSBBcnJheTsKICAgICAgICAgIGV4cG9ydHMyLmFzc2lnbihleHBvcnRzMiwgZm5VbnR5cGVkKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLnNldFR5cGVkKFRZUEVEX09LKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3RyZWVzLmpzCiAgdmFyIHJlcXVpcmVfdHJlZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvdHJlZXMuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgWl9GSVhFRCA9IDQ7CiAgICAgIHZhciBaX0JJTkFSWSA9IDA7CiAgICAgIHZhciBaX1RFWFQgPSAxOwogICAgICB2YXIgWl9VTktOT1dOID0gMjsKICAgICAgZnVuY3Rpb24gemVybyhidWYpIHsKICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1sZW4gPj0gMCkgewogICAgICAgICAgYnVmW2xlbl0gPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgU1RPUkVEX0JMT0NLID0gMDsKICAgICAgdmFyIFNUQVRJQ19UUkVFUyA9IDE7CiAgICAgIHZhciBEWU5fVFJFRVMgPSAyOwogICAgICB2YXIgTUlOX01BVENIID0gMzsKICAgICAgdmFyIE1BWF9NQVRDSCA9IDI1ODsKICAgICAgdmFyIExFTkdUSF9DT0RFUyA9IDI5OwogICAgICB2YXIgTElURVJBTFMgPSAyNTY7CiAgICAgIHZhciBMX0NPREVTID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTOwogICAgICB2YXIgRF9DT0RFUyA9IDMwOwogICAgICB2YXIgQkxfQ09ERVMgPSAxOTsKICAgICAgdmFyIEhFQVBfU0laRSA9IDIgKiBMX0NPREVTICsgMTsKICAgICAgdmFyIE1BWF9CSVRTID0gMTU7CiAgICAgIHZhciBCdWZfc2l6ZSA9IDE2OwogICAgICB2YXIgTUFYX0JMX0JJVFMgPSA3OwogICAgICB2YXIgRU5EX0JMT0NLID0gMjU2OwogICAgICB2YXIgUkVQXzNfNiA9IDE2OwogICAgICB2YXIgUkVQWl8zXzEwID0gMTc7CiAgICAgIHZhciBSRVBaXzExXzEzOCA9IDE4OwogICAgICB2YXIgZXh0cmFfbGJpdHMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMF07CiAgICAgIHZhciBleHRyYV9kYml0cyA9IFswLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMywgMTNdOwogICAgICB2YXIgZXh0cmFfYmxiaXRzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDddOwogICAgICB2YXIgYmxfb3JkZXIgPSBbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV07CiAgICAgIHZhciBESVNUX0NPREVfTEVOID0gNTEyOwogICAgICB2YXIgc3RhdGljX2x0cmVlID0gbmV3IEFycmF5KChMX0NPREVTICsgMikgKiAyKTsKICAgICAgemVybyhzdGF0aWNfbHRyZWUpOwogICAgICB2YXIgc3RhdGljX2R0cmVlID0gbmV3IEFycmF5KERfQ09ERVMgKiAyKTsKICAgICAgemVybyhzdGF0aWNfZHRyZWUpOwogICAgICB2YXIgX2Rpc3RfY29kZSA9IG5ldyBBcnJheShESVNUX0NPREVfTEVOKTsKICAgICAgemVybyhfZGlzdF9jb2RlKTsKICAgICAgdmFyIF9sZW5ndGhfY29kZSA9IG5ldyBBcnJheShNQVhfTUFUQ0ggLSBNSU5fTUFUQ0ggKyAxKTsKICAgICAgemVybyhfbGVuZ3RoX2NvZGUpOwogICAgICB2YXIgYmFzZV9sZW5ndGggPSBuZXcgQXJyYXkoTEVOR1RIX0NPREVTKTsKICAgICAgemVybyhiYXNlX2xlbmd0aCk7CiAgICAgIHZhciBiYXNlX2Rpc3QgPSBuZXcgQXJyYXkoRF9DT0RFUyk7CiAgICAgIHplcm8oYmFzZV9kaXN0KTsKICAgICAgZnVuY3Rpb24gU3RhdGljVHJlZURlc2Moc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7CiAgICAgICAgdGhpcy5zdGF0aWNfdHJlZSA9IHN0YXRpY190cmVlOwogICAgICAgIHRoaXMuZXh0cmFfYml0cyA9IGV4dHJhX2JpdHM7CiAgICAgICAgdGhpcy5leHRyYV9iYXNlID0gZXh0cmFfYmFzZTsKICAgICAgICB0aGlzLmVsZW1zID0gZWxlbXM7CiAgICAgICAgdGhpcy5tYXhfbGVuZ3RoID0gbWF4X2xlbmd0aDsKICAgICAgICB0aGlzLmhhc19zdHJlZSA9IHN0YXRpY190cmVlICYmIHN0YXRpY190cmVlLmxlbmd0aDsKICAgICAgfQogICAgICB2YXIgc3RhdGljX2xfZGVzYzsKICAgICAgdmFyIHN0YXRpY19kX2Rlc2M7CiAgICAgIHZhciBzdGF0aWNfYmxfZGVzYzsKICAgICAgZnVuY3Rpb24gVHJlZURlc2MoZHluX3RyZWUsIHN0YXRfZGVzYykgewogICAgICAgIHRoaXMuZHluX3RyZWUgPSBkeW5fdHJlZTsKICAgICAgICB0aGlzLm1heF9jb2RlID0gMDsKICAgICAgICB0aGlzLnN0YXRfZGVzYyA9IHN0YXRfZGVzYzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkX2NvZGUoZGlzdCkgewogICAgICAgIHJldHVybiBkaXN0IDwgMjU2ID8gX2Rpc3RfY29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2ICsgKGRpc3QgPj4+IDcpXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwdXRfc2hvcnQocywgdykgewogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gdyAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHcgPj4+IDggJiAyNTU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHsKICAgICAgICBpZiAocy5iaV92YWxpZCA+IEJ1Zl9zaXplIC0gbGVuZ3RoKSB7CiAgICAgICAgICBzLmJpX2J1ZiB8PSB2YWx1ZSA8PCBzLmJpX3ZhbGlkICYgNjU1MzU7CiAgICAgICAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgICAgICAgcy5iaV9idWYgPSB2YWx1ZSA+PiBCdWZfc2l6ZSAtIHMuYmlfdmFsaWQ7CiAgICAgICAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzLmJpX2J1ZiB8PSB2YWx1ZSA8PCBzLmJpX3ZhbGlkICYgNjU1MzU7CiAgICAgICAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF9jb2RlKHMsIGMsIHRyZWUpIHsKICAgICAgICBzZW5kX2JpdHMocywgdHJlZVtjICogMl0sIHRyZWVbYyAqIDIgKyAxXSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmlfcmV2ZXJzZShjb2RlLCBsZW4pIHsKICAgICAgICB2YXIgcmVzID0gMDsKICAgICAgICBkbyB7CiAgICAgICAgICByZXMgfD0gY29kZSAmIDE7CiAgICAgICAgICBjb2RlID4+Pj0gMTsKICAgICAgICAgIHJlcyA8PD0gMTsKICAgICAgICB9IHdoaWxlICgtLWxlbiA+IDApOwogICAgICAgIHJldHVybiByZXMgPj4+IDE7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmlfZmx1c2gocykgewogICAgICAgIGlmIChzLmJpX3ZhbGlkID09PSAxNikgewogICAgICAgICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgICAgICAgIHMuYmlfYnVmID0gMDsKICAgICAgICAgIHMuYmlfdmFsaWQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAocy5iaV92YWxpZCA+PSA4KSB7CiAgICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmICYgMjU1OwogICAgICAgICAgcy5iaV9idWYgPj49IDg7CiAgICAgICAgICBzLmJpX3ZhbGlkIC09IDg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdlbl9iaXRsZW4ocywgZGVzYykgewogICAgICAgIHZhciB0cmVlID0gZGVzYy5keW5fdHJlZTsKICAgICAgICB2YXIgbWF4X2NvZGUgPSBkZXNjLm1heF9jb2RlOwogICAgICAgIHZhciBzdHJlZSA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogICAgICAgIHZhciBoYXNfc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgICAgICAgdmFyIGV4dHJhID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYml0czsKICAgICAgICB2YXIgYmFzZSA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2Jhc2U7CiAgICAgICAgdmFyIG1heF9sZW5ndGggPSBkZXNjLnN0YXRfZGVzYy5tYXhfbGVuZ3RoOwogICAgICAgIHZhciBoOwogICAgICAgIHZhciBuLCBtOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciB4Yml0czsKICAgICAgICB2YXIgZjsKICAgICAgICB2YXIgb3ZlcmZsb3cgPSAwOwogICAgICAgIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgICAgICAgcy5ibF9jb3VudFtiaXRzXSA9IDA7CiAgICAgICAgfQogICAgICAgIHRyZWVbcy5oZWFwW3MuaGVhcF9tYXhdICogMiArIDFdID0gMDsKICAgICAgICBmb3IgKGggPSBzLmhlYXBfbWF4ICsgMTsgaCA8IEhFQVBfU0laRTsgaCsrKSB7CiAgICAgICAgICBuID0gcy5oZWFwW2hdOwogICAgICAgICAgYml0cyA9IHRyZWVbdHJlZVtuICogMiArIDFdICogMiArIDFdICsgMTsKICAgICAgICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkgewogICAgICAgICAgICBiaXRzID0gbWF4X2xlbmd0aDsKICAgICAgICAgICAgb3ZlcmZsb3crKzsKICAgICAgICAgIH0KICAgICAgICAgIHRyZWVbbiAqIDIgKyAxXSA9IGJpdHM7CiAgICAgICAgICBpZiAobiA+IG1heF9jb2RlKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgcy5ibF9jb3VudFtiaXRzXSsrOwogICAgICAgICAgeGJpdHMgPSAwOwogICAgICAgICAgaWYgKG4gPj0gYmFzZSkgewogICAgICAgICAgICB4Yml0cyA9IGV4dHJhW24gLSBiYXNlXTsKICAgICAgICAgIH0KICAgICAgICAgIGYgPSB0cmVlW24gKiAyXTsKICAgICAgICAgIHMub3B0X2xlbiArPSBmICogKGJpdHMgKyB4Yml0cyk7CiAgICAgICAgICBpZiAoaGFzX3N0cmVlKSB7CiAgICAgICAgICAgIHMuc3RhdGljX2xlbiArPSBmICogKHN0cmVlW24gKiAyICsgMV0gKyB4Yml0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvdmVyZmxvdyA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBkbyB7CiAgICAgICAgICBiaXRzID0gbWF4X2xlbmd0aCAtIDE7CiAgICAgICAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgewogICAgICAgICAgICBiaXRzLS07CiAgICAgICAgICB9CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHNdLS07CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHMgKyAxXSArPSAyOwogICAgICAgICAgcy5ibF9jb3VudFttYXhfbGVuZ3RoXS0tOwogICAgICAgICAgb3ZlcmZsb3cgLT0gMjsKICAgICAgICB9IHdoaWxlIChvdmVyZmxvdyA+IDApOwogICAgICAgIGZvciAoYml0cyA9IG1heF9sZW5ndGg7IGJpdHMgIT09IDA7IGJpdHMtLSkgewogICAgICAgICAgbiA9IHMuYmxfY291bnRbYml0c107CiAgICAgICAgICB3aGlsZSAobiAhPT0gMCkgewogICAgICAgICAgICBtID0gcy5oZWFwWy0taF07CiAgICAgICAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHJlZVttICogMiArIDFdICE9PSBiaXRzKSB7CiAgICAgICAgICAgICAgcy5vcHRfbGVuICs9IChiaXRzIC0gdHJlZVttICogMiArIDFdKSAqIHRyZWVbbSAqIDJdOwogICAgICAgICAgICAgIHRyZWVbbSAqIDIgKyAxXSA9IGJpdHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbi0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KSB7CiAgICAgICAgdmFyIG5leHRfY29kZSA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOwogICAgICAgIHZhciBjb2RlID0gMDsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgbjsKICAgICAgICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgICAgICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSBjb2RlICsgYmxfY291bnRbYml0cyAtIDFdIDw8IDE7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgICAgICAgdmFyIGxlbiA9IHRyZWVbbiAqIDIgKyAxXTsKICAgICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB0cmVlW24gKiAyXSA9IGJpX3JldmVyc2UobmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdHJfc3RhdGljX2luaXQoKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIGxlbmd0aDsKICAgICAgICB2YXIgY29kZTsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTsKICAgICAgICBsZW5ndGggPSAwOwogICAgICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHsKICAgICAgICAgIGJhc2VfbGVuZ3RoW2NvZGVdID0gbGVuZ3RoOwogICAgICAgICAgZm9yIChuID0gMDsgbiA8IDEgPDwgZXh0cmFfbGJpdHNbY29kZV07IG4rKykgewogICAgICAgICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoKytdID0gY29kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX2xlbmd0aF9jb2RlW2xlbmd0aCAtIDFdID0gY29kZTsKICAgICAgICBkaXN0ID0gMDsKICAgICAgICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgMTY7IGNvZGUrKykgewogICAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDsKICAgICAgICAgIGZvciAobiA9IDA7IG4gPCAxIDw8IGV4dHJhX2RiaXRzW2NvZGVdOyBuKyspIHsKICAgICAgICAgICAgX2Rpc3RfY29kZVtkaXN0KytdID0gY29kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGlzdCA+Pj0gNzsKICAgICAgICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykgewogICAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdCA8PCA3OwogICAgICAgICAgZm9yIChuID0gMDsgbiA8IDEgPDwgZXh0cmFfZGJpdHNbY29kZV0gLSA3OyBuKyspIHsKICAgICAgICAgICAgX2Rpc3RfY29kZVsyNTYgKyBkaXN0KytdID0gY29kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgICBibF9jb3VudFtiaXRzXSA9IDA7CiAgICAgICAgfQogICAgICAgIG4gPSAwOwogICAgICAgIHdoaWxlIChuIDw9IDE0MykgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA4OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbOF0rKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4gPD0gMjU1KSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDk7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs5XSsrOwogICAgICAgIH0KICAgICAgICB3aGlsZSAobiA8PSAyNzkpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gNzsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzddKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChuIDw9IDI4NykgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA4OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbOF0rKzsKICAgICAgICB9CiAgICAgICAgZ2VuX2NvZGVzKHN0YXRpY19sdHJlZSwgTF9DT0RFUyArIDEsIGJsX2NvdW50KTsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzdGF0aWNfZHRyZWVbbiAqIDIgKyAxXSA9IDU7CiAgICAgICAgICBzdGF0aWNfZHRyZWVbbiAqIDJdID0gYmlfcmV2ZXJzZShuLCA1KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljX2xfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfbHRyZWUsIGV4dHJhX2xiaXRzLCBMSVRFUkFMUyArIDEsIExfQ09ERVMsIE1BWF9CSVRTKTsKICAgICAgICBzdGF0aWNfZF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMsIDAsIERfQ09ERVMsIE1BWF9CSVRTKTsKICAgICAgICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgQkxfQ09ERVMsIE1BWF9CTF9CSVRTKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbml0X2Jsb2NrKHMpIHsKICAgICAgICB2YXIgbjsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzLmR5bl9sdHJlZVtuICogMl0gPSAwOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzLmR5bl9kdHJlZVtuICogMl0gPSAwOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDwgQkxfQ09ERVM7IG4rKykgewogICAgICAgICAgcy5ibF90cmVlW24gKiAyXSA9IDA7CiAgICAgICAgfQogICAgICAgIHMuZHluX2x0cmVlW0VORF9CTE9DSyAqIDJdID0gMTsKICAgICAgICBzLm9wdF9sZW4gPSBzLnN0YXRpY19sZW4gPSAwOwogICAgICAgIHMubGFzdF9saXQgPSBzLm1hdGNoZXMgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJpX3dpbmR1cChzKSB7CiAgICAgICAgaWYgKHMuYmlfdmFsaWQgPiA4KSB7CiAgICAgICAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgICAgIH0gZWxzZSBpZiAocy5iaV92YWxpZCA+IDApIHsKICAgICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWY7CiAgICAgICAgfQogICAgICAgIHMuYmlfYnVmID0gMDsKICAgICAgICBzLmJpX3ZhbGlkID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBjb3B5X2Jsb2NrKHMsIGJ1ZiwgbGVuLCBoZWFkZXIpIHsKICAgICAgICBiaV93aW5kdXAocyk7CiAgICAgICAgaWYgKGhlYWRlcikgewogICAgICAgICAgcHV0X3Nob3J0KHMsIGxlbik7CiAgICAgICAgICBwdXRfc2hvcnQocywgfmxlbik7CiAgICAgICAgfQogICAgICAgIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTsKICAgICAgICBzLnBlbmRpbmcgKz0gbGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIHsKICAgICAgICB2YXIgX24yID0gbiAqIDI7CiAgICAgICAgdmFyIF9tMiA9IG0gKiAyOwogICAgICAgIHJldHVybiB0cmVlW19uMl0gPCB0cmVlW19tMl0gfHwgdHJlZVtfbjJdID09PSB0cmVlW19tMl0gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHFkb3duaGVhcChzLCB0cmVlLCBrKSB7CiAgICAgICAgdmFyIHYgPSBzLmhlYXBba107CiAgICAgICAgdmFyIGogPSBrIDw8IDE7CiAgICAgICAgd2hpbGUgKGogPD0gcy5oZWFwX2xlbikgewogICAgICAgICAgaWYgKGogPCBzLmhlYXBfbGVuICYmIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkgewogICAgICAgICAgICBqKys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdOwogICAgICAgICAgayA9IGo7CiAgICAgICAgICBqIDw8PSAxOwogICAgICAgIH0KICAgICAgICBzLmhlYXBba10gPSB2OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNvbXByZXNzX2Jsb2NrKHMsIGx0cmVlLCBkdHJlZSkgewogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBsYzsKICAgICAgICB2YXIgbHggPSAwOwogICAgICAgIHZhciBjb2RlOwogICAgICAgIHZhciBleHRyYTsKICAgICAgICBpZiAocy5sYXN0X2xpdCAhPT0gMCkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBkaXN0ID0gcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgbHggKiAyXSA8PCA4IHwgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgbHggKiAyICsgMV07CiAgICAgICAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdOwogICAgICAgICAgICBseCsrOwogICAgICAgICAgICBpZiAoZGlzdCA9PT0gMCkgewogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBsYywgbHRyZWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdOwogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjb2RlICsgTElURVJBTFMgKyAxLCBsdHJlZSk7CiAgICAgICAgICAgICAgZXh0cmEgPSBleHRyYV9sYml0c1tjb2RlXTsKICAgICAgICAgICAgICBpZiAoZXh0cmEgIT09IDApIHsKICAgICAgICAgICAgICAgIGxjIC09IGJhc2VfbGVuZ3RoW2NvZGVdOwogICAgICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGxjLCBleHRyYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRpc3QtLTsKICAgICAgICAgICAgICBjb2RlID0gZF9jb2RlKGRpc3QpOwogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjb2RlLCBkdHJlZSk7CiAgICAgICAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTsKICAgICAgICAgICAgICBpZiAoZXh0cmEgIT09IDApIHsKICAgICAgICAgICAgICAgIGRpc3QgLT0gYmFzZV9kaXN0W2NvZGVdOwogICAgICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGRpc3QsIGV4dHJhKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gd2hpbGUgKGx4IDwgcy5sYXN0X2xpdCk7CiAgICAgICAgfQogICAgICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBidWlsZF90cmVlKHMsIGRlc2MpIHsKICAgICAgICB2YXIgdHJlZSA9IGRlc2MuZHluX3RyZWU7CiAgICAgICAgdmFyIHN0cmVlID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7CiAgICAgICAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTsKICAgICAgICB2YXIgZWxlbXMgPSBkZXNjLnN0YXRfZGVzYy5lbGVtczsKICAgICAgICB2YXIgbiwgbTsKICAgICAgICB2YXIgbWF4X2NvZGUgPSAtMTsKICAgICAgICB2YXIgbm9kZTsKICAgICAgICBzLmhlYXBfbGVuID0gMDsKICAgICAgICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFOwogICAgICAgIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7CiAgICAgICAgICBpZiAodHJlZVtuICogMl0gIT09IDApIHsKICAgICAgICAgICAgcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA9IG47CiAgICAgICAgICAgIHMuZGVwdGhbbl0gPSAwOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJlZVtuICogMiArIDFdID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2hpbGUgKHMuaGVhcF9sZW4gPCAyKSB7CiAgICAgICAgICBub2RlID0gcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMDsKICAgICAgICAgIHRyZWVbbm9kZSAqIDJdID0gMTsKICAgICAgICAgIHMuZGVwdGhbbm9kZV0gPSAwOwogICAgICAgICAgcy5vcHRfbGVuLS07CiAgICAgICAgICBpZiAoaGFzX3N0cmVlKSB7CiAgICAgICAgICAgIHMuc3RhdGljX2xlbiAtPSBzdHJlZVtub2RlICogMiArIDFdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZXNjLm1heF9jb2RlID0gbWF4X2NvZGU7CiAgICAgICAgZm9yIChuID0gcy5oZWFwX2xlbiA+PiAxOyBuID49IDE7IG4tLSkgewogICAgICAgICAgcHFkb3duaGVhcChzLCB0cmVlLCBuKTsKICAgICAgICB9CiAgICAgICAgbm9kZSA9IGVsZW1zOwogICAgICAgIGRvIHsKICAgICAgICAgIG4gPSBzLmhlYXBbMV07CiAgICAgICAgICBzLmhlYXBbMV0gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTsKICAgICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwgMSk7CiAgICAgICAgICBtID0gcy5oZWFwWzFdOwogICAgICAgICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOwogICAgICAgICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBtOwogICAgICAgICAgdHJlZVtub2RlICogMl0gPSB0cmVlW24gKiAyXSArIHRyZWVbbSAqIDJdOwogICAgICAgICAgcy5kZXB0aFtub2RlXSA9IChzLmRlcHRoW25dID49IHMuZGVwdGhbbV0gPyBzLmRlcHRoW25dIDogcy5kZXB0aFttXSkgKyAxOwogICAgICAgICAgdHJlZVtuICogMiArIDFdID0gdHJlZVttICogMiArIDFdID0gbm9kZTsKICAgICAgICAgIHMuaGVhcFsxXSA9IG5vZGUrKzsKICAgICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwgMSk7CiAgICAgICAgfSB3aGlsZSAocy5oZWFwX2xlbiA+PSAyKTsKICAgICAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IHMuaGVhcFsxXTsKICAgICAgICBnZW5fYml0bGVuKHMsIGRlc2MpOwogICAgICAgIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgcy5ibF9jb3VudCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2Nhbl90cmVlKHMsIHRyZWUsIG1heF9jb2RlKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIHByZXZsZW4gPSAtMTsKICAgICAgICB2YXIgY3VybGVuOwogICAgICAgIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdOwogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgdmFyIG1heF9jb3VudCA9IDc7CiAgICAgICAgdmFyIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgfQogICAgICAgIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0gPSA2NTUzNTsKICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICAgIGN1cmxlbiA9IG5leHRsZW47CiAgICAgICAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdOwogICAgICAgICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkgewogICAgICAgICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0gKz0gY291bnQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkgewogICAgICAgICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7CiAgICAgICAgICAgICAgcy5ibF90cmVlW2N1cmxlbiAqIDJdKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcy5ibF90cmVlW1JFUF8zXzYgKiAyXSsrOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkgewogICAgICAgICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuYmxfdHJlZVtSRVBaXzExXzEzOCAqIDJdKys7CiAgICAgICAgICB9CiAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgICBwcmV2bGVuID0gY3VybGVuOwogICAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNjsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDc7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfdHJlZShzLCB0cmVlLCBtYXhfY29kZSkgewogICAgICAgIHZhciBuOwogICAgICAgIHZhciBwcmV2bGVuID0gLTE7CiAgICAgICAgdmFyIGN1cmxlbjsKICAgICAgICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXTsKICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgIHZhciBtYXhfY291bnQgPSA3OwogICAgICAgIHZhciBtaW5fY291bnQgPSA0OwogICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICAgIGN1cmxlbiA9IG5leHRsZW47CiAgICAgICAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdOwogICAgICAgICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsKICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3VudCAhPT0gMCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkgewogICAgICAgICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsKICAgICAgICAgICAgICBjb3VudC0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpOwogICAgICAgICAgICBzZW5kX2JpdHMocywgY291bnQgLSAzLCAyKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHsKICAgICAgICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfM18xMCwgcy5ibF90cmVlKTsKICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQWl8xMV8xMzgsIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDExLCA3KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgIHByZXZsZW4gPSBjdXJsZW47CiAgICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBtYXhfY291bnQgPSA2OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNzsKICAgICAgICAgICAgbWluX2NvdW50ID0gNDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYnVpbGRfYmxfdHJlZShzKSB7CiAgICAgICAgdmFyIG1heF9ibGluZGV4OwogICAgICAgIHNjYW5fdHJlZShzLCBzLmR5bl9sdHJlZSwgcy5sX2Rlc2MubWF4X2NvZGUpOwogICAgICAgIHNjYW5fdHJlZShzLCBzLmR5bl9kdHJlZSwgcy5kX2Rlc2MubWF4X2NvZGUpOwogICAgICAgIGJ1aWxkX3RyZWUocywgcy5ibF9kZXNjKTsKICAgICAgICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7CiAgICAgICAgICBpZiAocy5ibF90cmVlW2JsX29yZGVyW21heF9ibGluZGV4XSAqIDIgKyAxXSAhPT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5vcHRfbGVuICs9IDMgKiAobWF4X2JsaW5kZXggKyAxKSArIDUgKyA1ICsgNDsKICAgICAgICByZXR1cm4gbWF4X2JsaW5kZXg7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF9hbGxfdHJlZXMocywgbGNvZGVzLCBkY29kZXMsIGJsY29kZXMpIHsKICAgICAgICB2YXIgcmFuazsKICAgICAgICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsKICAgICAgICBzZW5kX2JpdHMocywgZGNvZGVzIC0gMSwgNSk7CiAgICAgICAgc2VuZF9iaXRzKHMsIGJsY29kZXMgLSA0LCA0KTsKICAgICAgICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7CiAgICAgICAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLCAzKTsKICAgICAgICB9CiAgICAgICAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsKICAgICAgICBzZW5kX3RyZWUocywgcy5keW5fZHRyZWUsIGRjb2RlcyAtIDEpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRldGVjdF9kYXRhX3R5cGUocykgewogICAgICAgIHZhciBibGFja19tYXNrID0gNDA5MzYyNDQ0NzsKICAgICAgICB2YXIgbjsKICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyssIGJsYWNrX21hc2sgPj4+PSAxKSB7CiAgICAgICAgICBpZiAoYmxhY2tfbWFzayAmIDEgJiYgcy5keW5fbHRyZWVbbiAqIDJdICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBaX0JJTkFSWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXSAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdICE9PSAwIHx8IHMuZHluX2x0cmVlWzEzICogMl0gIT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1RFWFQ7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDMyOyBuIDwgTElURVJBTFM7IG4rKykgewogICAgICAgICAgaWYgKHMuZHluX2x0cmVlW24gKiAyXSAhPT0gMCkgewogICAgICAgICAgICByZXR1cm4gWl9URVhUOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gWl9CSU5BUlk7CiAgICAgIH0KICAgICAgdmFyIHN0YXRpY19pbml0X2RvbmUgPSBmYWxzZTsKICAgICAgZnVuY3Rpb24gX3RyX2luaXQocykgewogICAgICAgIGlmICghc3RhdGljX2luaXRfZG9uZSkgewogICAgICAgICAgdHJfc3RhdGljX2luaXQoKTsKICAgICAgICAgIHN0YXRpY19pbml0X2RvbmUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBzLmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7CiAgICAgICAgcy5kX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5keW5fZHRyZWUsIHN0YXRpY19kX2Rlc2MpOwogICAgICAgIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTsKICAgICAgICBzLmJpX2J1ZiA9IDA7CiAgICAgICAgcy5iaV92YWxpZCA9IDA7CiAgICAgICAgaW5pdF9ibG9jayhzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkgewogICAgICAgIHNlbmRfYml0cyhzLCAoU1RPUkVEX0JMT0NLIDw8IDEpICsgKGxhc3QgPyAxIDogMCksIDMpOwogICAgICAgIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfYWxpZ24ocykgewogICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVMgPDwgMSwgMyk7CiAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTsKICAgICAgICBiaV9mbHVzaChzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KSB7CiAgICAgICAgdmFyIG9wdF9sZW5iLCBzdGF0aWNfbGVuYjsKICAgICAgICB2YXIgbWF4X2JsaW5kZXggPSAwOwogICAgICAgIGlmIChzLmxldmVsID4gMCkgewogICAgICAgICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikgewogICAgICAgICAgICBzLnN0cm0uZGF0YV90eXBlID0gZGV0ZWN0X2RhdGFfdHlwZShzKTsKICAgICAgICAgIH0KICAgICAgICAgIGJ1aWxkX3RyZWUocywgcy5sX2Rlc2MpOwogICAgICAgICAgYnVpbGRfdHJlZShzLCBzLmRfZGVzYyk7CiAgICAgICAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7CiAgICAgICAgICBvcHRfbGVuYiA9IHMub3B0X2xlbiArIDMgKyA3ID4+PiAzOwogICAgICAgICAgc3RhdGljX2xlbmIgPSBzLnN0YXRpY19sZW4gKyAzICsgNyA+Pj4gMzsKICAgICAgICAgIGlmIChzdGF0aWNfbGVuYiA8PSBvcHRfbGVuYikgewogICAgICAgICAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iID0gc3RvcmVkX2xlbiArIDU7CiAgICAgICAgfQogICAgICAgIGlmIChzdG9yZWRfbGVuICsgNCA8PSBvcHRfbGVuYiAmJiBidWYgIT09IC0xKSB7CiAgICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCk7CiAgICAgICAgfSBlbHNlIGlmIChzLnN0cmF0ZWd5ID09PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09PSBvcHRfbGVuYikgewogICAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVMgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7CiAgICAgICAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRfYml0cyhzLCAoRFlOX1RSRUVTIDw8IDEpICsgKGxhc3QgPyAxIDogMCksIDMpOwogICAgICAgICAgc2VuZF9hbGxfdHJlZXMocywgcy5sX2Rlc2MubWF4X2NvZGUgKyAxLCBzLmRfZGVzYy5tYXhfY29kZSArIDEsIG1heF9ibGluZGV4ICsgMSk7CiAgICAgICAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpOwogICAgICAgIH0KICAgICAgICBpbml0X2Jsb2NrKHMpOwogICAgICAgIGlmIChsYXN0KSB7CiAgICAgICAgICBiaV93aW5kdXAocyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl90YWxseShzLCBkaXN0LCBsYykgewogICAgICAgIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSA9IGRpc3QgPj4+IDggJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgcy5sYXN0X2xpdCAqIDIgKyAxXSA9IGRpc3QgJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDI1NTsKICAgICAgICBzLmxhc3RfbGl0Kys7CiAgICAgICAgaWYgKGRpc3QgPT09IDApIHsKICAgICAgICAgIHMuZHluX2x0cmVlW2xjICogMl0rKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcy5tYXRjaGVzKys7CiAgICAgICAgICBkaXN0LS07CiAgICAgICAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXSArIExJVEVSQUxTICsgMSkgKiAyXSsrOwogICAgICAgICAgcy5keW5fZHRyZWVbZF9jb2RlKGRpc3QpICogMl0rKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMubGFzdF9saXQgPT09IHMubGl0X2J1ZnNpemUgLSAxOwogICAgICB9CiAgICAgIGV4cG9ydHMyLl90cl9pbml0ID0gX3RyX2luaXQ7CiAgICAgIGV4cG9ydHMyLl90cl9zdG9yZWRfYmxvY2sgPSBfdHJfc3RvcmVkX2Jsb2NrOwogICAgICBleHBvcnRzMi5fdHJfZmx1c2hfYmxvY2sgPSBfdHJfZmx1c2hfYmxvY2s7CiAgICAgIGV4cG9ydHMyLl90cl90YWxseSA9IF90cl90YWxseTsKICAgICAgZXhwb3J0czIuX3RyX2FsaWduID0gX3RyX2FsaWduOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcwogIHZhciByZXF1aXJlX2FkbGVyMzIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIGFkbGVyMzIoYWRsZXIsIGJ1ZiwgbGVuLCBwb3MpIHsKICAgICAgICB2YXIgczEgPSBhZGxlciAmIDY1NTM1IHwgMCwgczIgPSBhZGxlciA+Pj4gMTYgJiA2NTUzNSB8IDAsIG4gPSAwOwogICAgICAgIHdoaWxlIChsZW4gIT09IDApIHsKICAgICAgICAgIG4gPSBsZW4gPiAyZTMgPyAyZTMgOiBsZW47CiAgICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgczEgPSBzMSArIGJ1Zltwb3MrK10gfCAwOwogICAgICAgICAgICBzMiA9IHMyICsgczEgfCAwOwogICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgIHMxICU9IDY1NTIxOwogICAgICAgICAgczIgJT0gNjU1MjE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzMSB8IHMyIDw8IDE2IHwgMDsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBhZGxlcjMyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY3JjMzIuanMKICB2YXIgcmVxdWlyZV9jcmMzMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIG1ha2VUYWJsZSgpIHsKICAgICAgICB2YXIgYywgdGFibGUgPSBbXTsKICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICBjID0gbjsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgODsgaysrKSB7CiAgICAgICAgICAgIGMgPSBjICYgMSA/IDM5ODgyOTIzODQgXiBjID4+PiAxIDogYyA+Pj4gMTsKICAgICAgICAgIH0KICAgICAgICAgIHRhYmxlW25dID0gYzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgICB9CiAgICAgIHZhciBjcmNUYWJsZSA9IG1ha2VUYWJsZSgpOwogICAgICBmdW5jdGlvbiBjcmMzMihjcmMsIGJ1ZiwgbGVuLCBwb3MpIHsKICAgICAgICB2YXIgdCA9IGNyY1RhYmxlLCBlbmQgPSBwb3MgKyBsZW47CiAgICAgICAgY3JjIF49IC0xOwogICAgICAgIGZvciAodmFyIGkgPSBwb3M7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgY3JjID0gY3JjID4+PiA4IF4gdFsoY3JjIF4gYnVmW2ldKSAmIDI1NV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjcmMgXiAtMTsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBjcmMzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzCiAgdmFyIHJlcXVpcmVfbWVzc2FnZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSB7CiAgICAgICAgMjogIm5lZWQgZGljdGlvbmFyeSIsCiAgICAgICAgMTogInN0cmVhbSBlbmQiLAogICAgICAgIDA6ICIiLAogICAgICAgICItMSI6ICJmaWxlIGVycm9yIiwKICAgICAgICAiLTIiOiAic3RyZWFtIGVycm9yIiwKICAgICAgICAiLTMiOiAiZGF0YSBlcnJvciIsCiAgICAgICAgIi00IjogImluc3VmZmljaWVudCBtZW1vcnkiLAogICAgICAgICItNSI6ICJidWZmZXIgZXJyb3IiLAogICAgICAgICItNiI6ICJpbmNvbXBhdGlibGUgdmVyc2lvbiIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMKICB2YXIgcmVxdWlyZV9kZWZsYXRlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgdHJlZXMgPSByZXF1aXJlX3RyZWVzKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMiA9IHJlcXVpcmVfY3JjMzIoKTsKICAgICAgdmFyIG1zZyA9IHJlcXVpcmVfbWVzc2FnZXMoKTsKICAgICAgdmFyIFpfTk9fRkxVU0ggPSAwOwogICAgICB2YXIgWl9QQVJUSUFMX0ZMVVNIID0gMTsKICAgICAgdmFyIFpfRlVMTF9GTFVTSCA9IDM7CiAgICAgIHZhciBaX0ZJTklTSCA9IDQ7CiAgICAgIHZhciBaX0JMT0NLID0gNTsKICAgICAgdmFyIFpfT0sgPSAwOwogICAgICB2YXIgWl9TVFJFQU1fRU5EID0gMTsKICAgICAgdmFyIFpfU1RSRUFNX0VSUk9SID0gLTI7CiAgICAgIHZhciBaX0RBVEFfRVJST1IgPSAtMzsKICAgICAgdmFyIFpfQlVGX0VSUk9SID0gLTU7CiAgICAgIHZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTsKICAgICAgdmFyIFpfRklMVEVSRUQgPSAxOwogICAgICB2YXIgWl9IVUZGTUFOX09OTFkgPSAyOwogICAgICB2YXIgWl9STEUgPSAzOwogICAgICB2YXIgWl9GSVhFRCA9IDQ7CiAgICAgIHZhciBaX0RFRkFVTFRfU1RSQVRFR1kgPSAwOwogICAgICB2YXIgWl9VTktOT1dOID0gMjsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICB2YXIgTUFYX01FTV9MRVZFTCA9IDk7CiAgICAgIHZhciBNQVhfV0JJVFMgPSAxNTsKICAgICAgdmFyIERFRl9NRU1fTEVWRUwgPSA4OwogICAgICB2YXIgTEVOR1RIX0NPREVTID0gMjk7CiAgICAgIHZhciBMSVRFUkFMUyA9IDI1NjsKICAgICAgdmFyIExfQ09ERVMgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7CiAgICAgIHZhciBEX0NPREVTID0gMzA7CiAgICAgIHZhciBCTF9DT0RFUyA9IDE5OwogICAgICB2YXIgSEVBUF9TSVpFID0gMiAqIExfQ09ERVMgKyAxOwogICAgICB2YXIgTUFYX0JJVFMgPSAxNTsKICAgICAgdmFyIE1JTl9NQVRDSCA9IDM7CiAgICAgIHZhciBNQVhfTUFUQ0ggPSAyNTg7CiAgICAgIHZhciBNSU5fTE9PS0FIRUFEID0gTUFYX01BVENIICsgTUlOX01BVENIICsgMTsKICAgICAgdmFyIFBSRVNFVF9ESUNUID0gMzI7CiAgICAgIHZhciBJTklUX1NUQVRFID0gNDI7CiAgICAgIHZhciBFWFRSQV9TVEFURSA9IDY5OwogICAgICB2YXIgTkFNRV9TVEFURSA9IDczOwogICAgICB2YXIgQ09NTUVOVF9TVEFURSA9IDkxOwogICAgICB2YXIgSENSQ19TVEFURSA9IDEwMzsKICAgICAgdmFyIEJVU1lfU1RBVEUgPSAxMTM7CiAgICAgIHZhciBGSU5JU0hfU1RBVEUgPSA2NjY7CiAgICAgIHZhciBCU19ORUVEX01PUkUgPSAxOwogICAgICB2YXIgQlNfQkxPQ0tfRE9ORSA9IDI7CiAgICAgIHZhciBCU19GSU5JU0hfU1RBUlRFRCA9IDM7CiAgICAgIHZhciBCU19GSU5JU0hfRE9ORSA9IDQ7CiAgICAgIHZhciBPU19DT0RFID0gMzsKICAgICAgZnVuY3Rpb24gZXJyKHN0cm0sIGVycm9yQ29kZSkgewogICAgICAgIHN0cm0ubXNnID0gbXNnW2Vycm9yQ29kZV07CiAgICAgICAgcmV0dXJuIGVycm9yQ29kZTsKICAgICAgfQogICAgICBmdW5jdGlvbiByYW5rKGYpIHsKICAgICAgICByZXR1cm4gKGYgPDwgMSkgLSAoZiA+IDQgPyA5IDogMCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gemVybyhidWYpIHsKICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1sZW4gPj0gMCkgewogICAgICAgICAgYnVmW2xlbl0gPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBmbHVzaF9wZW5kaW5nKHN0cm0pIHsKICAgICAgICB2YXIgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgdmFyIGxlbiA9IHMucGVuZGluZzsKICAgICAgICBpZiAobGVuID4gc3RybS5hdmFpbF9vdXQpIHsKICAgICAgICAgIGxlbiA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIH0KICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmdfb3V0LCBsZW4sIHN0cm0ubmV4dF9vdXQpOwogICAgICAgIHN0cm0ubmV4dF9vdXQgKz0gbGVuOwogICAgICAgIHMucGVuZGluZ19vdXQgKz0gbGVuOwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IGxlbjsKICAgICAgICBzdHJtLmF2YWlsX291dCAtPSBsZW47CiAgICAgICAgcy5wZW5kaW5nIC09IGxlbjsKICAgICAgICBpZiAocy5wZW5kaW5nID09PSAwKSB7CiAgICAgICAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmx1c2hfYmxvY2tfb25seShzLCBsYXN0KSB7CiAgICAgICAgdHJlZXMuX3RyX2ZsdXNoX2Jsb2NrKHMsIHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSwgcy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQsIGxhc3QpOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0OwogICAgICAgIGZsdXNoX3BlbmRpbmcocy5zdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwdXRfYnl0ZShzLCBiKSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHB1dFNob3J0TVNCKHMsIGIpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGIgPj4+IDggJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiICYgMjU1OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJlYWRfYnVmKHN0cm0sIGJ1Ziwgc3RhcnQsIHNpemUpIHsKICAgICAgICB2YXIgbGVuID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBpZiAobGVuID4gc2l6ZSkgewogICAgICAgICAgbGVuID0gc2l6ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIHN0cm0uYXZhaWxfaW4gLT0gbGVuOwogICAgICAgIHV0aWxzLmFycmF5U2V0KGJ1Ziwgc3RybS5pbnB1dCwgc3RybS5uZXh0X2luLCBsZW4sIHN0YXJ0KTsKICAgICAgICBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAxKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpOwogICAgICAgIH0gZWxzZSBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAyKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X2luICs9IGxlbjsKICAgICAgICBzdHJtLnRvdGFsX2luICs9IGxlbjsKICAgICAgICByZXR1cm4gbGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKSB7CiAgICAgICAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsKICAgICAgICB2YXIgc2NhbiA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgdmFyIG1hdGNoOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIGJlc3RfbGVuID0gcy5wcmV2X2xlbmd0aDsKICAgICAgICB2YXIgbmljZV9tYXRjaCA9IHMubmljZV9tYXRjaDsKICAgICAgICB2YXIgbGltaXQgPSBzLnN0cnN0YXJ0ID4gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEID8gcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIHZhciB3bWFzayA9IHMud19tYXNrOwogICAgICAgIHZhciBwcmV2ID0gcy5wcmV2OwogICAgICAgIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIOwogICAgICAgIHZhciBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgIHZhciBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBzLmdvb2RfbWF0Y2gpIHsKICAgICAgICAgIGNoYWluX2xlbmd0aCA+Pj0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgbmljZV9tYXRjaCA9IHMubG9va2FoZWFkOwogICAgICAgIH0KICAgICAgICBkbyB7CiAgICAgICAgICBtYXRjaCA9IGN1cl9tYXRjaDsKICAgICAgICAgIGlmIChfd2luW21hdGNoICsgYmVzdF9sZW5dICE9PSBzY2FuX2VuZCB8fCBfd2luW21hdGNoICsgYmVzdF9sZW4gLSAxXSAhPT0gc2Nhbl9lbmQxIHx8IF93aW5bbWF0Y2hdICE9PSBfd2luW3NjYW5dIHx8IF93aW5bKyttYXRjaF0gIT09IF93aW5bc2NhbiArIDFdKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc2NhbiArPSAyOwogICAgICAgICAgbWF0Y2grKzsKICAgICAgICAgIGRvIHsKICAgICAgICAgIH0gd2hpbGUgKF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAgICAgICAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIOwogICAgICAgICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CiAgICAgICAgICAgIGJlc3RfbGVuID0gbGVuOwogICAgICAgICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgICAgICBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApOwogICAgICAgIGlmIChiZXN0X2xlbiA8PSBzLmxvb2thaGVhZCkgewogICAgICAgICAgcmV0dXJuIGJlc3RfbGVuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5sb29rYWhlYWQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmlsbF93aW5kb3cocykgewogICAgICAgIHZhciBfd19zaXplID0gcy53X3NpemU7CiAgICAgICAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjsKICAgICAgICBkbyB7CiAgICAgICAgICBtb3JlID0gcy53aW5kb3dfc2l6ZSAtIHMubG9va2FoZWFkIC0gcy5zdHJzdGFydDsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHMud2luZG93LCBzLndpbmRvdywgX3dfc2l6ZSwgX3dfc2l6ZSwgMCk7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7CiAgICAgICAgICAgIG4gPSBzLmhhc2hfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5oZWFkWy0tcF07CiAgICAgICAgICAgICAgcy5oZWFkW3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBuID0gX3dfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5wcmV2Wy0tcF07CiAgICAgICAgICAgICAgcy5wcmV2W3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBtb3JlICs9IF93X3NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX2luID09PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbiA9IHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCwgbW9yZSk7CiAgICAgICAgICBzLmxvb2thaGVhZCArPSBuOwogICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDsKICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3N0cl07CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICAgICAgICAgIHN0cisrOwogICAgICAgICAgICAgIHMuaW5zZXJ0LS07CiAgICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIG1heF9ibG9ja19zaXplID0gNjU1MzU7CiAgICAgICAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewogICAgICAgICAgbWF4X2Jsb2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1OwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDAgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7CiAgICAgICAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDsKICAgICAgICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHsKICAgICAgICB2YXIgaGFzaF9oZWFkOwogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaGFzaF9oZWFkID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaGFzaF9oZWFkICE9PSAwICYmIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSBzLm1heF9sYXp5X21hdGNoICYmIHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoLS07CiAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdOwogICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGhhc2hfaGVhZDsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIHZhciBtYXhfaW5zZXJ0OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2hfaGVhZCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgfQogICAgICAgICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgcy5wcmV2X21hdGNoID0gcy5tYXRjaF9zdGFydDsKICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGlmIChoYXNoX2hlYWQgIT09IDAgJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiYgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSBzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmIChzLnN0cmF0ZWd5ID09PSBaX0ZJTFRFUkVEIHx8IHMubWF0Y2hfbGVuZ3RoID09PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2KSkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHsKICAgICAgICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5wcmV2X2xlbmd0aCAtIDE7CiAgICAgICAgICAgIHMucHJldl9sZW5ndGggLT0gMjsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkgewogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5sYXN0X2xpdCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkgewogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgdmFyIHByZXY7CiAgICAgICAgdmFyIHNjYW4sIHN0cmVuZDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHsKICAgICAgICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxOwogICAgICAgICAgICBwcmV2ID0gX3dpbltzY2FuXTsKICAgICAgICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7CiAgICAgICAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBzY2FuIDwgc3RyZW5kKTsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGJmbHVzaDsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTsKICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHsKICAgICAgICB0aGlzLmdvb2RfbGVuZ3RoID0gZ29vZF9sZW5ndGg7CiAgICAgICAgdGhpcy5tYXhfbGF6eSA9IG1heF9sYXp5OwogICAgICAgIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDsKICAgICAgICB0aGlzLm1heF9jaGFpbiA9IG1heF9jaGFpbjsKICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jOwogICAgICB9CiAgICAgIHZhciBjb25maWd1cmF0aW9uX3RhYmxlOwogICAgICBjb25maWd1cmF0aW9uX3RhYmxlID0gWwogICAgICAgIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNiwgMzIsIDMyLCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLAogICAgICAgIG5ldyBDb25maWcoOCwgMTYsIDMyLCAzMiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KQogICAgICBdOwogICAgICBmdW5jdGlvbiBsbV9pbml0KHMpIHsKICAgICAgICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplOwogICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTsKICAgICAgICBzLmdvb2RfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmdvb2RfbGVuZ3RoOwogICAgICAgIHMubmljZV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGg7CiAgICAgICAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47CiAgICAgICAgcy5zdHJzdGFydCA9IDA7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICBzLmluc19oID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBEZWZsYXRlU3RhdGUoKSB7CiAgICAgICAgdGhpcy5zdHJtID0gbnVsbDsKICAgICAgICB0aGlzLnN0YXR1cyA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGw7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmcgPSAwOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5nemhlYWQgPSBudWxsOwogICAgICAgIHRoaXMuZ3ppbmRleCA9IDA7CiAgICAgICAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOwogICAgICAgIHRoaXMubGFzdF9mbHVzaCA9IC0xOwogICAgICAgIHRoaXMud19zaXplID0gMDsKICAgICAgICB0aGlzLndfYml0cyA9IDA7CiAgICAgICAgdGhpcy53X21hc2sgPSAwOwogICAgICAgIHRoaXMud2luZG93ID0gbnVsbDsKICAgICAgICB0aGlzLndpbmRvd19zaXplID0gMDsKICAgICAgICB0aGlzLnByZXYgPSBudWxsOwogICAgICAgIHRoaXMuaGVhZCA9IG51bGw7CiAgICAgICAgdGhpcy5pbnNfaCA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NpemUgPSAwOwogICAgICAgIHRoaXMuaGFzaF9iaXRzID0gMDsKICAgICAgICB0aGlzLmhhc2hfbWFzayA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NoaWZ0ID0gMDsKICAgICAgICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5wcmV2X21hdGNoID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgdGhpcy5zdHJzdGFydCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9zdGFydCA9IDA7CiAgICAgICAgdGhpcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHRoaXMucHJldl9sZW5ndGggPSAwOwogICAgICAgIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5sZXZlbCA9IDA7CiAgICAgICAgdGhpcy5zdHJhdGVneSA9IDA7CiAgICAgICAgdGhpcy5nb29kX21hdGNoID0gMDsKICAgICAgICB0aGlzLm5pY2VfbWF0Y2ggPSAwOwogICAgICAgIHRoaXMuZHluX2x0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KEhFQVBfU0laRSAqIDIpOwogICAgICAgIHRoaXMuZHluX2R0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogRF9DT0RFUyArIDEpICogMik7CiAgICAgICAgdGhpcy5ibF90cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpOwogICAgICAgIHplcm8odGhpcy5keW5fbHRyZWUpOwogICAgICAgIHplcm8odGhpcy5keW5fZHRyZWUpOwogICAgICAgIHplcm8odGhpcy5ibF90cmVlKTsKICAgICAgICB0aGlzLmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5kX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuYmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUyArIDEpOwogICAgICAgIHRoaXMuaGVhcCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOwogICAgICAgIHplcm8odGhpcy5oZWFwKTsKICAgICAgICB0aGlzLmhlYXBfbGVuID0gMDsKICAgICAgICB0aGlzLmhlYXBfbWF4ID0gMDsKICAgICAgICB0aGlzLmRlcHRoID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7CiAgICAgICAgemVybyh0aGlzLmRlcHRoKTsKICAgICAgICB0aGlzLmxfYnVmID0gMDsKICAgICAgICB0aGlzLmxpdF9idWZzaXplID0gMDsKICAgICAgICB0aGlzLmxhc3RfbGl0ID0gMDsKICAgICAgICB0aGlzLmRfYnVmID0gMDsKICAgICAgICB0aGlzLm9wdF9sZW4gPSAwOwogICAgICAgIHRoaXMuc3RhdGljX2xlbiA9IDA7CiAgICAgICAgdGhpcy5tYXRjaGVzID0gMDsKICAgICAgICB0aGlzLmluc2VydCA9IDA7CiAgICAgICAgdGhpcy5iaV9idWYgPSAwOwogICAgICAgIHRoaXMuYmlfdmFsaWQgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkgewogICAgICAgIHZhciBzOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgICAgfQogICAgICAgIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IDA7CiAgICAgICAgc3RybS5kYXRhX3R5cGUgPSBaX1VOS05PV047CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgcy5wZW5kaW5nID0gMDsKICAgICAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICBpZiAocy53cmFwIDwgMCkgewogICAgICAgICAgcy53cmFwID0gLXMud3JhcDsKICAgICAgICB9CiAgICAgICAgcy5zdGF0dXMgPSBzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURTsKICAgICAgICBzdHJtLmFkbGVyID0gcy53cmFwID09PSAyID8gMCA6IDE7CiAgICAgICAgcy5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKICAgICAgICB0cmVlcy5fdHJfaW5pdChzKTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkgewogICAgICAgIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOwogICAgICAgIGlmIChyZXQgPT09IFpfT0spIHsKICAgICAgICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIHsKICAgICAgICBpZiAoIXN0cm0pIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgdmFyIHdyYXAgPSAxOwogICAgICAgIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7CiAgICAgICAgICBsZXZlbCA9IDY7CiAgICAgICAgfQogICAgICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewogICAgICAgICAgd3JhcCA9IDA7CiAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHsKICAgICAgICAgIHdyYXAgPSAyOwogICAgICAgICAgd2luZG93Qml0cyAtPSAxNjsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9PSBaX0RFRkxBVEVEIHx8IHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyA9PT0gOCkgewogICAgICAgICAgd2luZG93Qml0cyA9IDk7CiAgICAgICAgfQogICAgICAgIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpOwogICAgICAgIHN0cm0uc3RhdGUgPSBzOwogICAgICAgIHMuc3RybSA9IHN0cm07CiAgICAgICAgcy53cmFwID0gd3JhcDsKICAgICAgICBzLmd6aGVhZCA9IG51bGw7CiAgICAgICAgcy53X2JpdHMgPSB3aW5kb3dCaXRzOwogICAgICAgIHMud19zaXplID0gMSA8PCBzLndfYml0czsKICAgICAgICBzLndfbWFzayA9IHMud19zaXplIC0gMTsKICAgICAgICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNzsKICAgICAgICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7CiAgICAgICAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7CiAgICAgICAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBNSU5fTUFUQ0gpOwogICAgICAgIHMud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUgKiAyKTsKICAgICAgICBzLmhlYWQgPSBuZXcgdXRpbHMuQnVmMTYocy5oYXNoX3NpemUpOwogICAgICAgIHMucHJldiA9IG5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSk7CiAgICAgICAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgbWVtTGV2ZWwgKyA2OwogICAgICAgIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0OwogICAgICAgIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpOwogICAgICAgIHMuZF9idWYgPSAxICogcy5saXRfYnVmc2l6ZTsKICAgICAgICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7CiAgICAgICAgcy5sZXZlbCA9IGxldmVsOwogICAgICAgIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTsKICAgICAgICBzLm1ldGhvZCA9IG1ldGhvZDsKICAgICAgICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7CiAgICAgICAgcmV0dXJuIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHsKICAgICAgICB2YXIgb2xkX2ZsdXNoLCBzOwogICAgICAgIHZhciBiZWcsIHZhbDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkgewogICAgICAgICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICghc3RybS5vdXRwdXQgfHwgIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCB8fCBzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBzdHJtLmF2YWlsX291dCA9PT0gMCA/IFpfQlVGX0VSUk9SIDogWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzLnN0cm0gPSBzdHJtOwogICAgICAgIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDsKICAgICAgICBzLmxhc3RfZmx1c2ggPSBmbHVzaDsKICAgICAgICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLndyYXAgPT09IDIpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKICAgICAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKICAgICAgICAgICAgcHV0X2J5dGUocywgOCk7CiAgICAgICAgICAgIGlmICghcy5nemhlYWQpIHsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50ZXh0ID8gMSA6IDApICsgKHMuZ3poZWFkLmhjcmMgPyAyIDogMCkgKyAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICsgKCFzLmd6aGVhZC5uYW1lID8gMCA6IDgpICsgKCFzLmd6aGVhZC5jb21tZW50ID8gMCA6IDE2KSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiA4ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDE2ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAyNTUpOwogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5leHRyYSAmJiBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDI1NSk7CiAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nLCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcy5nemluZGV4ID0gMDsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IEVYVFJBX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgaGVhZGVyID0gWl9ERUZMQVRFRCArIChzLndfYml0cyAtIDggPDwgNCkgPDwgODsKICAgICAgICAgICAgdmFyIGxldmVsX2ZsYWdzID0gLTE7CiAgICAgICAgICAgIGlmIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyKSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPCA2KSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxOwogICAgICAgICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHsKICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhlYWRlciB8PSBsZXZlbF9mbGFncyA8PCA2OwogICAgICAgICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgewogICAgICAgICAgICAgIGhlYWRlciB8PSBQUkVTRVRfRElDVDsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIgKz0gMzEgLSBoZWFkZXIgJSAzMTsKICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBoZWFkZXIpOwogICAgICAgICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgewogICAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyICYgNjU1MzUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IEVYVFJBX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuZXh0cmEpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICB3aGlsZSAocy5nemluZGV4IDwgKHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDY1NTM1KSkgewogICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYVtzLmd6aW5kZXhdICYgMjU1KTsKICAgICAgICAgICAgICBzLmd6aW5kZXgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkgewogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gTkFNRV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLm5hbWUpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5uYW1lLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDI1NTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsID09PSAwKSB7CiAgICAgICAgICAgICAgcy5nemluZGV4ID0gMDsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBDT01NRU5UX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuY29tbWVudCkgewogICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgICB2YWwgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMjU1OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YWwgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOwogICAgICAgICAgICB9IHdoaWxlICh2YWwgIT09IDApOwogICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWwgPT09IDApIHsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAgICAgICAgICBpZiAocy5wZW5kaW5nICsgMiA+IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMucGVuZGluZyArIDIgPD0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciA+PiA4ICYgMjU1KTsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gMDsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMucGVuZGluZyAhPT0gMCkgewogICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHJhbmsoZmx1c2gpIDw9IHJhbmsob2xkX2ZsdXNoKSAmJiBmbHVzaCAhPT0gWl9GSU5JU0gpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpOwogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cm0uYXZhaWxfaW4gIT09IDAgfHwgcy5sb29rYWhlYWQgIT09IDAgfHwgZmx1c2ggIT09IFpfTk9fRkxVU0ggJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkgewogICAgICAgICAgdmFyIGJzdGF0ZSA9IHMuc3RyYXRlZ3kgPT09IFpfSFVGRk1BTl9PTkxZID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6IHMuc3RyYXRlZ3kgPT09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDogY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKTsKICAgICAgICAgIGlmIChic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX0RPTkUpIHsKICAgICAgICAgICAgcy5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19ORUVEX01PUkUgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCkgewogICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChic3RhdGUgPT09IEJTX0JMT0NLX0RPTkUpIHsKICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHsKICAgICAgICAgICAgICB0cmVlcy5fdHJfYWxpZ24ocyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsKICAgICAgICAgICAgICB0cmVlcy5fdHJfc3RvcmVkX2Jsb2NrKHMsIDAsIDAsIGZhbHNlKTsKICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkgewogICAgICAgICAgICAgICAgemVybyhzLmhlYWQpOwogICAgICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZmx1c2ggIT09IFpfRklOSVNIKSB7CiAgICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKHMud3JhcCA8PSAwKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRU5EOwogICAgICAgIH0KICAgICAgICBpZiAocy53cmFwID09PSAyKSB7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gOCAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDE2ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gMjQgJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luID4+IDggJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiAxNiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luID4+IDI0ICYgMjU1KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciA+Pj4gMTYpOwogICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDY1NTM1KTsKICAgICAgICB9CiAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICBpZiAocy53cmFwID4gMCkgewogICAgICAgICAgcy53cmFwID0gLXMud3JhcDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMucGVuZGluZyAhPT0gMCA/IFpfT0sgOiBaX1NUUkVBTV9FTkQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKSB7CiAgICAgICAgdmFyIHN0YXR1czsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdHVzID0gc3RybS5zdGF0ZS5zdGF0dXM7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gSU5JVF9TVEFURSAmJiBzdGF0dXMgIT09IEVYVFJBX1NUQVRFICYmIHN0YXR1cyAhPT0gTkFNRV9TVEFURSAmJiBzdGF0dXMgIT09IENPTU1FTlRfU1RBVEUgJiYgc3RhdHVzICE9PSBIQ1JDX1NUQVRFICYmIHN0YXR1cyAhPT0gQlVTWV9TVEFURSAmJiBzdGF0dXMgIT09IEZJTklTSF9TVEFURSkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgICAgfQogICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SKSA6IFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkgewogICAgICAgIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7CiAgICAgICAgdmFyIHM7CiAgICAgICAgdmFyIHN0ciwgbjsKICAgICAgICB2YXIgd3JhcDsKICAgICAgICB2YXIgYXZhaWw7CiAgICAgICAgdmFyIG5leHQ7CiAgICAgICAgdmFyIGlucHV0OwogICAgICAgIHZhciB0bXBEaWN0OwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzID0gc3RybS5zdGF0ZTsKICAgICAgICB3cmFwID0gcy53cmFwOwogICAgICAgIGlmICh3cmFwID09PSAyIHx8IHdyYXAgPT09IDEgJiYgcy5zdGF0dXMgIT09IElOSVRfU1RBVEUgfHwgcy5sb29rYWhlYWQpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgaWYgKHdyYXAgPT09IDEpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApOwogICAgICAgIH0KICAgICAgICBzLndyYXAgPSAwOwogICAgICAgIGlmIChkaWN0TGVuZ3RoID49IHMud19zaXplKSB7CiAgICAgICAgICBpZiAod3JhcCA9PT0gMCkgewogICAgICAgICAgICB6ZXJvKHMuaGVhZCk7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgICAgfQogICAgICAgICAgdG1wRGljdCA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplKTsKICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHRtcERpY3QsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGggLSBzLndfc2l6ZSwgcy53X3NpemUsIDApOwogICAgICAgICAgZGljdGlvbmFyeSA9IHRtcERpY3Q7CiAgICAgICAgICBkaWN0TGVuZ3RoID0gcy53X3NpemU7CiAgICAgICAgfQogICAgICAgIGF2YWlsID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gZGljdExlbmd0aDsKICAgICAgICBzdHJtLm5leHRfaW4gPSAwOwogICAgICAgIHN0cm0uaW5wdXQgPSBkaWN0aW9uYXJ5OwogICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgIHdoaWxlIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgIHN0ciA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICBuID0gcy5sb29rYWhlYWQgLSAoTUlOX01BVENIIC0gMSk7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgcy5wcmV2W3N0ciAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICAgICAgICBzdHIrKzsKICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgICBzLnN0cnN0YXJ0ID0gc3RyOwogICAgICAgICAgcy5sb29rYWhlYWQgPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgfQogICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgcy5pbnNlcnQgPSBzLmxvb2thaGVhZDsKICAgICAgICBzLmxvb2thaGVhZCA9IDA7CiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmlucHV0ID0gaW5wdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGF2YWlsOwogICAgICAgIHMud3JhcCA9IHdyYXA7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZXhwb3J0czIuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDsKICAgICAgZXhwb3J0czIuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyOwogICAgICBleHBvcnRzMi5kZWZsYXRlUmVzZXQgPSBkZWZsYXRlUmVzZXQ7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwOwogICAgICBleHBvcnRzMi5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjsKICAgICAgZXhwb3J0czIuZGVmbGF0ZSA9IGRlZmxhdGU7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kOwogICAgICBleHBvcnRzMi5kZWZsYXRlU2V0RGljdGlvbmFyeSA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5OwogICAgICBleHBvcnRzMi5kZWZsYXRlSW5mbyA9ICJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9zdHJpbmdzLmpzCiAgdmFyIHJlcXVpcmVfc3RyaW5ncyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvc3RyaW5ncy5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBTVFJfQVBQTFlfT0sgPSB0cnVlOwogICAgICB2YXIgU1RSX0FQUExZX1VJQV9PSyA9IHRydWU7CiAgICAgIHRyeSB7CiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBbMF0pOwogICAgICB9IGNhdGNoIChfXykgewogICAgICAgIFNUUl9BUFBMWV9PSyA9IGZhbHNlOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSgxKSk7CiAgICAgIH0gY2F0Y2ggKF9fKSB7CiAgICAgICAgU1RSX0FQUExZX1VJQV9PSyA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBfdXRmOGxlbiA9IG5ldyB1dGlscy5CdWY4KDI1Nik7CiAgICAgIGZvciAocSA9IDA7IHEgPCAyNTY7IHErKykgewogICAgICAgIF91dGY4bGVuW3FdID0gcSA+PSAyNTIgPyA2IDogcSA+PSAyNDggPyA1IDogcSA+PSAyNDAgPyA0IDogcSA+PSAyMjQgPyAzIDogcSA+PSAxOTIgPyAyIDogMTsKICAgICAgfQogICAgICB2YXIgcTsKICAgICAgX3V0ZjhsZW5bMjU0XSA9IF91dGY4bGVuWzI1NF0gPSAxOwogICAgICBleHBvcnRzMi5zdHJpbmcyYnVmID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7CiAgICAgICAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykgewogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICAgIGlmICgoYyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgbV9wb3MgKyAxIDwgc3RyX2xlbikgewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiA2NDUxMikgPT09IDU2MzIwKSB7CiAgICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgLSA1NTI5NiA8PCAxMCkgKyAoYzIgLSA1NjMyMCk7CiAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnVmX2xlbiArPSBjIDwgMTI4ID8gMSA6IGMgPCAyMDQ4ID8gMiA6IGMgPCA2NTUzNiA/IDMgOiA0OwogICAgICAgIH0KICAgICAgICBidWYgPSBuZXcgdXRpbHMuQnVmOChidWZfbGVuKTsKICAgICAgICBmb3IgKGkgPSAwLCBtX3BvcyA9IDA7IGkgPCBidWZfbGVuOyBtX3BvcysrKSB7CiAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpOwogICAgICAgICAgaWYgKChjICYgNjQ1MTIpID09PSA1NTI5NiAmJiBtX3BvcyArIDEgPCBzdHJfbGVuKSB7CiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MgKyAxKTsKICAgICAgICAgICAgaWYgKChjMiAmIDY0NTEyKSA9PT0gNTYzMjApIHsKICAgICAgICAgICAgICBjID0gNjU1MzYgKyAoYyAtIDU1Mjk2IDw8IDEwKSArIChjMiAtIDU2MzIwKTsKICAgICAgICAgICAgICBtX3BvcysrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDEyOCkgewogICAgICAgICAgICBidWZbaSsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTkyIHwgYyA+Pj4gNjsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCA2NTUzNikgewogICAgICAgICAgICBidWZbaSsrXSA9IDIyNCB8IGMgPj4+IDEyOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDYgJiA2MzsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWZbaSsrXSA9IDI0MCB8IGMgPj4+IDE4OwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDEyICYgNjM7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyA+Pj4gNiAmIDYzOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgJiA2MzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYnVmMmJpbnN0cmluZyhidWYsIGxlbikgewogICAgICAgIGlmIChsZW4gPCA2NTUzNCkgewogICAgICAgICAgaWYgKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LIHx8ICFidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX09LKSB7CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0aWxzLnNocmlua0J1ZihidWYsIGxlbikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBleHBvcnRzMi5idWYyYmluc3RyaW5nID0gZnVuY3Rpb24oYnVmKSB7CiAgICAgICAgcmV0dXJuIGJ1ZjJiaW5zdHJpbmcoYnVmLCBidWYubGVuZ3RoKTsKICAgICAgfTsKICAgICAgZXhwb3J0czIuYmluc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHZhciBidWYgPSBuZXcgdXRpbHMuQnVmOChzdHIubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBidWZbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgZXhwb3J0czIuYnVmMnN0cmluZyA9IGZ1bmN0aW9uKGJ1ZiwgbWF4KSB7CiAgICAgICAgdmFyIGksIG91dCwgYywgY19sZW47CiAgICAgICAgdmFyIGxlbiA9IG1heCB8fCBidWYubGVuZ3RoOwogICAgICAgIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTsKICAgICAgICBmb3IgKG91dCA9IDAsIGkgPSAwOyBpIDwgbGVuOyApIHsKICAgICAgICAgIGMgPSBidWZbaSsrXTsKICAgICAgICAgIGlmIChjIDwgMTI4KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY19sZW4gPSBfdXRmOGxlbltjXTsKICAgICAgICAgIGlmIChjX2xlbiA+IDQpIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNjU1MzM7CiAgICAgICAgICAgIGkgKz0gY19sZW4gLSAxOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGMgJj0gY19sZW4gPT09IDIgPyAzMSA6IGNfbGVuID09PSAzID8gMTUgOiA3OwogICAgICAgICAgd2hpbGUgKGNfbGVuID4gMSAmJiBpIDwgbGVuKSB7CiAgICAgICAgICAgIGMgPSBjIDw8IDYgfCBidWZbaSsrXSAmIDYzOwogICAgICAgICAgICBjX2xlbi0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNfbGVuID4gMSkgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA2NTUzMzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDY1NTM2KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjIC09IDY1NTM2OwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NTI5NiB8IGMgPj4gMTAgJiAxMDIzOwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NjMyMCB8IGMgJiAxMDIzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTsKICAgICAgfTsKICAgICAgZXhwb3J0czIudXRmOGJvcmRlciA9IGZ1bmN0aW9uKGJ1ZiwgbWF4KSB7CiAgICAgICAgdmFyIHBvczsKICAgICAgICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDsKICAgICAgICBpZiAobWF4ID4gYnVmLmxlbmd0aCkgewogICAgICAgICAgbWF4ID0gYnVmLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgcG9zID0gbWF4IC0gMTsKICAgICAgICB3aGlsZSAocG9zID49IDAgJiYgKGJ1Zltwb3NdICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICBwb3MtLTsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcyA8IDApIHsKICAgICAgICAgIHJldHVybiBtYXg7CiAgICAgICAgfQogICAgICAgIGlmIChwb3MgPT09IDApIHsKICAgICAgICAgIHJldHVybiBtYXg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3MgKyBfdXRmOGxlbltidWZbcG9zXV0gPiBtYXggPyBwb3MgOiBtYXg7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi96c3RyZWFtLmpzCiAgdmFyIHJlcXVpcmVfenN0cmVhbSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi96c3RyZWFtLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZnVuY3Rpb24gWlN0cmVhbSgpIHsKICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfaW4gPSAwOwogICAgICAgIHRoaXMuYXZhaWxfaW4gPSAwOwogICAgICAgIHRoaXMudG90YWxfaW4gPSAwOwogICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfb3V0ID0gMDsKICAgICAgICB0aGlzLmF2YWlsX291dCA9IDA7CiAgICAgICAgdGhpcy50b3RhbF9vdXQgPSAwOwogICAgICAgIHRoaXMubXNnID0gIiI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5kYXRhX3R5cGUgPSAyOwogICAgICAgIHRoaXMuYWRsZXIgPSAwOwogICAgICB9CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IFpTdHJlYW07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvZGVmbGF0ZS5qcwogIHZhciByZXF1aXJlX2RlZmxhdGUyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9kZWZsYXRlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHpsaWJfZGVmbGF0ZSA9IHJlcXVpcmVfZGVmbGF0ZSgpOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgc3RyaW5ncyA9IHJlcXVpcmVfc3RyaW5ncygpOwogICAgICB2YXIgbXNnID0gcmVxdWlyZV9tZXNzYWdlcygpOwogICAgICB2YXIgWlN0cmVhbSA9IHJlcXVpcmVfenN0cmVhbSgpOwogICAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICB2YXIgWl9OT19GTFVTSCA9IDA7CiAgICAgIHZhciBaX0ZJTklTSCA9IDQ7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX1NZTkNfRkxVU0gyID0gMjsKICAgICAgdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwogICAgICB2YXIgWl9ERUZBVUxUX1NUUkFURUdZID0gMDsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICBmdW5jdGlvbiBEZWZsYXRlKG9wdGlvbnMpIHsKICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpCiAgICAgICAgICByZXR1cm4gbmV3IERlZmxhdGUob3B0aW9ucyk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgICAgICAgIGxldmVsOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCiAgICAgICAgICBtZXRob2Q6IFpfREVGTEFURUQsCiAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgICAgICAgd2luZG93Qml0czogMTUsCiAgICAgICAgICBtZW1MZXZlbDogOCwKICAgICAgICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksCiAgICAgICAgICB0bzogIiIKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTsKICAgICAgICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwogICAgICAgIGlmIChvcHQucmF3ICYmIG9wdC53aW5kb3dCaXRzID4gMCkgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmIChvcHQuZ3ppcCAmJiBvcHQud2luZG93Qml0cyA+IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNikgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgKz0gMTY7CiAgICAgICAgfQogICAgICAgIHRoaXMuZXJyID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgICAgICAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLCBvcHQubGV2ZWwsIG9wdC5tZXRob2QsIG9wdC53aW5kb3dCaXRzLCBvcHQubWVtTGV2ZWwsIG9wdC5zdHJhdGVneSk7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdC5oZWFkZXIpIHsKICAgICAgICAgIHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSwgb3B0LmhlYWRlcik7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkgewogICAgICAgICAgdmFyIGRpY3Q7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBkaWN0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgICAgZGljdCA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3QpOwogICAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogICAgICAgIHZhciBzdHJtID0gdGhpcy5zdHJtOwogICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogICAgICAgIHZhciBzdGF0dXMsIF9tb2RlOwogICAgICAgIGlmICh0aGlzLmVuZGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9tb2RlID0gbW9kZSA9PT0gfn5tb2RlID8gbW9kZSA6IG1vZGUgPT09IHRydWUgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihkYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiA9IDA7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHN0cm0sIF9tb2RlKTsKICAgICAgICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBaX0ZJTklTSCB8fCBfbW9kZSA9PT0gWl9TWU5DX0ZMVVNIMikpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IFpfU1RSRUFNX0VORCk7CiAgICAgICAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkgewogICAgICAgICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBaX1NZTkNfRkxVU0gyKSB7CiAgICAgICAgICB0aGlzLm9uRW5kKFpfT0spOwogICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogICAgICAgIGlmIChzdGF0dXMgPT09IFpfT0spIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbigiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuZXJyID0gc3RhdHVzOwogICAgICAgIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpOwogICAgICAgIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwogICAgICAgIGlmIChkZWZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IGRlZmxhdG9yLm1zZyB8fCBtc2dbZGVmbGF0b3IuZXJyXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5yYXcgPSB0cnVlOwogICAgICAgIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBnemlwKGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5nemlwID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuRGVmbGF0ZSA9IERlZmxhdGU7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGUgPSBkZWZsYXRlOwogICAgICBleHBvcnRzMi5kZWZsYXRlUmF3ID0gZGVmbGF0ZVJhdzsKICAgICAgZXhwb3J0czIuZ3ppcCA9IGd6aXA7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZmYXN0LmpzCiAgdmFyIHJlcXVpcmVfaW5mZmFzdCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZmYXN0LmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIEJBRCA9IDMwOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX2Zhc3Qoc3RybSwgc3RhcnQpIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgdmFyIF9pbjsKICAgICAgICB2YXIgbGFzdDsKICAgICAgICB2YXIgX291dDsKICAgICAgICB2YXIgYmVnOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgdmFyIGRtYXg7CiAgICAgICAgdmFyIHdzaXplOwogICAgICAgIHZhciB3aGF2ZTsKICAgICAgICB2YXIgd25leHQ7CiAgICAgICAgdmFyIHNfd2luZG93OwogICAgICAgIHZhciBob2xkOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciBsY29kZTsKICAgICAgICB2YXIgZGNvZGU7CiAgICAgICAgdmFyIGxtYXNrOwogICAgICAgIHZhciBkbWFzazsKICAgICAgICB2YXIgaGVyZTsKICAgICAgICB2YXIgb3A7CiAgICAgICAgdmFyIGxlbjsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgZnJvbTsKICAgICAgICB2YXIgZnJvbV9zb3VyY2U7CiAgICAgICAgdmFyIGlucHV0LCBvdXRwdXQ7CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIF9pbiA9IHN0cm0ubmV4dF9pbjsKICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7CiAgICAgICAgX291dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgICAgICAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTsKICAgICAgICBlbmQgPSBfb3V0ICsgKHN0cm0uYXZhaWxfb3V0IC0gMjU3KTsKICAgICAgICBkbWF4ID0gc3RhdGUuZG1heDsKICAgICAgICB3c2l6ZSA9IHN0YXRlLndzaXplOwogICAgICAgIHdoYXZlID0gc3RhdGUud2hhdmU7CiAgICAgICAgd25leHQgPSBzdGF0ZS53bmV4dDsKICAgICAgICBzX3dpbmRvdyA9IHN0YXRlLndpbmRvdzsKICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICBsY29kZSA9IHN0YXRlLmxlbmNvZGU7CiAgICAgICAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTsKICAgICAgICBsbWFzayA9ICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMTsKICAgICAgICBkbWFzayA9ICgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDE7CiAgICAgICAgdG9wOgogICAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoYml0cyA8IDE1KSB7CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVyZSA9IGxjb2RlW2hvbGQgJiBsbWFza107CiAgICAgICAgICAgIGRvbGVuOgogICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAyNDsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgaWYgKG9wID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCAmIDE2KSB7CiAgICAgICAgICAgICAgICAgIGxlbiA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgb3AgJj0gMTU7CiAgICAgICAgICAgICAgICAgIGlmIChvcCkgewogICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGxlbiArPSBob2xkICYgKDEgPDwgb3ApIC0gMTsKICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IDE1KSB7CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGVyZSA9IGRjb2RlW2hvbGQgJiBkbWFza107CiAgICAgICAgICAgICAgICAgIGRvZGlzdDoKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCAmIDE2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wICY9IDE1OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKDEgPDwgb3ApIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBkbWF4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBfb3V0IC0gYmVnOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA+IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IHNfd2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3bmV4dCA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplICsgd25leHQgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wIC09IHduZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IHduZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd25leHQgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiA+IDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSA9IGRjb2RlWyhoZXJlICYgNjU1MzUpICsgKGhvbGQgJiAoMSA8PCBvcCkgLSAxKV07CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGRvZGlzdDsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBsY29kZVsoaGVyZSAmIDY1NTM1KSArIChob2xkICYgKDEgPDwgb3ApIC0gMSldOwogICAgICAgICAgICAgICAgICBjb250aW51ZSBkb2xlbjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgJiAzMikgewogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAoX2luIDwgbGFzdCAmJiBfb3V0IDwgZW5kKTsKICAgICAgICBsZW4gPSBiaXRzID4+IDM7CiAgICAgICAgX2luIC09IGxlbjsKICAgICAgICBiaXRzIC09IGxlbiA8PCAzOwogICAgICAgIGhvbGQgJj0gKDEgPDwgYml0cykgLSAxOwogICAgICAgIHN0cm0ubmV4dF9pbiA9IF9pbjsKICAgICAgICBzdHJtLm5leHRfb3V0ID0gX291dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gX2luIDwgbGFzdCA/IDUgKyAobGFzdCAtIF9pbikgOiA1IC0gKF9pbiAtIGxhc3QpOwogICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gX291dCA8IGVuZCA/IDI1NyArIChlbmQgLSBfb3V0KSA6IDI1NyAtIChfb3V0IC0gZW5kKTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICByZXR1cm47CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZ0cmVlcy5qcwogIHZhciByZXF1aXJlX2luZnRyZWVzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIE1BWEJJVFMgPSAxNTsKICAgICAgdmFyIEVOT1VHSF9MRU5TID0gODUyOwogICAgICB2YXIgRU5PVUdIX0RJU1RTID0gNTkyOwogICAgICB2YXIgQ09ERVMgPSAwOwogICAgICB2YXIgTEVOUyA9IDE7CiAgICAgIHZhciBESVNUUyA9IDI7CiAgICAgIHZhciBsYmFzZSA9IFsKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA2LAogICAgICAgIDcsCiAgICAgICAgOCwKICAgICAgICA5LAogICAgICAgIDEwLAogICAgICAgIDExLAogICAgICAgIDEzLAogICAgICAgIDE1LAogICAgICAgIDE3LAogICAgICAgIDE5LAogICAgICAgIDIzLAogICAgICAgIDI3LAogICAgICAgIDMxLAogICAgICAgIDM1LAogICAgICAgIDQzLAogICAgICAgIDUxLAogICAgICAgIDU5LAogICAgICAgIDY3LAogICAgICAgIDgzLAogICAgICAgIDk5LAogICAgICAgIDExNSwKICAgICAgICAxMzEsCiAgICAgICAgMTYzLAogICAgICAgIDE5NSwKICAgICAgICAyMjcsCiAgICAgICAgMjU4LAogICAgICAgIDAsCiAgICAgICAgMAogICAgICBdOwogICAgICB2YXIgbGV4dCA9IFsKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAxNiwKICAgICAgICA3MiwKICAgICAgICA3OAogICAgICBdOwogICAgICB2YXIgZGJhc2UgPSBbCiAgICAgICAgMSwKICAgICAgICAyLAogICAgICAgIDMsCiAgICAgICAgNCwKICAgICAgICA1LAogICAgICAgIDcsCiAgICAgICAgOSwKICAgICAgICAxMywKICAgICAgICAxNywKICAgICAgICAyNSwKICAgICAgICAzMywKICAgICAgICA0OSwKICAgICAgICA2NSwKICAgICAgICA5NywKICAgICAgICAxMjksCiAgICAgICAgMTkzLAogICAgICAgIDI1NywKICAgICAgICAzODUsCiAgICAgICAgNTEzLAogICAgICAgIDc2OSwKICAgICAgICAxMDI1LAogICAgICAgIDE1MzcsCiAgICAgICAgMjA0OSwKICAgICAgICAzMDczLAogICAgICAgIDQwOTcsCiAgICAgICAgNjE0NSwKICAgICAgICA4MTkzLAogICAgICAgIDEyMjg5LAogICAgICAgIDE2Mzg1LAogICAgICAgIDI0NTc3LAogICAgICAgIDAsCiAgICAgICAgMAogICAgICBdOwogICAgICB2YXIgZGV4dCA9IFsKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAyMiwKICAgICAgICAyMiwKICAgICAgICAyMywKICAgICAgICAyMywKICAgICAgICAyNCwKICAgICAgICAyNCwKICAgICAgICAyNSwKICAgICAgICAyNSwKICAgICAgICAyNiwKICAgICAgICAyNiwKICAgICAgICAyNywKICAgICAgICAyNywKICAgICAgICAyOCwKICAgICAgICAyOCwKICAgICAgICAyOSwKICAgICAgICAyOSwKICAgICAgICA2NCwKICAgICAgICA2NAogICAgICBdOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpIHsKICAgICAgICB2YXIgYml0cyA9IG9wdHMuYml0czsKICAgICAgICB2YXIgbGVuID0gMDsKICAgICAgICB2YXIgc3ltID0gMDsKICAgICAgICB2YXIgbWluID0gMCwgbWF4ID0gMDsKICAgICAgICB2YXIgcm9vdDIgPSAwOwogICAgICAgIHZhciBjdXJyID0gMDsKICAgICAgICB2YXIgZHJvcCA9IDA7CiAgICAgICAgdmFyIGxlZnQgPSAwOwogICAgICAgIHZhciB1c2VkID0gMDsKICAgICAgICB2YXIgaHVmZiA9IDA7CiAgICAgICAgdmFyIGluY3I7CiAgICAgICAgdmFyIGZpbGw7CiAgICAgICAgdmFyIGxvdzsKICAgICAgICB2YXIgbWFzazsKICAgICAgICB2YXIgbmV4dDsKICAgICAgICB2YXIgYmFzZSA9IG51bGw7CiAgICAgICAgdmFyIGJhc2VfaW5kZXggPSAwOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgdmFyIGNvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsKICAgICAgICB2YXIgb2ZmcyA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7CiAgICAgICAgdmFyIGV4dHJhID0gbnVsbDsKICAgICAgICB2YXIgZXh0cmFfaW5kZXggPSAwOwogICAgICAgIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOwogICAgICAgIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CiAgICAgICAgICBjb3VudFtsZW5dID0gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChzeW0gPSAwOyBzeW0gPCBjb2Rlczsgc3ltKyspIHsKICAgICAgICAgIGNvdW50W2xlbnNbbGVuc19pbmRleCArIHN5bV1dKys7CiAgICAgICAgfQogICAgICAgIHJvb3QyID0gYml0czsKICAgICAgICBmb3IgKG1heCA9IE1BWEJJVFM7IG1heCA+PSAxOyBtYXgtLSkgewogICAgICAgICAgaWYgKGNvdW50W21heF0gIT09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChyb290MiA+IG1heCkgewogICAgICAgICAgcm9vdDIgPSBtYXg7CiAgICAgICAgfQogICAgICAgIGlmIChtYXggPT09IDApIHsKICAgICAgICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gMSA8PCAyNCB8IDY0IDw8IDE2IHwgMDsKICAgICAgICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gMSA8PCAyNCB8IDY0IDw8IDE2IHwgMDsKICAgICAgICAgIG9wdHMuYml0cyA9IDE7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKSB7CiAgICAgICAgICBpZiAoY291bnRbbWluXSAhPT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHJvb3QyIDwgbWluKSB7CiAgICAgICAgICByb290MiA9IG1pbjsKICAgICAgICB9CiAgICAgICAgbGVmdCA9IDE7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIGxlZnQgPDw9IDE7CiAgICAgICAgICBsZWZ0IC09IGNvdW50W2xlbl07CiAgICAgICAgICBpZiAobGVmdCA8IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgb2Zmc1sxXSA9IDA7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykgewogICAgICAgICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07CiAgICAgICAgfQogICAgICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICAgICAgICBpZiAobGVuc1tsZW5zX2luZGV4ICsgc3ltXSAhPT0gMCkgewogICAgICAgICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSBDT0RFUykgewogICAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsKICAgICAgICAgIGVuZCA9IDE5OwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykgewogICAgICAgICAgYmFzZSA9IGxiYXNlOwogICAgICAgICAgYmFzZV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBleHRyYSA9IGxleHQ7CiAgICAgICAgICBleHRyYV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBlbmQgPSAyNTY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJhc2UgPSBkYmFzZTsKICAgICAgICAgIGV4dHJhID0gZGV4dDsKICAgICAgICAgIGVuZCA9IC0xOwogICAgICAgIH0KICAgICAgICBodWZmID0gMDsKICAgICAgICBzeW0gPSAwOwogICAgICAgIGxlbiA9IG1pbjsKICAgICAgICBuZXh0ID0gdGFibGVfaW5kZXg7CiAgICAgICAgY3VyciA9IHJvb3QyOwogICAgICAgIGRyb3AgPSAwOwogICAgICAgIGxvdyA9IC0xOwogICAgICAgIHVzZWQgPSAxIDw8IHJvb3QyOwogICAgICAgIG1hc2sgPSB1c2VkIC0gMTsKICAgICAgICBpZiAodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMgfHwgdHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaGVyZV9iaXRzID0gbGVuIC0gZHJvcDsKICAgICAgICAgIGlmICh3b3JrW3N5bV0gPCBlbmQpIHsKICAgICAgICAgICAgaGVyZV9vcCA9IDA7CiAgICAgICAgICAgIGhlcmVfdmFsID0gd29ya1tzeW1dOwogICAgICAgICAgfSBlbHNlIGlmICh3b3JrW3N5bV0gPiBlbmQpIHsKICAgICAgICAgICAgaGVyZV9vcCA9IGV4dHJhW2V4dHJhX2luZGV4ICsgd29ya1tzeW1dXTsKICAgICAgICAgICAgaGVyZV92YWwgPSBiYXNlW2Jhc2VfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGVyZV9vcCA9IDMyICsgNjQ7CiAgICAgICAgICAgIGhlcmVfdmFsID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGluY3IgPSAxIDw8IGxlbiAtIGRyb3A7CiAgICAgICAgICBmaWxsID0gMSA8PCBjdXJyOwogICAgICAgICAgbWluID0gZmlsbDsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgZmlsbCAtPSBpbmNyOwogICAgICAgICAgICB0YWJsZVtuZXh0ICsgKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IGhlcmVfYml0cyA8PCAyNCB8IGhlcmVfb3AgPDwgMTYgfCBoZXJlX3ZhbCB8IDA7CiAgICAgICAgICB9IHdoaWxlIChmaWxsICE9PSAwKTsKICAgICAgICAgIGluY3IgPSAxIDw8IGxlbiAtIDE7CiAgICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpIHsKICAgICAgICAgICAgaW5jciA+Pj0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbmNyICE9PSAwKSB7CiAgICAgICAgICAgIGh1ZmYgJj0gaW5jciAtIDE7CiAgICAgICAgICAgIGh1ZmYgKz0gaW5jcjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGh1ZmYgPSAwOwogICAgICAgICAgfQogICAgICAgICAgc3ltKys7CiAgICAgICAgICBpZiAoLS1jb3VudFtsZW5dID09PSAwKSB7CiAgICAgICAgICAgIGlmIChsZW4gPT09IG1heCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlbiA9IGxlbnNbbGVuc19pbmRleCArIHdvcmtbc3ltXV07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobGVuID4gcm9vdDIgJiYgKGh1ZmYgJiBtYXNrKSAhPT0gbG93KSB7CiAgICAgICAgICAgIGlmIChkcm9wID09PSAwKSB7CiAgICAgICAgICAgICAgZHJvcCA9IHJvb3QyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgKz0gbWluOwogICAgICAgICAgICBjdXJyID0gbGVuIC0gZHJvcDsKICAgICAgICAgICAgbGVmdCA9IDEgPDwgY3VycjsKICAgICAgICAgICAgd2hpbGUgKGN1cnIgKyBkcm9wIDwgbWF4KSB7CiAgICAgICAgICAgICAgbGVmdCAtPSBjb3VudFtjdXJyICsgZHJvcF07CiAgICAgICAgICAgICAgaWYgKGxlZnQgPD0gMCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN1cnIrKzsKICAgICAgICAgICAgICBsZWZ0IDw8PSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVzZWQgKz0gMSA8PCBjdXJyOwogICAgICAgICAgICBpZiAodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMgfHwgdHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykgewogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvdyA9IGh1ZmYgJiBtYXNrOwogICAgICAgICAgICB0YWJsZVtsb3ddID0gcm9vdDIgPDwgMjQgfCBjdXJyIDw8IDE2IHwgbmV4dCAtIHRhYmxlX2luZGV4IHwgMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGh1ZmYgIT09IDApIHsKICAgICAgICAgIHRhYmxlW25leHQgKyBodWZmXSA9IGxlbiAtIGRyb3AgPDwgMjQgfCA2NCA8PCAxNiB8IDA7CiAgICAgICAgfQogICAgICAgIG9wdHMuYml0cyA9IHJvb3QyOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMiA9IHJlcXVpcmVfY3JjMzIoKTsKICAgICAgdmFyIGluZmxhdGVfZmFzdCA9IHJlcXVpcmVfaW5mZmFzdCgpOwogICAgICB2YXIgaW5mbGF0ZV90YWJsZSA9IHJlcXVpcmVfaW5mdHJlZXMoKTsKICAgICAgdmFyIENPREVTID0gMDsKICAgICAgdmFyIExFTlMgPSAxOwogICAgICB2YXIgRElTVFMgPSAyOwogICAgICB2YXIgWl9GSU5JU0ggPSA0OwogICAgICB2YXIgWl9CTE9DSyA9IDU7CiAgICAgIHZhciBaX1RSRUVTID0gNjsKICAgICAgdmFyIFpfT0sgPSAwOwogICAgICB2YXIgWl9TVFJFQU1fRU5EID0gMTsKICAgICAgdmFyIFpfTkVFRF9ESUNUID0gMjsKICAgICAgdmFyIFpfU1RSRUFNX0VSUk9SID0gLTI7CiAgICAgIHZhciBaX0RBVEFfRVJST1IgPSAtMzsKICAgICAgdmFyIFpfTUVNX0VSUk9SID0gLTQ7CiAgICAgIHZhciBaX0JVRl9FUlJPUiA9IC01OwogICAgICB2YXIgWl9ERUZMQVRFRCA9IDg7CiAgICAgIHZhciBIRUFEID0gMTsKICAgICAgdmFyIEZMQUdTID0gMjsKICAgICAgdmFyIFRJTUUgPSAzOwogICAgICB2YXIgT1MgPSA0OwogICAgICB2YXIgRVhMRU4gPSA1OwogICAgICB2YXIgRVhUUkEgPSA2OwogICAgICB2YXIgTkFNRSA9IDc7CiAgICAgIHZhciBDT01NRU5UID0gODsKICAgICAgdmFyIEhDUkMgPSA5OwogICAgICB2YXIgRElDVElEID0gMTA7CiAgICAgIHZhciBESUNUID0gMTE7CiAgICAgIHZhciBUWVBFID0gMTI7CiAgICAgIHZhciBUWVBFRE8gPSAxMzsKICAgICAgdmFyIFNUT1JFRCA9IDE0OwogICAgICB2YXIgQ09QWV8gPSAxNTsKICAgICAgdmFyIENPUFkgPSAxNjsKICAgICAgdmFyIFRBQkxFID0gMTc7CiAgICAgIHZhciBMRU5MRU5TID0gMTg7CiAgICAgIHZhciBDT0RFTEVOUyA9IDE5OwogICAgICB2YXIgTEVOXyA9IDIwOwogICAgICB2YXIgTEVOID0gMjE7CiAgICAgIHZhciBMRU5FWFQgPSAyMjsKICAgICAgdmFyIERJU1QgPSAyMzsKICAgICAgdmFyIERJU1RFWFQgPSAyNDsKICAgICAgdmFyIE1BVENIID0gMjU7CiAgICAgIHZhciBMSVQgPSAyNjsKICAgICAgdmFyIENIRUNLID0gMjc7CiAgICAgIHZhciBMRU5HVEggPSAyODsKICAgICAgdmFyIERPTkUgPSAyOTsKICAgICAgdmFyIEJBRCA9IDMwOwogICAgICB2YXIgTUVNID0gMzE7CiAgICAgIHZhciBTWU5DID0gMzI7CiAgICAgIHZhciBFTk9VR0hfTEVOUyA9IDg1MjsKICAgICAgdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKICAgICAgdmFyIE1BWF9XQklUUyA9IDE1OwogICAgICB2YXIgREVGX1dCSVRTID0gTUFYX1dCSVRTOwogICAgICBmdW5jdGlvbiB6c3dhcDMyKHEpIHsKICAgICAgICByZXR1cm4gKHEgPj4+IDI0ICYgMjU1KSArIChxID4+PiA4ICYgNjUyODApICsgKChxICYgNjUyODApIDw8IDgpICsgKChxICYgMjU1KSA8PCAyNCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gSW5mbGF0ZVN0YXRlKCkgewogICAgICAgIHRoaXMubW9kZSA9IDA7CiAgICAgICAgdGhpcy5sYXN0ID0gZmFsc2U7CiAgICAgICAgdGhpcy53cmFwID0gMDsKICAgICAgICB0aGlzLmhhdmVkaWN0ID0gZmFsc2U7CiAgICAgICAgdGhpcy5mbGFncyA9IDA7CiAgICAgICAgdGhpcy5kbWF4ID0gMDsKICAgICAgICB0aGlzLmNoZWNrID0gMDsKICAgICAgICB0aGlzLnRvdGFsID0gMDsKICAgICAgICB0aGlzLmhlYWQgPSBudWxsOwogICAgICAgIHRoaXMud2JpdHMgPSAwOwogICAgICAgIHRoaXMud3NpemUgPSAwOwogICAgICAgIHRoaXMud2hhdmUgPSAwOwogICAgICAgIHRoaXMud25leHQgPSAwOwogICAgICAgIHRoaXMud2luZG93ID0gbnVsbDsKICAgICAgICB0aGlzLmhvbGQgPSAwOwogICAgICAgIHRoaXMuYml0cyA9IDA7CiAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgIHRoaXMub2Zmc2V0ID0gMDsKICAgICAgICB0aGlzLmV4dHJhID0gMDsKICAgICAgICB0aGlzLmxlbmNvZGUgPSBudWxsOwogICAgICAgIHRoaXMuZGlzdGNvZGUgPSBudWxsOwogICAgICAgIHRoaXMubGVuYml0cyA9IDA7CiAgICAgICAgdGhpcy5kaXN0Yml0cyA9IDA7CiAgICAgICAgdGhpcy5uY29kZSA9IDA7CiAgICAgICAgdGhpcy5ubGVuID0gMDsKICAgICAgICB0aGlzLm5kaXN0ID0gMDsKICAgICAgICB0aGlzLmhhdmUgPSAwOwogICAgICAgIHRoaXMubmV4dCA9IG51bGw7CiAgICAgICAgdGhpcy5sZW5zID0gbmV3IHV0aWxzLkJ1ZjE2KDMyMCk7CiAgICAgICAgdGhpcy53b3JrID0gbmV3IHV0aWxzLkJ1ZjE2KDI4OCk7CiAgICAgICAgdGhpcy5sZW5keW4gPSBudWxsOwogICAgICAgIHRoaXMuZGlzdGR5biA9IG51bGw7CiAgICAgICAgdGhpcy5zYW5lID0gMDsKICAgICAgICB0aGlzLmJhY2sgPSAwOwogICAgICAgIHRoaXMud2FzID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSBzdGF0ZS50b3RhbCA9IDA7CiAgICAgICAgc3RybS5tc2cgPSAiIjsKICAgICAgICBpZiAoc3RhdGUud3JhcCkgewogICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5tb2RlID0gSEVBRDsKICAgICAgICBzdGF0ZS5sYXN0ID0gMDsKICAgICAgICBzdGF0ZS5oYXZlZGljdCA9IDA7CiAgICAgICAgc3RhdGUuZG1heCA9IDMyNzY4OwogICAgICAgIHN0YXRlLmhlYWQgPSBudWxsOwogICAgICAgIHN0YXRlLmhvbGQgPSAwOwogICAgICAgIHN0YXRlLmJpdHMgPSAwOwogICAgICAgIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5sZW5keW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0xFTlMpOwogICAgICAgIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfRElTVFMpOwogICAgICAgIHN0YXRlLnNhbmUgPSAxOwogICAgICAgIHN0YXRlLmJhY2sgPSAtMTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQoc3RybSkgewogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIHN0YXRlLndzaXplID0gMDsKICAgICAgICBzdGF0ZS53aGF2ZSA9IDA7CiAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykgewogICAgICAgIHZhciB3cmFwOwogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewogICAgICAgICAgd3JhcCA9IDA7CiAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7CiAgICAgICAgICBpZiAod2luZG93Qml0cyA8IDQ4KSB7CiAgICAgICAgICAgIHdpbmRvd0JpdHMgJj0gMTU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh3aW5kb3dCaXRzICYmICh3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUpKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS53aW5kb3cgIT09IG51bGwgJiYgc3RhdGUud2JpdHMgIT09IHdpbmRvd0JpdHMpIHsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN0YXRlLndyYXAgPSB3cmFwOwogICAgICAgIHN0YXRlLndiaXRzID0gd2luZG93Qml0czsKICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc2V0KHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSB7CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gbmV3IEluZmxhdGVTdGF0ZSgpOwogICAgICAgIHN0cm0uc3RhdGUgPSBzdGF0ZTsKICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIHJldCA9IGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cyk7CiAgICAgICAgaWYgKHJldCAhPT0gWl9PSykgewogICAgICAgICAgc3RybS5zdGF0ZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZUluaXQoc3RybSkgewogICAgICAgIHJldHVybiBpbmZsYXRlSW5pdDIoc3RybSwgREVGX1dCSVRTKTsKICAgICAgfQogICAgICB2YXIgdmlyZ2luID0gdHJ1ZTsKICAgICAgdmFyIGxlbmZpeDsKICAgICAgdmFyIGRpc3RmaXg7CiAgICAgIGZ1bmN0aW9uIGZpeGVkdGFibGVzKHN0YXRlKSB7CiAgICAgICAgaWYgKHZpcmdpbikgewogICAgICAgICAgdmFyIHN5bTsKICAgICAgICAgIGxlbmZpeCA9IG5ldyB1dGlscy5CdWYzMig1MTIpOwogICAgICAgICAgZGlzdGZpeCA9IG5ldyB1dGlscy5CdWYzMigzMik7CiAgICAgICAgICBzeW0gPSAwOwogICAgICAgICAgd2hpbGUgKHN5bSA8IDE0NCkgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3ltIDwgMjU2KSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gOTsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzeW0gPCAyODApIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA3OwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN5bSA8IDI4OCkgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLmxlbnMsIDAsIDI4OCwgbGVuZml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDkgfSk7CiAgICAgICAgICBzeW0gPSAwOwogICAgICAgICAgd2hpbGUgKHN5bSA8IDMyKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gNTsKICAgICAgICAgIH0KICAgICAgICAgIGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIDAsIDMyLCBkaXN0Zml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDUgfSk7CiAgICAgICAgICB2aXJnaW4gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgc3RhdGUubGVuY29kZSA9IGxlbmZpeDsKICAgICAgICBzdGF0ZS5sZW5iaXRzID0gOTsKICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IGRpc3RmaXg7CiAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA1OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHVwZGF0ZXdpbmRvdyhzdHJtLCBzcmMsIGVuZCwgY29weSkgewogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLndpbmRvdyA9PT0gbnVsbCkgewogICAgICAgICAgc3RhdGUud3NpemUgPSAxIDw8IHN0YXRlLndiaXRzOwogICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgc3RhdGUud2hhdmUgPSAwOwogICAgICAgICAgc3RhdGUud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgoc3RhdGUud3NpemUpOwogICAgICAgIH0KICAgICAgICBpZiAoY29weSA+PSBzdGF0ZS53c2l6ZSkgewogICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIHN0YXRlLndzaXplLCBzdGF0ZS53c2l6ZSwgMCk7CiAgICAgICAgICBzdGF0ZS53bmV4dCA9IDA7CiAgICAgICAgICBzdGF0ZS53aGF2ZSA9IHN0YXRlLndzaXplOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXN0ID0gc3RhdGUud3NpemUgLSBzdGF0ZS53bmV4dDsKICAgICAgICAgIGlmIChkaXN0ID4gY29weSkgewogICAgICAgICAgICBkaXN0ID0gY29weTsKICAgICAgICAgIH0KICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBjb3B5LCBkaXN0LCBzdGF0ZS53bmV4dCk7CiAgICAgICAgICBjb3B5IC09IGRpc3Q7CiAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgY29weSwgMCk7CiAgICAgICAgICAgIHN0YXRlLnduZXh0ID0gY29weTsKICAgICAgICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnduZXh0ICs9IGRpc3Q7CiAgICAgICAgICAgIGlmIChzdGF0ZS53bmV4dCA9PT0gc3RhdGUud3NpemUpIHsKICAgICAgICAgICAgICBzdGF0ZS53bmV4dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXRlLndoYXZlIDwgc3RhdGUud3NpemUpIHsKICAgICAgICAgICAgICBzdGF0ZS53aGF2ZSArPSBkaXN0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGUoc3RybSwgZmx1c2gpIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgdmFyIGlucHV0LCBvdXRwdXQ7CiAgICAgICAgdmFyIG5leHQ7CiAgICAgICAgdmFyIHB1dDsKICAgICAgICB2YXIgaGF2ZSwgbGVmdDsKICAgICAgICB2YXIgaG9sZDsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgX2luLCBfb3V0OwogICAgICAgIHZhciBjb3B5OwogICAgICAgIHZhciBmcm9tOwogICAgICAgIHZhciBmcm9tX3NvdXJjZTsKICAgICAgICB2YXIgaGVyZSA9IDA7CiAgICAgICAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7CiAgICAgICAgdmFyIGxhc3RfYml0cywgbGFzdF9vcCwgbGFzdF92YWw7CiAgICAgICAgdmFyIGxlbjsKICAgICAgICB2YXIgcmV0OwogICAgICAgIHZhciBoYnVmID0gbmV3IHV0aWxzLkJ1ZjgoNCk7CiAgICAgICAgdmFyIG9wdHM7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIG9yZGVyID0gWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fCAhc3RybS5vdXRwdXQgfHwgIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsKICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgfQogICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0OwogICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzOwogICAgICAgIF9pbiA9IGhhdmU7CiAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgcmV0ID0gWl9PSzsKICAgICAgICBpbmZfbGVhdmU6CiAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5tb2RlKSB7CiAgICAgICAgICAgICAgY2FzZSBIRUFEOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLndyYXAgPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEVETzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwICYgMiAmJiBob2xkID09PSAzNTYxNSkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IDA7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEZMQUdTOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzID0gMDsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCEoc3RhdGUud3JhcCAmIDEpIHx8ICgoKGhvbGQgJiAyNTUpIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGhlYWRlciBjaGVjayI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKChob2xkICYgMTUpICE9PSBaX0RFRkxBVEVEKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNDsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNDsKICAgICAgICAgICAgICAgIGxlbiA9IChob2xkICYgMTUpICsgODsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS53Yml0cyA9IGxlbjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuID4gc3RhdGUud2JpdHMpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCB3aW5kb3cgc2l6ZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZG1heCA9IDEgPDwgbGVuOwogICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBob2xkICYgNTEyID8gRElDVElEIDogVFlQRTsKICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIEZMQUdTOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncyA9IGhvbGQ7CiAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLmZsYWdzICYgMjU1KSAhPT0gWl9ERUZMQVRFRCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTczNDQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnRleHQgPSBob2xkID4+IDggJiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRJTUU7CiAgICAgICAgICAgICAgY2FzZSBUSU1FOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnRpbWUgPSBob2xkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsyXSA9IGhvbGQgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzNdID0gaG9sZCA+Pj4gMjQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDQsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBPUzsKICAgICAgICAgICAgICBjYXNlIE9TOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnhmbGFncyA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQub3MgPSBob2xkID4+IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhidWZbMV0gPSBob2xkID4+PiA4ICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRVhMRU47CiAgICAgICAgICAgICAgY2FzZSBFWExFTjoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDEwMjQpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZDsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhX2xlbiA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEVYVFJBOwogICAgICAgICAgICAgIGNhc2UgRVhUUkE6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAxMDI0KSB7CiAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBuZXcgQXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUuaGVhZC5leHRyYSwgaW5wdXQsIG5leHQsIGNvcHksIGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTkFNRTsKICAgICAgICAgICAgICBjYXNlIE5BTUU6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAyMDQ4KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNvcHkgPSAwOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmIHN0YXRlLmxlbmd0aCA8IDY1NTM2KSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ09NTUVOVDsKICAgICAgICAgICAgICBjYXNlIENPTU1FTlQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA0MDk2KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNvcHkgPSAwOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmIHN0YXRlLmxlbmd0aCA8IDY1NTM2KSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDOwogICAgICAgICAgICAgIGNhc2UgSENSQzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaG9sZCAhPT0gKHN0YXRlLmNoZWNrICYgNjU1MzUpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaGVhZGVyIGNyYyBtaXNtYXRjaCI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmhjcmMgPSBzdGF0ZS5mbGFncyA+PiA5ICYgMTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgRElDVElEOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSB6c3dhcDMyKGhvbGQpOwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESUNUOwogICAgICAgICAgICAgIGNhc2UgRElDVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogICAgICAgICAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICAgICAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgICAgICAgICAgIHJldHVybiBaX05FRURfRElDVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDE7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICBjYXNlIFRZUEU6CiAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfQkxPQ0sgfHwgZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgVFlQRURPOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxhc3QpIHsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxhc3QgPSBob2xkICYgMTsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAxOwogICAgICAgICAgICAgICAgYml0cyAtPSAxOwogICAgICAgICAgICAgICAgc3dpdGNoIChob2xkICYgMykgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFNUT1JFRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUQUJMRTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYmxvY2sgdHlwZSI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBTVE9SRUQ6CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7CiAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhvbGQgJiA2NTUzNSkgIT09IChob2xkID4+PiAxNiBeIDY1NTM1KSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgNjU1MzU7CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFlfOwogICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIENPUFlfOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFk7CiAgICAgICAgICAgICAgY2FzZSBDT1BZOgogICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBsZWZ0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KG91dHB1dCwgaW5wdXQsIG5leHQsIGNvcHksIHB1dCk7CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIHB1dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgVEFCTEU6CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE0KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDMxKSArIDI1NzsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA1OwogICAgICAgICAgICAgICAgYml0cyAtPSA1OwogICAgICAgICAgICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDMxKSArIDE7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNTsKICAgICAgICAgICAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAxNSkgKyA0OwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgICAgICAgICAgICBiaXRzIC09IDQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5MRU5TOwogICAgICAgICAgICAgIGNhc2UgTEVOTEVOUzoKICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmNvZGUpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gaG9sZCAmIDc7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAzOwogICAgICAgICAgICAgICAgICBiaXRzIC09IDM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5bjsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUubGVucywgMCwgMTksIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICAgICAgICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT0RFTEVOUzsKICAgICAgICAgICAgICBjYXNlIENPREVMRU5TOgogICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhlcmVfdmFsIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX3ZhbCA9PT0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAyOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdOwogICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDMpOwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZXJlX3ZhbCA9PT0gMTcpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgNyk7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gMzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDc7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAxMSArIChob2xkICYgMTI3KTsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA3OwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSArIGNvcHkgPiBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29weS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBsZW47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gQkFEKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA5OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2OwogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluOwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUuZGlzdGJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIHN0YXRlLm5sZW4sIHN0YXRlLm5kaXN0LCBzdGF0ZS5kaXN0Y29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAgICAgICAgICAgICBzdGF0ZS5kaXN0Yml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZXMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSBMRU5fOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTjsKICAgICAgICAgICAgICBjYXNlIExFTjoKICAgICAgICAgICAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgICAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7CiAgICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgICAgICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgICAgICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICAgICAgICAgICAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgICAgICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gMDsKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKDEgPDwgc3RhdGUubGVuYml0cykgLSAxXTsKICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYmIChoZXJlX29wICYgMjQwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgICAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgIGlmIChoZXJlX29wID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGhlcmVfb3AgJiAzMikgewogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYgNjQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5FWFQ7CiAgICAgICAgICAgICAgY2FzZSBMRU5FWFQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKDEgPDwgc3RhdGUuZXh0cmEpIC0gMTsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUud2FzID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERJU1Q7CiAgICAgICAgICAgICAgY2FzZSBESVNUOgogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICBoZXJlX29wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhlcmVfb3AgJiAyNDApID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7CiAgICAgICAgICAgICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESVNURVhUOwogICAgICAgICAgICAgIGNhc2UgRElTVEVYVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5leHRyYSkgewogICAgICAgICAgICAgICAgICBuID0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ICs9IGhvbGQgJiAoMSA8PCBzdGF0ZS5leHRyYSkgLSAxOwogICAgICAgICAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gc3RhdGUuZG1heCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1BVENIOwogICAgICAgICAgICAgIGNhc2UgTUFUQ0g6CiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3B5ID0gX291dCAtIGxlZnQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53aGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLnduZXh0OwogICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBzdGF0ZS53aW5kb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDsKICAgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIExJVDoKICAgICAgICAgICAgICAgIGlmIChsZWZ0ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG91dHB1dFtwdXQrK10gPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBsZWZ0LS07CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBDSEVDSzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCB8PSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9vdXQgLT0gbGVmdDsKICAgICAgICAgICAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICAgICAgICAgICAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICAgICAgICAgICAgaWYgKF9vdXQpIHsKICAgICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfb3V0ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS5mbGFncyA/IGhvbGQgOiB6c3dhcDMyKGhvbGQpKSAhPT0gc3RhdGUuY2hlY2spIHsKICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOR1RIOwogICAgICAgICAgICAgIGNhc2UgTEVOR1RIOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLndyYXAgJiYgc3RhdGUuZmxhZ3MpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS50b3RhbCAmIDQyOTQ5NjcyOTUpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGxlbmd0aCBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRE9ORTsKICAgICAgICAgICAgICBjYXNlIERPTkU6CiAgICAgICAgICAgICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7CiAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgY2FzZSBCQUQ6CiAgICAgICAgICAgICAgICByZXQgPSBaX0RBVEFfRVJST1I7CiAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgY2FzZSBNRU06CiAgICAgICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgICAgICAgY2FzZSBTWU5DOgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0OwogICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDsKICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogICAgICAgIHN0YXRlLmhvbGQgPSBob2xkOwogICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgIGlmIChzdGF0ZS53c2l6ZSB8fCBfb3V0ICE9PSBzdHJtLmF2YWlsX291dCAmJiBzdGF0ZS5tb2RlIDwgQkFEICYmIChzdGF0ZS5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT09IFpfRklOSVNIKSkgewogICAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCwgX291dCAtIHN0cm0uYXZhaWxfb3V0KSkgewogICAgICAgICAgICBzdGF0ZS5tb2RlID0gTUVNOwogICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9pbiAtPSBzdHJtLmF2YWlsX2luOwogICAgICAgIF9vdXQgLT0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgc3RybS50b3RhbF9pbiArPSBfaW47CiAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICAgICAgICBzdGF0ZS50b3RhbCArPSBfb3V0OwogICAgICAgIGlmIChzdGF0ZS53cmFwICYmIF9vdXQpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCk7CiAgICAgICAgfQogICAgICAgIHN0cm0uZGF0YV90eXBlID0gc3RhdGUuYml0cyArIChzdGF0ZS5sYXN0ID8gNjQgOiAwKSArIChzdGF0ZS5tb2RlID09PSBUWVBFID8gMTI4IDogMCkgKyAoc3RhdGUubW9kZSA9PT0gTEVOXyB8fCBzdGF0ZS5tb2RlID09PSBDT1BZXyA/IDI1NiA6IDApOwogICAgICAgIGlmICgoX2luID09PSAwICYmIF9vdXQgPT09IDAgfHwgZmx1c2ggPT09IFpfRklOSVNIKSAmJiByZXQgPT09IFpfT0spIHsKICAgICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVFbmQoc3RybSkgewogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53aW5kb3cpIHsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVHZXRIZWFkZXIoc3RybSwgaGVhZCkgewogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICgoc3RhdGUud3JhcCAmIDIpID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmhlYWQgPSBoZWFkOwogICAgICAgIGhlYWQuZG9uZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICAgICAgICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICB2YXIgZGljdGlkOwogICAgICAgIHZhciByZXQ7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoc3RhdGUud3JhcCAhPT0gMCAmJiBzdGF0ZS5tb2RlICE9PSBESUNUKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBESUNUKSB7CiAgICAgICAgICBkaWN0aWQgPSAxOwogICAgICAgICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApOwogICAgICAgICAgaWYgKGRpY3RpZCAhPT0gc3RhdGUuY2hlY2spIHsKICAgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0ID0gdXBkYXRld2luZG93KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOwogICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgIHN0YXRlLm1vZGUgPSBNRU07CiAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmhhdmVkaWN0ID0gMTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBleHBvcnRzMi5pbmZsYXRlUmVzZXQgPSBpbmZsYXRlUmVzZXQ7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyOwogICAgICBleHBvcnRzMi5pbmZsYXRlUmVzZXRLZWVwID0gaW5mbGF0ZVJlc2V0S2VlcDsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUluaXQgPSBpbmZsYXRlSW5pdDsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyOwogICAgICBleHBvcnRzMi5pbmZsYXRlID0gaW5mbGF0ZTsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUVuZCA9IGluZmxhdGVFbmQ7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyOwogICAgICBleHBvcnRzMi5pbmZsYXRlU2V0RGljdGlvbmFyeSA9IGluZmxhdGVTZXREaWN0aW9uYXJ5OwogICAgICBleHBvcnRzMi5pbmZsYXRlSW5mbyA9ICJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NvbnN0YW50cy5qcwogIHZhciByZXF1aXJlX2NvbnN0YW50cyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSB7CiAgICAgICAgWl9OT19GTFVTSDogMCwKICAgICAgICBaX1BBUlRJQUxfRkxVU0g6IDEsCiAgICAgICAgWl9TWU5DX0ZMVVNIOiAyLAogICAgICAgIFpfRlVMTF9GTFVTSDogMywKICAgICAgICBaX0ZJTklTSDogNCwKICAgICAgICBaX0JMT0NLOiA1LAogICAgICAgIFpfVFJFRVM6IDYsCiAgICAgICAgWl9PSzogMCwKICAgICAgICBaX1NUUkVBTV9FTkQ6IDEsCiAgICAgICAgWl9ORUVEX0RJQ1Q6IDIsCiAgICAgICAgWl9FUlJOTzogLTEsCiAgICAgICAgWl9TVFJFQU1fRVJST1I6IC0yLAogICAgICAgIFpfREFUQV9FUlJPUjogLTMsCiAgICAgICAgWl9CVUZfRVJST1I6IC01LAogICAgICAgIFpfTk9fQ09NUFJFU1NJT046IDAsCiAgICAgICAgWl9CRVNUX1NQRUVEOiAxLAogICAgICAgIFpfQkVTVF9DT01QUkVTU0lPTjogOSwKICAgICAgICBaX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLAogICAgICAgIFpfRklMVEVSRUQ6IDEsCiAgICAgICAgWl9IVUZGTUFOX09OTFk6IDIsCiAgICAgICAgWl9STEU6IDMsCiAgICAgICAgWl9GSVhFRDogNCwKICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1k6IDAsCiAgICAgICAgWl9CSU5BUlk6IDAsCiAgICAgICAgWl9URVhUOiAxLAogICAgICAgIFpfVU5LTk9XTjogMiwKICAgICAgICBaX0RFRkxBVEVEOiA4CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9nemhlYWRlci5qcwogIHZhciByZXF1aXJlX2d6aGVhZGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2d6aGVhZGVyLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZnVuY3Rpb24gR1poZWFkZXIoKSB7CiAgICAgICAgdGhpcy50ZXh0ID0gMDsKICAgICAgICB0aGlzLnRpbWUgPSAwOwogICAgICAgIHRoaXMueGZsYWdzID0gMDsKICAgICAgICB0aGlzLm9zID0gMDsKICAgICAgICB0aGlzLmV4dHJhID0gbnVsbDsKICAgICAgICB0aGlzLmV4dHJhX2xlbiA9IDA7CiAgICAgICAgdGhpcy5uYW1lID0gIiI7CiAgICAgICAgdGhpcy5jb21tZW50ID0gIiI7CiAgICAgICAgdGhpcy5oY3JjID0gMDsKICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBHWmhlYWRlcjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9pbmZsYXRlLmpzCiAgdmFyIHJlcXVpcmVfaW5mbGF0ZTIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL2luZmxhdGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgemxpYl9pbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlKCk7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBzdHJpbmdzID0gcmVxdWlyZV9zdHJpbmdzKCk7CiAgICAgIHZhciBjID0gcmVxdWlyZV9jb25zdGFudHMoKTsKICAgICAgdmFyIG1zZyA9IHJlcXVpcmVfbWVzc2FnZXMoKTsKICAgICAgdmFyIFpTdHJlYW0gPSByZXF1aXJlX3pzdHJlYW0oKTsKICAgICAgdmFyIEdaaGVhZGVyID0gcmVxdWlyZV9nemhlYWRlcigpOwogICAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICBmdW5jdGlvbiBJbmZsYXRlMihvcHRpb25zKSB7CiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGUyKSkKICAgICAgICAgIHJldHVybiBuZXcgSW5mbGF0ZTIob3B0aW9ucyk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgICAgICAgIGNodW5rU2l6ZTogMTYzODQsCiAgICAgICAgICB3aW5kb3dCaXRzOiAwLAogICAgICAgICAgdG86ICIiCiAgICAgICAgfSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgdmFyIG9wdCA9IHRoaXMub3B0aW9uczsKICAgICAgICBpZiAob3B0LnJhdyAmJiBvcHQud2luZG93Qml0cyA+PSAwICYmIG9wdC53aW5kb3dCaXRzIDwgMTYpIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzOwogICAgICAgICAgaWYgKG9wdC53aW5kb3dCaXRzID09PSAwKSB7CiAgICAgICAgICAgIG9wdC53aW5kb3dCaXRzID0gLTE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3B0LndpbmRvd0JpdHMgPj0gMCAmJiBvcHQud2luZG93Qml0cyA8IDE2ICYmICEob3B0aW9ucyAmJiBvcHRpb25zLndpbmRvd0JpdHMpKSB7CiAgICAgICAgICBvcHQud2luZG93Qml0cyArPSAzMjsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdC53aW5kb3dCaXRzID4gMTUgJiYgb3B0LndpbmRvd0JpdHMgPCA0OCkgewogICAgICAgICAgaWYgKChvcHQud2luZG93Qml0cyAmIDE1KSA9PT0gMCkgewogICAgICAgICAgICBvcHQud2luZG93Qml0cyB8PSAxNTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5lcnIgPSAwOwogICAgICAgIHRoaXMubXNnID0gIiI7CiAgICAgICAgdGhpcy5lbmRlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY2h1bmtzID0gW107CiAgICAgICAgdGhpcy5zdHJtID0gbmV3IFpTdHJlYW0oKTsKICAgICAgICB0aGlzLnN0cm0uYXZhaWxfb3V0ID0gMDsKICAgICAgICB2YXIgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sIG9wdC53aW5kb3dCaXRzKTsKICAgICAgICBpZiAoc3RhdHVzICE9PSBjLlpfT0spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGVhZGVyID0gbmV3IEdaaGVhZGVyKCk7CiAgICAgICAgemxpYl9pbmZsYXRlLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLCB0aGlzLmhlYWRlcik7CiAgICAgICAgaWYgKG9wdC5kaWN0aW9uYXJ5KSB7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBvcHQuZGljdGlvbmFyeSA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwob3B0LmRpY3Rpb25hcnkpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICAgIG9wdC5kaWN0aW9uYXJ5ID0gbmV3IFVpbnQ4QXJyYXkob3B0LmRpY3Rpb25hcnkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wdC5yYXcpIHsKICAgICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgb3B0LmRpY3Rpb25hcnkpOwogICAgICAgICAgICBpZiAoc3RhdHVzICE9PSBjLlpfT0spIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEluZmxhdGUyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogICAgICAgIHZhciBzdHJtID0gdGhpcy5zdHJtOwogICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogICAgICAgIHZhciBkaWN0aW9uYXJ5ID0gdGhpcy5vcHRpb25zLmRpY3Rpb25hcnk7CiAgICAgICAgdmFyIHN0YXR1cywgX21vZGU7CiAgICAgICAgdmFyIG5leHRfb3V0X3V0ZjgsIHRhaWwsIHV0ZjhzdHI7CiAgICAgICAgdmFyIGFsbG93QnVmRXJyb3IgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy5lbmRlZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBfbW9kZSA9IG1vZGUgPT09IH5+bW9kZSA/IG1vZGUgOiBtb2RlID09PSB0cnVlID8gYy5aX0ZJTklTSCA6IGMuWl9OT19GTFVTSDsKICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5iaW5zdHJpbmcyYnVmKGRhdGEpOwogICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IG5ldyBVaW50OEFycmF5KGRhdGEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gZGF0YTsKICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X2luID0gMDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHN0cm0ub3V0cHV0ID0gbmV3IHV0aWxzLkJ1ZjgoY2h1bmtTaXplKTsKICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IDA7CiAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplOwogICAgICAgICAgfQogICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGUoc3RybSwgYy5aX05PX0ZMVVNIKTsKICAgICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9ORUVEX0RJQ1QgJiYgZGljdGlvbmFyeSkgewogICAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBkaWN0aW9uYXJ5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9CVUZfRVJST1IgJiYgYWxsb3dCdWZFcnJvciA9PT0gdHJ1ZSkgewogICAgICAgICAgICBzdGF0dXMgPSBjLlpfT0s7CiAgICAgICAgICAgIGFsbG93QnVmRXJyb3IgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0dXMgIT09IGMuWl9TVFJFQU1fRU5EICYmIHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJtLm5leHRfb3V0KSB7CiAgICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCB8fCBzdGF0dXMgPT09IGMuWl9TVFJFQU1fRU5EIHx8IHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBjLlpfRklOSVNIIHx8IF9tb2RlID09PSBjLlpfU1lOQ19GTFVTSCkpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgbmV4dF9vdXRfdXRmOCA9IHN0cmluZ3MudXRmOGJvcmRlcihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCk7CiAgICAgICAgICAgICAgICB0YWlsID0gc3RybS5uZXh0X291dCAtIG5leHRfb3V0X3V0Zjg7CiAgICAgICAgICAgICAgICB1dGY4c3RyID0gc3RyaW5ncy5idWYyc3RyaW5nKHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4KTsKICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSB0YWlsOwogICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemUgLSB0YWlsOwogICAgICAgICAgICAgICAgaWYgKHRhaWwpIHsKICAgICAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4LCB0YWlsLCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0ZjhzdHIpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YSh1dGlscy5zaHJpbmtCdWYoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIGFsbG93QnVmRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChzdHJtLmF2YWlsX2luID4gMCB8fCBzdHJtLmF2YWlsX291dCA9PT0gMCkgJiYgc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCk7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQpIHsKICAgICAgICAgIF9tb2RlID0gYy5aX0ZJTklTSDsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBjLlpfRklOSVNIKSB7CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pOwogICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgICAgICByZXR1cm4gc3RhdHVzID09PSBjLlpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChfbW9kZSA9PT0gYy5aX1NZTkNfRkxVU0gpIHsKICAgICAgICAgIHRoaXMub25FbmQoYy5aX09LKTsKICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gMDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfTsKICAgICAgSW5mbGF0ZTIucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uKGNodW5rKSB7CiAgICAgICAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7CiAgICAgIH07CiAgICAgIEluZmxhdGUyLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9PSykgewogICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLmNodW5rcy5qb2luKCIiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdXRpbHMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY2h1bmtzID0gW107CiAgICAgICAgdGhpcy5lcnIgPSBzdGF0dXM7CiAgICAgICAgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnOwogICAgICB9OwogICAgICBmdW5jdGlvbiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGluZmxhdG9yID0gbmV3IEluZmxhdGUyKG9wdGlvbnMpOwogICAgICAgIGluZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwogICAgICAgIGlmIChpbmZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IGluZmxhdG9yLm1zZyB8fCBtc2dbaW5mbGF0b3IuZXJyXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGluZmxhdG9yLnJlc3VsdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5yYXcgPSB0cnVlOwogICAgICAgIHJldHVybiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgfQogICAgICBleHBvcnRzMi5JbmZsYXRlID0gSW5mbGF0ZTI7CiAgICAgIGV4cG9ydHMyLmluZmxhdGUgPSBpbmZsYXRlOwogICAgICBleHBvcnRzMi5pbmZsYXRlUmF3ID0gaW5mbGF0ZVJhdzsKICAgICAgZXhwb3J0czIudW5nemlwID0gaW5mbGF0ZTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfcGFrbyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9pbmRleC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBhc3NpZ24gPSByZXF1aXJlX2NvbW1vbigpLmFzc2lnbjsKICAgICAgdmFyIGRlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUyKCk7CiAgICAgIHZhciBpbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlMigpOwogICAgICB2YXIgY29uc3RhbnRzID0gcmVxdWlyZV9jb25zdGFudHMoKTsKICAgICAgdmFyIHBha28gPSB7fTsKICAgICAgYXNzaWduKHBha28sIGRlZmxhdGUsIGluZmxhdGUsIGNvbnN0YW50cyk7CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IHBha287CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb25nQDQuMC4wL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzCiAgdmFyIHJlcXVpcmVfbG9uZyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sb25nQDQuMC4wL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IExvbmc0OwogICAgICB2YXIgd2FzbSA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgd2FzbSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG5ldyBVaW50OEFycmF5KFsKICAgICAgICAgIDAsCiAgICAgICAgICA5NywKICAgICAgICAgIDExNSwKICAgICAgICAgIDEwOSwKICAgICAgICAgIDEsCiAgICAgICAgICAwLAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAxLAogICAgICAgICAgMTMsCiAgICAgICAgICAyLAogICAgICAgICAgOTYsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNywKICAgICAgICAgIDk2LAogICAgICAgICAgNCwKICAgICAgICAgIDEyNywKICAgICAgICAgIDEyNywKICAgICAgICAgIDEyNywKICAgICAgICAgIDEyNywKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAzLAogICAgICAgICAgNywKICAgICAgICAgIDYsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICA2LAogICAgICAgICAgNiwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxLAogICAgICAgICAgNjUsCiAgICAgICAgICAwLAogICAgICAgICAgMTEsCiAgICAgICAgICA3LAogICAgICAgICAgNTAsCiAgICAgICAgICA2LAogICAgICAgICAgMywKICAgICAgICAgIDEwOSwKICAgICAgICAgIDExNywKICAgICAgICAgIDEwOCwKICAgICAgICAgIDAsCiAgICAgICAgICAxLAogICAgICAgICAgNSwKICAgICAgICAgIDEwMCwKICAgICAgICAgIDEwNSwKICAgICAgICAgIDExOCwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE1LAogICAgICAgICAgMCwKICAgICAgICAgIDIsCiAgICAgICAgICA1LAogICAgICAgICAgMTAwLAogICAgICAgICAgMTA1LAogICAgICAgICAgMTE4LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMTcsCiAgICAgICAgICAwLAogICAgICAgICAgMywKICAgICAgICAgIDUsCiAgICAgICAgICAxMTQsCiAgICAgICAgICAxMDEsCiAgICAgICAgICAxMDksCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNSwKICAgICAgICAgIDAsCiAgICAgICAgICA0LAogICAgICAgICAgNSwKICAgICAgICAgIDExNCwKICAgICAgICAgIDEwMSwKICAgICAgICAgIDEwOSwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE3LAogICAgICAgICAgMCwKICAgICAgICAgIDUsCiAgICAgICAgICA4LAogICAgICAgICAgMTAzLAogICAgICAgICAgMTAxLAogICAgICAgICAgMTE2LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMDQsCiAgICAgICAgICAxMDUsCiAgICAgICAgICAxMDMsCiAgICAgICAgICAxMDQsCiAgICAgICAgICAwLAogICAgICAgICAgMCwKICAgICAgICAgIDEwLAogICAgICAgICAgMTkxLAogICAgICAgICAgMSwKICAgICAgICAgIDYsCiAgICAgICAgICA0LAogICAgICAgICAgMCwKICAgICAgICAgIDM1LAogICAgICAgICAgMCwKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI2LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI3LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI4LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI5LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTMwLAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExCiAgICAgICAgXSkpLCB7fSkuZXhwb3J0czsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICB9CiAgICAgIGZ1bmN0aW9uIExvbmc0KGxvdywgaGlnaCwgdW5zaWduZWQpIHsKICAgICAgICB0aGlzLmxvdyA9IGxvdyB8IDA7CiAgICAgICAgdGhpcy5oaWdoID0gaGlnaCB8IDA7CiAgICAgICAgdGhpcy51bnNpZ25lZCA9ICEhdW5zaWduZWQ7CiAgICAgIH0KICAgICAgTG9uZzQucHJvdG90eXBlLl9faXNMb25nX187CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nNC5wcm90b3R5cGUsICJfX2lzTG9uZ19fIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZnVuY3Rpb24gaXNMb25nKG9iaikgewogICAgICAgIHJldHVybiAob2JqICYmIG9ialsiX19pc0xvbmdfXyJdKSA9PT0gdHJ1ZTsKICAgICAgfQogICAgICBMb25nNC5pc0xvbmcgPSBpc0xvbmc7CiAgICAgIHZhciBJTlRfQ0FDSEUgPSB7fTsKICAgICAgdmFyIFVJTlRfQ0FDSEUgPSB7fTsKICAgICAgZnVuY3Rpb24gZnJvbUludCh2YWx1ZSwgdW5zaWduZWQpIHsKICAgICAgICB2YXIgb2JqLCBjYWNoZWRPYmosIGNhY2hlOwogICAgICAgIGlmICh1bnNpZ25lZCkgewogICAgICAgICAgdmFsdWUgPj4+PSAwOwogICAgICAgICAgaWYgKGNhY2hlID0gMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikgewogICAgICAgICAgICBjYWNoZWRPYmogPSBVSU5UX0NBQ0hFW3ZhbHVlXTsKICAgICAgICAgICAgaWYgKGNhY2hlZE9iaikKICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqOwogICAgICAgICAgfQogICAgICAgICAgb2JqID0gZnJvbUJpdHModmFsdWUsICh2YWx1ZSB8IDApIDwgMCA/IC0xIDogMCwgdHJ1ZSk7CiAgICAgICAgICBpZiAoY2FjaGUpCiAgICAgICAgICAgIFVJTlRfQ0FDSEVbdmFsdWVdID0gb2JqOwogICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFsdWUgfD0gMDsKICAgICAgICAgIGlmIChjYWNoZSA9IC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpIHsKICAgICAgICAgICAgY2FjaGVkT2JqID0gSU5UX0NBQ0hFW3ZhbHVlXTsKICAgICAgICAgICAgaWYgKGNhY2hlZE9iaikKICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqOwogICAgICAgICAgfQogICAgICAgICAgb2JqID0gZnJvbUJpdHModmFsdWUsIHZhbHVlIDwgMCA/IC0xIDogMCwgZmFsc2UpOwogICAgICAgICAgaWYgKGNhY2hlKQogICAgICAgICAgICBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqOwogICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbUludCA9IGZyb21JbnQ7CiAgICAgIGZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7CiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkKICAgICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICBpZiAodW5zaWduZWQpIHsKICAgICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICAgIHJldHVybiBVWkVSTzsKICAgICAgICAgIGlmICh2YWx1ZSA+PSBUV09fUFdSXzY0X0RCTCkKICAgICAgICAgICAgcmV0dXJuIE1BWF9VTlNJR05FRF9WQUxVRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHZhbHVlIDw9IC1UV09fUFdSXzYzX0RCTCkKICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsKICAgICAgICAgIGlmICh2YWx1ZSArIDEgPj0gVFdPX1BXUl82M19EQkwpCiAgICAgICAgICAgIHJldHVybiBNQVhfVkFMVUU7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICByZXR1cm4gZnJvbU51bWJlcigtdmFsdWUsIHVuc2lnbmVkKS5uZWcoKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModmFsdWUgJSBUV09fUFdSXzMyX0RCTCB8IDAsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwgfCAwLCB1bnNpZ25lZCk7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbU51bWJlciA9IGZyb21OdW1iZXI7CiAgICAgIGZ1bmN0aW9uIGZyb21CaXRzKGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCkgewogICAgICAgIHJldHVybiBuZXcgTG9uZzQobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTsKICAgICAgfQogICAgICBMb25nNC5mcm9tQml0cyA9IGZyb21CaXRzOwogICAgICB2YXIgcG93X2RibCA9IE1hdGgucG93OwogICAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0ciwgdW5zaWduZWQsIHJhZGl4KSB7CiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDApCiAgICAgICAgICB0aHJvdyBFcnJvcigiZW1wdHkgc3RyaW5nIik7CiAgICAgICAgaWYgKHN0ciA9PT0gIk5hTiIgfHwgc3RyID09PSAiSW5maW5pdHkiIHx8IHN0ciA9PT0gIitJbmZpbml0eSIgfHwgc3RyID09PSAiLUluZmluaXR5IikKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICh0eXBlb2YgdW5zaWduZWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICByYWRpeCA9IHVuc2lnbmVkLCB1bnNpZ25lZCA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1bnNpZ25lZCA9ICEhdW5zaWduZWQ7CiAgICAgICAgfQogICAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7CiAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KQogICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigicmFkaXgiKTsKICAgICAgICB2YXIgcDsKICAgICAgICBpZiAoKHAgPSBzdHIuaW5kZXhPZigiLSIpKSA+IDApCiAgICAgICAgICB0aHJvdyBFcnJvcigiaW50ZXJpb3IgaHlwaGVuIik7CiAgICAgICAgZWxzZSBpZiAocCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgdW5zaWduZWQsIHJhZGl4KS5uZWcoKTsKICAgICAgICB9CiAgICAgICAgdmFyIHJhZGl4VG9Qb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgOCkpOwogICAgICAgIHZhciByZXN1bHQgPSBaRVJPOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSA4KSB7CiAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKDgsIHN0ci5sZW5ndGggLSBpKSwgdmFsdWUgPSBwYXJzZUludChzdHIuc3Vic3RyaW5nKGksIGkgKyBzaXplKSwgcmFkaXgpOwogICAgICAgICAgaWYgKHNpemUgPCA4KSB7CiAgICAgICAgICAgIHZhciBwb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgc2l6ZSkpOwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubXVsKHBvd2VyKS5hZGQoZnJvbU51bWJlcih2YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChyYWRpeFRvUG93ZXIpOwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVzdWx0LnVuc2lnbmVkID0gdW5zaWduZWQ7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBMb25nNC5mcm9tU3RyaW5nID0gZnJvbVN0cmluZzsKICAgICAgZnVuY3Rpb24gZnJvbVZhbHVlKHZhbCwgdW5zaWduZWQpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gIm51bWJlciIpCiAgICAgICAgICByZXR1cm4gZnJvbU51bWJlcih2YWwsIHVuc2lnbmVkKTsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gInN0cmluZyIpCiAgICAgICAgICByZXR1cm4gZnJvbVN0cmluZyh2YWwsIHVuc2lnbmVkKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModmFsLmxvdywgdmFsLmhpZ2gsIHR5cGVvZiB1bnNpZ25lZCA9PT0gImJvb2xlYW4iID8gdW5zaWduZWQgOiB2YWwudW5zaWduZWQpOwogICAgICB9CiAgICAgIExvbmc0LmZyb21WYWx1ZSA9IGZyb21WYWx1ZTsKICAgICAgdmFyIFRXT19QV1JfMTZfREJMID0gMSA8PCAxNjsKICAgICAgdmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDsKICAgICAgdmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDsKICAgICAgdmFyIFRXT19QV1JfNjRfREJMID0gVFdPX1BXUl8zMl9EQkwgKiBUV09fUFdSXzMyX0RCTDsKICAgICAgdmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyOwogICAgICB2YXIgVFdPX1BXUl8yNCA9IGZyb21JbnQoVFdPX1BXUl8yNF9EQkwpOwogICAgICB2YXIgWkVSTyA9IGZyb21JbnQoMCk7CiAgICAgIExvbmc0LlpFUk8gPSBaRVJPOwogICAgICB2YXIgVVpFUk8gPSBmcm9tSW50KDAsIHRydWUpOwogICAgICBMb25nNC5VWkVSTyA9IFVaRVJPOwogICAgICB2YXIgT05FID0gZnJvbUludCgxKTsKICAgICAgTG9uZzQuT05FID0gT05FOwogICAgICB2YXIgVU9ORSA9IGZyb21JbnQoMSwgdHJ1ZSk7CiAgICAgIExvbmc0LlVPTkUgPSBVT05FOwogICAgICB2YXIgTkVHX09ORSA9IGZyb21JbnQoLTEpOwogICAgICBMb25nNC5ORUdfT05FID0gTkVHX09ORTsKICAgICAgdmFyIE1BWF9WQUxVRSA9IGZyb21CaXRzKDQyOTQ5NjcyOTUgfCAwLCAyMTQ3NDgzNjQ3IHwgMCwgZmFsc2UpOwogICAgICBMb25nNC5NQVhfVkFMVUUgPSBNQVhfVkFMVUU7CiAgICAgIHZhciBNQVhfVU5TSUdORURfVkFMVUUgPSBmcm9tQml0cyg0Mjk0OTY3Mjk1IHwgMCwgNDI5NDk2NzI5NSB8IDAsIHRydWUpOwogICAgICBMb25nNC5NQVhfVU5TSUdORURfVkFMVUUgPSBNQVhfVU5TSUdORURfVkFMVUU7CiAgICAgIHZhciBNSU5fVkFMVUUgPSBmcm9tQml0cygwLCAyMTQ3NDgzNjQ4IHwgMCwgZmFsc2UpOwogICAgICBMb25nNC5NSU5fVkFMVUUgPSBNSU5fVkFMVUU7CiAgICAgIHZhciBMb25nUHJvdG90eXBlID0gTG9uZzQucHJvdG90eXBlOwogICAgICBMb25nUHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gdG9JbnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyB0aGlzLmxvdyA+Pj4gMCA6IHRoaXMubG93OwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIyKCkgewogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuICh0aGlzLmhpZ2ggPj4+IDApICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkgewogICAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7CiAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KQogICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigicmFkaXgiKTsKICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiAiMCI7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7CiAgICAgICAgICAgIHZhciByYWRpeExvbmcgPSBmcm9tTnVtYmVyKHJhZGl4KSwgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSwgcmVtMSA9IGRpdi5tdWwocmFkaXhMb25nKS5zdWIodGhpcyk7CiAgICAgICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtMS50b0ludCgpLnRvU3RyaW5nKHJhZGl4KTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gIi0iICsgdGhpcy5uZWcoKS50b1N0cmluZyhyYWRpeCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSwgcmVtID0gdGhpczsKICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksIGludHZhbCA9IHJlbS5zdWIocmVtRGl2Lm11bChyYWRpeFRvUG93ZXIpKS50b0ludCgpID4+PiAwLCBkaWdpdHMgPSBpbnR2YWwudG9TdHJpbmcocmFkaXgpOwogICAgICAgICAgcmVtID0gcmVtRGl2OwogICAgICAgICAgaWYgKHJlbS5pc1plcm8oKSkKICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDYpCiAgICAgICAgICAgICAgZGlnaXRzID0gIjAiICsgZGlnaXRzOwogICAgICAgICAgICByZXN1bHQgPSAiIiArIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRIaWdoQml0c1Vuc2lnbmVkKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TG93Qml0cyA9IGZ1bmN0aW9uIGdldExvd0JpdHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubG93OwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5sb3cgPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TnVtQml0c0FicyA9IGZ1bmN0aW9uIGdldE51bUJpdHNBYnMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgcmV0dXJuIHRoaXMuZXEoTUlOX1ZBTFVFKSA/IDY0IDogdGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7CiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaGlnaCAhPSAwID8gdGhpcy5oaWdoIDogdGhpcy5sb3c7CiAgICAgICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKQogICAgICAgICAgaWYgKCh2YWwgJiAxIDw8IGJpdCkgIT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmVxeiA9IExvbmdQcm90b3R5cGUuaXNaZXJvOwogICAgICBMb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkgewogICAgICAgIHJldHVybiAhdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiBpc1Bvc2l0aXZlKCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkICE9PSBvdGhlci51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPj4+IDMxID09PSAxICYmIG90aGVyLmhpZ2ggPj4+IDMxID09PSAxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5lcSA9IExvbmdQcm90b3R5cGUuZXF1YWxzOwogICAgICBMb25nUHJvdG90eXBlLm5vdEVxdWFscyA9IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikgewogICAgICAgIHJldHVybiAhdGhpcy5lcShvdGhlcik7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVxID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7CiAgICAgIExvbmdQcm90b3R5cGUubmUgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFsczsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbiA9IGZ1bmN0aW9uIGxlc3NUaGFuKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbjsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBsZXNzVGhhbk9yRXF1YWwob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wKG90aGVyKSA8PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmxlID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWw7CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbihvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpID4gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPj0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLmVxKG90aGVyKSkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksIG90aGVyTmVnID0gb3RoZXIuaXNOZWdhdGl2ZSgpOwogICAgICAgIGlmICh0aGlzTmVnICYmICFvdGhlck5lZykKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAoIXRoaXNOZWcgJiYgb3RoZXJOZWcpCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpcy5zdWIob3RoZXIpLmlzTmVnYXRpdmUoKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gb3RoZXIuaGlnaCA+Pj4gMCA+IHRoaXMuaGlnaCA+Pj4gMCB8fCBvdGhlci5oaWdoID09PSB0aGlzLmhpZ2ggJiYgb3RoZXIubG93ID4+PiAwID4gdGhpcy5sb3cgPj4+IDAgPyAtMSA6IDE7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKE9ORSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVnID0gTG9uZ1Byb3RvdHlwZS5uZWdhdGU7CiAgICAgIExvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkgewogICAgICAgIGlmICghaXNMb25nKGFkZGVuZCkpCiAgICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTsKICAgICAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjsKICAgICAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgNjU1MzU7CiAgICAgICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjsKICAgICAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiA2NTUzNTsKICAgICAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBhZGRlbmQubG93ID4+PiAxNjsKICAgICAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwOwogICAgICAgIGMwMCArPSBhMDAgKyBiMDA7CiAgICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7CiAgICAgICAgYzAwICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMTYgKyBiMTY7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMzIgKyBiMzI7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGM0OCArPSBhNDggKyBiNDg7CiAgICAgICAgYzQ4ICY9IDY1NTM1OwogICAgICAgIHJldHVybiBmcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChzdWJ0cmFoZW5kKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoc3VidHJhaGVuZCkpCiAgICAgICAgICBzdWJ0cmFoZW5kID0gZnJvbVZhbHVlKHN1YnRyYWhlbmQpOwogICAgICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZygpKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zdWIgPSBMb25nUHJvdG90eXBlLnN1YnRyYWN0OwogICAgICBMb25nUHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gbXVsdGlwbHkobXVsdGlwbGllcikgewogICAgICAgIGlmICh0aGlzLmlzWmVybygpKQogICAgICAgICAgcmV0dXJuIFpFUk87CiAgICAgICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpCiAgICAgICAgICBtdWx0aXBsaWVyID0gZnJvbVZhbHVlKG11bHRpcGxpZXIpOwogICAgICAgIGlmICh3YXNtKSB7CiAgICAgICAgICB2YXIgbG93ID0gd2FzbS5tdWwodGhpcy5sb3csIHRoaXMuaGlnaCwgbXVsdGlwbGllci5sb3csIG11bHRpcGxpZXIuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpCiAgICAgICAgICByZXR1cm4gbXVsdGlwbGllci5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTzsKICAgICAgICBpZiAobXVsdGlwbGllci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkubXVsKG11bHRpcGxpZXIpLm5lZygpOwogICAgICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICByZXR1cm4gdGhpcy5tdWwobXVsdGlwbGllci5uZWcoKSkubmVnKCk7CiAgICAgICAgaWYgKHRoaXMubHQoVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sdChUV09fUFdSXzI0KSkKICAgICAgICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMudG9OdW1iZXIoKSAqIG11bHRpcGxpZXIudG9OdW1iZXIoKSwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBtdWx0aXBsaWVyLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGM0OCA9IDAsIGMzMiA9IDAsIGMxNiA9IDAsIGMwMCA9IDA7CiAgICAgICAgYzAwICs9IGEwMCAqIGIwMDsKICAgICAgICBjMTYgKz0gYzAwID4+PiAxNjsKICAgICAgICBjMDAgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGExNiAqIGIwMDsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGEwMCAqIGIxNjsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEzMiAqIGIwMDsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGExNiAqIGIxNjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEwMCAqIGIzMjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODsKICAgICAgICBjNDggJj0gNjU1MzU7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGMxNiA8PCAxNiB8IGMwMCwgYzQ4IDw8IDE2IHwgYzMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tdWwgPSBMb25nUHJvdG90eXBlLm11bHRpcGx5OwogICAgICBMb25nUHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShkaXZpc29yKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpCiAgICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpOwogICAgICAgIGlmIChkaXZpc29yLmlzWmVybygpKQogICAgICAgICAgdGhyb3cgRXJyb3IoImRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA9PT0gLTIxNDc0ODM2NDggJiYgZGl2aXNvci5sb3cgPT09IC0xICYmIGRpdmlzb3IuaGlnaCA9PT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLmRpdl91IDogd2FzbS5kaXZfcykodGhpcy5sb3csIHRoaXMuaGlnaCwgZGl2aXNvci5sb3csIGRpdmlzb3IuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPOwogICAgICAgIHZhciBhcHByb3gsIHJlbSwgcmVzOwogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkgewogICAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5lcShPTkUpIHx8IGRpdmlzb3IuZXEoTkVHX09ORSkpCiAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsKICAgICAgICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICAgIHJldHVybiBPTkU7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciBoYWxmVGhpcyA9IHRoaXMuc2hyKDEpOwogICAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGwoMSk7CiAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IuaXNOZWdhdGl2ZSgpID8gT05FIDogTkVHX09ORTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVtID0gdGhpcy5zdWIoZGl2aXNvci5tdWwoYXBwcm94KSk7CiAgICAgICAgICAgICAgICByZXMgPSBhcHByb3guYWRkKHJlbS5kaXYoZGl2aXNvcikpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWcoKSkubmVnKCk7CiAgICAgICAgICByZXMgPSBaRVJPOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpCiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTsKICAgICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMpKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzLnNocnUoMSkpKQogICAgICAgICAgICByZXR1cm4gVU9ORTsKICAgICAgICAgIHJlcyA9IFVaRVJPOwogICAgICAgIH0KICAgICAgICByZW0gPSB0aGlzOwogICAgICAgIHdoaWxlIChyZW0uZ3RlKGRpdmlzb3IpKSB7CiAgICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7CiAgICAgICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLCBkZWx0YSA9IGxvZzIgPD0gNDggPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLCBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCksIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7CiAgICAgICAgICB3aGlsZSAoYXBwcm94UmVtLmlzTmVnYXRpdmUoKSB8fCBhcHByb3hSZW0uZ3QocmVtKSkgewogICAgICAgICAgICBhcHByb3ggLT0gZGVsdGE7CiAgICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94LCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpCiAgICAgICAgICAgIGFwcHJveFJlcyA9IE9ORTsKICAgICAgICAgIHJlcyA9IHJlcy5hZGQoYXBwcm94UmVzKTsKICAgICAgICAgIHJlbSA9IHJlbS5zdWIoYXBwcm94UmVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5kaXYgPSBMb25nUHJvdG90eXBlLmRpdmlkZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tb2R1bG8gPSBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikgewogICAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKQogICAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5yZW1fdSA6IHdhc20ucmVtX3MpKHRoaXMubG93LCB0aGlzLmhpZ2gsIGRpdmlzb3IubG93LCBkaXZpc29yLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubW9kID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUucmVtID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkgewogICAgICAgIHJldHVybiBmcm9tQml0cyh+dGhpcy5sb3csIH50aGlzLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZChvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IF4gb3RoZXIubG93LCB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQgPSBmdW5jdGlvbiBzaGlmdExlZnQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgdGhpcy5oaWdoIDw8IG51bUJpdHMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoMCwgdGhpcy5sb3cgPDwgbnVtQml0cyAtIDMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gc2hpZnRSaWdodChudW1CaXRzKSB7CiAgICAgICAgaWYgKGlzTG9uZyhudW1CaXRzKSkKICAgICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7CiAgICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMikKICAgICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyA+Pj4gbnVtQml0cyB8IHRoaXMuaGlnaCA8PCAzMiAtIG51bUJpdHMsIHRoaXMuaGlnaCA+PiBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoID4+IG51bUJpdHMgLSAzMiwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnNociA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQgPSBmdW5jdGlvbiBzaGlmdFJpZ2h0VW5zaWduZWQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIG51bUJpdHMgJj0gNjM7CiAgICAgICAgaWYgKG51bUJpdHMgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIHsKICAgICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoOwogICAgICAgICAgaWYgKG51bUJpdHMgPCAzMikgewogICAgICAgICAgICB2YXIgbG93ID0gdGhpcy5sb3c7CiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhsb3cgPj4+IG51bUJpdHMgfCBoaWdoIDw8IDMyIC0gbnVtQml0cywgaGlnaCA+Pj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG51bUJpdHMgPT09IDMyKQogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCwgMCwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiBudW1CaXRzIC0gMzIsIDAsIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hyX3UgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDsKICAgICAgTG9uZ1Byb3RvdHlwZS50b1NpZ25lZCA9IGZ1bmN0aW9uIHRvU2lnbmVkKCkgewogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7CiAgICAgICAgaWYgKHRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgdHJ1ZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlcyA9IGZ1bmN0aW9uIHRvQnl0ZXMobGUpIHsKICAgICAgICByZXR1cm4gbGUgPyB0aGlzLnRvQnl0ZXNMRSgpIDogdGhpcy50b0J5dGVzQkUoKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7CiAgICAgICAgdmFyIGhpID0gdGhpcy5oaWdoLCBsbyA9IHRoaXMubG93OwogICAgICAgIHJldHVybiBbCiAgICAgICAgICBsbyAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDE2ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDI0LAogICAgICAgICAgaGkgJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGhpID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGhpID4+PiAyNAogICAgICAgIF07CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0JFID0gZnVuY3Rpb24gdG9CeXRlc0JFKCkgewogICAgICAgIHZhciBoaSA9IHRoaXMuaGlnaCwgbG8gPSB0aGlzLmxvdzsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgaGkgPj4+IDI0LAogICAgICAgICAgaGkgPj4+IDE2ICYgMjU1LAogICAgICAgICAgaGkgPj4+IDggJiAyNTUsCiAgICAgICAgICBoaSAmIDI1NSwKICAgICAgICAgIGxvID4+PiAyNCwKICAgICAgICAgIGxvID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gJiAyNTUKICAgICAgICBdOwogICAgICB9OwogICAgICBMb25nNC5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMyKGJ5dGVzLCB1bnNpZ25lZCwgbGUpIHsKICAgICAgICByZXR1cm4gbGUgPyBMb25nNC5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZzQuZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzTEUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzBdIHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbM10gPDwgMjQsIGJ5dGVzWzRdIHwgYnl0ZXNbNV0gPDwgOCB8IGJ5dGVzWzZdIDw8IDE2IHwgYnl0ZXNbN10gPDwgMjQsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzRdIDw8IDI0IHwgYnl0ZXNbNV0gPDwgMTYgfCBieXRlc1s2XSA8PCA4IHwgYnl0ZXNbN10sIGJ5dGVzWzBdIDw8IDI0IHwgYnl0ZXNbMV0gPDwgMTYgfCBieXRlc1syXSA8PCA4IHwgYnl0ZXNbM10sIHVuc2lnbmVkKTsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2lzLW9ic2VydmFibGVAMi4xLjAvbm9kZV9tb2R1bGVzL2lzLW9ic2VydmFibGUvaW5kZXguanMKICB2YXIgcmVxdWlyZV9pc19vYnNlcnZhYmxlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2lzLW9ic2VydmFibGVAMi4xLjAvbm9kZV9tb2R1bGVzL2lzLW9ic2VydmFibGUvaW5kZXguanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSAodmFsdWUpID0+IHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgU3ltYm9sLm9ic2VydmFibGUgPT09ICJzeW1ib2wiICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wub2JzZXJ2YWJsZV0gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVbU3ltYm9sLm9ic2VydmFibGVdKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsdWVbIkBAb2JzZXJ2YWJsZSJdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlWyJAQG9ic2VydmFibGUiXSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc2VyaWFsaXplcnMuanMKICB2YXIgcmVxdWlyZV9zZXJpYWxpemVycyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc2VyaWFsaXplcnMuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuRGVmYXVsdFNlcmlhbGl6ZXIgPSBleHBvcnRzMi5leHRlbmRTZXJpYWxpemVyID0gdm9pZCAwOwogICAgICBmdW5jdGlvbiBleHRlbmRTZXJpYWxpemVyKGV4dGVuZCwgaW1wbGVtZW50YXRpb24pIHsKICAgICAgICBjb25zdCBmYWxsYmFja0Rlc2VyaWFsaXplciA9IGV4dGVuZC5kZXNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgY29uc3QgZmFsbGJhY2tTZXJpYWxpemVyID0gZXh0ZW5kLnNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmRlc2VyaWFsaXplKG1lc3NhZ2UsIGZhbGxiYWNrRGVzZXJpYWxpemVyKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLnNlcmlhbGl6ZShpbnB1dCwgZmFsbGJhY2tTZXJpYWxpemVyKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIGV4cG9ydHMyLmV4dGVuZFNlcmlhbGl6ZXIgPSBleHRlbmRTZXJpYWxpemVyOwogICAgICB2YXIgRGVmYXVsdEVycm9yU2VyaWFsaXplciA9IHsKICAgICAgICBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihFcnJvcihtZXNzYWdlLm1lc3NhZ2UpLCB7CiAgICAgICAgICAgIG5hbWU6IG1lc3NhZ2UubmFtZSwKICAgICAgICAgICAgc3RhY2s6IG1lc3NhZ2Uuc3RhY2sKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplKGVycm9yKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBfX2Vycm9yX21hcmtlcjogIiQkZXJyb3IiLAogICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLAogICAgICAgICAgICBuYW1lOiBlcnJvci5uYW1lLAogICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2sKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgaXNTZXJpYWxpemVkRXJyb3IgPSAodGhpbmcpID0+IHRoaW5nICYmIHR5cGVvZiB0aGluZyA9PT0gIm9iamVjdCIgJiYgIl9fZXJyb3JfbWFya2VyIiBpbiB0aGluZyAmJiB0aGluZy5fX2Vycm9yX21hcmtlciA9PT0gIiQkZXJyb3IiOwogICAgICBleHBvcnRzMi5EZWZhdWx0U2VyaWFsaXplciA9IHsKICAgICAgICBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgICBpZiAoaXNTZXJpYWxpemVkRXJyb3IobWVzc2FnZSkpIHsKICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFcnJvclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobWVzc2FnZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZShpbnB1dCkgewogICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFcnJvclNlcmlhbGl6ZXIuc2VyaWFsaXplKGlucHV0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBpbnB1dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvY29tbW9uLmpzCiAgdmFyIHJlcXVpcmVfY29tbW9uMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvY29tbW9uLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLnNlcmlhbGl6ZSA9IGV4cG9ydHMyLmRlc2VyaWFsaXplID0gZXhwb3J0czIucmVnaXN0ZXJTZXJpYWxpemVyID0gdm9pZCAwOwogICAgICB2YXIgc2VyaWFsaXplcnNfMSA9IHJlcXVpcmVfc2VyaWFsaXplcnMoKTsKICAgICAgdmFyIHJlZ2lzdGVyZWRTZXJpYWxpemVyID0gc2VyaWFsaXplcnNfMS5EZWZhdWx0U2VyaWFsaXplcjsKICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJTZXJpYWxpemVyMihzZXJpYWxpemVyKSB7CiAgICAgICAgcmVnaXN0ZXJlZFNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyc18xLmV4dGVuZFNlcmlhbGl6ZXIocmVnaXN0ZXJlZFNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLnJlZ2lzdGVyU2VyaWFsaXplciA9IHJlZ2lzdGVyU2VyaWFsaXplcjI7CiAgICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobWVzc2FnZSk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuZGVzZXJpYWxpemUgPSBkZXNlcmlhbGl6ZTsKICAgICAgZnVuY3Rpb24gc2VyaWFsaXplKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRTZXJpYWxpemVyLnNlcmlhbGl6ZShpbnB1dCk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuc2VyaWFsaXplID0gc2VyaWFsaXplOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3N5bWJvbHMuanMKICB2YXIgcmVxdWlyZV9zeW1ib2xzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC9zeW1ib2xzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLiR3b3JrZXIgPSBleHBvcnRzMi4kdHJhbnNmZXJhYmxlID0gZXhwb3J0czIuJHRlcm1pbmF0ZSA9IGV4cG9ydHMyLiRldmVudHMgPSBleHBvcnRzMi4kZXJyb3JzID0gdm9pZCAwOwogICAgICBleHBvcnRzMi4kZXJyb3JzID0gU3ltYm9sKCJ0aHJlYWQuZXJyb3JzIik7CiAgICAgIGV4cG9ydHMyLiRldmVudHMgPSBTeW1ib2woInRocmVhZC5ldmVudHMiKTsKICAgICAgZXhwb3J0czIuJHRlcm1pbmF0ZSA9IFN5bWJvbCgidGhyZWFkLnRlcm1pbmF0ZSIpOwogICAgICBleHBvcnRzMi4kdHJhbnNmZXJhYmxlID0gU3ltYm9sKCJ0aHJlYWQudHJhbnNmZXJhYmxlIik7CiAgICAgIGV4cG9ydHMyLiR3b3JrZXIgPSBTeW1ib2woInRocmVhZC53b3JrZXIiKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90cmFuc2ZlcmFibGUuanMKICB2YXIgcmVxdWlyZV90cmFuc2ZlcmFibGUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3RyYW5zZmVyYWJsZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5UcmFuc2ZlciA9IGV4cG9ydHMyLmlzVHJhbnNmZXJEZXNjcmlwdG9yID0gdm9pZCAwOwogICAgICB2YXIgc3ltYm9sc18xID0gcmVxdWlyZV9zeW1ib2xzKCk7CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJhYmxlKHRoaW5nKSB7CiAgICAgICAgaWYgKCF0aGluZyB8fCB0eXBlb2YgdGhpbmcgIT09ICJvYmplY3QiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJEZXNjcmlwdG9yKHRoaW5nKSB7CiAgICAgICAgcmV0dXJuIHRoaW5nICYmIHR5cGVvZiB0aGluZyA9PT0gIm9iamVjdCIgJiYgdGhpbmdbc3ltYm9sc18xLiR0cmFuc2ZlcmFibGVdOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmlzVHJhbnNmZXJEZXNjcmlwdG9yID0gaXNUcmFuc2ZlckRlc2NyaXB0b3I7CiAgICAgIGZ1bmN0aW9uIFRyYW5zZmVyMihwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKSB7CiAgICAgICAgaWYgKCF0cmFuc2ZlcmFibGVzKSB7CiAgICAgICAgICBpZiAoIWlzVHJhbnNmZXJhYmxlKHBheWxvYWQpKQogICAgICAgICAgICB0aHJvdyBFcnJvcigpOwogICAgICAgICAgdHJhbnNmZXJhYmxlcyA9IFtwYXlsb2FkXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIFtzeW1ib2xzXzEuJHRyYW5zZmVyYWJsZV06IHRydWUsCiAgICAgICAgICBzZW5kOiBwYXlsb2FkLAogICAgICAgICAgdHJhbnNmZXJhYmxlcwogICAgICAgIH07CiAgICAgIH0KICAgICAgZXhwb3J0czIuVHJhbnNmZXIgPSBUcmFuc2ZlcjI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvdHlwZXMvbWVzc2FnZXMuanMKICB2YXIgcmVxdWlyZV9tZXNzYWdlczIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLldvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0czIuTWFzdGVyTWVzc2FnZVR5cGUgPSB2b2lkIDA7CiAgICAgIHZhciBNYXN0ZXJNZXNzYWdlVHlwZTsKICAgICAgKGZ1bmN0aW9uKE1hc3Rlck1lc3NhZ2VUeXBlMikgewogICAgICAgIE1hc3Rlck1lc3NhZ2VUeXBlMlsiY2FuY2VsIl0gPSAiY2FuY2VsIjsKICAgICAgICBNYXN0ZXJNZXNzYWdlVHlwZTJbInJ1biJdID0gInJ1biI7CiAgICAgIH0pKE1hc3Rlck1lc3NhZ2VUeXBlID0gZXhwb3J0czIuTWFzdGVyTWVzc2FnZVR5cGUgfHwgKGV4cG9ydHMyLk1hc3Rlck1lc3NhZ2VUeXBlID0ge30pKTsKICAgICAgdmFyIFdvcmtlck1lc3NhZ2VUeXBlOwogICAgICAoZnVuY3Rpb24oV29ya2VyTWVzc2FnZVR5cGUyKSB7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJlcnJvciJdID0gImVycm9yIjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbImluaXQiXSA9ICJpbml0IjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbInJlc3VsdCJdID0gInJlc3VsdCI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJydW5uaW5nIl0gPSAicnVubmluZyI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJ1bmNhdWdodEVycm9yIl0gPSAidW5jYXVnaHRFcnJvciI7CiAgICAgIH0pKFdvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0czIuV29ya2VyTWVzc2FnZVR5cGUgfHwgKGV4cG9ydHMyLldvcmtlck1lc3NhZ2VUeXBlID0ge30pKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW1wbGVtZW50YXRpb24uYnJvd3Nlci5qcwogIHZhciByZXF1aXJlX2ltcGxlbWVudGF0aW9uX2Jyb3dzZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbXBsZW1lbnRhdGlvbi5icm93c2VyLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBpc1dvcmtlclJ1bnRpbWUgPSBmdW5jdGlvbiBpc1dvcmtlclJ1bnRpbWUyKCkgewogICAgICAgIGNvbnN0IGlzV2luZG93Q29udGV4dCA9IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgV2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiBzZWxmIGluc3RhbmNlb2YgV2luZG93OwogICAgICAgIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgc2VsZi5wb3N0TWVzc2FnZSAmJiAhaXNXaW5kb3dDb250ZXh0ID8gdHJ1ZSA6IGZhbHNlOwogICAgICB9OwogICAgICB2YXIgcG9zdE1lc3NhZ2VUb01hc3RlciA9IGZ1bmN0aW9uIHBvc3RNZXNzYWdlVG9NYXN0ZXIyKGRhdGEsIHRyYW5zZmVyTGlzdCkgewogICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJMaXN0KTsKICAgICAgfTsKICAgICAgdmFyIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMgPSBmdW5jdGlvbiBzdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzMihvbk1lc3NhZ2UpIHsKICAgICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IChtZXNzYWdlRXZlbnQpID0+IHsKICAgICAgICAgIG9uTWVzc2FnZShtZXNzYWdlRXZlbnQuZGF0YSk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHsKICAgICAgICAgIHNlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG1lc3NhZ2VIYW5kbGVyKTsKICAgICAgICB9OwogICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG1lc3NhZ2VIYW5kbGVyKTsKICAgICAgICByZXR1cm4gdW5zdWJzY3JpYmU7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSB7CiAgICAgICAgaXNXb3JrZXJSdW50aW1lLAogICAgICAgIHBvc3RNZXNzYWdlVG9NYXN0ZXIsCiAgICAgICAgc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbmRleC5qcwogIHZhciByZXF1aXJlX3dvcmtlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvd29ya2VyL2luZGV4LmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9fYXdhaXRlciA9IGV4cG9ydHMyICYmIGV4cG9ydHMyLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHsKICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkgewogICAgICAgICAgICByZXNvbHZlKHZhbHVlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yWyJ0aHJvdyJdKHZhbHVlKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgICAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOwogICAgICAgICAgfQogICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICB2YXIgX19pbXBvcnREZWZhdWx0ID0gZXhwb3J0czIgJiYgZXhwb3J0czIuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uKG1vZCkgewogICAgICAgIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7ICJkZWZhdWx0IjogbW9kIH07CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5leHBvc2UgPSBleHBvcnRzMi5pc1dvcmtlclJ1bnRpbWUgPSBleHBvcnRzMi5UcmFuc2ZlciA9IGV4cG9ydHMyLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIGlzX29ic2VydmFibGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2lzX29ic2VydmFibGUoKSk7CiAgICAgIHZhciBjb21tb25fMSA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgdHJhbnNmZXJhYmxlXzEgPSByZXF1aXJlX3RyYW5zZmVyYWJsZSgpOwogICAgICB2YXIgbWVzc2FnZXNfMSA9IHJlcXVpcmVfbWVzc2FnZXMyKCk7CiAgICAgIHZhciBpbXBsZW1lbnRhdGlvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmVfaW1wbGVtZW50YXRpb25fYnJvd3NlcigpKTsKICAgICAgdmFyIGNvbW1vbl8yID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgInJlZ2lzdGVyU2VyaWFsaXplciIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gY29tbW9uXzIucmVnaXN0ZXJTZXJpYWxpemVyOwogICAgICB9IH0pOwogICAgICB2YXIgdHJhbnNmZXJhYmxlXzIgPSByZXF1aXJlX3RyYW5zZmVyYWJsZSgpOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJUcmFuc2ZlciIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlXzIuVHJhbnNmZXI7CiAgICAgIH0gfSk7CiAgICAgIGV4cG9ydHMyLmlzV29ya2VyUnVudGltZSA9IGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWU7CiAgICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTsKICAgICAgdmFyIGFjdGl2ZVN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7CiAgICAgIHZhciBpc01hc3RlckpvYkNhbmNlbE1lc3NhZ2UgPSAodGhpbmcpID0+IHRoaW5nICYmIHRoaW5nLnR5cGUgPT09IG1lc3NhZ2VzXzEuTWFzdGVyTWVzc2FnZVR5cGUuY2FuY2VsOwogICAgICB2YXIgaXNNYXN0ZXJKb2JSdW5NZXNzYWdlID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0aGluZy50eXBlID09PSBtZXNzYWdlc18xLk1hc3Rlck1lc3NhZ2VUeXBlLnJ1bjsKICAgICAgdmFyIGlzT2JzZXJ2YWJsZSA9ICh0aGluZykgPT4gaXNfb2JzZXJ2YWJsZV8xLmRlZmF1bHQodGhpbmcpIHx8IGlzWmVuT2JzZXJ2YWJsZSh0aGluZyk7CiAgICAgIGZ1bmN0aW9uIGlzWmVuT2JzZXJ2YWJsZSh0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmIHR5cGVvZiB0aGluZy5zdWJzY3JpYmUgPT09ICJmdW5jdGlvbiI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVjb25zdHJ1Y3RUcmFuc2Zlcih0aGluZykgewogICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVfMS5pc1RyYW5zZmVyRGVzY3JpcHRvcih0aGluZykgPyB7IHBheWxvYWQ6IHRoaW5nLnNlbmQsIHRyYW5zZmVyYWJsZXM6IHRoaW5nLnRyYW5zZmVyYWJsZXMgfSA6IHsgcGF5bG9hZDogdGhpbmcsIHRyYW5zZmVyYWJsZXM6IHZvaWQgMCB9OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCkgewogICAgICAgIGNvbnN0IGluaXRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5pbml0LAogICAgICAgICAgZXhwb3NlZDogewogICAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3Rlcihpbml0TWVzc2FnZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKSB7CiAgICAgICAgY29uc3QgaW5pdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLmluaXQsCiAgICAgICAgICBleHBvc2VkOiB7CiAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICBtZXRob2RzOiBtZXRob2ROYW1lcwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoaW5pdE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RKb2JFcnJvck1lc3NhZ2UodWlkLCByYXdFcnJvcikgewogICAgICAgIGNvbnN0IHsgcGF5bG9hZDogZXJyb3IsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmF3RXJyb3IpOwogICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHsKICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUuZXJyb3IsCiAgICAgICAgICB1aWQsCiAgICAgICAgICBlcnJvcjogY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoZXJyb3JNZXNzYWdlLCB0cmFuc2ZlcmFibGVzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0Sm9iUmVzdWx0TWVzc2FnZSh1aWQsIGNvbXBsZXRlZCwgcmVzdWx0VmFsdWUpIHsKICAgICAgICBjb25zdCB7IHBheWxvYWQsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmVzdWx0VmFsdWUpOwogICAgICAgIGNvbnN0IHJlc3VsdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJlc3VsdCwKICAgICAgICAgIHVpZCwKICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZWQgPyB0cnVlIDogdm9pZCAwLAogICAgICAgICAgcGF5bG9hZAogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIocmVzdWx0TWVzc2FnZSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdEpvYlN0YXJ0TWVzc2FnZSh1aWQsIHJlc3VsdFR5cGUpIHsKICAgICAgICBjb25zdCBzdGFydE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJ1bm5pbmcsCiAgICAgICAgICB1aWQsCiAgICAgICAgICByZXN1bHRUeXBlCiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihzdGFydE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7CiAgICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUudW5jYXVnaHRFcnJvciwKICAgICAgICAgICAgZXJyb3I6IGNvbW1vbl8xLnNlcmlhbGl6ZShlcnJvcikKICAgICAgICAgIH07CiAgICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihlcnJvck1lc3NhZ2UpOwogICAgICAgIH0gY2F0Y2ggKHN1YkVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJOb3QgcmVwb3J0aW5nIHVuY2F1Z2h0IGVycm9yIGJhY2sgdG8gbWFzdGVyIHRocmVhZCBhcyBpdCBvY2N1cmVkIHdoaWxlIHJlcG9ydGluZyBhbiB1bmNhdWdodCBlcnJvciBhbHJlYWR5LlxuTGF0ZXN0IGVycm9yOiIsIHN1YkVycm9yLCAiXG5PcmlnaW5hbCBlcnJvcjoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJ1bkZ1bmN0aW9uKGpvYlVJRCwgZm4sIGFyZ3MpIHsKICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgICAgbGV0IHN5bmNSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBzeW5jUmVzdWx0ID0gZm4oLi4uYXJncyk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICByZXR1cm4gcG9zdEpvYkVycm9yTWVzc2FnZShqb2JVSUQsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlc3VsdFR5cGUgPSBpc09ic2VydmFibGUoc3luY1Jlc3VsdCkgPyAib2JzZXJ2YWJsZSIgOiAicHJvbWlzZSI7CiAgICAgICAgICBwb3N0Sm9iU3RhcnRNZXNzYWdlKGpvYlVJRCwgcmVzdWx0VHlwZSk7CiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHN5bmNSZXN1bHQpKSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN5bmNSZXN1bHQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCBmYWxzZSwgY29tbW9uXzEuc2VyaWFsaXplKHZhbHVlKSksIChlcnJvcikgPT4gewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICAgICAgcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCB0cnVlKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5zZXQoam9iVUlELCBzdWJzY3JpcHRpb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBzeW5jUmVzdWx0OwogICAgICAgICAgICAgIHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgdHJ1ZSwgY29tbW9uXzEuc2VyaWFsaXplKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGV4cG9zZTIoZXhwb3NlZCkgewogICAgICAgIGlmICghaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIGluIHRoZSBtYXN0ZXIgdGhyZWFkLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoZXhwb3NlQ2FsbGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGlzIG5vdCBwb3NzaWJsZS4gUGFzcyBhbiBvYmplY3QgdG8gZXhwb3NlKCkgaWYgeW91IHdhbnQgdG8gZXhwb3NlIG11bHRpcGxlIGZ1bmN0aW9ucy4iKTsKICAgICAgICB9CiAgICAgICAgZXhwb3NlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBpZiAodHlwZW9mIGV4cG9zZWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgICBpZiAoaXNNYXN0ZXJKb2JSdW5NZXNzYWdlKG1lc3NhZ2VEYXRhKSAmJiAhbWVzc2FnZURhdGEubWV0aG9kKSB7CiAgICAgICAgICAgICAgcnVuRnVuY3Rpb24obWVzc2FnZURhdGEudWlkLCBleHBvc2VkLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3NlZCA9PT0gIm9iamVjdCIgJiYgZXhwb3NlZCkgewogICAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMoKG1lc3NhZ2VEYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChpc01hc3RlckpvYlJ1bk1lc3NhZ2UobWVzc2FnZURhdGEpICYmIG1lc3NhZ2VEYXRhLm1ldGhvZCkgewogICAgICAgICAgICAgIHJ1bkZ1bmN0aW9uKG1lc3NhZ2VEYXRhLnVpZCwgZXhwb3NlZFttZXNzYWdlRGF0YS5tZXRob2RdLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3NlZCkuZmlsdGVyKChrZXkpID0+IHR5cGVvZiBleHBvc2VkW2tleV0gPT09ICJmdW5jdGlvbiIpOwogICAgICAgICAgcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4cG9zZSgpLiBFeHBlY3RlZCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCwgZ290OiAke2V4cG9zZWR9YCk7CiAgICAgICAgfQogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgaWYgKGlzTWFzdGVySm9iQ2FuY2VsTWVzc2FnZShtZXNzYWdlRGF0YSkpIHsKICAgICAgICAgICAgY29uc3Qgam9iVUlEID0gbWVzc2FnZURhdGEudWlkOwogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhY3RpdmVTdWJzY3JpcHRpb25zLmdldChqb2JVSUQpOwogICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmV4cG9zZSA9IGV4cG9zZTI7CiAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHNlbGYuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIiAmJiBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuaXNXb3JrZXJSdW50aW1lKCkpIHsKICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShldmVudC5lcnJvciB8fCBldmVudCksIDI1MCk7CiAgICAgICAgfSk7CiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJ1bmhhbmRsZWRyZWplY3Rpb24iLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IGVycm9yID0gZXZlbnQucmVhc29uOwogICAgICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAic3RyaW5nIikgewogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvciksIDI1MCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gImZ1bmN0aW9uIiAmJiBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuaXNXb3JrZXJSdW50aW1lKCkpIHsKICAgICAgICBwcm9jZXNzLm9uKCJ1bmNhdWdodEV4Y2VwdGlvbiIsIChlcnJvcikgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpLCAyNTApOwogICAgICAgIH0pOwogICAgICAgIHByb2Nlc3Mub24oInVuaGFuZGxlZFJlamVjdGlvbiIsIChlcnJvcikgPT4gewogICAgICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAic3RyaW5nIikgewogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvciksIDI1MCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9hdXRvU3FsLmpzCiAgdmFyIHJlcXVpcmVfYXV0b1NxbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiZWRAMi4xLjIvbm9kZV9tb2R1bGVzL0BnbW9kL2JlZC9lc20vYXV0b1NxbC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIHBlZyRzdWJjbGFzcyhjaGlsZCwgcGFyZW50KSB7CiAgICAgICAgZnVuY3Rpb24gY3RvcigpIHsKICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsKICAgICAgICB9CiAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOwogICAgICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIGV4cGVjdGVkLCBmb3VuZCwgbG9jYXRpb24pIHsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDsKICAgICAgICB0aGlzLmZvdW5kID0gZm91bmQ7CiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgIHRoaXMubmFtZSA9ICJTeW50YXhFcnJvciI7CiAgICAgICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgcGVnJFN5bnRheEVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGVnJHN1YmNsYXNzKHBlZyRTeW50YXhFcnJvciwgRXJyb3IpOwogICAgICBwZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlID0gZnVuY3Rpb24oZXhwZWN0ZWQsIGZvdW5kKSB7CiAgICAgICAgdmFyIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyA9IHsKICAgICAgICAgIGxpdGVyYWw6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAnIicgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgJyInOwogICAgICAgICAgfSwKICAgICAgICAgICJjbGFzcyI6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHZhciBlc2NhcGVkUGFydHMgPSAiIiwgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGF0aW9uLnBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgZXNjYXBlZFBhcnRzICs9IGV4cGVjdGF0aW9uLnBhcnRzW2ldIGluc3RhbmNlb2YgQXJyYXkgPyBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXVswXSkgKyAiLSIgKyBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXVsxXSkgOiBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICJbIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/ICJeIiA6ICIiKSArIGVzY2FwZWRQYXJ0cyArICJdIjsKICAgICAgICAgIH0sCiAgICAgICAgICBhbnk6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAiYW55IGNoYXJhY3RlciI7CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiBmdW5jdGlvbihleHBlY3RhdGlvbikgewogICAgICAgICAgICByZXR1cm4gImVuZCBvZiBpbnB1dCI7CiAgICAgICAgICB9LAogICAgICAgICAgb3RoZXI6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGZ1bmN0aW9uIGhleChjaCkgewogICAgICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGxpdGVyYWxFc2NhcGUocykgewogICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFwvZywgIlxcXFwiKS5yZXBsYWNlKC8iL2csICdcXCInKS5yZXBsYWNlKC9cMC9nLCAiXFwwIikucmVwbGFjZSgvXHQvZywgIlxcdCIpLnJlcGxhY2UoL1xuL2csICJcXG4iKS5yZXBsYWNlKC9cci9nLCAiXFxyIikucmVwbGFjZSgvW1x4MDAtXHgwRl0vZywgZnVuY3Rpb24oY2gpIHsKICAgICAgICAgICAgcmV0dXJuICJcXHgwIiArIGhleChjaCk7CiAgICAgICAgICB9KS5yZXBsYWNlKC9bXHgxMC1ceDFGXHg3Ri1ceDlGXS9nLCBmdW5jdGlvbihjaCkgewogICAgICAgICAgICByZXR1cm4gIlxceCIgKyBoZXgoY2gpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHsKICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1xcL2csICJcXFxcIikucmVwbGFjZSgvXF0vZywgIlxcXSIpLnJlcGxhY2UoL1xeL2csICJcXF4iKS5yZXBsYWNlKC8tL2csICJcXC0iKS5yZXBsYWNlKC9cMC9nLCAiXFwwIikucmVwbGFjZSgvXHQvZywgIlxcdCIpLnJlcGxhY2UoL1xuL2csICJcXG4iKS5yZXBsYWNlKC9cci9nLCAiXFxyIikucmVwbGFjZSgvW1x4MDAtXHgwRl0vZywgZnVuY3Rpb24oY2gpIHsKICAgICAgICAgICAgcmV0dXJuICJcXHgwIiArIGhleChjaCk7CiAgICAgICAgICB9KS5yZXBsYWNlKC9bXHgxMC1ceDFGXHg3Ri1ceDlGXS9nLCBmdW5jdGlvbihjaCkgewogICAgICAgICAgICByZXR1cm4gIlxceCIgKyBoZXgoY2gpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb24pIHsKICAgICAgICAgIHJldHVybiBERVNDUklCRV9FWFBFQ1RBVElPTl9GTlNbZXhwZWN0YXRpb24udHlwZV0oZXhwZWN0YXRpb24pOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMikgewogICAgICAgICAgdmFyIGRlc2NyaXB0aW9ucyA9IG5ldyBBcnJheShleHBlY3RlZDIubGVuZ3RoKSwgaSwgajsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHBlY3RlZDIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZGVzY3JpcHRpb25zW2ldID0gZGVzY3JpYmVFeHBlY3RhdGlvbihleHBlY3RlZDJbaV0pOwogICAgICAgICAgfQogICAgICAgICAgZGVzY3JpcHRpb25zLnNvcnQoKTsKICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaSAtIDFdICE9PSBkZXNjcmlwdGlvbnNbaV0pIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tqXSA9IGRlc2NyaXB0aW9uc1tpXTsKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb25zLmxlbmd0aCA9IGo7CiAgICAgICAgICB9CiAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdICsgIiBvciAiICsgZGVzY3JpcHRpb25zWzFdOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oIiwgIikgKyAiLCBvciAiICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZGVzY3JpYmVGb3VuZChmb3VuZDIpIHsKICAgICAgICAgIHJldHVybiBmb3VuZDIgPyAnIicgKyBsaXRlcmFsRXNjYXBlKGZvdW5kMikgKyAnIicgOiAiZW5kIG9mIGlucHV0IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJFeHBlY3RlZCAiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyAiIGJ1dCAiICsgZGVzY3JpYmVGb3VuZChmb3VuZCkgKyAiIGZvdW5kLiI7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307CiAgICAgICAgdmFyIHBlZyRGQUlMRUQgPSB7fSwgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyA9IHsgZGVjbGFyYXRpb246IHBlZyRwYXJzZWRlY2xhcmF0aW9uIH0sIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiA9IHBlZyRwYXJzZWRlY2xhcmF0aW9uLCBwZWckYzAgPSAiKCIsIHBlZyRjMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oIigiLCBmYWxzZSksIHBlZyRjMiA9ICIpIiwgcGVnJGMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiKSIsIGZhbHNlKSwgcGVnJGM0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgY29tbWVudCwgZmllbGRzKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBjb21tZW50LCBmaWVsZHMgfTsKICAgICAgICB9LCBwZWckYzUgPSAic2ltcGxlIiwgcGVnJGM2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigic2ltcGxlIiwgZmFsc2UpLCBwZWckYzcgPSAib2JqZWN0IiwgcGVnJGM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigib2JqZWN0IiwgZmFsc2UpLCBwZWckYzkgPSAidGFibGUiLCBwZWckYzEwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidGFibGUiLCBmYWxzZSksIHBlZyRjMTEgPSAiYXV0byIsIHBlZyRjMTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJhdXRvIiwgZmFsc2UpLCBwZWckYzEzID0gInByaW1hcnkiLCBwZWckYzE0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigicHJpbWFyeSIsIGZhbHNlKSwgcGVnJGMxNSA9ICJpbmRleCIsIHBlZyRjMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJpbmRleCIsIGZhbHNlKSwgcGVnJGMxNyA9ICJ1bmlxdWUiLCBwZWckYzE4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidW5pcXVlIiwgZmFsc2UpLCBwZWckYzE5ID0gZnVuY3Rpb24oZjEsIHcpIHsKICAgICAgICAgIHJldHVybiB3OwogICAgICAgIH0sIHBlZyRjMjAgPSBmdW5jdGlvbihmMSwgZmRzKSB7CiAgICAgICAgICBpZiAoZjEubmFtZSkgewogICAgICAgICAgICBmZHMudW5zaGlmdChmMSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZmRzOwogICAgICAgIH0sIHBlZyRjMjEgPSAiIyIsIHBlZyRjMjIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCIjIiwgZmFsc2UpLCBwZWckYzIzID0gIjsiLCBwZWckYzI0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiOyIsIGZhbHNlKSwgcGVnJGMyNSA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIGNvbW1lbnQpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGUsIG5hbWUsIGNvbW1lbnQgfTsKICAgICAgICB9LCBwZWckYzI2ID0gIlsiLCBwZWckYzI3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiWyIsIGZhbHNlKSwgcGVnJGMyOCA9ICJdIiwgcGVnJGMyOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oIl0iLCBmYWxzZSksIHBlZyRjMzAgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBuYW1lLCBjb21tZW50KSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlLCBzaXplLCBuYW1lLCBjb21tZW50IH07CiAgICAgICAgfSwgcGVnJGMzMSA9IGZ1bmN0aW9uKHR5cGUsIHZhbHMsIG5hbWUsIGNvbW1lbnQpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGUsIHZhbHMsIG5hbWUsIGNvbW1lbnQgfTsKICAgICAgICB9LCBwZWckYzMyID0gIiwiLCBwZWckYzMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiLCIsIGZhbHNlKSwgcGVnJGMzNCA9IGZ1bmN0aW9uKGYxLCBmZHMpIHsKICAgICAgICAgIGZkcy51bnNoaWZ0KGYxKTsKICAgICAgICAgIHJldHVybiBmZHM7CiAgICAgICAgfSwgcGVnJGMzNSA9ICJpbnQiLCBwZWckYzM2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiaW50IiwgZmFsc2UpLCBwZWckYzM3ID0gInVpbnQiLCBwZWckYzM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidWludCIsIGZhbHNlKSwgcGVnJGMzOSA9ICJzaG9ydCIsIHBlZyRjNDAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJzaG9ydCIsIGZhbHNlKSwgcGVnJGM0MSA9ICJ1c2hvcnQiLCBwZWckYzQyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidXNob3J0IiwgZmFsc2UpLCBwZWckYzQzID0gImJ5dGUiLCBwZWckYzQ0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiYnl0ZSIsIGZhbHNlKSwgcGVnJGM0NSA9ICJ1Ynl0ZSIsIHBlZyRjNDYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJ1Ynl0ZSIsIGZhbHNlKSwgcGVnJGM0NyA9ICJmbG9hdCIsIHBlZyRjNDggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJmbG9hdCIsIGZhbHNlKSwgcGVnJGM0OSA9ICJjaGFyIiwgcGVnJGM1MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oImNoYXIiLCBmYWxzZSksIHBlZyRjNTEgPSAic3RyaW5nIiwgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oInN0cmluZyIsIGZhbHNlKSwgcGVnJGM1MyA9ICJsc3RyaW5nIiwgcGVnJGM1NCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oImxzdHJpbmciLCBmYWxzZSksIHBlZyRjNTUgPSAiZW51bSIsIHBlZyRjNTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJlbnVtIiwgZmFsc2UpLCBwZWckYzU3ID0gImRvdWJsZSIsIHBlZyRjNTggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJkb3VibGUiLCBmYWxzZSksIHBlZyRjNTkgPSAiYmlnaW50IiwgcGVnJGM2MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oImJpZ2ludCIsIGZhbHNlKSwgcGVnJGM2MSA9ICJzZXQiLCBwZWckYzYyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigic2V0IiwgZmFsc2UpLCBwZWckYzYzID0gZnVuY3Rpb24odCwgbikgewogICAgICAgICAgcmV0dXJuIHQgKyAiICIgKyBuOwogICAgICAgIH0sIHBlZyRjNjQgPSAvXlthLXpBLVpfXS8sIHBlZyRjNjUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbWyJhIiwgInoiXSwgWyJBIiwgIloiXSwgIl8iXSwgZmFsc2UsIGZhbHNlKSwgcGVnJGM2NiA9IC9eW2EtekEtWjAtOV9dLywgcGVnJGM2NyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbImEiLCAieiJdLCBbIkEiLCAiWiJdLCBbIjAiLCAiOSJdLCAiXyJdLCBmYWxzZSwgZmFsc2UpLCBwZWckYzY4ID0gZnVuY3Rpb24odCkgewogICAgICAgICAgcmV0dXJuIHRleHQoKTsKICAgICAgICB9LCBwZWckYzY5ID0gJyInLCBwZWckYzcwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbignIicsIGZhbHNlKSwgcGVnJGM3MSA9IC9eW14iXS8sIHBlZyRjNzIgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbJyInXSwgdHJ1ZSwgZmFsc2UpLCBwZWckYzczID0gZnVuY3Rpb24odCkgewogICAgICAgICAgcmV0dXJuIHQuam9pbigiIik7CiAgICAgICAgfSwgcGVnJGM3NCA9IC9eW15cblxyXS8sIHBlZyRjNzUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbIlxuIiwgIlxyIl0sIHRydWUsIGZhbHNlKSwgcGVnJGM3NiA9IGZ1bmN0aW9uKHQpIHsKICAgICAgICAgIHJldHVybiB0LmpvaW4oIiIpLnJlcGxhY2UoL14iLywgIiIpLnJlcGxhY2UoLyIkLywgIiIpOwogICAgICAgIH0sIHBlZyRjNzcgPSBwZWckb3RoZXJFeHBlY3RhdGlvbigiaW50ZWdlciIpLCBwZWckYzc4ID0gL15bMC05XS8sIHBlZyRjNzkgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbWyIwIiwgIjkiXV0sIGZhbHNlLCBmYWxzZSksIHBlZyRjODAgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUludCh0ZXh0KCksIDEwKTsKICAgICAgICB9LCBwZWckYzgxID0gcGVnJG90aGVyRXhwZWN0YXRpb24oIndoaXRlc3BhY2UiKSwgcGVnJGM4MiA9IC9eWyBcdFxuXHJdLywgcGVnJGM4MyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFsiICIsICIJIiwgIlxuIiwgIlxyIl0sIGZhbHNlLCBmYWxzZSksIHBlZyRjdXJyUG9zID0gMCwgcGVnJHNhdmVkUG9zID0gMCwgcGVnJHBvc0RldGFpbHNDYWNoZSA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XSwgcGVnJG1heEZhaWxQb3MgPSAwLCBwZWckbWF4RmFpbEV4cGVjdGVkID0gW10sIHBlZyRzaWxlbnRGYWlscyA9IDAsIHBlZyRyZXN1bHQ7CiAgICAgICAgaWYgKCJzdGFydFJ1bGUiIGluIG9wdGlvbnMpIHsKICAgICAgICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgImAgKyBvcHRpb25zLnN0YXJ0UnVsZSArICciLicpOwogICAgICAgICAgfQogICAgICAgICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHRleHQoKSB7CiAgICAgICAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBsb2NhdGlvbigpIHsKICAgICAgICAgIHJldHVybiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbiwgbG9jYXRpb24yKSB7CiAgICAgICAgICBsb2NhdGlvbjIgPSBsb2NhdGlvbjIgIT09IHZvaWQgMCA/IGxvY2F0aW9uMiA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7CiAgICAgICAgICB0aHJvdyBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKSwgbG9jYXRpb24yKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgbG9jYXRpb24yKSB7CiAgICAgICAgICBsb2NhdGlvbjIgPSBsb2NhdGlvbjIgIT09IHZvaWQgMCA/IGxvY2F0aW9uMiA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7CiAgICAgICAgICB0aHJvdyBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKHRleHQyLCBpZ25vcmVDYXNlKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAibGl0ZXJhbCIsIHRleHQ6IHRleHQyLCBpZ25vcmVDYXNlIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImNsYXNzIiwgcGFydHMsIGludmVydGVkLCBpZ25vcmVDYXNlIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJhbnkiIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRlbmRFeHBlY3RhdGlvbigpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJlbmQiIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAib3RoZXIiLCBkZXNjcmlwdGlvbiB9OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckY29tcHV0ZVBvc0RldGFpbHMocG9zKSB7CiAgICAgICAgICB2YXIgZGV0YWlscyA9IHBlZyRwb3NEZXRhaWxzQ2FjaGVbcG9zXSwgcDsKICAgICAgICAgIGlmIChkZXRhaWxzKSB7CiAgICAgICAgICAgIHJldHVybiBkZXRhaWxzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHBvcyAtIDE7CiAgICAgICAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkgewogICAgICAgICAgICAgIHAtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwXTsKICAgICAgICAgICAgZGV0YWlscyA9IHsKICAgICAgICAgICAgICBsaW5lOiBkZXRhaWxzLmxpbmUsCiAgICAgICAgICAgICAgY29sdW1uOiBkZXRhaWxzLmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICB3aGlsZSAocCA8IHBvcykgewogICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkgewogICAgICAgICAgICAgICAgZGV0YWlscy5saW5lKys7CiAgICAgICAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRldGFpbHMuY29sdW1uKys7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzOwogICAgICAgICAgICByZXR1cm4gZGV0YWlsczsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7CiAgICAgICAgICB2YXIgc3RhcnRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHN0YXJ0UG9zKSwgZW5kUG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0UG9zLAogICAgICAgICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLAogICAgICAgICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtbgogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgICBvZmZzZXQ6IGVuZFBvcywKICAgICAgICAgICAgICBsaW5lOiBlbmRQb3NEZXRhaWxzLmxpbmUsCiAgICAgICAgICAgICAgY29sdW1uOiBlbmRQb3NEZXRhaWxzLmNvbHVtbgogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckZmFpbChleHBlY3RlZDIpIHsKICAgICAgICAgIGlmIChwZWckY3VyclBvcyA8IHBlZyRtYXhGYWlsUG9zKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7CiAgICAgICAgICAgIHBlZyRtYXhGYWlsUG9zID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZDIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjIpIHsKICAgICAgICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIG51bGwsIG51bGwsIGxvY2F0aW9uMik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZDIsIGZvdW5kLCBsb2NhdGlvbjIpIHsKICAgICAgICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKHBlZyRTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UoZXhwZWN0ZWQyLCBmb3VuZCksIGV4cGVjdGVkMiwgZm91bmQsIGxvY2F0aW9uMik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWRlY2xhcmF0aW9uKCkgewogICAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczgsIHM5LCBzMTAsIHMxMSwgczEyLCBzMTM7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBwZWckcGFyc2VkZWNsYXJlVHlwZSgpOwogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlZGVjbGFyZU5hbWUoKTsKICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2Vjb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckYzA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VmaWVsZExpc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJGMyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEzID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzQoczIsIHM0LCBzNiwgczEwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlZGVjbGFyZVR5cGUoKSB7CiAgICAgICAgICB2YXIgczA7CiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KSA9PT0gcGVnJGM1KSB7CiAgICAgICAgICAgIHMwID0gcGVnJGM1OwogICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM2KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzcpIHsKICAgICAgICAgICAgICBzMCA9IHBlZyRjNzsKICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGM5KSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjOTsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWRlY2xhcmVOYW1lKCkgewogICAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzOwogICAgICAgICAgczAgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgczEgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlaW5kZXhUeXBlKCk7CiAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzMSA9IFtzMSwgczJdOwogICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgICBzMSA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpID09PSBwZWckYzExKSB7CiAgICAgICAgICAgICAgICAgIHMyID0gcGVnJGMxMTsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgczEgPSBbczEsIHMyXTsKICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgICAgICAgczEgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VpbmRleFR5cGUoKTsKICAgICAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMTEpIHsKICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTsKICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMik7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgczEgPSBbczEsIHMyLCBzM107CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2VpbmRleFR5cGUoKSB7CiAgICAgICAgICB2YXIgczA7CiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KSA9PT0gcGVnJGMxMykgewogICAgICAgICAgICBzMCA9IHBlZyRjMTM7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzE1KSB7CiAgICAgICAgICAgICAgczAgPSBwZWckYzE1OwogICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTYpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KSA9PT0gcGVnJGMxNykgewogICAgICAgICAgICAgICAgczAgPSBwZWckYzE3OwogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlY29tbWVudCgpIHsKICAgICAgICAgIHZhciBzMDsKICAgICAgICAgIHMwID0gcGVnJHBhcnNlbm9uUXVvdGVkU3RyaW5nKCk7CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczAgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWZpZWxkTGlzdCgpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNjsKICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMzID0gW107CiAgICAgICAgICAgICAgczQgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlZmllbGQoKTsKICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzNDsKICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzE5KHMxLCBzNik7CiAgICAgICAgICAgICAgICAgIHM0ID0gczU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0OwogICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7CiAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczMucHVzaChzNCk7CiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VmaWVsZCgpOwogICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzNDsKICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRjMTkoczEsIHM2KTsKICAgICAgICAgICAgICAgICAgICBzNCA9IHM1OwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7CiAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0OwogICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMyMChzMSwgczMpOwogICAgICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2Vjb21tZW50U3RhcnQoKSB7CiAgICAgICAgICB2YXIgczA7CiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM1KSB7CiAgICAgICAgICAgIHMwID0gcGVnJGMyMTsKICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWludGVybmFsQ29tbWVudCgpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQ7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBwZWckcGFyc2Vjb21tZW50U3RhcnQoKTsKICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2Vub25RdW90ZWRTdHJpbmcoKTsKICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgIHMxID0gW3MxLCBzMiwgczMsIHM0XTsKICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlZmllbGQoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMCwgczExLCBzMTIsIHMxMzsKICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkVHlwZSgpOwogICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNTkpIHsKICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRjMjM7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyNCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2Vjb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMyNShzMSwgczMsIHM3KTsKICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkVHlwZSgpOwogICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHsKICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzI2OwogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyNyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VmaWVsZFNpemUoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyOSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA1OSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gcGVnJGMyMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMyA9IHBlZyRwYXJzZWNvbW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzMChzMSwgczUsIHM5LCBzMTMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkVHlwZSgpOwogICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkgewogICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMwOwogICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VmaWVsZFZhbHVlcygpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNTkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gcGVnJGMyMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTMgPSBwZWckcGFyc2Vjb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzEoczEsIHM1LCBzOSwgczEzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczAgPSBwZWckcGFyc2VpbnRlcm5hbENvbW1lbnQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlZmllbGRWYWx1ZXMoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBbXTsKICAgICAgICAgICAgczMgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkgewogICAgICAgICAgICAgIHM0ID0gcGVnJGMzMjsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzMzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMzsKICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzE5KHMxLCBzNik7CiAgICAgICAgICAgICAgICAgIHMzID0gczQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzOwogICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7CiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7CiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMyLnB1c2goczMpOwogICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkgewogICAgICAgICAgICAgICAgczQgPSBwZWckYzMyOwogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzMzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczM7CiAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzE5KHMxLCBzNik7CiAgICAgICAgICAgICAgICAgICAgczMgPSBzNDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzOwogICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMzsKICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzOwogICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICBzMSA9IHBlZyRjMzQoczEsIHMyKTsKICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWZpZWxkVHlwZSgpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMzsKICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpID09PSBwZWckYzM1KSB7CiAgICAgICAgICAgIHMwID0gcGVnJGMzNTsKICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMzYpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMzcpIHsKICAgICAgICAgICAgICBzMCA9IHBlZyRjMzc7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzOCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzM5KSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjMzk7CiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzQxKSB7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM0MTsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNDMpIHsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNDM7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM0NCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzQ1KSB7CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNDU7CiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDYpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzQ3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM0NzsKICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNDkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNDk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM1MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzUxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpID09PSBwZWckYzUzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM1MzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM1Nik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzU3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNTc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzU5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM1OTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjNjEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM2Mik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckcGFyc2VkZWNsYXJlVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VkZWNsYXJlTmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNjMoczEsIHMzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWZpZWxkU2l6ZSgpIHsKICAgICAgICAgIHZhciBzMDsKICAgICAgICAgIHMwID0gcGVnJHBhcnNlbnVtYmVyKCk7CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczAgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZW5hbWUoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0OwogICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgIHMxID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7CiAgICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczMgPSBbXTsKICAgICAgICAgICAgaWYgKHBlZyRjNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzY3KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczMucHVzaChzNCk7CiAgICAgICAgICAgICAgaWYgKHBlZyRjNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpOwogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzY3KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczIgPSBbczIsIHMzXTsKICAgICAgICAgICAgICBzMSA9IHMyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczE7CiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZWckY3VyclBvcyA9IHMxOwogICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgIHMxID0gcGVnJGM2OChzMSk7CiAgICAgICAgICB9CiAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2VxdW90ZWRTdHJpbmcoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczM7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkgewogICAgICAgICAgICBzMSA9IHBlZyRjNjk7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzcwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMyID0gW107CiAgICAgICAgICAgIGlmIChwZWckYzcxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3Mik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMyLnB1c2goczMpOwogICAgICAgICAgICAgIGlmIChwZWckYzcxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3Mik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHsKICAgICAgICAgICAgICAgIHMzID0gcGVnJGM2OTsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNzMoczIpOwogICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlbm9uUXVvdGVkU3RyaW5nKCkgewogICAgICAgICAgdmFyIHMwLCBzMSwgczI7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBbXTsKICAgICAgICAgIGlmIChwZWckYzc0LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpOwogICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEOwogICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3NSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMS5wdXNoKHMyKTsKICAgICAgICAgICAgaWYgKHBlZyRjNzQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzc1KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgczEgPSBwZWckYzc2KHMxKTsKICAgICAgICAgIH0KICAgICAgICAgIHMwID0gczE7CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZW51bWJlcigpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMzsKICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrOwogICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgIHMxID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMyID0gW107CiAgICAgICAgICAgIGlmIChwZWckYzc4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3OSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczIucHVzaChzMyk7CiAgICAgICAgICAgICAgICBpZiAocGVnJGM3OC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7CiAgICAgICAgICAgICAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNzkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICBzMSA9IHBlZyRjODAoKTsKICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICB9CiAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTsKICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzc3KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2VfKCkgewogICAgICAgICAgdmFyIHMwLCBzMTsKICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrOwogICAgICAgICAgczAgPSBbXTsKICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpOwogICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEOwogICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM4Myk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMC5wdXNoKHMxKTsKICAgICAgICAgICAgaWYgKHBlZyRjODIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzgzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tOwogICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjODEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIHBlZyRyZXN1bHQgPSBwZWckc3RhcnRSdWxlRnVuY3Rpb24oKTsKICAgICAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA9PT0gaW5wdXQubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gcGVnJHJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPCBpbnB1dC5sZW5ndGgpIHsKICAgICAgICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKHBlZyRtYXhGYWlsRXhwZWN0ZWQsIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckF0KHBlZyRtYXhGYWlsUG9zKSA6IG51bGwsIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MgKyAxKSA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IHsKICAgICAgICBTeW50YXhFcnJvcjogcGVnJFN5bnRheEVycm9yLAogICAgICAgIHBhcnNlOiBwZWckcGFyc2UKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvYmVkL2JlZC13b3JrZXIudHM/d29ya2VyJmlubGluZT93b3JrZXJfZmlsZQogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL2luZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGFiaXhJbmRleGVkRmlsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2Fib3J0YWJsZV9wcm9taXNlX2NhY2hlID0gX190b01vZHVsZShyZXF1aXJlX2VzbSgpKTsKICB2YXIgaW1wb3J0X3F1aWNrX2xydSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9xdWlja19scnUoKSk7CiAgdmFyIGltcG9ydF9idWZmZXI3ID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2xvY2FsRmlsZSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb2NhbEZpbGUoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vcmVtb3RlRmlsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwogIHZhciBSZW1vdGVGaWxlID0gY2xhc3MgewogICAgYXN5bmMgZ2V0QnVmZmVyRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSB7CiAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuYnVmZmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJ1ZmZlcigpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZS5hcnJheUJ1ZmZlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpOwogICAgICAgIHJldHVybiBpbXBvcnRfYnVmZmVyMi5CdWZmZXIuZnJvbShyZXNwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIEhUVFAgcmVzcG9uc2Ugb2JqZWN0LCBoYXMgbm8gYnVmZmVyIG1ldGhvZCwgYW5kIG5vIGFycmF5QnVmZmVyIG1ldGhvZCIpOwogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UsIG9wdHMgPSB7fSkgewogICAgICB0aGlzLmJhc2VPdmVycmlkZXMgPSB7fTsKICAgICAgdGhpcy51cmwgPSBzb3VyY2U7CiAgICAgIGNvbnN0IGZldGNoID0gb3B0cy5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoLmJpbmQoZ2xvYmFsVGhpcyk7CiAgICAgIGlmICghZmV0Y2gpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBubyBmZXRjaCBmdW5jdGlvbiBzdXBwbGllZCwgYW5kIG5vbmUgZm91bmQgaW4gZ2xvYmFsIGVudmlyb25tZW50YCk7CiAgICAgIH0KICAgICAgaWYgKG9wdHMub3ZlcnJpZGVzKSB7CiAgICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0gb3B0cy5vdmVycmlkZXM7CiAgICAgIH0KICAgICAgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uID0gZmV0Y2g7CiAgICB9CiAgICBhc3luYyBmZXRjaChpbnB1dCwgaW5pdDIpIHsKICAgICAgbGV0IHJlc3BvbnNlOwogICAgICB0cnkgewogICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uKGlucHV0LCBpbml0Mik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBpZiAoYCR7ZX1gLmluY2x1ZGVzKCJGYWlsZWQgdG8gZmV0Y2giKSkgewogICAgICAgICAgY29uc29sZS53YXJuKGBnZW5lcmljLWZpbGVoYW5kbGU6IHJlZmV0Y2hpbmcgJHtpbnB1dH0gdG8gYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBjaHJvbWUgQ09SUyBoZWFkZXIgY2FjaGluZyBidWdgKTsKICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uKGlucHV0LCB7CiAgICAgICAgICAgIC4uLmluaXQyLAogICAgICAgICAgICBjYWNoZTogInJlbG9hZCIKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9CiAgICBhc3luYyByZWFkKGJ1ZmZlciwgb2Zmc2V0ID0gMCwgbGVuZ3RoLCBwb3NpdGlvbiA9IDAsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCB7IGhlYWRlcnMgPSB7fSwgc2lnbmFsLCBvdmVycmlkZXMgPSB7fSB9ID0gb3B0czsKICAgICAgaWYgKGxlbmd0aCA8IEluZmluaXR5KSB7CiAgICAgICAgaGVhZGVycy5yYW5nZSA9IGBieXRlcz0ke3Bvc2l0aW9ufS0ke3Bvc2l0aW9uICsgbGVuZ3RofWA7CiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSBJbmZpbml0eSAmJiBwb3NpdGlvbiAhPT0gMCkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tYDsKICAgICAgfQogICAgICBjb25zdCBhcmdzID0gewogICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcywKICAgICAgICAuLi5vdmVycmlkZXMsCiAgICAgICAgaGVhZGVyczogewogICAgICAgICAgLi4uaGVhZGVycywKICAgICAgICAgIC4uLm92ZXJyaWRlcy5oZWFkZXJzLAogICAgICAgICAgLi4udGhpcy5iYXNlT3ZlcnJpZGVzLmhlYWRlcnMKICAgICAgICB9LAogICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgcmVkaXJlY3Q6ICJmb2xsb3ciLAogICAgICAgIG1vZGU6ICJjb3JzIiwKICAgICAgICBzaWduYWwKICAgICAgfTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoKHRoaXMudXJsLCBhcmdzKTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fSAke3RoaXMudXJsfWApOwogICAgICB9CiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCAmJiBwb3NpdGlvbiA9PT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNikgewogICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0QnVmZmVyRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTsKICAgICAgICBjb25zdCBieXRlc0NvcGllZCA9IHJlc3BvbnNlRGF0YS5jb3B5KGJ1ZmZlciwgb2Zmc2V0LCAwLCBNYXRoLm1pbihsZW5ndGgsIHJlc3BvbnNlRGF0YS5sZW5ndGgpKTsKICAgICAgICBjb25zdCByZXMgPSByZXNwb25zZS5oZWFkZXJzLmdldCgiY29udGVudC1yYW5nZSIpOwogICAgICAgIGNvbnN0IHNpemVNYXRjaCA9IC9cLyhcZCspJC8uZXhlYyhyZXMgfHwgIiIpOwogICAgICAgIGlmIChzaXplTWF0Y2ggJiYgc2l6ZU1hdGNoWzFdKSB7CiAgICAgICAgICB0aGlzLl9zdGF0ID0geyBzaXplOiBwYXJzZUludChzaXplTWF0Y2hbMV0sIDEwKSB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBieXRlc1JlYWQ6IGJ5dGVzQ29waWVkLCBidWZmZXIgfTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIiR7dGhpcy51cmx9IGZldGNoIHJldHVybmVkIHN0YXR1cyAyMDAsIGV4cGVjdGVkIDIwNiIpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZmV0Y2hpbmcgJHt0aGlzLnVybH1gKTsKICAgIH0KICAgIGFzeW5jIHJlYWRGaWxlKG9wdGlvbnMgPSB7fSkgewogICAgICBsZXQgZW5jb2Rpbmc7CiAgICAgIGxldCBvcHRzOwogICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZW5jb2RpbmcgPSBvcHRpb25zOwogICAgICAgIG9wdHMgPSB7fTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7CiAgICAgICAgb3B0cyA9IG9wdGlvbnM7CiAgICAgICAgZGVsZXRlIG9wdHMuZW5jb2Rpbmc7CiAgICAgIH0KICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGNvbnN0IGFyZ3MgPSB7CiAgICAgICAgaGVhZGVycywKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsLAogICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcywKICAgICAgICAuLi5vdmVycmlkZXMKICAgICAgfTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoKHRoaXMudXJsLCBhcmdzKTsKICAgICAgaWYgKCFyZXNwb25zZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiZ2VuZXJpYy1maWxlaGFuZGxlIGZhaWxlZCB0byBmZXRjaCIpOwogICAgICB9CiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkgewogICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApLCB7CiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChlbmNvZGluZyA9PT0gInV0ZjgiKSB7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsKICAgICAgfQogICAgICBpZiAoZW5jb2RpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGVuY29kaW5nOiAke2VuY29kaW5nfWApOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICB9CiAgICBhc3luYyBzdGF0KCkgewogICAgICBpZiAoIXRoaXMuX3N0YXQpIHsKICAgICAgICBjb25zdCBidWYgPSBpbXBvcnRfYnVmZmVyMi5CdWZmZXIuYWxsb2NVbnNhZmUoMTApOwogICAgICAgIGF3YWl0IHRoaXMucmVhZChidWYsIDAsIDEwLCAwKTsKICAgICAgICBpZiAoIXRoaXMuX3N0YXQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGRldGVybWluZSBzaXplIG9mIGZpbGUgYXQgJHt0aGlzLnVybH1gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuX3N0YXQ7CiAgICB9CiAgICBhc3luYyBjbG9zZSgpIHsKICAgICAgcmV0dXJuOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vYmxvYkZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXIzID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9maWxlaGFuZGxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2luZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2JnekZpbGVoYW5kbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXI2ID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS91bnppcC1wYWtvLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNCA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CiAgdmFyIGltcG9ydF9wYWtvID0gX190b01vZHVsZShyZXF1aXJlX3Bha28oKSk7CiAgYXN5bmMgZnVuY3Rpb24gdW56aXAoaW5wdXREYXRhKSB7CiAgICB0cnkgewogICAgICBsZXQgc3RybTsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGxldCBpID0gMDsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGxldCB0b3RhbFNpemUgPSAwOwogICAgICBsZXQgaW5mbGF0b3I7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCByZW1haW5pbmdJbnB1dCA9IGlucHV0RGF0YS5zdWJhcnJheShwb3MpOwogICAgICAgIGluZmxhdG9yID0gbmV3IGltcG9ydF9wYWtvLkluZmxhdGUoKTsKICAgICAgICAoeyBzdHJtIH0gPSBpbmZsYXRvcik7CiAgICAgICAgaW5mbGF0b3IucHVzaChyZW1haW5pbmdJbnB1dCwgaW1wb3J0X3Bha28uWl9TWU5DX0ZMVVNIKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKTsKICAgICAgICB9CiAgICAgICAgcG9zICs9IHN0cm0ubmV4dF9pbjsKICAgICAgICBjaHVua3NbaV0gPSBpbmZsYXRvci5yZXN1bHQ7CiAgICAgICAgdG90YWxTaXplICs9IGNodW5rc1tpXS5sZW5ndGg7CiAgICAgICAgaSArPSAxOwogICAgICB9IHdoaWxlIChzdHJtLmF2YWlsX2luKTsKICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxTaXplKTsKICAgICAgZm9yIChsZXQgaTIgPSAwLCBvZmZzZXQgPSAwOyBpMiA8IGNodW5rcy5sZW5ndGg7IGkyKyspIHsKICAgICAgICByZXN1bHQuc2V0KGNodW5rc1tpMl0sIG9mZnNldCk7CiAgICAgICAgb2Zmc2V0ICs9IGNodW5rc1tpMl0ubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAoYCR7ZX1gLm1hdGNoKC9pbmNvcnJlY3QgaGVhZGVyIGNoZWNrLykpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2JsZW0gZGVjb21wcmVzc2luZyBibG9jazogaW5jb3JyZWN0IGd6aXAgaGVhZGVyIGNoZWNrIik7CiAgICAgIH0KICAgICAgdGhyb3cgZTsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gdW56aXBDaHVua1NsaWNlKGlucHV0RGF0YSwgY2h1bmspIHsKICAgIHRyeSB7CiAgICAgIGxldCBzdHJtOwogICAgICBjb25zdCB7IG1pbnYsIG1heHYgfSA9IGNodW5rOwogICAgICBsZXQgY3BvcyA9IG1pbnYuYmxvY2tQb3NpdGlvbjsKICAgICAgbGV0IGRwb3MgPSBtaW52LmRhdGFQb3NpdGlvbjsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGNvbnN0IGNwb3NpdGlvbnMgPSBbXTsKICAgICAgY29uc3QgZHBvc2l0aW9ucyA9IFtdOwogICAgICBsZXQgdG90YWxTaXplID0gMDsKICAgICAgbGV0IGkgPSAwOwogICAgICBkbyB7CiAgICAgICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc3ViYXJyYXkoY3BvcyAtIG1pbnYuYmxvY2tQb3NpdGlvbik7CiAgICAgICAgY29uc3QgaW5mbGF0b3IgPSBuZXcgaW1wb3J0X3Bha28uSW5mbGF0ZSgpOwogICAgICAgICh7IHN0cm0gfSA9IGluZmxhdG9yKTsKICAgICAgICBpbmZsYXRvci5wdXNoKHJlbWFpbmluZ0lucHV0LCBpbXBvcnRfcGFrby5aX1NZTkNfRkxVU0gpOwogICAgICAgIGlmIChpbmZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZsYXRvci5tc2cpOwogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIyID0gaW5mbGF0b3IucmVzdWx0OwogICAgICAgIGNodW5rcy5wdXNoKGJ1ZmZlcjIpOwogICAgICAgIGxldCBsZW4gPSBidWZmZXIyLmxlbmd0aDsKICAgICAgICBjcG9zaXRpb25zLnB1c2goY3Bvcyk7CiAgICAgICAgZHBvc2l0aW9ucy5wdXNoKGRwb3MpOwogICAgICAgIGlmIChjaHVua3MubGVuZ3RoID09PSAxICYmIG1pbnYuZGF0YVBvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3NbMF0gPSBjaHVua3NbMF0uc3ViYXJyYXkobWludi5kYXRhUG9zaXRpb24pOwogICAgICAgICAgbGVuID0gY2h1bmtzWzBdLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3JpZ0Nwb3MgPSBjcG9zOwogICAgICAgIGNwb3MgKz0gc3RybS5uZXh0X2luOwogICAgICAgIGRwb3MgKz0gbGVuOwogICAgICAgIGlmIChvcmlnQ3BvcyA+PSBtYXh2LmJsb2NrUG9zaXRpb24pIHsKICAgICAgICAgIGNodW5rc1tpXSA9IGNodW5rc1tpXS5zdWJhcnJheSgwLCBtYXh2LmJsb2NrUG9zaXRpb24gPT09IG1pbnYuYmxvY2tQb3NpdGlvbiA/IG1heHYuZGF0YVBvc2l0aW9uIC0gbWludi5kYXRhUG9zaXRpb24gKyAxIDogbWF4di5kYXRhUG9zaXRpb24gKyAxKTsKICAgICAgICAgIGNwb3NpdGlvbnMucHVzaChjcG9zKTsKICAgICAgICAgIGRwb3NpdGlvbnMucHVzaChkcG9zKTsKICAgICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7CiAgICAgIGZvciAobGV0IGkyID0gMCwgb2Zmc2V0ID0gMDsgaTIgPCBjaHVua3MubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgcmVzdWx0LnNldChjaHVua3NbaTJdLCBvZmZzZXQpOwogICAgICAgIG9mZnNldCArPSBjaHVua3NbaTJdLmxlbmd0aDsKICAgICAgfQogICAgICBjb25zdCBidWZmZXIgPSBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgICByZXR1cm4geyBidWZmZXIsIGNwb3NpdGlvbnMsIGRwb3NpdGlvbnMgfTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGAke2V9YC5tYXRjaCgvaW5jb3JyZWN0IGhlYWRlciBjaGVjay8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJwcm9ibGVtIGRlY29tcHJlc3NpbmcgYmxvY2s6IGluY29ycmVjdCBnemlwIGhlYWRlciBjaGVjayIpOwogICAgICB9CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2d6aUluZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb25nKCkpOwogIHZhciBpbXBvcnRfYnVmZmVyNSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS91dGlsLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nKSB7CiAgICBpZiAobG9uZy5ncmVhdGVyVGhhbihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgfHwgbG9uZy5sZXNzVGhhbihOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICB9CiAgICByZXR1cm4gbG9uZy50b051bWJlcigpOwogIH0KICB2YXIgQWJvcnRFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogIH07CiAgZnVuY3Rpb24gY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpIHsKICAgIGlmICghc2lnbmFsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICBpZiAodHlwZW9mIERPTUV4Y2VwdGlvbiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJhYm9ydGVkIiwgIkFib3J0RXJyb3IiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBlID0gbmV3IEFib3J0RXJyb3IoImFib3J0ZWQiKTsKICAgICAgICBlLmNvZGUgPSAiRVJSX0FCT1JURUQiOwogICAgICAgIHRocm93IGU7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gY2FuTWVyZ2VCbG9ja3MoY2h1bmsxLCBjaHVuazIpIHsKICAgIHJldHVybiBjaHVuazIubWludi5ibG9ja1Bvc2l0aW9uIC0gY2h1bmsxLm1heHYuYmxvY2tQb3NpdGlvbiA8IDY1ZTMgJiYgY2h1bmsyLm1heHYuYmxvY2tQb3NpdGlvbiAtIGNodW5rMS5taW52LmJsb2NrUG9zaXRpb24gPCA1ZTY7CiAgfQogIGZ1bmN0aW9uIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KSB7CiAgICBjb25zdCBtZXJnZWRDaHVua3MgPSBbXTsKICAgIGxldCBsYXN0Q2h1bmsgPSBudWxsOwogICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGNodW5rczsKICAgIH0KICAgIGNodW5rcy5zb3J0KGZ1bmN0aW9uKGMwLCBjMSkgewogICAgICBjb25zdCBkaWYgPSBjMC5taW52LmJsb2NrUG9zaXRpb24gLSBjMS5taW52LmJsb2NrUG9zaXRpb247CiAgICAgIGlmIChkaWYgIT09IDApIHsKICAgICAgICByZXR1cm4gZGlmOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjMC5taW52LmRhdGFQb3NpdGlvbiAtIGMxLm1pbnYuZGF0YVBvc2l0aW9uOwogICAgICB9CiAgICB9KTsKICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4gewogICAgICBpZiAoIWxvd2VzdCB8fCBjaHVuay5tYXh2LmNvbXBhcmVUbyhsb3dlc3QpID4gMCkgewogICAgICAgIGlmIChsYXN0Q2h1bmsgPT09IG51bGwpIHsKICAgICAgICAgIG1lcmdlZENodW5rcy5wdXNoKGNodW5rKTsKICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoY2FuTWVyZ2VCbG9ja3MobGFzdENodW5rLCBjaHVuaykpIHsKICAgICAgICAgICAgaWYgKGNodW5rLm1heHYuY29tcGFyZVRvKGxhc3RDaHVuay5tYXh2KSA+IDApIHsKICAgICAgICAgICAgICBsYXN0Q2h1bmsubWF4diA9IGNodW5rLm1heHY7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lcmdlZENodW5rcy5wdXNoKGNodW5rKTsKICAgICAgICAgICAgbGFzdENodW5rID0gY2h1bms7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBtZXJnZWRDaHVua3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGJpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3ZpcnR1YWxPZmZzZXQuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIFZpcnR1YWxPZmZzZXQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihibG9ja1Bvc2l0aW9uLCBkYXRhUG9zaXRpb24pIHsKICAgICAgdGhpcy5ibG9ja1Bvc2l0aW9uID0gYmxvY2tQb3NpdGlvbjsKICAgICAgdGhpcy5kYXRhUG9zaXRpb24gPSBkYXRhUG9zaXRpb247CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIGAke3RoaXMuYmxvY2tQb3NpdGlvbn06JHt0aGlzLmRhdGFQb3NpdGlvbn1gOwogICAgfQogICAgY29tcGFyZVRvKGIpIHsKICAgICAgcmV0dXJuIHRoaXMuYmxvY2tQb3NpdGlvbiAtIGIuYmxvY2tQb3NpdGlvbiB8fCB0aGlzLmRhdGFQb3NpdGlvbiAtIGIuZGF0YVBvc2l0aW9uOwogICAgfQogICAgc3RhdGljIG1pbiguLi5hcmdzKSB7CiAgICAgIGxldCBtaW47CiAgICAgIGxldCBpID0gMDsKICAgICAgZm9yICg7ICFtaW47IGkgKz0gMSkgewogICAgICAgIG1pbiA9IGFyZ3NbaV07CiAgICAgIH0KICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKG1pbi5jb21wYXJlVG8oYXJnc1tpXSkgPiAwKSB7CiAgICAgICAgICBtaW4gPSBhcmdzW2ldOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbWluOwogICAgfQogIH07CiAgZnVuY3Rpb24gZnJvbUJ5dGVzKGJ5dGVzLCBvZmZzZXQgPSAwLCBiaWdlbmRpYW4gPSBmYWxzZSkgewogICAgaWYgKGJpZ2VuZGlhbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoImJpZy1lbmRpYW4gdmlydHVhbCBmaWxlIG9mZnNldHMgbm90IGltcGxlbWVudGVkIik7CiAgICB9CiAgICByZXR1cm4gbmV3IFZpcnR1YWxPZmZzZXQoYnl0ZXNbb2Zmc2V0ICsgN10gKiAxMDk5NTExNjI3Nzc2ICsgYnl0ZXNbb2Zmc2V0ICsgNl0gKiA0Mjk0OTY3Mjk2ICsgYnl0ZXNbb2Zmc2V0ICsgNV0gKiAxNjc3NzIxNiArIGJ5dGVzW29mZnNldCArIDRdICogNjU1MzYgKyBieXRlc1tvZmZzZXQgKyAzXSAqIDI1NiArIGJ5dGVzW29mZnNldCArIDJdLCBieXRlc1tvZmZzZXQgKyAxXSA8PCA4IHwgYnl0ZXNbb2Zmc2V0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vY2h1bmsuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIENodW5rID0gY2xhc3MgewogICAgY29uc3RydWN0b3IobWludiwgbWF4diwgYmluLCBmZXRjaGVkU2l6ZSA9IHZvaWQgMCkgewogICAgICB0aGlzLm1pbnYgPSBtaW52OwogICAgICB0aGlzLm1heHYgPSBtYXh2OwogICAgICB0aGlzLmJpbiA9IGJpbjsKICAgICAgdGhpcy5fZmV0Y2hlZFNpemUgPSBmZXRjaGVkU2l6ZTsKICAgIH0KICAgIHRvVW5pcXVlU3RyaW5nKCkgewogICAgICByZXR1cm4gYCR7dGhpcy5taW52fS4uJHt0aGlzLm1heHZ9IChiaW4gJHt0aGlzLmJpbn0sIGZldGNoZWRTaXplICR7dGhpcy5mZXRjaGVkU2l6ZSgpfSlgOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvVW5pcXVlU3RyaW5nKCk7CiAgICB9CiAgICBjb21wYXJlVG8oYikgewogICAgICByZXR1cm4gdGhpcy5taW52LmNvbXBhcmVUbyhiLm1pbnYpIHx8IHRoaXMubWF4di5jb21wYXJlVG8oYi5tYXh2KSB8fCB0aGlzLmJpbiAtIGIuYmluOwogICAgfQogICAgZmV0Y2hlZFNpemUoKSB7CiAgICAgIGlmICh0aGlzLl9mZXRjaGVkU2l6ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoZWRTaXplOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1heHYuYmxvY2tQb3NpdGlvbiArICgxIDw8IDE2KSAtIHRoaXMubWludi5ibG9ja1Bvc2l0aW9uOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS9pbmRleEZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIEluZGV4RmlsZSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHsgZmlsZWhhbmRsZSwgcmVuYW1lUmVmU2VxcyA9IChuKSA9PiBuIH0pIHsKICAgICAgdGhpcy5maWxlaGFuZGxlID0gZmlsZWhhbmRsZTsKICAgICAgdGhpcy5yZW5hbWVSZWZTZXEgPSByZW5hbWVSZWZTZXFzOwogICAgfQogICAgYXN5bmMgZ2V0TWV0YWRhdGEob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgaW5kaWNlcywgLi4ucmVzdCB9ID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgcmV0dXJuIHJlc3Q7CiAgICB9CiAgICBfZmluZEZpcnN0RGF0YShjdXJyZW50RmRsLCB2aXJ0dWFsT2Zmc2V0KSB7CiAgICAgIGlmIChjdXJyZW50RmRsKSB7CiAgICAgICAgcmV0dXJuIGN1cnJlbnRGZGwuY29tcGFyZVRvKHZpcnR1YWxPZmZzZXQpID4gMCA/IHZpcnR1YWxPZmZzZXQgOiBjdXJyZW50RmRsOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB2aXJ0dWFsT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICBhc3luYyBwYXJzZShvcHRzID0ge30pIHsKICAgICAgaWYgKCF0aGlzLnBhcnNlUCkgewogICAgICAgIHRoaXMucGFyc2VQID0gdGhpcy5fcGFyc2Uob3B0cykuY2F0Y2goKGUpID0+IHsKICAgICAgICAgIHRoaXMucGFyc2VQID0gdm9pZCAwOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5wYXJzZVA7CiAgICB9CiAgICBhc3luYyBoYXNSZWZTZXEoc2VxSWQsIG9wdHMgPSB7fSkgewogICAgICByZXR1cm4gISEoKGF3YWl0IHRoaXMucGFyc2Uob3B0cykpLmluZGljZXNbc2VxSWRdIHx8IHt9KS5iaW5JbmRleDsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGJpLmpzCiAgdmFyIFRCSV9NQUdJQyA9IDIxNTc4MzI0OwogIHZhciBUQURfTElEWF9TSElGVCA9IDE0OwogIGZ1bmN0aW9uIHJlZzJiaW5zKGJlZywgZW5kKSB7CiAgICBiZWcgKz0gMTsKICAgIGVuZCAtPSAxOwogICAgcmV0dXJuIFsKICAgICAgWzAsIDBdLAogICAgICBbMSArIChiZWcgPj4gMjYpLCAxICsgKGVuZCA+PiAyNildLAogICAgICBbOSArIChiZWcgPj4gMjMpLCA5ICsgKGVuZCA+PiAyMyldLAogICAgICBbNzMgKyAoYmVnID4+IDIwKSwgNzMgKyAoZW5kID4+IDIwKV0sCiAgICAgIFs1ODUgKyAoYmVnID4+IDE3KSwgNTg1ICsgKGVuZCA+PiAxNyldLAogICAgICBbNDY4MSArIChiZWcgPj4gMTQpLCA0NjgxICsgKGVuZCA+PiAxNCldCiAgICBdOwogIH0KICB2YXIgVGFiaXhJbmRleCA9IGNsYXNzIGV4dGVuZHMgSW5kZXhGaWxlIHsKICAgIGFzeW5jIGxpbmVDb3VudChyZWZOYW1lLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgcmVmSWQgPSBpbmRleERhdGEucmVmTmFtZVRvSWRbcmVmTmFtZV07CiAgICAgIGNvbnN0IGlkeCA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFpZHgpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgeyBzdGF0cyB9ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoc3RhdHMpIHsKICAgICAgICByZXR1cm4gc3RhdHMubGluZUNvdW50OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGFzeW5jIF9wYXJzZShvcHRzID0ge30pIHsKICAgICAgY29uc3QgYnVmID0gYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWRGaWxlKG9wdHMpOwogICAgICBjb25zdCBieXRlcyA9IGF3YWl0IHVuemlwKGJ1Zik7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwob3B0cy5zaWduYWwpOwogICAgICBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApICE9PSBUQklfTUFHSUMpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIFRCSSBmaWxlIik7CiAgICAgIH0KICAgICAgY29uc3QgcmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KTsKICAgICAgY29uc3QgZm9ybWF0RmxhZ3MgPSBieXRlcy5yZWFkSW50MzJMRSg4KTsKICAgICAgY29uc3QgY29vcmRpbmF0ZVR5cGUgPSBmb3JtYXRGbGFncyAmIDY1NTM2ID8gInplcm8tYmFzZWQtaGFsZi1vcGVuIiA6ICIxLWJhc2VkLWNsb3NlZCI7CiAgICAgIGNvbnN0IGZvcm1hdE9wdHMgPSB7CiAgICAgICAgMDogImdlbmVyaWMiLAogICAgICAgIDE6ICJTQU0iLAogICAgICAgIDI6ICJWQ0YiCiAgICAgIH07CiAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdE9wdHNbZm9ybWF0RmxhZ3MgJiAxNV07CiAgICAgIGlmICghZm9ybWF0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIFRhYml4IHByZXNldCBmb3JtYXQgZmxhZ3MgJHtmb3JtYXRGbGFnc31gKTsKICAgICAgfQogICAgICBjb25zdCBjb2x1bW5OdW1iZXJzID0gewogICAgICAgIHJlZjogYnl0ZXMucmVhZEludDMyTEUoMTIpLAogICAgICAgIHN0YXJ0OiBieXRlcy5yZWFkSW50MzJMRSgxNiksCiAgICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRSgyMCkKICAgICAgfTsKICAgICAgY29uc3QgbWV0YVZhbHVlID0gYnl0ZXMucmVhZEludDMyTEUoMjQpOwogICAgICBjb25zdCBkZXB0aCA9IDU7CiAgICAgIGNvbnN0IG1heEJpbk51bWJlciA9ICgoMSA8PCAoZGVwdGggKyAxKSAqIDMpIC0gMSkgLyA3OwogICAgICBjb25zdCBtYXhSZWZMZW5ndGggPSAyICoqICgxNCArIGRlcHRoICogMyk7CiAgICAgIGNvbnN0IG1ldGFDaGFyID0gbWV0YVZhbHVlID8gU3RyaW5nLmZyb21DaGFyQ29kZShtZXRhVmFsdWUpIDogbnVsbDsKICAgICAgY29uc3Qgc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUoMjgpOwogICAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDMyKTsKICAgICAgY29uc3QgeyByZWZOYW1lVG9JZCwgcmVmSWRUb05hbWUgfSA9IHRoaXMuX3BhcnNlTmFtZUJ5dGVzKGJ5dGVzLnNsaWNlKDM2LCAzNiArIG5hbWVTZWN0aW9uTGVuZ3RoKSk7CiAgICAgIGxldCBjdXJyT2Zmc2V0ID0gMzYgKyBuYW1lU2VjdGlvbkxlbmd0aDsKICAgICAgbGV0IGZpcnN0RGF0YUxpbmU7CiAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgQXJyYXkocmVmQ291bnQpLmZpbGwoMCkubWFwKCgpID0+IHsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICBjb25zdCBiaW5JbmRleCA9IHt9OwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICAgIGlmIChiaW4gPiBtYXhCaW5OdW1iZXIgKyAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGFiaXggaW5kZXggY29udGFpbnMgdG9vIG1hbnkgYmlucywgcGxlYXNlIHVzZSBhIENTSSBpbmRleCIpOwogICAgICAgICAgfSBlbHNlIGlmIChiaW4gPT09IG1heEJpbk51bWJlciArIDEpIHsKICAgICAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgIGlmIChjaHVua0NvdW50ID09PSAyKSB7CiAgICAgICAgICAgICAgc3RhdHMgPSB0aGlzLnBhcnNlUHNldWRvQmluKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2ICogY2h1bmtDb3VudDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGNodW5rQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgICAgICBjb25zdCBjaHVua3MgPSBuZXcgQXJyYXkoY2h1bmtDb3VudCk7CiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2h1bmtDb3VudDsgayArPSAxKSB7CiAgICAgICAgICAgICAgY29uc3QgdSA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCk7CiAgICAgICAgICAgICAgY29uc3QgdiA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDgpOwogICAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMTY7CiAgICAgICAgICAgICAgZmlyc3REYXRhTGluZSA9IHRoaXMuX2ZpbmRGaXJzdERhdGEoZmlyc3REYXRhTGluZSwgdSk7CiAgICAgICAgICAgICAgY2h1bmtzW2tdID0gbmV3IENodW5rKHUsIHYsIGJpbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmluSW5kZXhbYmluXSA9IGNodW5rczsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgbGluZWFyQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgY29uc3QgbGluZWFySW5kZXggPSBuZXcgQXJyYXkobGluZWFyQ291bnQpOwogICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZWFyQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgbGluZWFySW5kZXhba10gPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgY3Vyck9mZnNldCArPSA4OwogICAgICAgICAgZmlyc3REYXRhTGluZSA9IHRoaXMuX2ZpbmRGaXJzdERhdGEoZmlyc3REYXRhTGluZSwgbGluZWFySW5kZXhba10pOwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBiaW5JbmRleCwgbGluZWFySW5kZXgsIHN0YXRzIH07CiAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGluZGljZXMsCiAgICAgICAgbWV0YUNoYXIsCiAgICAgICAgbWF4QmluTnVtYmVyLAogICAgICAgIG1heFJlZkxlbmd0aCwKICAgICAgICBza2lwTGluZXMsCiAgICAgICAgZmlyc3REYXRhTGluZSwKICAgICAgICBjb2x1bW5OdW1iZXJzLAogICAgICAgIGNvb3JkaW5hdGVUeXBlLAogICAgICAgIGZvcm1hdCwKICAgICAgICByZWZJZFRvTmFtZSwKICAgICAgICByZWZOYW1lVG9JZCwKICAgICAgICBtYXhCbG9ja1NpemU6IDEgPDwgMTYKICAgICAgfTsKICAgIH0KICAgIHBhcnNlUHNldWRvQmluKGJ5dGVzLCBvZmZzZXQpIHsKICAgICAgY29uc3QgbGluZUNvdW50ID0gbG9uZ1RvTnVtYmVyKGltcG9ydF9sb25nMi5kZWZhdWx0LmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDE2LCBvZmZzZXQgKyAyNCksIHRydWUpKTsKICAgICAgcmV0dXJuIHsgbGluZUNvdW50IH07CiAgICB9CiAgICBfcGFyc2VOYW1lQnl0ZXMobmFtZXNCeXRlcykgewogICAgICBsZXQgY3VyclJlZklkID0gMDsKICAgICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwOwogICAgICBjb25zdCByZWZJZFRvTmFtZSA9IFtdOwogICAgICBjb25zdCByZWZOYW1lVG9JZCA9IHt9OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBpZiAoIW5hbWVzQnl0ZXNbaV0pIHsKICAgICAgICAgIGlmIChjdXJyTmFtZVN0YXJ0IDwgaSkgewogICAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoInV0ZjgiLCBjdXJyTmFtZVN0YXJ0LCBpKTsKICAgICAgICAgICAgcmVmTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxKHJlZk5hbWUpOwogICAgICAgICAgICByZWZJZFRvTmFtZVtjdXJyUmVmSWRdID0gcmVmTmFtZTsKICAgICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjdXJyUmVmSWQgKz0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH07CiAgICB9CiAgICBhc3luYyBibG9ja3NGb3JSYW5nZShyZWZOYW1lLCBtaW4sIG1heCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChtaW4gPCAwKSB7CiAgICAgICAgbWluID0gMDsKICAgICAgfQogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBpZiAoIWluZGV4RGF0YSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCByZWZJZCA9IGluZGV4RGF0YS5yZWZOYW1lVG9JZFtyZWZOYW1lXTsKICAgICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghYmEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgbWluT2Zmc2V0ID0gYmEubGluZWFySW5kZXgubGVuZ3RoID8gYmEubGluZWFySW5kZXhbbWluID4+IFRBRF9MSURYX1NISUZUID49IGJhLmxpbmVhckluZGV4Lmxlbmd0aCA/IGJhLmxpbmVhckluZGV4Lmxlbmd0aCAtIDEgOiBtaW4gPj4gVEFEX0xJRFhfU0hJRlRdIDogbmV3IFZpcnR1YWxPZmZzZXQoMCwgMCk7CiAgICAgIGlmICghbWluT2Zmc2V0KSB7CiAgICAgICAgY29uc29sZS53YXJuKCJxdWVyeWluZyBvdXRzaWRlIG9mIHBvc3NpYmxlIHRhYml4IHJhbmdlIik7CiAgICAgIH0KICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdCaW5zID0gcmVnMmJpbnMobWluLCBtYXgpOwogICAgICBjb25zdCBjaHVua3MgPSBbXTsKICAgICAgZm9yIChjb25zdCBbc3RhcnQsIGVuZF0gb2Ygb3ZlcmxhcHBpbmdCaW5zKSB7CiAgICAgICAgZm9yIChsZXQgYmluID0gc3RhcnQ7IGJpbiA8PSBlbmQ7IGJpbisrKSB7CiAgICAgICAgICBpZiAoYmEuYmluSW5kZXhbYmluXSkgewogICAgICAgICAgICBjb25zdCBiaW5DaHVua3MgPSBiYS5iaW5JbmRleFtiaW5dOwogICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGJpbkNodW5rcy5sZW5ndGg7ICsrYykgewogICAgICAgICAgICAgIGNodW5rcy5wdXNoKG5ldyBDaHVuayhiaW5DaHVua3NbY10ubWludiwgYmluQ2h1bmtzW2NdLm1heHYsIGJpbikpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IG5pbnR2ID0gYmEubGluZWFySW5kZXgubGVuZ3RoOwogICAgICBsZXQgbG93ZXN0ID0gbnVsbDsKICAgICAgY29uc3QgbWluTGluID0gTWF0aC5taW4obWluID4+IDE0LCBuaW50diAtIDEpOwogICAgICBjb25zdCBtYXhMaW4gPSBNYXRoLm1pbihtYXggPj4gMTQsIG5pbnR2IC0gMSk7CiAgICAgIGZvciAobGV0IGkgPSBtaW5MaW47IGkgPD0gbWF4TGluOyArK2kpIHsKICAgICAgICBjb25zdCB2cCA9IGJhLmxpbmVhckluZGV4W2ldOwogICAgICAgIGlmICh2cCkgewogICAgICAgICAgaWYgKCFsb3dlc3QgfHwgdnAuY29tcGFyZVRvKGxvd2VzdCkgPCAwKSB7CiAgICAgICAgICAgIGxvd2VzdCA9IHZwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3B0aW1pemVDaHVua3MoY2h1bmtzLCBsb3dlc3QpOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS9jc2kuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9sb25nMyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb25nKCkpOwogIHZhciBDU0kxX01BR0lDID0gMjE1ODI2NTk7CiAgdmFyIENTSTJfTUFHSUMgPSAzODM1OTg3NTsKICBmdW5jdGlvbiBsc2hpZnQobnVtLCBiaXRzKSB7CiAgICByZXR1cm4gbnVtICogMiAqKiBiaXRzOwogIH0KICBmdW5jdGlvbiByc2hpZnQobnVtLCBiaXRzKSB7CiAgICByZXR1cm4gTWF0aC5mbG9vcihudW0gLyAyICoqIGJpdHMpOwogIH0KICB2YXIgQ1NJID0gY2xhc3MgZXh0ZW5kcyBJbmRleEZpbGUgewogICAgY29uc3RydWN0b3IoYXJncykgewogICAgICBzdXBlcihhcmdzKTsKICAgICAgdGhpcy5tYXhCaW5OdW1iZXIgPSAwOwogICAgICB0aGlzLmRlcHRoID0gMDsKICAgICAgdGhpcy5taW5TaGlmdCA9IDA7CiAgICB9CiAgICBhc3luYyBsaW5lQ291bnQocmVmTmFtZSwgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGlmICghaW5kZXhEYXRhKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHJlZklkID0gaW5kZXhEYXRhLnJlZk5hbWVUb0lkW3JlZk5hbWVdOwogICAgICBjb25zdCBpZHggPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghaWR4KSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHsgc3RhdHMgfSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKHN0YXRzKSB7CiAgICAgICAgcmV0dXJuIHN0YXRzLmxpbmVDb3VudDsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBhc3luYyBpbmRleENvdigpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDU0kgaW5kZXhlcyBkbyBub3Qgc3VwcG9ydCBpbmRleGNvdiIpOwogICAgfQogICAgcGFyc2VBdXhEYXRhKGJ5dGVzLCBvZmZzZXQpIHsKICAgICAgY29uc3QgZm9ybWF0RmxhZ3MgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQpOwogICAgICBjb25zdCBjb29yZGluYXRlVHlwZSA9IGZvcm1hdEZsYWdzICYgNjU1MzYgPyAiemVyby1iYXNlZC1oYWxmLW9wZW4iIDogIjEtYmFzZWQtY2xvc2VkIjsKICAgICAgY29uc3QgZm9ybWF0ID0geyAwOiAiZ2VuZXJpYyIsIDE6ICJTQU0iLCAyOiAiVkNGIiB9W2Zvcm1hdEZsYWdzICYgMTVdOwogICAgICBpZiAoIWZvcm1hdCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBUYWJpeCBwcmVzZXQgZm9ybWF0IGZsYWdzICR7Zm9ybWF0RmxhZ3N9YCk7CiAgICAgIH0KICAgICAgY29uc3QgY29sdW1uTnVtYmVycyA9IHsKICAgICAgICByZWY6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDQpLAogICAgICAgIHN0YXJ0OiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyA4KSwKICAgICAgICBlbmQ6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDEyKQogICAgICB9OwogICAgICBjb25zdCBtZXRhVmFsdWUgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxNik7CiAgICAgIGNvbnN0IG1ldGFDaGFyID0gbWV0YVZhbHVlID8gU3RyaW5nLmZyb21DaGFyQ29kZShtZXRhVmFsdWUpIDogbnVsbDsKICAgICAgY29uc3Qgc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMjApOwogICAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDI0KTsKICAgICAgY29uc3QgeyByZWZJZFRvTmFtZSwgcmVmTmFtZVRvSWQgfSA9IHRoaXMuX3BhcnNlTmFtZUJ5dGVzKGJ5dGVzLnNsaWNlKG9mZnNldCArIDI4LCBvZmZzZXQgKyAyOCArIG5hbWVTZWN0aW9uTGVuZ3RoKSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgcmVmSWRUb05hbWUsCiAgICAgICAgcmVmTmFtZVRvSWQsCiAgICAgICAgc2tpcExpbmVzLAogICAgICAgIG1ldGFDaGFyLAogICAgICAgIGNvbHVtbk51bWJlcnMsCiAgICAgICAgZm9ybWF0LAogICAgICAgIGNvb3JkaW5hdGVUeXBlCiAgICAgIH07CiAgICB9CiAgICBfcGFyc2VOYW1lQnl0ZXMobmFtZXNCeXRlcykgewogICAgICBsZXQgY3VyclJlZklkID0gMDsKICAgICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwOwogICAgICBjb25zdCByZWZJZFRvTmFtZSA9IFtdOwogICAgICBjb25zdCByZWZOYW1lVG9JZCA9IHt9OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBpZiAoIW5hbWVzQnl0ZXNbaV0pIHsKICAgICAgICAgIGlmIChjdXJyTmFtZVN0YXJ0IDwgaSkgewogICAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoInV0ZjgiLCBjdXJyTmFtZVN0YXJ0LCBpKTsKICAgICAgICAgICAgcmVmTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxKHJlZk5hbWUpOwogICAgICAgICAgICByZWZJZFRvTmFtZVtjdXJyUmVmSWRdID0gcmVmTmFtZTsKICAgICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjdXJyUmVmSWQgKz0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH07CiAgICB9CiAgICBhc3luYyBfcGFyc2Uob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgdW56aXAoYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWRGaWxlKG9wdHMpKTsKICAgICAgbGV0IGNzaVZlcnNpb247CiAgICAgIGlmIChieXRlcy5yZWFkVUludDMyTEUoMCkgPT09IENTSTFfTUFHSUMpIHsKICAgICAgICBjc2lWZXJzaW9uID0gMTsKICAgICAgfSBlbHNlIGlmIChieXRlcy5yZWFkVUludDMyTEUoMCkgPT09IENTSTJfTUFHSUMpIHsKICAgICAgICBjc2lWZXJzaW9uID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIENTSSBmaWxlIik7CiAgICAgIH0KICAgICAgdGhpcy5taW5TaGlmdCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDQpOwogICAgICB0aGlzLmRlcHRoID0gYnl0ZXMucmVhZEludDMyTEUoOCk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gKCgxIDw8ICh0aGlzLmRlcHRoICsgMSkgKiAzKSAtIDEpIC8gNzsKICAgICAgY29uc3QgbWF4UmVmTGVuZ3RoID0gMiAqKiAodGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzKTsKICAgICAgY29uc3QgYXV4TGVuZ3RoID0gYnl0ZXMucmVhZEludDMyTEUoMTIpOwogICAgICBjb25zdCBhdXggPSBhdXhMZW5ndGggJiYgYXV4TGVuZ3RoID49IDMwID8gdGhpcy5wYXJzZUF1eERhdGEoYnl0ZXMsIDE2KSA6IHsKICAgICAgICByZWZJZFRvTmFtZTogW10sCiAgICAgICAgcmVmTmFtZVRvSWQ6IHt9LAogICAgICAgIG1ldGFDaGFyOiBudWxsLAogICAgICAgIGNvbHVtbk51bWJlcnM6IHsgcmVmOiAwLCBzdGFydDogMSwgZW5kOiAyIH0sCiAgICAgICAgY29vcmRpbmF0ZVR5cGU6ICJ6ZXJvLWJhc2VkLWhhbGYtb3BlbiIsCiAgICAgICAgZm9ybWF0OiAiZ2VuZXJpYyIKICAgICAgfTsKICAgICAgY29uc3QgcmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSgxNiArIGF1eExlbmd0aCk7CiAgICAgIGxldCBmaXJzdERhdGFMaW5lOwogICAgICBsZXQgY3Vyck9mZnNldCA9IDE2ICsgYXV4TGVuZ3RoICsgNDsKICAgICAgY29uc3QgaW5kaWNlcyA9IG5ldyBBcnJheShyZWZDb3VudCkuZmlsbCgwKS5tYXAoKCkgPT4gewogICAgICAgIGNvbnN0IGJpbkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgIGNvbnN0IGJpbkluZGV4ID0ge307CiAgICAgICAgbGV0IHN0YXRzOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmluQ291bnQ7IGogKz0gMSkgewogICAgICAgICAgY29uc3QgYmluID0gYnl0ZXMucmVhZFVJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgICAgaWYgKGJpbiA+IHRoaXMubWF4QmluTnVtYmVyKSB7CiAgICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCArIDQpOwogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQgKyA4ICsgNCArIDE2ICsgMTY7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBsb2Zmc2V0ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0ICsgNCk7CiAgICAgICAgICAgIGZpcnN0RGF0YUxpbmUgPSB0aGlzLl9maW5kRmlyc3REYXRhKGZpcnN0RGF0YUxpbmUsIGxvZmZzZXQpOwogICAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCArIDEyKTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gbmV3IEFycmF5KGNodW5rQ291bnQpOwogICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgICAgIGNvbnN0IHUgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KTsKICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2OwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IGJpbkluZGV4LCBzdGF0cyB9OwogICAgICB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICAuLi5hdXgsCiAgICAgICAgY3NpOiB0cnVlLAogICAgICAgIHJlZkNvdW50LAogICAgICAgIG1heEJsb2NrU2l6ZTogMSA8PCAxNiwKICAgICAgICBmaXJzdERhdGFMaW5lLAogICAgICAgIGNzaVZlcnNpb24sCiAgICAgICAgaW5kaWNlcywKICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCwKICAgICAgICBtYXhCaW5OdW1iZXI6IHRoaXMubWF4QmluTnVtYmVyLAogICAgICAgIG1heFJlZkxlbmd0aAogICAgICB9OwogICAgfQogICAgcGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIG9mZnNldCkgewogICAgICBjb25zdCBsaW5lQ291bnQgPSBsb25nVG9OdW1iZXIoaW1wb3J0X2xvbmczLmRlZmF1bHQuZnJvbUJ5dGVzTEUoYnl0ZXMuc2xpY2Uob2Zmc2V0ICsgMjgsIG9mZnNldCArIDM2KSwgdHJ1ZSkpOwogICAgICByZXR1cm4geyBsaW5lQ291bnQgfTsKICAgIH0KICAgIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZk5hbWUsIG1pbiwgbWF4LCBvcHRzID0ge30pIHsKICAgICAgaWYgKG1pbiA8IDApIHsKICAgICAgICBtaW4gPSAwOwogICAgICB9CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGlmICghaW5kZXhEYXRhKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGNvbnN0IHJlZklkID0gaW5kZXhEYXRhLnJlZk5hbWVUb0lkW3JlZk5hbWVdOwogICAgICBjb25zdCBiYSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFiYSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCBvdmVybGFwcGluZ0JpbnMgPSB0aGlzLnJlZzJiaW5zKG1pbiwgbWF4KTsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykgewogICAgICAgIGZvciAobGV0IGJpbiA9IHN0YXJ0OyBiaW4gPD0gZW5kOyBiaW4rKykgewogICAgICAgICAgaWYgKGJhLmJpbkluZGV4W2Jpbl0pIHsKICAgICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXTsKICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBiaW5DaHVua3MubGVuZ3RoOyArK2MpIHsKICAgICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3B0aW1pemVDaHVua3MoY2h1bmtzLCBuZXcgVmlydHVhbE9mZnNldCgwLCAwKSk7CiAgICB9CiAgICByZWcyYmlucyhiZWcsIGVuZCkgewogICAgICBiZWcgLT0gMTsKICAgICAgaWYgKGJlZyA8IDEpIHsKICAgICAgICBiZWcgPSAxOwogICAgICB9CiAgICAgIGlmIChlbmQgPiAyICoqIDUwKSB7CiAgICAgICAgZW5kID0gMiAqKiAzNDsKICAgICAgfQogICAgICBlbmQgLT0gMTsKICAgICAgbGV0IGwgPSAwOwogICAgICBsZXQgdCA9IDA7CiAgICAgIGxldCBzID0gdGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzOwogICAgICBjb25zdCBiaW5zID0gW107CiAgICAgIGZvciAoOyBsIDw9IHRoaXMuZGVwdGg7IHMgLT0gMywgdCArPSBsc2hpZnQoMSwgbCAqIDMpLCBsICs9IDEpIHsKICAgICAgICBjb25zdCBiID0gdCArIHJzaGlmdChiZWcsIHMpOwogICAgICAgIGNvbnN0IGUgPSB0ICsgcnNoaWZ0KGVuZCwgcyk7CiAgICAgICAgaWYgKGUgLSBiICsgYmlucy5sZW5ndGggPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdWVyeSAke2JlZ30tJHtlbmR9IGlzIHRvbyBsYXJnZSBmb3IgY3VycmVudCBiaW5uaW5nIHNjaGVtZSAoc2hpZnQgJHt0aGlzLm1pblNoaWZ0fSwgZGVwdGggJHt0aGlzLmRlcHRofSksIHRyeSBhIHNtYWxsZXIgcXVlcnkgb3IgYSBjb2Fyc2VyIGluZGV4IGJpbm5pbmcgc2NoZW1lYCk7CiAgICAgICAgfQogICAgICAgIGJpbnMucHVzaChbYiwgZV0pOwogICAgICB9CiAgICAgIHJldHVybiBiaW5zOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS90YWJpeEluZGV4ZWRGaWxlLmpzCiAgdmFyIGRlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT09ICJ1bmRlZmluZWQiID8gbmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpIDogdm9pZCAwOwogIGZ1bmN0aW9uIHRpbWVvdXQodGltZSkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpKTsKICB9CiAgdmFyIFRhYml4SW5kZXhlZEZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih7IHBhdGgsIGZpbGVoYW5kbGUsIHRiaVBhdGgsIHRiaUZpbGVoYW5kbGUsIGNzaVBhdGgsIGNzaUZpbGVoYW5kbGUsIHlpZWxkVGltZSA9IDUwMCwgY2h1bmtTaXplTGltaXQgPSA1ZTcsIHJlbmFtZVJlZlNlcXMgPSAobikgPT4gbiwgY2h1bmtDYWNoZVNpemUgPSA1ICogMiAqKiAyMCB9KSB7CiAgICAgIGlmIChmaWxlaGFuZGxlKSB7CiAgICAgICAgdGhpcy5maWxlaGFuZGxlID0gZmlsZWhhbmRsZTsKICAgICAgfSBlbHNlIGlmIChwYXRoKSB7CiAgICAgICAgdGhpcy5maWxlaGFuZGxlID0gbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChwYXRoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHByb3ZpZGUgZWl0aGVyIGZpbGVoYW5kbGUgb3IgcGF0aCIpOwogICAgICB9CiAgICAgIGlmICh0YmlGaWxlaGFuZGxlKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBUYWJpeEluZGV4KHsKICAgICAgICAgIGZpbGVoYW5kbGU6IHRiaUZpbGVoYW5kbGUsCiAgICAgICAgICByZW5hbWVSZWZTZXFzCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoY3NpRmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgQ1NJKHsKICAgICAgICAgIGZpbGVoYW5kbGU6IGNzaUZpbGVoYW5kbGUsCiAgICAgICAgICByZW5hbWVSZWZTZXFzCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAodGJpUGF0aCkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgVGFiaXhJbmRleCh7CiAgICAgICAgICBmaWxlaGFuZGxlOiBuZXcgaW1wb3J0X2xvY2FsRmlsZS5kZWZhdWx0KHRiaVBhdGgpLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGNzaVBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IENTSSh7CiAgICAgICAgICBmaWxlaGFuZGxlOiBuZXcgaW1wb3J0X2xvY2FsRmlsZS5kZWZhdWx0KGNzaVBhdGgpLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IFRhYml4SW5kZXgoewogICAgICAgICAgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChgJHtwYXRofS50YmlgKSwKICAgICAgICAgIHJlbmFtZVJlZlNlcXMKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHByb3ZpZGUgb25lIG9mIHRiaUZpbGVoYW5kbGUsIHRiaVBhdGgsIGNzaUZpbGVoYW5kbGUsIG9yIGNzaVBhdGgiKTsKICAgICAgfQogICAgICB0aGlzLmNodW5rU2l6ZUxpbWl0ID0gY2h1bmtTaXplTGltaXQ7CiAgICAgIHRoaXMucmVuYW1lUmVmU2VxID0gcmVuYW1lUmVmU2VxczsKICAgICAgdGhpcy55aWVsZFRpbWUgPSB5aWVsZFRpbWU7CiAgICAgIHRoaXMuY2h1bmtDYWNoZSA9IG5ldyBpbXBvcnRfYWJvcnRhYmxlX3Byb21pc2VfY2FjaGUuZGVmYXVsdCh7CiAgICAgICAgY2FjaGU6IG5ldyBpbXBvcnRfcXVpY2tfbHJ1LmRlZmF1bHQoeyBtYXhTaXplOiBNYXRoLmZsb29yKGNodW5rQ2FjaGVTaXplIC8gKDEgPDwgMTYpKSB9KSwKICAgICAgICBmaWxsOiAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnJlYWRDaHVuayhhcmdzLCB7IHNpZ25hbCB9KQogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGdldExpbmVzKHJlZk5hbWUsIHN0YXJ0LCBlbmQsIG9wdHMpIHsKICAgICAgbGV0IHNpZ25hbDsKICAgICAgbGV0IG9wdGlvbnMgPSB7fTsKICAgICAgbGV0IGNhbGxiYWNrOwogICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibGluZSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIik7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY2FsbGJhY2sgPSBvcHRzOwogICAgICB9IGVsc2UgewogICAgICAgIG9wdGlvbnMgPSBvcHRzOwogICAgICAgIGNhbGxiYWNrID0gb3B0cy5saW5lQ2FsbGJhY2s7CiAgICAgIH0KICAgICAgaWYgKHJlZk5hbWUgPT09IHZvaWQgMCkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIm11c3QgcHJvdmlkZSBhIHJlZmVyZW5jZSBzZXF1ZW5jZSBuYW1lIik7CiAgICAgIH0KICAgICAgaWYgKCFjYWxsYmFjaykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImxpbmUgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCIpOwogICAgICB9CiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy5pbmRleC5nZXRNZXRhZGF0YShvcHRpb25zKTsKICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpOwogICAgICBpZiAoIXN0YXJ0KSB7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICB9CiAgICAgIGlmICghZW5kKSB7CiAgICAgICAgZW5kID0gbWV0YWRhdGEubWF4UmVmTGVuZ3RoOwogICAgICB9CiAgICAgIGlmICghKHN0YXJ0IDw9IGVuZCkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN0YXJ0IGFuZCBlbmQgY29vcmRpbmF0ZXMuIHN0YXJ0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGVuZCIpOwogICAgICB9CiAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGNodW5rcyA9IGF3YWl0IHRoaXMuaW5kZXguYmxvY2tzRm9yUmFuZ2UocmVmTmFtZSwgc3RhcnQsIGVuZCwgb3B0aW9ucyk7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBjb25zdCBzaXplID0gY2h1bmtzW2ldLmZldGNoZWRTaXplKCk7CiAgICAgICAgaWYgKHNpemUgPiB0aGlzLmNodW5rU2l6ZUxpbWl0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvbyBtdWNoIGRhdGEuIENodW5rIHNpemUgJHtzaXplLnRvTG9jYWxlU3RyaW5nKCl9IGJ5dGVzIGV4Y2VlZHMgY2h1bmtTaXplTGltaXQgb2YgJHt0aGlzLmNodW5rU2l6ZUxpbWl0LnRvTG9jYWxlU3RyaW5nKCl9LmApOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgbGFzdCA9IERhdGUubm93KCk7CiAgICAgIGZvciAobGV0IGNodW5rTnVtID0gMDsgY2h1bmtOdW0gPCBjaHVua3MubGVuZ3RoOyBjaHVua051bSArPSAxKSB7CiAgICAgICAgbGV0IHByZXZpb3VzU3RhcnRDb29yZGluYXRlOwogICAgICAgIGNvbnN0IGMgPSBjaHVua3NbY2h1bmtOdW1dOwogICAgICAgIGNvbnN0IHsgYnVmZmVyLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zIH0gPSBhd2FpdCB0aGlzLmNodW5rQ2FjaGUuZ2V0KGMudG9TdHJpbmcoKSwgYyk7CiAgICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpOwogICAgICAgIGxldCBibG9ja1N0YXJ0ID0gMDsKICAgICAgICBsZXQgcG9zID0gMDsKICAgICAgICB3aGlsZSAoYmxvY2tTdGFydCA8IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IG4gPSBidWZmZXIuaW5kZXhPZigiXG4iLCBibG9ja1N0YXJ0KTsKICAgICAgICAgIGlmIChuID09PSAtMSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGIgPSBidWZmZXIuc2xpY2UoYmxvY2tTdGFydCwgbik7CiAgICAgICAgICBjb25zdCBsaW5lID0gKGRlY29kZXIgPT09IG51bGwgfHwgZGVjb2RlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVjb2Rlci5kZWNvZGUoYikpIHx8IGIudG9TdHJpbmcoKTsKICAgICAgICAgIGlmIChkcG9zaXRpb25zKSB7CiAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YXJ0ICsgYy5taW52LmRhdGFQb3NpdGlvbiA+PSBkcG9zaXRpb25zW3BvcysrXSkgewogICAgICAgICAgICB9CiAgICAgICAgICAgIHBvcy0tOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgeyBzdGFydENvb3JkaW5hdGUsIG92ZXJsYXBzIH0gPSB0aGlzLmNoZWNrTGluZShtZXRhZGF0YSwgcmVmTmFtZSwgc3RhcnQsIGVuZCwgbGluZSk7CiAgICAgICAgICBpZiAocHJldmlvdXNTdGFydENvb3JkaW5hdGUgIT09IHZvaWQgMCAmJiBzdGFydENvb3JkaW5hdGUgIT09IHZvaWQgMCAmJiBwcmV2aW91c1N0YXJ0Q29vcmRpbmF0ZSA+IHN0YXJ0Q29vcmRpbmF0ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExpbmVzIG5vdCBzb3J0ZWQgYnkgc3RhcnQgY29vcmRpbmF0ZSAoJHtwcmV2aW91c1N0YXJ0Q29vcmRpbmF0ZX0gPiAke3N0YXJ0Q29vcmRpbmF0ZX0pLCB0aGlzIGZpbGUgaXMgbm90IHVzYWJsZSB3aXRoIFRhYml4LmApOwogICAgICAgICAgfQogICAgICAgICAgcHJldmlvdXNTdGFydENvb3JkaW5hdGUgPSBzdGFydENvb3JkaW5hdGU7CiAgICAgICAgICBpZiAob3ZlcmxhcHMpIHsKICAgICAgICAgICAgY2FsbGJhY2sobGluZS50cmltKCksIGNwb3NpdGlvbnNbcG9zXSAqICgxIDw8IDgpICsgKGJsb2NrU3RhcnQgLSBkcG9zaXRpb25zW3Bvc10pICsgYy5taW52LmRhdGFQb3NpdGlvbiArIDEpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGFydENvb3JkaW5hdGUgIT09IHZvaWQgMCAmJiBzdGFydENvb3JkaW5hdGUgPj0gZW5kKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnlpZWxkVGltZSAmJiBsYXN0IC0gRGF0ZS5ub3coKSA+IHRoaXMueWllbGRUaW1lKSB7CiAgICAgICAgICAgIGxhc3QgPSBEYXRlLm5vdygpOwogICAgICAgICAgICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICAgIGF3YWl0IHRpbWVvdXQoMSk7CiAgICAgICAgICB9CiAgICAgICAgICBibG9ja1N0YXJ0ID0gbiArIDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3luYyBnZXRNZXRhZGF0YShvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0TWV0YWRhdGEob3B0cyk7CiAgICB9CiAgICBhc3luYyBnZXRIZWFkZXJCdWZmZXIob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZmlyc3REYXRhTGluZSwgbWV0YUNoYXIsIG1heEJsb2NrU2l6ZSB9ID0gYXdhaXQgdGhpcy5nZXRNZXRhZGF0YShvcHRzKTsKICAgICAgY2hlY2tBYm9ydFNpZ25hbChvcHRzLnNpZ25hbCk7CiAgICAgIGNvbnN0IG1heEZldGNoID0gKChmaXJzdERhdGFMaW5lID09PSBudWxsIHx8IGZpcnN0RGF0YUxpbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RGF0YUxpbmUuYmxvY2tQb3NpdGlvbikgfHwgMCkgKyBtYXhCbG9ja1NpemU7CiAgICAgIGxldCBieXRlcyA9IGF3YWl0IHRoaXMuX3JlYWRSZWdpb24oMCwgbWF4RmV0Y2gsIG9wdHMpOwogICAgICBjaGVja0Fib3J0U2lnbmFsKG9wdHMuc2lnbmFsKTsKICAgICAgdHJ5IHsKICAgICAgICBieXRlcyA9IGF3YWl0IHVuemlwKGJ5dGVzKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBkZWNvbXByZXNzaW5nIGJsb2NrICR7ZS5jb2RlfSBhdCAwIChsZW5ndGggJHttYXhGZXRjaH0pICR7ZX1gKTsKICAgICAgfQogICAgICBpZiAobWV0YUNoYXIpIHsKICAgICAgICBsZXQgbGFzdE5ld2xpbmUgPSAtMTsKICAgICAgICBjb25zdCBuZXdsaW5lQnl0ZSA9ICJcbiIuY2hhckNvZGVBdCgwKTsKICAgICAgICBjb25zdCBtZXRhQnl0ZSA9IG1ldGFDaGFyLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKGkgPT09IGxhc3ROZXdsaW5lICsgMSAmJiBieXRlc1tpXSAhPT0gbWV0YUJ5dGUpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnl0ZXNbaV0gPT09IG5ld2xpbmVCeXRlKSB7CiAgICAgICAgICAgIGxhc3ROZXdsaW5lID0gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnl0ZXMgPSBieXRlcy5zbGljZSgwLCBsYXN0TmV3bGluZSArIDEpOwogICAgICB9CiAgICAgIHJldHVybiBieXRlczsKICAgIH0KICAgIGFzeW5jIGdldEhlYWRlcihvcHRzID0ge30pIHsKICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCB0aGlzLmdldEhlYWRlckJ1ZmZlcihvcHRzKTsKICAgICAgcmV0dXJuIGJ5dGVzLnRvU3RyaW5nKCJ1dGY4Iik7CiAgICB9CiAgICBhc3luYyBnZXRSZWZlcmVuY2VTZXF1ZW5jZU5hbWVzKG9wdHMgPSB7fSkgewogICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuZ2V0TWV0YWRhdGEob3B0cyk7CiAgICAgIHJldHVybiBtZXRhZGF0YS5yZWZJZFRvTmFtZTsKICAgIH0KICAgIGNoZWNrTGluZShtZXRhZGF0YSwgcmVnaW9uUmVmTmFtZSwgcmVnaW9uU3RhcnQsIHJlZ2lvbkVuZCwgbGluZSkgewogICAgICBjb25zdCB7IGNvbHVtbk51bWJlcnMsIG1ldGFDaGFyLCBjb29yZGluYXRlVHlwZSwgZm9ybWF0IH0gPSBtZXRhZGF0YTsKICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBtZXRhQ2hhcikgewogICAgICAgIHJldHVybiB7IG92ZXJsYXBzOiBmYWxzZSB9OwogICAgICB9CiAgICAgIGxldCB7IHJlZiwgc3RhcnQsIGVuZCB9ID0gY29sdW1uTnVtYmVyczsKICAgICAgaWYgKCFyZWYpIHsKICAgICAgICByZWYgPSAwOwogICAgICB9CiAgICAgIGlmICghc3RhcnQpIHsKICAgICAgICBzdGFydCA9IDA7CiAgICAgIH0KICAgICAgaWYgKCFlbmQpIHsKICAgICAgICBlbmQgPSAwOwogICAgICB9CiAgICAgIGlmIChmb3JtYXQgPT09ICJWQ0YiKSB7CiAgICAgICAgZW5kID0gODsKICAgICAgfQogICAgICBjb25zdCBtYXhDb2x1bW4gPSBNYXRoLm1heChyZWYsIHN0YXJ0LCBlbmQpOwogICAgICBsZXQgY3VycmVudENvbHVtbk51bWJlciA9IDE7CiAgICAgIGxldCBjdXJyZW50Q29sdW1uU3RhcnQgPSAwOwogICAgICBsZXQgcmVmU2VxID0gIiI7CiAgICAgIGxldCBzdGFydENvb3JkaW5hdGUgPSAtSW5maW5pdHk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggKyAxOyBpICs9IDEpIHsKICAgICAgICBpZiAobGluZVtpXSA9PT0gIgkiIHx8IGkgPT09IGxpbmUubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoY3VycmVudENvbHVtbk51bWJlciA9PT0gcmVmKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlbmFtZVJlZlNlcShsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSkpICE9PSByZWdpb25SZWZOYW1lKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENvbHVtbk51bWJlciA9PT0gc3RhcnQpIHsKICAgICAgICAgICAgc3RhcnRDb29yZGluYXRlID0gcGFyc2VJbnQobGluZS5zbGljZShjdXJyZW50Q29sdW1uU3RhcnQsIGkpLCAxMCk7CiAgICAgICAgICAgIGlmIChjb29yZGluYXRlVHlwZSA9PT0gIjEtYmFzZWQtY2xvc2VkIikgewogICAgICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZSAtPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGFydENvb3JkaW5hdGUgPj0gcmVnaW9uRW5kKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRDb29yZGluYXRlLCBvdmVybGFwczogZmFsc2UgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kID09PSAwIHx8IGVuZCA9PT0gc3RhcnQpIHsKICAgICAgICAgICAgICBpZiAoc3RhcnRDb29yZGluYXRlICsgMSA8PSByZWdpb25TdGFydCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRDb29yZGluYXRlLCBvdmVybGFwczogZmFsc2UgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAiVkNGIiAmJiBjdXJyZW50Q29sdW1uTnVtYmVyID09PSA0KSB7CiAgICAgICAgICAgIHJlZlNlcSA9IGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENvbHVtbk51bWJlciA9PT0gZW5kKSB7CiAgICAgICAgICAgIGxldCBlbmRDb29yZGluYXRlOwogICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAiVkNGIikgewogICAgICAgICAgICAgIGVuZENvb3JkaW5hdGUgPSB0aGlzLl9nZXRWY2ZFbmQoc3RhcnRDb29yZGluYXRlLCByZWZTZXEsIGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZW5kQ29vcmRpbmF0ZSA9IHBhcnNlSW50KGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKSwgMTApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChlbmRDb29yZGluYXRlIDw9IHJlZ2lvblN0YXJ0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGN1cnJlbnRDb2x1bW5TdGFydCA9IGkgKyAxOwogICAgICAgICAgY3VycmVudENvbHVtbk51bWJlciArPSAxOwogICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPiBtYXhDb2x1bW4pIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHN0YXJ0Q29vcmRpbmF0ZSwgb3ZlcmxhcHM6IHRydWUgfTsKICAgIH0KICAgIF9nZXRWY2ZFbmQoc3RhcnRDb29yZGluYXRlLCByZWZTZXEsIGluZm8pIHsKICAgICAgbGV0IGVuZENvb3JkaW5hdGUgPSBzdGFydENvb3JkaW5hdGUgKyByZWZTZXEubGVuZ3RoOwogICAgICBjb25zdCBpc1RSQSA9IGluZm8uaW5kZXhPZigiU1ZUWVBFPVRSQSIpICE9PSAtMTsKICAgICAgaWYgKGluZm9bMF0gIT09ICIuIiAmJiAhaXNUUkEpIHsKICAgICAgICBsZXQgcHJldkNoYXIgPSAiOyI7CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmZvLmxlbmd0aDsgaiArPSAxKSB7CiAgICAgICAgICBpZiAocHJldkNoYXIgPT09ICI7IiAmJiBpbmZvLnNsaWNlKGosIGogKyA0KSA9PT0gIkVORD0iKSB7CiAgICAgICAgICAgIGxldCB2YWx1ZUVuZCA9IGluZm8uaW5kZXhPZigiOyIsIGopOwogICAgICAgICAgICBpZiAodmFsdWVFbmQgPT09IC0xKSB7CiAgICAgICAgICAgICAgdmFsdWVFbmQgPSBpbmZvLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRDb29yZGluYXRlID0gcGFyc2VJbnQoaW5mby5zbGljZShqICsgNCwgdmFsdWVFbmQpLCAxMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgcHJldkNoYXIgPSBpbmZvW2pdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc1RSQSkgewogICAgICAgIHJldHVybiBzdGFydENvb3JkaW5hdGUgKyAxOwogICAgICB9CiAgICAgIHJldHVybiBlbmRDb29yZGluYXRlOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZk5hbWUsIG9wdHMgPSB7fSkgewogICAgICByZXR1cm4gdGhpcy5pbmRleC5saW5lQ291bnQocmVmTmFtZSwgb3B0cyk7CiAgICB9CiAgICBhc3luYyBfcmVhZFJlZ2lvbihwb3MsIHNpemUsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBiID0gaW1wb3J0X2J1ZmZlcjcuQnVmZmVyLmFsbG9jKHNpemUpOwogICAgICBjb25zdCB7IGJ5dGVzUmVhZCwgYnVmZmVyIH0gPSBhd2FpdCB0aGlzLmZpbGVoYW5kbGUucmVhZChiLCAwLCBzaXplLCBwb3MsIG9wdHMpOwogICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKDAsIGJ5dGVzUmVhZCk7CiAgICB9CiAgICBhc3luYyByZWFkQ2h1bmsoYywgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9yZWFkUmVnaW9uKGMubWludi5ibG9ja1Bvc2l0aW9uLCBjLmZldGNoZWRTaXplKCksIG9wdHMpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bnppcENodW5rU2xpY2UoZGF0YSwgYyk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVycm9yIGRlY29tcHJlc3NpbmcgYyAke2MudG9TdHJpbmcoKX0gJHtlfWApOwogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbG9kYXNoLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gIm9iamVjdCIgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7CiAgdmFyIGZyZWVHbG9iYWxfZGVmYXVsdCA9IGZyZWVHbG9iYWw7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzCiAgdmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gIm9iamVjdCIgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7CiAgdmFyIHJvb3QgPSBmcmVlR2xvYmFsX2RlZmF1bHQgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsKICB2YXIgcm9vdF9kZWZhdWx0ID0gcm9vdDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcwogIHZhciBTeW1ib2wyID0gcm9vdF9kZWZhdWx0LlN5bWJvbDsKICB2YXIgU3ltYm9sX2RlZmF1bHQgPSBTeW1ib2wyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7CiAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7CiAgdmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sX2RlZmF1bHQgPyBTeW1ib2xfZGVmYXVsdC50b1N0cmluZ1RhZyA6IHZvaWQgMDsKICBmdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHsKICAgIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSwgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddOwogICAgdHJ5IHsKICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdm9pZCAwOwogICAgICB2YXIgdW5tYXNrZWQgPSB0cnVlOwogICAgfSBjYXRjaCAoZSkgewogICAgfQogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpOwogICAgaWYgKHVubWFza2VkKSB7CiAgICAgIGlmIChpc093bikgewogICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZzsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgZ2V0UmF3VGFnX2RlZmF1bHQgPSBnZXRSYXdUYWc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgb2JqZWN0UHJvdG8yID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcyID0gb2JqZWN0UHJvdG8yLnRvU3RyaW5nOwogIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7CiAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUpOwogIH0KICB2YXIgb2JqZWN0VG9TdHJpbmdfZGVmYXVsdCA9IG9iamVjdFRvU3RyaW5nOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcwogIHZhciBudWxsVGFnID0gIltvYmplY3QgTnVsbF0iOwogIHZhciB1bmRlZmluZWRUYWcgPSAiW29iamVjdCBVbmRlZmluZWRdIjsKICB2YXIgc3ltVG9TdHJpbmdUYWcyID0gU3ltYm9sX2RlZmF1bHQgPyBTeW1ib2xfZGVmYXVsdC50b1N0cmluZ1RhZyA6IHZvaWQgMDsKICBmdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gdmFsdWUgPT09IHZvaWQgMCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7CiAgICB9CiAgICByZXR1cm4gc3ltVG9TdHJpbmdUYWcyICYmIHN5bVRvU3RyaW5nVGFnMiBpbiBPYmplY3QodmFsdWUpID8gZ2V0UmF3VGFnX2RlZmF1bHQodmFsdWUpIDogb2JqZWN0VG9TdHJpbmdfZGVmYXVsdCh2YWx1ZSk7CiAgfQogIHZhciBiYXNlR2V0VGFnX2RlZmF1bHQgPSBiYXNlR2V0VGFnOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gIm9iamVjdCI7CiAgfQogIHZhciBpc09iamVjdExpa2VfZGVmYXVsdCA9IGlzT2JqZWN0TGlrZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMKICB2YXIgc3ltYm9sVGFnID0gIltvYmplY3QgU3ltYm9sXSI7CiAgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHsKICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gInN5bWJvbCIgfHwgaXNPYmplY3RMaWtlX2RlZmF1bHQodmFsdWUpICYmIGJhc2VHZXRUYWdfZGVmYXVsdCh2YWx1ZSkgPT0gc3ltYm9sVGFnOwogIH0KICB2YXIgaXNTeW1ib2xfZGVmYXVsdCA9IGlzU3ltYm9sOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7CiAgICB2YXIgaW5kZXggPSAtMSwgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGFycmF5TWFwX2RlZmF1bHQgPSBhcnJheU1hcDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CiAgdmFyIGlzQXJyYXlfZGVmYXVsdCA9IGlzQXJyYXk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvSW50ZWdlci5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9GaW5pdGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvTnVtYmVyLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRyaW0uanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190cmltbWVkRW5kSW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9ccy87CiAgZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykgewogICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDsKICAgIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkgewogICAgfQogICAgcmV0dXJuIGluZGV4OwogIH0KICB2YXIgdHJpbW1lZEVuZEluZGV4X2RlZmF1bHQgPSB0cmltbWVkRW5kSW5kZXg7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVHJpbS5qcwogIHZhciByZVRyaW1TdGFydCA9IC9eXHMrLzsKICBmdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4X2RlZmF1bHQoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICIiKSA6IHN0cmluZzsKICB9CiAgdmFyIGJhc2VUcmltX2RlZmF1bHQgPSBiYXNlVHJpbTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gIm9iamVjdCIgfHwgdHlwZSA9PSAiZnVuY3Rpb24iKTsKICB9CiAgdmFyIGlzT2JqZWN0X2RlZmF1bHQgPSBpc09iamVjdDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9OdW1iZXIuanMKICB2YXIgTkFOID0gMCAvIDA7CiAgdmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTsKICB2YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTsKICB2YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTsKICB2YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7CiAgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gIm51bWJlciIpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgaWYgKGlzU3ltYm9sX2RlZmF1bHQodmFsdWUpKSB7CiAgICAgIHJldHVybiBOQU47CiAgICB9CiAgICBpZiAoaXNPYmplY3RfZGVmYXVsdCh2YWx1ZSkpIHsKICAgICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gImZ1bmN0aW9uIiA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlOwogICAgICB2YWx1ZSA9IGlzT2JqZWN0X2RlZmF1bHQob3RoZXIpID8gb3RoZXIgKyAiIiA6IG90aGVyOwogICAgfQogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAic3RyaW5nIikgewogICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTsKICAgIH0KICAgIHZhbHVlID0gYmFzZVRyaW1fZGVmYXVsdCh2YWx1ZSk7CiAgICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpOwogICAgcmV0dXJuIGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOCkgOiByZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlOwogIH0KICB2YXIgdG9OdW1iZXJfZGVmYXVsdCA9IHRvTnVtYmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0Zpbml0ZS5qcwogIHZhciBJTkZJTklUWSA9IDEgLyAwOwogIHZhciBNQVhfSU5URUdFUiA9IDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjsKICBmdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkgewogICAgaWYgKCF2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7CiAgICB9CiAgICB2YWx1ZSA9IHRvTnVtYmVyX2RlZmF1bHQodmFsdWUpOwogICAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7CiAgICAgIHZhciBzaWduID0gdmFsdWUgPCAwID8gLTEgOiAxOwogICAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSOwogICAgfQogICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDsKICB9CiAgdmFyIHRvRmluaXRlX2RlZmF1bHQgPSB0b0Zpbml0ZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzCiAgZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7CiAgICB2YXIgcmVzdWx0ID0gdG9GaW5pdGVfZGVmYXVsdCh2YWx1ZSksIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7CiAgICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyByZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQgOiAwOwogIH0KICB2YXIgdG9JbnRlZ2VyX2RlZmF1bHQgPSB0b0ludGVnZXI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGFzeW5jVGFnID0gIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iOwogIHZhciBmdW5jVGFnID0gIltvYmplY3QgRnVuY3Rpb25dIjsKICB2YXIgZ2VuVGFnID0gIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIjsKICB2YXIgcHJveHlUYWcgPSAiW29iamVjdCBQcm94eV0iOwogIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHsKICAgIGlmICghaXNPYmplY3RfZGVmYXVsdCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHRhZyA9IGJhc2VHZXRUYWdfZGVmYXVsdCh2YWx1ZSk7CiAgICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnOwogIH0KICB2YXIgaXNGdW5jdGlvbl9kZWZhdWx0ID0gaXNGdW5jdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlBcnJheS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkgewogICAgdmFyIGluZGV4ID0gLTEsIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CiAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07CiAgICB9CiAgICByZXR1cm4gYXJyYXk7CiAgfQogIHZhciBjb3B5QXJyYXlfZGVmYXVsdCA9IGNvcHlBcnJheTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxOwogIHZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxkKikkLzsKICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoOwogICAgcmV0dXJuICEhbGVuZ3RoICYmICh0eXBlID09ICJudW1iZXIiIHx8IHR5cGUgIT0gInN5bWJvbCIgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpICYmICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTsKICB9CiAgdmFyIGlzSW5kZXhfZGVmYXVsdCA9IGlzSW5kZXg7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikgewogICAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyOwogIH0KICB2YXIgZXFfZGVmYXVsdCA9IGVxOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgTUFYX1NBRkVfSU5URUdFUjIgPSA5MDA3MTk5MjU0NzQwOTkxOwogIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7CiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICJudW1iZXIiICYmIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjI7CiAgfQogIHZhciBpc0xlbmd0aF9kZWZhdWx0ID0gaXNMZW5ndGg7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzCiAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoX2RlZmF1bHQodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbl9kZWZhdWx0KHZhbHVlKTsKICB9CiAgdmFyIGlzQXJyYXlMaWtlX2RlZmF1bHQgPSBpc0FycmF5TGlrZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzCiAgZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHsKICAgIGlmICghaXNPYmplY3RfZGVmYXVsdChvYmplY3QpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciB0eXBlID0gdHlwZW9mIGluZGV4OwogICAgaWYgKHR5cGUgPT0gIm51bWJlciIgPyBpc0FycmF5TGlrZV9kZWZhdWx0KG9iamVjdCkgJiYgaXNJbmRleF9kZWZhdWx0KGluZGV4LCBvYmplY3QubGVuZ3RoKSA6IHR5cGUgPT0gInN0cmluZyIgJiYgaW5kZXggaW4gb2JqZWN0KSB7CiAgICAgIHJldHVybiBlcV9kZWZhdWx0KG9iamVjdFtpbmRleF0sIHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIGlzSXRlcmF0ZWVDYWxsX2RlZmF1bHQgPSBpc0l0ZXJhdGVlQ2FsbDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBvYmplY3RQcm90bzMgPSBPYmplY3QucHJvdG90eXBlOwogIGZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7CiAgICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLCBwcm90byA9IHR5cGVvZiBDdG9yID09ICJmdW5jdGlvbiIgJiYgQ3Rvci5wcm90b3R5cGUgfHwgb2JqZWN0UHJvdG8zOwogICAgcmV0dXJuIHZhbHVlID09PSBwcm90bzsKICB9CiAgdmFyIGlzUHJvdG90eXBlX2RlZmF1bHQgPSBpc1Byb3RvdHlwZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7CiAgICB2YXIgaW5kZXggPSAtMSwgcmVzdWx0ID0gQXJyYXkobik7CiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHsKICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBiYXNlVGltZXNfZGVmYXVsdCA9IGJhc2VUaW1lczsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGFyZ3NUYWcgPSAiW29iamVjdCBBcmd1bWVudHNdIjsKICBmdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKSA9PSBhcmdzVGFnOwogIH0KICB2YXIgYmFzZUlzQXJndW1lbnRzX2RlZmF1bHQgPSBiYXNlSXNBcmd1bWVudHM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzCiAgdmFyIG9iamVjdFByb3RvNCA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIGhhc093blByb3BlcnR5MiA9IG9iamVjdFByb3RvNC5oYXNPd25Qcm9wZXJ0eTsKICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90bzQucHJvcGVydHlJc0VudW1lcmFibGU7CiAgdmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzX2RlZmF1bHQoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gYXJndW1lbnRzOwogIH0oKSkgPyBiYXNlSXNBcmd1bWVudHNfZGVmYXVsdCA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gaXNPYmplY3RMaWtlX2RlZmF1bHQodmFsdWUpICYmIGhhc093blByb3BlcnR5Mi5jYWxsKHZhbHVlLCAiY2FsbGVlIikgJiYgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICJjYWxsZWUiKTsKICB9OwogIHZhciBpc0FyZ3VtZW50c19kZWZhdWx0ID0gaXNBcmd1bWVudHM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gc3R1YkZhbHNlKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc3R1YkZhbHNlX2RlZmF1bHQgPSBzdHViRmFsc2U7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzCiAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogIHZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CiAgdmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7CiAgdmFyIEJ1ZmZlcjkgPSBtb2R1bGVFeHBvcnRzID8gcm9vdF9kZWZhdWx0LkJ1ZmZlciA6IHZvaWQgMDsKICB2YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXI5ID8gQnVmZmVyOS5pc0J1ZmZlciA6IHZvaWQgMDsKICB2YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2VfZGVmYXVsdDsKICB2YXIgaXNCdWZmZXJfZGVmYXVsdCA9IGlzQnVmZmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBhcmdzVGFnMiA9ICJbb2JqZWN0IEFyZ3VtZW50c10iOwogIHZhciBhcnJheVRhZyA9ICJbb2JqZWN0IEFycmF5XSI7CiAgdmFyIGJvb2xUYWcgPSAiW29iamVjdCBCb29sZWFuXSI7CiAgdmFyIGRhdGVUYWcgPSAiW29iamVjdCBEYXRlXSI7CiAgdmFyIGVycm9yVGFnID0gIltvYmplY3QgRXJyb3JdIjsKICB2YXIgZnVuY1RhZzIgPSAiW29iamVjdCBGdW5jdGlvbl0iOwogIHZhciBtYXBUYWcgPSAiW29iamVjdCBNYXBdIjsKICB2YXIgbnVtYmVyVGFnID0gIltvYmplY3QgTnVtYmVyXSI7CiAgdmFyIG9iamVjdFRhZyA9ICJbb2JqZWN0IE9iamVjdF0iOwogIHZhciByZWdleHBUYWcgPSAiW29iamVjdCBSZWdFeHBdIjsKICB2YXIgc2V0VGFnID0gIltvYmplY3QgU2V0XSI7CiAgdmFyIHN0cmluZ1RhZyA9ICJbb2JqZWN0IFN0cmluZ10iOwogIHZhciB3ZWFrTWFwVGFnID0gIltvYmplY3QgV2Vha01hcF0iOwogIHZhciBhcnJheUJ1ZmZlclRhZyA9ICJbb2JqZWN0IEFycmF5QnVmZmVyXSI7CiAgdmFyIGRhdGFWaWV3VGFnID0gIltvYmplY3QgRGF0YVZpZXddIjsKICB2YXIgZmxvYXQzMlRhZyA9ICJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOwogIHZhciBmbG9hdDY0VGFnID0gIltvYmplY3QgRmxvYXQ2NEFycmF5XSI7CiAgdmFyIGludDhUYWcgPSAiW29iamVjdCBJbnQ4QXJyYXldIjsKICB2YXIgaW50MTZUYWcgPSAiW29iamVjdCBJbnQxNkFycmF5XSI7CiAgdmFyIGludDMyVGFnID0gIltvYmplY3QgSW50MzJBcnJheV0iOwogIHZhciB1aW50OFRhZyA9ICJbb2JqZWN0IFVpbnQ4QXJyYXldIjsKICB2YXIgdWludDhDbGFtcGVkVGFnID0gIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjsKICB2YXIgdWludDE2VGFnID0gIltvYmplY3QgVWludDE2QXJyYXldIjsKICB2YXIgdWludDMyVGFnID0gIltvYmplY3QgVWludDMyQXJyYXldIjsKICB2YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTsKICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlOwogIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWcyXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPSB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnMl0gPSB0eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID0gdHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPSB0eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlOwogIGZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgaXNMZW5ndGhfZGVmYXVsdCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKV07CiAgfQogIHZhciBiYXNlSXNUeXBlZEFycmF5X2RlZmF1bHQgPSBiYXNlSXNUeXBlZEFycmF5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIGZ1bmModmFsdWUpOwogICAgfTsKICB9CiAgdmFyIGJhc2VVbmFyeV9kZWZhdWx0ID0gYmFzZVVuYXJ5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGZyZWVFeHBvcnRzMiA9IHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0czsKICB2YXIgZnJlZU1vZHVsZTIgPSBmcmVlRXhwb3J0czIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CiAgdmFyIG1vZHVsZUV4cG9ydHMyID0gZnJlZU1vZHVsZTIgJiYgZnJlZU1vZHVsZTIuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHMyOwogIHZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMyICYmIGZyZWVHbG9iYWxfZGVmYXVsdC5wcm9jZXNzOwogIHZhciBub2RlVXRpbCA9IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZTIgJiYgZnJlZU1vZHVsZTIucmVxdWlyZSAmJiBmcmVlTW9kdWxlMi5yZXF1aXJlKCJ1dGlsIikudHlwZXM7CiAgICAgIGlmICh0eXBlcykgewogICAgICAgIHJldHVybiB0eXBlczsKICAgICAgfQogICAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCJ1dGlsIik7CiAgICB9IGNhdGNoIChlKSB7CiAgICB9CiAgfSgpOwogIHZhciBub2RlVXRpbF9kZWZhdWx0ID0gbm9kZVV0aWw7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcwogIHZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWxfZGVmYXVsdCAmJiBub2RlVXRpbF9kZWZhdWx0LmlzVHlwZWRBcnJheTsKICB2YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeV9kZWZhdWx0KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheV9kZWZhdWx0OwogIHZhciBpc1R5cGVkQXJyYXlfZGVmYXVsdCA9IGlzVHlwZWRBcnJheTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMKICB2YXIgb2JqZWN0UHJvdG81ID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgaGFzT3duUHJvcGVydHkzID0gb2JqZWN0UHJvdG81Lmhhc093blByb3BlcnR5OwogIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkgewogICAgdmFyIGlzQXJyID0gaXNBcnJheV9kZWZhdWx0KHZhbHVlKSwgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHNfZGVmYXVsdCh2YWx1ZSksIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXJfZGVmYXVsdCh2YWx1ZSksIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXlfZGVmYXVsdCh2YWx1ZSksIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSwgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXNfZGVmYXVsdCh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsKICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkgewogICAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eTMuY2FsbCh2YWx1ZSwga2V5KSkgJiYgIShza2lwSW5kZXhlcyAmJiAoa2V5ID09ICJsZW5ndGgiIHx8IGlzQnVmZiAmJiAoa2V5ID09ICJvZmZzZXQiIHx8IGtleSA9PSAicGFyZW50IikgfHwgaXNUeXBlICYmIChrZXkgPT0gImJ1ZmZlciIgfHwga2V5ID09ICJieXRlTGVuZ3RoIiB8fCBrZXkgPT0gImJ5dGVPZmZzZXQiKSB8fCBpc0luZGV4X2RlZmF1bHQoa2V5LCBsZW5ndGgpKSkpIHsKICAgICAgICByZXN1bHQucHVzaChrZXkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYXJyYXlMaWtlS2V5c19kZWZhdWx0ID0gYXJyYXlMaWtlS2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHsKICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHsKICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpOwogICAgfTsKICB9CiAgdmFyIG92ZXJBcmdfZGVmYXVsdCA9IG92ZXJBcmc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzCiAgdmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnX2RlZmF1bHQoT2JqZWN0LmtleXMsIE9iamVjdCk7CiAgdmFyIG5hdGl2ZUtleXNfZGVmYXVsdCA9IG5hdGl2ZUtleXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5cy5qcwogIHZhciBvYmplY3RQcm90bzYgPSBPYmplY3QucHJvdG90eXBlOwogIHZhciBoYXNPd25Qcm9wZXJ0eTQgPSBvYmplY3RQcm90bzYuaGFzT3duUHJvcGVydHk7CiAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7CiAgICBpZiAoIWlzUHJvdG90eXBlX2RlZmF1bHQob2JqZWN0KSkgewogICAgICByZXR1cm4gbmF0aXZlS2V5c19kZWZhdWx0KG9iamVjdCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gW107CiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHsKICAgICAgaWYgKGhhc093blByb3BlcnR5NC5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gImNvbnN0cnVjdG9yIikgewogICAgICAgIHJlc3VsdC5wdXNoKGtleSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBiYXNlS2V5c19kZWZhdWx0ID0gYmFzZUtleXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMKICBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewogICAgcmV0dXJuIGlzQXJyYXlMaWtlX2RlZmF1bHQob2JqZWN0KSA/IGFycmF5TGlrZUtleXNfZGVmYXVsdChvYmplY3QpIDogYmFzZUtleXNfZGVmYXVsdChvYmplY3QpOwogIH0KICB2YXIga2V5c19kZWZhdWx0ID0ga2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VDbGFtcC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlQ2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHsKICAgIGlmIChudW1iZXIgPT09IG51bWJlcikgewogICAgICBpZiAodXBwZXIgIT09IHZvaWQgMCkgewogICAgICAgIG51bWJlciA9IG51bWJlciA8PSB1cHBlciA/IG51bWJlciA6IHVwcGVyOwogICAgICB9CiAgICAgIGlmIChsb3dlciAhPT0gdm9pZCAwKSB7CiAgICAgICAgbnVtYmVyID0gbnVtYmVyID49IGxvd2VyID8gbnVtYmVyIDogbG93ZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudW1iZXI7CiAgfQogIHZhciBiYXNlQ2xhbXBfZGVmYXVsdCA9IGJhc2VDbGFtcDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdmFsdWVzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHsKICAgIHJldHVybiBhcnJheU1hcF9kZWZhdWx0KHByb3BzLCBmdW5jdGlvbihrZXkpIHsKICAgICAgcmV0dXJuIG9iamVjdFtrZXldOwogICAgfSk7CiAgfQogIHZhciBiYXNlVmFsdWVzX2RlZmF1bHQgPSBiYXNlVmFsdWVzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanMKICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXNfZGVmYXVsdChvYmplY3QsIGtleXNfZGVmYXVsdChvYmplY3QpKTsKICB9CiAgdmFyIHZhbHVlc19kZWZhdWx0ID0gdmFsdWVzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJhbmRvbS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgbmF0aXZlRmxvb3IgPSBNYXRoLmZsb29yOwogIHZhciBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbTsKICBmdW5jdGlvbiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcikgewogICAgcmV0dXJuIGxvd2VyICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAodXBwZXIgLSBsb3dlciArIDEpKTsKICB9CiAgdmFyIGJhc2VSYW5kb21fZGVmYXVsdCA9IGJhc2VSYW5kb207CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3NhbXBsZVNpemUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNhbXBsZVNpemUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaHVmZmxlU2VsZi5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBzaHVmZmxlU2VsZihhcnJheSwgc2l6ZSkgewogICAgdmFyIGluZGV4ID0gLTEsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTsKICAgIHNpemUgPSBzaXplID09PSB2b2lkIDAgPyBsZW5ndGggOiBzaXplOwogICAgd2hpbGUgKCsraW5kZXggPCBzaXplKSB7CiAgICAgIHZhciByYW5kID0gYmFzZVJhbmRvbV9kZWZhdWx0KGluZGV4LCBsYXN0SW5kZXgpLCB2YWx1ZSA9IGFycmF5W3JhbmRdOwogICAgICBhcnJheVtyYW5kXSA9IGFycmF5W2luZGV4XTsKICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7CiAgICB9CiAgICBhcnJheS5sZW5ndGggPSBzaXplOwogICAgcmV0dXJuIGFycmF5OwogIH0KICB2YXIgc2h1ZmZsZVNlbGZfZGVmYXVsdCA9IHNodWZmbGVTZWxmOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTYW1wbGVTaXplLmpzCiAgZnVuY3Rpb24gYXJyYXlTYW1wbGVTaXplKGFycmF5LCBuKSB7CiAgICByZXR1cm4gc2h1ZmZsZVNlbGZfZGVmYXVsdChjb3B5QXJyYXlfZGVmYXVsdChhcnJheSksIGJhc2VDbGFtcF9kZWZhdWx0KG4sIDAsIGFycmF5Lmxlbmd0aCkpOwogIH0KICB2YXIgYXJyYXlTYW1wbGVTaXplX2RlZmF1bHQgPSBhcnJheVNhbXBsZVNpemU7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2FtcGxlU2l6ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuKSB7CiAgICB2YXIgYXJyYXkgPSB2YWx1ZXNfZGVmYXVsdChjb2xsZWN0aW9uKTsKICAgIHJldHVybiBzaHVmZmxlU2VsZl9kZWZhdWx0KGFycmF5LCBiYXNlQ2xhbXBfZGVmYXVsdChuLCAwLCBhcnJheS5sZW5ndGgpKTsKICB9CiAgdmFyIGJhc2VTYW1wbGVTaXplX2RlZmF1bHQgPSBiYXNlU2FtcGxlU2l6ZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc2FtcGxlU2l6ZS5qcwogIGZ1bmN0aW9uIHNhbXBsZVNpemUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHsKICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsX2RlZmF1bHQoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PT0gdm9pZCAwKSB7CiAgICAgIG4gPSAxOwogICAgfSBlbHNlIHsKICAgICAgbiA9IHRvSW50ZWdlcl9kZWZhdWx0KG4pOwogICAgfQogICAgdmFyIGZ1bmMgPSBpc0FycmF5X2RlZmF1bHQoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemVfZGVmYXVsdCA6IGJhc2VTYW1wbGVTaXplX2RlZmF1bHQ7CiAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBuKTsKICB9CiAgdmFyIHNhbXBsZVNpemVfZGVmYXVsdCA9IHNhbXBsZVNpemU7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL3dvcmtlci5tanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF93b3JrZXIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfd29ya2VyKCkpOwogIHZhciBleHBvc2UgPSBpbXBvcnRfd29ya2VyLmRlZmF1bHQuZXhwb3NlOwogIHZhciByZWdpc3RlclNlcmlhbGl6ZXIgPSBpbXBvcnRfd29ya2VyLmRlZmF1bHQucmVnaXN0ZXJTZXJpYWxpemVyOwogIHZhciBUcmFuc2ZlciA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5UcmFuc2ZlcjsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kMy1hcnJheUAyLjEyLjEvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2QzLWFycmF5QDIuMTIuMS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhc2NlbmRpbmdfZGVmYXVsdChhLCBiKSB7CiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZDMtYXJyYXlAMi4xMi4xL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmlzZWN0b3JfZGVmYXVsdChmKSB7CiAgICBsZXQgZGVsdGEgPSBmOwogICAgbGV0IGNvbXBhcmUgPSBmOwogICAgaWYgKGYubGVuZ3RoID09PSAxKSB7CiAgICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4OwogICAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICBjb25zdCBtaWQgPSBsbyArIGhpID4+PiAxOwogICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKQogICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgIGhpID0gbWlkOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICAgIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkKICAgICAgICBsbyA9IDA7CiAgICAgIGlmIChoaSA9PSBudWxsKQogICAgICAgIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkKICAgICAgICAgIGhpID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgIGxvID0gbWlkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbG87CiAgICB9CiAgICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7CiAgICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpOwogICAgfQogICAgcmV0dXJuIHsgbGVmdCwgY2VudGVyLCByaWdodCB9OwogIH0KICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHsKICAgIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nX2RlZmF1bHQoZihkKSwgeCk7CiAgfQoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy91dGlscy50cwogIHZhciBEYXRhU291cmNlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZmlsZSwgY2hyb21TaXplcywgb3B0aW9ucykgewogICAgICB0aGlzLmZpbGUgPSBmaWxlOwogICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmNocm9tSW5mbyA9IHNpemVzVG9DaHJvbUluZm8oY2hyb21TaXplcyk7CiAgICAgIHRoaXMudGlsZXNldEluZm8gPSB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8odGhpcy5jaHJvbUluZm8pOwogICAgfQogICAgY2hyb21JbmZvOwogICAgdGlsZXNldEluZm87CiAgfTsKICB2YXIgY2hyb21JbmZvQmlzZWN0b3IgPSBiaXNlY3Rvcl9kZWZhdWx0KChkKSA9PiBkLnBvcykubGVmdDsKICB2YXIgY2hyVG9BYnMgPSAoY2hyb20sIGNocm9tUG9zLCBjaHJvbUluZm8pID0+IGNocm9tSW5mby5jaHJQb3NpdGlvbnNbY2hyb21dLnBvcyArIGNocm9tUG9zOwogIHZhciBhYnNUb0NociA9IChhYnNQb3NpdGlvbiwgY2hyb21JbmZvKSA9PiB7CiAgICBpZiAoIWNocm9tSW5mbyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgaW5zZXJ0UG9pbnQgPSBjaHJvbUluZm9CaXNlY3RvcihjaHJvbUluZm8uY3VtUG9zaXRpb25zLCBhYnNQb3NpdGlvbik7CiAgICBjb25zdCBsYXN0Q2hyID0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tjaHJvbUluZm8uY3VtUG9zaXRpb25zLmxlbmd0aCAtIDFdLmNocjsKICAgIGNvbnN0IGxhc3RMZW5ndGggPSBjaHJvbUluZm8uY2hyb21MZW5ndGhzW2xhc3RDaHJdOwogICAgaW5zZXJ0UG9pbnQgLT0gaW5zZXJ0UG9pbnQgPiAwICYmIDE7CiAgICBsZXQgY2hyUG9zaXRpb24gPSBNYXRoLmZsb29yKGFic1Bvc2l0aW9uIC0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0ucG9zKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaWYgKGNoclBvc2l0aW9uIDwgMCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIDE7CiAgICAgIGNoclBvc2l0aW9uID0gMTsKICAgIH0KICAgIGlmIChpbnNlcnRQb2ludCA9PT0gY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIGNoclBvc2l0aW9uID4gbGFzdExlbmd0aCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIGxhc3RMZW5ndGg7CiAgICAgIGNoclBvc2l0aW9uID0gbGFzdExlbmd0aDsKICAgIH0KICAgIHJldHVybiBbY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0uY2hyLCBjaHJQb3NpdGlvbiwgb2Zmc2V0LCBpbnNlcnRQb2ludF07CiAgfTsKICBmdW5jdGlvbiB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8oY2hyb21JbmZvLCB0aWxlU2l6ZSA9IDEwMjQpIHsKICAgIHJldHVybiB7CiAgICAgIHRpbGVfc2l6ZTogdGlsZVNpemUsCiAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbjogdGlsZVNpemUsCiAgICAgIG1heF96b29tOiBNYXRoLmNlaWwoTWF0aC5sb2coY2hyb21JbmZvLnRvdGFsTGVuZ3RoIC8gdGlsZVNpemUpIC8gTWF0aC5sb2coMikpLAogICAgICBtYXhfd2lkdGg6IGNocm9tSW5mby50b3RhbExlbmd0aCwKICAgICAgbWluX3BvczogWzBdLAogICAgICBtYXhfcG9zOiBbY2hyb21JbmZvLnRvdGFsTGVuZ3RoXQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2l6ZXNUb0Nocm9tSW5mbyhzaXplcykgewogICAgY29uc3QgaW5mbyA9IHsKICAgICAgY3VtUG9zaXRpb25zOiBbXSwKICAgICAgY2hyb21MZW5ndGhzOiB7fSwKICAgICAgY2hyUG9zaXRpb25zOiB7fSwKICAgICAgdG90YWxMZW5ndGg6IDAKICAgIH07CiAgICBzaXplcy5mb3JFYWNoKChbY2hyLCBsZW5ndGhdLCBpKSA9PiB7CiAgICAgIGNvbnN0IGNoclBvc2l0aW9uID0geyBpZDogaSwgY2hyLCBwb3M6IGluZm8udG90YWxMZW5ndGggfTsKICAgICAgaW5mby5jaHJQb3NpdGlvbnNbY2hyXSA9IGNoclBvc2l0aW9uOwogICAgICBpbmZvLmNocm9tTGVuZ3Roc1tjaHJdID0gbGVuZ3RoOwogICAgICBpbmZvLmN1bVBvc2l0aW9ucy5wdXNoKGNoclBvc2l0aW9uKTsKICAgICAgaW5mby50b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmluZm8sCiAgICAgIGFic1RvQ2hyOiAoYWJzUG9zKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGFic1RvQ2hyKGFic1BvcywgaW5mbykgOiBudWxsLAogICAgICBjaHJUb0FiczogKFtjaHJOYW1lLCBjaHJQb3NdKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGNoclRvQWJzKGNock5hbWUsIGNoclBvcywgaW5mbykgOiBudWxsCiAgICB9OwogIH0KICB2YXIgUmVtb3RlRmlsZTIgPSBjbGFzcyBleHRlbmRzIFJlbW90ZUZpbGUgewogICAgcmVhZCA9IGFzeW5jIChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pID0+IHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApOwogICAgfTsKICB9OwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy9iZWQvYmVkLXBhcnNlci50cwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9wYXJzZXIuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9hdXRvU3FsMiA9IF9fdG9Nb2R1bGUocmVxdWlyZV9hdXRvU3FsKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL2RlZmF1bHRUeXBlcy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2F1dG9TcWwgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYXV0b1NxbCgpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9hcy9hdXRvU3FsU2NoZW1hcy5qcwogIHZhciBhdXRvU3FsU2NoZW1hc19leHBvcnRzID0ge307CiAgX19leHBvcnQoYXV0b1NxbFNjaGVtYXNfZXhwb3J0cywgewogICAgYmlnQ2hhaW46ICgpID0+IGJpZ0NoYWluLAogICAgYmlnR2VuZVByZWQ6ICgpID0+IGJpZ0dlbmVQcmVkLAogICAgYmlnSW50ZXJhY3Q6ICgpID0+IGJpZ0ludGVyYWN0LAogICAgYmlnTGluazogKCkgPT4gYmlnTGluaywKICAgIGJpZ01hZjogKCkgPT4gYmlnTWFmLAogICAgYmlnTmFycm93UGVhazogKCkgPT4gYmlnTmFycm93UGVhaywKICAgIGJpZ1BzbDogKCkgPT4gYmlnUHNsLAogICAgZGVmYXVsdEJlZFNjaGVtYTogKCkgPT4gZGVmYXVsdEJlZFNjaGVtYSwKICAgIG1hZkZyYW1lczogKCkgPT4gbWFmRnJhbWVzLAogICAgbWFmU3VtbWFyeTogKCkgPT4gbWFmU3VtbWFyeQogIH0pOwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgYmlnQ2hhaW4gPSBgdGFibGUgYmlnQ2hhaW4KImJpZ0NoYWluIHBhaXJ3aXNlIGFsaWdubWVudCIKICAgICgKICAgIHN0cmluZyBjaHJvbTsgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICAiU3RhcnQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgIHVpbnQgICBjaHJvbUVuZDsgICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICAiTmFtZSBvciBJRCBvZiBpdGVtLCBpZGVhbGx5IGJvdGggaHVtYW4gcmVhZGFibGUgYW5kIHVuaXF1ZSIKICAgIHVpbnQgc2NvcmU7ICAgICAgICAgIlNjb3JlICgwLTEwMDApIgogICAgY2hhclsxXSBzdHJhbmQ7ICAgICAiKyBvciAtIGZvciBzdHJhbmQiCiAgICB1aW50IHRTaXplOyAgICAgICAgICJzaXplIG9mIHRhcmdldCBzZXF1ZW5jZSIKICAgIHN0cmluZyBxTmFtZTsgICAgICAgIm5hbWUgb2YgcXVlcnkgc2VxdWVuY2UiCiAgICB1aW50IHFTaXplOyAgICAgICAgICJzaXplIG9mIHF1ZXJ5IHNlcXVlbmNlIgogICAgdWludCBxU3RhcnQ7ICAgICAgICAic3RhcnQgb2YgYWxpZ25tZW50IG9uIHF1ZXJ5IHNlcXVlbmNlIgogICAgdWludCBxRW5kOyAgICAgICAgICAiZW5kIG9mIGFsaWdubWVudCBvbiBxdWVyeSBzZXF1ZW5jZSIKICAgIHVpbnQgY2hhaW5TY29yZTsgICAgInNjb3JlIGZyb20gY2hhaW4iCiAgICApYDsKICB2YXIgYmlnR2VuZVByZWQgPSBgdGFibGUgYmlnR2VuZVByZWQKImJpZ0dlbmVQcmVkIGdlbmUgbW9kZWxzIgogICAoCiAgIHN0cmluZyBjaHJvbTsgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICB1aW50ICAgY2hyb21TdGFydDsgICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICB1aW50ICAgY2hyb21FbmQ7ICAgICJFbmQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgc3RyaW5nIG5hbWU7ICAgICAgICAiTmFtZSBvciBJRCBvZiBpdGVtLCBpZGVhbGx5IGJvdGggaHVtYW4gcmVhZGFibGUgYW5kIHVuaXF1ZSIKICAgdWludCBzY29yZTsgICAgICAgICAiU2NvcmUgKDAtMTAwMCkiCiAgIGNoYXJbMV0gc3RyYW5kOyAgICAgIisgb3IgLSBmb3Igc3RyYW5kIgogICB1aW50IHRoaWNrU3RhcnQ7ICAgICJTdGFydCBvZiB3aGVyZSBkaXNwbGF5IHNob3VsZCBiZSB0aGljayAoc3RhcnQgY29kb24pIgogICB1aW50IHRoaWNrRW5kOyAgICAgICJFbmQgb2Ygd2hlcmUgZGlzcGxheSBzaG91bGQgYmUgdGhpY2sgKHN0b3AgY29kb24pIgogICB1aW50IHJlc2VydmVkOyAgICAgICAiUkdCIHZhbHVlICh1c2UgUixHLEIgc3RyaW5nIGluIGlucHV0IGZpbGUpIgogICBpbnQgYmxvY2tDb3VudDsgICAgICJOdW1iZXIgb2YgYmxvY2tzIgogICBpbnRbYmxvY2tDb3VudF0gYmxvY2tTaXplczsgIkNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrIHNpemVzIgogICBpbnRbYmxvY2tDb3VudF0gY2hyb21TdGFydHM7ICJTdGFydCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gY2hyb21TdGFydCIKICAgc3RyaW5nIG5hbWUyOyAgICAgICAiQWx0ZXJuYXRpdmUvaHVtYW4gcmVhZGFibGUgbmFtZSIKICAgc3RyaW5nIGNkc1N0YXJ0U3RhdDsgIlN0YXR1cyBvZiBDRFMgc3RhcnQgYW5ub3RhdGlvbiAobm9uZSwgdW5rbm93biwgaW5jb21wbGV0ZSwgb3IgY29tcGxldGUpIgogICBzdHJpbmcgY2RzRW5kU3RhdDsgICAiU3RhdHVzIG9mIENEUyBlbmQgYW5ub3RhdGlvbiAobm9uZSwgdW5rbm93biwgaW5jb21wbGV0ZSwgb3IgY29tcGxldGUpIgogICBpbnRbYmxvY2tDb3VudF0gZXhvbkZyYW1lczsgIkV4b24gZnJhbWUgezAsMSwyfSwgb3IgLTEgaWYgbm8gZnJhbWUgZm9yIGV4b24iCiAgIHN0cmluZyB0eXBlOyAgICAgICAgIlRyYW5zY3JpcHQgdHlwZSIKICAgc3RyaW5nIGdlbmVOYW1lOyAgICAiUHJpbWFyeSBpZGVudGlmaWVyIGZvciBnZW5lIgogICBzdHJpbmcgZ2VuZU5hbWUyOyAgICJBbHRlcm5hdGl2ZS9odW1hbiByZWFkYWJsZSBnZW5lIG5hbWUiCiAgIHN0cmluZyBnZW5lVHlwZTsgICAgIkdlbmUgdHlwZSIKICAgKWA7CiAgdmFyIGJpZ0ludGVyYWN0ID0gYHRhYmxlIGludGVyYWN0CiJpbnRlcmFjdGlvbiBiZXR3ZWVuIHR3byByZWdpb25zIgogICAgKAogICAgc3RyaW5nIGNocm9tOyAgICAgICAgIkNocm9tb3NvbWUgKG9yIGNvbnRpZywgc2NhZmZvbGQsIGV0Yy4pLiBGb3IgaW50ZXJjaHJvbW9zb21hbCwgdXNlIDIgcmVjb3JkcyIKICAgIHVpbnQgY2hyb21TdGFydDsgICAgICJTdGFydCBwb3NpdGlvbiBvZiBsb3dlciByZWdpb24uIEZvciBpbnRlcmNocm9tb3NvbWFsLCBzZXQgdG8gY2hyb21TdGFydCBvZiB0aGlzIHJlZ2lvbiIKICAgIHVpbnQgY2hyb21FbmQ7ICAgICAgICJFbmQgcG9zaXRpb24gb2YgdXBwZXIgcmVnaW9uLiBGb3IgaW50ZXJjaHJvbW9zb21hbCwgc2V0IHRvIGNocm9tRW5kIG9mIHRoaXMgcmVnaW9uIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICAgIk5hbWUgb2YgaXRlbSwgZm9yIGRpc3BsYXkuICBVc3VhbGx5ICdzb3VyY2VOYW1lL3RhcmdldE5hbWUvZXhwJyBvciBlbXB0eSIKICAgIHVpbnQgc2NvcmU7ICAgICAgICAgICJTY29yZSAoMC0xMDAwKSIKICAgIGRvdWJsZSB2YWx1ZTsgICAgICAgICJTdHJlbmd0aCBvZiBpbnRlcmFjdGlvbiBvciBvdGhlciBkYXRhIHZhbHVlLiBUeXBpY2FsbHkgYmFzaXMgZm9yIHNjb3JlIgogICAgc3RyaW5nIGV4cDsgICAgICAgICAgIkV4cGVyaW1lbnQgbmFtZSAobWV0YWRhdGEgZm9yIGZpbHRlcmluZykuIFVzZSAuIGlmIG5vdCBhcHBsaWNhYmxlIgogICAgc3RyaW5nIGNvbG9yOyAgICAgICAgIkl0ZW0gY29sb3IuICBTcGVjaWZpZWQgYXMgcixnLGIgb3IgaGV4YWRlY2ltYWwgI1JSR0dCQiBvciBodG1sIGNvbG9yIG5hbWUsIGFzIGluIC8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNodG1sNC4gVXNlIDAgYW5kIHNwZWN0cnVtIHNldHRpbmcgdG8gc2hhZGUgYnkgc2NvcmUiCiAgICBzdHJpbmcgc291cmNlQ2hyb207ICAiQ2hyb21vc29tZSBvZiBzb3VyY2UgcmVnaW9uIChkaXJlY3Rpb25hbCkgb3IgbG93ZXIgcmVnaW9uLiBGb3Igbm9uLWRpcmVjdGlvbmFsIGludGVyY2hyb21vc29tYWwsIGNocm9tIG9mIHRoaXMgcmVnaW9uLiIKICAgIHVpbnQgc291cmNlU3RhcnQ7ICAgICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIG9mIHNvdXJjZS9sb3dlci90aGlzIHJlZ2lvbiIKICAgIHVpbnQgc291cmNlRW5kOyAgICAgICJFbmQgcG9zaXRpb24gaW4gY2hyb21vc29tZSBvZiBzb3VyY2UvbG93ZXIvdGhpcyByZWdpb24iCiAgICBzdHJpbmcgc291cmNlTmFtZTsgICAiSWRlbnRpZmllciBvZiBzb3VyY2UvbG93ZXIvdGhpcyByZWdpb24iCiAgICBzdHJpbmcgc291cmNlU3RyYW5kOyAiT3JpZW50YXRpb24gb2Ygc291cmNlL2xvd2VyL3RoaXMgcmVnaW9uOiArIG9yIC0uICBVc2UgLiBpZiBub3QgYXBwbGljYWJsZSIKICAgIHN0cmluZyB0YXJnZXRDaHJvbTsgICJDaHJvbW9zb21lIG9mIHRhcmdldCByZWdpb24gKGRpcmVjdGlvbmFsKSBvciB1cHBlciByZWdpb24uIEZvciBub24tZGlyZWN0aW9uYWwgaW50ZXJjaHJvbW9zb21hbCwgY2hyb20gb2Ygb3RoZXIgcmVnaW9uIgogICAgdWludCB0YXJnZXRTdGFydDsgICAgIlN0YXJ0IHBvc2l0aW9uIGluIGNocm9tb3NvbWUgb2YgdGFyZ2V0L3VwcGVyL3RoaXMgcmVnaW9uIgogICAgdWludCB0YXJnZXRFbmQ7ICAgICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIG9mIHRhcmdldC91cHBlci90aGlzIHJlZ2lvbiIKICAgIHN0cmluZyB0YXJnZXROYW1lOyAgICJJZGVudGlmaWVyIG9mIHRhcmdldC91cHBlci90aGlzIHJlZ2lvbiIKICAgIHN0cmluZyB0YXJnZXRTdHJhbmQ7ICJPcmllbnRhdGlvbiBvZiB0YXJnZXQvdXBwZXIvdGhpcyByZWdpb246ICsgb3IgLS4gIFVzZSAuIGlmIG5vdCBhcHBsaWNhYmxlIgoKICAgIClgOwogIHZhciBiaWdMaW5rID0gYHRhYmxlIGJpZ0xpbmsKImJpZ0xpbmsgcGFpcndpc2UgYWxpZ25tZW50IgogICAgKAogICAgc3RyaW5nIGNocm9tOyAgICAgICAiUmVmZXJlbmNlIHNlcXVlbmNlIGNocm9tb3NvbWUgb3Igc2NhZmZvbGQiCiAgICB1aW50ICAgY2hyb21TdGFydDsgICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgdWludCAgIGNocm9tRW5kOyAgICAiRW5kIHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICBzdHJpbmcgbmFtZTsgICAgICAgICJOYW1lIG9yIElEIG9mIGl0ZW0sIGlkZWFsbHkgYm90aCBodW1hbiByZWFkYWJsZSBhbmQgdW5pcXVlIgogICAgdWludCBxU3RhcnQ7ICAgICAgICAic3RhcnQgb2YgYWxpZ25tZW50IG9uIHF1ZXJ5IHNlcXVlbmNlIgogICAgKWA7CiAgdmFyIGJpZ01hZiA9IGB0YWJsZSBiZWRNYWYKIkJlZDMgd2l0aCBNQUYgYmxvY2siCiAgICAoCiAgICBzdHJpbmcgY2hyb207ICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgdWludCAgIGNocm9tRW5kOyAgICJFbmQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgIGxzdHJpbmcgbWFmQmxvY2s7ICAgIk1BRiBibG9jayIKICAgIClgOwogIHZhciBiaWdOYXJyb3dQZWFrID0gYHRhYmxlIGJpZ05hcnJvd1BlYWsKIkJFRDYrNCBQZWFrcyBvZiBzaWduYWwgZW5yaWNobWVudCBiYXNlZCBvbiBwb29sZWQsIG5vcm1hbGl6ZWQgKGludGVycHJldGVkKSBkYXRhLiIKKAogICAgc3RyaW5nIGNocm9tOyAgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICAgIlN0YXJ0IHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICB1aW50ICAgY2hyb21FbmQ7ICAgICAiRW5kIHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICBzdHJpbmcgbmFtZTsJICJOYW1lIGdpdmVuIHRvIGEgcmVnaW9uIChwcmVmZXJhYmx5IHVuaXF1ZSkuIFVzZSAuIGlmIG5vIG5hbWUgaXMgYXNzaWduZWQiCiAgICB1aW50ICAgc2NvcmU7ICAgICAgICAiSW5kaWNhdGVzIGhvdyBkYXJrIHRoZSBwZWFrIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBicm93c2VyICgwLTEwMDApICIKICAgIGNoYXJbMV0gIHN0cmFuZDsgICAgICIrIG9yIC0gb3IgLiBmb3IgdW5rbm93biIKICAgIGZsb2F0ICBzaWduYWxWYWx1ZTsgICJNZWFzdXJlbWVudCBvZiBhdmVyYWdlIGVucmljaG1lbnQgZm9yIHRoZSByZWdpb24iCiAgICBmbG9hdCAgcFZhbHVlOyAgICAgICAiU3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlIG9mIHNpZ25hbCB2YWx1ZSAoLWxvZzEwKS4gU2V0IHRvIC0xIGlmIG5vdCB1c2VkLiIKICAgIGZsb2F0ICBxVmFsdWU7ICAgICAgICJTdGF0aXN0aWNhbCBzaWduaWZpY2FuY2Ugd2l0aCBtdWx0aXBsZS10ZXN0IGNvcnJlY3Rpb24gYXBwbGllZCAoRkRSIC1sb2cxMCkuIFNldCB0byAtMSBpZiBub3QgdXNlZC4iCiAgICBpbnQgICBwZWFrOyAgICAgICAgICJQb2ludC1zb3VyY2UgY2FsbGVkIGZvciB0aGlzIHBlYWs7IDAtYmFzZWQgb2Zmc2V0IGZyb20gY2hyb21TdGFydC4gU2V0IHRvIC0xIGlmIG5vIHBvaW50LXNvdXJjZSBjYWxsZWQuIgopYDsKICB2YXIgYmlnUHNsID0gYHRhYmxlIGJpZ1BzbAoiYmlnUHNsIHBhaXJ3aXNlIGFsaWdubWVudCIKICAgICgKICAgIHN0cmluZyBjaHJvbTsgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICAiU3RhcnQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgIHVpbnQgICBjaHJvbUVuZDsgICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICAiTmFtZSBvciBJRCBvZiBpdGVtLCBpZGVhbGx5IGJvdGggaHVtYW4gcmVhZGFibGUgYW5kIHVuaXF1ZSIKICAgIHVpbnQgc2NvcmU7ICAgICAgICAgIlNjb3JlICgwLTEwMDApIgogICAgY2hhclsxXSBzdHJhbmQ7ICAgICAiKyBvciAtIGluZGljYXRlcyB3aGV0aGVyIHRoZSBxdWVyeSBhbGlnbnMgdG8gdGhlICsgb3IgLSBzdHJhbmQgb24gdGhlIHJlZmVyZW5jZSIKICAgIHVpbnQgdGhpY2tTdGFydDsgICAgIlN0YXJ0IG9mIHdoZXJlIGRpc3BsYXkgc2hvdWxkIGJlIHRoaWNrIChzdGFydCBjb2RvbikiCiAgICB1aW50IHRoaWNrRW5kOyAgICAgICJFbmQgb2Ygd2hlcmUgZGlzcGxheSBzaG91bGQgYmUgdGhpY2sgKHN0b3AgY29kb24pIgogICAgdWludCByZXNlcnZlZDsgICAgICAgIlJHQiB2YWx1ZSAodXNlIFIsRyxCIHN0cmluZyBpbiBpbnB1dCBmaWxlKSIKICAgIGludCBibG9ja0NvdW50OyAgICAgIk51bWJlciBvZiBibG9ja3MiCiAgICBpbnRbYmxvY2tDb3VudF0gYmxvY2tTaXplczsgIkNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrIHNpemVzIgogICAgaW50W2Jsb2NrQ291bnRdIGNocm9tU3RhcnRzOyAiU3RhcnQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGNocm9tU3RhcnQiCgogICAgdWludCAgICBvQ2hyb21TdGFydDsiU3RhcnQgcG9zaXRpb24gaW4gb3RoZXIgY2hyb21vc29tZSIKICAgIHVpbnQgICAgb0Nocm9tRW5kOyAgIkVuZCBwb3NpdGlvbiBpbiBvdGhlciBjaHJvbW9zb21lIgogICAgY2hhclsxXSBvU3RyYW5kOyAgICAiKyBvciAtLCAtIG1lYW5zIHRoYXQgcHNsIHdhcyByZXZlcnNlZCBpbnRvIEJFRC1jb21wYXRpYmxlIGNvb3JkaW5hdGVzIgogICAgdWludCAgICBvQ2hyb21TaXplOyAiU2l6ZSBvZiBvdGhlciBjaHJvbW9zb21lLiIKICAgIGludFtibG9ja0NvdW50XSBvQ2hyb21TdGFydHM7ICJTdGFydCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gb0Nocm9tU3RhcnQgb3IgZnJvbSBvQ2hyb21TdGFydCtvQ2hyb21TaXplIGRlcGVuZGluZyBvbiBzdHJhbmQiCgogICAgbHN0cmluZyAgb1NlcXVlbmNlOyAgIlNlcXVlbmNlIG9uIG90aGVyIGNocm9tIChvciBlbXB0eSkiCiAgICBzdHJpbmcgICBvQ0RTOyAgICAgICAiQ0RTIGluIE5DQkkgZm9ybWF0IgoKICAgIHVpbnQgICAgY2hyb21TaXplOyJTaXplIG9mIHRhcmdldCBjaHJvbW9zb21lIgoKICAgIHVpbnQgbWF0Y2g7ICAgICAgICAiTnVtYmVyIG9mIGJhc2VzIG1hdGNoZWQuIgogICAgdWludCBtaXNNYXRjaDsgIiBOdW1iZXIgb2YgYmFzZXMgdGhhdCBkb24ndCBtYXRjaCAiCiAgICB1aW50IHJlcE1hdGNoOyAiIE51bWJlciBvZiBiYXNlcyB0aGF0IG1hdGNoIGJ1dCBhcmUgcGFydCBvZiByZXBlYXRzICIKICAgIHVpbnQgbkNvdW50OyAgICIgTnVtYmVyIG9mICdOJyBiYXNlcyAiCiAgICB1aW50IHNlcVR5cGU7ICAgICIwPWVtcHR5LCAxPW51Y2xlb3RpZGUsIDI9YW1pbm9fYWNpZCIKICAgIClgOwogIHZhciBkZWZhdWx0QmVkU2NoZW1hID0gYHRhYmxlIGRlZmF1bHRCZWRTY2hlbWEKIkJFRDEyIgogICAgKAogICAgc3RyaW5nIGNocm9tOyAgICAgICJUaGUgbmFtZSBvZiB0aGUgY2hyb21vc29tZSAoZS5nLiBjaHIzLCBjaHJZLCBjaHIyX3JhbmRvbSkgb3Igc2NhZmZvbGQgKGUuZy4gc2NhZmZvbGQxMDY3MSkuIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICJUaGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZlYXR1cmUgaW4gdGhlIGNocm9tb3NvbWUgb3Igc2NhZmZvbGQuIFRoZSBmaXJzdCBiYXNlIGluIGEgY2hyb21vc29tZSBpcyBudW1iZXJlZCAwLiIKICAgIHVpbnQgICBjaHJvbUVuZDsgICAiVGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgY2hyb21vc29tZSBvciBzY2FmZm9sZC4gVGhlIGNocm9tRW5kIGJhc2UgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkaXNwbGF5IG9mIHRoZSBmZWF0dXJlLiBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IDEwMCBiYXNlcyBvZiBhIGNocm9tb3NvbWUgYXJlIGRlZmluZWQgYXMgY2hyb21TdGFydD0wLCBjaHJvbUVuZD0xMDAsIGFuZCBzcGFuIHRoZSBiYXNlcyBudW1iZXJlZCAwLTk5LiIKICAgIHN0cmluZyAgIG5hbWU7ICAgIkRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIEJFRCBsaW5lLiIKICAgIGZsb2F0ICAgc2NvcmU7ICAgIkZlYXR1cmUgc2NvcmUsIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgMC0xMDAwIGxpbWl0IGFzIGluIGJlZCIKICAgIGNoYXIgICBzdHJhbmQ7ICAgIkRlZmluZXMgdGhlIHN0cmFuZC4gRWl0aGVyICcuJyAoPW5vIHN0cmFuZCkgb3IgJysnIG9yICctJyIKICAgIHVpbnQgdGhpY2tTdGFydDsgIlRoZSBzdGFydGluZyBwb3NpdGlvbiBhdCB3aGljaCB0aGUgZmVhdHVyZSBpcyBkcmF3biB0aGlja2x5IChmb3IgZXhhbXBsZSwgdGhlIHN0YXJ0IGNvZG9uIGluIGdlbmUgZGlzcGxheXMpLiBXaGVuIHRoZXJlIGlzIG5vIHRoaWNrIHBhcnQsIHRoaWNrU3RhcnQgYW5kIHRoaWNrRW5kIGFyZSB1c3VhbGx5IHNldCB0byB0aGUgY2hyb21TdGFydCBwb3NpdGlvbi4iCiAgICB1aW50IHRoaWNrRW5kOyAiVGhlIGVuZGluZyBwb3NpdGlvbiBhdCB3aGljaCB0aGUgZmVhdHVyZSBpcyBkcmF3biB0aGlja2x5IChmb3IgZXhhbXBsZSB0aGUgc3RvcCBjb2RvbiBpbiBnZW5lIGRpc3BsYXlzKS4iCiAgICBzdHJpbmcgaXRlbVJnYjsgIkFuIFJHQiB2YWx1ZSBvZiB0aGUgZm9ybSBSLEcsQiAoZS5nLiAyNTUsMCwwKS4gIgogICAgdWludCBibG9ja0NvdW50OyAiIFRoZSBudW1iZXIgb2YgYmxvY2tzIChleG9ucykgaW4gdGhlIEJFRCBsaW5lLiIKICAgIHVpbnRbYmxvY2tDb3VudF0gYmxvY2tTaXplczsgIiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBibG9jayBzaXplcy4gVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIGxpc3Qgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYmxvY2tDb3VudC4iCiAgICB1aW50W2Jsb2NrQ291bnRdIGJsb2NrU3RhcnRzOyAiQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBibG9jayBzdGFydHMuIEFsbCBvZiB0aGUgYmxvY2tTdGFydCBwb3NpdGlvbnMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gY2hyb21TdGFydC4gVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIGxpc3Qgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYmxvY2tDb3VudC4iCiAgICApYDsKICB2YXIgbWFmRnJhbWVzID0gYHRhYmxlIG1hZkZyYW1lcwoiY29kb24gZnJhbWUgYXNzaWdubWVudCBmb3IgTUFGIGNvbXBvbmVudHMiCiAgICAoCiAgICBzdHJpbmcgY2hyb207ICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICJTdGFydCByYW5nZSBpbiBjaHJvbW9zb21lIgogICAgdWludCAgIGNocm9tRW5kOyAgICJFbmQgcmFuZ2UgaW4gY2hyb21vc29tZSIKICAgIHN0cmluZyBzcmM7ICAgICAgICAiTmFtZSBvZiBzZXF1ZW5jZSBzb3VyY2UgaW4gTUFGIgogICAgdWJ5dGUgZnJhbWU7ICAgICAgICJmcmFtZSAoMCwxLDIpIGZvciBmaXJzdCBiYXNlKCspIG9yIGxhc3QgYmFzdCgtKSIKICAgIGNoYXJbMV0gc3RyYW5kOyAgICAiKyBvciAtIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICJOYW1lIG9mIGdlbmUgdXNlZCB0byBkZWZpbmUgZnJhbWUiCiAgICBpbnQgICAgcHJldkZyYW1lUG9zOyAgInRhcmdldCBwb3NpdGlvbiBvZiB0aGUgcHJldmlvdXMgYmFzZSAoaW4gdHJhbnNjcmlwdGlvbiBkaXJlY3Rpb24pIHRoYXQgY29udGludWVzIHRoaXMgZnJhbWUsIG9yIC0xIGlmIG5vbmUsIG9yIGZyYW1lIG5vdCBjb250aWd1b3VzIgogICAgaW50ICAgIG5leHRGcmFtZVBvczsgICJ0YXJnZXQgcG9zaXRpb24gb2YgdGhlIG5leHQgYmFzZSAoaW4gdHJhbnNjcmlwdGlvbiBkaXJlY3Rpb24pIHRoYXQgY29udGludWVzIHRoaXMgZnJhbWUsIG9yIC0xIGlmIG5vbmUsIG9yIGZyYW1lIG5vdCBjb250aWd1b3VzIgogICAgdWJ5dGUgIGlzRXhvblN0YXJ0OyAgImRvZXMgdGhpcyBzdGFydCB0aGUgQ0RTIHBvcnRpb24gb2YgYW4gZXhvbj8iCiAgICB1Ynl0ZSAgaXNFeG9uRW5kOyAgICAiZG9lcyB0aGlzIGVuZCB0aGUgQ0RTIHBvcnRpb24gb2YgYW4gZXhvbj8iCiAgICApYDsKICB2YXIgbWFmU3VtbWFyeSA9IGB0YWJsZSBtYWZTdW1tYXJ5CiJQb3NpdGlvbnMgYW5kIHNjb3JlcyBmb3IgYWxpZ25tZW50IGJsb2NrcyIKICAgICgKICAgIHN0cmluZyBjaHJvbTsgICAgICAiUmVmZXJlbmNlIHNlcXVlbmNlIGNocm9tb3NvbWUgb3Igc2NhZmZvbGQiCiAgICB1aW50ICAgY2hyb21TdGFydDsgIlN0YXJ0IHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICB1aW50ICAgY2hyb21FbmQ7ICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgc3RyaW5nIHNyYzsgICAgICAgICJTZXF1ZW5jZSBuYW1lIG9yIGRhdGFiYXNlIG9mIGFsaWdubWVudCIKICAgIGZsb2F0ICBzY29yZTsgICAgICAiRmxvYXRpbmcgcG9pbnQgc2NvcmUuIgogICAgY2hhclsxXSBsZWZ0U3RhdHVzOyAgIkdhcC9icmVhayBhbm5vdGF0aW9uIGZvciBwcmVjZWRpbmcgYmxvY2siCiAgICBjaGFyWzFdIHJpZ2h0U3RhdHVzOyAiR2FwL2JyZWFrIGFubm90YXRpb24gZm9yIGZvbGxvd2luZyBibG9jayIKICAgIClgOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL2RlZmF1bHRUeXBlcy5qcwogIHZhciBkZWZhdWx0VHlwZXNfZGVmYXVsdCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdXRvU3FsU2NoZW1hc19leHBvcnRzKS5tYXAoKFtrZXksIHZhbF0pID0+IFsKICAgIGtleSwKICAgICgwLCBpbXBvcnRfYXV0b1NxbC5wYXJzZSkodmFsLnRyaW0oKSkKICBdKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiZWRAMi4xLjIvbm9kZV9tb2R1bGVzL0BnbW9kL2JlZC9lc20vdXRpbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBkZXRlY3RUeXBlcyhhdXRvU3FsKSB7CiAgICBjb25zdCBudW1lcmljVHlwZXMgPSBbInVpbnQiLCAiaW50IiwgImZsb2F0IiwgImxvbmciXTsKICAgIHJldHVybiB7CiAgICAgIC4uLmF1dG9TcWwsCiAgICAgIGZpZWxkczogYXV0b1NxbC5maWVsZHMubWFwKChhdXRvRmllbGQpID0+ICh7CiAgICAgICAgLi4uYXV0b0ZpZWxkLAogICAgICAgIGlzQXJyYXk6IGF1dG9GaWVsZC5zaXplICYmIGF1dG9GaWVsZC50eXBlICE9PSAiY2hhciIsCiAgICAgICAgYXJyYXlJc051bWVyaWM6IGF1dG9GaWVsZC5zaXplICYmIG51bWVyaWNUeXBlcy5pbmNsdWRlcyhhdXRvRmllbGQudHlwZSksCiAgICAgICAgaXNOdW1lcmljOiAhYXV0b0ZpZWxkLnNpemUgJiYgbnVtZXJpY1R5cGVzLmluY2x1ZGVzKGF1dG9GaWVsZC50eXBlKQogICAgICB9KSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL3BhcnNlci5qcwogIHZhciBzdHJhbmRNYXAgPSB7ICIuIjogMCwgIi0iOiAtMSwgIisiOiAxIH07CiAgZnVuY3Rpb24gaXNCZWQxMkxpa2UoZmllbGRzKSB7CiAgICB2YXIgX2E7CiAgICByZXR1cm4gZmllbGRzLmxlbmd0aCA+PSAxMiAmJiAhTnVtYmVyLmlzTmFOKHBhcnNlSW50KGZpZWxkc1s5XSwgMTApKSAmJiAoKF9hID0gZmllbGRzWzEwXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwbGl0KCIsIikuZmlsdGVyKChmKSA9PiAhIWYpLmxlbmd0aCkgPT09IHBhcnNlSW50KGZpZWxkc1s5XSwgMTApOwogIH0KICB2YXIgQkVEID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoYXJncyA9IHt9KSB7CiAgICAgIGlmIChhcmdzLmF1dG9TcWwpIHsKICAgICAgICB0aGlzLmF1dG9TcWwgPSBkZXRlY3RUeXBlcyhpbXBvcnRfYXV0b1NxbDIuZGVmYXVsdC5wYXJzZShhcmdzLmF1dG9TcWwpKTsKICAgICAgfSBlbHNlIGlmIChhcmdzLnR5cGUpIHsKICAgICAgICBpZiAoIWRlZmF1bHRUeXBlc19kZWZhdWx0W2FyZ3MudHlwZV0pIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHlwZSBub3QgZm91bmQiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5hdXRvU3FsID0gZGV0ZWN0VHlwZXMoZGVmYXVsdFR5cGVzX2RlZmF1bHRbYXJncy50eXBlXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hdXRvU3FsID0gZGV0ZWN0VHlwZXMoZGVmYXVsdFR5cGVzX2RlZmF1bHQuZGVmYXVsdEJlZFNjaGVtYSk7CiAgICAgICAgdGhpcy5hdHRlbXB0RGVmYXVsdEJlZCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHBhcnNlTGluZShsaW5lLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBhdXRvU3FsIH0gPSB0aGlzOwogICAgICBjb25zdCB7IHVuaXF1ZUlkIH0gPSBvcHRzOwogICAgICBjb25zdCBmaWVsZHMgPSBBcnJheS5pc0FycmF5KGxpbmUpID8gbGluZSA6IGxpbmUuc3BsaXQoIgkiKTsKICAgICAgbGV0IGZlYXR1cmUgPSB7fTsKICAgICAgaWYgKCF0aGlzLmF0dGVtcHREZWZhdWx0QmVkIHx8IHRoaXMuYXR0ZW1wdERlZmF1bHRCZWQgJiYgaXNCZWQxMkxpa2UoZmllbGRzKSkgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXV0b1NxbC5maWVsZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IGF1dG9GaWVsZCA9IGF1dG9TcWwuZmllbGRzW2ldOwogICAgICAgICAgbGV0IGNvbHVtblZhbCA9IGZpZWxkc1tpXTsKICAgICAgICAgIGNvbnN0IHsgaXNOdW1lcmljLCBpc0FycmF5OiBpc0FycmF5MiwgYXJyYXlJc051bWVyaWMsIG5hbWUgfSA9IGF1dG9GaWVsZDsKICAgICAgICAgIGlmIChjb2x1bW5WYWwgPT09IG51bGwgfHwgY29sdW1uVmFsID09PSB2b2lkIDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29sdW1uVmFsICE9PSAiLiIpIHsKICAgICAgICAgICAgaWYgKGlzTnVtZXJpYykgewogICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcihjb2x1bW5WYWwpOwogICAgICAgICAgICAgIGNvbHVtblZhbCA9IE51bWJlci5pc05hTihudW0pID8gY29sdW1uVmFsIDogbnVtOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkyKSB7CiAgICAgICAgICAgICAgY29sdW1uVmFsID0gY29sdW1uVmFsLnNwbGl0KCIsIik7CiAgICAgICAgICAgICAgaWYgKGNvbHVtblZhbFtjb2x1bW5WYWwubGVuZ3RoIC0gMV0gPT09ICIiKSB7CiAgICAgICAgICAgICAgICBjb2x1bW5WYWwucG9wKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhcnJheUlzTnVtZXJpYykgewogICAgICAgICAgICAgICAgY29sdW1uVmFsID0gY29sdW1uVmFsLm1hcCgoc3RyKSA9PiBOdW1iZXIoc3RyKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZlYXR1cmVbbmFtZV0gPSBjb2x1bW5WYWw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBbImNocm9tIiwgImNocm9tU3RhcnQiLCAiY2hyb21FbmQiLCAibmFtZSJdOwogICAgICAgIGZlYXR1cmUgPSBPYmplY3QuZnJvbUVudHJpZXMoZmllbGRzLm1hcCgoZiwgaSkgPT4gW2ZpZWxkTmFtZXNbaV0gfHwgImZpZWxkIiArIGksIGZdKSk7CiAgICAgICAgZmVhdHVyZS5jaHJvbVN0YXJ0ID0gK2ZlYXR1cmUuY2hyb21TdGFydDsKICAgICAgICBmZWF0dXJlLmNocm9tRW5kID0gK2ZlYXR1cmUuY2hyb21FbmQ7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoZmVhdHVyZS5maWVsZDQpKSkgewogICAgICAgICAgZmVhdHVyZS5zY29yZSA9ICtmZWF0dXJlLmZpZWxkNDsKICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLmZpZWxkNDsKICAgICAgICB9CiAgICAgICAgaWYgKGZlYXR1cmUuZmllbGQ1ID09PSAiKyIgfHwgZmVhdHVyZS5maWVsZDUgPT09ICItIikgewogICAgICAgICAgZmVhdHVyZS5zdHJhbmQgPSBmZWF0dXJlLmZpZWxkNTsKICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLmZpZWxkNTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHVuaXF1ZUlkKSB7CiAgICAgICAgZmVhdHVyZS51bmlxdWVJZCA9IHVuaXF1ZUlkOwogICAgICB9CiAgICAgIGZlYXR1cmUuc3RyYW5kID0gc3RyYW5kTWFwW2ZlYXR1cmUuc3RyYW5kXSB8fCAwOwogICAgICBmZWF0dXJlLmNocm9tID0gZGVjb2RlVVJJQ29tcG9uZW50KGZlYXR1cmUuY2hyb20pOwogICAgICByZXR1cm4gZmVhdHVyZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL2luZGV4LmpzCiAgdmFyIGVzbV9kZWZhdWx0ID0gQkVEOwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy9iZWQvYmVkLXBhcnNlci50cwogIHZhciBERUZBVUxUX0JFRF9TQ0hFTUEgPSBgdGFibGUgZGVmYXVsdEJlZFNjaGVtYQoiQkVEMTIiCiAgICAoCiAgICBzdHJpbmcgY2hyb207ICAgICAgIlRoZSBuYW1lIG9mIHRoZSBjaHJvbW9zb21lIChlLmcuIGNocjMsIGNoclksIGNocjJfcmFuZG9tKSBvciBzY2FmZm9sZCAoZS5nLiBzY2FmZm9sZDEwNjcxKS4iCiAgICB1aW50ICAgY2hyb21TdGFydDsgIlRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgY2hyb21vc29tZSBvciBzY2FmZm9sZC4gVGhlIGZpcnN0IGJhc2UgaW4gYSBjaHJvbW9zb21lIGlzIG51bWJlcmVkIDAuIgogICAgdWludCAgIGNocm9tRW5kOyAgICJUaGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBmZWF0dXJlIGluIHRoZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkLiBUaGUgY2hyb21FbmQgYmFzZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRpc3BsYXkgb2YgdGhlIGZlYXR1cmUuIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgMTAwIGJhc2VzIG9mIGEgY2hyb21vc29tZSBhcmUgZGVmaW5lZCBhcyBjaHJvbVN0YXJ0PTAsIGNocm9tRW5kPTEwMCwgYW5kIHNwYW4gdGhlIGJhc2VzIG51bWJlcmVkIDAtOTkuIgogICAgc3RyaW5nICAgbmFtZTsgICAiRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgQkVEIGxpbmUuIgogICAgZmxvYXQgICBzY29yZTsgICAiRmVhdHVyZSBzY29yZSwgZG9lc24ndCBjYXJlIGFib3V0IHRoZSAwLTEwMDAgbGltaXQgYXMgaW4gYmVkIgogICAgY2hhciAgIHN0cmFuZDsgICAiRGVmaW5lcyB0aGUgc3RyYW5kLiBFaXRoZXIgJy4nICg9bm8gc3RyYW5kKSBvciAnKycgb3IgJy0nIgogICAgdWludCB0aGlja1N0YXJ0OyAiVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBmZWF0dXJlIGlzIGRyYXduIHRoaWNrbHkgKGZvciBleGFtcGxlLCB0aGUgc3RhcnQgY29kb24gaW4gZ2VuZSBkaXNwbGF5cykuIFdoZW4gdGhlcmUgaXMgbm8gdGhpY2sgcGFydCwgdGhpY2tTdGFydCBhbmQgdGhpY2tFbmQgYXJlIHVzdWFsbHkgc2V0IHRvIHRoZSBjaHJvbVN0YXJ0IHBvc2l0aW9uLiIKICAgIHVpbnQgdGhpY2tFbmQ7ICJUaGUgZW5kaW5nIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBmZWF0dXJlIGlzIGRyYXduIHRoaWNrbHkgKGZvciBleGFtcGxlIHRoZSBzdG9wIGNvZG9uIGluIGdlbmUgZGlzcGxheXMpLiIKICAgIHN0cmluZyBpdGVtUmdiOyAiQW4gUkdCIHZhbHVlIG9mIHRoZSBmb3JtIFIsRyxCIChlLmcuIDI1NSwwLDApLiAiCiAgICB1aW50IGJsb2NrQ291bnQ7ICIgVGhlIG51bWJlciBvZiBibG9ja3MgKGV4b25zKSBpbiB0aGUgQkVEIGxpbmUuIgogICAgdWludFtibG9ja0NvdW50XSBibG9ja1NpemVzOyAiIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGJsb2NrIHNpemVzLiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgbGlzdCBzaG91bGQgY29ycmVzcG9uZCB0byBibG9ja0NvdW50LiIKICAgIHVpbnRbYmxvY2tDb3VudF0gYmxvY2tTdGFydHM7ICJBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrIHN0YXJ0cy4gQWxsIG9mIHRoZSBibG9ja1N0YXJ0IHBvc2l0aW9ucyBzaG91bGQgYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBjaHJvbVN0YXJ0LiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgbGlzdCBzaG91bGQgY29ycmVzcG9uZCB0byBibG9ja0NvdW50LiIKICAgIClgOwogIHZhciBCZWRQYXJzZXIgPSBjbGFzcyB7CiAgICAjY3VzdG9tRmllbGRzOwogICAgI25fY29sdW1uczsKICAgICNwYXJzZXI7CiAgICBjb25zdHJ1Y3RvcihvcHQpIHsKICAgICAgdGhpcy4jY3VzdG9tRmllbGRzID0gb3B0Py5jdXN0b21GaWVsZHM7CiAgICAgIHRoaXMuI25fY29sdW1ucyA9IG9wdD8ubl9jb2x1bW5zOwogICAgICBpZiAodGhpcy4jY3VzdG9tRmllbGRzKSB7CiAgICAgICAgY29uc3QgY3VzdG9tQXV0b1NxbFNjaGVtYSA9IHRoaXMuY29uc3RydWN0QmVkQXV0b1NxbCgpOwogICAgICAgIHRoaXMuI3BhcnNlciA9IG5ldyBlc21fZGVmYXVsdCh7IGF1dG9TcWw6IGN1c3RvbUF1dG9TcWxTY2hlbWEgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4jcGFyc2VyID0gbmV3IGVzbV9kZWZhdWx0KHsgYXV0b1NxbDogREVGQVVMVF9CRURfU0NIRU1BIH0pOwogICAgICB9CiAgICB9CiAgICBwYXJzZUxpbmUobGluZSwgY2hyb21TdGFydCkgewogICAgICBmdW5jdGlvbiByZWxhdGl2ZVRvQ3VtdWxhdGl2ZShwb3MsIGNocm9tU3RhcnQyKSB7CiAgICAgICAgcmV0dXJuIGNocm9tU3RhcnQyICsgcG9zICsgMTsKICAgICAgfQogICAgICBjb25zdCBiZWRSZWNvcmQgPSB0aGlzLiNwYXJzZXIucGFyc2VMaW5lKGxpbmUpOwogICAgICBjb25zdCBmaWVsZHNUb0NvbnZlcnQgPSBbImNocm9tU3RhcnQiLCAiY2hyb21FbmQiLCAidGhpY2tFbmQiLCAidGhpY2tTdGFydCJdOwogICAgICBmaWVsZHNUb0NvbnZlcnQuZm9yRWFjaCgoZmllbGQpID0+IHsKICAgICAgICBpZiAoYmVkUmVjb3JkW2ZpZWxkXSkKICAgICAgICAgIGJlZFJlY29yZFtmaWVsZF0gPSByZWxhdGl2ZVRvQ3VtdWxhdGl2ZShiZWRSZWNvcmRbZmllbGRdLCBjaHJvbVN0YXJ0KTsKICAgICAgfSk7CiAgICAgIHJldHVybiBiZWRSZWNvcmQ7CiAgICB9CiAgICBjb25zdHJ1Y3RCZWRBdXRvU3FsKCkgewogICAgICBjb25zdCBBVVRPX1NRTF9IRUFERVIgPSBgdGFibGUgY3VzdG9tQmVkU2NoZW1hCiJCRUQxMiIKICAgICgKYDsKICAgICAgY29uc3QgQVVUT19TUUxfRk9PVEVSID0gIlxuICAgICkiOwogICAgICBjb25zdCBhdXRvU3FsRmllbGRzID0gdGhpcy4jZ2VuZXJhdGVBdXRvU1FMRmllbGRzKCk7CiAgICAgIHJldHVybiBTdHJpbmcucHJvdG90eXBlLmNvbmNhdChBVVRPX1NRTF9IRUFERVIsIGF1dG9TcWxGaWVsZHMsIEFVVE9fU1FMX0ZPT1RFUik7CiAgICB9CiAgICAjZ2VuZXJhdGVBdXRvU1FMRmllbGRzKCkgewogICAgICBjb25zdCBCRUQxMkZpZWxkcyA9IFsKICAgICAgICBbInN0cmluZyIsICJjaHJvbSJdLAogICAgICAgIFsidWludCIsICJjaHJvbVN0YXJ0Il0sCiAgICAgICAgWyJ1aW50IiwgImNocm9tRW5kIl0sCiAgICAgICAgWyJzdHJpbmciLCAibmFtZSJdLAogICAgICAgIFsiZmxvYXQiLCAic2NvcmUiXSwKICAgICAgICBbImNoYXIiLCAic3RyYW5kIl0sCiAgICAgICAgWyJ1aW50IiwgInRoaWNrU3RhcnQiXSwKICAgICAgICBbInVpbnQiLCAidGhpY2tFbmQiXSwKICAgICAgICBbInN0cmluZyIsICJpdGVtUmdiIl0sCiAgICAgICAgWyJ1aW50IiwgImJsb2NrQ291bnQiXSwKICAgICAgICBbInVpbnRbYmxvY2tDb3VudF0iLCAiYmxvY2tTaXplcyJdLAogICAgICAgIFsidWludFtibG9ja0NvdW50XSIsICJibG9ja1N0YXJ0cyJdCiAgICAgIF07CiAgICAgIGlmICghdGhpcy4jbl9jb2x1bW5zKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVtYmVyIG9mIGNvbHVtbnMgd2FzIG5vdCBhYmxlIHRvIGJlIGRldGVybWluZWQiKTsKICAgICAgaWYgKCF0aGlzLiNjdXN0b21GaWVsZHMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBjb25zdCBjdXN0b21GaWVsZFR5cGUgPSAic3RyaW5nIjsKICAgICAgY29uc3QgY3VzdG9tRmllbGRzV2l0aFR5cGVzID0gdGhpcy4jY3VzdG9tRmllbGRzLm1hcCgoY29sdW1uKSA9PiBbY3VzdG9tRmllbGRUeXBlLCBjb2x1bW5dKTsKICAgICAgbGV0IGFsbEZpZWxkczsKICAgICAgY29uc3QgUkVRVUlSRURfQ09MUyA9IDM7CiAgICAgIGlmICh0aGlzLiNuX2NvbHVtbnMgPiBCRUQxMkZpZWxkcy5sZW5ndGgpIHsKICAgICAgICBpZiAodGhpcy4jbl9jb2x1bW5zICE9PSBCRUQxMkZpZWxkcy5sZW5ndGggKyB0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJFRCBmaWxlIGVycm9yOiB1bmV4cGVjdGVkIG51bWJlciBvZiBjdXN0b20gZmllbGRzLiBGb3VuZCAke3RoaXMuI25fY29sdW1uc30gY29sdW1ucyAKICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZXhwZWN0ZWQgJHtCRUQxMkZpZWxkcy5sZW5ndGggKyB0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RofWApOwogICAgICAgIH0KICAgICAgICBhbGxGaWVsZHMgPSBCRUQxMkZpZWxkcy5jb25jYXQoY3VzdG9tRmllbGRzV2l0aFR5cGVzKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLiNuX2NvbHVtbnMgPj0gUkVRVUlSRURfQ09MUyArIHRoaXMuI2N1c3RvbUZpZWxkcy5sZW5ndGgpIHsKICAgICAgICBhbGxGaWVsZHMgPSBCRUQxMkZpZWxkcy5zbGljZSgwLCB0aGlzLiNuX2NvbHVtbnMgLSB0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RoKS5jb25jYXQoY3VzdG9tRmllbGRzV2l0aFR5cGVzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7UkVRVUlSRURfQ09MUyArIHRoaXMuI2N1c3RvbUZpZWxkcy5sZW5ndGh9IGNvbHVtbnMgKCR7UkVRVUlSRURfQ09MU30gcmVxdWlyZWQgY29sdW1ucyBhbmQgJHt0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RofSBjdXN0b20gY29sdW1ucykgYnV0IGZvdW5kICR7dGhpcy4jbl9jb2x1bW5zfSBjb2x1bW5zYCk7CiAgICAgIH0KICAgICAgY29uc3QgZmllbGREZXNjcmlwdGlvbiA9ICJjdXN0b20gaW5wdXQiOwogICAgICBjb25zdCBhdXRvU3FsRmllbGRzID0gYWxsRmllbGRzLm1hcCgoZmllbGRJbmZvKSA9PiBgICAgICR7ZmllbGRJbmZvWzBdfSAke2ZpZWxkSW5mb1sxXX07ICIke2ZpZWxkRGVzY3JpcHRpb259ImApLmpvaW4oIlxuIik7CiAgICAgIHJldHVybiBhdXRvU3FsRmllbGRzOwogICAgfQogIH07CiAgdmFyIGJlZF9wYXJzZXJfZGVmYXVsdCA9IEJlZFBhcnNlcjsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvYmVkL2JlZC13b3JrZXIudHM/d29ya2VyJmlubGluZT93b3JrZXJfZmlsZQogIHZhciBCZWRGaWxlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodGJpLCB1aWQpIHsKICAgICAgdGhpcy50YmkgPSB0Ymk7CiAgICAgIHRoaXMuI3VpZCA9IHVpZDsKICAgIH0KICAgICNwYXJzZXI7CiAgICAjY3VzdG9tRmllbGRzOwogICAgI3VpZDsKICAgIHN0YXRpYyBmcm9tVXJsKHVybCwgaW5kZXhVcmwsIHVpZCwgdXJsRmV0Y2hPcHRpb25zLCBpbmRleFVybEZldGNoT3B0aW9ucykgewogICAgICBjb25zdCB0YmkgPSBuZXcgVGFiaXhJbmRleGVkRmlsZSh7CiAgICAgICAgZmlsZWhhbmRsZTogbmV3IFJlbW90ZUZpbGUyKHVybCwgeyBvdmVycmlkZXM6IHVybEZldGNoT3B0aW9ucyB9KSwKICAgICAgICB0YmlGaWxlaGFuZGxlOiBuZXcgUmVtb3RlRmlsZTIoaW5kZXhVcmwsIHsgb3ZlcnJpZGVzOiBpbmRleFVybEZldGNoT3B0aW9ucyB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBCZWRGaWxlKHRiaSwgdWlkKTsKICAgIH0KICAgIHNldCBjdXN0b21GaWVsZHMoY3VzdG9tKSB7CiAgICAgIHRoaXMuI2N1c3RvbUZpZWxkcyA9IGN1c3RvbTsKICAgIH0KICAgIGFzeW5jIGdldFBhcnNlcigpIHsKICAgICAgaWYgKCF0aGlzLiNwYXJzZXIpIHsKICAgICAgICBjb25zdCBvcHQgPSB0aGlzLiNjdXN0b21GaWVsZHMgPyB7IGN1c3RvbUZpZWxkczogdGhpcy4jY3VzdG9tRmllbGRzLCBuX2NvbHVtbnM6IGF3YWl0IHRoaXMuI2NhbGNOQ29sdW1ucygpIH0gOiB2b2lkIDA7CiAgICAgICAgdGhpcy4jcGFyc2VyID0gbmV3IGJlZF9wYXJzZXJfZGVmYXVsdChvcHQpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLiNwYXJzZXI7CiAgICB9CiAgICBhc3luYyAjY2FsY05Db2x1bW5zKCkgewogICAgICBjb25zdCBzb3VyY2UgPSBkYXRhU291cmNlcy5nZXQodGhpcy4jdWlkKTsKICAgICAgY29uc3QgeyBjaHJvbUxlbmd0aHMsIGN1bVBvc2l0aW9ucyB9ID0gc291cmNlLmNocm9tSW5mbzsKICAgICAgbGV0IG5fY29scyA9IDA7CiAgICAgIGZvciAoY29uc3QgY3VtUG9zIG9mIGN1bVBvc2l0aW9ucykgewogICAgICAgIGNvbnN0IGNocm9tTmFtZSA9IGN1bVBvcy5jaHI7CiAgICAgICAgY29uc3QgY2hyb21TdGFydCA9IGN1bVBvcy5wb3M7CiAgICAgICAgY29uc3QgY2hyb21FbmQgPSBjdW1Qb3MucG9zICsgY2hyb21MZW5ndGhzW2Nocm9tTmFtZV07CiAgICAgICAgbl9jb2xzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgICAgIHNvdXJjZS5maWxlLnRiaS5nZXRMaW5lcyhjaHJvbU5hbWUsIGNocm9tU3RhcnQsIGNocm9tRW5kLCAobGluZSkgPT4gewogICAgICAgICAgICByZXNvbHZlKGxpbmUuc3BsaXQoIgkiKS5sZW5ndGgpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKG5fY29scyA+IDApCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICByZXR1cm4gbl9jb2xzOwogICAgfQogICAgYXN5bmMgZ2V0VGlsZURhdGEobWluWCwgbWF4WCkgewogICAgICBjb25zdCBzb3VyY2UgPSBkYXRhU291cmNlcy5nZXQodGhpcy4jdWlkKTsKICAgICAgY29uc3QgcGFyc2VyMiA9IGF3YWl0IHRoaXMuZ2V0UGFyc2VyKCk7CiAgICAgIGxldCBjdXJNaW5YID0gbWluWDsKICAgICAgY29uc3QgeyBjaHJvbUxlbmd0aHMsIGN1bVBvc2l0aW9ucyB9ID0gc291cmNlLmNocm9tSW5mbzsKICAgICAgY29uc3QgYWxsVGlsZXMgPSBbXTsKICAgICAgZm9yIChjb25zdCBjdW1Qb3Mgb2YgY3VtUG9zaXRpb25zKSB7CiAgICAgICAgY29uc3QgY2hyb21OYW1lID0gY3VtUG9zLmNocjsKICAgICAgICBjb25zdCBjaHJvbVN0YXJ0ID0gY3VtUG9zLnBvczsKICAgICAgICBjb25zdCBjaHJvbUVuZCA9IGN1bVBvcy5wb3MgKyBjaHJvbUxlbmd0aHNbY2hyb21OYW1lXTsKICAgICAgICBsZXQgc3RhcnRQb3MsIGVuZFBvczsKICAgICAgICBpZiAoY2hyb21TdGFydCA+IGN1ck1pblggfHwgY3VyTWluWCA+PSBjaHJvbUVuZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRpbGVzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgICAgICBjb25zdCB0aWxlcyA9IFtdOwogICAgICAgICAgY29uc3QgbGluZUNhbGxiYWNrID0gKGxpbmUpID0+IHsKICAgICAgICAgICAgY29uc3QgYmVkVGlsZSA9IHBhcnNlcjIucGFyc2VMaW5lKGxpbmUsIGNocm9tU3RhcnQpOwogICAgICAgICAgICB0aWxlcy5wdXNoKGJlZFRpbGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmIChtYXhYID4gY2hyb21FbmQpIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBjdXJNaW5YIC0gY2hyb21TdGFydDsKICAgICAgICAgICAgZW5kUG9zID0gY2hyb21FbmQgLSBjaHJvbVN0YXJ0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBNYXRoLmZsb29yKGN1ck1pblggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgICAgZW5kUG9zID0gTWF0aC5jZWlsKG1heFggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHNvdXJjZS5maWxlLnRiaS5nZXRMaW5lcyhjaHJvbU5hbWUsIHN0YXJ0UG9zLCBlbmRQb3MsIGxpbmVDYWxsYmFjaykudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHJlc29sdmUodGlsZXMpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgYWxsVGlsZXMucHVzaCh0aWxlc1Byb21pc2UpOwogICAgICAgIGlmIChtYXhYIDw9IGNocm9tRW5kKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY3VyTWluWCA9IGNocm9tRW5kOwogICAgICB9CiAgICAgIGNvbnN0IHRpbGVBcnJheXMgPSBhd2FpdCBQcm9taXNlLmFsbChhbGxUaWxlcyk7CiAgICAgIHJldHVybiB0aWxlQXJyYXlzLmZsYXQoKTsKICAgIH0KICB9OwogIHZhciBiZWRGaWxlcyA9IG5ldyBNYXAoKTsKICB2YXIgdGlsZVZhbHVlcyA9IHt9OwogIHZhciBkYXRhU291cmNlcyA9IG5ldyBNYXAoKTsKICBmdW5jdGlvbiBpbml0KHVpZCwgYmVkLCBjaHJvbVNpemVzLCBvcHRpb25zID0ge30pIHsKICAgIGxldCBiZWRGaWxlID0gYmVkRmlsZXMuZ2V0KGJlZC51cmwpOwogICAgaWYgKCFiZWRGaWxlKSB7CiAgICAgIGJlZEZpbGUgPSBCZWRGaWxlLmZyb21VcmwoYmVkLnVybCwgYmVkLmluZGV4VXJsLCB1aWQsIG9wdGlvbnMudXJsRmV0Y2hPcHRpb25zLCBvcHRpb25zLmluZGV4VXJsRmV0Y2hPcHRpb25zKTsKICAgICAgaWYgKG9wdGlvbnMuY3VzdG9tRmllbGRzKQogICAgICAgIGJlZEZpbGUuY3VzdG9tRmllbGRzID0gb3B0aW9ucy5jdXN0b21GaWVsZHM7CiAgICB9CiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IERhdGFTb3VyY2UoYmVkRmlsZSwgY2hyb21TaXplcywgewogICAgICBzYW1wbGVMZW5ndGg6IDFlMywKICAgICAgLi4ub3B0aW9ucwogICAgfSk7CiAgICBkYXRhU291cmNlcy5zZXQodWlkLCBkYXRhU291cmNlKTsKICB9CiAgdmFyIHRpbGVzZXRJbmZvID0gKHVpZCkgPT4gewogICAgcmV0dXJuIGRhdGFTb3VyY2VzLmdldCh1aWQpLnRpbGVzZXRJbmZvOwogIH07CiAgdmFyIHRpbGUgPSBhc3luYyAodWlkLCB6LCB4KSA9PiB7CiAgICBjb25zdCBzb3VyY2UgPSBkYXRhU291cmNlcy5nZXQodWlkKTsKICAgIGNvbnN0IENBQ0hFX0tFWSA9IGAke3VpZH0uJHt6fS4ke3h9YDsKICAgIHRpbGVWYWx1ZXNbQ0FDSEVfS0VZXSA9IFtdOwogICAgY29uc3QgdGlsZVdpZHRoID0gK3NvdXJjZS50aWxlc2V0SW5mby5tYXhfd2lkdGggLyAyICoqICt6OwogICAgY29uc3QgbWluWCA9IHNvdXJjZS50aWxlc2V0SW5mby5taW5fcG9zWzBdICsgeCAqIHRpbGVXaWR0aDsKICAgIGNvbnN0IG1heFggPSBzb3VyY2UudGlsZXNldEluZm8ubWluX3Bvc1swXSArICh4ICsgMSkgKiB0aWxlV2lkdGg7CiAgICB0aWxlVmFsdWVzW0NBQ0hFX0tFWV0gPSBhd2FpdCBzb3VyY2UuZmlsZS5nZXRUaWxlRGF0YShtaW5YLCBtYXhYKTsKICAgIHJldHVybiB0aWxlVmFsdWVzW0NBQ0hFX0tFWV07CiAgfTsKICB2YXIgZmV0Y2hUaWxlc0RlYm91bmNlZCA9IGFzeW5jICh1aWQsIHRpbGVJZHMpID0+IHsKICAgIGNvbnN0IHRpbGVzID0ge307CiAgICBjb25zdCB2YWxpZFRpbGVJZHMgPSBbXTsKICAgIGNvbnN0IHRpbGVQcm9taXNlcyA9IFtdOwogICAgZm9yIChjb25zdCB0aWxlSWQgb2YgdGlsZUlkcykgewogICAgICBjb25zdCBwYXJ0cyA9IHRpbGVJZC5zcGxpdCgiLiIpOwogICAgICBjb25zdCB6ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTsKICAgICAgY29uc3QgeCA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7CiAgICAgIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHopKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJJbnZhbGlkIHRpbGUgem9vbSBvciBwb3NpdGlvbjoiLCB6LCB4KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YWxpZFRpbGVJZHMucHVzaCh0aWxlSWQpOwogICAgICB0aWxlUHJvbWlzZXMucHVzaCh0aWxlKHVpZCwgeiwgeCkpOwogICAgfQogICAgcmV0dXJuIFByb21pc2UuYWxsKHRpbGVQcm9taXNlcykudGhlbigodmFsdWVzMikgPT4gewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlczIubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB2YWxpZFRpbGVJZCA9IHZhbGlkVGlsZUlkc1tpXTsKICAgICAgICB0aWxlc1t2YWxpZFRpbGVJZF0gPSB7IHRpbGVQb3NpdGlvbklkOiB2YWxpZFRpbGVJZCB9OwogICAgICB9CiAgICAgIHJldHVybiB0aWxlczsKICAgIH0pOwogIH07CiAgdmFyIGdldFRhYnVsYXJEYXRhID0gKHVpZCwgdGlsZUlkcykgPT4gewogICAgY29uc3QgZGF0YSA9IFtdOwogICAgdGlsZUlkcy5mb3JFYWNoKCh0aWxlSWQpID0+IHsKICAgICAgY29uc3QgcGFydHMgPSB0aWxlSWQuc3BsaXQoIi4iKTsKICAgICAgY29uc3QgeiA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7CiAgICAgIGNvbnN0IHggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApOwogICAgICBjb25zdCB0aWxlVmFsdWUgPSB0aWxlVmFsdWVzW2Ake3VpZH0uJHt6fS4ke3h9YF07CiAgICAgIGlmICghdGlsZVZhbHVlKSB7CiAgICAgICAgY29uc29sZS53YXJuKGBObyB0aWxlIGRhdGEgY29uc3RydWN0ZWQgKCR7dGlsZUlkfSlgKTsKICAgICAgfQogICAgICBkYXRhLnB1c2godGlsZVZhbHVlKTsKICAgIH0pOwogICAgbGV0IG91dHB1dCA9IE9iamVjdC52YWx1ZXMoZGF0YSkuZmxhdCgpOwogICAgY29uc3Qgc2FtcGxlTGVuZ3RoID0gZGF0YVNvdXJjZXMuZ2V0KHVpZCkub3B0aW9ucy5zYW1wbGVMZW5ndGg7CiAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBzYW1wbGVMZW5ndGgpIHsKICAgICAgb3V0cHV0ID0gc2FtcGxlU2l6ZV9kZWZhdWx0KG91dHB1dCwgc2FtcGxlTGVuZ3RoIC8gMik7CiAgICB9CiAgICBjb25zdCBidWZmZXIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkob3V0cHV0KSkuYnVmZmVyOwogICAgcmV0dXJuIFRyYW5zZmVyKGJ1ZmZlciwgW2J1ZmZlcl0pOwogIH07CiAgdmFyIHRpbGVGdW5jdGlvbnMgPSB7CiAgICBpbml0LAogICAgdGlsZXNldEluZm8sCiAgICBmZXRjaFRpbGVzRGVib3VuY2VkLAogICAgdGlsZSwKICAgIGdldFRhYnVsYXJEYXRhCiAgfTsKICBleHBvc2UodGlsZUZ1bmN0aW9ucyk7Cn0pKCk7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPSJlcyIgLW8gLi9gCiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPgogKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKICovCg==",lce=typeof window<"u"&&window.Blob&&new Blob([atob(CHe)],{type:"text/javascript;charset=utf-8"});function dng(){const e=lce&&(window.URL||window.webkitURL).createObjectURL(lce);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+CHe,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const hng=200;class rHe{constructor(g,I){rt(this,"dataConfig",{}),rt(this,"uid"),rt(this,"prevRequestTime"),rt(this,"track"),rt(this,"toFetch"),rt(this,"fetchTimeout"),rt(this,"worker"),this.uid=g.libraries.slugid.nice(),this.prevRequestTime=0,this.toFetch=new Set;const{url:i,indexUrl:n,assembly:C,...r}=I;this.worker=UT(new dng).then(async o=>{const a=Object.entries(bI(C).size);return await o.init(this.uid,{url:i,indexUrl:n},a,r),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,I){this.track.drawLoadingCue(),I.forEach(i=>this.toFetch.add(i)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},hng)}async sendFetch(g,I){(await this.worker).fetchTilesDebounced(this.uid,I).then(g)}async getTabularData(g){const I=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(I))}}rt(rHe,"config",{type:"bed"});const mng=Object.freeze(Object.defineProperty({__proto__:null,BamDataFetcher:VH,BedDataFetcher:rHe,BigWigDataFetcher:eHe,CsvDataFetcher:gHe,GffDataFetcher:nHe,JsonDataFetcher:IHe,VcfDataFetcher:R2e},Symbol.toStringTag,{value:"Module"})),fng="gosling-data-row-uid";function png(e,g){var I,i,n,C,r,o,a,s,A,l,c,u,d,h,m,f;const b=[];if(!c7(e.data)){console.warn("No data is specified");return}if(e.data.type==="vector"||e.data.type==="bigwig"){if(!("dense"in g))return;const p=(I=e.data.binSize)!=null?I:1,y=g.dense,Z=g.tileSize,B=g.tileWidth/g.tileSize,G=(i=e.data.value)!=null?i:"value",v=(n=e.data.column)!=null?n:"position",w=(C=e.data.start)!=null?C:"start",R=(r=e.data.end)!=null?r:"end",S=`${G}_min`,X=`${G}_max`,W=(o=e.data.aggregation)!=null?o:"mean";let V=0,H=Number.MAX_SAFE_INTEGER,Y=Number.MIN_SAFE_INTEGER,K=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER;Array.from(Array(Z).keys()).forEach((J,P)=>{if(p===1){const ge=y[P]/(W==="mean"?B:1);b.push({[G]:ge,[v]:g.tileX+(P+.5)*B,[w]:g.tileX+P*B,[R]:g.tileX+(P+1)*B,[S]:ge,[X]:ge})}else if(P%p===0)V=H=Y=y[P],K=P,x=P+p;else if(P%p===p-1)b.push({[G]:V/p/(W==="mean"?B:1),[v]:g.tileX+(K+p/2)*B,[w]:g.tileX+K*B,[R]:g.tileX+x*B,[S]:H,[X]:Y});else if(P===Z-1){const ge=Z%p,q=K+ge;b.push({[G]:V/ge/(W==="mean"?B:1),[v]:g.tileX+(K+ge/2)*B,[w]:g.tileX+K*B,[R]:g.tileX+q*B,[S]:H,[X]:Y})}else V+=y[P],H>y[P]&&(H=y[P]),Y{let J=0,P=Number.MIN_SAFE_INTEGER,ge=Number.MAX_SAFE_INTEGER,q=Number.MAX_SAFE_INTEGER,$=Number.MIN_SAFE_INTEGER;Array.from(Array(G).keys()).forEach((j,te)=>{if(p===1){const Q=B[G*x+te]/(Y==="mean"?v:1);b.push({[w]:K,[R]:Q,[S]:g.tileX+(te+.5)*v,[X]:g.tileX+te*v,[W]:g.tileX+(te+1)*v,[V]:Q,[H]:Q})}else if(te%p===0)J=q=$=B[G*x+te],P=te,ge=te+p;else if(te%p===p-1)b.push({[w]:K,[R]:Y==="mean"?J/p/v:J,[S]:g.tileX+(P+p/2)*v,[X]:g.tileX+P*v,[W]:g.tileX+ge*v,[V]:q,[H]:$});else if(te===G-1){const Q=G%p,ie=P+Q;b.push({[w]:K,[R]:Y==="mean"?J/Q/v:J,[S]:g.tileX+(P+Q/2)*v,[X]:g.tileX+P*v,[W]:g.tileX+ie*v,[V]:q,[H]:$})}else{const Q=B[G*x+te];J+=Q,q>Q&&(q=Q),$"u"||typeof g.tileHeight>"u")return;const p=Math.sqrt(g.dense.length),{tileX:y,tileY:Z,tileWidth:B,tileHeight:G}=g,v=g.dense,w=B/p,R=G/p,S=(m=e.data.column)!=null?m:"x",X=(f=e.data.row)!=null?f:"y",W=16;for(let V=0;V{const{chrOffset:v,fields:w}=B,R={};if(R[fng]=`${G}`,p.forEach(S=>{R[S.name]=+w[S.index]+v}),Z==null||Z.forEach(S=>{R[S.name]=S.type==="quantitative"?+w[S.index]:w[S.index]}),b.push({...R,type:"gene"}),y){const[S,X]=y,W=w[S.index].split(","),V=w[X.index].split(",");W.forEach((H,Y)=>{const K=V[Y];if(b.push({...R,[S.name]:+H+v,[X.name]:+K+v,type:"exon"}),Y+1n===e.chromosome))){if(Hje(e))return[I[e.chromosome][0]+1,I[e.chromosome][1]];if(Tje(e))return e.interval;if(Nje(e)){const i=I[e.chromosome][0],[n,C]=e.interval;return[i+n,i+C]}}}function vng(e,g){const I={},i=Xd;e.forEach(n=>{i.forEach(C=>{const r=n.spec()[C];if(!ut(r)||r.domain===void 0)return;const{domain:o,type:a}=r;if(a==="quantitative"){const s=Array.from(o);if(!I[C])I[C]=s;else{const A=I[C];A[0]>s[0]&&(A[0]=s[0]),A[1]{i.forEach(C=>{const r=n.spec()[C];ut(r)&&r.type==="genomic"||(n.setChannelDomain(C,I[C],g),n.generateScales())}),n.updateChannelValue()})}const Bng={compactLayout:!1,trackSourceServers:["https://server.gosling-lang.org/api/v1/"],views:[{genomePositionSearchBoxVisible:!1,genomePositionSearchBox:{autocompleteServer:"https://higlass.io/api/v1",autocompleteId:"P0PLbQMwTYGy-5uPIQid7A",chromInfoServer:"https://higlass.io/api/v1",chromInfoId:"hg38"},layout:{x:0,y:0,w:6.4,h:600},tracks:{top:[],left:[{type:"combined",width:130,height:600,contents:[{type:"gosling-track",server:"https://server.gosling-lang.org/api/v1/",tilesetUid:"cistrome-multivec",width:130,height:600,options:{showMousePosition:!0,mousePositionColor:"#000000",fontSize:24,labelPosition:"none",labelShowResolution:!1,labelColor:"black",labelBackgroundColor:"white",labelTextOpacity:1,labelLeftMargin:1,labelTopMargin:1,labelRightMargin:0,labelBottomMargin:0,backgroundColor:"transparent",spec:{spacing:10,orientation:"vertical",assembly:"hg38",layout:"linear",static:!1,xDomain:{interval:[0,1e9]},centerRadius:.3,xOffset:0,yOffset:0,style:{outlineWidth:.5},data:{url:"https://server.gosling-lang.org/api/v1/tileset_info/?d=cistrome-multivec",type:"multivec",row:"sample",column:"position",value:"peak",categories:["sample 1","sample 2","sample 3","sample 4"],binSize:4},mark:"rect",x:{field:"start",type:"genomic",axis:"left",domain:{interval:[0,1e9]},linkingId:"7f94b74e-25ec-4e67-8c75-3dc0f1b0d6bd"},xe:{field:"end",type:"genomic"},row:{field:"sample",type:"nominal",legend:!0},color:{field:"peak",type:"quantitative",legend:!0},tooltip:[{field:"start",type:"genomic",alt:"Start Position"},{field:"end",type:"genomic",alt:"End Position"},{field:"peak",type:"quantitative",alt:"Value",format:".2"},{field:"sample",type:"nominal",alt:"Sample"}],width:160,height:600,overlayOnPreviousTrack:!1},theme:{base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},point:{color:"#E79F00",size:3,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rect:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},triangle:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},area:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},line:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},bar:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rule:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},link:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},text:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6],textAnchor:"middle",textFontWeight:"normal"},brush:{color:"gray",size:1,stroke:"black",strokeWidth:1,opacity:.3,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]}}}}]},{uid:"15483511-f6fb-11eb-914b-976b6ecda162",type:"axis-track",chromInfoPath:"https://s3.amazonaws.com/gosling-lang.org/data/hg38.chrom.sizes",options:{layout:"linear",outerRadius:null,width:160,height:600,theme:{base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},point:{color:"#E79F00",size:3,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rect:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},triangle:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},area:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},line:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},bar:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rule:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},link:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},text:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6],textAnchor:"middle",textFontWeight:"normal"},brush:{color:"gray",size:1,stroke:"black",strokeWidth:1,opacity:.3,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]}},assembly:"hg38",stroke:"transparent",color:"black",fontSize:12,fontFamily:"Arial",fontWeight:"normal",tickColor:"black",tickFormat:"plain",tickPositions:"even",reverseOrientation:!1},width:30}],center:[],right:[],bottom:[],gallery:[],whole:[]},initialXDomain:[0,1e9],initialYDomain:[0,1e9],zoomFixed:!1,zoomLimits:[1,null],uid:"15483510-f6fb-11eb-914b-976b6ecda162",chromInfoPath:"https://s3.amazonaws.com/gosling-lang.org/data/hg38.chrom.sizes"},{genomePositionSearchBoxVisible:!1,genomePositionSearchBox:{autocompleteServer:"https://higlass.io/api/v1",autocompleteId:"P0PLbQMwTYGy-5uPIQid7A",chromInfoServer:"https://higlass.io/api/v1",chromInfoId:"hg38"},layout:{x:6.8,y:0,w:5.2,h:600},tracks:{top:[],left:[{type:"combined",width:130,height:600,contents:[{type:"gosling-track",server:"https://server.gosling-lang.org/api/v1/",tilesetUid:"cistrome-multivec",width:130,height:600,options:{showMousePosition:!0,mousePositionColor:"#000000",fontSize:24,labelPosition:"none",labelShowResolution:!1,labelColor:"black",labelBackgroundColor:"white",labelTextOpacity:1,labelLeftMargin:1,labelTopMargin:1,labelRightMargin:0,labelBottomMargin:0,backgroundColor:"transparent",spec:{spacing:10,orientation:"vertical",assembly:"hg38",layout:"linear",static:!1,xDomain:{interval:[0,1e9]},centerRadius:.3,xOffset:0,yOffset:0,style:{outlineWidth:.5},data:{url:"https://server.gosling-lang.org/api/v1/tileset_info/?d=cistrome-multivec",type:"multivec",row:"sample",column:"position",value:"peak",categories:["sample 1","sample 2","sample 3","sample 4"],binSize:4},mark:"rect",x:{field:"start",type:"genomic",domain:{interval:[0,1e9]},linkingId:"7f94b74e-25ec-4e67-8c75-3dc0f1b0d6bd"},xe:{field:"end",type:"genomic"},row:{field:"sample",type:"nominal",legend:!0},color:{field:"peak",type:"quantitative",legend:!0},tooltip:[{field:"start",type:"genomic",alt:"Start Position"},{field:"end",type:"genomic",alt:"End Position"},{field:"peak",type:"quantitative",alt:"Value",format:".2"},{field:"sample",type:"nominal",alt:"Sample"}],width:130,height:600},theme:{base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},point:{color:"#E79F00",size:3,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rect:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},triangle:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},area:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},line:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},bar:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rule:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},link:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},text:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6],textAnchor:"middle",textFontWeight:"normal"},brush:{color:"gray",size:1,stroke:"black",strokeWidth:1,opacity:.3,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]}}}}]}],center:[],right:[],bottom:[],gallery:[],whole:[]},initialXDomain:[0,1e9],initialYDomain:[0,1e9],zoomFixed:!1,zoomLimits:[1,null],uid:"154b1b40-f6fb-11eb-914b-976b6ecda162"}],zoomLocks:{locksByViewUid:{},locksDict:{}},locationLocks:{locksByViewUid:{},locksDict:{}},editable:!1,chromInfoPath:"https://s3.amazonaws.com/gosling-lang.org/data/hg38.chrom.sizes"},jr=30,Sng=e=>({genomePositionSearchBoxVisible:!1,genomePositionSearchBox:{autocompleteServer:"https://higlass.io/api/v1",autocompleteId:y6e(e),chromInfoServer:"https://higlass.io/api/v1",chromInfoId:e??"hg38"},layout:{w:12,h:12,x:0,y:0},tracks:{top:[],left:[],center:[],right:[],bottom:[],gallery:[],whole:[]},initialXDomain:[0,bI(e).total],initialYDomain:[0,bI(e).total],zoomFixed:!1});class wng{constructor(){rt(this,"assembly"),rt(this,"orientation"),rt(this,"hg"),this.assembly="hg38",this.hg={compactLayout:!1,trackSourceServers:[],views:[],zoomLocks:{locksByViewUid:{},locksDict:{}},locationLocks:{locksByViewUid:{},locksDict:{}}},this.setEditable(!1)}spec(){return this.hg}setViewOrientation(g){return this.orientation=g,this}addDefaultView(g,I){return this.hg.views.push(JSON.parse(JSON.stringify({...Sng(I),uid:g}))),this}setAssembly(g){return this.assembly=g,this.setChromInfoPath(bI(this.assembly).path),this}getAssembly(){return this.assembly}setTextTrack(g,I,i,n="black",C=14,r="normal",o="left",a="transparent",s="Arial"){var A;return this.getLastView()&&((A=this.getLastView().tracks.top)==null||A.push({type:"text",width:g,height:I,options:{backgroundColor:a,textColor:n,fontSize:C,fontWeight:r,fontFamily:s,offsetY:0,align:o,text:i}})),this}setDummyTrack(g){var I;return this.getLastView()&&((I=this.getLastView().tracks.top)==null||I.push({type:"dummy-track",width:g.width,height:g.height,options:{width:g.width,height:g.height,title:g.title,...g.style}})),this}addBrush(g,I,i,n,C){var r,o,a,s,A,l;if(n)return(l=this.getView(I))==null||l.tracks.whole.push({type:g==="circular"?"brush-track":"viewport-projection-horizontal",uid:ln(),fromViewUid:n,options:{projectionFillColor:(r=C==null?void 0:C.color)!=null?r:i.brush.color,projectionStrokeColor:(o=C==null?void 0:C.stroke)!=null?o:i.brush.stroke,projectionFillOpacity:(a=C==null?void 0:C.opacity)!=null?a:i.brush.opacity,projectionStrokeOpacity:(s=C==null?void 0:C.opacity)!=null?s:i.brush.opacity,strokeWidth:(A=C==null?void 0:C.strokeWidth)!=null?A:i.brush.strokeWidth,startAngle:C==null?void 0:C.startAngle,endAngle:C==null?void 0:C.endAngle,innerRadius:C==null?void 0:C.innerRadius,outerRadius:C==null?void 0:C.outerRadius}}),this}getLastView(){return this.hg.views[this.hg.views.length-1]}getMainTrackPosition(){return this.orientation==="vertical"?"left":"center"}getLastVisView(){const g=this.hg.views.filter(I=>{var i,n;return((n=(i=I.tracks[this.getMainTrackPosition()])==null?void 0:i[0])==null?void 0:n.type)==="combined"});return g[g.length-1]}getView(g){return this.hg.views.find(I=>I.uid===g)}validateSpec(g=!1){return Z2e(Gng,this.spec(),g).state==="success"}setDomain(g,I){return g&&(this.getLastView().initialXDomain=d_(g,this.getAssembly())),I&&(this.getLastView().initialYDomain=d_(I,this.getAssembly())),this}adjustDomain(g="horizontal",I,i){if(g!=="vertical")return this;const n=this.getLastView().initialXDomain;if(!n)return this;const[C,r]=n,o=r-C,a=(C+r)/2;return this.getLastView().initialXDomain=[a-o/I/2/i*I,a+o/I/2/i*I],this}setZoomFixed(g){return this.getLastView().zoomFixed=g,this}setZoomLimits(g){return this.getLastView().zoomLimits=g,this}setLayout(g){return this.getLastView().layout=g,this}setEditable(g){return this.hg.editable=g,this}setChromInfoPath(g){return this.getLastView()&&(this.getLastView().chromInfoPath=g),this.hg.chromInfoPath=g,this}addTrackSourceServers(g){var I,i;return g&&((I=this.hg.trackSourceServers)==null?void 0:I.indexOf(g))===-1&&((i=this.hg.trackSourceServers)==null||i.push(g)),this}setMainTrack(g){var I;return this.getLastView()?(this.getLastView().tracks[this.getMainTrackPosition()]=[{type:"combined",uid:`${(I=g.uid)!=null?I:ln()}-${this.getMainTrackPosition()}-combined`,width:g.width-1,height:g.height,contents:[g]}],this):this}addTrackToCombined(g){var I;return this.getLastVisView()?((I=this.getLastVisView().tracks[this.getMainTrackPosition()][0])==null||I.contents.push(g),this):this}setAxisTrack(g,I="regular",i){if(!this.hg.views)return this;const n=g==="left"||g==="right"?"width":"height",C={type:"axis-track",chromInfoPath:this.hg.chromInfoPath,options:{...i,assembly:this.getAssembly(),stroke:"transparent",color:i.theme.axis.labelColor,labelMargin:i.theme.axis.labelMargin,excludeChrPrefix:i.theme.axis.labelExcludeChrPrefix,fontSize:i.theme.axis.labelFontSize,fontFamily:i.theme.axis.labelFontFamily,fontWeight:i.theme.axis.labelFontWeight,tickColor:i.theme.axis.tickColor,tickFormat:I==="narrower"?"si":"plain",tickPositions:I==="regular"?"even":"ends",reverseOrientation:g==="bottom"||g==="right"}};if(i.layout==="circular")this.addTrackToCombined({...C,options:{...C.options,layout:"circular"}});else{const r={...C,[n]:jr};if(g==="left"){if(this.getLastView().tracks.left.filter(o=>o.type==="axis-track").length!==0)return this;this.getLastView().tracks.left=aje(this.getLastView().tracks.left,0,r)}else if(g==="right"){if(this.getLastView().tracks.right.filter(o=>o.type==="axis-track").length!==0)return this;this.getLastView().tracks.right.push(r)}else{if(this.getLastView().tracks[g].filter(o=>o.type==="axis-track").length!==0)return this;this.getLastView().tracks[g].push(r)}}return this}setExampleHiglassViewConfig(){this.hg=Bng}}function yG(e,g,I,i){const n=i&&i!==0?i:void 0;let C=0;switch(g){case"less-than":case"LT":case"lt":C=I>e?n?(I-e)/n:1:0;break;case"less-than-or-equal-to":case"LTET":case"ltet":C=I>=e?n?(I-e)/n:1:0;break;case"greater-than":case"GT":case"gt":C=I{e[I]&&I!=="base"&&(g[I]=Object.assign(JSON.parse(JSON.stringify(g[I])),JSON.parse(JSON.stringify(e[I]))))}),g}}class Vng{constructor(g,I,i){rt(this,"id"),rt(this,"theme"),rt(this,"specOriginal"),rt(this,"specComplete"),rt(this,"dataAggregated"),rt(this,"channelScales"),rt(this,"mouseEventModel"),this.id=ln(),this.theme=i??oHe(),this.dataAggregated=I,this.specOriginal=g,this.specComplete=structuredClone(g),this.channelScales={},this.mouseEventModel=new Xgg;const n=this.validateSpec();if(!n.valid){console.warn("Gosling specification is not valid!",n.errorMessages);return}this.generateCompleteSpec(this.specComplete),this.flipRanges(this.specComplete),this.generateScales(),this.dataAggregated=sng(this.spec(),this.dataAggregated)}getId(){return this.id}originalSpec(){return this.specOriginal}spec(){return this.specComplete}data(){return this.dataAggregated}getMouseEventModel(){return this.mouseEventModel}generateCompleteSpec(g){if(!g.width||!g.height){console.warn("Size of track is not determined yet.");return}if(g.orientation==="vertical"){const n=g.width;g.width=g.height,g.height=n}const I=this.getGenomicChannelKey();let i=!1;I==="x"&&(i=ut(g.x)&&g.x.axis!==void 0&&g.x.axis!=="none"),I==="y"&&(i=ut(g.y)&&g.y.axis!==void 0&&g.y.axis!=="none"),g.layout!=="circular"?ut(g.x)&&g.x.axis!==void 0&&g.x.axis!=="none"&&(g.height-=jr):I==="x"&&i&&ut(g.x)&&g.x.axis==="top"?g.outerRadius=g.outerRadius-jr:I==="x"&&i&&ut(g.x)&&g.x.axis==="bottom"&&(g.innerRadius=g.innerRadius+jr),Xd.forEach(n=>{const C=g[n];ut(C)&&!("zeroBaseline"in C)&&C.type==="quantitative"&&(C.zeroBaseline=!0)}),this.addScaleMaterials(g)}flipRanges(g){ut(g.y)&&g.y.flip&&Array.isArray(g.y.range)&&(g.y.range=g.y.range.reverse())}getGenomicChannelKey(){return v2e(this.spec())}getGenomicChannel(){return L$(this.spec())}setChannelDomain(g,I,i){const n=this.originalSpec()[g];if(!i&&ut(n)&&n.domain!==void 0)return;const C=this.specComplete[g];ut(C)&&(C.domain=I)}updateChannelValue(){if(this.originalSpec().y===void 0){const g=this.spec().y,I=this.getChannelDomainArray("row");g&&F1(g)&&I&&this.spec().mark!=="withinLink"&&(g.value=this.spec().height/I.length/2)}}encodedValue(g,I){var i;if(g==="text"&&I!==void 0)return`${+I?~~I:I}`;const n=this.spec()[g],C=ut(n)?n.type:F1(n)?"constant":void 0;if(C){if(C==="constant")return this.channelScales[g]();if(I!==void 0&&(I===null&&(C==="quantitative"?I=0:C==="nominal"&&(I="null")),typeof this.channelScales[g]=="function"))switch(g){case"x":case"y":case"x1":case"y1":case"xe":case"ye":case"x1e":if(C==="quantitative"||C==="genomic")return this.channelScales[g](I);if(C==="nominal")return this.channelScales[g](I);break;case"stroke":case"color":if(C==="quantitative"){const r=this.channelScales[g].copy(),o=r.domain(),a=o[1]-o[0],s=Array.from((i=n.scaleOffset)!=null?i:[0,1]);return r.domain([o[0]+a*s.sort()[0],o[0]+a*s.sort()[1]])(I)}if(C==="nominal")return this.channelScales[g](I);break;case"size":if(C==="quantitative")return this.channelScales[g](I);if(C==="nominal")return this.channelScales[g](I);break;case"row":if(C==="nominal")return this.channelScales[g](I);break;case"strokeWidth":case"opacity":if(C==="quantitative")return this.channelScales[g](I);break;default:console.warn(`${g} is not supported for encoding values, so returning a undefined value`);return}}}trackVisibility(g){const I=this.spec();if(!I.visibility||I.visibility.length===0||I.visibility.filter(n=>n.target==="track").length===0)return!0;let i=!0;return I.visibility.filter(n=>n.target==="track").forEach(n=>{const{operation:C,measure:r,threshold:o}=n;let a;r==="zoomLevel"?a=g[r]:a=I[r],a!==void 0&&(i=i&&yG(a,C,o)===1)}),i}markVisibility(g,I){const i=this.spec();if(!i.visibility||i.visibility.length===0||i.visibility.filter(C=>C.target==="mark").length===0)return 1;let n=1;return i.visibility.filter(C=>C.target==="mark").forEach(C=>{const{operation:r,threshold:o,conditionPadding:a,transitionPadding:s,measure:A}=C,l=a??0,c=i.mark;let u=1;if(c==="text"&&o==="|xe-x|"&&A==="width"){const d=this.encodedPIXIProperty("xe",g),h=this.encodedPIXIProperty("x",g);d!==void 0&&(I!=null&&I.width)&&(u=yG(I.width+l,r,Math.abs(d-h),s))}else A==="width"&&typeof o=="number"&&(I!=null&&I.width)?u=yG(I.width+l,r,o,s):A==="zoomLevel"&&typeof o=="number"&&(I!=null&&I.zoomLevel)&&(u=yG(I.zoomLevel,r,o,s));n>u&&(n=u)}),n}visualPropertyByChannel(g,I){const i=I!==void 0?pI(I,this.spec()[g]):void 0;return this.encodedValue(g,i)}encodedPIXIProperty(g,I,i){const n=this.spec().mark;if(["text","color","row","stroke","opacity","strokeWidth","x","y","xe","x1","x1e","ye","size"].includes(g))return this.visualPropertyByChannel(g,I);switch(n){case"bar":return tje(this,g,I,i);case"point":case"text":return $4e(this,g,I);case"rect":return ije(this,g,I,i);default:return}}addScaleMaterials(g){const I=this.data(),i=this.getGenomicChannel();if(!i||!i.field){console.warn("Genomic field is not provided in the specification");return}if(typeof g.width>"u"||typeof g.height>"u"){console.warn("Track size is not determined yet");return}Xd.forEach(n=>{var C,r,o,a;const s=g[n];if(Mje(g,n)&&ut(s)){const A=BT(I,c=>c[i.field]),l=[...A.keys()];if(!s.domain){const c="zeroBaseline"in s&&s.zeroBaseline?0:k1(l.map(d=>nte(A.get(d).map(h=>s.field?h[s.field]:void 0)))),u=EG(l.map(d=>nte(A.get(d).map(h=>s.field?h[s.field]:void 0))));s.domain=[c,u]}if(!s.range){const c=g.row,u=ut(c)?c.field:void 0,d=(C=this.getChannelDomainArray("row"))!=null?C:u?Array.from(new Set(I.map(m=>m[u]))):[1],h=g.height/d.length;switch(n){case"x":s.range=[0,g.width];break;case"y":s.range=[0,h];break}}}else{const A=g.row,l=ut(A)?A.field:void 0,c=(r=this.getChannelDomainArray("row"))!=null?r:l?Array.from(new Set(I.map(d=>d[l]))):[1],u=g.height/c.length;if(s){if(ut(s)&&(s.type==="quantitative"||s.type==="genomic")){if(s.domain===void 0){const d="zeroBaseline"in s&&s.zeroBaseline?0:(o=k1(I.map(m=>+m[s.field])))!=null?o:0,h=(a=EG(I.map(m=>+m[s.field])))!=null?a:0;s.domain=[d,h]}else s.type==="genomic"&&!Qte(s.domain)&&(s.domain=d_(s.domain));if((n==="color"||n==="stroke")&&s.type==="quantitative"&&!s.scaleOffset&&(s.scaleOffset=[0,1]),!s.range){let d;switch(n){case"x":case"xe":case"x1":case"x1e":d=[0,g.width];break;case"y":case"ye":d=[0,u];break;case"color":case"stroke":d=Rng.QUANTITATIVE_COLOR;break;case"size":d=this.theme.markCommon.quantitativeSizeRange;break;case"strokeWidth":d=[1,3];break;case"opacity":d=[0,1];break}d&&(s.range=d)}}else if(ut(s)&&s.type==="nominal"&&(s.domain===void 0&&(s.domain=Array.from(new Set(I.map(d=>{var h;return(h=d[s.field])!=null?h:"null"})))),!s.range)){let d=2,h;switch(n){case"x":case"xe":h=[0,g.width];break;case"y":case"ye":h=[u,0];break;case"color":case"stroke":h=this.theme.markCommon.nominalColorRange;break;case"row":h=[0,g.height];break;case"size":h=s.domain.map(()=>d++);break}h&&(s.range=h)}}else{let d;switch(n){case"x":d=g.width/2;break;case"y":g.mark==="withinLink"?d=u:d=u/2;break;case"size":g.mark==="line"?d=this.theme.line.size:g.mark==="bar"||g.mark==="rect"||g.mark==="triangleRight"||g.mark==="triangleLeft"||g.mark==="triangleBottom"||g.stretch&&g.mark==="point"&&ut(g.x)&&ut(g.xe)?d=void 0:g.mark==="text"?d=12:d=this.theme.point.size;break;case"color":d=this.theme.markCommon.color;break;case"row":d=0;break;case"stroke":g.mark==="text"?d=this.theme.text.stroke:d=this.theme.markCommon.stroke;break;case"strokeWidth":g.mark==="rule"?d=this.theme.rule.strokeWidth:g.mark==="withinLink"||g.mark==="betweenLink"?d=this.theme.link.strokeWidth:g.mark==="text"?d=this.theme.text.strokeWidth:d=this.theme.markCommon.strokeWidth;break;case"opacity":d=this.theme.markCommon.opacity;break;case"text":d="";break}typeof d<"u"&&(g[n]={value:d})}}}),[["x","xe"],["y","ye"]].forEach(n=>{const[C,r]=n,o=g[C],a=g[r];if(ut(o)&&ut(a)&&o.type===a.type&&o.domain&&a.domain&&Array.isArray(o.domain)&&Array.isArray(a.domain)){if(o.type==="genomic"||o.type==="quantitative"){const s=k1([o.domain[0],a.domain[0]]),A=EG([o.domain[1],a.domain[1]]);o.domain=a.domain=[s,A]}else if(o.type==="nominal"){const s=Array.from(new Set([...o.domain,...a.domain]));o.range=a.range=s}}})}generateScales(){const g=this.spec();Xd.forEach(I=>{const i=g[I];if(F1(i))this.channelScales[I]=()=>i.value;else if(ut(i)){if(I==="text")return;const n=i.domain,C=i.range;if(n===void 0||C===void 0)return;if(i.type==="quantitative"||i.type==="genomic")switch(I){case"x":case"x1":case"xe":case"x1e":case"y":case"ye":case"size":case"opacity":case"strokeWidth":this.channelScales[I]=qd().domain(n).range(C);break;case"color":case"stroke":let r=Rbe;Object.keys(F9).includes(C)&&(r=F9[C]),this.channelScales[I]=Lpe(r).domain(n);break}else if(i.type==="nominal")switch(I){case"x":case"xe":case"y":case"ye":case"row":this.channelScales[I]=Dpe().domain(n).range(C);break;case"size":this.channelScales[I]=X9().domain(n).range(C);break;case"color":case"stroke":this.channelScales[I]=X9(C).domain(n);break}}})}getChannelScale(g){return this.channelScales[g]}setChannelScale(g,I){this.channelScales[g]=I}isShowYAxis(){const g=this.spec(),I=this.getChannelDomainArray("y"),i=this.getChannelRangeArray("y");return ut(g.y)&&g.y.axis!=="none"&&g.y.type==="quantitative"&&!!I&&!!i}getChannelDomainArray(g){const I=this.spec()[g];return ut(I)&&Qte(I.domain)?I.domain:void 0}getChannelRangeArray(g){const I=this.spec()[g];return ut(I)&&Eje(I.range)?I.range:void 0}validateSpec(){return G2e(this.originalSpec())}}function Tr(e,g){H7.publish(e,g)}function Wng(e,g){H7.subscribe(e,g)}function Xng(e){H7.unsubscribe(e)}const cce={stroke:"black",strokeWidth:1,strokeOpacity:1,color:"none",opacity:1,arrange:"front"};function Hng(){return{goslingModels:[],tabularData:[],skipRendering:!1}}const Tng={type:"gosling-track",datatype:["multivec","epilogos"],orientation:"1d-horizontal",defaultOptions:{theme:pG("light")}},Nng=(e,g,I)=>{var i,n,C,r,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G,v,w,R,S,X,W,V,H,Y,K,x,J;const{tileProxy:P}=e.services,{BarTrack:ge}=e.tracks,q=Fs({color:"black",size:12}),$=class h_ extends ge{constructor(){var Q,ie,he,ne,be,pe;super(g,I),pg(this,d),pg(this,m),pg(this,b),pg(this,y),pg(this,B),pg(this,v),pg(this,R),pg(this,X),pg(this,V),pg(this,Y),pg(this,x),rt(this,"tileSize"),rt(this,"mRangeBrush"),pg(this,i,void 0),pg(this,n,void 0),rt(this,"firstDraw",!0),rt(this,"gLegend",e.libraries.d3Selection.select(g.svgElement).append("g")),rt(this,"displayedLegends",[]),rt(this,"textGraphics",[]),rt(this,"textsBeingUsed",0),rt(this,"pMouseHover",new e.libraries.PIXI.Graphics),rt(this,"pMouseSelection",new e.libraries.PIXI.Graphics),pg(this,C,0),pg(this,r,0),pg(this,o,!1),pg(this,a,e.libraries.d3Selection.select(g.svgElement).append("g")),pg(this,s,new e.libraries.PIXI.TextStyle(q)),pg(this,A,new e.libraries.PIXI.Graphics),pg(this,l,new e.libraries.PIXI.Text("",q)),rt(this,"prevVisibleAndFetchedTiles"),rt(this,"resolvedTracks"),rt(this,"hideMousePosition"),g.dataFetcher.track=this,VC(this,n,{}),VC(this,i,this.options.spec.assembly),"overlay"in this.options.spec?this.options.spec.overlay=this.options.spec._overlay.map(Be=>({...Be,_renderingId:ln()})):this.options.spec._renderingId=ln(),this.fetchedTiles={},this.tileSize=(ie=(Q=this.tilesetInfo)==null?void 0:Q.tile_size)!=null?ie:1024;const{valid:ve,errorMessages:We}=G2e(this.options.spec);ve||console.warn("The specification of the following track is invalid",We,this.options.spec),this.pMain.addChild(this.pMouseHover),this.pMain.addChild(this.pMouseSelection),this.pMask.interactive=!0,this.mRangeBrush=new vgg(Dt(this,a),e.libraries,(he=this.options.spec.style)==null?void 0:he.brush),this.mRangeBrush.on("brush",SI(this,V,H).bind(this)),this.pMask.on("mousedown",Be=>{const{x:Je,y:Pe}=Be.data.getLocalPosition(this.pMain);SI(this,b,p).call(this,Je,Pe,Be.data.originalEvent.altKey)}),this.pMask.on("mouseup",Be=>{const{x:Je,y:Pe}=Be.data.getLocalPosition(this.pMain);SI(this,B,G).call(this,Je,Pe)}),this.pMask.on("mousemove",Be=>{const{x:Je}=Be.data.getLocalPosition(this.pMain);SI(this,y,Z).call(this,Je)}),this.pMask.on("mouseout",SI(this,v,w).bind(this)),this.flipText=this.options.spec.orientation==="vertical",this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0),(ne=this.options)!=null&&ne.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=e.utils.showMousePosition(this,iC(this.getResolvedTracks()[0]),this.isShowGlobalMousePosition())),this.pLabel.removeChild(this.trackNotFoundText),Dt(this,l).anchor.x=1,Dt(this,l).anchor.y=1,this.pLabel.addChild(Dt(this,A)),this.pLabel.addChild(Dt(this,l)),e.libraries.PIXI.GRAPHICS_CURVES.adaptive=(pe=(be=this.options.spec.style)==null?void 0:be.enableSmoothPath)!=null?pe:!1,e.libraries.PIXI.GRAPHICS_CURVES.adaptive&&(e.libraries.PIXI.GRAPHICS_CURVES.maxLength=1,e.libraries.PIXI.GRAPHICS_CURVES.maxSegments=2048*10)}draw(){var Q,ie;this.clearMouseEventData(),this.textsBeingUsed=0,(Q=this.pMouseHover)==null||Q.clear();const he=()=>{const ne=this.dataFetcher instanceof VH;this.processAllTiles(ne),super.draw(),this.prevVisibleAndFetchedTiles=this.visibleAndFetchedTiles()};LR(this.dataFetcher)&&!Sbe(this.visibleAndFetchedTiles(),this.prevVisibleAndFetchedTiles)?this.updateTileAsync(this.dataFetcher,he):he(),(ie=this.mRangeBrush)==null||ie.drawBrush(!0),this.firstDraw&&(SI(this,x,J).call(this),this.firstDraw=!1)}initTile(Q){this.drawTile(Q)}updateTile(){}renderTile(){}drawTile(Q){var ie,he;Q.drawnAtScale=this._xScale.copy();const ne=Dt(this,n)[Q.tileId];ne&&((ie=Q.graphics)==null||ie.clear(),(he=Q.graphics)==null||he.removeChildren(),this.pBackground.clear(),this.pBackground.removeChildren(),this.pBorder.clear(),this.pBorder.removeChildren(),this.displayedLegends=[],ne.goslingModels.forEach(be=>{const pe=this.dimensions[0],ve=this._xScale.invert(pe)-this._xScale.invert(0);be.trackVisibility({zoomLevel:ve})&&(Bje(e,this,Q,be,this.options.theme),vje(e,this,Q,be),Sje(e,this,Q,be,this.options.theme))}),this.forceDraw())}rerender(Q){this.options=Q,this.options.spec.layout==="circular"&&this.mRangeBrush.remove(),this.getResolvedTracks(!0),this.clearMouseEventData(),this.textsBeingUsed=0,this.processAllTiles(!0),this.draw(),this.forceDraw()}clearMouseEventData(){this.visibleAndFetchedGoslingModels().forEach(Q=>Q.getMouseEventModel().clear())}visibleAndFetchedGoslingModels(){return this.visibleAndFetchedTiles().flatMap(Q=>{var ie,he;return(he=(ie=Dt(this,n)[Q.tileId])==null?void 0:ie.goslingModels)!=null?he:[]})}remove(){super.remove(),this.gLegend&&(this.gLegend.remove(),this.gLegend=void 0),this.mRangeBrush.remove()}setDimensions(Q){super.setDimensions(Q),this.mRangeBrush.setSize(Q[1])}setPosition(Q){super.setPosition(Q),[this.pMain.position.x,this.pMain.position.y]=this.position,this.mRangeBrush.setOffset(...Q)}forceDraw(){this.animate()}zoomed(Q,ie){const he=this.mRangeBrush.getRange();this.mRangeBrush.updateRange(he?[Q(this._xScale.invert(he[0])),Q(this._xScale.invert(he[1]))]:null),this.xScale(Q),this.yScale(ie),this.refreshTiles(),this.draw(),this.forceDraw();const ne=Q.domain().map(be=>Lu(be,Dt(this,i),!0));Tr("location",{id:g.viewUid,genomicRange:ne})}setMask(Q,ie){if(this.pMask.clear(),this.pMask.beginFill(),this.options.spec.layout==="circular"){const[he,ne]=this.position,[be,pe]=this.dimensions,ve=he+be/2,We=ne+pe/2,Be=this.options.spec.outerRadius;this.pMask.drawCircle(ve,We,Be)}else this.pMask.drawRect(Q[0],Q[1],ie[0],ie[1]);this.pMask.endFill()}processAllTiles(Q=!1){var ie,he;this.tileSize=(he=(ie=this.tilesetInfo)==null?void 0:ie.tile_size)!=null?he:1024;const ne=this.visibleAndFetchedTiles();ne.forEach(ve=>SI(this,m,f).call(this,ve,Q)),this.combineAllTilesIfNeeded();const be=ne.flatMap(ve=>this.transformDataAndCreateModels(ve));vng(be);const pe=[].concat(...be.map(ve=>ve.data()));pe.length!==0&&this.options.siblingIds.forEach(ve=>Tr("rawData",{id:ve,data:pe}))}async updateTileAsync(Q,ie){if(!this.tilesetInfo)return;const he=this.visibleAndFetchedTiles(),ne=await Q.getTabularData(Object.values(he).map(pe=>pe.remoteId)),be=this.tilesetInfo;he.forEach((pe,ve)=>{if(ve===0){const[We]=e.utils.trackUtils.calculate1DVisibleTiles(be,this._xScale);pe.tileData.zoomLevel=We[0],pe.tileData.tilePos=[We[1],We[1]],pe.tileData.tabularData=ne}else pe.tileData.tabularData=[]}),ie()}calculateVisibleTiles(){var Q,ie,he,ne,be;if(this.tilesetInfo)if(LR(this.dataFetcher)){const pe=e.utils.trackUtils.calculate1DVisibleTiles(this.tilesetInfo,this._xScale),ve=(ie=(Q=this.tilesetInfo.max_tile_width)!=null?Q:this.dataFetcher.MAX_TILE_WIDTH)!=null?ie:Number.MAX_SAFE_INTEGER;for(const We of pe){const{tileWidth:Be}=this.getTilePosAndDimensions(We[0],[We[1],We[1]]);if(this.forceDraw(),Be>ve)return}this.setVisibleTiles(pe)}else{if(!this.tilesetInfo)return;const pe=this.calculateZoomLevel();if("resolutions"in this.tilesetInfo){const ve=this.tilesetInfo.resolutions.map(Pe=>+Pe).sort((Pe,De)=>De-Pe),We=P.calculateTilesFromResolution(ve[pe],this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);let Be;iC(this.getResolvedTracks()[0])&&(Be=P.calculateTilesFromResolution(ve[pe],this._yScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]));const Je=SI(he=h_,c,u).call(he,We,Be,pe);this.setVisibleTiles(Je)}else{const ve=P.calculateTiles(pe,this.relevantScale(),this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);let We;iC(this.getResolvedTracks()[0])&&(We=P.calculateTiles(pe,this._yScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,(ne=this.tilesetInfo.max_width1)!=null?ne:this.tilesetInfo.max_width));const Be=SI(be=h_,c,u).call(be,ve,We,pe);this.setVisibleTiles(Be)}}}getTilePosAndDimensions(Q,ie){if(!this.tilesetInfo)throw Error("tilesetInfo not parsed");if("resolutions"in this.tilesetInfo){const ne=this.tilesetInfo.resolutions.map(Pe=>+Pe).sort((Pe,De)=>De-Pe)[Q],[be,pe]=ie,ve=ne*Dt(this,d,h),We=ve,Be=ve*be,Je=We*pe;return{tileX:Be,tileY:Je,tileWidth:ve,tileHeight:We}}else{const[he,ne]=ie,be=this.tilesetInfo.min_pos[0],pe=this.tilesetInfo.min_pos[1],ve=this.tilesetInfo.max_width/2**Q,We=this.tilesetInfo.max_width/2**Q,Be=be+he*ve,Je=pe+ne*We;return{tileX:Be,tileY:Je,tileWidth:ve,tileHeight:We}}}getIndicesOfVisibleDataInTile(Q){const ie=this._xScale.range();if(!this.tilesetInfo||!Q.tileData.tilePos||!("dense"in Q.tileData))return[0,0];const{tileX:he,tileWidth:ne}=this.getTilePosAndDimensions(Q.tileData.zoomLevel,Q.tileData.tilePos),be=e.libraries.d3Scale.scaleLinear().domain([0,Dt(this,d,h)]).range([he,he+ne]),pe=Math.max(0,Math.round(be.invert(this._xScale.invert(ie[0])))),ve=Math.min(Q.tileData.dense.length,Math.round(be.invert(this._xScale.invert(ie[1]))));return[pe,ve]}receivedTiles(Q){super.receivedTiles(Q),LR(this.dataFetcher)&&this.drawLoadingCue()}removeOldTiles(){super.removeOldTiles(),LR(this.dataFetcher)&&this.drawLoadingCue()}combineAllTilesIfNeeded(){var Q,ie,he;if(!this.shouldCombineTiles())return;const ne=this.visibleAndFetchedTiles();if(!ne||ne.length<=1)return;this.tileSize=((ie=(Q=this.tilesetInfo)==null?void 0:Q.tile_size)!=null?ie:1024)*ne.length;let be=[];ne.forEach((ve,We)=>{const Be=Dt(this,n)[ve.tileId];Be&&(be=[...be,...Be.tabularData],Be.skipRendering=We!==0)});const pe=Dt(this,n)[ne[0].tileId];pe.tabularData=be,(he=pe.tabularData[0])!=null&&he.uid&&(pe.tabularData=b4e(pe.tabularData,"uid"))}shouldCombineTiles(){const Q=wje(this.options.spec,"displace"),ie=()=>{const ne=this.visibleAndFetchedTiles();return ne.length>=1&&"dense"in ne[0].tileData},he=this.dataFetcher instanceof VH;return Q&&!ie()&&!he}getResolvedTracks(Q=!1){if(Q||!this.resolvedTracks){const ie=structuredClone(this.options.spec),he=N0(ie).filter(ne=>ne.mark!=="brush");he.forEach(ne=>{"values"in ne.data&&(ne.data.values=[])}),this.resolvedTracks=he}return this.resolvedTracks}transformDataAndCreateModels(Q){const ie=Dt(this,n)[Q.tileId];return!ie||ie.skipRendering?[]:(ie.goslingModels=[],this.getResolvedTracks().forEach(ne=>{var be;let pe=Array.from(ie.tabularData);(be=ne.dataTransform)==null||be.forEach(_e=>{switch(_e.type){case"filter":pe=tHe(_e,pe);break;case"concat":pe=gng(_e,pe);break;case"replace":pe=Ing(_e,pe);break;case"log":pe=ing(_e,pe);break;case"exonSplit":pe=ang(_e,pe,ne.assembly);break;case"genomicLength":pe=nng(_e,pe);break;case"svType":pe=Cng(_e,pe);break;case"coverage":pe=rng(_e,pe,this._xScale.copy());break;case"subjson":pe=Ang(_e,pe);break;case"displace":pe=ong(_e,pe,this._xScale.copy());break}});try{if(PubSub){const gt=pe.length;PubSub.publish("data-preview",{id:g.viewUid,dataConfig:JSON.stringify({data:ne.data}),data:100>gt?pe:a7(pe,100)})}}catch{}const[ve,We]=this.dimensions,Be=D9(ne)?jr:0,[Je,Pe]=[ve,We+Be],De=Math.min(Je,Pe)/Math.min(ne.width,ne.height);ne.innerRadius&&(ne.innerRadius=ne.innerRadius*De),ne.outerRadius&&(ne.outerRadius=ne.outerRadius*De),ne.width=Je,ne.height=Pe;const Qe=new Vng(ne,pe,this.options.theme);ie.goslingModels.push(Qe)}),ie.goslingModels)}getMouseOverHtml(Q,ie){var he,ne,be,pe,ve;if(SI(this,X,W).call(this,"trackMouseOver",Q,ie),Dt(this,o)||!this.tilesetInfo)return"";this.pMouseHover.clear();const We=Lu(Math.floor(this._xScale.invert(Q)),Dt(this,i)),Be=SI(this,R,S).call(this,Q,ie);if(Be.length!==0?document.body.style.cursor="pointer":document.body.style.cursor="default",Be.length!==0){const Je=(he=this.options.spec.experimental)==null?void 0:he.mouseEvents;if(!!Je||km(Je)&&!!Je.mouseOver){const _e=this.pMouseHover;((be=(ne=this.options.spec.style)==null?void 0:ne.mouseOver)==null?void 0:be.arrange)!=="behind"&&(this.pMain.removeChild(_e),this.pMain.addChild(_e)),SI(this,Y,K).call(this,_e,Be,Object.assign({},cce,(pe=this.options.spec.style)==null?void 0:pe.mouseOver)),Tr("mouseOver",{id:g.viewUid,genomicPosition:We,data:Be.map(gt=>gt.value)})}const Qe=(ve=this.visibleAndFetchedGoslingModels().find(_e=>{var gt;return _e.spec().tooltip&&((gt=_e.spec().tooltip)==null?void 0:gt.length)!==0}))==null?void 0:ve.spec().tooltip;if(Qe){let _e=Qe.map(gt=>{var lt;const tt=Be[0].value[gt.field];let Xe=tt;if(gt.type==="quantitative"&>.format)Xe=e.libraries.d3Format.format(gt.format)(+tt);else if(gt.type==="genomic"){const{chromosome:ae,position:ye}=Lu(+tt,Dt(this,i));Xe=`${ae}:${e.libraries.d3Format.format(",")(ye)}`}return`${(lt=gt.alt)!=null?lt:gt.field}${Xe}`}).join("");return _e=`${_e}
`,Be.length>1&&(_e+=`
${Be.length-1} Additional Selections...
`),`
${_e}
`}}return""}minVisibleValue(){return 0}maxVisibleValue(){return 0}exportSVG(){throw new Error("exportSVG() not supported for gosling-track")}drawLoadingCue(){if(this.fetching.size){const ie=`Fetching... ${Array.from(this.fetching).join(" ")}`;Dt(this,l).text=ie,Dt(this,l).x=this.position[0]+this.dimensions[0]-6/2,Dt(this,l).y=this.position[1]+this.dimensions[1]-6/2;const he=e.libraries.PIXI.TextMetrics.measureText(ie,Dt(this,s)),{width:ne,height:be}=he;Dt(this,A).clear(),Dt(this,A).lineStyle(1,pt("grey"),1,.5),Dt(this,A).beginFill(pt("white"),.8),Dt(this,A).drawRect(this.position[0]+this.dimensions[0]-ne-6-1,this.position[1]+this.dimensions[1]-be-6-1,ne+6,be+6),Dt(this,l).visible=!0,Dt(this,A).visible=!0}else Dt(this,l).visible=!1,Dt(this,A).visible=!1}updateScaleOffsetFromOriginalSpec(Q,ie,he){this.getResolvedTracks().map(ne=>{if(ne._renderingId===Q){const be=ne[he];ut(be)&&(be.scaleOffset=ie)}})}shareScaleOffsetAcrossTracksAndTiles(Q,ie){this.visibleAndFetchedGoslingModels().forEach(ne=>{const be=ne.spec()[ie];ut(be)&&(be.scaleOffset=Q);const pe=ne.originalSpec()[ie];ut(pe)&&(pe.scaleOffset=Q)})}};i=new WeakMap,n=new WeakMap,C=new WeakMap,r=new WeakMap,o=new WeakMap,a=new WeakMap,s=new WeakMap,A=new WeakMap,l=new WeakMap,c=new WeakSet,u=function(te,Q,ie){if(!Q)return te.map(ne=>[ie,ne]);const he=[];return te.forEach(ne=>Q.forEach(be=>he.push([ie,ne,be]))),he},d=new WeakSet,h=function(){let te;return this.tilesetInfo&&(te="bins_per_dimension"in this.tilesetInfo?this.tilesetInfo.bins_per_dimension:this.tilesetInfo.tile_size),te??256},m=new WeakSet,f=function(te,Q=!1){if(Dt(this,n)[te.tileId]&&!Q||!te.tileData.tilePos)return;const ie=Hng(),he=this.getResolvedTracks();if(he.length===0)return[];const ne=he[0];if("tabularData"in te.tileData)ie.tabularData=te.tileData.tabularData;else{const{tileX:be,tileY:pe,tileWidth:ve,tileHeight:We}=this.getTilePosAndDimensions(te.tileData.zoomLevel,te.tileData.tilePos),Be="length"in te.tileData?Array.from(te.tileData):[],Je=Object.assign({},te.tileData,{sparse:Be,tileX:be,tileY:pe,tileWidth:ve,tileHeight:We,tileSize:this.tileSize}),Pe=png(ne,Je);Pe&&(ie.tabularData=Pe)}Dt(this,n)[te.tileId]=ie},b=new WeakSet,p=function(te,Q,ie){var he;VC(this,C,te),VC(this,r,Q);const ne=(he=this.options.spec.experimental)==null?void 0:he.mouseEvents,be=!!ne||km(ne)&&!!ne.rangeSelect;VC(this,o,be&&ie),this.pMouseHover.clear()},y=new WeakSet,Z=function(te){this.options.spec.layout!=="circular"&&Dt(this,o)&&this.mRangeBrush.updateRange([te,Dt(this,C)]).drawBrush().visible().disable()},B=new WeakSet,G=function(te,Q){var ie;SI(this,X,W).call(this,"trackClick",te,Q);const he=(ie=this.options.spec.experimental)==null?void 0:ie.mouseEvents,ne=!!he||km(he)&&!!he.click,be=Math.sqrt((Dt(this,C)-te)**2+(Dt(this,r)-Q)**2)>1;if(!Dt(this,o)&&!be?(this.mRangeBrush.clear(),this.pMouseSelection.clear()):this.mRangeBrush.enable(),VC(this,o,!1),!!this.tilesetInfo&&!be&&ne){const pe=Lu(Math.floor(this._xScale.invert(te)),Dt(this,i)),ve=SI(this,R,S).call(this,te,Q);ve.length!==0&&this.options.siblingIds.forEach(We=>Tr("click",{id:We,genomicPosition:pe,data:ve.map(Be=>Be.value)}))}},v=new WeakSet,w=function(){VC(this,o,!1),document.body.style.cursor="default",this.pMouseHover.clear()},R=new WeakSet,S=function(te,Q){var ie;const he=this.visibleAndFetchedGoslingModels(),ne=(ie=this.options.spec.experimental)==null?void 0:ie.mouseEvents,be=km(ne)&&ne.enableMouseOverOnMultipleMarks,pe=km(ne)&&ne.groupMarksByField,ve=he.map(We=>We.getMouseEventModel().findAll(te,Q,!0)).flat();if(be||ve.splice(1,ve.length-1),ve.length!==0&&pe){const We=Array.from(ve);he.forEach(Be=>{const Je=Be.getMouseEventModel().getSiblings(We,pe);ve.push(...Je)})}return ve},X=new WeakSet,W=function(te,Q,ie){const[he,ne]=this.position,[be,pe]=this.dimensions;if(this.options.spec.layout==="circular"){const ve=he+be/2,We=ne+pe/2,Be=this.options.spec.innerRadius,Je=this.options.spec.outerRadius,Pe=this.options.spec.startAngle,De=this.options.spec.endAngle;Bgg([Q,ie],[be/2,pe/2],[Be,Je],[Pe,De])&&Tr(te,{id:g.viewUid,spec:structuredClone(this.options.spec),shape:{x:he,y:ne,width:be,height:pe,cx:ve,cy:We,innerRadius:Be,outerRadius:Je,startAngle:Pe,endAngle:De}})}else Tr(te,{id:g.viewUid,spec:structuredClone(this.options.spec),shape:{x:he,y:ne,width:be,height:pe}})},V=new WeakSet,H=function(te,Q=!1){var ie,he,ne,be;if(this.pMouseSelection.clear(),te===null){Q||Tr("rangeSelect",{id:g.viewUid,genomicRange:null,data:[]});return}const pe=this.visibleAndFetchedGoslingModels(),[ve,We]=te;let Be=pe.map(De=>De.getMouseEventModel().findAllWithinRange(ve,We,!0)).flat();const Je=(ie=this.options.spec.experimental)==null?void 0:ie.mouseEvents,Pe=km(Je)&&Je.groupMarksByField;if(Be.length!==0&&Pe&&pe.forEach(De=>{const Qe=De.getMouseEventModel().getSiblings(Be,Pe),_e=Array.from(new Set(Qe.map(gt=>gt.value[Pe])));Be=Be.filter(gt=>_e.indexOf(gt.value[Pe])===-1)}),Be.length!==0){const De=this.pMouseSelection;((ne=(he=this.options.spec.style)==null?void 0:he.select)==null?void 0:ne.arrange)!=="behind"&&(this.pMain.removeChild(De),this.pMain.addChild(De)),SI(this,Y,K).call(this,De,Be,Object.assign({},cce,(be=this.options.spec.style)==null?void 0:be.select))}if(!Q){const De=[Lu(Math.floor(this._xScale.invert(ve)),Dt(this,i)),Lu(Math.floor(this._xScale.invert(We)),Dt(this,i))];Tr("rangeSelect",{id:g.viewUid,genomicRange:De,data:Be.map(Qe=>Qe.value)})}this.forceDraw()},Y=new WeakSet,K=function(te,Q,ie){te.lineStyle(ie.strokeWidth,pt(ie.stroke),ie.strokeOpacity,.5),te.beginFill(pt(ie.color),ie.color==="none"?0:ie.opacity),Q.forEach(he=>{if(he.type==="point"){const[ne,be,pe=3]=he.polygon;te.drawCircle(ne,be,pe)}else he.type==="line"?(te.moveTo(he.polygon[0],he.polygon[1]),Aje(he.polygon).map(ne=>te.lineTo(ne[0],ne[1]))):te.drawPolygon(he.polygon)})},x=new WeakSet,J=function(){Tr("onNewTrack",{id:g.viewUid})},pg($,c);let j=$;return new j},A1=U$(Tng,Nng),kng={type:"dummy-track",defaultOptions:{height:0,width:0,title:"",background:"#fff",textFontSize:12,textFontWeight:"normal",textStroke:"#000",textStrokeWidth:.1,outline:"#fff"}},Yng=(e,g,I)=>{var i,n,C,r;const{SVGTrack:o}=e.tracks;class a extends o{constructor(){super(g,I),pg(this,i),pg(this,C),SI(this,i,n).call(this),SI(this,C,r).call(this),Tr("onNewTrack",{id:g.viewUid})}}return i=new WeakSet,n=function(){this.gMain.append("rect").attr("fill",I.background).attr("x",0).attr("y",0).attr("width",I.width).attr("height",I.height).style("stroke",I.outline)},C=new WeakSet,r=function(){this.gMain.append("text").attr("x",I.width/2).attr("y",(I.height+I.textFontSize)/2).style("text-anchor","middle").style("font-size",`${I.textFontSize}px`).style("font-weight",I.textFontWeight).style("stroke",I.textStroke).style("stroke-width",I.textStrokeWidth).text(I.title)},new a},uce=U$(kng,Yng);let dce=!1;function Kng(){if(!dce){wu({name:"GoslingTrack",track:A1,config:A1.config}),wu({name:"Gosling2DTrack",track:A1,config:{...A1.config,type:"gosling-2d-track",orientation:"2d"}}),wu({name:"AxisTrack",track:Zle,config:Zle.config}),wu({name:"TextTrack",track:S3,config:S3.config}),wu({name:"BrushTrack",track:C_,config:C_.config}),wu({name:"DummyTrack",track:uce,config:uce.config});for(const e of Object.values(mng)){const{config:g}=e;wu({dataFetcher:e,config:g},{pluginType:"dataFetcher"})}dce=!0}}function aHe(e){let g=0,I=0;return e.forEach(i=>{const n=i.boundingBox.x+i.boundingBox.width,C=i.boundingBox.y+i.boundingBox.height;I{s.boundingBox.y+=o+a}),n=[{track:Dng({width:C.width,height:o},e.title,e.subtitle),boundingBox:{x:0,y:0,width:C.width,height:o},layout:{x:0,y:0,w:12,h:o/C.height*12}},...n]}else C.height=C.height+(8-C.height%8);const r=!(typeof e.responsiveSize!="object"?e.responsiveSize:e.responsiveSize.height);return n.forEach(o=>{o.layout.x=o.boundingBox.x/C.width*12,o.layout.w=o.boundingBox.width/C.width*12,o.layout.y=r?o.boundingBox.y:o.boundingBox.y/C.height*12,o.layout.h=r?o.boundingBox.height:o.boundingBox.height/C.height*12}),{trackInfos:n,size:C}}function m_(e,g,I=0,i=0,n=!0){let C=0,r=0,o=!0,a=!1;bb(e,c=>{a=!0,c.layout!=="circular"&&(o=!1)});let s=!0;l0e(e,c=>{(c.arrangement==="vertical"||c.arrangement==="horizontal")&&(s=!1)});const A=n&&o&&a&&s&&("views"in e&&(e.arrangement==="parallel"||e.arrangement==="serial")||"tracks"in e),l=g.length;if("tracks"in e){const c=e.tracks;e.orientation==="vertical"?(r=Math.max(...c.map(u=>u.height)),c.forEach((u,d,h)=>{mce([u])===1&&(u.width+=jr),u.height=r,g.push({track:u,boundingBox:{x:I+C,y:i,width:u.width,height:r},layout:{x:0,y:0,w:0,h:0}}),h[d+1]&&h[d+1].overlayOnPreviousTrack||(C+=u.width,d!==h.length-1&&(C+=e.spacing!==void 0?e.spacing:0))})):(C=Math.max(...c.map(u=>u.width)),c.forEach((u,d,h)=>{mce([u])===1&&(u.height+=jr);const m=N0(u);m.length>0&&iC(m[0])&&Fng([u])===1&&(C+=jr),u.width=C,g.push({track:u,boundingBox:{x:I,y:i+r,width:C,height:u.height},layout:{x:0,y:0,w:0,h:0}}),h[d+1]&&h[d+1].overlayOnPreviousTrack||(r+=u.height,d!==h.length-1&&(r+=e.spacing!==void 0?e.spacing:0))}))}else if(e.arrangement==="parallel"||e.arrangement==="vertical"){const c=e.spacing!==void 0?e.spacing:K1;e.views.forEach((u,d,h)=>{var m,f,b,p,y;const Z=m_(u,g,I+((m=u.xOffset)!=null?m:0),i+((f=u.yOffset)!=null?f:0)+r,!A&&n);C<((b=u.xOffset)!=null?b:0)+Z.width&&(C=((p=u.xOffset)!=null?p:0)+Z.width),d!==h.length-1&&(r+=c),r+=((y=u.yOffset)!=null?y:0)+Z.height})}else(e.arrangement==="serial"||e.arrangement==="horizontal")&&e.views.forEach((c,u,d)=>{var h,m,f,b,p;const y=e.spacing!==void 0?e.spacing:K1,Z=m_(c,g,I+((h=c.xOffset)!=null?h:0)+C,i+((m=c.yOffset)!=null?m:0),!A&&n);r<((f=c.xOffset)!=null?f:0)+Z.height&&(r=((b=c.xOffset)!=null?b:0)+Z.height),u!==d.length-1&&(C+=y),C+=((p=c.xOffset)!=null?p:0)+Z.width});if(A){const c=g.slice(l),u="views"in e&&(e.arrangement==="parallel"||e.arrangement==="serial")&&e.views.length>1,d=e.spacing!==void 0?e.spacing:K1,h=L4e,m=e.centerRadius!==void 0?e.centerRadius:Xbe,f=C/2+h,b=f*(1-m);c.forEach((p,y)=>{var Z,B;if(HS(p.track))return;p.track.layout="circular",p.track.outerRadius=f-h-(p.boundingBox.y-i)/r*b,p.track.innerRadius=f-h-(p.boundingBox.y+p.boundingBox.height-i)/r*b;const G=d/C*360;p.track.startAngle=G+(p.boundingBox.x-I)/C*(C-d)/C*360,p.track.endAngle=(p.boundingBox.x+p.boundingBox.width-I)/C*(C-d)/C*360,p.boundingBox.x=I+((Z=p.track.xOffset)!=null?Z:0),p.boundingBox.y=i+((B=p.track.yOffset)!=null?B:0),p.boundingBox.height=p.track.height=p.boundingBox.width=p.track.width=f*2,y!==0&&(p.track.overlayOnPreviousTrack=!0),u&&ui(p.track)&&(p.track._overlay=p.track._overlay.filter(v=>v.mark!=="brush"))}),r=f*2}return e._assignedWidth=C,e._assignedHeight=r,{x:I,y:i,width:C,height:r}}function mce(e){return e.filter(g=>D9(g)).length}function Fng(e){return e.filter(g=>Pje(g)).length}const Dng=(e,g,I)=>JSON.parse(JSON.stringify({mark:"header",width:e.width,height:e.height,title:g,subtitle:I}));function xng(e){if(!e.includes("tileset_info/?d=")||!e.includes("https:")&&!e.includes("http:"))return{server:void 0,tilesetUid:void 0};const g=e.split("tileset_info/?d=")[0],I=e.split("tileset_info/?d=")[1];return{server:g,tilesetUid:I}}function Eng(e,g,I,i,n,C,r){var o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z;if(HS(g))return e.addDefaultView(g.id).setDummyTrack(g).setLayout(i),e;const B=N0(g),G=B[0],v=(o=G.id)!=null?o:ln();G.id||(G.id=v),B.forEach(R=>{R.id&&C.addMapping(R.id,v)});const w=G.assembly;if(Ute(G.data)){let R,S;if(c7(G.data)){const ge=xng(G.data.url);R=ge.server,S=ge.tilesetUid}const X=L$(G),W=v2e(G),H=(W==="x"||W==="xe")&&ut(X)?X.domain:void 0,Y=iC(G)&&ut(G.y)?G.y.domain:void 0,K=I.width-(G.layout!=="circular"&&G.orientation==="vertical"&&D9(G)?jr:0),x=I.height-(G.layout!=="circular"&&G.orientation==="horizontal"&&D9(G)?jr:0),J={uid:`${v}-track`,type:iC(G)?"gosling-2d-track":"gosling-track",server:R,tilesetUid:S,width:K,height:x,options:{id:v,siblingIds:C.getSiblingGoslingIds(v),showMousePosition:G.layout==="circular"?!1:n.root.showMousePosition,mousePositionColor:n.root.mousePositionColor,name:G.layout==="linear"?G.title:" ",labelPosition:G.title?n.track.titleAlign==="left"?"topLeft":"topRight":"none",labelShowResolution:!1,labelColor:n.track.titleColor,labelBackgroundColor:n.track.titleBackground,labelBackgroundOpacity:.5,labelTextOpacity:1,labelLeftMargin:1,labelTopMargin:1,labelRightMargin:0,labelBottomMargin:0,backgroundColor:"transparent",spec:{...g},theme:n}};if(G.data&&Ute(G.data)&&(G.data.type==="csv"||G.data.type==="json"||G.data.type==="bigwig"||G.data.type==="bam"||G.data.type==="vcf"||G.data.type==="gff"||G.data.type==="bed")){const ge=te=>{const Q=G[te];return Q&&ut(Q)?Q.field:void 0},q={x:ge("x"),xe:ge("xe"),x1:ge("x1"),x1e:ge("x1e")},$="url"in G.data&&(r==null?void 0:r[G.data.url])||{},j="indexUrl"in G.data&&(r==null?void 0:r[G.data.indexUrl])||{};J.data={...G.data,...q,urlFetchOptions:$,indexUrlFetchOptions:j,assembly:w}}if(Kje(G)){J.type="heatmap";const ge=ut(G.color)&&typeof G.color.range=="string"?G.color.range:"viridis";J.options.colorRange=Rje(ge),J.options.trackBorderWidth=(s=(a=G.style)==null?void 0:a.outlineWidth)!=null?s:n.track.outlineWidth,J.options.trackBorderColor=(l=(A=G.style)==null?void 0:A.outline)!=null?l:n.track.outline,J.options.extent=(u=(c=G.style)==null?void 0:c.matrixExtent)!=null?u:"full",J.options.colorbarPosition=(d=G.color)!=null&&d.legend?J.options.extent==="lower-left"?"bottomLeft":"topRight":"hidden"}G.overlayOnPreviousTrack?e.setViewOrientation(G.orientation).addTrackToCombined(J):e.setViewOrientation(G.orientation).setAssembly(w).addDefaultView(v,w).setDomain(H,Y??H).adjustDomain(G.orientation,K,x).setMainTrack(J).addTrackSourceServers(R).setZoomFixed(G.static===!0).setZoomLimits((h=G.zoomLimits)!=null?h:[1,null]).setLayout(i);const P=(ge,q="horizontal",$,j)=>q==="horizontal"?ge==="x"&&$<=200||ge==="y"&&j<=200?"narrower":ge==="x"&&$<=400||ge==="y"&&j<=400?"narrow":"regular":ge==="x"&&j<=200||ge==="y"&&$<=200?"narrower":ge==="x"&&j<=400||ge==="y"&&$<=400?"narrow":"regular";["x","y"].forEach(ge=>{const q=G[ge];if(ut(q)&&"axis"in q&&q.axis&&q.axis!=="none"&&q.type==="genomic"){const $=P(ge,g.orientation,I.width,I.height);e.setAxisTrack(q.axis,$,{id:`${v}-${q.axis}-axis`,layout:G.layout,innerRadius:q.axis==="top"?G.outerRadius-jr:G.innerRadius,outerRadius:q.axis==="top"?G.outerRadius:G.innerRadius+jr,width:G.width,height:G.height,startAngle:G.startAngle,endAngle:G.endAngle,theme:n})}}),e.validateSpec(!0)}else G.mark==="header"&&(e.addDefaultView(`${v}-title`).setLayout(i),typeof G.title=="string"&&e.setTextTrack(I.width,((m=n.root.titleFontSize)!=null?m:18)+K9,G.title,n.root.titleColor,(f=n.root.titleFontSize)!=null?f:18,n.root.titleFontWeight,n.root.titleAlign,n.root.titleBackgroundColor,(b=n.root.titleFontFamily)!=null?b:l3.fontFamily),typeof G.subtitle=="string"&&e.setTextTrack(I.width,((p=n.root.subtitleFontSize)!=null?p:14)+K9,G.subtitle,n.root.subtitleColor,(y=n.root.subtitleFontSize)!=null?y:14,n.root.subtitleFontWeight,n.root.subtitleAlign,n.root.subtitleBackgroundColor,(Z=n.root.subtitleFontFamily)!=null?Z:l3.fontFamily));return e}function Mng(e){const g=[];return e.spec().views.forEach(I=>{var i,n,C,r,o,a,s,A,l,c,u,d,h,m,f;const b=I.uid;let p=(o=(r=(C=(n=(i=I.tracks.center)==null?void 0:i[0])==null?void 0:n.contents)==null?void 0:C[0])==null?void 0:r.options)==null?void 0:o.spec;if(p||(p=(c=(l=(A=(s=(a=I.tracks.left)==null?void 0:a[0])==null?void 0:s.contents)==null?void 0:A[0])==null?void 0:l.options)==null?void 0:c.spec,p||(p=(f=(m=(h=(d=(u=I.tracks.left)==null?void 0:u[1])==null?void 0:d.contents)==null?void 0:h[0])==null?void 0:m.options)==null?void 0:f.spec)),!b||!p)return;N0(p).forEach(Z=>{Xd.forEach(B=>{var G,v,w,R;const S=Z[B];if(ut(S)&&"linkingId"in S&&S.linkingId){g.push({layout:Z.layout==="circular"?"circular":"linear",hgViewId:b,linkId:S.linkingId,isBrush:Z.mark==="brush",style:{color:(G=Z.color)==null?void 0:G.value,stroke:(v=Z.stroke)==null?void 0:v.value,strokeWidth:(w=Z.strokeWidth)==null?void 0:w.value,opacity:(R=Z.opacity)==null?void 0:R.value,startAngle:Z.startAngle,endAngle:Z.endAngle,innerRadius:Z.innerRadius,outerRadius:Z.outerRadius}});return}})})}),g}class zng{constructor(){pg(this,jA,{})}addMapping(g,I){Dt(this,jA)[g]&&Dt(this,jA)[g]!==I&&console.warn(`The track ID ${g} already exists but overwriting with a different ID.`),Dt(this,jA)[g]=I}getTable(){return Dt(this,jA)}getGoslingIds(){return Object.keys(Dt(this,jA))}getHiGlassId(g){return Dt(this,jA)[g]}getSiblingGoslingIds(g){return Object.entries(Dt(this,jA)).filter(([,I])=>I===g).map(([I])=>I)}}jA=new WeakMap;function Png(e){const g=new Set;return e.id&&g.add(e.id),bb(e,I=>{("views"in I||"tracks"in I)&&I.id&&g.add(I.id)}),Array.from(g)}function Jng(e){const g=new Set;return bb(e,I=>{!("views"in I)&&!("tracks"in I)&&I.id&&g.add(I.id)}),Array.from(g)}function Ong(e,g){let I;return e.id===g&&(I=e),bb(e,i=>{i.id===g&&(I=i)}),I}function _ng(e,g){return Png(e).map(I=>{const i=Ong(e,I),n=Jng(i),C={x:Number.MAX_SAFE_INTEGER,y:Number.MAX_SAFE_INTEGER,xe:-Number.MAX_SAFE_INTEGER,ye:-Number.MAX_SAFE_INTEGER};return n.map(r=>g.find(o=>o.id===r)).forEach(r=>{if(!r)return;const{shape:o}=r;C.x>o.x&&(C.x=o.x),C.y>o.y&&(C.y=o.y),C.xe{const{track:u,boundingBox:d,layout:h}=c;Eng(C,u,d,h,i,r,n)});const o=Mng(C);o.filter(c=>c.isBrush).forEach(c=>{var u;C.addBrush(c.layout,c.hgViewId,i,(u=o.find(d=>!d.isBrush&&d.linkId===c.linkId))==null?void 0:u.hgViewId,c.style)}),o.filter(c=>!c.isBrush).forEach(c=>{C.spec().zoomLocks.locksByViewUid[c.hgViewId]=c.linkId,C.spec().locationLocks.locksByViewUid[c.hgViewId]=c.linkId}),Array.from(new Set(o.map(c=>c.linkId))).forEach(c=>{C.spec().zoomLocks.locksDict[c]={uid:c},C.spec().locationLocks.locksDict[c]={uid:c},o.filter(u=>!u.isBrush).filter(u=>u.linkId===c).forEach(u=>{C.spec().zoomLocks.locksDict[c][u.hgViewId]=[1246253105e-1,1246253105e-1,249250.621],C.spec().locationLocks.locksDict[c][u.hgViewId]=[1246253105e-1,1246253105e-1,249250.621]})});const s=g.map(c=>({id:c.track.id,spec:c.track,shape:c.track.layout==="linear"||HS(c.track)?c.boundingBox:{...c.boundingBox,cx:c.boundingBox.x+c.boundingBox.width/2,cy:c.boundingBox.y+c.boundingBox.height/2,innerRadius:c.track.innerRadius,outerRadius:c.track.outerRadius,startAngle:c.track.startAngle,endAngle:c.track.endAngle}})),A=_ng(e,s),l=[...s.map(c=>({...c,type:"track"})),...A.map(c=>({...c,type:"view"}))];I(C.spec(),aHe(g),e,l,r.getTable())}function AHe(e,g,I,i,n){if(typeof e._assignedWidth>"u"||typeof e._assignedHeight>"u")return console.warn("Responsive spec cannot be used when width and height of a view is not determined yet."),!1;let C=!1;const{responsiveSpec:r}=e,o=e._assignedWidth*g,a=e._assignedHeight*I,s={width:o,height:a,aspectRatio:o/a},A={width:i,height:n,aspectRatio:i/n};return r&&r.forEach(l=>{const{spec:c,selectivity:u}=l;if(Ung(u,s,A)&&!C){Object.keys(c).forEach(d=>{e[d]=c[d]}),delete e.responsiveSpec,C=!0;return}}),"views"in e&&e.views.forEach(l=>{C=AHe(l,g,I,i,n)||C}),C}function Ung(e,g,I){if(e.length===0)return!1;let i=!0;return e.forEach(n=>{const{measure:C,operation:r,threshold:o,target:a}=n;i=i&&yG((a==="container"?I:g)[C],r,o)===1}),i}function Qng(e,g,I,i,n,C){var r,o;const a=JSON.parse(JSON.stringify(e));p6e(a),Igg(a,I),Z3(a);const s=hce(a,i);let{trackInfos:A}=s;const{size:l}=s,c=typeof e.responsiveSize=="object"&&((r=e.responsiveSize)==null?void 0:r.width)||e.responsiveSize,u=typeof e.responsiveSize=="object"&&((o=e.responsiveSize)==null?void 0:o.height)||e.responsiveSize,d=c&&n.containerSize?n.containerSize.width/l.width:1,h=u&&n.containerSize?n.containerSize.height/l.height:1,m=n.containerParentSize?n.containerParentSize.width:Number.MAX_SAFE_INTEGER,f=n.containerParentSize?n.containerParentSize.height:Number.MAX_SAFE_INTEGER;AHe(a,d,h,m,f)&&(Z3(a),A=hce(a,i).trackInfos),Tr("specProcessed",{id:a.id,spec:a}),Lng(a,A,g,i,C)}Kng();const sHe=U.forwardRef((e,g)=>{var I;const[i,n]=U.useState((I=e.id)!=null?I:ln());U.useEffect(()=>{var u;n((u=e.id)!=null?u:ln())},[e.id]);const C=e.viewConfig||{},r=!1,o=U.useMemo(()=>N.createElement(dy,{ref:g,options:{pixelPreciseMarginPadding:r,containerPaddingX:0,containerPaddingY:0,viewMarginTop:0,viewMarginBottom:0,viewMarginLeft:0,viewMarginRight:0,viewPaddingTop:0,viewPaddingBottom:0,viewPaddingLeft:0,viewPaddingRight:0,sizeMode:"bounded",rangeSelectionOnAlt:!0},viewConfig:C}),[C,r]),{padding:a=60,margin:s=0,border:A="none",background:l,alt:c="Gosling visualization"}=e.options||{};return N.createElement(N.Fragment,null,N.createElement("div",{id:i,className:`gosling-component ${e.className||""}`,style:{position:"relative",padding:a,margin:s,border:A,background:l,width:e.options.responsiveWidth?`calc(100% - ${a*2}px)`:e.size.width,height:e.options.responsiveHeight?`calc(100% - ${a*2}px)`:e.size.height,textAlign:"left"},"aria-label":c,role:"graphics-document","aria-roledescription":"visualization"},N.createElement("div",{key:JSON.stringify(C),id:"higlass-wrapper",className:"higlass-wrapper",style:{position:"relative",display:"block",background:l,margin:0,padding:0,width:e.options.responsiveWidth?"100%":e.size.width,height:e.options.responsiveHeight?"100%":e.size.height}},o)))});sHe.displayName="HiGlassComponentWrapper";function jng(e,g,I,i,n){const C=structuredClone(n),r=d=>{const h=C[d];return h||console.warn(`Unable to find the track ID, named ${d}.`),h??d},o=()=>Object.keys(C),a=()=>[...I],s=()=>[...a().filter(d=>d.type==="track")],A=d=>{const h=s().find(m=>m.id===d);return h||console.warn(`[getTrack()] Unable to find a track using the ID (${d})`),h},l=()=>[...a().filter(d=>d.type==="view")],c=d=>{const h=l().find(m=>m.id===d);return h||console.warn(`Unable to find a view with the ID of ${d}`),h},u=d=>{var h,m;const f=(h=d==null?void 0:d.resolution)!=null?h:4,b=(m=d==null?void 0:d.transparentBackground)!=null?m:!1,p=e.pixiRenderer,y=Ys.create({width:p.width/2,height:p.height/2,resolution:f});p.render(e.pixiStage,y);const Z=p.plugins.extract.canvas(y),B=document.createElement("canvas");B.width=Z.width,B.height=Z.height;const G=B.getContext("2d");return b||(G.fillStyle=i.root.background,G.fillRect(0,0,B.width,B.height)),G.drawImage(Z,0,0),{canvas:B,resolution:f,canvasWidth:Z.width,canvasHeight:Z.height}};return{subscribe:Wng,unsubscribe:Xng,zoomTo:(d,h,m=0,f=1e3)=>{var b;const p=(b=A(d))==null?void 0:b.spec.assembly,Z=G7.fromString(h).toAbsoluteCoordinates(p,m),B=r(d);e.api.zoomTo(B,...Z,...Z,f)},zoomToExtent:(d,h=1e3)=>{var m;const f=(m=A(d))==null?void 0:m.spec.assembly,[b,p]=[0,bI(f).total],y=r(d);e.api.zoomTo(y,b,p,b,p,h)},zoomToGene:(d,h,m=0,f=1e3)=>{const b=r(d);e.api.zoomToGene(b,h,m,f)},suggestGene:(d,h,m)=>{const f=r(d);e.api.suggestGene(f,h,m)},getTrackIds:o,getTracksAndViews:a,getTracks:s,getTrack:A,getView:c,getViews:l,getCanvas:u,exportPng:d=>{const{canvas:h}=u({resolution:4,transparentBackground:d});h.toBlob(m=>{const f=document.createElement("a");document.body.append(f),f.download="gosling-visualization",f.href=URL.createObjectURL(m),f.click(),f.remove()},"image/png")},exportPdf:async d=>{const{jsPDF:h}=await S5e(()=>import("./jspdf.es.min-429c6509.js").then(p=>p.j),[]),{canvas:m}=u({resolution:4,transparentBackground:d}),f=m.toDataURL("image/jpeg",1),b=new h({orientation:m.width{l7(I)&&g.forEach(i=>{delete I[i]})})}const $ng=(e,g)=>{e.views.forEach(I=>{var i,n,C;const r=I.uid;if(!g.views.find(a=>a.uid===r)){const{locksByViewUid:a}=e.zoomLocks,s=a[r],A=(i=Object.entries(a).find(([c,u])=>c&&u===s))==null?void 0:i[0],l=!!g.views.find(c=>c.uid===A);A&&l&&(I.initialXDomain=(n=g.views.find(c=>c.uid===A))==null?void 0:n.initialXDomain,I.initialYDomain=(C=g.views.find(c=>c.uid===A))==null?void 0:C.initialYDomain)}})},qng=300,lHe=U.forwardRef((e,g)=>{var I,i,n;const[C,r]=U.useState(),[o,a]=U.useState({width:200,height:200}),s=U.useRef(),A=U.useRef(),l=U.useRef(),c=U.useRef([]),u=U.useRef({}),d=U.useRef(null),h=oHe(e.theme||"light"),m=(I=e.id)!=null?I:ln(),f=Z=>{const B=c.current.filter(R=>R.type=="view"),G=Z.filter(R=>R.type=="view"),v=new Set(B.map(R=>R.id));G.filter(R=>!v.has(R.id)).forEach(R=>{Tr("onNewView",{id:R.id})})};U.useImperativeHandle(g,()=>{const Z=pce(d),B=pce(c);return{api:jng(Z,C,B,h,u.current),hgApi:Z}},[C,h]);const b=U.useCallback(()=>{if(e.spec){if(tgg(e.spec).state==="error"){console.warn("Gosling spec is not valid. Please refer to the console message.");return}Qng(e.spec,(B,G,v,w,R)=>{var S,X;if(l.current&&Sbe(fce(l.current,["linkingId"]),fce(v,["linkingId"])))return;(S=e.compiled)==null||S.call(e,e.spec,B,{_processedSpec:v}),a(G);const W=typeof C<"u";(X=e.experimental)!=null&&X.reactive&&W?setTimeout(()=>{var V,H;$ng(B,(V=d.current)==null?void 0:V.api.getViewConfig()),(H=d.current)==null||H.api.setViewConfig(B)},qng):r(B),f(w),l.current=v,c.current=w,u.current=R},[...ggg],h,{containerSize:s.current,containerParentSize:A.current},e.urlToFetchOptions)}},[e.spec,h]);U.useEffect(()=>{var Z;if(!((Z=e.spec)!=null&&Z.responsiveSize))return;const B=document.getElementById(m);if(!B)return;const G=new Ale.ResizeSensor(B,R=>{(!s.current||s.current.height!==R.height||s.current.width!==R.width)&&(s.current=R,b())}),v=B.parentElement;if(!v)return;const w=new Ale.ResizeSensor(v,R=>{(!A.current||A.current.height!==R.height||A.current.width!==R.width)&&(A.current=R,b())});return()=>{G.detach(),w.detach()}}),U.useEffect(()=>{b()},[e.spec,h]);const p=typeof((i=e.spec)==null?void 0:i.responsiveSize)!="object"?(n=e.spec)==null?void 0:n.responsiveSize:e.spec.responsiveSize.height;return U.useMemo(()=>{var Z,B,G;return N.createElement(sHe,{ref:d,viewConfig:C,size:o,id:m,className:e.className,options:{padding:e.padding,border:e.border,margin:e.margin,responsiveWidth:typeof((Z=e.spec)==null?void 0:Z.responsiveSize)!="object"?(B=e.spec)==null?void 0:B.responsiveSize:e.spec.responsiveSize.width,responsiveHeight:p,background:h.root.background,alt:(G=e.spec)==null?void 0:G.description}})},[C,o,h,p])});lHe.displayName="GoslingComponent";function pce(e){return new Proxy({},{get(g,I,i){if(!e.current)throw Error("ref is not set!");return Reflect.get(e.current,I,i)}})}var bce=jI;bce.createRoot,bce.hydrateRoot;const kv=["x","xe","x1","x1e","y","ye","y1","y1e","color","size","row","stroke","strokeWidth","opacity","text"];function eCg(e){return typeof e=="object"&&e!==null}function tCg(e){return"alignment"in e&&e.alignment==="overlay"}function f_(e){return"_overlay"in e}function gCg(e){return e!==null&&typeof e=="object"&&"value"in e}function p_(e){return eCg(e)&&!("value"in e)}function b_(e,g){return g in e}function yce(e,g){return e[g]}function hr(e){return e=e.filter(g=>g!==void 0),e.length===0?"":e.length===1?e[0]:`${e.slice(0,-1).join(", ")} and ${e.slice(-1)}`}function $p(e){return e[0].toUpperCase()+e.slice(1)}const Yv=new Map([["point","points"],["line","lines"],["bar","bars"],["rect","rectangles"],["area","area displayed"],["withinLink","connections"],["betweenLink","connections"],["triangleLeft","triangles"],["triangleRight","triangles"],["triangleBottom","triangles"],["text","text"],["rule","lines"],["brush","with linked view"]]),Sr=new Map([["y","height"],["color","color"],["strokeWidth","stroke width"],["opacity","opacity"],["text","text"],["size","size"]]);function ICg(e){return e.includes("chr")&&(e=e.replace("chr","")),e}function iCg(e,g){return e.filter(I=>I===g).length}function cHe(e,g){let I;Array.isArray(e.appearance.details.mark)?I=e.appearance.details.mark[g]:I=e.appearance.details.mark;const i=e.appearance.details.encodings.encodingDeepGenomic.map(A=>A.name),n=e.appearance.details.encodings.encodingDeepQuantitative.map(A=>A.name),C=e.appearance.details.encodings.encodingDeepNominal.map(A=>A.name),r=e.appearance.details.encodings.encodingValue.map(A=>A.name),o=[...i,...n,...C,...r],a=e.appearance.details.layout;let s="";return a==="circular"&&(s="circular "),I==="point"&&n.includes("x")&&n.includes("y")?`${s}scatter plot`:I==="line"&&i.includes("x")&&n.includes("y")?`${s}line chart`:I==="line"&&n.includes("x")&&i.includes("y")?`${s}line chart`:I==="bar"&&i.includes("x")&&n.includes("y")?`${s}bar chart`:I==="rect"&&i.includes("x")&&i.includes("xe")&&n.includes("color")?`${s}heat map`:I==="rect"&&i.includes("x")&&i.includes("xe")&&C.includes("color")?`${s}ideogram`:I==="rule"&&o.includes("x")&&o.includes("y")?`${s}chart with horizontal and vertical lines`:I==="rule"&&o.includes("x")?`${s}chart with vertical lines`:I==="rule"&&o.includes("y")?`${s}chart with horizontal lines`:Yv.get(I)?`${s}chart with ${Yv.get(I)}`:"unknown chart"}function nCg(e){const g=[],I=[],i=[],n=["chart with horizontal and vertical lines","circular chart with horizontal and vertical lines","chart with vertical lines","circular chart with vertical lines","chart with horizontal lines","circular chart with horizontal lines"];for(const C of e.tracks)g.push(C.charttype),n.includes(C.charttype)?I.push(C.charttype):i.push(C.charttype);return I.length>0&&i.length>0?i.length==1?`annotated ${i}`:`overlaid ${hr(i)} with annotation`:`overlaid ${hr(g)}`}function CCg(e){const g={};g.tracks={},g.title=e.title,g.subtitle=e.subtitle;const I={nTracks:0,rowViews:0,colViews:0,allPositions:[[0,0]],totalRows:0,totalCols:0,matrix:{},serialView:-1,parallelView:-1,serialCircular:[],parallelCircular:[]},i={};b_(e,"arrangement")&&yce(e,"arrangement")?(i.arrangement=yce(e,"arrangement"),i.arrangement==="serial"?(I.serialView+=1,I.serialCircular.push([])):i.arrangement==="parallel"&&(I.parallelView+=1,I.parallelCircular.push([]))):i.arrangement="vertical",e.layout?i.layout=e.layout:i.layout="linear",uHe(e,g,i,I),lCg(I);const n={description:"",nTracks:I.nTracks,parentValues:i,counter:I};return g.composition=n,g.alt="",g.longDescription="",g}function uHe(e,g,I,i){if("tracks"in e){const n=Zce(e,I);if(e.tracks.length>1)if(tCg(e)){const C=e;g.tracks[i.nTracks]=aCg(C,n,i),i.nTracks>0&&(i.allPositions=[...i.allPositions,[i.rowViews,i.colViews]]),Dx(g,I,i),i.nTracks++}else for(const C in e.tracks){const r=e.tracks[C];g.tracks[i.nTracks]=y_(r,n,i),i.nTracks>0&&(i.allPositions=[...i.allPositions,[i.rowViews,i.colViews]]),Dx(g,I,i),i.nTracks++}else{if(f_(e.tracks[0])){const C=e.tracks[0];g.tracks[i.nTracks]=oCg(C,I,i)}else{const C=e.tracks[0];g.tracks[i.nTracks]=y_(C,I,i)}i.nTracks>0&&(i.allPositions=[...i.allPositions,[i.rowViews,i.colViews]]),Dx(g,I,i),i.nTracks++}}else if("views"in e){const n=i.rowViews,C=i.colViews;e.views.forEach((r,o)=>{o!==0&&(I.arrangement==="vertical"||I.arrangement==="parallel"?i.rowViews++:i.colViews++);const a=Zce(r,I);a.arrangement==="serial"&&I.arrangement!=="serial"&&(i.serialView+=1,i.serialCircular.push([])),a.arrangement==="parallel"&&I.arrangement!=="parallel"&&(i.parallelView+=1,i.parallelCircular.push([])),uHe(r,g,a,i)}),I.arrangement==="vertical"||I.arrangement==="parallel"?i.rowViews=n:i.colViews=C}}function Zce(e,g){const I=JSON.parse(JSON.stringify(g));return b_(e,"arrangement")&&(I.arrangement=e.arrangement),b_(e,"layout")&&(I.layout=e.layout),I}function Dx(e,g,I){e.tracks[I.nTracks].appearance.details.layout=="circular"&&(g.arrangement==="serial"?I.serialCircular[I.serialView].push(I.nTracks):g.arrangement==="parallel"&&I.parallelCircular[I.parallelView].push(I.nTracks))}function y_(e,g,I){const i={};i.alttype="single";let n;e.id!=="unknown"?n=e.id:(n="",console.warn("ID not found?"));const C={trackNumber:I.nTracks,rowNumber:I.rowViews,colNumber:I.colViews},r={};r.assembly=e.assembly,r.layout=g.layout,r.overlaid=!1,r.mark=e.mark,r.encodings=Kv(e),r.linkingId=e.linkingId;const o=hHe(e.data,r.encodings),a={data:e.data,fields:o};e.dataTransform&&(a.transforms=e.dataTransform);const s={description:"",details:C},A={description:"",details:r},l={description:"",details:a};return i.uid=n,i.position=s,i.appearance=A,i.title=e.title,i.data=l,i.charttype=cHe(i),i.description="",i}function dHe(e,g,I,i){let n={...e,...g};return delete n._overlay,delete n.overlayOnPreviousTrack,n=n,y_(n,I,i)}function rCg(e,g,I){const i=[];for(let o=0;o{a!=="text"&&(e._overlay[o][a]?i[o][a]=e._overlay[o][a]:e[a]&&(i[o][a]=e[a]))}),e._overlay[o].dataTransform?i[o].dataTransform=e._overlay[o].dataTransform:e.dataTransform&&(i[o].dataTransform=e.dataTransform);const n={},C={};i.filter(o=>o.mark===void 0).length===0&&[...new Set(i.map(o=>o.mark))].length===1?(n.mark=i[0].mark,i.map(o=>delete o.mark)):C.mark=!0,kv.forEach(o=>{o!=="text"&&(i.filter(a=>a[o]===void 0).length===0&&[...new Set(i.map(a=>a[o]))].length===1?(n[o]=i[0][o],i.map(a=>delete a[o])):C[o]=!0)}),i.filter(o=>o.dataTransform===void 0).length===0&&[...new Set(i.map(o=>o.dataTransform))].length===1?(n.dataTransform=i[0].dataTransform,i.map(o=>delete o.dataTransform)):C.dataTransform=!0,C.mark&&delete e.mark,n.mark&&(e.mark=n.mark),C.dataTransform&&delete e.dataTransform,n.dataTransform&&(e.dataTransform=n.dataTransform),kv.forEach(o=>{o!=="text"&&(C[o]&&delete e[o],n[o]&&(e[o]=n[o]))});const r=[];for(let o=0;o0){for(const f of C){let b,p;f.x&&(p="x",p_(f.x)&&(b=f.x.linkingId)),f.y&&(p="y",p_(f.y)&&(b=f.y.linkingId)),b="temp",p!==void 0&&b!==void 0&&o.push({channel:p,linkingId:b})}if(r.length===1){const f=dHe(e,r[0],g,I);return f.appearance.details.linked=o,f}else e._overlay=r}const[a,s,A]=rCg(e,g,I),l={};if(l.assembly=A[0].appearance.details.assembly,l.layout=A[0].appearance.details.layout,l.overlaid=!0,a.mark){l.mark=a.mark;const f={...a};for(let b=0;b{p!=="text"&&(f[p]||s[b][p]&&(f[p]=s[b][p]))});l.encodings=Kv(f)}else l.markByTrack=A.map(f=>f.appearance.details.mark),l.encodings=Kv(a),l.encodingsByTrack=s.map(f=>Kv(f));C.length>0&&(l.linked=o);const c={};c.alttype="ov-mark";const u=A[0].data.details,d={description:"",details:n},h={description:"",details:l},m={description:"",details:u};return c.uid=i,c.position=d,c.appearance=h,c.title=e.title,c.data=m,c.charttype=A.map(f=>f.charttype),c.description="",c}function aCg(e,g,I){let i=c0e(e);return i=Nbe(i),ACg(e,i,g,I)}function ACg(e,g,I,i){const n={};n.alttype="ov-data";const C={trackNumber:i.nTracks,rowNumber:i.rowViews,colNumber:i.colViews},r=[],o=[];for(let A of g){if(f_(A)){let u;f_(A._overlay[0])?u={...A,...A._overlay[0]._overlay[0]}:u={...A,...A._overlay[0]},delete u._overlay,delete u.overlayOnPreviousTrack,A=u}const l=A;let c;l.id!=="unknown"?c=l.id:c="",r.push(c),o.push(sCg(l,I))}n.tracks=o,n.uids=r;const a={description:"",details:C};n.position=a,n.title=e.title;const s=nCg(n);return n.appearance={description:"",details:{layout:"linear",charttype:s}},n.description="",n}function sCg(e,g,I){const i={};i.alttype="ov-data-ind";let n;e.id!=="unknown"?n=e.id:n="",i.uid=n;const C={};C.assembly=e.assembly,C.layout=g.layout,C.overlaid=!1,C.mark=e.mark,C.encodings=Kv(e);const r=hHe(e.data,C.encodings),o={data:e.data,fields:r},a={description:"",details:C},s={description:"",details:o};return i.appearance=a,i.data=s,i.charttype=cHe(i),i.description="",i}function hHe(e,g){const I={};return g.encodingDeepGenomic.length>0&&(g.encodingDeepGenomic[0].details.field?I.genomicField=g.encodingDeepGenomic[0].details.field:I.genomicField),g.encodingDeepQuantitative.length>0&&(g.encodingDeepQuantitative[0].details.field?I.valueField=g.encodingDeepQuantitative[0].details.field:I.valueField),g.encodingDeepNominal.length>0&&(g.encodingDeepNominal[0].details.field?I.categoryField=g.encodingDeepNominal[0].details.field:I.categoryField),I}function Kv(e){const g=[],I=[],i=[],n=[];return kv.forEach(r=>{const o=e[r];p_(o)?o.type==="genomic"?g.push({name:r,description:"",details:o}):o.type==="quantitative"?I.push({name:r,description:"",details:o}):i.push({name:r,description:"",details:o}):gCg(o)&&n.push({name:r,description:"",details:o})}),{encodingDeepGenomic:g,encodingDeepQuantitative:I,encodingDeepNominal:i,encodingValue:n}}function lCg(e){e.totalRows=Math.max(...e.allPositions.map(I=>I[0]))+1,e.totalCols=Math.max(...e.allPositions.map(I=>I[1]))+1;const g={};for(let I=0;IC[0]===I).map(C=>C[1]),n={};for(const C of i)n[C]?n[C]=n[C]+1:n[C]=1;g[I]=n}e.matrix=g}var o8={};Object.defineProperty(o8,"__esModule",{value:!0});var mHe=o8.GetColorName=void 0;mHe=o8.GetColorName=function(e){var g=new cCg,I=g.name(e);I[0];var i=I[1];return i};var cCg=function(){function e(){this.names=[["000000","Black"],["000080","Navy Blue"],["0000C8","Dark Blue"],["0000FF","Blue"],["000741","Stratos"],["001B1C","Swamp"],["002387","Resolution Blue"],["002900","Deep Fir"],["002E20","Burnham"],["002FA7","International Klein Blue"],["003153","Prussian Blue"],["003366","Midnight Blue"],["003399","Smalt"],["003532","Deep Teal"],["003E40","Cyprus"],["004620","Kaitoke Green"],["0047AB","Cobalt"],["004816","Crusoe"],["004950","Sherpa Blue"],["0056A7","Endeavour"],["00581A","Camarone"],["0066CC","Science Blue"],["0066FF","Blue Ribbon"],["00755E","Tropical Rain Forest"],["0076A3","Allports"],["007BA7","Deep Cerulean"],["007EC7","Lochmara"],["007FFF","Azure Radiance"],["008080","Teal"],["0095B6","Bondi Blue"],["009DC4","Pacific Blue"],["00A693","Persian Green"],["00A86B","Jade"],["00CC99","Caribbean Green"],["00CCCC","Robin's Egg Blue"],["00FF00","Green"],["00FF7F","Spring Green"],["00FFFF","Cyan / Aqua"],["010D1A","Blue Charcoal"],["011635","Midnight"],["011D13","Holly"],["012731","Daintree"],["01361C","Cardin Green"],["01371A","County Green"],["013E62","Astronaut Blue"],["013F6A","Regal Blue"],["014B43","Aqua Deep"],["015E85","Orient"],["016162","Blue Stone"],["016D39","Fun Green"],["01796F","Pine Green"],["017987","Blue Lagoon"],["01826B","Deep Sea"],["01A368","Green Haze"],["022D15","English Holly"],["02402C","Sherwood Green"],["02478E","Congress Blue"],["024E46","Evening Sea"],["026395","Bahama Blue"],["02866F","Observatory"],["02A4D3","Cerulean"],["03163C","Tangaroa"],["032B52","Green Vogue"],["036A6E","Mosque"],["041004","Midnight Moss"],["041322","Black Pearl"],["042E4C","Blue Whale"],["044022","Zuccini"],["044259","Teal Blue"],["051040","Deep Cove"],["051657","Gulf Blue"],["055989","Venice Blue"],["056F57","Watercourse"],["062A78","Catalina Blue"],["063537","Tiber"],["069B81","Gossamer"],["06A189","Niagara"],["073A50","Tarawera"],["080110","Jaguar"],["081910","Black Bean"],["082567","Deep Sapphire"],["088370","Elf Green"],["08E8DE","Bright Turquoise"],["092256","Downriver"],["09230F","Palm Green"],["09255D","Madison"],["093624","Bottle Green"],["095859","Deep Sea Green"],["097F4B","Salem"],["0A001C","Black Russian"],["0A480D","Dark Fern"],["0A6906","Japanese Laurel"],["0A6F75","Atoll"],["0B0B0B","Cod Gray"],["0B0F08","Marshland"],["0B1107","Gordons Green"],["0B1304","Black Forest"],["0B6207","San Felix"],["0BDA51","Malachite"],["0C0B1D","Ebony"],["0C0D0F","Woodsmoke"],["0C1911","Racing Green"],["0C7A79","Surfie Green"],["0C8990","Blue Chill"],["0D0332","Black Rock"],["0D1117","Bunker"],["0D1C19","Aztec"],["0D2E1C","Bush"],["0E0E18","Cinder"],["0E2A30","Firefly"],["0F2D9E","Torea Bay"],["10121D","Vulcan"],["101405","Green Waterloo"],["105852","Eden"],["110C6C","Arapawa"],["120A8F","Ultramarine"],["123447","Elephant"],["126B40","Jewel"],["130000","Diesel"],["130A06","Asphalt"],["13264D","Blue Zodiac"],["134F19","Parsley"],["140600","Nero"],["1450AA","Tory Blue"],["151F4C","Bunting"],["1560BD","Denim"],["15736B","Genoa"],["161928","Mirage"],["161D10","Hunter Green"],["162A40","Big Stone"],["163222","Celtic"],["16322C","Timber Green"],["163531","Gable Green"],["171F04","Pine Tree"],["175579","Chathams Blue"],["182D09","Deep Forest Green"],["18587A","Blumine"],["19330E","Palm Leaf"],["193751","Nile Blue"],["1959A8","Fun Blue"],["1A1A68","Lucky Point"],["1AB385","Mountain Meadow"],["1B0245","Tolopea"],["1B1035","Haiti"],["1B127B","Deep Koamaru"],["1B1404","Acadia"],["1B2F11","Seaweed"],["1B3162","Biscay"],["1B659D","Matisse"],["1C1208","Crowshead"],["1C1E13","Rangoon Green"],["1C39BB","Persian Blue"],["1C402E","Everglade"],["1C7C7D","Elm"],["1D6142","Green Pea"],["1E0F04","Creole"],["1E1609","Karaka"],["1E1708","El Paso"],["1E385B","Cello"],["1E433C","Te Papa Green"],["1E90FF","Dodger Blue"],["1E9AB0","Eastern Blue"],["1F120F","Night Rider"],["1FC2C2","Java"],["20208D","Jacksons Purple"],["202E54","Cloud Burst"],["204852","Blue Dianne"],["211A0E","Eternity"],["220878","Deep Blue"],["228B22","Forest Green"],["233418","Mallard"],["240A40","Violet"],["240C02","Kilamanjaro"],["242A1D","Log Cabin"],["242E16","Black Olive"],["24500F","Green House"],["251607","Graphite"],["251706","Cannon Black"],["251F4F","Port Gore"],["25272C","Shark"],["25311C","Green Kelp"],["2596D1","Curious Blue"],["260368","Paua"],["26056A","Paris M"],["261105","Wood Bark"],["261414","Gondola"],["262335","Steel Gray"],["26283B","Ebony Clay"],["273A81","Bay of Many"],["27504B","Plantation"],["278A5B","Eucalyptus"],["281E15","Oil"],["283A77","Astronaut"],["286ACD","Mariner"],["290C5E","Violent Violet"],["292130","Bastille"],["292319","Zeus"],["292937","Charade"],["297B9A","Jelly Bean"],["29AB87","Jungle Green"],["2A0359","Cherry Pie"],["2A140E","Coffee Bean"],["2A2630","Baltic Sea"],["2A380B","Turtle Green"],["2A52BE","Cerulean Blue"],["2B0202","Sepia Black"],["2B194F","Valhalla"],["2B3228","Heavy Metal"],["2C0E8C","Blue Gem"],["2C1632","Revolver"],["2C2133","Bleached Cedar"],["2C8C84","Lochinvar"],["2D2510","Mikado"],["2D383A","Outer Space"],["2D569B","St Tropaz"],["2E0329","Jacaranda"],["2E1905","Jacko Bean"],["2E3222","Rangitoto"],["2E3F62","Rhino"],["2E8B57","Sea Green"],["2EBFD4","Scooter"],["2F270E","Onion"],["2F3CB3","Governor Bay"],["2F519E","Sapphire"],["2F5A57","Spectra"],["2F6168","Casal"],["300529","Melanzane"],["301F1E","Cocoa Brown"],["302A0F","Woodrush"],["304B6A","San Juan"],["30D5C8","Turquoise"],["311C17","Eclipse"],["314459","Pickled Bluewood"],["315BA1","Azure"],["31728D","Calypso"],["317D82","Paradiso"],["32127A","Persian Indigo"],["32293A","Blackcurrant"],["323232","Mine Shaft"],["325D52","Stromboli"],["327C14","Bilbao"],["327DA0","Astral"],["33036B","Christalle"],["33292F","Thunder"],["33CC99","Shamrock"],["341515","Tamarind"],["350036","Mardi Gras"],["350E42","Valentino"],["350E57","Jagger"],["353542","Tuna"],["354E8C","Chambray"],["363050","Martinique"],["363534","Tuatara"],["363C0D","Waiouru"],["36747D","Ming"],["368716","La Palma"],["370202","Chocolate"],["371D09","Clinker"],["37290E","Brown Tumbleweed"],["373021","Birch"],["377475","Oracle"],["380474","Blue Diamond"],["381A51","Grape"],["383533","Dune"],["384555","Oxford Blue"],["384910","Clover"],["394851","Limed Spruce"],["396413","Dell"],["3A0020","Toledo"],["3A2010","Sambuca"],["3A2A6A","Jacarta"],["3A686C","William"],["3A6A47","Killarney"],["3AB09E","Keppel"],["3B000B","Temptress"],["3B0910","Aubergine"],["3B1F1F","Jon"],["3B2820","Treehouse"],["3B7A57","Amazon"],["3B91B4","Boston Blue"],["3C0878","Windsor"],["3C1206","Rebel"],["3C1F76","Meteorite"],["3C2005","Dark Ebony"],["3C3910","Camouflage"],["3C4151","Bright Gray"],["3C4443","Cape Cod"],["3C493A","Lunar Green"],["3D0C02","Bean "],["3D2B1F","Bistre"],["3D7D52","Goblin"],["3E0480","Kingfisher Daisy"],["3E1C14","Cedar"],["3E2B23","English Walnut"],["3E2C1C","Black Marlin"],["3E3A44","Ship Gray"],["3EABBF","Pelorous"],["3F2109","Bronze"],["3F2500","Cola"],["3F3002","Madras"],["3F307F","Minsk"],["3F4C3A","Cabbage Pont"],["3F583B","Tom Thumb"],["3F5D53","Mineral Green"],["3FC1AA","Puerto Rico"],["3FFF00","Harlequin"],["401801","Brown Pod"],["40291D","Cork"],["403B38","Masala"],["403D19","Thatch Green"],["405169","Fiord"],["40826D","Viridian"],["40A860","Chateau Green"],["410056","Ripe Plum"],["411F10","Paco"],["412010","Deep Oak"],["413C37","Merlin"],["414257","Gun Powder"],["414C7D","East Bay"],["4169E1","Royal Blue"],["41AA78","Ocean Green"],["420303","Burnt Maroon"],["423921","Lisbon Brown"],["427977","Faded Jade"],["431560","Scarlet Gum"],["433120","Iroko"],["433E37","Armadillo"],["434C59","River Bed"],["436A0D","Green Leaf"],["44012D","Barossa"],["441D00","Morocco Brown"],["444954","Mako"],["454936","Kelp"],["456CAC","San Marino"],["45B1E8","Picton Blue"],["460B41","Loulou"],["462425","Crater Brown"],["465945","Gray Asparagus"],["4682B4","Steel Blue"],["480404","Rustic Red"],["480607","Bulgarian Rose"],["480656","Clairvoyant"],["481C1C","Cocoa Bean"],["483131","Woody Brown"],["483C32","Taupe"],["49170C","Van Cleef"],["492615","Brown Derby"],["49371B","Metallic Bronze"],["495400","Verdun Green"],["496679","Blue Bayoux"],["497183","Bismark"],["4A2A04","Bracken"],["4A3004","Deep Bronze"],["4A3C30","Mondo"],["4A4244","Tundora"],["4A444B","Gravel"],["4A4E5A","Trout"],["4B0082","Pigment Indigo"],["4B5D52","Nandor"],["4C3024","Saddle"],["4C4F56","Abbey"],["4D0135","Blackberry"],["4D0A18","Cab Sav"],["4D1E01","Indian Tan"],["4D282D","Cowboy"],["4D282E","Livid Brown"],["4D3833","Rock"],["4D3D14","Punga"],["4D400F","Bronzetone"],["4D5328","Woodland"],["4E0606","Mahogany"],["4E2A5A","Bossanova"],["4E3B41","Matterhorn"],["4E420C","Bronze Olive"],["4E4562","Mulled Wine"],["4E6649","Axolotl"],["4E7F9E","Wedgewood"],["4EABD1","Shakespeare"],["4F1C70","Honey Flower"],["4F2398","Daisy Bush"],["4F69C6","Indigo"],["4F7942","Fern Green"],["4F9D5D","Fruit Salad"],["4FA83D","Apple"],["504351","Mortar"],["507096","Kashmir Blue"],["507672","Cutty Sark"],["50C878","Emerald"],["514649","Emperor"],["516E3D","Chalet Green"],["517C66","Como"],["51808F","Smalt Blue"],["52001F","Castro"],["520C17","Maroon Oak"],["523C94","Gigas"],["533455","Voodoo"],["534491","Victoria"],["53824B","Hippie Green"],["541012","Heath"],["544333","Judge Gray"],["54534D","Fuscous Gray"],["549019","Vida Loca"],["55280C","Cioccolato"],["555B10","Saratoga"],["556D56","Finlandia"],["5590D9","Havelock Blue"],["56B4BE","Fountain Blue"],["578363","Spring Leaves"],["583401","Saddle Brown"],["585562","Scarpa Flow"],["587156","Cactus"],["589AAF","Hippie Blue"],["591D35","Wine Berry"],["592804","Brown Bramble"],["593737","Congo Brown"],["594433","Millbrook"],["5A6E9C","Waikawa Gray"],["5A87A0","Horizon"],["5B3013","Jambalaya"],["5C0120","Bordeaux"],["5C0536","Mulberry Wood"],["5C2E01","Carnaby Tan"],["5C5D75","Comet"],["5D1E0F","Redwood"],["5D4C51","Don Juan"],["5D5C58","Chicago"],["5D5E37","Verdigris"],["5D7747","Dingley"],["5DA19F","Breaker Bay"],["5E483E","Kabul"],["5E5D3B","Hemlock"],["5F3D26","Irish Coffee"],["5F5F6E","Mid Gray"],["5F6672","Shuttle Gray"],["5FA777","Aqua Forest"],["5FB3AC","Tradewind"],["604913","Horses Neck"],["605B73","Smoky"],["606E68","Corduroy"],["6093D1","Danube"],["612718","Espresso"],["614051","Eggplant"],["615D30","Costa Del Sol"],["61845F","Glade Green"],["622F30","Buccaneer"],["623F2D","Quincy"],["624E9A","Butterfly Bush"],["625119","West Coast"],["626649","Finch"],["639A8F","Patina"],["63B76C","Fern"],["6456B7","Blue Violet"],["646077","Dolphin"],["646463","Storm Dust"],["646A54","Siam"],["646E75","Nevada"],["6495ED","Cornflower Blue"],["64CCDB","Viking"],["65000B","Rosewood"],["651A14","Cherrywood"],["652DC1","Purple Heart"],["657220","Fern Frond"],["65745D","Willow Grove"],["65869F","Hoki"],["660045","Pompadour"],["660099","Purple"],["66023C","Tyrian Purple"],["661010","Dark Tan"],["66B58F","Silver Tree"],["66FF00","Bright Green"],["66FF66","Screamin' Green"],["67032D","Black Rose"],["675FA6","Scampi"],["676662","Ironside Gray"],["678975","Viridian Green"],["67A712","Christi"],["683600","Nutmeg Wood Finish"],["685558","Zambezi"],["685E6E","Salt Box"],["692545","Tawny Port"],["692D54","Finn"],["695F62","Scorpion"],["697E9A","Lynch"],["6A442E","Spice"],["6A5D1B","Himalaya"],["6A6051","Soya Bean"],["6B2A14","Hairy Heath"],["6B3FA0","Royal Purple"],["6B4E31","Shingle Fawn"],["6B5755","Dorado"],["6B8BA2","Bermuda Gray"],["6B8E23","Olive Drab"],["6C3082","Eminence"],["6CDAE7","Turquoise Blue"],["6D0101","Lonestar"],["6D5E54","Pine Cone"],["6D6C6C","Dove Gray"],["6D9292","Juniper"],["6D92A1","Gothic"],["6E0902","Red Oxide"],["6E1D14","Moccaccino"],["6E4826","Pickled Bean"],["6E4B26","Dallas"],["6E6D57","Kokoda"],["6E7783","Pale Sky"],["6F440C","Cafe Royale"],["6F6A61","Flint"],["6F8E63","Highland"],["6F9D02","Limeade"],["6FD0C5","Downy"],["701C1C","Persian Plum"],["704214","Sepia"],["704A07","Antique Bronze"],["704F50","Ferra"],["706555","Coffee"],["708090","Slate Gray"],["711A00","Cedar Wood Finish"],["71291D","Metallic Copper"],["714693","Affair"],["714AB2","Studio"],["715D47","Tobacco Brown"],["716338","Yellow Metal"],["716B56","Peat"],["716E10","Olivetone"],["717486","Storm Gray"],["718080","Sirocco"],["71D9E2","Aquamarine Blue"],["72010F","Venetian Red"],["724A2F","Old Copper"],["726D4E","Go Ben"],["727B89","Raven"],["731E8F","Seance"],["734A12","Raw Umber"],["736C9F","Kimberly"],["736D58","Crocodile"],["737829","Crete"],["738678","Xanadu"],["74640D","Spicy Mustard"],["747D63","Limed Ash"],["747D83","Rolling Stone"],["748881","Blue Smoke"],["749378","Laurel"],["74C365","Mantis"],["755A57","Russett"],["7563A8","Deluge"],["76395D","Cosmic"],["7666C6","Blue Marguerite"],["76BD17","Lima"],["76D7EA","Sky Blue"],["770F05","Dark Burgundy"],["771F1F","Crown of Thorns"],["773F1A","Walnut"],["776F61","Pablo"],["778120","Pacifika"],["779E86","Oxley"],["77DD77","Pastel Green"],["780109","Japanese Maple"],["782D19","Mocha"],["782F16","Peanut"],["78866B","Camouflage Green"],["788A25","Wasabi"],["788BBA","Ship Cove"],["78A39C","Sea Nymph"],["795D4C","Roman Coffee"],["796878","Old Lavender"],["796989","Rum"],["796A78","Fedora"],["796D62","Sandstone"],["79DEEC","Spray"],["7A013A","Siren"],["7A58C1","Fuchsia Blue"],["7A7A7A","Boulder"],["7A89B8","Wild Blue Yonder"],["7AC488","De York"],["7B3801","Red Beech"],["7B3F00","Cinnamon"],["7B6608","Yukon Gold"],["7B7874","Tapa"],["7B7C94","Waterloo "],["7B8265","Flax Smoke"],["7B9F80","Amulet"],["7BA05B","Asparagus"],["7C1C05","Kenyan Copper"],["7C7631","Pesto"],["7C778A","Topaz"],["7C7B7A","Concord"],["7C7B82","Jumbo"],["7C881A","Trendy Green"],["7CA1A6","Gumbo"],["7CB0A1","Acapulco"],["7CB7BB","Neptune"],["7D2C14","Pueblo"],["7DA98D","Bay Leaf"],["7DC8F7","Malibu"],["7DD8C6","Bermuda"],["7E3A15","Copper Canyon"],["7F1734","Claret"],["7F3A02","Peru Tan"],["7F626D","Falcon"],["7F7589","Mobster"],["7F76D3","Moody Blue"],["7FFF00","Chartreuse"],["7FFFD4","Aquamarine"],["800000","Maroon"],["800B47","Rose Bud Cherry"],["801818","Falu Red"],["80341F","Red Robin"],["803790","Vivid Violet"],["80461B","Russet"],["807E79","Friar Gray"],["808000","Olive"],["808080","Gray"],["80B3AE","Gulf Stream"],["80B3C4","Glacier"],["80CCEA","Seagull"],["81422C","Nutmeg"],["816E71","Spicy Pink"],["817377","Empress"],["819885","Spanish Green"],["826F65","Sand Dune"],["828685","Gunsmoke"],["828F72","Battleship Gray"],["831923","Merlot"],["837050","Shadow"],["83AA5D","Chelsea Cucumber"],["83D0C6","Monte Carlo"],["843179","Plum"],["84A0A0","Granny Smith"],["8581D9","Chetwode Blue"],["858470","Bandicoot"],["859FAF","Bali Hai"],["85C4CC","Half Baked"],["860111","Red Devil"],["863C3C","Lotus"],["86483C","Ironstone"],["864D1E","Bull Shot"],["86560A","Rusty Nail"],["868974","Bitter"],["86949F","Regent Gray"],["871550","Disco"],["87756E","Americano"],["877C7B","Hurricane"],["878D91","Oslo Gray"],["87AB39","Sushi"],["885342","Spicy Mix"],["886221","Kumera"],["888387","Suva Gray"],["888D65","Avocado"],["893456","Camelot"],["893843","Solid Pink"],["894367","Cannon Pink"],["897D6D","Makara"],["8A3324","Burnt Umber"],["8A73D6","True V"],["8A8360","Clay Creek"],["8A8389","Monsoon"],["8A8F8A","Stack"],["8AB9F1","Jordy Blue"],["8B00FF","Electric Violet"],["8B0723","Monarch"],["8B6B0B","Corn Harvest"],["8B8470","Olive Haze"],["8B847E","Schooner"],["8B8680","Natural Gray"],["8B9C90","Mantle"],["8B9FEE","Portage"],["8BA690","Envy"],["8BA9A5","Cascade"],["8BE6D8","Riptide"],["8C055E","Cardinal Pink"],["8C472F","Mule Fawn"],["8C5738","Potters Clay"],["8C6495","Trendy Pink"],["8D0226","Paprika"],["8D3D38","Sanguine Brown"],["8D3F3F","Tosca"],["8D7662","Cement"],["8D8974","Granite Green"],["8D90A1","Manatee"],["8DA8CC","Polo Blue"],["8E0000","Red Berry"],["8E4D1E","Rope"],["8E6F70","Opium"],["8E775E","Domino"],["8E8190","Mamba"],["8EABC1","Nepal"],["8F021C","Pohutukawa"],["8F3E33","El Salva"],["8F4B0E","Korma"],["8F8176","Squirrel"],["8FD6B4","Vista Blue"],["900020","Burgundy"],["901E1E","Old Brick"],["907874","Hemp"],["907B71","Almond Frost"],["908D39","Sycamore"],["92000A","Sangria"],["924321","Cumin"],["926F5B","Beaver"],["928573","Stonewall"],["928590","Venus"],["9370DB","Medium Purple"],["93CCEA","Cornflower"],["93DFB8","Algae Green"],["944747","Copper Rust"],["948771","Arrowtown"],["950015","Scarlett"],["956387","Strikemaster"],["959396","Mountain Mist"],["960018","Carmine"],["964B00","Brown"],["967059","Leather"],["9678B6","Purple Mountain's Majesty"],["967BB6","Lavender Purple"],["96A8A1","Pewter"],["96BBAB","Summer Green"],["97605D","Au Chico"],["9771B5","Wisteria"],["97CD2D","Atlantis"],["983D61","Vin Rouge"],["9874D3","Lilac Bush"],["98777B","Bazaar"],["98811B","Hacienda"],["988D77","Pale Oyster"],["98FF98","Mint Green"],["990066","Fresh Eggplant"],["991199","Violet Eggplant"],["991613","Tamarillo"],["991B07","Totem Pole"],["996666","Copper Rose"],["9966CC","Amethyst"],["997A8D","Mountbatten Pink"],["9999CC","Blue Bell"],["9A3820","Prairie Sand"],["9A6E61","Toast"],["9A9577","Gurkha"],["9AB973","Olivine"],["9AC2B8","Shadow Green"],["9B4703","Oregon"],["9B9E8F","Lemon Grass"],["9C3336","Stiletto"],["9D5616","Hawaiian Tan"],["9DACB7","Gull Gray"],["9DC209","Pistachio"],["9DE093","Granny Smith Apple"],["9DE5FF","Anakiwa"],["9E5302","Chelsea Gem"],["9E5B40","Sepia Skin"],["9EA587","Sage"],["9EA91F","Citron"],["9EB1CD","Rock Blue"],["9EDEE0","Morning Glory"],["9F381D","Cognac"],["9F821C","Reef Gold"],["9F9F9C","Star Dust"],["9FA0B1","Santas Gray"],["9FD7D3","Sinbad"],["9FDD8C","Feijoa"],["A02712","Tabasco"],["A1750D","Buttered Rum"],["A1ADB5","Hit Gray"],["A1C50A","Citrus"],["A1DAD7","Aqua Island"],["A1E9DE","Water Leaf"],["A2006D","Flirt"],["A23B6C","Rouge"],["A26645","Cape Palliser"],["A2AAB3","Gray Chateau"],["A2AEAB","Edward"],["A3807B","Pharlap"],["A397B4","Amethyst Smoke"],["A3E3ED","Blizzard Blue"],["A4A49D","Delta"],["A4A6D3","Wistful"],["A4AF6E","Green Smoke"],["A50B5E","Jazzberry Jam"],["A59B91","Zorba"],["A5CB0C","Bahia"],["A62F20","Roof Terracotta"],["A65529","Paarl"],["A68B5B","Barley Corn"],["A69279","Donkey Brown"],["A6A29A","Dawn"],["A72525","Mexican Red"],["A7882C","Luxor Gold"],["A85307","Rich Gold"],["A86515","Reno Sand"],["A86B6B","Coral Tree"],["A8989B","Dusty Gray"],["A899E6","Dull Lavender"],["A8A589","Tallow"],["A8AE9C","Bud"],["A8AF8E","Locust"],["A8BD9F","Norway"],["A8E3BD","Chinook"],["A9A491","Gray Olive"],["A9ACB6","Aluminium"],["A9B2C3","Cadet Blue"],["A9B497","Schist"],["A9BDBF","Tower Gray"],["A9BEF2","Perano"],["A9C6C2","Opal"],["AA375A","Night Shadz"],["AA4203","Fire"],["AA8B5B","Muesli"],["AA8D6F","Sandal"],["AAA5A9","Shady Lady"],["AAA9CD","Logan"],["AAABB7","Spun Pearl"],["AAD6E6","Regent St Blue"],["AAF0D1","Magic Mint"],["AB0563","Lipstick"],["AB3472","Royal Heath"],["AB917A","Sandrift"],["ABA0D9","Cold Purple"],["ABA196","Bronco"],["AC8A56","Limed Oak"],["AC91CE","East Side"],["AC9E22","Lemon Ginger"],["ACA494","Napa"],["ACA586","Hillary"],["ACA59F","Cloudy"],["ACACAC","Silver Chalice"],["ACB78E","Swamp Green"],["ACCBB1","Spring Rain"],["ACDD4D","Conifer"],["ACE1AF","Celadon"],["AD781B","Mandalay"],["ADBED1","Casper"],["ADDFAD","Moss Green"],["ADE6C4","Padua"],["ADFF2F","Green Yellow"],["AE4560","Hippie Pink"],["AE6020","Desert"],["AE809E","Bouquet"],["AF4035","Medium Carmine"],["AF4D43","Apple Blossom"],["AF593E","Brown Rust"],["AF8751","Driftwood"],["AF8F2C","Alpine"],["AF9F1C","Lucky"],["AFA09E","Martini"],["AFB1B8","Bombay"],["AFBDD9","Pigeon Post"],["B04C6A","Cadillac"],["B05D54","Matrix"],["B05E81","Tapestry"],["B06608","Mai Tai"],["B09A95","Del Rio"],["B0E0E6","Powder Blue"],["B0E313","Inch Worm"],["B10000","Bright Red"],["B14A0B","Vesuvius"],["B1610B","Pumpkin Skin"],["B16D52","Santa Fe"],["B19461","Teak"],["B1E2C1","Fringy Flower"],["B1F4E7","Ice Cold"],["B20931","Shiraz"],["B2A1EA","Biloba Flower"],["B32D29","Tall Poppy"],["B35213","Fiery Orange"],["B38007","Hot Toddy"],["B3AF95","Taupe Gray"],["B3C110","La Rioja"],["B43332","Well Read"],["B44668","Blush"],["B4CFD3","Jungle Mist"],["B57281","Turkish Rose"],["B57EDC","Lavender"],["B5A27F","Mongoose"],["B5B35C","Olive Green"],["B5D2CE","Jet Stream"],["B5ECDF","Cruise"],["B6316C","Hibiscus"],["B69D98","Thatch"],["B6B095","Heathered Gray"],["B6BAA4","Eagle"],["B6D1EA","Spindle"],["B6D3BF","Gum Leaf"],["B7410E","Rust"],["B78E5C","Muddy Waters"],["B7A214","Sahara"],["B7A458","Husk"],["B7B1B1","Nobel"],["B7C3D0","Heather"],["B7F0BE","Madang"],["B81104","Milano Red"],["B87333","Copper"],["B8B56A","Gimblet"],["B8C1B1","Green Spring"],["B8C25D","Celery"],["B8E0F9","Sail"],["B94E48","Chestnut"],["B95140","Crail"],["B98D28","Marigold"],["B9C46A","Wild Willow"],["B9C8AC","Rainee"],["BA0101","Guardsman Red"],["BA450C","Rock Spray"],["BA6F1E","Bourbon"],["BA7F03","Pirate Gold"],["BAB1A2","Nomad"],["BAC7C9","Submarine"],["BAEEF9","Charlotte"],["BB3385","Medium Red Violet"],["BB8983","Brandy Rose"],["BBD009","Rio Grande"],["BBD7C1","Surf"],["BCC9C2","Powder Ash"],["BD5E2E","Tuscany"],["BD978E","Quicksand"],["BDB1A8","Silk"],["BDB2A1","Malta"],["BDB3C7","Chatelle"],["BDBBD7","Lavender Gray"],["BDBDC6","French Gray"],["BDC8B3","Clay Ash"],["BDC9CE","Loblolly"],["BDEDFD","French Pass"],["BEA6C3","London Hue"],["BEB5B7","Pink Swan"],["BEDE0D","Fuego"],["BF5500","Rose of Sharon"],["BFB8B0","Tide"],["BFBED8","Blue Haze"],["BFC1C2","Silver Sand"],["BFC921","Key Lime Pie"],["BFDBE2","Ziggurat"],["BFFF00","Lime"],["C02B18","Thunderbird"],["C04737","Mojo"],["C08081","Old Rose"],["C0C0C0","Silver"],["C0D3B9","Pale Leaf"],["C0D8B6","Pixie Green"],["C1440E","Tia Maria"],["C154C1","Fuchsia Pink"],["C1A004","Buddha Gold"],["C1B7A4","Bison Hide"],["C1BAB0","Tea"],["C1BECD","Gray Suit"],["C1D7B0","Sprout"],["C1F07C","Sulu"],["C26B03","Indochine"],["C2955D","Twine"],["C2BDB6","Cotton Seed"],["C2CAC4","Pumice"],["C2E8E5","Jagged Ice"],["C32148","Maroon Flush"],["C3B091","Indian Khaki"],["C3BFC1","Pale Slate"],["C3C3BD","Gray Nickel"],["C3CDE6","Periwinkle Gray"],["C3D1D1","Tiara"],["C3DDF9","Tropical Blue"],["C41E3A","Cardinal"],["C45655","Fuzzy Wuzzy Brown"],["C45719","Orange Roughy"],["C4C4BC","Mist Gray"],["C4D0B0","Coriander"],["C4F4EB","Mint Tulip"],["C54B8C","Mulberry"],["C59922","Nugget"],["C5994B","Tussock"],["C5DBCA","Sea Mist"],["C5E17A","Yellow Green"],["C62D42","Brick Red"],["C6726B","Contessa"],["C69191","Oriental Pink"],["C6A84B","Roti"],["C6C3B5","Ash"],["C6C8BD","Kangaroo"],["C6E610","Las Palmas"],["C7031E","Monza"],["C71585","Red Violet"],["C7BCA2","Coral Reef"],["C7C1FF","Melrose"],["C7C4BF","Cloud"],["C7C9D5","Ghost"],["C7CD90","Pine Glade"],["C7DDE5","Botticelli"],["C88A65","Antique Brass"],["C8A2C8","Lilac"],["C8A528","Hokey Pokey"],["C8AABF","Lily"],["C8B568","Laser"],["C8E3D7","Edgewater"],["C96323","Piper"],["C99415","Pizza"],["C9A0DC","Light Wisteria"],["C9B29B","Rodeo Dust"],["C9B35B","Sundance"],["C9B93B","Earls Green"],["C9C0BB","Silver Rust"],["C9D9D2","Conch"],["C9FFA2","Reef"],["C9FFE5","Aero Blue"],["CA3435","Flush Mahogany"],["CABB48","Turmeric"],["CADCD4","Paris White"],["CAE00D","Bitter Lemon"],["CAE6DA","Skeptic"],["CB8FA9","Viola"],["CBCAB6","Foggy Gray"],["CBD3B0","Green Mist"],["CBDBD6","Nebula"],["CC3333","Persian Red"],["CC5500","Burnt Orange"],["CC7722","Ochre"],["CC8899","Puce"],["CCCAA8","Thistle Green"],["CCCCFF","Periwinkle"],["CCFF00","Electric Lime"],["CD5700","Tenn"],["CD5C5C","Chestnut Rose"],["CD8429","Brandy Punch"],["CDF4FF","Onahau"],["CEB98F","Sorrell Brown"],["CEBABA","Cold Turkey"],["CEC291","Yuma"],["CEC7A7","Chino"],["CFA39D","Eunry"],["CFB53B","Old Gold"],["CFDCCF","Tasman"],["CFE5D2","Surf Crest"],["CFF9F3","Humming Bird"],["CFFAF4","Scandal"],["D05F04","Red Stage"],["D06DA1","Hopbush"],["D07D12","Meteor"],["D0BEF8","Perfume"],["D0C0E5","Prelude"],["D0F0C0","Tea Green"],["D18F1B","Geebung"],["D1BEA8","Vanilla"],["D1C6B4","Soft Amber"],["D1D2CA","Celeste"],["D1D2DD","Mischka"],["D1E231","Pear"],["D2691E","Hot Cinnamon"],["D27D46","Raw Sienna"],["D29EAA","Careys Pink"],["D2B48C","Tan"],["D2DA97","Deco"],["D2F6DE","Blue Romance"],["D2F8B0","Gossip"],["D3CBBA","Sisal"],["D3CDC5","Swirl"],["D47494","Charm"],["D4B6AF","Clam Shell"],["D4BF8D","Straw"],["D4C4A8","Akaroa"],["D4CD16","Bird Flower"],["D4D7D9","Iron"],["D4DFE2","Geyser"],["D4E2FC","Hawkes Blue"],["D54600","Grenadier"],["D591A4","Can Can"],["D59A6F","Whiskey"],["D5D195","Winter Hazel"],["D5F6E3","Granny Apple"],["D69188","My Pink"],["D6C562","Tacha"],["D6CEF6","Moon Raker"],["D6D6D1","Quill Gray"],["D6FFDB","Snowy Mint"],["D7837F","New York Pink"],["D7C498","Pavlova"],["D7D0FF","Fog"],["D84437","Valencia"],["D87C63","Japonica"],["D8BFD8","Thistle"],["D8C2D5","Maverick"],["D8FCFA","Foam"],["D94972","Cabaret"],["D99376","Burning Sand"],["D9B99B","Cameo"],["D9D6CF","Timberwolf"],["D9DCC1","Tana"],["D9E4F5","Link Water"],["D9F7FF","Mabel"],["DA3287","Cerise"],["DA5B38","Flame Pea"],["DA6304","Bamboo"],["DA6A41","Red Damask"],["DA70D6","Orchid"],["DA8A67","Copperfield"],["DAA520","Golden Grass"],["DAECD6","Zanah"],["DAF4F0","Iceberg"],["DAFAFF","Oyster Bay"],["DB5079","Cranberry"],["DB9690","Petite Orchid"],["DB995E","Di Serria"],["DBDBDB","Alto"],["DBFFF8","Frosted Mint"],["DC143C","Crimson"],["DC4333","Punch"],["DCB20C","Galliano"],["DCB4BC","Blossom"],["DCD747","Wattle"],["DCD9D2","Westar"],["DCDDCC","Moon Mist"],["DCEDB4","Caper"],["DCF0EA","Swans Down"],["DDD6D5","Swiss Coffee"],["DDF9F1","White Ice"],["DE3163","Cerise Red"],["DE6360","Roman"],["DEA681","Tumbleweed"],["DEBA13","Gold Tips"],["DEC196","Brandy"],["DECBC6","Wafer"],["DED4A4","Sapling"],["DED717","Barberry"],["DEE5C0","Beryl Green"],["DEF5FF","Pattens Blue"],["DF73FF","Heliotrope"],["DFBE6F","Apache"],["DFCD6F","Chenin"],["DFCFDB","Lola"],["DFECDA","Willow Brook"],["DFFF00","Chartreuse Yellow"],["E0B0FF","Mauve"],["E0B646","Anzac"],["E0B974","Harvest Gold"],["E0C095","Calico"],["E0FFFF","Baby Blue"],["E16865","Sunglo"],["E1BC64","Equator"],["E1C0C8","Pink Flare"],["E1E6D6","Periglacial Blue"],["E1EAD4","Kidnapper"],["E1F6E8","Tara"],["E25465","Mandy"],["E2725B","Terracotta"],["E28913","Golden Bell"],["E292C0","Shocking"],["E29418","Dixie"],["E29CD2","Light Orchid"],["E2D8ED","Snuff"],["E2EBED","Mystic"],["E2F3EC","Apple Green"],["E30B5C","Razzmatazz"],["E32636","Alizarin Crimson"],["E34234","Cinnabar"],["E3BEBE","Cavern Pink"],["E3F5E1","Peppermint"],["E3F988","Mindaro"],["E47698","Deep Blush"],["E49B0F","Gamboge"],["E4C2D5","Melanie"],["E4CFDE","Twilight"],["E4D1C0","Bone"],["E4D422","Sunflower"],["E4D5B7","Grain Brown"],["E4D69B","Zombie"],["E4F6E7","Frostee"],["E4FFD1","Snow Flurry"],["E52B50","Amaranth"],["E5841B","Zest"],["E5CCC9","Dust Storm"],["E5D7BD","Stark White"],["E5D8AF","Hampton"],["E5E0E1","Bon Jour"],["E5E5E5","Mercury"],["E5F9F6","Polar"],["E64E03","Trinidad"],["E6BE8A","Gold Sand"],["E6BEA5","Cashmere"],["E6D7B9","Double Spanish White"],["E6E4D4","Satin Linen"],["E6F2EA","Harp"],["E6F8F3","Off Green"],["E6FFE9","Hint of Green"],["E6FFFF","Tranquil"],["E77200","Mango Tango"],["E7730A","Christine"],["E79F8C","Tonys Pink"],["E79FC4","Kobi"],["E7BCB4","Rose Fog"],["E7BF05","Corn"],["E7CD8C","Putty"],["E7ECE6","Gray Nurse"],["E7F8FF","Lily White"],["E7FEFF","Bubbles"],["E89928","Fire Bush"],["E8B9B3","Shilo"],["E8E0D5","Pearl Bush"],["E8EBE0","Green White"],["E8F1D4","Chrome White"],["E8F2EB","Gin"],["E8F5F2","Aqua Squeeze"],["E96E00","Clementine"],["E97451","Burnt Sienna"],["E97C07","Tahiti Gold"],["E9CECD","Oyster Pink"],["E9D75A","Confetti"],["E9E3E3","Ebb"],["E9F8ED","Ottoman"],["E9FFFD","Clear Day"],["EA88A8","Carissma"],["EAAE69","Porsche"],["EAB33B","Tulip Tree"],["EAC674","Rob Roy"],["EADAB8","Raffia"],["EAE8D4","White Rock"],["EAF6EE","Panache"],["EAF6FF","Solitude"],["EAF9F5","Aqua Spring"],["EAFFFE","Dew"],["EB9373","Apricot"],["EBC2AF","Zinnwaldite"],["ECA927","Fuel Yellow"],["ECC54E","Ronchi"],["ECC7EE","French Lilac"],["ECCDB9","Just Right"],["ECE090","Wild Rice"],["ECEBBD","Fall Green"],["ECEBCE","Aths Special"],["ECF245","Starship"],["ED0A3F","Red Ribbon"],["ED7A1C","Tango"],["ED9121","Carrot Orange"],["ED989E","Sea Pink"],["EDB381","Tacao"],["EDC9AF","Desert Sand"],["EDCDAB","Pancho"],["EDDCB1","Chamois"],["EDEA99","Primrose"],["EDF5DD","Frost"],["EDF5F5","Aqua Haze"],["EDF6FF","Zumthor"],["EDF9F1","Narvik"],["EDFC84","Honeysuckle"],["EE82EE","Lavender Magenta"],["EEC1BE","Beauty Bush"],["EED794","Chalky"],["EED9C4","Almond"],["EEDC82","Flax"],["EEDEDA","Bizarre"],["EEE3AD","Double Colonial White"],["EEEEE8","Cararra"],["EEEF78","Manz"],["EEF0C8","Tahuna Sands"],["EEF0F3","Athens Gray"],["EEF3C3","Tusk"],["EEF4DE","Loafer"],["EEF6F7","Catskill White"],["EEFDFF","Twilight Blue"],["EEFF9A","Jonquil"],["EEFFE2","Rice Flower"],["EF863F","Jaffa"],["EFEFEF","Gallery"],["EFF2F3","Porcelain"],["F091A9","Mauvelous"],["F0D52D","Golden Dream"],["F0DB7D","Golden Sand"],["F0DC82","Buff"],["F0E2EC","Prim"],["F0E68C","Khaki"],["F0EEFD","Selago"],["F0EEFF","Titan White"],["F0F8FF","Alice Blue"],["F0FCEA","Feta"],["F18200","Gold Drop"],["F19BAB","Wewak"],["F1E788","Sahara Sand"],["F1E9D2","Parchment"],["F1E9FF","Blue Chalk"],["F1EEC1","Mint Julep"],["F1F1F1","Seashell"],["F1F7F2","Saltpan"],["F1FFAD","Tidal"],["F1FFC8","Chiffon"],["F2552A","Flamingo"],["F28500","Tangerine"],["F2C3B2","Mandys Pink"],["F2F2F2","Concrete"],["F2FAFA","Black Squeeze"],["F34723","Pomegranate"],["F3AD16","Buttercup"],["F3D69D","New Orleans"],["F3D9DF","Vanilla Ice"],["F3E7BB","Sidecar"],["F3E9E5","Dawn Pink"],["F3EDCF","Wheatfield"],["F3FB62","Canary"],["F3FBD4","Orinoco"],["F3FFD8","Carla"],["F400A1","Hollywood Cerise"],["F4A460","Sandy brown"],["F4C430","Saffron"],["F4D81C","Ripe Lemon"],["F4EBD3","Janna"],["F4F2EE","Pampas"],["F4F4F4","Wild Sand"],["F4F8FF","Zircon"],["F57584","Froly"],["F5C85C","Cream Can"],["F5C999","Manhattan"],["F5D5A0","Maize"],["F5DEB3","Wheat"],["F5E7A2","Sandwisp"],["F5E7E2","Pot Pourri"],["F5E9D3","Albescent White"],["F5EDEF","Soft Peach"],["F5F3E5","Ecru White"],["F5F5DC","Beige"],["F5FB3D","Golden Fizz"],["F5FFBE","Australian Mint"],["F64A8A","French Rose"],["F653A6","Brilliant Rose"],["F6A4C9","Illusion"],["F6F0E6","Merino"],["F6F7F7","Black Haze"],["F6FFDC","Spring Sun"],["F7468A","Violet Red"],["F77703","Chilean Fire"],["F77FBE","Persian Pink"],["F7B668","Rajah"],["F7C8DA","Azalea"],["F7DBE6","We Peep"],["F7F2E1","Quarter Spanish White"],["F7F5FA","Whisper"],["F7FAF7","Snow Drift"],["F8B853","Casablanca"],["F8C3DF","Chantilly"],["F8D9E9","Cherub"],["F8DB9D","Marzipan"],["F8DD5C","Energy Yellow"],["F8E4BF","Givry"],["F8F0E8","White Linen"],["F8F4FF","Magnolia"],["F8F6F1","Spring Wood"],["F8F7DC","Coconut Cream"],["F8F7FC","White Lilac"],["F8F8F7","Desert Storm"],["F8F99C","Texas"],["F8FACD","Corn Field"],["F8FDD3","Mimosa"],["F95A61","Carnation"],["F9BF58","Saffron Mango"],["F9E0ED","Carousel Pink"],["F9E4BC","Dairy Cream"],["F9E663","Portica"],["F9EAF3","Amour"],["F9F8E4","Rum Swizzle"],["F9FF8B","Dolly"],["F9FFF6","Sugar Cane"],["FA7814","Ecstasy"],["FA9D5A","Tan Hide"],["FAD3A2","Corvette"],["FADFAD","Peach Yellow"],["FAE600","Turbo"],["FAEAB9","Astra"],["FAECCC","Champagne"],["FAF0E6","Linen"],["FAF3F0","Fantasy"],["FAF7D6","Citrine White"],["FAFAFA","Alabaster"],["FAFDE4","Hint of Yellow"],["FAFFA4","Milan"],["FB607F","Brink Pink"],["FB8989","Geraldine"],["FBA0E3","Lavender Rose"],["FBA129","Sea Buckthorn"],["FBAC13","Sun"],["FBAED2","Lavender Pink"],["FBB2A3","Rose Bud"],["FBBEDA","Cupid"],["FBCCE7","Classic Rose"],["FBCEB1","Apricot Peach"],["FBE7B2","Banana Mania"],["FBE870","Marigold Yellow"],["FBE96C","Festival"],["FBEA8C","Sweet Corn"],["FBEC5D","Candy Corn"],["FBF9F9","Hint of Red"],["FBFFBA","Shalimar"],["FC0FC0","Shocking Pink"],["FC80A5","Tickle Me Pink"],["FC9C1D","Tree Poppy"],["FCC01E","Lightning Yellow"],["FCD667","Goldenrod"],["FCD917","Candlelight"],["FCDA98","Cherokee"],["FCF4D0","Double Pearl Lusta"],["FCF4DC","Pearl Lusta"],["FCF8F7","Vista White"],["FCFBF3","Bianca"],["FCFEDA","Moon Glow"],["FCFFE7","China Ivory"],["FCFFF9","Ceramic"],["FD0E35","Torch Red"],["FD5B78","Wild Watermelon"],["FD7B33","Crusta"],["FD7C07","Sorbus"],["FD9FA2","Sweet Pink"],["FDD5B1","Light Apricot"],["FDD7E4","Pig Pink"],["FDE1DC","Cinderella"],["FDE295","Golden Glow"],["FDE910","Lemon"],["FDF5E6","Old Lace"],["FDF6D3","Half Colonial White"],["FDF7AD","Drover"],["FDFEB8","Pale Prim"],["FDFFD5","Cumulus"],["FE28A2","Persian Rose"],["FE4C40","Sunset Orange"],["FE6F5E","Bittersweet"],["FE9D04","California"],["FEA904","Yellow Sea"],["FEBAAD","Melon"],["FED33C","Bright Sun"],["FED85D","Dandelion"],["FEDB8D","Salomie"],["FEE5AC","Cape Honey"],["FEEBF3","Remy"],["FEEFCE","Oasis"],["FEF0EC","Bridesmaid"],["FEF2C7","Beeswax"],["FEF3D8","Bleach White"],["FEF4CC","Pipi"],["FEF4DB","Half Spanish White"],["FEF4F8","Wisp Pink"],["FEF5F1","Provincial Pink"],["FEF7DE","Half Dutch White"],["FEF8E2","Solitaire"],["FEF8FF","White Pointer"],["FEF9E3","Off Yellow"],["FEFCED","Orange White"],["FF0000","Red"],["FF007F","Rose"],["FF00CC","Purple Pizzazz"],["FF00FF","Magenta / Fuchsia"],["FF2400","Scarlet"],["FF3399","Wild Strawberry"],["FF33CC","Razzle Dazzle Rose"],["FF355E","Radical Red"],["FF3F34","Red Orange"],["FF4040","Coral Red"],["FF4D00","Vermilion"],["FF4F00","International Orange"],["FF6037","Outrageous Orange"],["FF6600","Blaze Orange"],["FF66FF","Pink Flamingo"],["FF681F","Orange"],["FF69B4","Hot Pink"],["FF6B53","Persimmon"],["FF6FFF","Blush Pink"],["FF7034","Burning Orange"],["FF7518","Pumpkin"],["FF7D07","Flamenco"],["FF7F00","Flush Orange"],["FF7F50","Coral"],["FF8C69","Salmon"],["FF9000","Pizazz"],["FF910F","West Side"],["FF91A4","Pink Salmon"],["FF9933","Neon Carrot"],["FF9966","Atomic Tangerine"],["FF9980","Vivid Tangerine"],["FF9E2C","Sunshade"],["FFA000","Orange Peel"],["FFA194","Mona Lisa"],["FFA500","Web Orange"],["FFA6C9","Carnation Pink"],["FFAB81","Hit Pink"],["FFAE42","Yellow Orange"],["FFB0AC","Cornflower Lilac"],["FFB1B3","Sundown"],["FFB31F","My Sin"],["FFB555","Texas Rose"],["FFB7D5","Cotton Candy"],["FFB97B","Macaroni and Cheese"],["FFBA00","Selective Yellow"],["FFBD5F","Koromiko"],["FFBF00","Amber"],["FFC0A8","Wax Flower"],["FFC0CB","Pink"],["FFC3C0","Your Pink"],["FFC901","Supernova"],["FFCBA4","Flesh"],["FFCC33","Sunglow"],["FFCC5C","Golden Tainoi"],["FFCC99","Peach Orange"],["FFCD8C","Chardonnay"],["FFD1DC","Pastel Pink"],["FFD2B7","Romantic"],["FFD38C","Grandis"],["FFD700","Gold"],["FFD800","School bus Yellow"],["FFD8D9","Cosmos"],["FFDB58","Mustard"],["FFDCD6","Peach Schnapps"],["FFDDAF","Caramel"],["FFDDCD","Tuft Bush"],["FFDDCF","Watusi"],["FFDDF4","Pink Lace"],["FFDEAD","Navajo White"],["FFDEB3","Frangipani"],["FFE1DF","Pippin"],["FFE1F2","Pale Rose"],["FFE2C5","Negroni"],["FFE5A0","Cream Brulee"],["FFE5B4","Peach"],["FFE6C7","Tequila"],["FFE772","Kournikova"],["FFEAC8","Sandy Beach"],["FFEAD4","Karry"],["FFEC13","Broom"],["FFEDBC","Colonial White"],["FFEED8","Derby"],["FFEFA1","Vis Vis"],["FFEFC1","Egg White"],["FFEFD5","Papaya Whip"],["FFEFEC","Fair Pink"],["FFF0DB","Peach Cream"],["FFF0F5","Lavender blush"],["FFF14F","Gorse"],["FFF1B5","Buttermilk"],["FFF1D8","Pink Lady"],["FFF1EE","Forget Me Not"],["FFF1F9","Tutu"],["FFF39D","Picasso"],["FFF3F1","Chardon"],["FFF46E","Paris Daisy"],["FFF4CE","Barley White"],["FFF4DD","Egg Sour"],["FFF4E0","Sazerac"],["FFF4E8","Serenade"],["FFF4F3","Chablis"],["FFF5EE","Seashell Peach"],["FFF5F3","Sauvignon"],["FFF6D4","Milk Punch"],["FFF6DF","Varden"],["FFF6F5","Rose White"],["FFF8D1","Baja White"],["FFF9E2","Gin Fizz"],["FFF9E6","Early Dawn"],["FFFACD","Lemon Chiffon"],["FFFAF4","Bridal Heath"],["FFFBDC","Scotch Mist"],["FFFBF9","Soapstone"],["FFFC99","Witch Haze"],["FFFCEA","Buttery White"],["FFFCEE","Island Spice"],["FFFDD0","Cream"],["FFFDE6","Chilean Heath"],["FFFDE8","Travertine"],["FFFDF3","Orchid White"],["FFFDF4","Quarter Pearl Lusta"],["FFFEE1","Half and Half"],["FFFEEC","Apricot White"],["FFFEF0","Rice Cake"],["FFFEF6","Black White"],["FFFEFD","Romance"],["FFFF00","Yellow"],["FFFF66","Laser Lemon"],["FFFF99","Pale Canary"],["FFFFB4","Portafino"],["FFFFF0","Ivory"],["FFFFFF","White"]],this.rgb=function(l){return[parseInt("0x"+l.substring(1,3)),parseInt("0x"+l.substring(3,5)),parseInt("0x"+l.substring(5,7))]};for(var g=0;g7)return["#000000","Invalid Color: "+g,!1];g=g.toUpperCase(),g.length%3==0&&(g="#"+g),g.length==4&&(g="#"+g.substr(1,1)+g.substr(1,1)+g.substr(2,1)+g.substr(2,1)+g.substr(3,1)+g.substr(3,1));for(var I=this.rgb(g),i=I[0],n=I[1],C=I[2],r=this.hsl(g),o=r[0],a=r[1],s=r[2],A=0,l=0,c=0,u=-1,d=-1,h=0;hc)&&(d=c,u=h)}return u<0?["#000000","Invalid Color: "+g,!1]:["#"+this.names[u][0],this.names[u][1],!1]},e.prototype.hsl=function(g){var I=[parseInt("0x"+g.substring(1,3))/255,parseInt("0x"+g.substring(3,5))/255,parseInt("0x"+g.substring(5,7))/255],i=I[0],n=I[1],C=I[2],r=Math.min(i,Math.min(n,C)),o=Math.max(i,Math.max(n,C)),a=o-r,s=(r+o)/2,A=0;s>0&&s<1&&(A=a/(s<.5?2*s:2-2*s));var l=0;return a>0&&(o==i&&o!=n&&(l+=(n-C)/a),o==n&&o!=C&&(l+=2+(C-i)/a),o==C&&o!=i&&(l+=4+(i-n)/a),l/=6),[l*255,A*255,s*255]},e}();function uCg(e){dCg(e),fCg(e)}function dCg(e){e.composition.nTracks==1?(e.tracks[0].position.description="There is only one view.",e.tracks[0].alttype==="single"?e.composition.description="There is one ("+e.tracks[0].appearance.details.layout+") track.":e.composition.description="There is one (overlaid) track."):e.composition.nTracks==2?hCg(e):mCg(e)}function hCg(e){let g="",I="",i="",n=0;e.tracks[0].appearance.details.layout==="circular"&&(n+=1),e.tracks[1].appearance.details.layout==="circular"&&(n+=1),n==2?JSON.stringify(e.composition.counter.serialCircular).indexOf(JSON.stringify([0,1]))!==-1?(g="left half of ring",I="right half of ring",i="Two circular tracks form one ring, with both the half of the ring."):JSON.stringify(e.composition.counter.parallelCircular).indexOf(JSON.stringify([0,1]))!==-1?(g="outer ring",I="inner ring",i="Two circular tracks form two rings, one around the other."):e.composition.counter.totalRows<2?(g="left",I="right",i="Two circular tracks are shown next to each other."):(g="top",I="bottom",i="Two circular tracks are shown below each other."):e.composition.counter.totalRows<2?(g="left",I="right",i=" are shown next to each other."):(g="top",I="bottom",i="are shown below each other."),e.tracks[0].position.description=g,e.tracks[1].position.description=I,e.composition.description=i}function mCg(e){const g=["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"];let I="";if(e.composition.counter.totalRows===1)I=I.concat("There are "+e.composition.counter.nTracks+" tracks, displayed next to each other.");else if(e.composition.counter.totalCols===1)I=I.concat("There are "+e.composition.counter.nTracks+" tracks, displayed below each other.");else{I=I.concat("There are "+e.composition.counter.nTracks+" tracks."),I=I.concat(" There are "+e.composition.counter.totalRows+" rows.");const i=Object.keys(e.composition.counter.matrix).map(C=>Object.keys(e.composition.counter.matrix[C]).length),n=[...new Set(i)];if(n.length==1)I=I.concat(" Each row has "+n[0]+" tracks next to each other.");else if(n.length==2){const C=[],r=[];for(let o=0;oo+1))+" have "+n[0]+" column(s) each."),I=I.concat(" The other rows have "+n[1]+" column(s) each.")):(I=I.concat(" Row(s) "+hr(r.map(o=>o+1))+" have "+n[1]+" column(s) each."),I=I.concat(" The other rows have "+n[0]+" column(s) each."))}else for(let C=0;C9?I=I.concat(" Row number "+C+" has "+e.composition.counter.matrix[C].length+" track(s) next to each other."):I=I.concat(" The "+g[C]+" row has "+e.composition.counter.matrix[C].length+" track(s) next to each other.")}e.composition.description=I;for(const i in e.tracks){let n="";const C=e.tracks[i].position.details,r=e.composition.counter;e.composition.counter.totalRows>1&&(C.rowNumber===0?n=n.concat("top row"):C.rowNumber===r.totalRows-1?n=n.concat("bottom row"):C.rowNumber<10?n=n.concat(g[C.rowNumber]+" row"):n=n.concat("row "+C.rowNumber+1)),e.composition.counter.totalCols>1&&Object.keys(r.matrix[C.colNumber]).length>1&&(n.length>1&&(n=n.concat(", ")),C.colNumber===0?n=n.concat("left"):C.colNumber===Object.keys(r.matrix[C.rowNumber]).length-1?n=n.concat("right"):C.colNumber===2&&Object.keys(r.matrix[C.rowNumber]).length===2?n=n.concat("middle"):n=n.concat(g[C.colNumber]+" from left")),e.tracks[i].position.description=n}}function fCg(e){for(const g in e.tracks){const I=e.tracks[g];if(I.alttype==="single"){let i="";i=i.concat(`${$p(I.charttype)}.`),I.title&&(i=i.concat(` Chart is titled '${I.title}'.`));const n=xx(I);if(i=i.concat(` ${n.desc}`),I.appearance.details.linked&&I.appearance.details.linked.length>0){const C=I.appearance.details.linked.map(r=>r.channel);C.length===1?i=i.concat(` The ${C[0]}-axis has a brush, linking to the other chart.`):i=i.concat(" The x and y-axes have brushes, linking to the other charts.")}I.appearance.description=i,I.appearance.details.encodingsDescList=n.descList}else if(I.alttype==="ov-mark"){let i="";i=i.concat(`${$p(hr(I.charttype))}.`),I.title&&(i=i.concat(` Chart is titled '${I.title}'.`));const n=xx(I);if(i=i.concat(" "+n.desc),I.appearance.details.linked&&I.appearance.details.linked.length>0){const C=I.appearance.details.linked.map(r=>r.channel);C.length===1?i=i.concat(` The ${C[0]}-axis has a brush, linking to one of the other charts.`):i=i.concat(" The x and y-axes have brushes, linking to one of the other charts.")}I.appearance.description=i,I.appearance.details.encodingsDescList=n.descList}else if(I.alttype==="ov-data")for(let i=0;id!==void 0).map(d=>Yv.get(d)).filter(d=>d!==void 0)),n.push(Ex(i,e.appearance.details.encodings));for(let d=0;dd.descGenomic).filter(d=>d!=="").join(" "),r=n.map(d=>d.descQuantitative).filter(d=>d!=="").join(" "),o=n.map(d=>d.descNominal).filter(d=>d!=="").join(" "),a=n.map(d=>d.descValue).filter(d=>d!=="").join(" "),s=[C,r,o,a].join(" "),A=n.map(d=>d.descList);let l=A[0].concat(...A.slice(1));const c=l.map(d=>d[0]),u=c.filter((d,h)=>c.indexOf(d)!==h);for(const d of u){const h=l.filter(m=>m[0]===d).map(m=>m[1]).join(" ");l=l.filter(m=>m[0]!==d),l.push([d,h])}return{desc:s,descList:l}}}function Ex(e,g){let I="",i="",n="",C="";const r=[],o=g.encodingDeepGenomic.map(A=>A.name);if(o.includes("x")&&o.includes("y"))I=I.concat("The genome is shown on both the x- and y-axes."),o.includes("xe")&&o.includes("ye")?(I=I.concat(" Each displays genomic intervals."),r.push(["x","The x-axis show genomic intervals."]),r.push(["y","The y-axis show genomic intervals."])):o.includes("xe")?(I=I.concat(" The genome on the x-axis displays genomic intervals."),r.push(["x","The x-axis show genomic intervals."]),r.push(["y","The y-axis shows the genome."])):o.includes("ye")?(I=I.concat(" The genome on the y-axis displays genomic intervals."),r.push(["x","The x-axis shows the genome."]),r.push(["y","The y-axis show genomic intervals."])):(r.push(["x","The x-axis shows the genome."]),r.push(["y","The y-axis shows the genome."]));else{if(o.includes("x")){let A="";o.includes("xe")?(A="in intervals ",r.push(["x","The x-axis show genomic intervals."])):r.push(["x","The x-axis shows the genome."]),I=I.concat(`The genome is shown ${A}on the x-axis.`)}if(o.includes("y")){let A="";o.includes("ye")?(A="in intervals ",r.push(["y","The y-axis show genomic intervals."])):r.push(["y","The y-axis shows the genome."]),I=I.concat(`The genome is shown ${A}on the y-axis.`)}}const a=g.encodingDeepQuantitative.map(A=>A.name);if(a.length>1){i=i.concat(`The expression values are shown with ${e} on the ${hr(a)}-axes.`);for(const A of a)r.push([A,`The ${Sr.get(A)} of the ${e} shows the expression values.`])}else a.length===1&&(a.includes("y")?(i=i.concat(`The expression is shown on the y-axis with ${e}.`),r.push(["y",`The y-axis shows the expression with ${e}.`])):a.includes("color")?(i=i.concat("The height of the expression values is shown with color."),r.push(["color",`The color of the ${e} shows the expression values.`])):(i=i.concat(`The height of the expression values is shown with the ${a[0]}-axis.`),r.push([Sr.get(a[0]),`The ${Sr.get(a[0])} of the ${e} shows the expression values.`])));let s=g.encodingDeepNominal.map(A=>A.name);if(s=s.filter(A=>A!=="text"),s.length>1)if(s.includes("row")){n=n.concat("The chart is stratified by rows for the categories.");const A=s.filter(l=>l!=="row").map(l=>Sr.get(l));n=n.concat(` The categories are also shown with the ${hr(A)} of the ${e}.`),r.push(["row","The chart is stratified by rows for the categories."]);for(const l of A)r.push([Sr.get(l),`The ${Sr.get(l)} of the ${e} show the different categories.`])}else{const A=s.map(l=>Sr.get(l));n=n.concat(`The categories are shown with the ${hr(A)} of the ${e}.`);for(const l of s)r.push([Sr.get(l),`The ${Sr.get(l)} of the ${e} show the different categories.`])}else s.length==1&&(s.includes("row")?(n=n.concat("The chart is stratified by rows for the categories."),r.push(["row","The chart is stratified by rows for the categories."])):(n=n.concat(`The ${Sr.get(s[0])} of the ${e} indicates the different categories.`),r.push([Sr.get(s[0]),`The ${Sr.get(s[0])} of the ${e} show the different categories.`])));for(let A=0;AFv(n,I)))}.`):i=i.concat(` The ${g} value is shown at ${e.length} different genomic positions, the first being ${Fv(e[0],I)}.`),i}function Z_(e,g){const I=Lu(e,g);return[ICg(I.chromosome),I.position]}function Fv(e,g){const I=Z_(e,g);return I[0]==="unknown"?`absolute position ${I[1]} (on the unmapped part of the genome)`:`chromosome ${I[0]} position ${I[1]}`}function fHe(e,g,I){const i=Z_(e,I),n=Z_(g,I);return i[0]==="unknown"&&n[0]=="unknown"?` The genomic range is shown from from absolute position ${i[1]} to ${n[1]} on an unmapped part of the genome.`:n[0]==="unknown"?(i[0]==="chr1"||i[0]===1)&&i[1]===0?" The full genome is shown.":i[0]==="chrX"||i[0]==="X"?` The genomic range shown is chromomosome X (from position ${i[1]}), Y and an unmapped part of the genome at the end.`:i[0]==="chrY"||i[0]==="Y"?` The genomic range shown is chromomosome Y (from position ${i[1]}) and an unmapped part of the genome at the end.`:` The genomic range is shown from chromosome ${i[0]} to chromosome 22 and the X and Y chromosomes, as well as an unmapped part of the genome at the end.`:i===n?` The genomic range is shown from position ${i[1]} to position ${n[1]} on chromosome ${i[0]}.`:` The genomic range is shown from chromosome ${i[0]} position ${i[1]} to chromosome ${n[0]} position ${n[1]}.`}function G_(e){if((e.alttype==="single"||e.alttype==="ov-mark")&&vce(e),e.alttype==="ov-data")for(let g=0;g[r,iCg(i,r)]).map(r=>{const o=r[1];let a=r[0];return a=a.toLowerCase(),o==1?`a ${a}`:(a.includes("chart")?a=a.replace("chart","charts"):a=`${a}s`,`${o} different ${a}`)});I=I.concat(`Figure with ${e.composition.nTracks} individual charts. Briefly, these are ${hr(C).toLowerCase()}.`),e.alt=`Genomic visualization with ${e.composition.nTracks} individual charts.`,e.longDescription=I}}function bCg(e){if(Object.keys(e.tracks).length===1&&lp(e.tracks[0]),Object.keys(e.tracks).length===2)lp(e.tracks[0]),lp(e.tracks[1]);else for(const g in Object.keys(e.tracks))lp(e.tracks[g])}function lp(e,g){let I="",i="";e.alttype==="single"||e.alttype==="ov-mark"?I=i.concat(`${e.appearance.description} ${e.data.description}`):I=i.concat(`${$p(e.appearance.details.charttype)}. See separate overlaid tracks for details.`),e.description=I}function yCg(e){if(e.alttype==="single"||e.alttype==="ov-mark"){if(e.data.details.fields.genomicField&&e.data.details.fields.genomicField.length>0)return!0}else for(const g of e.tracks)if(g.data.details.fields.genomicField&&g.data.details.fields.genomicField.length>0)return!0;return!1}function ZCg(e){uCg(e),a8(e)}function GCg(e){pCg(e),a8(e)}function Bce(e,g,I){const i={id:e,flatTileData:g};if(I){if(I.genomicField!==void 0){const n=I.genomicField;try{const C=g.map(r=>r[n]).filter(r=>!isNaN(r));i.genomicMin=Math.min(...C),i.genomicMax=Math.max(...C)}catch(C){console.warn(C)}}if(I.valueField!==void 0){const n=I.valueField;try{const C=g.map(r=>r[n]).filter(r=>!isNaN(r));i.valueMin=Math.min(...C),i.valueMax=Math.max(...C)}catch(C){console.warn(C)}}if(I.genomicField!==void 0&&I.valueField!==void 0){const n=I.genomicField,C=I.valueField;try{i.valueMinGenomic=g.filter(r=>r[C]==i.valueMin).map(r=>r[n]),i.valueMaxGenomic=g.filter(r=>r[C]==i.valueMax).map(r=>r[n])}catch(r){console.warn(r)}}if(I.categoryField!==void 0){const n=I.categoryField,C=g.map(s=>s[n]),r=[...new Set(C)];i.categories=r;const o=I.genomicField,a=I.valueField;if(o&&a)try{const s=g.map(u=>u[n]),A=[...new Set(s)],l={},c=[];for(const u of A){const d=g.filter(y=>y[n]===u),h=d.map(y=>y[a]).filter(y=>!isNaN(y)),m=Math.min(...h),f=Math.max(...h),b=d.filter(y=>y[a]==m).map(y=>y[o]),p=d.filter(y=>y[a]==f).map(y=>y[o]);l[u]=[m,b,f,p],f===i.valueMax&&c.push(u)}i.categoryMinMaxWG=l,c.length>0&&(i.highestCategory=c)}catch(s){console.warn(s)}}return i}else return i}function vCg(e,g,I){e.tracks.length>1;for(let i=0;ig!==void 0),e.length===0?"":e.length===1?e[0]:`${e.slice(0,-1).join(", ")} and ${e.slice(-1)}`}function pHe(e,g,I){let[i,n]=U.useState(e||g),C=U.useRef(e!==void 0),r=e!==void 0;U.useEffect(()=>{let s=C.current;s!==r&&console.warn(`WARN: A component changed from ${s?"controlled":"uncontrolled"} to ${r?"controlled":"uncontrolled"}.`),C.current=r},[r]);let o=r?e:i,a=U.useCallback((s,...A)=>{let l=(c,...u)=>{I&&(Object.is(o,c)||I(c,...u)),r||(o=c)};typeof s=="function"?(console.warn("We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320"),n((u,...d)=>{let h=s(r?o:u,...d);return l(h,...A),r?u:h})):(r||n(s),l(s,...A))},[r,o,I]);return[o,a]}const NH={prefix:String(Math.round(Math.random()*1e10)),current:0},bHe=N.createContext(NH),wCg=N.createContext(!1);let RCg=!!(typeof window<"u"&&window.document&&window.document.createElement),Mx=new WeakMap;function VCg(e=!1){let g=U.useContext(bHe),I=U.useRef(null);if(I.current===null&&!e){var i,n;let C=(n=N.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||n===void 0||(i=n.ReactCurrentOwner)===null||i===void 0?void 0:i.current;if(C){let r=Mx.get(C);r==null?Mx.set(C,{id:g.current,state:C.memoizedState}):C.memoizedState!==r.state&&(g.current=r.id,Mx.delete(C))}I.current=++g.current}return I.current}function WCg(e){let g=U.useContext(bHe);g===NH&&!RCg&&console.warn("When server rendering, you must wrap your application in an to ensure consistent ids are generated between the client and server.");let I=VCg(!!e),i=`react-aria${g.prefix}`;return e||`${i}-${I}`}function XCg(e){let g=N.useId(),[I]=U.useState(Dw()),i=I?"react-aria":`react-aria${NH.prefix}`;return e||`${i}-${g}`}const HCg=typeof N.useId=="function"?XCg:WCg;function TCg(){return!1}function NCg(){return!0}function kCg(e){return()=>{}}function Dw(){return typeof N.useSyncExternalStore=="function"?N.useSyncExternalStore(kCg,TCg,NCg):U.useContext(wCg)}function yHe(e){var g,I,i="";if(typeof e=="string"||typeof e=="number")i+=e;else if(typeof e=="object")if(Array.isArray(e))for(g=0;g{};function or(e){const g=U.useRef(null);return bi(()=>{g.current=e},[e]),U.useCallback((...I)=>{const i=g.current;return i(...I)},[])}function KCg(e){let[g,I]=U.useState(e),i=U.useRef(null),n=or(()=>{let r=i.current.next();if(r.done){i.current=null;return}g===r.value?n():I(r.value)});bi(()=>{i.current&&n()});let C=or(r=>{i.current=r(g),n()});return[g,C]}let FCg=!!(typeof window<"u"&&window.document&&window.document.createElement),kH=new Map;function Dh(e){let[g,I]=U.useState(e),i=U.useRef(null),n=HCg(g),C=U.useCallback(r=>{i.current=r},[]);return FCg&&kH.set(n,C),bi(()=>{let r=n;return()=>{kH.delete(r)}},[n]),U.useEffect(()=>{let r=i.current;r&&(i.current=null,I(r))}),n}function DCg(e,g){if(e===g)return e;let I=kH.get(e);if(I)return I(g),g;let i=kH.get(g);return i?(i(e),e):g}function Sce(e=[]){let g=Dh(),[I,i]=KCg(g),n=U.useCallback(()=>{i(function*(){yield g,yield document.getElementById(g)?g:void 0})},[g,i]);return bi(n,[g,n,...e]),I}function xCg(...e){return(...g)=>{for(let I of e)typeof I=="function"&&I(...g)}}const Cc=e=>{var g;return(g=e==null?void 0:e.ownerDocument)!==null&&g!==void 0?g:document},YH=e=>e&&"window"in e&&e.window===e?e:Cc(e).defaultView||window;function Gi(...e){let g={...e[0]};for(let I=1;I=65&&n.charCodeAt(2)<=90?g[n]=xCg(C,r):(n==="className"||n==="UNSAFE_className")&&typeof C=="string"&&typeof r=="string"?g[n]=YCg(C,r):n==="id"&&C&&r?g.id=DCg(C,r):g[n]=r!==void 0?r:C}}return g}function ECg(...e){return e.length===1?e[0]:g=>{for(let I of e)typeof I=="function"?I(g):I!=null&&(I.current=g)}}const MCg=new Set(["id"]),zCg=new Set(["aria-label","aria-labelledby","aria-describedby","aria-details"]),PCg=new Set(["href","target","rel","download","ping","referrerPolicy"]),JCg=/^(data-.*)$/;function KA(e,g={}){let{labelable:I,isLink:i,propNames:n}=g,C={};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(MCg.has(r)||I&&zCg.has(r)||i&&PCg.has(r)||n!=null&&n.has(r)||JCg.test(r))&&(C[r]=e[r]);return C}function vs(e){if(OCg())e.focus({preventScroll:!0});else{let g=_Cg(e);e.focus(),LCg(g)}}let s1=null;function OCg(){if(s1==null){s1=!1;try{var e=document.createElement("div");e.focus({get preventScroll(){return s1=!0,!0}})}catch{}}return s1}function _Cg(e){for(var g=e.parentNode,I=[],i=document.scrollingElement||document.documentElement;g instanceof HTMLElement&&g!==i;)(g.offsetHeight"u"||window.navigator==null?!1:((g=window.navigator.userAgentData)===null||g===void 0?void 0:g.brands.some(I=>e.test(I.brand)))||e.test(window.navigator.userAgent)}function s8(e){var g;return typeof window<"u"&&window.navigator!=null?e.test(((g=window.navigator.userAgentData)===null||g===void 0?void 0:g.platform)||window.navigator.platform):!1}function xh(){return s8(/^Mac/i)}function UCg(){return s8(/^iPhone/i)}function ZHe(){return s8(/^iPad/i)||xh()&&navigator.maxTouchPoints>1}function l8(){return UCg()||ZHe()}function QCg(){return xh()||l8()}function jCg(){return gY(/AppleWebKit/i)&&!$Cg()}function $Cg(){return gY(/Chrome/i)}function KH(){return gY(/Android/i)}function qCg(){return gY(/Firefox/i)}const erg=U.createContext({isNative:!0,open:grg});function GHe(){return U.useContext(erg)}function Eh(e,g,I=!0){var i,n;let{metaKey:C,ctrlKey:r,altKey:o,shiftKey:a}=g;qCg()&&(!((n=window.event)===null||n===void 0||(i=n.type)===null||i===void 0)&&i.startsWith("key"))&&e.target==="_blank"&&(xh()?C=!0:r=!0);let s=jCg()&&xh()&&!ZHe()?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:C,ctrlKey:r,altKey:o,shiftKey:a}):new MouseEvent("click",{metaKey:C,ctrlKey:r,altKey:o,shiftKey:a,bubbles:!0,cancelable:!0});Eh.isOpening=I,vs(e),e.dispatchEvent(s),Eh.isOpening=!1}Eh.isOpening=!1;function trg(e,g){if(e instanceof HTMLAnchorElement)g(e);else if(e.hasAttribute("data-href")){let I=document.createElement("a");I.href=e.getAttribute("data-href"),e.hasAttribute("data-target")&&(I.target=e.getAttribute("data-target")),e.hasAttribute("data-rel")&&(I.rel=e.getAttribute("data-rel")),e.hasAttribute("data-download")&&(I.download=e.getAttribute("data-download")),e.hasAttribute("data-ping")&&(I.ping=e.getAttribute("data-ping")),e.hasAttribute("data-referrer-policy")&&(I.referrerPolicy=e.getAttribute("data-referrer-policy")),e.appendChild(I),g(I),e.removeChild(I)}}function grg(e,g){trg(e,I=>Eh(I,g))}function Irg(e){return{"data-href":e.href,"data-target":e.target,"data-rel":e.rel,"data-download":e.download,"data-ping":e.ping,"data-referrer-policy":e.referrerPolicy}}let Df=new Map,v_=new Set;function wce(){if(typeof window>"u")return;let e=I=>{let i=Df.get(I.target);i||(i=new Set,Df.set(I.target,i),I.target.addEventListener("transitioncancel",g)),i.add(I.propertyName)},g=I=>{let i=Df.get(I.target);if(i&&(i.delete(I.propertyName),i.size===0&&(I.target.removeEventListener("transitioncancel",g),Df.delete(I.target)),Df.size===0)){for(let n of v_)n();v_.clear()}};document.body.addEventListener("transitionrun",e),document.body.addEventListener("transitionend",g)}typeof document<"u"&&(document.readyState!=="loading"?wce():document.addEventListener("DOMContentLoaded",wce));function vHe(e){requestAnimationFrame(()=>{Df.size===0?e():v_.add(e)})}function BHe(){let e=U.useRef(new Map),g=U.useCallback((n,C,r,o)=>{let a=o!=null&&o.once?(...s)=>{e.current.delete(r),r(...s)}:r;e.current.set(r,{type:C,eventTarget:n,fn:a,options:o}),n.addEventListener(C,r,o)},[]),I=U.useCallback((n,C,r,o)=>{var a;let s=((a=e.current.get(r))===null||a===void 0?void 0:a.fn)||r;n.removeEventListener(C,s,o),e.current.delete(r)},[]),i=U.useCallback(()=>{e.current.forEach((n,C)=>{I(n.eventTarget,n.type,C,n.options)})},[I]);return U.useEffect(()=>i,[i]),{addGlobalListener:g,removeGlobalListener:I,removeAllGlobalListeners:i}}function irg(e,g){let{id:I,"aria-label":i,"aria-labelledby":n}=e;return I=Dh(I),n&&i?n=[...new Set([I,...n.trim().split(/\s+/)])].join(" "):n&&(n=n.trim().split(/\s+/).join(" ")),!i&&!n&&g&&(i=g),{id:I,"aria-label":i,"aria-labelledby":n}}function xw(e){const g=U.useRef();return U.useMemo(()=>({get current(){return g.current},set current(I){g.current=I,typeof e=="function"?e(I):e&&(e.current=I)}}),[e])}function SHe(e,g){const I=U.useRef(!0),i=U.useRef(null);U.useEffect(()=>(I.current=!0,()=>{I.current=!1}),[]),U.useEffect(()=>{I.current?I.current=!1:(!i.current||g.some((n,C)=>!Object.is(n,i[C])))&&e(),i.current=g},g)}function wHe(e,g){bi(()=>{if(e&&e.ref&&g)return e.ref.current=g.current,()=>{e.ref.current=null}})}function _l(e){for(FH(e)&&(e=e.parentElement);e&&!FH(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}function FH(e){let g=window.getComputedStyle(e);return/(auto|scroll)/.test(g.overflow+g.overflowX+g.overflowY)}let nrg=0;const zx=new Map;function IY(e){let[g,I]=U.useState(void 0);return bi(()=>{if(!e)return;let i=zx.get(e);if(i)I(i.element.id);else{let n=`react-aria-description-${nrg++}`;I(n);let C=document.createElement("div");C.id=n,C.style.display="none",C.textContent=e,document.body.appendChild(C),i={refCount:0,element:C},zx.set(e,i)}return i.refCount++,()=>{--i.refCount===0&&(i.element.remove(),zx.delete(e))}},[e]),{"aria-describedby":e?g:void 0}}function Crg(e,g,I,i){let n=or(I),C=I==null;U.useEffect(()=>{if(C)return;let r=e.current;return r.addEventListener(g,n,i),()=>{r.removeEventListener(g,n,i)}},[e,g,i,C,n])}function RHe(e,g){let I=Rce(e,g,"left"),i=Rce(e,g,"top"),n=g.offsetWidth,C=g.offsetHeight,r=e.scrollLeft,o=e.scrollTop,{borderTopWidth:a,borderLeftWidth:s}=getComputedStyle(e),A=e.scrollLeft+parseInt(s,10),l=e.scrollTop+parseInt(a,10),c=A+e.clientWidth,u=l+e.clientHeight;I<=r?r=I-parseInt(s,10):I+n>c&&(r+=I+n-c),i<=l?o=i-parseInt(a,10):i+C>u&&(o+=i+C-u),e.scrollLeft=r,e.scrollTop=o}function Rce(e,g,I){const i=I==="left"?"offsetLeft":"offsetTop";let n=0;for(;g.offsetParent&&(n+=g[i],g.offsetParent!==e);){if(g.offsetParent.contains(e)){n-=e[i];break}g=g.offsetParent}return n}function Ll(e,g){if(document.contains(e)){let r=document.scrollingElement||document.documentElement;if(window.getComputedStyle(r).overflow==="hidden"){let a=_l(e);for(;e&&a&&e!==r&&a!==r;)RHe(a,e),e=a,a=_l(e)}else{var I;let{left:a,top:s}=e.getBoundingClientRect();e==null||(I=e.scrollIntoView)===null||I===void 0||I.call(e,{block:"nearest"});let{left:A,top:l}=e.getBoundingClientRect();if(Math.abs(a-A)>1||Math.abs(s-l)>1){var i,n,C;g==null||(n=g.containingElement)===null||n===void 0||(i=n.scrollIntoView)===null||i===void 0||i.call(n,{block:"center",inline:"center"}),(C=e.scrollIntoView)===null||C===void 0||C.call(e,{block:"nearest"})}}}}function B_(e){return e.mozInputSource===0&&e.isTrusted?!0:KH()&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function rrg(e){return!KH()&&e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType==="mouse"}function org(e,g,I){let i=U.useRef(g),n=or(()=>{I&&I(i.current)});U.useEffect(()=>{var C;let r=e==null||(C=e.current)===null||C===void 0?void 0:C.form;return r==null||r.addEventListener("reset",n),()=>{r==null||r.removeEventListener("reset",n)}},[e,n])}function arg(e,g){return g.get?g.get.call(e):g.value}function VHe(e,g,I){if(!g.has(e))throw new TypeError("attempted to "+I+" private field on non-instance");return g.get(e)}function Arg(e,g){var I=VHe(e,g,"get");return arg(e,I)}function srg(e,g){if(g.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function lrg(e,g,I){srg(e,g),g.set(e,I)}function crg(e,g,I){if(g.set)g.set.call(e,I);else{if(!g.writable)throw new TypeError("attempted to set read only private field");g.value=I}}function Vce(e,g,I){var i=VHe(e,g,"set");return crg(e,i,I),I}let cp="default",S_="",EW=new WeakMap;function Wce(e){if(l8()){if(cp==="default"){const g=Cc(e);S_=g.documentElement.style.webkitUserSelect,g.documentElement.style.webkitUserSelect="none"}cp="disabled"}else(e instanceof HTMLElement||e instanceof SVGElement)&&(EW.set(e,e.style.userSelect),e.style.userSelect="none")}function l1(e){if(l8()){if(cp!=="disabled")return;cp="restoring",setTimeout(()=>{vHe(()=>{if(cp==="restoring"){const g=Cc(e);g.documentElement.style.webkitUserSelect==="none"&&(g.documentElement.style.webkitUserSelect=S_||""),S_="",cp="default"}})},300)}else if((e instanceof HTMLElement||e instanceof SVGElement)&&e&&EW.has(e)){let g=EW.get(e);e.style.userSelect==="none"&&g&&(e.style.userSelect=g),e.getAttribute("style")===""&&e.removeAttribute("style"),EW.delete(e)}}const WHe=N.createContext({register:()=>{}});WHe.displayName="PressResponderContext";function urg(e){let g=U.useContext(WHe);if(g){let{register:I,...i}=g;e=Gi(i,e),I()}return wHe(g,e.ref),e}var c1=new WeakMap;class u1{continuePropagation(){Vce(this,c1,!1)}get shouldStopPropagation(){return Arg(this,c1)}constructor(g,I,i){lrg(this,c1,{writable:!0,value:void 0}),Vce(this,c1,!0),this.type=g,this.pointerType=I,this.target=i.currentTarget,this.shiftKey=i.shiftKey,this.metaKey=i.metaKey,this.ctrlKey=i.ctrlKey,this.altKey=i.altKey}}const Xce=Symbol("linkClicked");function c8(e){let{onPress:g,onPressChange:I,onPressStart:i,onPressEnd:n,onPressUp:C,isDisabled:r,isPressed:o,preventFocusOnPress:a,shouldCancelOnPointerExit:s,allowTextSelectionOnPress:A,ref:l,...c}=urg(e),[u,d]=U.useState(!1),h=U.useRef({isPressed:!1,ignoreEmulatedMouseEvents:!1,ignoreClickAfterPress:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null}),{addGlobalListener:m,removeAllGlobalListeners:f}=BHe(),b=or((v,w)=>{let R=h.current;if(r||R.didFirePressStart)return!1;let S=!0;if(R.isTriggeringEvent=!0,i){let X=new u1("pressstart",w,v);i(X),S=X.shouldStopPropagation}return I&&I(!0),R.isTriggeringEvent=!1,R.didFirePressStart=!0,d(!0),S}),p=or((v,w,R=!0)=>{let S=h.current;if(!S.didFirePressStart)return!1;S.ignoreClickAfterPress=!0,S.didFirePressStart=!1,S.isTriggeringEvent=!0;let X=!0;if(n){let W=new u1("pressend",w,v);n(W),X=W.shouldStopPropagation}if(I&&I(!1),d(!1),g&&R&&!r){let W=new u1("press",w,v);g(W),X&&(X=W.shouldStopPropagation)}return S.isTriggeringEvent=!1,X}),y=or((v,w)=>{let R=h.current;if(r)return!1;if(C){R.isTriggeringEvent=!0;let S=new u1("pressup",w,v);return C(S),R.isTriggeringEvent=!1,S.shouldStopPropagation}return!0}),Z=or(v=>{let w=h.current;w.isPressed&&w.target&&(w.isOverTarget&&w.pointerType!=null&&p(UA(w.target,v),w.pointerType,!1),w.isPressed=!1,w.isOverTarget=!1,w.activePointerId=null,w.pointerType=null,f(),A||l1(w.target))}),B=or(v=>{s&&Z(v)}),G=U.useMemo(()=>{let v=h.current,w={onKeyDown(S){if(Px(S.nativeEvent,S.currentTarget)&&S.currentTarget.contains(S.target)){var X;Tce(S.target,S.key)&&S.preventDefault();let W=!0;!v.isPressed&&!S.repeat&&(v.target=S.currentTarget,v.isPressed=!0,W=b(S,"keyboard"),m(Cc(S.currentTarget),"keyup",R,!1)),W&&S.stopPropagation(),S.metaKey&&xh()&&((X=v.metaKeyEvents)===null||X===void 0||X.set(S.key,S.nativeEvent))}else S.key==="Meta"&&(v.metaKeyEvents=new Map)},onKeyUp(S){Px(S.nativeEvent,S.currentTarget)&&!S.repeat&&S.currentTarget.contains(S.target)&&v.target&&y(UA(v.target,S),"keyboard")},onClick(S){if(!(S&&!S.currentTarget.contains(S.target))&&S&&S.button===0&&!v.isTriggeringEvent&&!Eh.isOpening){let X=!0;if(r&&S.preventDefault(),!v.ignoreClickAfterPress&&!v.ignoreEmulatedMouseEvents&&!v.isPressed&&(v.pointerType==="virtual"||B_(S.nativeEvent))){!r&&!a&&vs(S.currentTarget);let W=b(S,"virtual"),V=y(S,"virtual"),H=p(S,"virtual");X=W&&V&&H}v.ignoreEmulatedMouseEvents=!1,v.ignoreClickAfterPress=!1,X&&S.stopPropagation()}}},R=S=>{var X;if(v.isPressed&&v.target&&Px(S,v.target)){var W;Tce(S.target,S.key)&&S.preventDefault();let H=S.target,Y=p(UA(v.target,S),"keyboard",v.target.contains(H));f(),Y&&S.stopPropagation(),S.key!=="Enter"&&u8(v.target)&&v.target.contains(H)&&!S[Xce]&&(S[Xce]=!0,Eh(v.target,S,!1)),v.isPressed=!1,(W=v.metaKeyEvents)===null||W===void 0||W.delete(S.key)}else if(S.key==="Meta"&&(!((X=v.metaKeyEvents)===null||X===void 0)&&X.size)){var V;let H=v.metaKeyEvents;v.metaKeyEvents=void 0;for(let Y of H.values())(V=v.target)===null||V===void 0||V.dispatchEvent(new KeyboardEvent("keyup",Y))}};if(typeof PointerEvent<"u"){w.onPointerDown=V=>{if(V.button!==0||!V.currentTarget.contains(V.target))return;if(rrg(V.nativeEvent)){v.pointerType="virtual";return}Jx(V.currentTarget)&&V.preventDefault(),v.pointerType=V.pointerType;let H=!0;v.isPressed||(v.isPressed=!0,v.isOverTarget=!0,v.activePointerId=V.pointerId,v.target=V.currentTarget,!r&&!a&&vs(V.currentTarget),A||Wce(v.target),H=b(V,v.pointerType),m(Cc(V.currentTarget),"pointermove",S,!1),m(Cc(V.currentTarget),"pointerup",X,!1),m(Cc(V.currentTarget),"pointercancel",W,!1)),H&&V.stopPropagation()},w.onMouseDown=V=>{V.currentTarget.contains(V.target)&&V.button===0&&(Jx(V.currentTarget)&&V.preventDefault(),V.stopPropagation())},w.onPointerUp=V=>{!V.currentTarget.contains(V.target)||v.pointerType==="virtual"||V.button===0&&of(V,V.currentTarget)&&y(V,v.pointerType||V.pointerType)};let S=V=>{V.pointerId===v.activePointerId&&(v.target&&of(V,v.target)?!v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!0,b(UA(v.target,V),v.pointerType)):v.target&&v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!1,p(UA(v.target,V),v.pointerType,!1),B(V)))},X=V=>{V.pointerId===v.activePointerId&&v.isPressed&&V.button===0&&v.target&&(of(V,v.target)&&v.pointerType!=null?p(UA(v.target,V),v.pointerType):v.isOverTarget&&v.pointerType!=null&&p(UA(v.target,V),v.pointerType,!1),v.isPressed=!1,v.isOverTarget=!1,v.activePointerId=null,v.pointerType=null,f(),A||l1(v.target))},W=V=>{Z(V)};w.onDragStart=V=>{V.currentTarget.contains(V.target)&&Z(V)}}else{w.onMouseDown=W=>{if(W.button!==0||!W.currentTarget.contains(W.target))return;if(Jx(W.currentTarget)&&W.preventDefault(),v.ignoreEmulatedMouseEvents){W.stopPropagation();return}v.isPressed=!0,v.isOverTarget=!0,v.target=W.currentTarget,v.pointerType=B_(W.nativeEvent)?"virtual":"mouse",!r&&!a&&vs(W.currentTarget),b(W,v.pointerType)&&W.stopPropagation(),m(Cc(W.currentTarget),"mouseup",S,!1)},w.onMouseEnter=W=>{if(!W.currentTarget.contains(W.target))return;let V=!0;v.isPressed&&!v.ignoreEmulatedMouseEvents&&v.pointerType!=null&&(v.isOverTarget=!0,V=b(W,v.pointerType)),V&&W.stopPropagation()},w.onMouseLeave=W=>{if(!W.currentTarget.contains(W.target))return;let V=!0;v.isPressed&&!v.ignoreEmulatedMouseEvents&&v.pointerType!=null&&(v.isOverTarget=!1,V=p(W,v.pointerType,!1),B(W)),V&&W.stopPropagation()},w.onMouseUp=W=>{W.currentTarget.contains(W.target)&&!v.ignoreEmulatedMouseEvents&&W.button===0&&y(W,v.pointerType||"mouse")};let S=W=>{if(W.button===0){if(v.isPressed=!1,f(),v.ignoreEmulatedMouseEvents){v.ignoreEmulatedMouseEvents=!1;return}v.target&&of(W,v.target)&&v.pointerType!=null?p(UA(v.target,W),v.pointerType):v.target&&v.isOverTarget&&v.pointerType!=null&&p(UA(v.target,W),v.pointerType,!1),v.isOverTarget=!1}};w.onTouchStart=W=>{if(!W.currentTarget.contains(W.target))return;let V=drg(W.nativeEvent);if(!V)return;v.activePointerId=V.identifier,v.ignoreEmulatedMouseEvents=!0,v.isOverTarget=!0,v.isPressed=!0,v.target=W.currentTarget,v.pointerType="touch",!r&&!a&&vs(W.currentTarget),A||Wce(v.target),b(W,v.pointerType)&&W.stopPropagation(),m(YH(W.currentTarget),"scroll",X,!0)},w.onTouchMove=W=>{if(!W.currentTarget.contains(W.target))return;if(!v.isPressed){W.stopPropagation();return}let V=Hce(W.nativeEvent,v.activePointerId),H=!0;V&&of(V,W.currentTarget)?!v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!0,H=b(W,v.pointerType)):v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!1,H=p(W,v.pointerType,!1),B(W)),H&&W.stopPropagation()},w.onTouchEnd=W=>{if(!W.currentTarget.contains(W.target))return;if(!v.isPressed){W.stopPropagation();return}let V=Hce(W.nativeEvent,v.activePointerId),H=!0;V&&of(V,W.currentTarget)&&v.pointerType!=null?(y(W,v.pointerType),H=p(W,v.pointerType)):v.isOverTarget&&v.pointerType!=null&&(H=p(W,v.pointerType,!1)),H&&W.stopPropagation(),v.isPressed=!1,v.activePointerId=null,v.isOverTarget=!1,v.ignoreEmulatedMouseEvents=!0,v.target&&!A&&l1(v.target),f()},w.onTouchCancel=W=>{W.currentTarget.contains(W.target)&&(W.stopPropagation(),v.isPressed&&Z(W))};let X=W=>{v.isPressed&&W.target.contains(v.target)&&Z({currentTarget:v.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})};w.onDragStart=W=>{W.currentTarget.contains(W.target)&&Z(W)}}return w},[m,r,a,f,A,Z,B,p,b,y]);return U.useEffect(()=>()=>{var v;A||l1((v=h.current.target)!==null&&v!==void 0?v:void 0)},[A]),{isPressed:o||u,pressProps:Gi(c,G)}}function u8(e){return e.tagName==="A"&&e.hasAttribute("href")}function Px(e,g){const{key:I,code:i}=e,n=g,C=n.getAttribute("role");return(I==="Enter"||I===" "||I==="Spacebar"||i==="Space")&&!(n instanceof YH(n).HTMLInputElement&&!XHe(n,I)||n instanceof YH(n).HTMLTextAreaElement||n.isContentEditable)&&!((C==="link"||!C&&u8(n))&&I!=="Enter")}function drg(e){const{targetTouches:g}=e;return g.length>0?g[0]:null}function Hce(e,g){const I=e.changedTouches;for(let i=0;ig.right||g.left>e.right||e.top>g.bottom||g.top>e.bottom)}function of(e,g){let I=g.getBoundingClientRect(),i=hrg(e);return mrg(I,i)}function Jx(e){return!(e instanceof HTMLElement)||!e.hasAttribute("draggable")}function Tce(e,g){return e instanceof HTMLInputElement?!XHe(e,g):e instanceof HTMLButtonElement?e.type!=="submit"&&e.type!=="reset":!u8(e)}const frg=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function XHe(e,g){return e.type==="checkbox"||e.type==="radio"?g===" ":frg.has(e.type)}class prg{isDefaultPrevented(){return this.nativeEvent.defaultPrevented}preventDefault(){this.defaultPrevented=!0,this.nativeEvent.preventDefault()}stopPropagation(){this.nativeEvent.stopPropagation(),this.isPropagationStopped=()=>!0}isPropagationStopped(){return!1}persist(){}constructor(g,I){this.nativeEvent=I,this.target=I.target,this.currentTarget=I.currentTarget,this.relatedTarget=I.relatedTarget,this.bubbles=I.bubbles,this.cancelable=I.cancelable,this.defaultPrevented=I.defaultPrevented,this.eventPhase=I.eventPhase,this.isTrusted=I.isTrusted,this.timeStamp=I.timeStamp,this.type=g}}function HHe(e){let g=U.useRef({isFocused:!1,observer:null});bi(()=>{const i=g.current;return()=>{i.observer&&(i.observer.disconnect(),i.observer=null)}},[]);let I=or(i=>{e==null||e(i)});return U.useCallback(i=>{if(i.target instanceof HTMLButtonElement||i.target instanceof HTMLInputElement||i.target instanceof HTMLTextAreaElement||i.target instanceof HTMLSelectElement){g.current.isFocused=!0;let n=i.target,C=r=>{g.current.isFocused=!1,n.disabled&&I(new prg("blur",r)),g.current.observer&&(g.current.observer.disconnect(),g.current.observer=null)};n.addEventListener("focusout",C,{once:!0}),g.current.observer=new MutationObserver(()=>{if(g.current.isFocused&&n.disabled){var r;(r=g.current.observer)===null||r===void 0||r.disconnect();let o=n===document.activeElement?null:document.activeElement;n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o}))}}),g.current.observer.observe(n,{attributes:!0,attributeFilter:["disabled"]})}},[I])}function THe(e){let{isDisabled:g,onFocus:I,onBlur:i,onFocusChange:n}=e;const C=U.useCallback(a=>{if(a.target===a.currentTarget)return i&&i(a),n&&n(!1),!0},[i,n]),r=HHe(C),o=U.useCallback(a=>{a.target===a.currentTarget&&document.activeElement===a.target&&(I&&I(a),n&&n(!0),r(a))},[n,I,r]);return{focusProps:{onFocus:!g&&(I||n||i)?o:void 0,onBlur:!g&&(i||n)?C:void 0}}}let _s=null,uS=new Set,Nce=!1,Mh=!1,w_=!1;const brg={Tab:!0,Escape:!0};function iY(e,g){for(let I of uS)I(e,g)}function yrg(e){return!(e.metaKey||!xh()&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function kce(e){Mh=!0,yrg(e)&&(_s="keyboard",iY("keyboard",e))}function af(e){_s="pointer",(e.type==="mousedown"||e.type==="pointerdown")&&(Mh=!0,iY("pointer",e))}function Zrg(e){B_(e)&&(Mh=!0,_s="virtual")}function Grg(e){e.target===window||e.target===document||(!Mh&&!w_&&(_s="virtual",iY("virtual",e)),Mh=!1,w_=!1)}function vrg(){Mh=!1,w_=!0}function DH(){if(typeof window>"u"||Nce)return;let e=HTMLElement.prototype.focus;HTMLElement.prototype.focus=function(){Mh=!0,e.apply(this,arguments)},document.addEventListener("keydown",kce,!0),document.addEventListener("keyup",kce,!0),document.addEventListener("click",Zrg,!0),window.addEventListener("focus",Grg,!0),window.addEventListener("blur",vrg,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",af,!0),document.addEventListener("pointermove",af,!0),document.addEventListener("pointerup",af,!0)):(document.addEventListener("mousedown",af,!0),document.addEventListener("mousemove",af,!0),document.addEventListener("mouseup",af,!0)),Nce=!0}typeof document<"u"&&(document.readyState!=="loading"?DH():document.addEventListener("DOMContentLoaded",DH));function d8(){return _s!=="pointer"}function R_(){return _s}function Brg(e){_s=e,iY(e,null)}function Srg(){DH();let[e,g]=U.useState(_s);return U.useEffect(()=>{let I=()=>{g(_s)};return uS.add(I),()=>{uS.delete(I)}},[]),Dw()?null:e}const wrg=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function Rrg(e,g,I){var i;return e=e||(I==null?void 0:I.target)instanceof HTMLInputElement&&!wrg.has(I==null||(i=I.target)===null||i===void 0?void 0:i.type)||(I==null?void 0:I.target)instanceof HTMLTextAreaElement||(I==null?void 0:I.target)instanceof HTMLElement&&(I==null?void 0:I.target.isContentEditable),!(e&&g==="keyboard"&&I instanceof KeyboardEvent&&!brg[I.key])}function Vrg(e,g,I){DH(),U.useEffect(()=>{let i=(n,C)=>{Rrg(!!(I!=null&&I.isTextInput),n,C)&&e(d8())};return uS.add(i),()=>{uS.delete(i)}},g)}function NHe(e){let{isDisabled:g,onBlurWithin:I,onFocusWithin:i,onFocusWithinChange:n}=e,C=U.useRef({isFocusWithin:!1}),r=U.useCallback(s=>{C.current.isFocusWithin&&!s.currentTarget.contains(s.relatedTarget)&&(C.current.isFocusWithin=!1,I&&I(s),n&&n(!1))},[I,n,C]),o=HHe(r),a=U.useCallback(s=>{!C.current.isFocusWithin&&document.activeElement===s.target&&(i&&i(s),n&&n(!0),C.current.isFocusWithin=!0,o(s))},[i,n,o]);return g?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:a,onBlur:r}}}let xH=!1,Ox=0;function V_(){xH=!0,setTimeout(()=>{xH=!1},50)}function Yce(e){e.pointerType==="touch"&&V_()}function Wrg(){if(!(typeof document>"u"))return typeof PointerEvent<"u"?document.addEventListener("pointerup",Yce):document.addEventListener("touchend",V_),Ox++,()=>{Ox--,!(Ox>0)&&(typeof PointerEvent<"u"?document.removeEventListener("pointerup",Yce):document.removeEventListener("touchend",V_))}}function h8(e){let{onHoverStart:g,onHoverChange:I,onHoverEnd:i,isDisabled:n}=e,[C,r]=U.useState(!1),o=U.useRef({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;U.useEffect(Wrg,[]);let{hoverProps:a,triggerHoverEnd:s}=U.useMemo(()=>{let A=(u,d)=>{if(o.pointerType=d,n||d==="touch"||o.isHovered||!u.currentTarget.contains(u.target))return;o.isHovered=!0;let h=u.currentTarget;o.target=h,g&&g({type:"hoverstart",target:h,pointerType:d}),I&&I(!0),r(!0)},l=(u,d)=>{if(o.pointerType="",o.target=null,d==="touch"||!o.isHovered)return;o.isHovered=!1;let h=u.currentTarget;i&&i({type:"hoverend",target:h,pointerType:d}),I&&I(!1),r(!1)},c={};return typeof PointerEvent<"u"?(c.onPointerEnter=u=>{xH&&u.pointerType==="mouse"||A(u,u.pointerType)},c.onPointerLeave=u=>{!n&&u.currentTarget.contains(u.target)&&l(u,u.pointerType)}):(c.onTouchStart=()=>{o.ignoreEmulatedMouseEvents=!0},c.onMouseEnter=u=>{!o.ignoreEmulatedMouseEvents&&!xH&&A(u,"mouse"),o.ignoreEmulatedMouseEvents=!1},c.onMouseLeave=u=>{!n&&u.currentTarget.contains(u.target)&&l(u,"mouse")}),{hoverProps:c,triggerHoverEnd:l}},[g,I,i,n,o]);return U.useEffect(()=>{n&&s({currentTarget:o.target},o.pointerType)},[n]),{hoverProps:a,isHovered:C}}function Kce(e){if(!e)return;let g=!0;return I=>{let i={...I,preventDefault(){I.preventDefault()},isDefaultPrevented(){return I.isDefaultPrevented()},stopPropagation(){console.error("stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.")},continuePropagation(){g=!1}};e(i),g&&I.stopPropagation()}}function Xrg(e){return{keyboardProps:e.isDisabled?{}:{onKeyDown:Kce(e.onKeyDown),onKeyUp:Kce(e.onKeyUp)}}}const Hrg=500;function Trg(e){let{isDisabled:g,onLongPressStart:I,onLongPressEnd:i,onLongPress:n,threshold:C=Hrg,accessibilityDescription:r}=e;const o=U.useRef();let{addGlobalListener:a,removeGlobalListener:s}=BHe(),{pressProps:A}=c8({isDisabled:g,onPressStart(c){if(c.continuePropagation(),(c.pointerType==="mouse"||c.pointerType==="touch")&&(I&&I({...c,type:"longpressstart"}),o.current=setTimeout(()=>{c.target.dispatchEvent(new PointerEvent("pointercancel",{bubbles:!0})),n&&n({...c,type:"longpress"}),o.current=void 0},C),c.pointerType==="touch")){let u=d=>{d.preventDefault()};a(c.target,"contextmenu",u,{once:!0}),a(window,"pointerup",()=>{setTimeout(()=>{s(c.target,"contextmenu",u)},30)},{once:!0})}},onPressEnd(c){o.current&&clearTimeout(o.current),i&&(c.pointerType==="mouse"||c.pointerType==="touch")&&i({...c,type:"longpressend"})}}),l=IY(n&&!g?r:void 0);return{longPressProps:Gi(A,l)}}function tr(e){if(R_()==="virtual"){let g=document.activeElement;vHe(()=>{document.activeElement===g&&document.contains(e)&&vs(e)})}else vs(e)}function Nrg(e){if(!(e instanceof HTMLElement)&&!(e instanceof SVGElement))return!1;let{display:g,visibility:I}=e.style,i=g!=="none"&&I!=="hidden"&&I!=="collapse";if(i){const{getComputedStyle:n}=e.ownerDocument.defaultView;let{display:C,visibility:r}=n(e);i=C!=="none"&&r!=="hidden"&&r!=="collapse"}return i}function krg(e,g){return!e.hasAttribute("hidden")&&(e.nodeName==="DETAILS"&&g&&g.nodeName!=="SUMMARY"?e.hasAttribute("open"):!0)}function kHe(e,g){return e.nodeName!=="#comment"&&Nrg(e)&&krg(e,g)&&(!e.parentElement||kHe(e.parentElement,e))}const Fce=N.createContext(null);let mI=null;function Yrg(e){let{children:g,contain:I,restoreFocus:i,autoFocus:n}=e,C=U.useRef(null),r=U.useRef(null),o=U.useRef([]),{parentNode:a}=U.useContext(Fce)||{},s=U.useMemo(()=>new X_({scopeRef:o}),[o]);bi(()=>{let c=a||di.root;if(di.getTreeNode(c.scopeRef)&&mI&&!EH(mI,c.scopeRef)){let u=di.getTreeNode(mI);u&&(c=u)}c.addChild(s),di.addNode(s)},[s,a]),bi(()=>{let c=di.getTreeNode(o);c&&(c.contain=!!I)},[I]),bi(()=>{var c;let u=(c=C.current)===null||c===void 0?void 0:c.nextSibling,d=[];for(;u&&u!==r.current;)d.push(u),u=u.nextSibling;o.current=d},[g]),Mrg(o,i,I),xrg(o,I),Prg(o,i,I),Erg(o,n),U.useEffect(()=>{let c=document.activeElement,u=null;if(Yn(c,o.current)){for(let d of di.traverse())d.scopeRef&&Yn(c,d.scopeRef.current)&&(u=d);u===di.getTreeNode(o)&&(mI=u.scopeRef)}},[o]),bi(()=>()=>{var c,u,d;let h=(d=(u=di.getTreeNode(o))===null||u===void 0||(c=u.parent)===null||c===void 0?void 0:c.scopeRef)!==null&&d!==void 0?d:null;(o===mI||EH(o,mI))&&(!h||di.getTreeNode(h))&&(mI=h),di.removeTreeNode(o)},[o]);let A=U.useMemo(()=>Krg(o),[]),l=U.useMemo(()=>({focusManager:A,parentNode:s}),[s,A]);return N.createElement(Fce.Provider,{value:l},N.createElement("span",{"data-focus-scope-start":!0,hidden:!0,ref:C}),g,N.createElement("span",{"data-focus-scope-end":!0,hidden:!0,ref:r}))}function Krg(e){return{focusNext(g={}){let I=e.current,{from:i,tabbable:n,wrap:C,accept:r}=g,o=i||document.activeElement,a=I[0].previousElementSibling,s=bd(I),A=$r(s,{tabbable:n,accept:r},I);A.currentNode=Yn(o,I)?o:a;let l=A.nextNode();return!l&&C&&(A.currentNode=a,l=A.nextNode()),l&&Bs(l,!0),l},focusPrevious(g={}){let I=e.current,{from:i,tabbable:n,wrap:C,accept:r}=g,o=i||document.activeElement,a=I[I.length-1].nextElementSibling,s=bd(I),A=$r(s,{tabbable:n,accept:r},I);A.currentNode=Yn(o,I)?o:a;let l=A.previousNode();return!l&&C&&(A.currentNode=a,l=A.previousNode()),l&&Bs(l,!0),l},focusFirst(g={}){let I=e.current,{tabbable:i,accept:n}=g,C=bd(I),r=$r(C,{tabbable:i,accept:n},I);r.currentNode=I[0].previousElementSibling;let o=r.nextNode();return o&&Bs(o,!0),o},focusLast(g={}){let I=e.current,{tabbable:i,accept:n}=g,C=bd(I),r=$r(C,{tabbable:i,accept:n},I);r.currentNode=I[I.length-1].nextElementSibling;let o=r.previousNode();return o&&Bs(o,!0),o}}}const m8=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[contenteditable]"],Frg=m8.join(":not([hidden]),")+",[tabindex]:not([disabled]):not([hidden])";m8.push('[tabindex]:not([tabindex="-1"]):not([disabled])');const Drg=m8.join(':not([hidden]):not([tabindex="-1"]),');function bd(e){return e[0].parentElement}function ZG(e){let g=di.getTreeNode(mI);for(;g&&g.scopeRef!==e;){if(g.contain)return!1;g=g.parent}return!0}function xrg(e,g){let I=U.useRef(),i=U.useRef();bi(()=>{let n=e.current;if(!g){i.current&&(cancelAnimationFrame(i.current),i.current=void 0);return}let C=a=>{if(a.key!=="Tab"||a.altKey||a.ctrlKey||a.metaKey||!ZG(e))return;let s=document.activeElement,A=e.current;if(!A||!Yn(s,A))return;let l=bd(A),c=$r(l,{tabbable:!0},A);if(!s)return;c.currentNode=s;let u=a.shiftKey?c.previousNode():c.nextNode();u||(c.currentNode=a.shiftKey?A[A.length-1].nextElementSibling:A[0].previousElementSibling,u=a.shiftKey?c.previousNode():c.nextNode()),a.preventDefault(),u&&Bs(u,!0)},r=a=>{(!mI||EH(mI,e))&&Yn(a.target,e.current)?(mI=e,I.current=a.target):ZG(e)&&!W_(a.target,e)?I.current?I.current.focus():mI&&mI.current&&MH(mI.current):ZG(e)&&(I.current=a.target)},o=a=>{i.current&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>{if(document.activeElement&&ZG(e)&&!W_(document.activeElement,e))if(mI=e,document.body.contains(a.target)){var s;I.current=a.target,(s=I.current)===null||s===void 0||s.focus()}else mI.current&&MH(mI.current)})};return document.addEventListener("keydown",C,!1),document.addEventListener("focusin",r,!1),n==null||n.forEach(a=>a.addEventListener("focusin",r,!1)),n==null||n.forEach(a=>a.addEventListener("focusout",o,!1)),()=>{document.removeEventListener("keydown",C,!1),document.removeEventListener("focusin",r,!1),n==null||n.forEach(a=>a.removeEventListener("focusin",r,!1)),n==null||n.forEach(a=>a.removeEventListener("focusout",o,!1))}},[e,g]),bi(()=>()=>{i.current&&cancelAnimationFrame(i.current)},[i])}function YHe(e){return W_(e)}function Yn(e,g){return!e||!g?!1:g.some(I=>I.contains(e))}function W_(e,g=null){if(e instanceof Element&&e.closest("[data-react-aria-top-layer]"))return!0;for(let{scopeRef:I}of di.traverse(di.getTreeNode(g)))if(I&&Yn(e,I.current))return!0;return!1}function EH(e,g){var I;let i=(I=di.getTreeNode(g))===null||I===void 0?void 0:I.parent;for(;i;){if(i.scopeRef===e)return!0;i=i.parent}return!1}function Bs(e,g=!1){if(e!=null&&!g)try{tr(e)}catch{}else if(e!=null)try{e.focus()}catch{}}function MH(e,g=!0){let I=e[0].previousElementSibling,i=bd(e),n=$r(i,{tabbable:g},e);n.currentNode=I;let C=n.nextNode();g&&!C&&(i=bd(e),n=$r(i,{tabbable:!1},e),n.currentNode=I,C=n.nextNode()),Bs(C)}function Erg(e,g){const I=N.useRef(g);U.useEffect(()=>{I.current&&(mI=e,!Yn(document.activeElement,mI.current)&&e.current&&MH(e.current)),I.current=!1},[e])}function Mrg(e,g,I){bi(()=>{if(g||I)return;let i=e.current,n=C=>{let r=C.target;Yn(r,e.current)?mI=e:YHe(r)||(mI=null)};return document.addEventListener("focusin",n,!1),i==null||i.forEach(C=>C.addEventListener("focusin",n,!1)),()=>{document.removeEventListener("focusin",n,!1),i==null||i.forEach(C=>C.removeEventListener("focusin",n,!1))}},[e,g,I])}function zrg(e){let g=di.getTreeNode(mI);for(;g&&g.scopeRef!==e;){if(g.nodeToRestore)return!1;g=g.parent}return(g==null?void 0:g.scopeRef)===e}function Prg(e,g,I){const i=U.useRef(typeof document<"u"?document.activeElement:null);bi(()=>{let n=e.current;if(!g||I)return;let C=()=>{(!mI||EH(mI,e))&&Yn(document.activeElement,e.current)&&(mI=e)};return document.addEventListener("focusin",C,!1),n==null||n.forEach(r=>r.addEventListener("focusin",C,!1)),()=>{document.removeEventListener("focusin",C,!1),n==null||n.forEach(r=>r.removeEventListener("focusin",C,!1))}},[e,I]),bi(()=>{if(!g)return;let n=C=>{if(C.key!=="Tab"||C.altKey||C.ctrlKey||C.metaKey||!ZG(e))return;let r=document.activeElement;if(!Yn(r,e.current))return;let o=di.getTreeNode(e);if(!o)return;let a=o.nodeToRestore,s=$r(document.body,{tabbable:!0});s.currentNode=r;let A=C.shiftKey?s.previousNode():s.nextNode();if((!a||!document.body.contains(a)||a===document.body)&&(a=void 0,o.nodeToRestore=void 0),(!A||!Yn(A,e.current))&&a){s.currentNode=a;do A=C.shiftKey?s.previousNode():s.nextNode();while(Yn(A,e.current));C.preventDefault(),C.stopPropagation(),A?Bs(A,!0):YHe(a)?Bs(a,!0):r.blur()}};return I||document.addEventListener("keydown",n,!0),()=>{I||document.removeEventListener("keydown",n,!0)}},[e,g,I]),bi(()=>{if(!g)return;let n=di.getTreeNode(e);if(n){var C;return n.nodeToRestore=(C=i.current)!==null&&C!==void 0?C:void 0,()=>{let r=di.getTreeNode(e);if(!r)return;let o=r.nodeToRestore;if(g&&o&&(Yn(document.activeElement,e.current)||document.activeElement===document.body&&zrg(e))){let a=di.clone();requestAnimationFrame(()=>{if(document.activeElement===document.body){let s=a.getTreeNode(e);for(;s;){if(s.nodeToRestore&&document.body.contains(s.nodeToRestore)){Bs(s.nodeToRestore);return}s=s.parent}for(s=a.getTreeNode(e);s;){if(s.scopeRef&&s.scopeRef.current&&di.getTreeNode(s.scopeRef)){MH(s.scopeRef.current,!0);return}s=s.parent}}})}}}},[e,g])}function $r(e,g,I){let i=g!=null&&g.tabbable?Drg:Frg,n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode(C){var r;return!(g==null||(r=g.from)===null||r===void 0)&&r.contains(C)?NodeFilter.FILTER_REJECT:C.matches(i)&&kHe(C)&&(!I||Yn(C,I))&&(!(g!=null&&g.accept)||g.accept(C))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});return g!=null&&g.from&&(n.currentNode=g.from),n}class f8{get size(){return this.fastMap.size}getTreeNode(g){return this.fastMap.get(g)}addTreeNode(g,I,i){let n=this.fastMap.get(I??null);if(!n)return;let C=new X_({scopeRef:g});n.addChild(C),C.parent=n,this.fastMap.set(g,C),i&&(C.nodeToRestore=i)}addNode(g){this.fastMap.set(g.scopeRef,g)}removeTreeNode(g){if(g===null)return;let I=this.fastMap.get(g);if(!I)return;let i=I.parent;for(let C of this.traverse())C!==I&&I.nodeToRestore&&C.nodeToRestore&&I.scopeRef&&I.scopeRef.current&&Yn(C.nodeToRestore,I.scopeRef.current)&&(C.nodeToRestore=I.nodeToRestore);let n=I.children;i&&(i.removeChild(I),n.size>0&&n.forEach(C=>i&&i.addChild(C))),this.fastMap.delete(I.scopeRef)}*traverse(g=this.root){if(g.scopeRef!=null&&(yield g),g.children.size>0)for(let I of g.children)yield*this.traverse(I)}clone(){var g;let I=new f8;var i;for(let n of this.traverse())I.addTreeNode(n.scopeRef,(i=(g=n.parent)===null||g===void 0?void 0:g.scopeRef)!==null&&i!==void 0?i:null,n.nodeToRestore);return I}constructor(){this.fastMap=new Map,this.root=new X_({scopeRef:null}),this.fastMap.set(null,this.root)}}class X_{addChild(g){this.children.add(g),g.parent=this}removeChild(g){this.children.delete(g),g.parent=void 0}constructor(g){this.children=new Set,this.contain=!1,this.scopeRef=g.scopeRef}}let di=new f8;function nY(e={}){let{autoFocus:g=!1,isTextInput:I,within:i}=e,n=U.useRef({isFocused:!1,isFocusVisible:g||d8()}),[C,r]=U.useState(!1),[o,a]=U.useState(()=>n.current.isFocused&&n.current.isFocusVisible),s=U.useCallback(()=>a(n.current.isFocused&&n.current.isFocusVisible),[]),A=U.useCallback(u=>{n.current.isFocused=u,r(u),s()},[s]);Vrg(u=>{n.current.isFocusVisible=u,s()},[],{isTextInput:I});let{focusProps:l}=THe({isDisabled:i,onFocusChange:A}),{focusWithinProps:c}=NHe({isDisabled:!i,onFocusWithinChange:A});return{isFocused:C,isFocusVisible:o,focusProps:i?c:l}}let Jrg=N.createContext(null);function Org(e){let g=U.useContext(Jrg)||{};wHe(g,e);let{ref:I,...i}=g;return i}function KHe(e,g){let{focusProps:I}=THe(e),{keyboardProps:i}=Xrg(e),n=Gi(I,i),C=Org(g),r=e.isDisabled?{}:C,o=U.useRef(e.autoFocus);return U.useEffect(()=>{o.current&&g.current&&tr(g.current),o.current=!1},[g]),{focusableProps:Gi({...n,tabIndex:e.excludeFromTabOrder&&!e.isDisabled?-1:void 0},r)}}function _rg(e,g){let I=g==null?void 0:g.isDisabled,[i,n]=U.useState(!1);return bi(()=>{if(e!=null&&e.current&&!I){let C=()=>{if(e.current){let o=$r(e.current,{tabbable:!0});n(!!o.nextNode())}};C();let r=new MutationObserver(C);return r.observe(e.current,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["tabIndex","disabled"]}),()=>{r.disconnect()}}}),I?!1:i}class Lrg{getStringForLocale(g,I){let i=this.strings[I];i||(i=Urg(I,this.strings,this.defaultLocale),this.strings[I]=i);let n=i[g];if(!n)throw new Error(`Could not find intl message ${g} in ${I} locale`);return n}constructor(g,I="en-US"){this.strings={...g},this.defaultLocale=I}}function Urg(e,g,I="en-US"){if(g[e])return g[e];let i=Qrg(e);if(g[i])return g[i];for(let n in g)if(n.startsWith(i+"-"))return g[n];return g[I]}function Qrg(e){return Intl.Locale?new Intl.Locale(e).language:e.split("-")[0]}const Dce=new Map,xce=new Map;class jrg{format(g,I){let i=this.strings.getStringForLocale(g,this.locale);return typeof i=="function"?i(I,this):i}plural(g,I,i="cardinal"){let n=I["="+g];if(n)return typeof n=="function"?n():n;let C=this.locale+":"+i,r=Dce.get(C);r||(r=new Intl.PluralRules(this.locale,{type:i}),Dce.set(C,r));let o=r.select(g);return n=I[o]||I.other,typeof n=="function"?n():n}number(g){let I=xce.get(this.locale);return I||(I=new Intl.NumberFormat(this.locale),xce.set(this.locale,I)),I.format(g)}select(g,I){let i=g[I]||g.other;return typeof i=="function"?i():i}constructor(g,I){this.locale=g,this.strings=I}}const $rg=new Set(["Arab","Syrc","Samr","Mand","Thaa","Mend","Nkoo","Adlm","Rohg","Hebr"]),qrg=new Set(["ae","ar","arc","bcc","bqi","ckb","dv","fa","glk","he","ku","mzn","nqo","pnb","ps","sd","ug","ur","yi"]);function eog(e){if(Intl.Locale){let I=new Intl.Locale(e).maximize().script;return I?$rg.has(I):!1}let g=e.split("-")[0];return qrg.has(g)}function FHe(){let e=typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en-US";try{Intl.DateTimeFormat.supportedLocalesOf([e])}catch{e="en-US"}return{locale:e,direction:eog(e)?"rtl":"ltr"}}let H_=FHe(),GG=new Set;function Ece(){H_=FHe();for(let e of GG)e(H_)}function tog(){let e=Dw(),[g,I]=U.useState(H_);return U.useEffect(()=>(GG.size===0&&window.addEventListener("languagechange",Ece),GG.add(I),()=>{GG.delete(I),GG.size===0&&window.removeEventListener("languagechange",Ece)}),[]),e?{locale:"en-US",direction:"ltr"}:g}const gog=N.createContext(null);function Gm(){let e=tog();return U.useContext(gog)||e}const Mce=new WeakMap;function Iog(e){let g=Mce.get(e);return g||(g=new Lrg(e),Mce.set(e,g)),g}function my(e){let{locale:g}=Gm(),I=U.useMemo(()=>Iog(e),[e]);return U.useMemo(()=>new jrg(g,I),[g,I])}let _x=new Map;function DHe(e){let{locale:g}=Gm(),I=g+(e?Object.entries(e).sort((n,C)=>n[0]{n.remove()},i)}clear(g){this.node&&((!g||g==="assertive")&&(this.assertiveLog.innerHTML=""),(!g||g==="polite")&&(this.politeLog.innerHTML=""))}constructor(){this.node=document.createElement("div"),this.node.dataset.liveAnnouncer="true",Object.assign(this.node.style,{border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"}),this.assertiveLog=this.createLog("assertive"),this.node.appendChild(this.assertiveLog),this.politeLog=this.createLog("polite"),this.node.appendChild(this.politeLog),document.body.prepend(this.node)}}function nog(e,g,I){let{validationBehavior:i,focus:n}=e;bi(()=>{if(i==="native"&&(I!=null&&I.current)){let a=g.realtimeValidation.isInvalid?g.realtimeValidation.validationErrors.join(" ")||"Invalid value.":"";I.current.setCustomValidity(a),I.current.hasAttribute("title")||(I.current.title=""),g.realtimeValidation.isInvalid||g.updateValidation(rog(I.current))}});let C=or(()=>{g.resetValidation()}),r=or(a=>{var s;g.displayValidation.isInvalid||g.commitValidation();let A=I==null||(s=I.current)===null||s===void 0?void 0:s.form;if(!a.defaultPrevented&&I&&A&&oog(A)===I.current){var l;n?n():(l=I.current)===null||l===void 0||l.focus(),Brg("keyboard")}a.preventDefault()}),o=or(()=>{g.commitValidation()});U.useEffect(()=>{let a=I==null?void 0:I.current;if(!a)return;let s=a.form;return a.addEventListener("invalid",r),a.addEventListener("change",o),s==null||s.addEventListener("reset",C),()=>{a.removeEventListener("invalid",r),a.removeEventListener("change",o),s==null||s.removeEventListener("reset",C)}},[I,r,o,C,i])}function Cog(e){let g=e.validity;return{badInput:g.badInput,customError:g.customError,patternMismatch:g.patternMismatch,rangeOverflow:g.rangeOverflow,rangeUnderflow:g.rangeUnderflow,stepMismatch:g.stepMismatch,tooLong:g.tooLong,tooShort:g.tooShort,typeMismatch:g.typeMismatch,valueMissing:g.valueMissing,valid:g.valid}}function rog(e){return{isInvalid:!e.validity.valid,validationDetails:Cog(e),validationErrors:e.validationMessage?[e.validationMessage]:[]}}function oog(e){for(let g=0;gPce(log(r,n)),[r,n]);C!=null&&C.validationDetails.valid&&(C=null);let A=U.useContext(aog),l=U.useMemo(()=>i?Array.isArray(i)?i.flatMap(R=>T_(A[R])):T_(A[i]):[],[A,i]),[c,u]=U.useState(A),[d,h]=U.useState(!1);A!==c&&(u(A),h(!1));let m=U.useMemo(()=>Pce(d?[]:l),[d,l]),f=U.useRef(BZ),[b,p]=U.useState(BZ),y=U.useRef(BZ),Z=()=>{if(!B)return;G(!1);let R=s||C||f.current;Ux(R,y.current)||(y.current=R,p(R))},[B,G]=U.useState(!1);return U.useEffect(Z),{realtimeValidation:a||m||s||C||BZ,displayValidation:o==="native"?a||m||b:a||m||s||C||b,updateValidation(R){o==="aria"&&!Ux(b,R)?p(R):f.current=R},resetValidation(){let R=BZ;Ux(R,y.current)||(y.current=R,p(R)),o==="native"&&G(!1),h(!0)},commitValidation(){o==="native"&&G(!0),h(!0)}}}function T_(e){return e?Array.isArray(e)?e:[e]:[]}function log(e,g){if(typeof e=="function"){let I=e(g);if(I&&typeof I!="boolean")return T_(I)}return[]}function Pce(e){return e.length?{isInvalid:!0,validationErrors:e,validationDetails:zHe}:null}function Ux(e,g){return e===g?!0:e&&g&&e.isInvalid===g.isInvalid&&e.validationErrors.length===g.validationErrors.length&&e.validationErrors.every((I,i)=>I===g.validationErrors[i])&&Object.entries(e.validationDetails).every(([I,i])=>g.validationDetails[I]===i)}function cog(e){let{id:g,label:I,"aria-labelledby":i,"aria-label":n,labelElementType:C="label"}=e;g=Dh(g);let r=Dh(),o={};I?(i=i?`${r} ${i}`:r,o={id:r,htmlFor:C==="label"?g:void 0}):!i&&!n&&console.warn("If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility");let a=irg({id:g,"aria-label":n,"aria-labelledby":i});return{labelProps:o,fieldProps:a}}function uog(e){let{description:g,errorMessage:I,isInvalid:i,validationState:n}=e,{labelProps:C,fieldProps:r}=cog(e),o=Sce([!!g,!!I,i,n]),a=Sce([!!g,!!I,i,n]);return r=Gi(r,{"aria-describedby":[o,a,e["aria-describedby"]].filter(Boolean).join(" ")||void 0}),{labelProps:C,fieldProps:r,descriptionProps:{id:o},errorMessageProps:{id:a}}}const Jce={border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"};function p8(e={}){let{style:g,isFocusable:I}=e,[i,n]=U.useState(!1),{focusWithinProps:C}=NHe({isDisabled:!I,onFocusWithinChange:o=>n(o)}),r=U.useMemo(()=>i?g:g?{...Jce,...g}:Jce,[i]);return{visuallyHiddenProps:{...C,style:r}}}function N_(e){return QCg()?e.altKey:e.ctrlKey}function xf(e){return xh()?e.metaKey:e.ctrlKey}const dog=1e3;function hog(e){let{keyboardDelegate:g,selectionManager:I,onTypeSelect:i}=e,n=U.useRef({search:"",timeout:null}).current,C=r=>{let o=mog(r.key);if(!o||r.ctrlKey||r.metaKey||!r.currentTarget.contains(r.target))return;o===" "&&n.search.trim().length>0&&(r.preventDefault(),"continuePropagation"in r||r.stopPropagation()),n.search+=o;let a=g.getKeyForSearch(n.search,I.focusedKey);a==null&&(a=g.getKeyForSearch(n.search)),a!=null&&(I.setFocusedKey(a),i&&i(a)),clearTimeout(n.timeout),n.timeout=setTimeout(()=>{n.search=""},dog)};return{typeSelectProps:{onKeyDownCapture:g.getKeyForSearch?C:null}}}function mog(e){return e.length===1||!/^[A-Z]/i.test(e)?e:""}function fog(e){let{selectionManager:g,keyboardDelegate:I,ref:i,autoFocus:n=!1,shouldFocusWrap:C=!1,disallowEmptySelection:r=!1,disallowSelectAll:o=!1,selectOnFocus:a=g.selectionBehavior==="replace",disallowTypeAhead:s=!1,shouldUseVirtualFocus:A,allowsTabNavigation:l=!1,isVirtualized:c,scrollRef:u=i,linkBehavior:d="action"}=e,{direction:h}=Gm(),m=GHe(),f=R=>{if(R.altKey&&R.key==="Tab"&&R.preventDefault(),!i.current.contains(R.target))return;const S=(P,ge)=>{if(P!=null){if(g.isLink(P)&&d==="selection"&&a&&!N_(R)){sa.flushSync(()=>{g.setFocusedKey(P,ge)});let q=u.current.querySelector(`[data-key="${P}"]`);m.open(q,R);return}if(g.setFocusedKey(P,ge),g.isLink(P)&&d==="override")return;R.shiftKey&&g.selectionMode==="multiple"?g.extendSelection(P):a&&!N_(R)&&g.replaceSelection(P)}};switch(R.key){case"ArrowDown":if(I.getKeyBelow){var X,W;R.preventDefault();let P=g.focusedKey!=null?I.getKeyBelow(g.focusedKey):(X=I.getFirstKey)===null||X===void 0?void 0:X.call(I);P==null&&C&&(P=(W=I.getFirstKey)===null||W===void 0?void 0:W.call(I,g.focusedKey)),S(P)}break;case"ArrowUp":if(I.getKeyAbove){var V,H;R.preventDefault();let P=g.focusedKey!=null?I.getKeyAbove(g.focusedKey):(V=I.getLastKey)===null||V===void 0?void 0:V.call(I);P==null&&C&&(P=(H=I.getLastKey)===null||H===void 0?void 0:H.call(I,g.focusedKey)),S(P)}break;case"ArrowLeft":if(I.getKeyLeftOf){var Y,K;R.preventDefault();let P=I.getKeyLeftOf(g.focusedKey);P==null&&C&&(P=h==="rtl"?(Y=I.getFirstKey)===null||Y===void 0?void 0:Y.call(I,g.focusedKey):(K=I.getLastKey)===null||K===void 0?void 0:K.call(I,g.focusedKey)),S(P,h==="rtl"?"first":"last")}break;case"ArrowRight":if(I.getKeyRightOf){var x,J;R.preventDefault();let P=I.getKeyRightOf(g.focusedKey);P==null&&C&&(P=h==="rtl"?(x=I.getLastKey)===null||x===void 0?void 0:x.call(I,g.focusedKey):(J=I.getFirstKey)===null||J===void 0?void 0:J.call(I,g.focusedKey)),S(P,h==="rtl"?"last":"first")}break;case"Home":if(I.getFirstKey){R.preventDefault();let P=I.getFirstKey(g.focusedKey,xf(R));g.setFocusedKey(P),xf(R)&&R.shiftKey&&g.selectionMode==="multiple"?g.extendSelection(P):a&&g.replaceSelection(P)}break;case"End":if(I.getLastKey){R.preventDefault();let P=I.getLastKey(g.focusedKey,xf(R));g.setFocusedKey(P),xf(R)&&R.shiftKey&&g.selectionMode==="multiple"?g.extendSelection(P):a&&g.replaceSelection(P)}break;case"PageDown":if(I.getKeyPageBelow){R.preventDefault();let P=I.getKeyPageBelow(g.focusedKey);S(P)}break;case"PageUp":if(I.getKeyPageAbove){R.preventDefault();let P=I.getKeyPageAbove(g.focusedKey);S(P)}break;case"a":xf(R)&&g.selectionMode==="multiple"&&o!==!0&&(R.preventDefault(),g.selectAll());break;case"Escape":R.preventDefault(),r||g.clearSelection();break;case"Tab":if(!l){if(R.shiftKey)i.current.focus();else{let P=$r(i.current,{tabbable:!0}),ge,q;do q=P.lastChild(),q&&(ge=q);while(q);ge&&!ge.contains(document.activeElement)&&vs(ge)}break}}},b=U.useRef({top:0,left:0});Crg(u,"scroll",c?null:()=>{b.current={top:u.current.scrollTop,left:u.current.scrollLeft}});let p=R=>{if(g.isFocused){R.currentTarget.contains(R.target)||g.setFocused(!1);return}if(R.currentTarget.contains(R.target)){if(g.setFocused(!0),g.focusedKey==null){let W=H=>{H!=null&&(g.setFocusedKey(H),a&&g.replaceSelection(H))},V=R.relatedTarget;var S,X;V&&R.currentTarget.compareDocumentPosition(V)&Node.DOCUMENT_POSITION_FOLLOWING?W((S=g.lastSelectedKey)!==null&&S!==void 0?S:I.getLastKey()):W((X=g.firstSelectedKey)!==null&&X!==void 0?X:I.getFirstKey())}else c||(u.current.scrollTop=b.current.top,u.current.scrollLeft=b.current.left);if(!c&&g.focusedKey!=null){let W=u.current.querySelector(`[data-key="${g.focusedKey}"]`);W&&(W.contains(document.activeElement)||vs(W),R_()==="keyboard"&&Ll(W,{containingElement:i.current}))}}},y=R=>{R.currentTarget.contains(R.relatedTarget)||g.setFocused(!1)};const Z=U.useRef(n);U.useEffect(()=>{if(Z.current){let R=null;n==="first"&&(R=I.getFirstKey()),n==="last"&&(R=I.getLastKey());let S=g.selectedKeys;S.size&&(R=S.values().next().value),g.setFocused(!0),g.setFocusedKey(R),R==null&&!A&&tr(i.current)}Z.current=!1},[]);let B=U.useRef(g.focusedKey);U.useEffect(()=>{let R=R_();if(g.isFocused&&g.focusedKey!=null&&(u!=null&&u.current)){let S=u.current.querySelector(`[data-key="${g.focusedKey}"]`);S&&R==="keyboard"&&(c||RHe(u.current,S),Ll(S,{containingElement:i.current}))}g.isFocused&&g.focusedKey==null&&B.current!=null&&tr(i.current),B.current=g.focusedKey},[c,u,g.focusedKey,g.isFocused,i]);let G={onKeyDown:f,onFocus:p,onBlur:y,onMouseDown(R){u.current===R.target&&R.preventDefault()}},{typeSelectProps:v}=hog({keyboardDelegate:I,selectionManager:g});s||(G=Gi(v,G));let w;return A||(w=g.focusedKey==null?0:-1),{collectionProps:{...G,tabIndex:w}}}function PHe(e){let{selectionManager:g,key:I,ref:i,shouldSelectOnPressUp:n,shouldUseVirtualFocus:C,focus:r,isDisabled:o,onAction:a,allowsDifferentPressOrigin:s,linkBehavior:A="action"}=e,l=GHe(),c=K=>{if(K.pointerType==="keyboard"&&N_(K))g.toggleSelection(I);else{if(g.selectionMode==="none")return;if(g.isLink(I)){if(A==="selection"){l.open(i.current,K),g.setSelectedKeys(g.selectedKeys);return}else if(A==="override"||A==="none")return}g.selectionMode==="single"?g.isSelected(I)&&!g.disallowEmptySelection?g.toggleSelection(I):g.replaceSelection(I):K&&K.shiftKey?g.extendSelection(I):g.selectionBehavior==="toggle"||K&&(xf(K)||K.pointerType==="touch"||K.pointerType==="virtual")?g.toggleSelection(I):g.replaceSelection(I)}};U.useEffect(()=>{I===g.focusedKey&&g.isFocused&&!C&&(r?r():document.activeElement!==i.current&&tr(i.current))},[i,I,g.focusedKey,g.childFocusStrategy,g.isFocused,C]),o=o||g.isDisabled(I);let u={};!C&&!o?u={tabIndex:I===g.focusedKey?0:-1,onFocus(K){K.target===i.current&&g.setFocusedKey(I)}}:o&&(u.onMouseDown=K=>{K.preventDefault()});let d=g.isLink(I)&&A==="override",h=g.isLink(I)&&A!=="selection"&&A!=="none",m=!o&&g.canSelectItem(I)&&!d,f=(a||h)&&!o,b=f&&(g.selectionBehavior==="replace"?!m:!m||g.isEmpty),p=f&&m&&g.selectionBehavior==="replace",y=b||p,Z=U.useRef(null),B=y&&m,G=U.useRef(!1),v=U.useRef(!1),w=K=>{a&&a(),h&&l.open(i.current,K)},R={};n?(R.onPressStart=K=>{Z.current=K.pointerType,G.current=B,K.pointerType==="keyboard"&&(!y||_ce())&&c(K)},s?(R.onPressUp=b?null:K=>{K.pointerType!=="keyboard"&&m&&c(K)},R.onPress=b?w:null):R.onPress=K=>{if(b||p&&K.pointerType!=="mouse"){if(K.pointerType==="keyboard"&&!Oce())return;w(K)}else K.pointerType!=="keyboard"&&m&&c(K)}):(R.onPressStart=K=>{Z.current=K.pointerType,G.current=B,v.current=b,m&&(K.pointerType==="mouse"&&!b||K.pointerType==="keyboard"&&(!f||_ce()))&&c(K)},R.onPress=K=>{(K.pointerType==="touch"||K.pointerType==="pen"||K.pointerType==="virtual"||K.pointerType==="keyboard"&&y&&Oce()||K.pointerType==="mouse"&&v.current)&&(y?w(K):m&&c(K))}),u["data-key"]=I,R.preventFocusOnPress=C;let{pressProps:S,isPressed:X}=c8(R),W=p?K=>{Z.current==="mouse"&&(K.stopPropagation(),K.preventDefault(),w(K))}:void 0,{longPressProps:V}=Trg({isDisabled:!B,onLongPress(K){K.pointerType==="touch"&&(c(K),g.setSelectionBehavior("toggle"))}}),H=K=>{Z.current==="touch"&&G.current&&K.preventDefault()},Y=g.isLink(I)?K=>{Eh.isOpening||K.preventDefault()}:void 0;return{itemProps:Gi(u,m||b?S:{},B?V:{},{onDoubleClick:W,onDragStartCapture:H,onClick:Y}),isPressed:X,isSelected:g.isSelected(I),isFocused:g.isFocused&&g.focusedKey===I,isDisabled:o,allowsSelection:m,hasAction:y}}function Oce(){let e=window.event;return(e==null?void 0:e.key)==="Enter"}function _ce(){let e=window.event;return(e==null?void 0:e.key)===" "||(e==null?void 0:e.code)==="Space"}class pog{getNextKey(g){for(g=this.collection.getKeyAfter(g);g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyAfter(g)}return null}getPreviousKey(g){for(g=this.collection.getKeyBefore(g);g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyBefore(g)}return null}findKey(g,I,i){let n=this.getItem(g);if(!n)return null;let C=n.getBoundingClientRect();do g=I(g),n=this.getItem(g);while(n&&i(C,n.getBoundingClientRect()));return g}isSameRow(g,I){return g.top===I.top||g.left!==I.left}isSameColumn(g,I){return g.left===I.left||g.top!==I.top}getKeyBelow(g){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(g,I=>this.getNextKey(I),this.isSameRow):this.getNextKey(g)}getKeyAbove(g){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(g,I=>this.getPreviousKey(I),this.isSameRow):this.getPreviousKey(g)}getNextColumn(g,I){return I?this.getPreviousKey(g):this.getNextKey(g)}getKeyRightOf(g){return this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(g,this.direction==="rtl"):this.findKey(g,I=>this.getNextColumn(I,this.direction==="rtl"),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(g,this.direction==="rtl"):null}getKeyLeftOf(g){return this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(g,this.direction==="ltr"):this.findKey(g,I=>this.getNextColumn(I,this.direction==="ltr"),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(g,this.direction==="ltr"):null}getFirstKey(){let g=this.collection.getFirstKey();for(;g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyAfter(g)}return null}getLastKey(){let g=this.collection.getLastKey();for(;g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyBefore(g)}return null}getItem(g){return this.ref.current.querySelector(`[data-key="${g}"]`)}getKeyPageAbove(g){let I=this.ref.current,i=this.getItem(g);if(!i)return null;if(!FH(I))return this.getFirstKey();let n=I.getBoundingClientRect(),C=i.getBoundingClientRect();if(this.orientation==="horizontal"){let r=n.x-I.scrollLeft,o=Math.max(0,C.x-r+C.width-n.width);for(;i&&C.x-r>o;)g=this.getKeyAbove(g),i=g==null?null:this.getItem(g),C=i==null?void 0:i.getBoundingClientRect()}else{let r=n.y-I.scrollTop,o=Math.max(0,C.y-r+C.height-n.height);for(;i&&C.y-r>o;)g=this.getKeyAbove(g),i=g==null?null:this.getItem(g),C=i==null?void 0:i.getBoundingClientRect()}return g??this.getFirstKey()}getKeyPageBelow(g){let I=this.ref.current,i=this.getItem(g);if(!i)return null;if(!FH(I))return this.getLastKey();let n=I.getBoundingClientRect(),C=i.getBoundingClientRect();if(this.orientation==="horizontal"){let r=n.x-I.scrollLeft,o=Math.min(I.scrollWidth,C.x-r-C.width+n.width);for(;i&&C.x-rthis.iterateCollection(g))}*iterateCollection(g){let{children:I,items:i}=g;if(typeof I=="function"){if(!i)throw new Error("props.children was a function but props.items is missing");for(let n of g.items)yield*this.getFullNode({value:n},{renderer:I})}else{let n=[];N.Children.forEach(I,r=>{n.push(r)});let C=0;for(let r of n){let o=this.getFullNode({element:r,index:C},{});for(let a of o)C++,yield a}}}getKey(g,I,i,n){if(g.key!=null)return g.key;if(I.type==="cell"&&I.key!=null)return`${n}${I.key}`;let C=I.value;if(C!=null){var r;let o=(r=C.key)!==null&&r!==void 0?r:C.id;if(o==null)throw new Error("No key found for item");return o}return n?`${n}.${I.index}`:`$.${I.index}`}getChildState(g,I){return{renderer:I.renderer||g.renderer}}*getFullNode(g,I,i,n){let C=g.element;if(!C&&g.value&&I&&I.renderer){let a=this.cache.get(g.value);if(a&&(!a.shouldInvalidate||!a.shouldInvalidate(this.context))){a.index=g.index,a.parentKey=n?n.key:null,yield a;return}C=I.renderer(g.value)}if(N.isValidElement(C)){let a=C.type;if(typeof a!="function"&&typeof a.getCollectionNode!="function"){let c=typeof C.type=="function"?C.type.name:C.type;throw new Error(`Unknown element <${c}> in collection.`)}let s=a.getCollectionNode(C.props,this.context),A=g.index,l=s.next();for(;!l.done&&l.value;){let c=l.value;g.index=A;let u=c.key;u||(u=c.element?null:this.getKey(C,g,I,i));let h=[...this.getFullNode({...c,key:u,index:A,wrapper:yog(g.wrapper,c.wrapper)},this.getChildState(I,c),i?`${i}${C.key}`:C.key,n)];for(let m of h){if(m.value=c.value||g.value,m.value&&this.cache.set(m.value,m),g.type&&m.type!==g.type)throw new Error(`Unsupported type <${Qx(m.type)}> in <${Qx(n.type)}>. Only <${Qx(g.type)}> is supported.`);A++,yield m}l=s.next(h)}return}if(g.key==null)return;let r=this,o={type:g.type,props:g.props,key:g.key,parentKey:n?n.key:null,value:g.value,level:n?n.level+1:0,index:g.index,rendered:g.rendered,textValue:g.textValue,"aria-label":g["aria-label"],wrapper:g.wrapper,shouldInvalidate:g.shouldInvalidate,hasChildNodes:g.hasChildNodes,childNodes:Lce(function*(){if(!g.hasChildNodes)return;let a=0;for(let s of g.childNodes()){s.key!=null&&(s.key=`${o.key}${s.key}`),s.index=a;let A=r.getFullNode(s,r.getChildState(I,s),o.key,o);for(let l of A)a++,yield l}})};yield o}constructor(){this.cache=new WeakMap}}function Lce(e){let g=[],I=null;return{*[Symbol.iterator](){for(let i of g)yield i;I||(I=e());for(let i of I)g.push(i),yield i}}}function yog(e,g){if(e&&g)return I=>e(g(I));if(e)return e;if(g)return g}function Qx(e){return e[0].toUpperCase()+e.slice(1)}function Zog(e,g,I){let i=U.useMemo(()=>new bog,[]),{children:n,items:C,collection:r}=e;return U.useMemo(()=>{if(r)return r;let a=i.build({children:n,items:C},I);return g(a)},[i,n,C,r,I,g])}function wi(e,g){return typeof g.getChildren=="function"?g.getChildren(e.key):e.childNodes}function As(e){return Ul(e,0)}function Ul(e,g){if(g<0)return;let I=0;for(let i of e){if(I===g)return i;I++}}function yc(e){let g;for(let I of e)g=I;return g}function jx(e,g,I){if(g.parentKey===I.parentKey)return g.index-I.index;let i=[...Uce(e,g),g],n=[...Uce(e,I),I],C=i.slice(0,n.length).findIndex((r,o)=>r!==n[o]);return C!==-1?(g=i[C],I=n[C],g.index-I.index):i.findIndex(r=>r===I)>=0?1:(n.findIndex(r=>r===g)>=0,-1)}function Uce(e,g){let I=[];for(;(g==null?void 0:g.parentKey)!=null;)g=e.getItem(g.parentKey),I.unshift(g);return I}function Gog(e,g){let{inputElementType:I="input",isDisabled:i=!1,isRequired:n=!1,isReadOnly:C=!1,type:r="text",validationBehavior:o="aria"}=e,[a,s]=pHe(e.value,e.defaultValue||"",e.onChange),{focusableProps:A}=KHe(e,g),l=Aog({...e,value:a}),{isInvalid:c,validationErrors:u,validationDetails:d}=l.displayValidation,{labelProps:h,fieldProps:m,descriptionProps:f,errorMessageProps:b}=uog({...e,isInvalid:c,errorMessage:e.errorMessage||u}),p=KA(e,{labelable:!0});const y={type:r,pattern:e.pattern};return org(g,a,s),nog(e,l,g),U.useEffect(()=>{if(g.current instanceof YH(g.current).HTMLTextAreaElement){let Z=g.current;Object.defineProperty(Z,"defaultValue",{get:()=>Z.value,set:()=>{},configurable:!0})}},[g]),{labelProps:h,inputProps:Gi(p,I==="input"&&y,{disabled:i,readOnly:C,required:n&&o==="native","aria-required":n&&o==="aria"||void 0,"aria-invalid":c||void 0,"aria-errormessage":e["aria-errormessage"],"aria-activedescendant":e["aria-activedescendant"],"aria-autocomplete":e["aria-autocomplete"],"aria-haspopup":e["aria-haspopup"],value:a,onChange:Z=>s(Z.target.value),autoComplete:e.autoComplete,maxLength:e.maxLength,minLength:e.minLength,name:e.name,placeholder:e.placeholder,inputMode:e.inputMode,onCopy:e.onCopy,onCut:e.onCut,onPaste:e.onPaste,onCompositionEnd:e.onCompositionEnd,onCompositionStart:e.onCompositionStart,onCompositionUpdate:e.onCompositionUpdate,onSelect:e.onSelect,onBeforeInput:e.onBeforeInput,onInput:e.onInput,...A,...m}),descriptionProps:f,errorMessageProps:b,isInvalid:c,validationErrors:u,validationDetails:d}}class up{copy(){return new up(this.x,this.y)}equals(g){return this.x===g.x&&this.y===g.y}isOrigin(){return this.x===0&&this.y===0}constructor(g=0,I=0){this.x=g,this.y=I}}class dp{get maxX(){return this.x+this.width}get maxY(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new up(this.x,this.y)}get topRight(){return new up(this.maxX,this.y)}get bottomLeft(){return new up(this.x,this.maxY)}get bottomRight(){return new up(this.maxX,this.maxY)}intersects(g){return this.x<=g.x+g.width&&g.x<=this.x+this.width&&this.y<=g.y+g.height&&g.y<=this.y+this.height}containsRect(g){return this.x<=g.x&&this.y<=g.y&&this.maxX>=g.maxX&&this.maxY>=g.maxY}containsPoint(g){return this.x<=g.x&&this.y<=g.y&&this.maxX>=g.x&&this.maxY>=g.y}getCornerInRect(g){for(let I of["topLeft","topRight","bottomLeft","bottomRight"])if(g.containsPoint(this[I]))return I;return null}equals(g){return g.x===this.x&&g.y===this.y&&g.width===this.width&&g.height===this.height}pointEquals(g){return this.x===g.x&&this.y===g.y}sizeEquals(g){return this.width===g.width&&this.height===g.height}union(g){let I=Math.min(this.x,g.x),i=Math.min(this.y,g.y),n=Math.max(this.maxX,g.maxX)-I,C=Math.max(this.maxY,g.maxY)-i;return new dp(I,i,n,C)}intersection(g){if(!this.intersects(g))return new dp(0,0,0,0);let I=Math.max(this.x,g.x),i=Math.max(this.y,g.y);return new dp(I,i,Math.min(this.maxX,g.maxX)-I,Math.min(this.maxY,g.maxY)-i)}copy(){return new dp(this.x,this.y,this.width,this.height)}constructor(g=0,I=0,i=0,n=0){this.x=g,this.y=I,this.width=i,this.height=n}}let Ef=typeof window<"u"?window.performance:null,Qce=Ef&&(Ef.now||Ef.webkitNow||Ef.msNow||Ef.mozNow);Qce&&Qce.bind(Ef);function b8(e){return e&&e.__esModule?e.default:e}class JHe{isCell(g){return g.type==="cell"}isRow(g){return g.type==="row"||g.type==="item"}findPreviousKey(g,I){let i=g!=null?this.collection.getKeyBefore(g):this.collection.getLastKey();for(;i!=null;){let n=this.collection.getItem(i);if(!this.disabledKeys.has(i)&&(!I||I(n)))return i;i=this.collection.getKeyBefore(i)}}findNextKey(g,I){let i=g!=null?this.collection.getKeyAfter(g):this.collection.getFirstKey();for(;i!=null;){let n=this.collection.getItem(i);if(!this.disabledKeys.has(i)&&(!I||I(n)))return i;i=this.collection.getKeyAfter(i)}}getKeyBelow(g){let I=this.collection.getItem(g);if(I&&(this.isCell(I)&&(g=I.parentKey),g=this.findNextKey(g),g!=null)){if(this.isCell(I)){let i=this.collection.getItem(g);return Ul(wi(i,this.collection),I.index).key}if(this.focusMode==="row")return g}}getKeyAbove(g){let I=this.collection.getItem(g);if(I&&(this.isCell(I)&&(g=I.parentKey),g=this.findPreviousKey(g),g!=null)){if(this.isCell(I)){let i=this.collection.getItem(g);return Ul(wi(i,this.collection),I.index).key}if(this.focusMode==="row")return g}}getKeyRightOf(g){let I=this.collection.getItem(g);if(I){if(this.isRow(I)){let i=wi(I,this.collection);return this.direction==="rtl"?yc(i).key:As(i).key}if(this.isCell(I)){let i=this.collection.getItem(I.parentKey),n=wi(i,this.collection),C=this.direction==="rtl"?Ul(n,I.index-1):Ul(n,I.index+1);return C?C.key:this.focusMode==="row"?I.parentKey:this.direction==="rtl"?this.getFirstKey(g):this.getLastKey(g)}}}getKeyLeftOf(g){let I=this.collection.getItem(g);if(I){if(this.isRow(I)){let i=wi(I,this.collection);return this.direction==="rtl"?As(i).key:yc(i).key}if(this.isCell(I)){let i=this.collection.getItem(I.parentKey),n=wi(i,this.collection),C=this.direction==="rtl"?Ul(n,I.index+1):Ul(n,I.index-1);return C?C.key:this.focusMode==="row"?I.parentKey:this.direction==="rtl"?this.getLastKey(g):this.getFirstKey(g)}}}getFirstKey(g,I){let i;if(g!=null){if(i=this.collection.getItem(g),!i)return;if(this.isCell(i)&&!I){let n=this.collection.getItem(i.parentKey);return As(wi(n,this.collection)).key}}if(g=this.findNextKey(),g!=null&&i&&this.isCell(i)&&I||this.focusMode==="cell"){let n=this.collection.getItem(g);g=As(wi(n,this.collection)).key}return g}getLastKey(g,I){let i;if(g!=null){if(i=this.collection.getItem(g),!i)return;if(this.isCell(i)&&!I){let n=this.collection.getItem(i.parentKey),C=wi(n,this.collection);return yc(C).key}}if(g=this.findPreviousKey(),g!=null&&i&&this.isCell(i)&&I||this.focusMode==="cell"){let n=this.collection.getItem(g),C=wi(n,this.collection);g=yc(C).key}return g}getItem(g){return this.ref.current.querySelector(`[data-key="${g}"]`)}getItemRect(g){var I;if(this.layout)return(I=this.layout.getLayoutInfo(g))===null||I===void 0?void 0:I.rect;let i=this.getItem(g);if(i)return new dp(i.offsetLeft,i.offsetTop,i.offsetWidth,i.offsetHeight)}getPageHeight(){var g,I,i;return this.layout?(g=this.layout.virtualizer)===null||g===void 0?void 0:g.visibleRect.height:(i=this.ref)===null||i===void 0||(I=i.current)===null||I===void 0?void 0:I.offsetHeight}getContentHeight(){var g,I;return this.layout?this.layout.getContentSize().height:(I=this.ref)===null||I===void 0||(g=I.current)===null||g===void 0?void 0:g.scrollHeight}getKeyPageAbove(g){let I=this.getItemRect(g);if(!I)return null;let i=Math.max(0,I.maxY-this.getPageHeight());for(;I&&I.y>i;)g=this.getKeyAbove(g),I=this.getItemRect(g);return g}getKeyPageBelow(g){let I=this.getItemRect(g);if(!I)return null;let i=this.getPageHeight(),n=Math.min(this.getContentHeight(),I.y+i);for(;I&&I.maxY`${e.item} غير المحدد`,longPressToSelect:"اضغط مطولًا للدخول إلى وضع التحديد.",select:"تحديد",selectedAll:"جميع العناصر المحددة.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"لم يتم تحديد عناصر",one:()=>`${g.number(e.count)} عنصر محدد`,other:()=>`${g.number(e.count)} عنصر محدد`})}.`,selectedItem:e=>`${e.item} المحدد`};var _He={};_He={deselectedItem:e=>`${e.item} не е избран.`,longPressToSelect:"Натиснете и задръжте за да влезете в избирателен режим.",select:"Изберете",selectedAll:"Всички елементи са избрани.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Няма избрани елементи",one:()=>`${g.number(e.count)} избран елемент`,other:()=>`${g.number(e.count)} избрани елементи`})}.`,selectedItem:e=>`${e.item} избран.`};var LHe={};LHe={deselectedItem:e=>`Položka ${e.item} není vybrána.`,longPressToSelect:"Dlouhým stisknutím přejdete do režimu výběru.",select:"Vybrat",selectedAll:"Vybrány všechny položky.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nevybrány žádné položky",one:()=>`Vybrána ${g.number(e.count)} položka`,other:()=>`Vybráno ${g.number(e.count)} položek`})}.`,selectedItem:e=>`Vybrána položka ${e.item}.`};var UHe={};UHe={deselectedItem:e=>`${e.item} ikke valgt.`,longPressToSelect:"Lav et langt tryk for at aktivere valgtilstand.",select:"Vælg",selectedAll:"Alle elementer valgt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ingen elementer valgt",one:()=>`${g.number(e.count)} element valgt`,other:()=>`${g.number(e.count)} elementer valgt`})}.`,selectedItem:e=>`${e.item} valgt.`};var QHe={};QHe={deselectedItem:e=>`${e.item} nicht ausgewählt.`,longPressToSelect:"Gedrückt halten, um Auswahlmodus zu öffnen.",select:"Auswählen",selectedAll:"Alle Elemente ausgewählt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Keine Elemente ausgewählt",one:()=>`${g.number(e.count)} Element ausgewählt`,other:()=>`${g.number(e.count)} Elemente ausgewählt`})}.`,selectedItem:e=>`${e.item} ausgewählt.`};var jHe={};jHe={deselectedItem:e=>`Δεν επιλέχθηκε το στοιχείο ${e.item}.`,longPressToSelect:"Πατήστε παρατεταμένα για να μπείτε σε λειτουργία επιλογής.",select:"Επιλογή",selectedAll:"Επιλέχθηκαν όλα τα στοιχεία.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Δεν επιλέχθηκαν στοιχεία",one:()=>`Επιλέχθηκε ${g.number(e.count)} στοιχείο`,other:()=>`Επιλέχθηκαν ${g.number(e.count)} στοιχεία`})}.`,selectedItem:e=>`Επιλέχθηκε το στοιχείο ${e.item}.`};var $He={};$He={deselectedItem:e=>`${e.item} not selected.`,select:"Select",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"No items selected",one:()=>`${g.number(e.count)} item selected`,other:()=>`${g.number(e.count)} items selected`})}.`,selectedAll:"All items selected.",selectedItem:e=>`${e.item} selected.`,longPressToSelect:"Long press to enter selection mode."};var qHe={};qHe={deselectedItem:e=>`${e.item} no seleccionado.`,longPressToSelect:"Mantenga pulsado para abrir el modo de selección.",select:"Seleccionar",selectedAll:"Todos los elementos seleccionados.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ningún elemento seleccionado",one:()=>`${g.number(e.count)} elemento seleccionado`,other:()=>`${g.number(e.count)} elementos seleccionados`})}.`,selectedItem:e=>`${e.item} seleccionado.`};var eTe={};eTe={deselectedItem:e=>`${e.item} pole valitud.`,longPressToSelect:"Valikurežiimi sisenemiseks vajutage pikalt.",select:"Vali",selectedAll:"Kõik üksused valitud.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Üksusi pole valitud",one:()=>`${g.number(e.count)} üksus valitud`,other:()=>`${g.number(e.count)} üksust valitud`})}.`,selectedItem:e=>`${e.item} valitud.`};var tTe={};tTe={deselectedItem:e=>`Kohdetta ${e.item} ei valittu.`,longPressToSelect:"Siirry valintatilaan painamalla pitkään.",select:"Valitse",selectedAll:"Kaikki kohteet valittu.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ei yhtään kohdetta valittu",one:()=>`${g.number(e.count)} kohde valittu`,other:()=>`${g.number(e.count)} kohdetta valittu`})}.`,selectedItem:e=>`${e.item} valittu.`};var gTe={};gTe={deselectedItem:e=>`${e.item} non sélectionné.`,longPressToSelect:"Appuyez de manière prolongée pour passer en mode de sélection.",select:"Sélectionner",selectedAll:"Tous les éléments sélectionnés.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Aucun élément sélectionné",one:()=>`${g.number(e.count)} élément sélectionné`,other:()=>`${g.number(e.count)} éléments sélectionnés`})}.`,selectedItem:e=>`${e.item} sélectionné.`};var ITe={};ITe={deselectedItem:e=>`${e.item} לא נבחר.`,longPressToSelect:"הקשה ארוכה לכניסה למצב בחירה.",select:"בחר",selectedAll:"כל הפריטים נבחרו.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"לא נבחרו פריטים",one:()=>`פריט ${g.number(e.count)} נבחר`,other:()=>`${g.number(e.count)} פריטים נבחרו`})}.`,selectedItem:e=>`${e.item} נבחר.`};var iTe={};iTe={deselectedItem:e=>`Stavka ${e.item} nije odabrana.`,longPressToSelect:"Dugo pritisnite za ulazak u način odabira.",select:"Odaberite",selectedAll:"Odabrane su sve stavke.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nije odabrana nijedna stavka",one:()=>`Odabrana je ${g.number(e.count)} stavka`,other:()=>`Odabrano je ${g.number(e.count)} stavki`})}.`,selectedItem:e=>`Stavka ${e.item} je odabrana.`};var nTe={};nTe={deselectedItem:e=>`${e.item} nincs kijelölve.`,longPressToSelect:"Nyomja hosszan a kijelöléshez.",select:"Kijelölés",selectedAll:"Az összes elem kijelölve.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Egy elem sincs kijelölve",one:()=>`${g.number(e.count)} elem kijelölve`,other:()=>`${g.number(e.count)} elem kijelölve`})}.`,selectedItem:e=>`${e.item} kijelölve.`};var CTe={};CTe={deselectedItem:e=>`${e.item} non selezionato.`,longPressToSelect:"Premi a lungo per passare alla modalità di selezione.",select:"Seleziona",selectedAll:"Tutti gli elementi selezionati.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nessun elemento selezionato",one:()=>`${g.number(e.count)} elemento selezionato`,other:()=>`${g.number(e.count)} elementi selezionati`})}.`,selectedItem:e=>`${e.item} selezionato.`};var rTe={};rTe={deselectedItem:e=>`${e.item} が選択されていません。`,longPressToSelect:"長押しして選択モードを開きます。",select:"選択",selectedAll:"すべての項目を選択しました。",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"項目が選択されていません",one:()=>`${g.number(e.count)} 項目を選択しました`,other:()=>`${g.number(e.count)} 項目を選択しました`})}。`,selectedItem:e=>`${e.item} を選択しました。`};var oTe={};oTe={deselectedItem:e=>`${e.item}이(가) 선택되지 않았습니다.`,longPressToSelect:"선택 모드로 들어가려면 길게 누르십시오.",select:"선택",selectedAll:"모든 항목이 선택되었습니다.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"선택된 항목이 없습니다",one:()=>`${g.number(e.count)}개 항목이 선택되었습니다`,other:()=>`${g.number(e.count)}개 항목이 선택되었습니다`})}.`,selectedItem:e=>`${e.item}이(가) 선택되었습니다.`};var aTe={};aTe={deselectedItem:e=>`${e.item} nepasirinkta.`,longPressToSelect:"Norėdami įjungti pasirinkimo režimą, paspauskite ir palaikykite.",select:"Pasirinkti",selectedAll:"Pasirinkti visi elementai.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nepasirinktas nė vienas elementas",one:()=>`Pasirinktas ${g.number(e.count)} elementas`,other:()=>`Pasirinkta elementų: ${g.number(e.count)}`})}.`,selectedItem:e=>`Pasirinkta: ${e.item}.`};var ATe={};ATe={deselectedItem:e=>`Vienums ${e.item} nav atlasīts.`,longPressToSelect:"Ilgi turiet nospiestu. lai ieslēgtu atlases režīmu.",select:"Atlasīt",selectedAll:"Atlasīti visi vienumi.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nav atlasīts neviens vienums",one:()=>`Atlasīto vienumu skaits: ${g.number(e.count)}`,other:()=>`Atlasīto vienumu skaits: ${g.number(e.count)}`})}.`,selectedItem:e=>`Atlasīts vienums ${e.item}.`};var sTe={};sTe={deselectedItem:e=>`${e.item} er ikke valgt.`,longPressToSelect:"Bruk et langt trykk for å gå inn i valgmodus.",select:"Velg",selectedAll:"Alle elementer er valgt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ingen elementer er valgt",one:()=>`${g.number(e.count)} element er valgt`,other:()=>`${g.number(e.count)} elementer er valgt`})}.`,selectedItem:e=>`${e.item} er valgt.`};var lTe={};lTe={deselectedItem:e=>`${e.item} niet geselecteerd.`,longPressToSelect:"Druk lang om de selectiemodus te openen.",select:"Selecteren",selectedAll:"Alle items geselecteerd.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Geen items geselecteerd",one:()=>`${g.number(e.count)} item geselecteerd`,other:()=>`${g.number(e.count)} items geselecteerd`})}.`,selectedItem:e=>`${e.item} geselecteerd.`};var cTe={};cTe={deselectedItem:e=>`Nie zaznaczono ${e.item}.`,longPressToSelect:"Naciśnij i przytrzymaj, aby wejść do trybu wyboru.",select:"Zaznacz",selectedAll:"Wszystkie zaznaczone elementy.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nie zaznaczono żadnych elementów",one:()=>`${g.number(e.count)} zaznaczony element`,other:()=>`${g.number(e.count)} zaznaczonych elementów`})}.`,selectedItem:e=>`Zaznaczono ${e.item}.`};var uTe={};uTe={deselectedItem:e=>`${e.item} não selecionado.`,longPressToSelect:"Mantenha pressionado para entrar no modo de seleção.",select:"Selecionar",selectedAll:"Todos os itens selecionados.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nenhum item selecionado",one:()=>`${g.number(e.count)} item selecionado`,other:()=>`${g.number(e.count)} itens selecionados`})}.`,selectedItem:e=>`${e.item} selecionado.`};var dTe={};dTe={deselectedItem:e=>`${e.item} não selecionado.`,longPressToSelect:"Prima continuamente para entrar no modo de seleção.",select:"Selecionar",selectedAll:"Todos os itens selecionados.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nenhum item selecionado",one:()=>`${g.number(e.count)} item selecionado`,other:()=>`${g.number(e.count)} itens selecionados`})}.`,selectedItem:e=>`${e.item} selecionado.`};var hTe={};hTe={deselectedItem:e=>`${e.item} neselectat.`,longPressToSelect:"Apăsați lung pentru a intra în modul de selectare.",select:"Selectare",selectedAll:"Toate elementele selectate.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Niciun element selectat",one:()=>`${g.number(e.count)} element selectat`,other:()=>`${g.number(e.count)} elemente selectate`})}.`,selectedItem:e=>`${e.item} selectat.`};var mTe={};mTe={deselectedItem:e=>`${e.item} не выбрано.`,longPressToSelect:"Нажмите и удерживайте для входа в режим выбора.",select:"Выбрать",selectedAll:"Выбраны все элементы.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Нет выбранных элементов",one:()=>`${g.number(e.count)} элемент выбран`,other:()=>`${g.number(e.count)} элементов выбрано`})}.`,selectedItem:e=>`${e.item} выбрано.`};var fTe={};fTe={deselectedItem:e=>`Nevybraté položky: ${e.item}.`,longPressToSelect:"Dlhším stlačením prejdite do režimu výberu.",select:"Vybrať",selectedAll:"Všetky vybraté položky.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Žiadne vybraté položky",one:()=>`${g.number(e.count)} vybratá položka`,other:()=>`Počet vybratých položiek:${g.number(e.count)}`})}.`,selectedItem:e=>`Vybraté položky: ${e.item}.`};var pTe={};pTe={deselectedItem:e=>`Element ${e.item} ni izbran.`,longPressToSelect:"Za izbirni način pritisnite in dlje časa držite.",select:"Izberite",selectedAll:"Vsi elementi so izbrani.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Noben element ni izbran",one:()=>`${g.number(e.count)} element je izbran`,other:()=>`${g.number(e.count)} elementov je izbranih`})}.`,selectedItem:e=>`Element ${e.item} je izbran.`};var bTe={};bTe={deselectedItem:e=>`${e.item} nije izabrano.`,longPressToSelect:"Dugo pritisnite za ulazak u režim biranja.",select:"Izaberite",selectedAll:"Izabrane su sve stavke.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nije izabrana nijedna stavka",one:()=>`Izabrana je ${g.number(e.count)} stavka`,other:()=>`Izabrano je ${g.number(e.count)} stavki`})}.`,selectedItem:e=>`${e.item} je izabrano.`};var yTe={};yTe={deselectedItem:e=>`${e.item} ej markerat.`,longPressToSelect:"Tryck länge när du vill öppna väljarläge.",select:"Markera",selectedAll:"Alla markerade objekt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Inga markerade objekt",one:()=>`${g.number(e.count)} markerat objekt`,other:()=>`${g.number(e.count)} markerade objekt`})}.`,selectedItem:e=>`${e.item} markerat.`};var ZTe={};ZTe={deselectedItem:e=>`${e.item} seçilmedi.`,longPressToSelect:"Seçim moduna girmek için uzun basın.",select:"Seç",selectedAll:"Tüm ögeler seçildi.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Hiçbir öge seçilmedi",one:()=>`${g.number(e.count)} öge seçildi`,other:()=>`${g.number(e.count)} öge seçildi`})}.`,selectedItem:e=>`${e.item} seçildi.`};var GTe={};GTe={deselectedItem:e=>`${e.item} не вибрано.`,longPressToSelect:"Виконайте довге натиснення, щоб перейти в режим вибору.",select:"Вибрати",selectedAll:"Усі елементи вибрано.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Жодних елементів не вибрано",one:()=>`${g.number(e.count)} елемент вибрано`,other:()=>`Вибрано елементів: ${g.number(e.count)}`})}.`,selectedItem:e=>`${e.item} вибрано.`};var vTe={};vTe={deselectedItem:e=>`未选择 ${e.item}。`,longPressToSelect:"长按以进入选择模式。",select:"选择",selectedAll:"已选择所有项目。",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"未选择项目",one:()=>`已选择 ${g.number(e.count)} 个项目`,other:()=>`已选择 ${g.number(e.count)} 个项目`})}。`,selectedItem:e=>`已选择 ${e.item}。`};var BTe={};BTe={deselectedItem:e=>`未選取「${e.item}」。`,longPressToSelect:"長按以進入選擇模式。",select:"選取",selectedAll:"已選取所有項目。",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"未選取任何項目",one:()=>`已選取 ${g.number(e.count)} 個項目`,other:()=>`已選取 ${g.number(e.count)} 個項目`})}。`,selectedItem:e=>`已選取「${e.item}」。`};CY={"ar-AE":OHe,"bg-BG":_He,"cs-CZ":LHe,"da-DK":UHe,"de-DE":QHe,"el-GR":jHe,"en-US":$He,"es-ES":qHe,"et-EE":eTe,"fi-FI":tTe,"fr-FR":gTe,"he-IL":ITe,"hr-HR":iTe,"hu-HU":nTe,"it-IT":CTe,"ja-JP":rTe,"ko-KR":oTe,"lt-LT":aTe,"lv-LV":ATe,"nb-NO":sTe,"nl-NL":lTe,"pl-PL":cTe,"pt-BR":uTe,"pt-PT":dTe,"ro-RO":hTe,"ru-RU":mTe,"sk-SK":fTe,"sl-SI":pTe,"sr-SP":bTe,"sv-SE":yTe,"tr-TR":ZTe,"uk-UA":GTe,"zh-CN":vTe,"zh-TW":BTe};function vog(e,g){let{getRowText:I=r=>{var o,a,s,A;return(A=(o=(a=g.collection).getTextValue)===null||o===void 0?void 0:o.call(a,r))!==null&&A!==void 0?A:(s=g.collection.getItem(r))===null||s===void 0?void 0:s.textValue}}=e,i=my(b8(CY)),n=g.selectionManager.rawSelection,C=U.useRef(n);SHe(()=>{var r;if(!g.selectionManager.isFocused){C.current=n;return}let o=jce(n,C.current),a=jce(C.current,n),s=g.selectionManager.selectionBehavior==="replace",A=[];if(g.selectionManager.selectedKeys.size===1&&s){if(g.collection.getItem(g.selectionManager.selectedKeys.keys().next().value)){let l=I(g.selectionManager.selectedKeys.keys().next().value);l&&A.push(i.format("selectedItem",{item:l}))}}else if(o.size===1&&a.size===0){let l=I(o.keys().next().value);l&&A.push(i.format("selectedItem",{item:l}))}else if(a.size===1&&o.size===0&&g.collection.getItem(a.keys().next().value)){let l=I(a.keys().next().value);l&&A.push(i.format("deselectedItem",{item:l}))}g.selectionManager.selectionMode==="multiple"&&(A.length===0||n==="all"||n.size>1||C.current==="all"||((r=C.current)===null||r===void 0?void 0:r.size)>1)&&A.push(n==="all"?i.format("selectedAll"):i.format("selectedCount",{count:n.size})),A.length>0&&EHe(A.join(" ")),C.current=n},[n])}function jce(e,g){let I=new Set;if(e==="all"||g==="all")return I;for(let i of e.keys())g.has(i)||I.add(i);return I}function Bog(e){let g=my(b8(CY)),I=Srg(),i=(I==="pointer"||I==="virtual"||I==null)&&typeof window<"u"&&"ontouchstart"in window,n=U.useMemo(()=>{let r=e.selectionManager.selectionMode,o=e.selectionManager.selectionBehavior,a;return i&&(a=g.format("longPressToSelect")),o==="replace"&&r!=="none"&&e.hasItemActions?a:void 0},[e.selectionManager.selectionMode,e.selectionManager.selectionBehavior,e.hasItemActions,g,i]);return IY(n)}function Sog(e,g,I){let{isVirtualized:i,keyboardDelegate:n,focusMode:C,scrollRef:r,getRowText:o,onRowAction:a,onCellAction:s}=e,{selectionManager:A}=g;!e["aria-label"]&&!e["aria-labelledby"]&&console.warn("An aria-label or aria-labelledby prop is required for accessibility.");let l=DHe({usage:"search",sensitivity:"base"}),{direction:c}=Gm(),u=g.selectionManager.disabledBehavior,d=U.useMemo(()=>n||new JHe({collection:g.collection,disabledKeys:u==="selection"?new Set:g.disabledKeys,ref:I,direction:c,collator:l,focusMode:C}),[n,g.collection,g.disabledKeys,u,I,c,l,C]),{collectionProps:h}=fog({ref:I,selectionManager:A,keyboardDelegate:d,isVirtualized:i,scrollRef:r}),m=Dh(e.id);y8.set(g,{keyboardDelegate:d,actions:{onRowAction:a,onCellAction:s}});let f=Bog({selectionManager:A,hasItemActions:!!(a||s)}),b=KA(e,{labelable:!0}),p=U.useCallback(G=>{if(A.isFocused){G.currentTarget.contains(G.target)||A.setFocused(!1);return}G.currentTarget.contains(G.target)&&A.setFocused(!0)},[A]),y=U.useMemo(()=>({onBlur:h.onBlur,onFocus:p}),[p,h.onBlur]),Z=_rg(I,{isDisabled:g.collection.size!==0}),B=Gi(b,{role:"grid",id:m,"aria-multiselectable":A.selectionMode==="multiple"?"true":void 0},g.isKeyboardNavigationDisabled?y:h,g.collection.size===0&&{tabIndex:Z?-1:0},f);return i&&(B["aria-rowcount"]=g.collection.size,B["aria-colcount"]=g.collection.columnCount),vog({getRowText:o},g),{gridProps:B}}function wog(){return{rowGroupProps:{role:"rowgroup"}}}function Rog(e,g,I){let{node:i,isVirtualized:n,shouldSelectOnPressUp:C,onAction:r}=e,{actions:{onRowAction:o}}=y8.get(g),{itemProps:a,...s}=PHe({selectionManager:g.selectionManager,key:i.key,ref:I,isVirtualized:n,shouldSelectOnPressUp:C,onAction:o?()=>o(i.key):r,isDisabled:g.collection.size===0}),A=g.selectionManager.isSelected(i.key),l={role:"row","aria-selected":g.selectionManager.selectionMode!=="none"?A:void 0,"aria-disabled":s.isDisabled||void 0,...a};return n&&(l["aria-rowindex"]=i.index+1),{rowProps:l,...s}}function STe(e,g,I){let{node:i,isVirtualized:n,focusMode:C="child",shouldSelectOnPressUp:r,onAction:o}=e,{direction:a}=Gm(),{keyboardDelegate:s,actions:{onCellAction:A}}=y8.get(g),l=U.useRef(null),c=()=>{let p=$r(I.current);if(C==="child"){if(I.current.contains(document.activeElement)&&I.current!==document.activeElement)return;let y=g.selectionManager.childFocusStrategy==="last"?$x(p):p.firstChild();if(y){tr(y);return}}(l.current!=null&&i.key!==l.current||!I.current.contains(document.activeElement))&&tr(I.current)},{itemProps:u,isPressed:d}=PHe({selectionManager:g.selectionManager,key:i.key,ref:I,isVirtualized:n,focus:c,shouldSelectOnPressUp:r,onAction:A?()=>A(i.key):o,isDisabled:g.collection.size===0}),f=Gi(u,{role:"gridcell",onKeyDownCapture:p=>{if(!p.currentTarget.contains(p.target)||g.isKeyboardNavigationDisabled)return;let y=$r(I.current);switch(y.currentNode=document.activeElement,p.key){case"ArrowLeft":{let Z=a==="rtl"?y.nextNode():y.previousNode();if(C==="child"&&Z===I.current&&(Z=null),Z)p.preventDefault(),p.stopPropagation(),tr(Z),Ll(Z,{containingElement:_l(I.current)});else{if(s.getKeyLeftOf(i.key)!==i.key)break;p.preventDefault(),p.stopPropagation(),C==="cell"&&a==="rtl"?(tr(I.current),Ll(I.current,{containingElement:_l(I.current)})):(y.currentNode=I.current,Z=a==="rtl"?y.firstChild():$x(y),Z&&(tr(Z),Ll(Z,{containingElement:_l(I.current)})))}break}case"ArrowRight":{let Z=a==="rtl"?y.previousNode():y.nextNode();if(C==="child"&&Z===I.current&&(Z=null),Z)p.preventDefault(),p.stopPropagation(),tr(Z),Ll(Z,{containingElement:_l(I.current)});else{if(s.getKeyRightOf(i.key)!==i.key)break;p.preventDefault(),p.stopPropagation(),C==="cell"&&a==="ltr"?(tr(I.current),Ll(I.current,{containingElement:_l(I.current)})):(y.currentNode=I.current,Z=a==="rtl"?$x(y):y.firstChild(),Z&&(tr(Z),Ll(Z,{containingElement:_l(I.current)})))}break}case"ArrowUp":case"ArrowDown":!p.altKey&&I.current.contains(p.target)&&(p.stopPropagation(),p.preventDefault(),I.current.parentElement.dispatchEvent(new KeyboardEvent(p.nativeEvent.type,p.nativeEvent)));break}},onFocus:p=>{if(l.current=i.key,p.target!==I.current){d8()||g.selectionManager.setFocusedKey(i.key);return}requestAnimationFrame(()=>{C==="child"&&document.activeElement===I.current&&c()})}});var b;return n&&(f["aria-colindex"]=((b=i.colIndex)!==null&&b!==void 0?b:i.index)+1),r&&f.tabIndex!=null&&f.onPointerDown==null&&(f.onPointerDown=p=>{let y=p.currentTarget,Z=y.getAttribute("tabindex");y.removeAttribute("tabindex"),requestAnimationFrame(()=>{y.setAttribute("tabindex",Z)})}),{gridCellProps:f,isPressed:d}}function $x(e){let g,I;do I=e.lastChild(),I&&(g=I);while(I);return g}function Vog(e,g){let{key:I}=e,i=g.selectionManager,n=Dh(),C=!g.selectionManager.canSelectItem(I),r=g.selectionManager.isSelected(I),o=()=>i.select(I);const a=my(b8(CY));return{checkboxProps:{id:n,"aria-label":a.format("select"),isSelected:r,isDisabled:C,onChange:o}}}let Wog=!1;function zH(){return Wog}function Z8(e){return e&&e.__esModule?e.default:e}const G8=new WeakMap;function k_(e){return typeof e=="string"?e.replace(/\s*/g,""):""+e}function Xog(e,g){let I=G8.get(e);if(!I)throw new Error("Unknown grid");return`${I}-${k_(g)}`}function wTe(e,g,I){let i=G8.get(e);if(!i)throw new Error("Unknown grid");return`${i}-${k_(g)}-${k_(I)}`}function RTe(e,g){return[...e.collection.rowHeaderColumnKeys].map(I=>wTe(e,g,I)).join(" ")}var rY={},VTe={};VTe={ascending:"تصاعدي",ascendingSort:e=>`ترتيب حسب العمود ${e.columnName} بترتيب تصاعدي`,columnSize:e=>`${e.value} بالبكسل`,descending:"تنازلي",descendingSort:e=>`ترتيب حسب العمود ${e.columnName} بترتيب تنازلي`,resizerDescription:"اضغط على مفتاح Enter لبدء تغيير الحجم",select:"تحديد",selectAll:"تحديد الكل",sortable:"عمود قابل للترتيب"};var WTe={};WTe={ascending:"възходящ",ascendingSort:e=>`сортирано по колона ${e.columnName} във възходящ ред`,columnSize:e=>`${e.value} пиксела`,descending:"низходящ",descendingSort:e=>`сортирано по колона ${e.columnName} в низходящ ред`,resizerDescription:"Натиснете „Enter“, за да започнете да преоразмерявате",select:"Изберете",selectAll:"Изберете всичко",sortable:"сортираща колона"};var XTe={};XTe={ascending:"vzestupně",ascendingSort:e=>`řazeno vzestupně podle sloupce ${e.columnName}`,columnSize:e=>`${e.value} pixelů`,descending:"sestupně",descendingSort:e=>`řazeno sestupně podle sloupce ${e.columnName}`,resizerDescription:"Stisknutím klávesy Enter začnete měnit velikost",select:"Vybrat",selectAll:"Vybrat vše",sortable:"sloupec s možností řazení"};var HTe={};HTe={ascending:"stigende",ascendingSort:e=>`sorteret efter kolonne ${e.columnName} i stigende rækkefølge`,columnSize:e=>`${e.value} pixels`,descending:"faldende",descendingSort:e=>`sorteret efter kolonne ${e.columnName} i faldende rækkefølge`,resizerDescription:"Tryk på Enter for at ændre størrelse",select:"Vælg",selectAll:"Vælg alle",sortable:"sorterbar kolonne"};var TTe={};TTe={ascending:"aufsteigend",ascendingSort:e=>`sortiert nach Spalte ${e.columnName} in aufsteigender Reihenfolge`,columnSize:e=>`${e.value} Pixel`,descending:"absteigend",descendingSort:e=>`sortiert nach Spalte ${e.columnName} in absteigender Reihenfolge`,resizerDescription:"Eingabetaste zum Starten der Größenänderung drücken",select:"Auswählen",selectAll:"Alles auswählen",sortable:"sortierbare Spalte"};var NTe={};NTe={ascending:"αύξουσα",ascendingSort:e=>`διαλογή ανά στήλη ${e.columnName} σε αύξουσα σειρά`,columnSize:e=>`${e.value} pixel`,descending:"φθίνουσα",descendingSort:e=>`διαλογή ανά στήλη ${e.columnName} σε φθίνουσα σειρά`,resizerDescription:"Πατήστε Enter για έναρξη της αλλαγής μεγέθους",select:"Επιλογή",selectAll:"Επιλογή όλων",sortable:"Στήλη διαλογής"};var kTe={};kTe={select:"Select",selectAll:"Select All",sortable:"sortable column",ascending:"ascending",descending:"descending",ascendingSort:e=>`sorted by column ${e.columnName} in ascending order`,descendingSort:e=>`sorted by column ${e.columnName} in descending order`,columnSize:e=>`${e.value} pixels`,resizerDescription:"Press Enter to start resizing"};var YTe={};YTe={ascending:"de subida",ascendingSort:e=>`ordenado por columna ${e.columnName} en orden de subida`,columnSize:e=>`${e.value} píxeles`,descending:"de bajada",descendingSort:e=>`ordenado por columna ${e.columnName} en orden de bajada`,resizerDescription:"Pulse Intro para empezar a redimensionar",select:"Seleccionar",selectAll:"Seleccionar todos",sortable:"columna ordenable"};var KTe={};KTe={ascending:"tõusev järjestus",ascendingSort:e=>`sorditud veeru järgi ${e.columnName} tõusvas järjestuses`,columnSize:e=>`${e.value} pikslit`,descending:"laskuv järjestus",descendingSort:e=>`sorditud veeru järgi ${e.columnName} laskuvas järjestuses`,resizerDescription:"Suuruse muutmise alustamiseks vajutage klahvi Enter",select:"Vali",selectAll:"Vali kõik",sortable:"sorditav veerg"};var FTe={};FTe={ascending:"nouseva",ascendingSort:e=>`lajiteltu sarakkeen ${e.columnName} mukaan nousevassa järjestyksessä`,columnSize:e=>`${e.value} pikseliä`,descending:"laskeva",descendingSort:e=>`lajiteltu sarakkeen ${e.columnName} mukaan laskevassa järjestyksessä`,resizerDescription:"Aloita koon muutos painamalla Enter-näppäintä",select:"Valitse",selectAll:"Valitse kaikki",sortable:"lajiteltava sarake"};var DTe={};DTe={ascending:"croissant",ascendingSort:e=>`trié en fonction de la colonne ${e.columnName} par ordre croissant`,columnSize:e=>`${e.value} pixels`,descending:"décroissant",descendingSort:e=>`trié en fonction de la colonne ${e.columnName} par ordre décroissant`,resizerDescription:"Appuyez sur Entrée pour commencer le redimensionnement.",select:"Sélectionner",selectAll:"Sélectionner tout",sortable:"colonne triable"};var xTe={};xTe={ascending:"עולה",ascendingSort:e=>`מוין לפי עמודה ${e.columnName} בסדר עולה`,columnSize:e=>`${e.value} פיקסלים`,descending:"יורד",descendingSort:e=>`מוין לפי עמודה ${e.columnName} בסדר יורד`,resizerDescription:"הקש Enter כדי לשנות את הגודל",select:"בחר",selectAll:"בחר הכול",sortable:"עמודה שניתן למיין"};var ETe={};ETe={ascending:"rastući",ascendingSort:e=>`razvrstano po stupcima ${e.columnName} rastućem redoslijedom`,columnSize:e=>`${e.value} piksela`,descending:"padajući",descendingSort:e=>`razvrstano po stupcima ${e.columnName} padajućim redoslijedom`,resizerDescription:"Pritisnite Enter da biste započeli promenu veličine",select:"Odaberite",selectAll:"Odaberite sve",sortable:"stupac koji se može razvrstati"};var MTe={};MTe={ascending:"növekvő",ascendingSort:e=>`rendezve a(z) ${e.columnName} oszlop szerint, növekvő sorrendben`,columnSize:e=>`${e.value} képpont`,descending:"csökkenő",descendingSort:e=>`rendezve a(z) ${e.columnName} oszlop szerint, csökkenő sorrendben`,resizerDescription:"Nyomja le az Enter billentyűt az átméretezés megkezdéséhez",select:"Kijelölés",selectAll:"Összes kijelölése",sortable:"rendezendő oszlop"};var zTe={};zTe={ascending:"crescente",ascendingSort:e=>`in ordine crescente in base alla colonna ${e.columnName}`,columnSize:e=>`${e.value} pixel`,descending:"decrescente",descendingSort:e=>`in ordine decrescente in base alla colonna ${e.columnName}`,resizerDescription:"Premi Invio per iniziare a ridimensionare",select:"Seleziona",selectAll:"Seleziona tutto",sortable:"colonna ordinabile"};var PTe={};PTe={ascending:"昇順",ascendingSort:e=>`列 ${e.columnName} を昇順で並べ替え`,columnSize:e=>`${e.value} ピクセル`,descending:"降順",descendingSort:e=>`列 ${e.columnName} を降順で並べ替え`,resizerDescription:"Enter キーを押してサイズ変更を開始",select:"選択",selectAll:"すべて選択",sortable:"並べ替え可能な列"};var JTe={};JTe={ascending:"오름차순",ascendingSort:e=>`${e.columnName} 열을 기준으로 오름차순으로 정렬됨`,columnSize:e=>`${e.value} 픽셀`,descending:"내림차순",descendingSort:e=>`${e.columnName} 열을 기준으로 내림차순으로 정렬됨`,resizerDescription:"크기 조정을 시작하려면 Enter를 누르세요.",select:"선택",selectAll:"모두 선택",sortable:"정렬 가능한 열"};var OTe={};OTe={ascending:"didėjančia tvarka",ascendingSort:e=>`surikiuota pagal stulpelį ${e.columnName} didėjančia tvarka`,columnSize:e=>`${e.value} piks.`,descending:"mažėjančia tvarka",descendingSort:e=>`surikiuota pagal stulpelį ${e.columnName} mažėjančia tvarka`,resizerDescription:"Paspauskite „Enter“, kad pradėtumėte keisti dydį",select:"Pasirinkti",selectAll:"Pasirinkti viską",sortable:"rikiuojamas stulpelis"};var _Te={};_Te={ascending:"augošā secībā",ascendingSort:e=>`kārtots pēc kolonnas ${e.columnName} augošā secībā`,columnSize:e=>`${e.value} pikseļi`,descending:"dilstošā secībā",descendingSort:e=>`kārtots pēc kolonnas ${e.columnName} dilstošā secībā`,resizerDescription:"Nospiediet Enter, lai sāktu izmēru mainīšanu",select:"Atlasīt",selectAll:"Atlasīt visu",sortable:"kārtojamā kolonna"};var LTe={};LTe={ascending:"stigende",ascendingSort:e=>`sortert etter kolonne ${e.columnName} i stigende rekkefølge`,columnSize:e=>`${e.value} piksler`,descending:"synkende",descendingSort:e=>`sortert etter kolonne ${e.columnName} i synkende rekkefølge`,resizerDescription:"Trykk på Enter for å starte størrelsesendring",select:"Velg",selectAll:"Velg alle",sortable:"kolonne som kan sorteres"};var UTe={};UTe={ascending:"oplopend",ascendingSort:e=>`gesorteerd in oplopende volgorde in kolom ${e.columnName}`,columnSize:e=>`${e.value} pixels`,descending:"aflopend",descendingSort:e=>`gesorteerd in aflopende volgorde in kolom ${e.columnName}`,resizerDescription:"Druk op Enter om het formaat te wijzigen",select:"Selecteren",selectAll:"Alles selecteren",sortable:"sorteerbare kolom"};var QTe={};QTe={ascending:"rosnąco",ascendingSort:e=>`posortowano według kolumny ${e.columnName} w porządku rosnącym`,columnSize:e=>`Liczba pikseli: ${e.value}`,descending:"malejąco",descendingSort:e=>`posortowano według kolumny ${e.columnName} w porządku malejącym`,resizerDescription:"Naciśnij Enter, aby rozpocząć zmienianie rozmiaru",select:"Zaznacz",selectAll:"Zaznacz wszystko",sortable:"kolumna z możliwością sortowania"};var jTe={};jTe={ascending:"crescente",ascendingSort:e=>`classificado pela coluna ${e.columnName} em ordem crescente`,columnSize:e=>`${e.value} pixels`,descending:"decrescente",descendingSort:e=>`classificado pela coluna ${e.columnName} em ordem decrescente`,resizerDescription:"Pressione Enter para começar a redimensionar",select:"Selecionar",selectAll:"Selecionar tudo",sortable:"coluna classificável"};var $Te={};$Te={ascending:"ascendente",ascendingSort:e=>`Ordenar por coluna ${e.columnName} em ordem ascendente`,columnSize:e=>`${e.value} pixels`,descending:"descendente",descendingSort:e=>`Ordenar por coluna ${e.columnName} em ordem descendente`,resizerDescription:"Prima Enter para iniciar o redimensionamento",select:"Selecionar",selectAll:"Selecionar tudo",sortable:"Coluna ordenável"};var qTe={};qTe={ascending:"crescătoare",ascendingSort:e=>`sortate după coloana ${e.columnName} în ordine crescătoare`,columnSize:e=>`${e.value} pixeli`,descending:"descrescătoare",descendingSort:e=>`sortate după coloana ${e.columnName} în ordine descrescătoare`,resizerDescription:"Apăsați pe Enter pentru a începe redimensionarea",select:"Selectare",selectAll:"Selectare totală",sortable:"coloană sortabilă"};var eNe={};eNe={ascending:"возрастание",ascendingSort:e=>`сортировать столбец ${e.columnName} в порядке возрастания`,columnSize:e=>`${e.value} пикс.`,descending:"убывание",descendingSort:e=>`сортировать столбец ${e.columnName} в порядке убывания`,resizerDescription:"Нажмите клавишу Enter для начала изменения размеров",select:"Выбрать",selectAll:"Выбрать все",sortable:"сортируемый столбец"};var tNe={};tNe={ascending:"vzostupne",ascendingSort:e=>`zoradené zostupne podľa stĺpca ${e.columnName}`,columnSize:e=>`Počet pixelov: ${e.value}`,descending:"zostupne",descendingSort:e=>`zoradené zostupne podľa stĺpca ${e.columnName}`,resizerDescription:"Stlačením klávesu Enter začnete zmenu veľkosti",select:"Vybrať",selectAll:"Vybrať všetko",sortable:"zoraditeľný stĺpec"};var gNe={};gNe={ascending:"naraščajoče",ascendingSort:e=>`razvrščeno po stolpcu ${e.columnName} v naraščajočem vrstnem redu`,columnSize:e=>`${e.value} slikovnih pik`,descending:"padajoče",descendingSort:e=>`razvrščeno po stolpcu ${e.columnName} v padajočem vrstnem redu`,resizerDescription:"Pritisnite tipko Enter da začnete spreminjati velikost",select:"Izberite",selectAll:"Izberite vse",sortable:"razvrstljivi stolpec"};var INe={};INe={ascending:"rastući",ascendingSort:e=>`sortirano po kolonama ${e.columnName} rastućim redosledom`,columnSize:e=>`${e.value} piksela`,descending:"padajući",descendingSort:e=>`sortirano po kolonama ${e.columnName} padajućim redosledom`,resizerDescription:"Pritisnite Enter da biste započeli promenu veličine",select:"Izaberite",selectAll:"Izaberite sve",sortable:"kolona koja se može sortirati"};var iNe={};iNe={ascending:"stigande",ascendingSort:e=>`sorterat på kolumn ${e.columnName} i stigande ordning`,columnSize:e=>`${e.value} pixlar`,descending:"fallande",descendingSort:e=>`sorterat på kolumn ${e.columnName} i fallande ordning`,resizerDescription:"Tryck på Retur för att börja ändra storlek",select:"Markera",selectAll:"Markera allt",sortable:"sorterbar kolumn"};var nNe={};nNe={ascending:"artan sırada",ascendingSort:e=>`${e.columnName} sütuna göre artan düzende sırala`,columnSize:e=>`${e.value} piksel`,descending:"azalan sırada",descendingSort:e=>`${e.columnName} sütuna göre azalan düzende sırala`,resizerDescription:"Yeniden boyutlandırmak için Enter'a basın",select:"Seç",selectAll:"Tümünü Seç",sortable:"Sıralanabilir sütun"};var CNe={};CNe={ascending:"висхідний",ascendingSort:e=>`відсортовано за стовпцем ${e.columnName} у висхідному порядку`,columnSize:e=>`${e.value} пікс.`,descending:"низхідний",descendingSort:e=>`відсортовано за стовпцем ${e.columnName} у низхідному порядку`,resizerDescription:"Натисніть Enter, щоб почати зміну розміру",select:"Вибрати",selectAll:"Вибрати все",sortable:"сортувальний стовпець"};var rNe={};rNe={ascending:"升序",ascendingSort:e=>`按列 ${e.columnName} 升序排序`,columnSize:e=>`${e.value} 像素`,descending:"降序",descendingSort:e=>`按列 ${e.columnName} 降序排序`,resizerDescription:"按“输入”键开始调整大小。",select:"选择",selectAll:"全选",sortable:"可排序的列"};var oNe={};oNe={ascending:"遞增",ascendingSort:e=>`已依據「${e.columnName}」欄遞增排序`,columnSize:e=>`${e.value} 像素`,descending:"遞減",descendingSort:e=>`已依據「${e.columnName}」欄遞減排序`,resizerDescription:"按 Enter 鍵以開始調整大小",select:"選取",selectAll:"全選",sortable:"可排序的欄"};rY={"ar-AE":VTe,"bg-BG":WTe,"cs-CZ":XTe,"da-DK":HTe,"de-DE":TTe,"el-GR":NTe,"en-US":kTe,"es-ES":YTe,"et-EE":KTe,"fi-FI":FTe,"fr-FR":DTe,"he-IL":xTe,"hr-HR":ETe,"hu-HU":MTe,"it-IT":zTe,"ja-JP":PTe,"ko-KR":JTe,"lt-LT":OTe,"lv-LV":_Te,"nb-NO":LTe,"nl-NL":UTe,"pl-PL":QTe,"pt-BR":jTe,"pt-PT":$Te,"ro-RO":qTe,"ru-RU":eNe,"sk-SK":tNe,"sl-SI":gNe,"sr-SP":INe,"sv-SE":iNe,"tr-TR":nNe,"uk-UA":CNe,"zh-CN":rNe,"zh-TW":oNe};class Hog extends JHe{isCell(g){return g.type==="cell"||g.type==="rowheader"||g.type==="column"}getKeyBelow(g){let I=this.collection.getItem(g);if(I){if(I.type==="column"){let i=As(wi(I,this.collection));if(i)return i.key;let n=this.getFirstKey();if(n==null)return;let C=this.collection.getItem(n);return Ul(wi(C,this.collection),I.index).key}return super.getKeyBelow(g)}}getKeyAbove(g){let I=this.collection.getItem(g);if(!I)return;if(I.type==="column"){let n=this.collection.getItem(I.parentKey);return n&&n.type==="column"?n.key:void 0}let i=super.getKeyAbove(g);return i!=null&&this.collection.getItem(i).type!=="headerrow"?i:this.isCell(I)?this.collection.columns[I.index].key:this.collection.columns[0].key}findNextColumnKey(g){let I=this.findNextKey(g.key,n=>n.type==="column");if(I!=null)return I;let i=this.collection.headerRows[g.level];for(let n of wi(i,this.collection))if(n.type==="column")return n.key}findPreviousColumnKey(g){let I=this.findPreviousKey(g.key,C=>C.type==="column");if(I!=null)return I;let i=this.collection.headerRows[g.level],n=[...wi(i,this.collection)];for(let C=n.length-1;C>=0;C--){let r=n[C];if(r.type==="column")return r.key}}getKeyRightOf(g){let I=this.collection.getItem(g);if(I)return I.type==="column"?this.direction==="rtl"?this.findPreviousColumnKey(I):this.findNextColumnKey(I):super.getKeyRightOf(g)}getKeyLeftOf(g){let I=this.collection.getItem(g);if(I)return I.type==="column"?this.direction==="rtl"?this.findNextColumnKey(I):this.findPreviousColumnKey(I):super.getKeyLeftOf(g)}getKeyForSearch(g,I){if(!this.collator)return null;let i=this.collection,n=I??this.getFirstKey();if(n==null)return null;let C=i.getItem(n);C.type==="cell"&&(n=C.parentKey);let r=!1;for(;n!=null;){let o=i.getItem(n);for(let a of wi(o,this.collection)){let s=i.columns[a.index];if(i.rowHeaderColumnKeys.has(s.key)&&a.textValue){let A=a.textValue.slice(0,g.length);if(this.collator.compare(A,g)===0)return(I!=null?i.getItem(I):C).type==="cell"?a.key:o.key}}n=this.getKeyBelow(n),n==null&&!r&&(n=this.getFirstKey(),r=!0)}return null}}function Tog(e,g,I){let{keyboardDelegate:i,isVirtualized:n,layout:C}=e,r=DHe({usage:"search",sensitivity:"base"}),{direction:o}=Gm(),a=g.selectionManager.disabledBehavior,s=U.useMemo(()=>i||new Hog({collection:g.collection,disabledKeys:a==="selection"?new Set:g.disabledKeys,ref:I,direction:o,collator:r,layout:C}),[i,g.collection,g.disabledKeys,a,I,o,r,C]),A=Dh(e.id);G8.set(g,A);let{gridProps:l}=Sog({...e,id:A,keyboardDelegate:s},g,I);n&&(l["aria-rowcount"]=g.collection.size+g.collection.headerRows.length),zH()&&"expandedKeys"in g&&(l.role="treegrid");let{column:c,direction:u}=g.sortDescriptor||{},d=my(Z8(rY)),h=U.useMemo(()=>{var f;let b=(f=g.collection.columns.find(p=>p.key===c))===null||f===void 0?void 0:f.textValue;return u&&c?d.format(`${u}Sort`,{columnName:b}):void 0},[u,c,g.collection.columns]),m=IY(h);return SHe(()=>{EHe(h,"assertive",500)},[h]),{gridProps:Gi(l,m,{"aria-describedby":[m["aria-describedby"],l["aria-describedby"]].filter(Boolean).join(" ")})}}function Nog(e,g,I){var i,n;let{node:C}=e,r=C.props.allowsSorting,{gridCellProps:o}=STe({...e,focusMode:"child"},g,I),a=C.props.isSelectionCell&&g.selectionManager.selectionMode==="single",{pressProps:s}=c8({isDisabled:!r||a,onPress(){g.sort(C.key)},ref:I}),{focusableProps:A}=KHe({},I),l=null,c=((i=g.sortDescriptor)===null||i===void 0?void 0:i.column)===C.key,u=(n=g.sortDescriptor)===null||n===void 0?void 0:n.direction;C.props.allowsSorting&&!KH()&&(l=c?u:"none");let d=my(Z8(rY)),h;r&&(h=`${d.format("sortable")}`,c&&u&&KH()&&(h=`${h}, ${d.format(u)}`));let m=IY(h),f=g.collection.size===0;return U.useEffect(()=>{f&&g.selectionManager.focusedKey===C.key&&g.selectionManager.setFocusedKey(null)},[f,g.selectionManager,C.key]),{columnHeaderProps:{...Gi(o,s,A,m,f&&{tabIndex:-1}),role:"columnheader",id:Xog(g,C.key),"aria-colspan":C.colspan&&C.colspan>1?C.colspan:null,"aria-sort":l}}}const $ce={expand:{ltr:"ArrowRight",rtl:"ArrowLeft"},collapse:{ltr:"ArrowLeft",rtl:"ArrowRight"}};function kog(e,g,I){let{node:i,isVirtualized:n}=e,{rowProps:C,...r}=Rog(e,g,I),{direction:o}=Gm();n&&!(zH()&&"expandedKeys"in g)?C["aria-rowindex"]=i.index+1+g.collection.headerRows.length:delete C["aria-rowindex"];let a={};if(zH()&&"expandedKeys"in g){let u=g.keyMap.get(i.key);if(u!=null){var s,A,l;let d=((s=u.props)===null||s===void 0?void 0:s.UNSTABLE_childItems)||((l=u.props)===null||l===void 0||(A=l.children)===null||A===void 0?void 0:A.length)>g.userColumnCount;a={onKeyDown:h=>{(h.key===$ce.expand[o]&&g.selectionManager.focusedKey===u.key&&d&&g.expandedKeys!=="all"&&!g.expandedKeys.has(u.key)||h.key===$ce.collapse[o]&&g.selectionManager.focusedKey===u.key&&d&&(g.expandedKeys==="all"||g.expandedKeys.has(u.key)))&&(g.toggleKey(u.key),h.stopPropagation())},"aria-expanded":d?g.expandedKeys==="all"||g.expandedKeys.has(i.key):void 0,"aria-level":u.level,"aria-posinset":u.indexOfType+1,"aria-setsize":u.level>1?yc(g.keyMap.get(u==null?void 0:u.parentKey).childNodes).indexOfType+1:yc(g.keyMap.get(g.collection.body.key).childNodes).indexOfType+1}}}let c=r.hasAction?Irg(i.props):{};return{rowProps:{...Gi(C,a,c),"aria-labelledby":RTe(g,i.key)},...r}}function Yog(e,g,I){let{node:i,isVirtualized:n}=e,C={role:"row"};return n&&!(zH()&&"expandedKeys"in g)&&(C["aria-rowindex"]=i.index+1),{rowProps:C}}function Kog(e,g,I){let{gridCellProps:i,isPressed:n}=STe(e,g,I),C=e.node.column.key;return g.collection.rowHeaderColumnKeys.has(C)&&(i.role="rowheader",i.id=wTe(g,e.node.parentKey,C)),{gridCellProps:i,isPressed:n}}function Fog(e,g){let{key:I}=e;const{checkboxProps:i}=Vog(e,g);return{checkboxProps:{...i,"aria-labelledby":`${i.id} ${RTe(g,I)}`}}}function Dog(e){let{isEmpty:g,isSelectAll:I,selectionMode:i}=e.selectionManager;return{checkboxProps:{"aria-label":my(Z8(rY)).format(i==="single"?"select":"selectAll"),isSelected:I,isDisabled:i!=="multiple"||e.collection.size===0,isIndeterminate:!g&&!I,onChange:()=>e.selectionManager.toggleSelectAll()}}}function aNe(){return wog()}var ANe={exports:{}},sNe={};/** +- less than or equal to : "less-than-or-equal-to", "ltet", "LTET"`},target:{description:"Target specifies the object that you want to compare with the threshold.",enum:["track","mark"],type:"string"},threshold:{description:"Set a threshold in the unit of base pairs (bp)",type:"number"},transitionPadding:{description:"Specify the buffer size (in pixel) of width or height for smooth transition.\n\n__Default__: `0`",type:"number"}},required:["measure","operation","target","threshold"],type:"object"},ZoomLimits:{items:{type:["number","null"]},maxItems:2,minItems:2,type:"array"}},ogg={$ref:ngg,$schema:rgg,definitions:Cgg};function agg(e){return V2e(ogg,e)}function V2e(e,g,i=!1){const I=new G6e({extendRefs:!0}).compile(e),n=I(g);let r="",C="";return I.errors&&(C=JSON.stringify(I.errors,null,2),i||console.warn(C),r="⚠️ Some properties are incorrectly used."),{state:n?"success":"warn",message:r,details:C}}function W2e(e){let g=!0;const i=[];return Y0(e).forEach(n=>{!t8(n)&&n.mark!=="brush"&&n.mark!=="rule"&&(i.push("genomic type is not encoded to either a x- or y- axis"),g=!1);const r=n.color;n.mark==="line"&&ut(r)&&r.type==="quantitative"&&(i.push("`line` mark cannot be used with `quantitative` value"),g=!1)}),{valid:g,errorMessages:i}}function t8(e){let g;return["x","y","xe","ye","x1","y1","x1e","y1e"].reverse().forEach(i=>{const I=e[i];ut(I)&&I.type==="genomic"&&(g=I)}),g}function X2e(e){let g;return["x","xe","y","ye","x1","y1","x1e","y1e"].reverse().forEach(i=>{const I=e[i];ut(I)&&I.type==="genomic"&&(g=i)}),g}const Agg=[{name:"gene",channels:[{name:"startPosition",type:"genomic",required:!0},{name:"endPosition",type:"genomic",required:!0},{name:"strandColor",type:"nominal",required:!0},{name:"strandRow",type:"nominal",required:!0},{name:"opacity",type:"value",required:!1},{name:"geneHeight",type:"value",required:!1},{name:"geneLabel",type:"nominal",required:!0},{name:"geneLabelColor",type:"nominal",required:!0},{name:"geneLabelFontSize",type:"value",required:!1},{name:"geneLabelStroke",type:"value",required:!1},{name:"geneLabelStrokeThickness",type:"value",required:!1},{name:"geneLabelOpacity",type:"value",required:!1},{name:"type",type:"nominal",required:!0}],mapping:[{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["-"]}],mark:"triangleLeft",x:{base:"startPosition",type:"genomic"},size:{base:"geneHeight",value:12},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},style:{align:"right"}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["+"]}],mark:"triangleRight",x:{base:"endPosition",type:"genomic"},size:{base:"geneHeight",value:12},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},style:{align:"left"}},{dataTransform:[{type:"filter",base:"type",oneOf:["exon"]}],mark:"rect",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},size:{base:"geneHeight",value:12},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["+"]}],mark:"rect",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},size:{value:3}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]},{type:"filter",base:"strandColor",oneOf:["-"]}],mark:"rect",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"strandColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:.4},size:{value:3}},{dataTransform:[{type:"filter",base:"type",oneOf:["gene"]}],mark:"text",text:{base:"geneLabel",type:"nominal"},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},row:{base:"strandRow",type:"nominal",domain:["+","-"]},color:{base:"geneLabelColor",type:"nominal",domain:["+","-"],range:["blue","red"]},opacity:{base:"opacity",value:1},size:{base:"geneLabelFontSize",value:18},stroke:{base:"geneLabelStroke",value:"white"},strokeWidth:{base:"geneLabelStrokeThickness",value:2},visibility:[{operation:"less-than",measure:"width",threshold:"|xe-x|",transitionPadding:10,target:"mark"}]}]},{name:"ideogram",channels:[{name:"startPosition",type:"genomic",required:!0},{name:"endPosition",type:"genomic",required:!0},{name:"chrHeight",type:"value",required:!1},{name:"name",type:"nominal",required:!0},{name:"stainBackgroundColor",type:"nominal",required:!0},{name:"stainLabelColor",type:"nominal",required:!0},{name:"stainStroke",type:"value",required:!1},{name:"stainStrokeWidth",type:"value",required:!1}],mapping:[{mark:"rect",dataTransform:[{type:"filter",base:"stainBackgroundColor",oneOf:["acen"],not:!0}],color:{base:"stainBackgroundColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar","acen"],range:["white","lightgray","gray","gray","black","#7B9CC8","#DC4542"]},size:{base:"chrHeight",value:18},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},stroke:{base:"stainStroke",value:"gray"},strokeWidth:{base:"stainStrokeWidth",value:.3}},{mark:"triangleRight",dataTransform:[{type:"filter",base:"stainBackgroundColor",oneOf:["acen"]},{type:"filter",base:"name",include:"q"}],color:{base:"stainBackgroundColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar","acen"],range:["white","lightgray","gray","gray","black","#7B9CC8","#DC4542"]},size:{base:"chrHeight",value:18},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},stroke:{base:"stainStroke",value:"gray"},strokeWidth:{base:"stainStrokeWidth",value:.3}},{mark:"triangleLeft",dataTransform:[{type:"filter",base:"stainBackgroundColor",oneOf:["acen"]},{type:"filter",base:"name",include:"p"}],color:{base:"stainBackgroundColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar","acen"],range:["white","lightgray","gray","gray","black","#7B9CC8","#DC4542"]},size:{base:"chrHeight",value:18},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},stroke:{base:"stainStroke",value:"gray"},strokeWidth:{base:"stainStrokeWidth",value:.3}},{mark:"text",dataTransform:[{type:"filter",base:"stainLabelColor",oneOf:["acen"],not:!0}],color:{base:"stainLabelColor",type:"nominal",domain:["gneg","gpos25","gpos50","gpos75","gpos100","gvar"],range:["black","black","black","black","white","black"]},text:{base:"name",type:"nominal"},x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},visibility:[{operation:"less-than",measure:"width",threshold:"|xe-x|",transitionPadding:10,target:"mark"}]}]},{name:"sequence",channels:[{name:"startPosition",type:"genomic",required:!0},{name:"endPosition",type:"genomic",required:!0},{name:"barLength",type:"quantitative",required:!0},{name:"baseBackground",type:"nominal",required:!0},{name:"baseLabelColor",type:"nominal",required:!0},{name:"baseLabelFontSize",type:"value",required:!1}],mapping:[{mark:"bar",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},y:{base:"barLength",type:"quantitative",axis:"none"},color:{base:"baseBackground",type:"nominal",domain:["A","T","G","C"]}},{dataTransform:[{type:"filter",base:"barLength",oneOf:[0],not:!0}],mark:"text",x:{base:"startPosition",type:"genomic"},xe:{base:"endPosition",type:"genomic"},color:{base:"baseLabelColor",type:"nominal",domain:["A","T","G","C"],range:["white"]},text:{base:"baseBackground",type:"nominal"},size:{base:"baseLabelFontSize",value:18},visibility:[{operation:"less-than",measure:"width",threshold:"|xe-x|",transitionPadding:30,target:"mark"},{operation:"LT",measure:"zoomLevel",threshold:10,target:"track"}]}]}];function sgg(e,g){L9(e,(i,I,n)=>{var r,C;if(!zje(i))return;const{template:o}=i,a=g.find(c=>c.name===o);if(!a){i._invalidTrack=!0,console.warn(`There is no track template named '${o}'`);return}let s=!0;if(a.channels.forEach(c=>{c.required&&(!i.encoding||!(c.name in i.encoding))&&(s=!1,console.warn(`A template spec ('${o}') does not contain a required channel, ${c.name}`))}),!s){i._invalidTrack=!0;return}const A=JSON.parse(JSON.stringify(i));"encoding"in A&&delete A.encoding;const l={...A,alignment:"overlay",tracks:[],width:(r=i.width)!=null?r:100,height:(C=i.height)!=null?C:100};a.mapping.forEach(c=>{const u={data:i.data,mark:c.mark},{dataTransform:d}=c;d&&d.map(m=>{const f=m.base;f&&i.encoding&&f in i.encoding&&"field"in i.encoding[f]&&(delete m.base,m.field=i.encoding[f].field)});const h=i.encoding;h?Object.keys(c).filter(m=>m!=="mark").forEach(m=>{const f=JSON.parse(JSON.stringify(c[m]));if("base"in f){const b=f.base;if(b in h){const p=JSON.parse(JSON.stringify(h[b]));delete f.base;const y=Object.assign(f,JSON.parse(JSON.stringify(p)));u[m]=y}else delete f.base,u[m]=f}else u[m]=f}):Object.keys(c).filter(m=>m!=="mark").forEach(m=>{const f=JSON.parse(JSON.stringify(c[m]));"base"in f&&delete f.base,u[m]=f}),l.tracks.push(u)}),n[I]=l})}const dle=["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],So={color:dle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:dle,quantitativeSizeRange:[2,6]},lgg={base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelMargin:5,labelExcludeChrPrefix:!1,labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{...So},point:{...So,size:3},rect:{...So},triangle:{...So},area:{...So},line:{...So},bar:{...So},rule:{...So,strokeWidth:1},link:{...So,strokeWidth:1},text:{...So,textAnchor:"middle",textFontWeight:"normal"},brush:{...So,color:"gray",opacity:.3,stroke:"black",strokeWidth:1}},hle=["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],cgg={color:hle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:hle,quantitativeSizeRange:[2,6]},wo={...cgg,stroke:"white"},ugg={base:"dark",root:{background:"black",titleColor:"white",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"middle",titleFontWeight:"bold",subtitleColor:"lightgray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleAlign:"middle",subtitleFontWeight:"normal",showMousePosition:!0,mousePositionColor:"#FFFFFF"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"white",titleBackground:"black",titleFontSize:18,titleAlign:"left",outline:"white",outlineWidth:1},legend:{position:"right",background:"black",backgroundOpacity:.7,labelColor:"white",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"white"},axis:{tickColor:"white",labelMargin:5,labelExcludeChrPrefix:!1,labelColor:"white",labelFontSize:10,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"white",gridColor:"gray",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{...wo},point:{...wo,size:3},rect:{...wo},triangle:{...wo},area:{...wo},line:{...wo},bar:{...wo},rule:{...wo,strokeWidth:1},link:{...wo,strokeWidth:1},text:{...wo,textAnchor:"middle",textFontWeight:"normal"},brush:{...wo,color:"lightgray",opacity:.3,stroke:"white",strokeWidth:1}},mle=["#D19000","#008F67","#005F96","#B86E97","#B55100","#4793BF","#C9C03"],Ro={color:mle[0],size:1,stroke:"#3C3C3C",strokeWidth:0,opacity:1,nominalColorRange:mle,quantitativeSizeRange:[2,6]},dgg={base:"warm",root:{background:"#FFF8E8",titleColor:"#3C3C3C",subtitleColor:"gray",showMousePosition:!0,mousePositionColor:"#3C3C3C"},track:{titleColor:"#3C3C3C",titleBackground:"#FFF8E8",outline:"#3C3C3C",outlineWidth:1},legend:{background:"#FFF8E8",backgroundOpacity:.7,labelColor:"#3C3C3C",backgroundStroke:"#3C3C3C",tickColor:"3C3C3C"},axis:{tickColor:"#3C3C3C",labelColor:"#3C3C3C",baselineColor:"#3C3C3C",gridColor:"#E3E3E3",gridStrokeWidth:1},markCommon:{...Ro},point:{...Ro,size:3},rect:{...Ro},triangle:{...Ro},area:{...Ro},line:{...Ro},bar:{...Ro},rule:{...Ro,strokeWidth:1},link:{...Ro,strokeWidth:1},text:{...Ro,textAnchor:"middle",textFontWeight:"normal"},brush:{...Ro,color:"lightgray",opacity:.3,stroke:"#3C3C3C",strokeWidth:1}},fle=["#F66A62","#05B230","#5692FF","#D764D6","#86E9D4","#6E6AD7","#FFFB00"],Vo={color:fle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:fle,quantitativeSizeRange:[2,6]},hgg={base:"ggplot",root:{background:"white",titleColor:"black",titleFontSize:18,titleFontFamily:"Helvetica",titleAlign:"middle",titleFontWeight:"bold",titleBackgroundColor:"white",subtitleColor:"gray",subtitleFontSize:14,subtitleFontFamily:"Helvetica",subtitleAlign:"middle",subtitleFontWeight:"light",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"black"},track:{background:"#e8e8e8",alternatingBackground:"#d1d1d1",titleColor:"black",titleBackground:"white",outline:"black",outlineWidth:2},legend:{position:"right",background:"#e8e8e8",backgroundOpacity:1,labelColor:"black",backgroundStroke:"#e8e8e8",tickColor:"white"},axis:{tickColor:"white",labelColor:"black",baselineColor:"#e8e8e8",gridColor:"white",gridStrokeWidth:2},markCommon:{...Vo},point:{...Vo,size:3},rect:{...Vo},triangle:{...Vo},area:{...Vo},line:{...Vo},bar:{...Vo},rule:{...Vo,strokeWidth:1},link:{...Vo,strokeWidth:1},text:{...Vo,textAnchor:"middle",textFontWeight:"bold"},brush:{...Vo,color:"black",opacity:.3,stroke:"black",strokeWidth:1}},ple=["#37E649","#ED2D44","#AEAFEA","#EBAEAE","#CE7B3D","#8743E0","#5233F0"],Wo={color:ple[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:ple,quantitativeSizeRange:[2,6]},mgg={base:"igv",root:{background:"white",titleColor:"white",titleAlign:"left",titleFontWeight:"bold",titleBackgroundColor:"#5f5f5f",subtitleColor:"#3b3b3b",subtitleAlign:"left",subtitleFontWeight:"bold",subtitleBackgroundColor:"#c4c4c4",showMousePosition:!0,mousePositionColor:"black"},track:{background:"white",alternatingBackground:"#e8e8e8",titleColor:"white",titleBackground:"#5F5F5F",outline:"#5F5F5F",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:1,labelColor:"black",backgroundStroke:"black",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",baselineColor:"white",gridColor:"transparent",gridStrokeWidth:0},markCommon:{...Wo},point:{...Wo,size:3},rect:{...Wo},triangle:{...Wo},area:{...Wo},line:{...Wo},bar:{...Wo},rule:{...Wo,strokeWidth:1},link:{...Wo,strokeWidth:1},text:{...Wo,textAnchor:"middle",textFontWeight:"bold"},brush:{...Wo,color:"white",opacity:.3,stroke:"black",strokeWidth:1}},ble=["#CD9B1D","#8A668B","#40E0D0","#FF6969","#666666","#FAC902","#FE0000","#CC96CD","#D9D9D9"],Xo={color:ble[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:ble,quantitativeSizeRange:[2,6]},fgg={base:"ensembl",root:{background:"white",titleColor:"#494949",titleFontSize:24,titleFontFamily:"GGX88",titleAlign:"left",titleFontWeight:"bold",titleBackgroundColor:"white",subtitleColor:"white",subtitleFontSize:19,subtitleFontFamily:"GGX88",subtitleAlign:"left",subtitleFontWeight:"normal",subtitleBackgroundColor:"#7B8BAF",mousePositionColor:"#FE0000",showMousePosition:!0},track:{background:"white",alternatingBackground:"#fffdf7",titleColor:"black",titleBackground:"white",titleAlign:"left",outline:"#7B8BAF",outlineWidth:2},legend:{tickColor:"black",labelColor:"black",labelFontWeight:"normal",labelFontFamily:"GGX88",background:"white",backgroundOpacity:2,backgroundStroke:"lightgray"},axis:{tickColor:"black",labelColor:"black",labelFontFamily:"GGX88",baselineColor:"black",gridColor:"#7B8BAF",gridStrokeWidth:2},markCommon:{...Xo},point:{...Xo,size:3},rect:{...Xo},triangle:{...Xo},area:{...Xo},line:{...Xo},bar:{...Xo},rule:{...Xo,strokeWidth:1},link:{...Xo,strokeWidth:1},text:{...Xo,textAnchor:"middle",textFontWeight:"normal"},brush:{...Xo,color:"gray",opacity:.3,stroke:"black",strokeWidth:1}},yle=["#3A62FE","#F85353","#3A62FE","#F85353","#DCA326","#03BF06","#BABABA"],Ho={color:yle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:yle,quantitativeSizeRange:[2,6]},pgg={base:"jbrowse",root:{background:"white",titleColor:"white",titleFontSize:20,titleFontFamily:"Roboto",titleAlign:"middle",titleFontWeight:"normal",titleBackgroundColor:"#0b243f",subtitleColor:"white",subtitleFontSize:18,subtitleFontFamily:"Roboto",subtitleAlign:"middle",subtitleFontWeight:"normal",subtitleBackgroundColor:"#732162",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",alternatingBackground:"white",titleAlign:"middle",titleColor:"white",titleBackground:"#0B243F",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"#DCA326",labelFontWeight:"bold",labelFontFamily:"Roboto",backgroundStroke:"#black",tickColor:"black"},axis:{tickColor:"black",labelColor:"#DCA326",labelFontWeight:"bold",labelFontFamily:"Roboto",baselineColor:"black",gridColor:"#c5d5d9",gridStrokeWidth:1},markCommon:{...Ho},point:{...Ho,size:3},rect:{...Ho},triangle:{...Ho},area:{...Ho},line:{...Ho},bar:{...Ho},rule:{...Ho,strokeWidth:1},link:{...Ho,strokeWidth:1},text:{...Ho,textAnchor:"middle",textFontWeight:"normal"},brush:{...Ho,color:"#c5d5d9",opacity:.3,stroke:"black",strokeWidth:1}},Zle=["#3A5FCD","#FFA54E","#8FBC8F","#B6709B","#EE6A50","#CCB79E","#DADA8F","#00CDCC","#EED5D2","#CD8EDD","#9ACD31","#D1BEA8","#FFB6C0"],To={color:Zle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:Zle,quantitativeSizeRange:[2,6]},bgg={base:"ucsc",root:{background:"white",titleColor:"white",titleFontSize:22,titleAlign:"middle",titleFontWeight:"bold",titleBackgroundColor:"#00457c",subtitleColor:"black",subtitleAlign:"middle",subtitleFontWeight:"bold",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#FE0000"},track:{background:"white",alternatingBackground:"#e3f7fc",titleColor:"#3A5FCD",titleBackground:"white",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontWeight:"bold",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"#3A5FCD",labelFontWeight:"bold",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1},markCommon:{...To},point:{...To,size:3},rect:{...To},triangle:{...To},area:{...To},line:{...To},bar:{...To},rule:{...To,strokeWidth:1},link:{...To,strokeWidth:1},text:{...To,textAnchor:"middle",textFontWeight:"normal"},brush:{...To,color:"gray",opacity:.3,stroke:"black",strokeWidth:1}},Gle=["#6E12AC","#15C250","#E70FB1","#FF8E55","#A3B8F3","#DE5E59","#77AAAA","#F5CCCA"],No={color:Gle[0],size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:Gle,quantitativeSizeRange:[2,6]},ygg={base:"washu",root:{background:"white",titleColor:"gray",titleAlign:"left",titleFontWeight:"normal",titleBackgroundColor:"white",subtitleColor:"lightgray",subtitleAlign:"left",subtitleFontWeight:"light",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",titleColor:"gray",titleBackground:"white",titleAlign:"left",outline:"gray",outlineWidth:1},legend:{background:"white",backgroundOpacity:.5,labelColor:"gray",labelFontWeight:"light",backgroundStroke:"#DBDBDB",tickColor:"gray"},axis:{tickColor:"lightgray",labelColor:"gray",labelFontWeight:"light",baselineColor:"gray",gridColor:"transparent",gridStrokeWidth:0},markCommon:{...No},point:{...No,size:3},rect:{...No},triangle:{...No},area:{...No},line:{...No},bar:{...No},rule:{...No,strokeWidth:1},link:{...No,strokeWidth:1},text:{...No,textAnchor:"middle",textFontWeight:"normal"},brush:{...No,color:"gray",opacity:.3,stroke:"gray",strokeWidth:1}},vle=["#ED7D31","#4472C4","#FFC207","#76AE4F","#9E480E","#A5A5A5","#4472C4","#264378","#76AE4F","#5B9CD5"],ko={color:vle[0],size:1,stroke:"#5A5A5A",strokeWidth:0,opacity:1,nominalColorRange:vle,quantitativeSizeRange:[2,6]},Zgg={base:"excel",root:{background:"white",titleColor:"#5A5A5A",titleFontSize:30,titleFontFamily:"Calibri",titleAlign:"middle",titleFontWeight:"bold",titleBackgroundColor:"white",subtitleColor:"#5A5A5A",subtitleFontSize:22,subtitleFontFamily:"Calibri",subtitleAlign:"middle",subtitleFontWeight:"bold",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",alternatingBackground:"#f5f5f5",titleColor:"#5A5A5A",titleBackground:"white",outline:"#5A5A5A",outlineWidth:1},legend:{position:"right",tickColor:"#5A5A5A",labelColor:"#5A5A5A",labelFontSize:12,labelFontWeight:"bold",labelFontFamily:"Calibri",background:"white",backgroundOpacity:.7,backgroundStroke:"#5A5A5A"},axis:{tickColor:"#5A5A5A",labelColor:"#5A5A5A",labelFontFamily:"Calibri",baselineColor:"#5A5A5A",gridColor:"#5A5A5A",gridStrokeWidth:1},markCommon:{...ko},point:{...ko,size:3},rect:{...ko},triangle:{...ko},area:{...ko},line:{...ko},bar:{...ko},rule:{...ko,strokeWidth:1},link:{...ko,strokeWidth:1},text:{...ko,textAnchor:"middle",textFontWeight:"normal"},brush:{...ko,color:"#5A5A5A",opacity:.3,stroke:"#5A5A5A",strokeWidth:1}},Ble=["#4185f4","#DB4437","#F4B400","#0D9D58","#AA30C3","#FF6E02","#CBC74C"],Yo={color:Ble[0],size:2,stroke:"black",strokeWidth:.3,opacity:1,nominalColorRange:Ble,quantitativeSizeRange:[2,6]},Ggg={base:"google",root:{background:"white",titleColor:"#454545",titleFontSize:20,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"normal",titleBackgroundColor:"white",subtitleColor:"#7d7d7d",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleAlign:"left",subtitleFontWeight:"light",subtitleBackgroundColor:"white",showMousePosition:!0,mousePositionColor:"#000000"},track:{background:"white",alternatingBackground:"#f5f5f5",titleColor:"#e8e8e8",titleBackground:"white",titleFontSize:12,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"right",background:"white",backgroundOpacity:1,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"black",tickColor:"black"},axis:{labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",tickColor:"black",labelColor:"black",baselineColor:"black",gridColor:"black",gridStrokeWidth:1},markCommon:{...Yo},point:{...Yo,size:3},rect:{...Yo},triangle:{...Yo},area:{...Yo},line:{...Yo},bar:{...Yo},rule:{...Yo,strokeWidth:1},link:{...Yo,strokeWidth:1},text:{...Yo,textAnchor:"middle",textFontWeight:"normal"},brush:{...Yo,color:"#999999",opacity:.3,stroke:"black",strokeWidth:.7}},A_={light:lgg,dark:ugg,warm:dgg,ggplot:hgg,igv:mgg,ensembl:fgg,jbrowse:pgg,ucsc:bgg,washu:ygg,excel:Zgg,google:Ggg};function s_(e){return Object.keys(A_).indexOf(e)!==-1}function ZG(e){return s_(e)?A_[e]:A_.light}function g8(e,g){var i;function I(...n){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');return g(...n)}return I.config={...e,availableOptions:Object.keys((i=e.defaultOptions)!=null?i:{})},I}const vgg=200,Bgg=6,Sgg=2,H2e=7829367,wgg=' ',Rgg={type:"axis-track",datatype:["multivec","epilogos"],local:!1,orientation:"1d-horizontal",thumbnail:new DOMParser().parseFromString(wgg,"text/xml").documentElement,defaultOptions:{innerRadius:340,outerRadius:310,startAngle:0,endAngle:360,width:700,height:700,layout:"linear",labelMargin:5,excludeChrPrefix:!1,labelPosition:"none",labelColor:"black",labelTextOpacity:.4,trackBorderWidth:0,trackBorderColor:"black",tickPositions:"even",fontSize:12,fontFamily:"sans-serif",fontWeight:"normal",color:"#808080",stroke:"#ffffff",backgroundColor:"transparent",showMousePosition:!1,tickColor:H2e}},Vgg=(e,g,i)=>{const{absToChr:I,colorToHex:n,pixiTextToSvg:r,svgLine:C,showMousePosition:o}=e.utils;function a(A,l){return Object.assign(new e.libraries.PIXI.Text(A,l),{hashValue:Math.random()})}class s extends e.tracks.PixiTrack{constructor(){super(g,i),Ct(this,"allTexts"),Ct(this,"searchField"),Ct(this,"chromInfo"),Ct(this,"dataConfig"),Ct(this,"pTicksCircular"),Ct(this,"pTicks"),Ct(this,"gTicks"),Ct(this,"tickTexts"),Ct(this,"isShowGlobalMousePosition"),Ct(this,"pixiTextConfig"),Ct(this,"stroke"),Ct(this,"tickWidth"),Ct(this,"tickHeight"),Ct(this,"tickTextSeparation"),Ct(this,"tickColor"),Ct(this,"animate"),Ct(this,"hideMousePosition"),Ct(this,"gBoundTicks"),Ct(this,"leftBoundTick"),Ct(this,"rightBoundTick"),Ct(this,"is2d"),Ct(this,"texts");const{dataConfig:l,animate:c,chromInfoPath:u,isShowGlobalMousePosition:d}=g;this.searchField=null,this.dataConfig=l,this.allTexts=[],this.pTicksCircular=new e.libraries.PIXI.Graphics,this.pTicks=new e.libraries.PIXI.Graphics,this.pMain.addChild(this.pTicks),this.pMain.addChild(this.pTicksCircular),this.gTicks={},this.tickTexts={},this.options=i,this.isShowGlobalMousePosition=d,this.pixiTextConfig=Ds({size:+this.options.fontSize,fontFamily:this.options.fontFamily,fontWeight:this.options.fontWeight,color:this.options.color,stroke:this.options.stroke,strokeThickness:2}),this.stroke=n(this.pixiTextConfig.stroke),this.tickWidth=vgg,this.tickHeight=Bgg,this.tickTextSeparation=Sgg,this.tickColor=n(this.options.tickColor),this.animate=c,this.pubSubs=[],this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=o(this,this.is2d,this.isShowGlobalMousePosition()));let h=u;h||(h=`${l.server}/chrom-sizes/?id=${l.tilesetUid}`);const m=this.options.assembly,f={},b={...yi(m).size},p=[];Object.keys(yi(m).size).forEach(y=>{f[y]={chr:y,pos:yi(m).size[y]}}),Object.keys(yi(m).interval).forEach(y=>{p.push({chr:y,pos:yi(m).interval[y][0]})}),this.chromInfo={chrPositions:f,chromLengths:b,cumPositions:p},this.rerender(this.options,!0),this.draw(),this.animate()}initBoundsTicks(){this.pTicks&&(this.pMain.removeChild(this.pTicks),this.pTicks=null),this.gBoundTicks||(this.gBoundTicks=new e.libraries.PIXI.Graphics,this.leftBoundTick=a("",this.pixiTextConfig),this.rightBoundTick=a("",this.pixiTextConfig),this.gBoundTicks.addChild(this.leftBoundTick),this.gBoundTicks.addChild(this.rightBoundTick),this.pMain.addChild(this.gBoundTicks)),this.texts=[]}initChromLabels(){this.chromInfo&&(this.gBoundTicks&&(this.pMain.removeChild(this.gBoundTicks),this.gBoundTicks=void 0),this.pTicks||(this.pTicks=new e.libraries.PIXI.Graphics,this.pMain.addChild(this.pTicks)),this.texts=[],this.pTicks.removeChildren(),this.chromInfo.cumPositions.forEach(l=>{var c,u,d;const h=l.chr;this.gTicks[h]=new e.libraries.PIXI.Graphics,this.tickTexts[h]||(this.tickTexts[h]=[]);const m=this.options.excludeChrPrefix?h.replace("chr",""):h,f=a(m,this.pixiTextConfig);(c=this.pTicks)==null||c.addChild(f),(u=this.pTicks)==null||u.addChild(this.gTicks[h]),(d=this.texts)==null||d.push(f)}))}rerender(l,c){const u=JSON.stringify(l);!c&&u===this.prevOptions||(this.prevOptions=u,this.options=l,this.pixiTextConfig.fontSize=+this.options.fontSize?`${+this.options.fontSize}px`:this.pixiTextConfig.fontSize,this.pixiTextConfig.fill=this.options.color||this.pixiTextConfig.fill,this.pixiTextConfig.stroke=this.options.stroke||this.pixiTextConfig.stroke,this.stroke=n(this.pixiTextConfig.stroke),this.tickColor=this.options.tickColor?n(this.options.tickColor):H2e,this.options.tickPositions==="ends"&&this.options.layout!=="circular"?this.initBoundsTicks():this.initChromLabels(),super.rerender(l,c),this.options.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=o(this,this.is2d,this.isShowGlobalMousePosition())),!this.options.showMousePosition&&this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0))}formatTick(l){if(isNaN(l))return"null";const c=this._xScale.domain(),u=c[1]-c[0],d=hqe(l,u),h=V0e(","),m=W0e(`,.${d}`,u);let f=h;return this.options.tickFormat==="si"?f=m:this.options.tickFormat==="plain"?f=h:this.options.tickPositions==="ends"&&(f=m),f(l)}drawBoundsTicks(l,c){if(!this.gBoundTicks||!this.leftBoundTick||!this.rightBoundTick)return;const u=this.gBoundTicks;u.clear(),u.lineStyle(1,0);const d=this.options.reverseOrientation?0:this.dimensions[1],h=this.options.reverseOrientation?this.tickHeight:this.dimensions[1]-this.tickHeight;u.moveTo(1,d),u.lineTo(1,h),u.moveTo(this.dimensions[0]-1,d),u.lineTo(this.dimensions[0]-1,h),this.leftBoundTick.x=0,this.leftBoundTick.y=this.options.reverseOrientation?h+this.tickTextSeparation:h-this.tickTextSeparation,this.leftBoundTick.text=this.options.assembly==="unknown"?`${this.formatTick(l[1])}`:`${l[0]}: ${this.formatTick(l[1])}`,this.leftBoundTick.anchor.y=this.options.reverseOrientation?0:1,this.rightBoundTick.x=this.dimensions[0],this.rightBoundTick.text=this.options.assembly==="unknown"?`${this.formatTick(c[1])}`:`${c[0]}: ${this.formatTick(c[1])}`,this.rightBoundTick.y=this.options.reverseOrientation?h+this.tickTextSeparation:h-this.tickTextSeparation,this.rightBoundTick.anchor.y=this.options.reverseOrientation?0:1,this.rightBoundTick.anchor.x=1,this.flipText&&(this.leftBoundTick.scale.x=-1,this.leftBoundTick.anchor.x=1,this.rightBoundTick.scale.x=-1,this.rightBoundTick.anchor.x=0),this.leftBoundTick.tickLine=[1,this.dimensions[1],1,this.dimensions[1]-this.tickHeight],this.rightBoundTick.tickLine=[this.dimensions[0]-1,this.dimensions[1],this.dimensions[0]-1,this.dimensions[1]-this.tickHeight],this.tickTexts={},this.tickTexts.all=[this.leftBoundTick,this.rightBoundTick]}drawTicks(l){const c=this.gTicks[l.chr];c.visible=!0,c.clear();const u=+this.chromInfo.chromLengths[l.chr],d=Math.max(this._xScale(l.pos),0),h=Math.min(this._xScale(l.pos+u),this.dimensions[0]),m=(h-d)/this.tickWidth,b=eh().domain([Math.max(1,this._xScale.invert(0)-l.pos),Math.min(u,this._xScale.invert(this.dimensions[0])-l.pos)]).range([d,h]).ticks(m).filter(v=>Number.isInteger(v)),p=this.tickTexts[l.chr],y=this.tickHeight,Z=0;let B=y+this.tickTextSeparation;for(this.options.reverseOrientation&&(B=this.dimensions[1]-B);p.lengthb.length;){const v=p.pop();this.gTicks[l.chr].removeChild(v)}let G=0;for(;Gu){const R=V-u;V=u,w-=R}const S=[],X=b+G.height/2+3;for(let R=V;R>=w;R-=v/10){const H=Mt(R,u,X,u/2,d/2,h,m);S.push(new e.libraries.PIXI.Point(H.x,H.y))}return S.length===0?void 0:(l.updateText(),new e.libraries.PIXI.SimpleRope(l.texture,S))}draw(){if(this.allTexts=[],!this.texts)return;const l=I(this._xScale.domain()[0],this.chromInfo),c=I(this._xScale.domain()[1],this.chromInfo);if(!l||!c){console.warn("Empty chromInfo:",this.dataConfig,this.chromInfo);return}if(this.options.tickPositions==="ends"&&this.options.layout!=="circular"){if(!this.gBoundTicks)return;this.gBoundTicks.visible=!0,this.drawBoundsTicks(l,c);return}if(!this.pTicks)return;const u=this.options.layout==="circular";for(let h=0;h{this.tickTexts[h]&&this.tickTexts[h].forEach(m=>{m.visible=!1})}),this.pTicksCircular.removeChildren();for(let h=l[3];h<=c[3];h++){const m=this.chromInfo.cumPositions[h],f=m.pos+this.chromInfo.chromLengths[m.chr]/2,b=this._xScale(f),p=this.texts[h];p.anchor.x=.5,p.anchor.y=u?.5:this.options.reverseOrientation?0:1;let y;u?(y=this.addCurvedText(p,b),y&&this.pTicksCircular.addChild(y)):(p.x=b,p.y=this.dimensions[1]-d),p.updateTransform(),this.flipText&&(p.scale.x=-1);const Z=this.drawTicks(m);u?Z>0&&y&&this.pTicksCircular.removeChild(y):p.visible=Z<=0,this.allTexts.push({importance:p.hashValue,text:p,rope:y})}this.hideOverlaps(this.allTexts)}hideOverlaps(l){const c=new gqe;l.sort((u,d)=>d.importance-u.importance).forEach(({text:u,rope:d})=>{u.updateTransform();const h=u.getBounds(),m=this.options.labelMargin,f={minX:h.x-m,minY:h.y-m,maxX:h.x+h.width+m*2,maxY:h.y+h.height+m*2};m<0||!c.collides(f)?c.insert(f):(u.visible=!1,this.options.layout==="circular"&&d&&this.pTicksCircular.removeChild(d))})}setPosition(l){super.setPosition(l),[this.pMain.position.x,this.pMain.position.y]=this.position}zoomed(l,c){[...l.domain(),...c.domain()].filter(d=>isNaN(d)).length===0&&(this.xScale(l),this.yScale(c),this.draw())}exportSVG(){let l=null,c=null;super.exportSVG?[c,l]=super.exportSVG():(c=document.createElement("g"),l=c),c.setAttribute("class","chromosome-labels");const u=document.createElement("g");return l.appendChild(u),u.setAttribute("transform",`translate(${this.position[0]},${this.position[1]})`),this.allTexts.filter(d=>d.text.visible).forEach(d=>{const h=r(d.text);u.appendChild(h)}),Object.values(this.tickTexts).forEach(d=>{d.filter(h=>h.visible).forEach(h=>{if(!h.tickLine)return;let m=r(h);u.appendChild(m),m=C(h.x,this.options.reverseOrientation?0:this.dimensions[1],h.x,this.options.reverseOrientation?this.tickHeight:this.dimensions[1]-this.tickHeight,1,this.tickColor);const f=document.createElement("line");f.setAttribute("x1",String(h.tickLine[0])),f.setAttribute("y1",String(h.tickLine[1])),f.setAttribute("x2",String(h.tickLine[2])),f.setAttribute("y2",String(h.tickLine[3])),f.setAttribute("style","stroke: grey"),u.appendChild(m),u.appendChild(f)})}),[c,l]}}return new s},Sle=g8(Rgg,Vgg);function l_(e,...g){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');class i extends e.tracks.SVGTrack{constructor(n){var r,C;super(...n),Ct(this,"circularBrushData"),Ct(this,"prevExtent");const[o,a]=n,{registerViewportChanged:s,removeViewportChanged:A,setDomainsCallback:l}=o;this.uid=ln(),this.options=a,this.hasFromView=!o.projectionXDomain,this.removeViewportChanged=A,this.setDomainsCallback=l,this.viewportXDomain=this.hasFromView?null:o.projectionXDomain,this.viewportYDomain=this.hasFromView?null:[0,0],this.prevExtent=[0,0],this.RR=.02;const c=[0,Math.PI*1.7];this.circularBrushData=this.getBrushData(c),this.brush=wqe().innerRadius((r=this.options.innerRadius)!=null?r:100).outerRadius((C=this.options.outerRadius)!=null?C:200),this.gBrush=this.gMain.append("g").attr("id",`brush-${this.uid}`).selectAll(".brush").data(this.circularBrushData).enter().append("path").attr("class","brush").attr("d",this.brush).attr("fill",this.options.projectionFillColor).attr("stroke",this.options.projectionStrokeColor).attr("fill-opacity",u=>u.type==="brush"?this.options.projectionFillOpacity:0).attr("stroke-opacity",u=>u.type==="brush"?this.options.projectionStrokeOpacity:0).attr("stroke-width",this.options.strokeWidth).style("pointer-events","all").style("cursor",u=>u.cursor).call(this.dragged()),s(this.uid,this.viewportChanged.bind(this)),this.draw()}getBrushData(n){return[{type:"brush",startAngle:n[0],endAngle:n[1],cursor:"grab"},{type:"start",startAngle:n[0],endAngle:n[0]+this.RR,cursor:"move"},{type:"end",startAngle:n[1]-this.RR,endAngle:n[1],cursor:"move"}]}cropExtent(n){let[r,C]=n,o=0;for(;(r>Math.PI*2||C>Math.PI*2||r<0||C<0)&&!(o++>10);)r>Math.PI*2||C>Math.PI*2?(r-=Math.PI*2,C-=Math.PI*2):(r<0||C<0)&&(r+=Math.PI*2,C+=Math.PI*2);return[r,C].sort((a,s)=>a-s)}updateBrush(n){let[r,C]=n;if(r<=gn&&C<=gn||r>=Math.PI*2-gn&&C>=Math.PI*2-gn){this.gBrush.attr("visibility","hidden");return}rMath.PI*2-gn&&(r=Math.PI*2-gn),CMath.PI*2-gn&&(C=Math.PI*2-gn),this.circularBrushData=this.getBrushData(n),this.gBrush.data(this.circularBrushData).attr("d",this.brush).attr("visibility","visible")}dragged(){const n=C=>{this.startEvent=C.sourceEvent,this.prevExtent=[this.circularBrushData[0].startAngle,this.circularBrushData[0].endAngle]},r=(C,o)=>{const[a,s]=this.position,[A,l]=this.dimensions,c=C.sourceEvent,u=this.startEvent.layerX-a,d=this.startEvent.layerY-s,h=c.layerX-a,m=c.layerY-s,f=Math.atan2(u-A/2,d-l/2)-Math.atan2(h-A/2,m-l/2);let[b,p]=this.prevExtent;if(o.type==="brush"){if(b=b+f,p=p+f,bV?(p+=w,b+=w):(b-=V,p-=V)}}else o.type==="start"?b=b+f:o.type==="end"&&(p=p+f);if([b,p]=this.cropExtent([b,p]),!this._xScale||!this._yScale)return;const y=(this.options.endAngle-this.options.startAngle)/360,Z=b-this.options.startAngle/360*Math.PI*2,B=p-this.options.startAngle/360*Math.PI*2,G=[this._xScale.invert(A-A*B/(Math.PI*2*y)),this._xScale.invert(A-A*Z/(Math.PI*2*y))],v=this.viewportYDomain;this.hasFromView||(this.viewportXDomain=G),this.setDomainsCallback(G,v),this.updateBrush([b,p])};return e.libraries.d3Drag.drag().on("start",n).on("drag",r)}draw(){if(!this._xScale||!this.yScale||!this.viewportXDomain||!this.viewportYDomain)return;const n=this._xScale(this.viewportXDomain[0]),r=this._xScale(this.viewportXDomain[1]),[C]=this.dimensions;let o=$g(n,C,this.options.startAngle,this.options.endAngle)+Math.PI/2,a=$g(r,C,this.options.startAngle,this.options.endAngle)+Math.PI/2;[a,o]=this.cropExtent([a,o]),this.updateBrush([a,o])}viewportChanged(n,r){const C=n.domain(),o=r.domain();this.viewportXDomain=C,this.viewportYDomain=o,this.draw()}remove(){this.removeViewportChanged(this.uid),super.remove()}rerender(){}zoomed(n,r){this.xScale(n),this.yScale(r),this.draw()}setPosition(n){super.setPosition(n),this.draw()}setDimensions(n){super.setDimensions(n),this.gBrush.attr("transform",`translate(${n[0]/2},${n[1]/2})`),this.draw()}}return new i(g)}const Wgg=' ';l_.config={type:"brush-track",datatype:["projection"],local:!1,projection:!0,orientation:"2d",thumbnail:new DOMParser().parseFromString(Wgg,"text/xml").documentElement,availableOptions:["innerRadius","outerRadius","startAngle","endAngle","axisPositionHorizontal","projectionFillColor","projectionStrokeColor","projectionFillOpacity","projectionStrokeOpacity","strokeWidth"],defaultOptions:{innerRadius:100,outerRadius:200,startAngle:0,endAngle:360,axisPositionHorizontal:"left",projectionFillColor:"#777",projectionStrokeColor:"#777",projectionFillOpacity:.3,projectionStrokeOpacity:.7,strokeWidth:1}};const wle=3,Xgg={color:"#777",stroke:"#777",strokeWidth:1,strokeOpacity:.7,opacity:.3};class Hgg{constructor(g,i,I={}){Ct(this,"brushSelection"),Ct(this,"style"),Ct(this,"range"),Ct(this,"data"),Ct(this,"startEvent"),Ct(this,"prevExtent"),Ct(this,"offset"),Ct(this,"size"),Ct(this,"externals"),Ct(this,"emitter"),this.emitter=Rqe(),this.range=null,this.prevExtent=[0,0],this.data=this.rangeToData(0,0),this.offset=[0,0],this.size=0,this.externals={d3Selection:i.d3Selection,d3Drag:i.d3Drag},this.style=Object.assign({},Xgg,I),this.brushSelection=g.selectAll(".genomic-range-brush").data(this.data).enter().append("rect").attr("class","genomic-range-brush").call(this.onDrag())}getRange(){return this.range}setSize(g){return this.size=g,this}setOffset(g,i){return this.offset=[g,i],this}updateRange(g){return g?(this.range=[Math.min(...g),Math.max(...g)],this.data=this.rangeToData(...this.range)):this.range=null,this}drawBrush(g=!1){const[i,I]=this.offset,n=this.size,r=C=>Math.abs(C.end-C.start);return this.brushSelection.data(this.data).attr("transform",C=>`translate(${i+C.start}, ${I+1})`).attr("width",C=>`${r(C)}px`).attr("height",`${n-2}px`).attr("fill",this.style.color).attr("stroke",this.style.stroke).attr("stroke-width",`${this.style.strokeWidth}px`).attr("fill-opacity",C=>C.type==="body"?this.style.opacity:0).attr("stroke-opacity",C=>C.type==="body"?this.style.strokeOpacity:0).attr("cursor",C=>C.cursor),this.emitter.emit("brush",this.getRange(),g),this}enable(){return this.brushSelection.attr("pointer-events","all"),this}disable(){return this.brushSelection.attr("pointer-events","none"),this}visible(){return this.brushSelection.attr("visibility","visible"),this}hidden(){return this.brushSelection.attr("visibility","hidden"),this}clear(){return this.updateRange(null).drawBrush().hidden().disable(),this}remove(){return this.brushSelection.remove(),this}rangeToData(g,i){return[{type:"body",cursor:"grab",start:g,end:i},{type:"start",cursor:"ew-resize",start:g-wle,end:g},{type:"end",cursor:"ew-resize",start:i,end:i+wle}]}onDrag(){const g=I=>{this.startEvent=I.sourceEvent,this.prevExtent=this.range},i=(I,n)=>{var r;const C=I.sourceEvent.layerX-this.startEvent.layerX;let[o,a]=(r=this.prevExtent)!=null?r:[0,0];n.type==="body"?(o+=C,a+=C):n.type==="start"?o+=C:n.type==="end"&&(a+=C),this.updateRange([o,a]).drawBrush()};return this.externals.d3Drag.drag().on("start",g).on("drag",i)}on(g,i){this.emitter.on(g,i)}}const Tgg=([e,g],[i,I],[n,r],[C,o])=>{const a=Math.sqrt((e-i)**2+(g-I)**2);if(aMath.sqrt((e-i)**2+(g-I)**2)e<=i&&i<=g,kgg=(e,g,i=5)=>c_(e,g-i)&&c_(e,g+i),Ygg=(e,g)=>g.filter((i,I)=>I%2===0).every(i=>c_(e,i)),Kgg=([e,g],i,I=5)=>{let n,r,C,o,a=!1;for(let s=0;s0?h=Math.sqrt((g-o)**2+(e-C)**2):d<0?h=Math.sqrt((g-r)**2+(e-n)**2):h=Math.abs(A[0]*c[1]-A[1]*c[0])/Math.sqrt(A[0]**2+A[1]**2),h{let I,n,r,C,o=!1;for(let a=0,s=i.length-2;ag!=C>g&&e<(r-I)*(g-n)/(C-n)+I&&(o=!o),s=a;return o};class Dgg{constructor(){Ct(this,"data"),this.data=[]}size(){return this.data.length}addPolygonBasedEvent(g,i){this.data.push({uid:ln(),type:"polygon",value:g,polygon:i})}addPointBasedEvent(g,i){this.data.push({uid:ln(),type:"point",value:g,polygon:i})}addLineBasedEvent(g,i){this.data.push({uid:ln(),type:"line",value:g,polygon:i})}clear(){this.data=[]}find(g,i,I=!1){const n=Array.from(this.data);return I&&n.reverse(),n.find(r=>this.isMouseWithin(r,g,i))}findAll(g,i,I=!1){const n=Array.from(this.data);return I&&n.reverse(),n.filter(r=>this.isMouseWithin(r,g,i))}getSiblings(g,i){const I=[],n=Array.from(new Set(g.map(r=>r.uid)));return g.forEach(r=>{const C=r.value[i];C&&I.push(...this.data.filter(o=>o.value[i]===C&&n.indexOf(o.uid)===-1))}),I}isMouseWithin(g,i,I){switch(g.type){case"point":return Ngg([i,I],g.polygon);case"line":return Kgg([i,I],g.polygon);case"polygon":default:return Fgg([i,I],g.polygon)}}findAllWithinRange(g,i,I=!1){const n=Array.from(this.data);return I&&n.reverse(),n.filter(r=>this.isWithinRange(r,g,i))}isWithinRange(g,i,I){switch(g.type){case"point":return kgg([i,I],g.polygon[0],g.polygon[2]);case"line":case"polygon":default:return Ygg([i,I],g.polygon)}}}const T2e="KCgpID0+IHsKICB2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIF9fbWFya0FzTW9kdWxlID0gKHRhcmdldCkgPT4gX19kZWZQcm9wKHRhcmdldCwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7CiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltPYmplY3Qua2V5cyhmbilbMF1dKShmbiA9IDApKSwgcmVzOwogIH07CiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkgewogICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbT2JqZWN0LmtleXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7CiAgfTsKICB2YXIgX19yZUV4cG9ydCA9ICh0YXJnZXQsIG1vZHVsZSwgZGVzYykgPT4gewogICAgaWYgKG1vZHVsZSAmJiB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbW9kdWxlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhtb2R1bGUpKQogICAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodGFyZ2V0LCBrZXkpICYmIGtleSAhPT0gImRlZmF1bHQiKQogICAgICAgICAgX19kZWZQcm9wKHRhcmdldCwga2V5LCB7IGdldDogKCkgPT4gbW9kdWxlW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MobW9kdWxlLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0OwogIH07CiAgdmFyIF9fdG9Nb2R1bGUgPSAobW9kdWxlKSA9PiB7CiAgICByZXR1cm4gX19yZUV4cG9ydChfX21hcmtBc01vZHVsZShfX2RlZlByb3AobW9kdWxlICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kdWxlKSkgOiB7fSwgImRlZmF1bHQiLCBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgJiYgImRlZmF1bHQiIGluIG1vZHVsZSA/IHsgZ2V0OiAoKSA9PiBtb2R1bGUuZGVmYXVsdCwgZW51bWVyYWJsZTogdHJ1ZSB9IDogeyB2YWx1ZTogbW9kdWxlLCBlbnVtZXJhYmxlOiB0cnVlIH0pKSwgbW9kdWxlKTsKICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMKICB2YXIgcmVxdWlyZV9iYXNlNjRfanMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheTsKICAgICAgZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheTsKICAgICAgdmFyIGxvb2t1cCA9IFtdOwogICAgICB2YXIgcmV2TG9va3VwID0gW107CiAgICAgIHZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCIgPyBVaW50OEFycmF5IDogQXJyYXk7CiAgICAgIHZhciBjb2RlID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwogICAgICBmb3IgKGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgbG9va3VwW2ldID0gY29kZVtpXTsKICAgICAgICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICAgIH0KICAgICAgdmFyIGk7CiAgICAgIHZhciBsZW47CiAgICAgIHJldkxvb2t1cFsiLSIuY2hhckNvZGVBdCgwKV0gPSA2MjsKICAgICAgcmV2TG9va3VwWyJfIi5jaGFyQ29kZUF0KDApXSA9IDYzOwogICAgICBmdW5jdGlvbiBnZXRMZW5zKGI2NCkgewogICAgICAgIHZhciBsZW4yID0gYjY0Lmxlbmd0aDsKICAgICAgICBpZiAobGVuMiAlIDQgPiAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTsKICAgICAgICB9CiAgICAgICAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoIj0iKTsKICAgICAgICBpZiAodmFsaWRMZW4gPT09IC0xKQogICAgICAgICAgdmFsaWRMZW4gPSBsZW4yOwogICAgICAgIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuMiA/IDAgOiA0IC0gdmFsaWRMZW4gJSA0OwogICAgICAgIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYnl0ZUxlbmd0aChiNjQpIHsKICAgICAgICB2YXIgbGVucyA9IGdldExlbnMoYjY0KTsKICAgICAgICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdOwogICAgICAgIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdOwogICAgICAgIHJldHVybiAodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQgLSBwbGFjZUhvbGRlcnNMZW47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7CiAgICAgICAgcmV0dXJuICh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0xlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiB0b0J5dGVBcnJheShiNjQpIHsKICAgICAgICB2YXIgdG1wOwogICAgICAgIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpOwogICAgICAgIHZhciB2YWxpZExlbiA9IGxlbnNbMF07CiAgICAgICAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV07CiAgICAgICAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSk7CiAgICAgICAgdmFyIGN1ckJ5dGUgPSAwOwogICAgICAgIHZhciBsZW4yID0gcGxhY2VIb2xkZXJzTGVuID4gMCA/IHZhbGlkTGVuIC0gNCA6IHZhbGlkTGVuOwogICAgICAgIHZhciBpMjsKICAgICAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW4yOyBpMiArPSA0KSB7CiAgICAgICAgICB0bXAgPSByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIpXSA8PCAxOCB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDEpXSA8PCAxMiB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDIpXSA8PCA2IHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMyldOwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgPj4gMTYgJiAyNTU7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCA+PiA4ICYgMjU1OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAyNTU7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHsKICAgICAgICAgIHRtcCA9IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMildIDw8IDIgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAxKV0gPj4gNDsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMjU1OwogICAgICAgIH0KICAgICAgICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7CiAgICAgICAgICB0bXAgPSByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIpXSA8PCAxMCB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDEpXSA8PCA0IHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMildID4+IDI7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCA+PiA4ICYgMjU1OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0KG51bSkgewogICAgICAgIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgNjNdICsgbG9va3VwW251bSA+PiAxMiAmIDYzXSArIGxvb2t1cFtudW0gPj4gNiAmIDYzXSArIGxvb2t1cFtudW0gJiA2M107CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZW5jb2RlQ2h1bmsodWludDgsIHN0YXJ0LCBlbmQpIHsKICAgICAgICB2YXIgdG1wOwogICAgICAgIHZhciBvdXRwdXQgPSBbXTsKICAgICAgICBmb3IgKHZhciBpMiA9IHN0YXJ0OyBpMiA8IGVuZDsgaTIgKz0gMykgewogICAgICAgICAgdG1wID0gKHVpbnQ4W2kyXSA8PCAxNiAmIDE2NzExNjgwKSArICh1aW50OFtpMiArIDFdIDw8IDggJiA2NTI4MCkgKyAodWludDhbaTIgKyAyXSAmIDI1NSk7CiAgICAgICAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXRwdXQuam9pbigiIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSh1aW50OCkgewogICAgICAgIHZhciB0bXA7CiAgICAgICAgdmFyIGxlbjIgPSB1aW50OC5sZW5ndGg7CiAgICAgICAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4yICUgMzsKICAgICAgICB2YXIgcGFydHMgPSBbXTsKICAgICAgICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MzsKICAgICAgICBmb3IgKHZhciBpMiA9IDAsIGxlbjIyID0gbGVuMiAtIGV4dHJhQnl0ZXM7IGkyIDwgbGVuMjI7IGkyICs9IG1heENodW5rTGVuZ3RoKSB7CiAgICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpMiwgaTIgKyBtYXhDaHVua0xlbmd0aCA+IGxlbjIyID8gbGVuMjIgOiBpMiArIG1heENodW5rTGVuZ3RoKSk7CiAgICAgICAgfQogICAgICAgIGlmIChleHRyYUJ5dGVzID09PSAxKSB7CiAgICAgICAgICB0bXAgPSB1aW50OFtsZW4yIC0gMV07CiAgICAgICAgICBwYXJ0cy5wdXNoKGxvb2t1cFt0bXAgPj4gMl0gKyBsb29rdXBbdG1wIDw8IDQgJiA2M10gKyAiPT0iKTsKICAgICAgICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHsKICAgICAgICAgIHRtcCA9ICh1aW50OFtsZW4yIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4yIC0gMV07CiAgICAgICAgICBwYXJ0cy5wdXNoKGxvb2t1cFt0bXAgPj4gMTBdICsgbG9va3VwW3RtcCA+PiA0ICYgNjNdICsgbG9va3VwW3RtcCA8PCAyICYgNjNdICsgIj0iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oIiIpOwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pZWVlNzU0QDEuMi4xL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfaWVlZTc1NCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9pZWVlNzU0QDEuMi4xL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24oYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykgewogICAgICAgIHZhciBlLCBtOwogICAgICAgIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxOwogICAgICAgIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxOwogICAgICAgIHZhciBlQmlhcyA9IGVNYXggPj4gMTsKICAgICAgICB2YXIgbkJpdHMgPSAtNzsKICAgICAgICB2YXIgaSA9IGlzTEUgPyBuQnl0ZXMgLSAxIDogMDsKICAgICAgICB2YXIgZCA9IGlzTEUgPyAtMSA6IDE7CiAgICAgICAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV07CiAgICAgICAgaSArPSBkOwogICAgICAgIGUgPSBzICYgKDEgPDwgLW5CaXRzKSAtIDE7CiAgICAgICAgcyA+Pj0gLW5CaXRzOwogICAgICAgIG5CaXRzICs9IGVMZW47CiAgICAgICAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkgewogICAgICAgIH0KICAgICAgICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxOwogICAgICAgIGUgPj49IC1uQml0czsKICAgICAgICBuQml0cyArPSBtTGVuOwogICAgICAgIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgaWYgKGUgPT09IDApIHsKICAgICAgICAgIGUgPSAxIC0gZUJpYXM7CiAgICAgICAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7CiAgICAgICAgICByZXR1cm4gbSA/IE5hTiA6IChzID8gLTEgOiAxKSAqIEluZmluaXR5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgZSA9IGUgLSBlQmlhczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbik7CiAgICAgIH07CiAgICAgIGV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbihidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykgewogICAgICAgIHZhciBlLCBtLCBjOwogICAgICAgIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxOwogICAgICAgIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxOwogICAgICAgIHZhciBlQmlhcyA9IGVNYXggPj4gMTsKICAgICAgICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMDsKICAgICAgICB2YXIgaSA9IGlzTEUgPyAwIDogbkJ5dGVzIC0gMTsKICAgICAgICB2YXIgZCA9IGlzTEUgPyAxIDogLTE7CiAgICAgICAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwOwogICAgICAgIHZhbHVlID0gTWF0aC5hYnModmFsdWUpOwogICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7CiAgICAgICAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDA7CiAgICAgICAgICBlID0gZU1heDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpOwogICAgICAgICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkgewogICAgICAgICAgICBlLS07CiAgICAgICAgICAgIGMgKj0gMjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlICsgZUJpYXMgPj0gMSkgewogICAgICAgICAgICB2YWx1ZSArPSBydCAvIGM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodmFsdWUgKiBjID49IDIpIHsKICAgICAgICAgICAgZSsrOwogICAgICAgICAgICBjIC89IDI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHsKICAgICAgICAgICAgbSA9IDA7CiAgICAgICAgICAgIGUgPSBlTWF4OwogICAgICAgICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkgewogICAgICAgICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbik7CiAgICAgICAgICAgIGUgPSBlICsgZUJpYXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbik7CiAgICAgICAgICAgIGUgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMjU1LCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgZSA9IGUgPDwgbUxlbiB8IG07CiAgICAgICAgZUxlbiArPSBtTGVuOwogICAgICAgIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDI1NSwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyODsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA2LjAuMy9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfYnVmZmVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA2LjAuMy9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgYmFzZTY0ID0gcmVxdWlyZV9iYXNlNjRfanMoKTsKICAgICAgdmFyIGllZWU3NTQgPSByZXF1aXJlX2llZWU3NTQoKTsKICAgICAgdmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2xbImZvciJdID09PSAiZnVuY3Rpb24iID8gU3ltYm9sWyJmb3IiXSgibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKSA6IG51bGw7CiAgICAgIGV4cG9ydHMuQnVmZmVyID0gQnVmZmVyODsKICAgICAgZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlcjsKICAgICAgZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwOwogICAgICB2YXIgS19NQVhfTEVOR1RIID0gMjE0NzQ4MzY0NzsKICAgICAgZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIOwogICAgICBCdWZmZXI4LlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpOwogICAgICBpZiAoIUJ1ZmZlcjguVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICAgICAgICBjb25zdCBwcm90byA9IHsgZm9vOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIDQyOwogICAgICAgICAgfSB9OwogICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSk7CiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90byk7CiAgICAgICAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MjsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXI4LnByb3RvdHlwZSwgInBhcmVudCIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIodGhpcykpCiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlcjgucHJvdG90eXBlLCAib2Zmc2V0IiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghQnVmZmVyOC5pc0J1ZmZlcih0aGlzKSkKICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicgKyBsZW5ndGggKyAnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyOC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQnVmZmVyOChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAibnVtYmVyIikgewogICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyOC5wb29sU2l6ZSA9IDgxOTI7CiAgICAgIGZ1bmN0aW9uIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCk7CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiICsgdHlwZW9mIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fCB2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAidW5kZWZpbmVkIiAmJiAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8IHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBTaGFyZWRBcnJheUJ1ZmZlcikpKSB7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKTsKICAgICAgICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyOC5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGIgPSBmcm9tT2JqZWN0KHZhbHVlKTsKICAgICAgICBpZiAoYikKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlcjguZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSk7CiAgICAgIH0KICAgICAgQnVmZmVyOC5mcm9tID0gZnVuY3Rpb24odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICB9OwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyOC5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjgsIFVpbnQ4QXJyYXkpOwogICAgICBmdW5jdGlvbiBhc3NlcnRTaXplKHNpemUpIHsKICAgICAgICBpZiAodHlwZW9mIHNpemUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpOwogICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicgKyBzaXplICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykgewogICAgICAgIGFzc2VydFNpemUoc2l6ZSk7CiAgICAgICAgaWYgKHNpemUgPD0gMCkgewogICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZykgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgfQogICAgICBCdWZmZXI4LmFsbG9jID0gZnVuY3Rpb24oc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBhbGxvY1Vuc2FmZShzaXplKSB7CiAgICAgICAgYXNzZXJ0U2l6ZShzaXplKTsKICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKTsKICAgICAgfQogICAgICBCdWZmZXI4LmFsbG9jVW5zYWZlID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZywgZW5jb2RpbmcpIHsKICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIiB8fCBlbmNvZGluZyA9PT0gIiIpIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgIH0KICAgICAgICBpZiAoIUJ1ZmZlcjguaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIgKyBlbmNvZGluZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwOwogICAgICAgIGxldCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKTsKICAgICAgICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZyk7CiAgICAgICAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7CiAgICAgICAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwOwogICAgICAgIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21BcnJheVZpZXcoYXJyYXlWaWV3KSB7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UoYXJyYXlWaWV3LCBVaW50OEFycmF5KSkgewogICAgICAgICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5Vmlldyk7CiAgICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGFycmF5Vmlldyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpOwogICAgICAgIH0KICAgICAgICBsZXQgYnVmOwogICAgICAgIGlmIChieXRlT2Zmc2V0ID09PSB2b2lkIDAgJiYgbGVuZ3RoID09PSB2b2lkIDApIHsKICAgICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KTsKICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXI4LnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaikgewogICAgICAgIGlmIChCdWZmZXI4LmlzQnVmZmVyKG9iaikpIHsKICAgICAgICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwOwogICAgICAgICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbik7CiAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgICAgfQogICAgICAgICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pOwogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai5sZW5ndGggIT09IHZvaWQgMCkgewogICAgICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAibnVtYmVyIiB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkgewogICAgICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai50eXBlID09PSAiQnVmZmVyIiAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgIiBieXRlcyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVuZ3RoIHwgMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCkgewogICAgICAgIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgewogICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJ1ZmZlcjguYWxsb2MoK2xlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyOC5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKGIpIHsKICAgICAgICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmIGIgIT09IEJ1ZmZlcjgucHJvdG90eXBlOwogICAgICB9OwogICAgICBCdWZmZXI4LmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHsKICAgICAgICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkKICAgICAgICAgIGEgPSBCdWZmZXI4LmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aCk7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpCiAgICAgICAgICBiID0gQnVmZmVyOC5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpOwogICAgICAgIGlmICghQnVmZmVyOC5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyOC5pc0J1ZmZlcihiKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7CiAgICAgICAgfQogICAgICAgIGlmIChhID09PSBiKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbGV0IHggPSBhLmxlbmd0aDsKICAgICAgICBsZXQgeSA9IGIubGVuZ3RoOwogICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkgewogICAgICAgICAgICB4ID0gYVtpXTsKICAgICAgICAgICAgeSA9IGJbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjguaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcoZW5jb2RpbmcpIHsKICAgICAgICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgIGNhc2UgImJpbmFyeSI6CiAgICAgICAgICBjYXNlICJiYXNlNjQiOgogICAgICAgICAgY2FzZSAidWNzMiI6CiAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgIGNhc2UgInV0Zi0xNmxlIjoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICBCdWZmZXI4LmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdChsaXN0LCBsZW5ndGgpIHsKICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyOC5hbGxvYygwKTsKICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXI4LmFsbG9jVW5zYWZlKGxlbmd0aCk7CiAgICAgICAgbGV0IHBvcyA9IDA7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGxldCBidWYgPSBsaXN0W2ldOwogICAgICAgICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkgewogICAgICAgICAgICBpZiAocG9zICsgYnVmLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIoYnVmKSkKICAgICAgICAgICAgICAgIGJ1ZiA9IEJ1ZmZlcjguZnJvbShidWYpOwogICAgICAgICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChidWZmZXIsIGJ1ZiwgcG9zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICghQnVmZmVyOC5pc0J1ZmZlcihidWYpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTsKICAgICAgICAgIH0KICAgICAgICAgIHBvcyArPSBidWYubGVuZ3RoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmZmVyOwogICAgICB9OwogICAgICBmdW5jdGlvbiBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHsKICAgICAgICBpZiAoQnVmZmVyOC5pc0J1ZmZlcihzdHJpbmcpKSB7CiAgICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGNvbnN0IG11c3RNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZTsKICAgICAgICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsZW47CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOwogICAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gKiAyOwogICAgICAgICAgICBjYXNlICJoZXgiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gPj4+IDE7CiAgICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoIiIgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEJ1ZmZlcjguYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGZ1bmN0aW9uIHNsb3dUb1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkgewogICAgICAgIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlOwogICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwIHx8IHN0YXJ0IDwgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDAgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDw9IDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgZW5kID4+Pj0gMDsKICAgICAgICBzdGFydCA+Pj49IDA7CiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlOwogICAgICBmdW5jdGlvbiBzd2FwKGIsIG4sIG0pIHsKICAgICAgICBjb25zdCBpID0gYltuXTsKICAgICAgICBiW25dID0gYlttXTsKICAgICAgICBiW21dID0gaTsKICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDIgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMigpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgNCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDMpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0KCkgewogICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChsZW4gJSA4ICE9PSAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkgewogICAgICAgICAgc3dhcCh0aGlzLCBpLCBpICsgNyk7CiAgICAgICAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNik7CiAgICAgICAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSk7CiAgICAgICAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlcjgucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMoYikgewogICAgICAgIGlmICghQnVmZmVyOC5pc0J1ZmZlcihiKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTsKICAgICAgICBpZiAodGhpcyA9PT0gYikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBCdWZmZXI4LmNvbXBhcmUodGhpcywgYikgPT09IDA7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkgewogICAgICAgIGxldCBzdHIgPSAiIjsKICAgICAgICBjb25zdCBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTOwogICAgICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoImhleCIsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICIkMSAiKS50cmltKCk7CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KQogICAgICAgICAgc3RyICs9ICIgLi4uICI7CiAgICAgICAgcmV0dXJuICI8QnVmZmVyICIgKyBzdHIgKyAiPiI7CiAgICAgIH07CiAgICAgIGlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7CiAgICAgICAgQnVmZmVyOC5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXI4LnByb3RvdHlwZS5pbnNwZWN0OwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkgewogICAgICAgICAgdGFyZ2V0ID0gQnVmZmVyOC5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIodGFyZ2V0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNTdGFydCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzRW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHN0YXJ0ID4+Pj0gMDsKICAgICAgICBlbmQgPj4+PSAwOwogICAgICAgIHRoaXNTdGFydCA+Pj49IDA7CiAgICAgICAgdGhpc0VuZCA+Pj49IDA7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydDsKICAgICAgICBsZXQgeSA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpOwogICAgICAgIGNvbnN0IHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpOwogICAgICAgIGNvbnN0IHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7CiAgICAgICAgICAgIHggPSB0aGlzQ29weVtpXTsKICAgICAgICAgICAgeSA9IHRhcmdldENvcHlbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0OwogICAgICAgICAgYnl0ZU9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMjE0NzQ4MzY0NykgewogICAgICAgICAgYnl0ZU9mZnNldCA9IDIxNDc0ODM2NDc7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTIxNDc0ODM2NDgpIHsKICAgICAgICAgIGJ5dGVPZmZzZXQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICB9CiAgICAgICAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0OwogICAgICAgIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkgewogICAgICAgICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiBidWZmZXIubGVuZ3RoIC0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwKQogICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0OwogICAgICAgIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIGJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFsID0gQnVmZmVyOC5mcm9tKHZhbCwgZW5jb2RpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoQnVmZmVyOC5pc0J1ZmZlcih2YWwpKSB7CiAgICAgICAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB2YWwgPSB2YWwgJiAyNTU7CiAgICAgICAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgaWYgKGRpcikgewogICAgICAgICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXJyYXlJbmRleE9mKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7CiAgICAgICAgbGV0IGluZGV4U2l6ZSA9IDE7CiAgICAgICAgbGV0IGFyckxlbmd0aCA9IGFyci5sZW5ndGg7CiAgICAgICAgbGV0IHZhbExlbmd0aCA9IHZhbC5sZW5ndGg7CiAgICAgICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDApIHsKICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKGVuY29kaW5nID09PSAidWNzMiIgfHwgZW5jb2RpbmcgPT09ICJ1Y3MtMiIgfHwgZW5jb2RpbmcgPT09ICJ1dGYxNmxlIiB8fCBlbmNvZGluZyA9PT0gInV0Zi0xNmxlIikgewogICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kZXhTaXplID0gMjsKICAgICAgICAgICAgYXJyTGVuZ3RoIC89IDI7CiAgICAgICAgICAgIHZhbExlbmd0aCAvPSAyOwogICAgICAgICAgICBieXRlT2Zmc2V0IC89IDI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHJlYWQoYnVmLCBpMikgewogICAgICAgICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gYnVmW2kyXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkyICogaW5kZXhTaXplKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKGRpcikgewogICAgICAgICAgbGV0IGZvdW5kSW5kZXggPSAtMTsKICAgICAgICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKQogICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGk7CiAgICAgICAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKQogICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKQogICAgICAgICAgICAgICAgaSAtPSBpIC0gZm91bmRJbmRleDsKICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpCiAgICAgICAgICAgIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGg7CiAgICAgICAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkgewogICAgICAgICAgICBsZXQgZm91bmQgPSB0cnVlOwogICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkgewogICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7CiAgICAgICAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gaGV4V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMDsKICAgICAgICBjb25zdCByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0OwogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpOwogICAgICAgICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykgewogICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHsKICAgICAgICAgIGxlbmd0aCA9IHN0ckxlbiAvIDI7CiAgICAgICAgfQogICAgICAgIGxldCBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KTsKICAgICAgICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKQogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdWNzMldyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHsKICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSB2b2lkIDAgJiYgdHlwZW9mIG9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGVuY29kaW5nID0gb2Zmc2V0OwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkgewogICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHsKICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IHZvaWQgMCkKICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoOwogICAgICAgICAgICBsZW5ndGggPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwIHx8IGxlbmd0aCA+IHJlbWFpbmluZykKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2U7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKCIiICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAiQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgY29uc3QgcmVzID0gW107CiAgICAgICAgbGV0IGkgPSBzdGFydDsKICAgICAgICB3aGlsZSAoaSA8IGVuZCkgewogICAgICAgICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldOwogICAgICAgICAgbGV0IGNvZGVQb2ludCA9IG51bGw7CiAgICAgICAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IGZpcnN0Qnl0ZSA+IDIzOSA/IDQgOiBmaXJzdEJ5dGUgPiAyMjMgPyAzIDogZmlyc3RCeXRlID4gMTkxID8gMiA6IDE7CiAgICAgICAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7CiAgICAgICAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkgewogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAxMjgpIHsKICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAzMSkgPDwgNiB8IHNlY29uZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAxMjcpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTsKICAgICAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKHRoaXJkQnl0ZSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDE1KSA8PCAxMiB8IChzZWNvbmRCeXRlICYgNjMpIDw8IDYgfCB0aGlyZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAyMDQ3ICYmICh0ZW1wQ29kZVBvaW50IDwgNTUyOTYgfHwgdGVtcENvZGVQb2ludCA+IDU3MzQzKSkgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdOwogICAgICAgICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXTsKICAgICAgICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKGZvdXJ0aEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTggfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCAxMiB8ICh0aGlyZEJ5dGUgJiA2MykgPDwgNiB8IGZvdXJ0aEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiA2NTUzNSAmJiB0ZW1wQ29kZVBvaW50IDwgMTExNDExMikgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkgewogICAgICAgICAgICBjb2RlUG9pbnQgPSA2NTUzMzsKICAgICAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDY1NTM1KSB7CiAgICAgICAgICAgIGNvZGVQb2ludCAtPSA2NTUzNjsKICAgICAgICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDEwMjMgfCA1NTI5Nik7CiAgICAgICAgICAgIGNvZGVQb2ludCA9IDU2MzIwIHwgY29kZVBvaW50ICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgICAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKTsKICAgICAgfQogICAgICB2YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSA0MDk2OwogICAgICBmdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkoY29kZVBvaW50cykgewogICAgICAgIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoOwogICAgICAgIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHsKICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cyk7CiAgICAgICAgfQogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMTI3KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBsYXRpbjFTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBoZXhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKQogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKQogICAgICAgICAgZW5kID0gbGVuOwogICAgICAgIGxldCBvdXQgPSAiIjsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGYxNmxlU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7CiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1Nik7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgQnVmZmVyOC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgc3RhcnQgPSB+fnN0YXJ0OwogICAgICAgIGVuZCA9IGVuZCA9PT0gdm9pZCAwID8gbGVuIDogfn5lbmQ7CiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICAgc3RhcnQgKz0gbGVuOwogICAgICAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHsKICAgICAgICAgIHN0YXJ0ID0gbGVuOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDwgMCkgewogICAgICAgICAgZW5kICs9IGxlbjsKICAgICAgICAgIGlmIChlbmQgPCAwKQogICAgICAgICAgICBlbmQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7CiAgICAgICAgICBlbmQgPSBsZW47CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPCBzdGFydCkKICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgIGNvbnN0IG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCk7CiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyOC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBuZXdCdWY7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGNoZWNrT2Zmc2V0KG9mZnNldCwgZXh0LCBsZW5ndGgpIHsKICAgICAgICBpZiAob2Zmc2V0ICUgMSAhPT0gMCB8fCBvZmZzZXQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVaW50TEUgPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVaW50QkUgPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoMl07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgd2hpbGUgKGJ5dGVMZW5ndGgyID4gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aDJdICogbXVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVWludDggPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZFVpbnQxNkxFID0gQnVmZmVyOC5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDg7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9IEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDggfCB0aGlzW29mZnNldCArIDFdOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVWludDMyTEUgPSBCdWZmZXI4LnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuICh0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2KSArIHRoaXNbb2Zmc2V0ICsgM10gKiAxNjc3NzIxNjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZFVpbnQzMkJFID0gQnVmZmVyOC5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gKiAxNjc3NzIxNiArICh0aGlzW29mZnNldCArIDFdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAyXSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAzXSk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsbyA9IGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQ7CiAgICAgICAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgbGFzdCAqIDIgKiogMjQ7CiAgICAgICAgcmV0dXJuIEJpZ0ludChsbykgKyAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF07CiAgICAgICAgY29uc3QgbG8gPSB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7CiAgICAgICAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWw7CiAgICAgICAgfQogICAgICAgIG11bCAqPSAxMjg7CiAgICAgICAgaWYgKHZhbCA+PSBtdWwpCiAgICAgICAgICB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKTsKICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDI7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXTsKICAgICAgICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsOwogICAgICAgIH0KICAgICAgICBtdWwgKj0gMTI4OwogICAgICAgIGlmICh2YWwgPj0gbXVsKQogICAgICAgICAgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMik7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKTsKICAgICAgICBpZiAoISh0aGlzW29mZnNldF0gJiAxMjgpKQogICAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgICByZXR1cm4gKDI1NSAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTE7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdIHwgdGhpc1tvZmZzZXQgKyAxXSA8PCA4OwogICAgICAgIHJldHVybiB2YWwgJiAzMjc2OCA/IHZhbCB8IDQyOTQ5MDE3NjAgOiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8IHRoaXNbb2Zmc2V0XSA8PCA4OwogICAgICAgIHJldHVybiB2YWwgJiAzMjc2OCA/IHZhbCB8IDQyOTQ5MDE3NjAgOiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYgfCB0aGlzW29mZnNldCArIDNdIDw8IDI0OwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gPDwgMjQgfCB0aGlzW29mZnNldCArIDFdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAyXSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAzXTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDRdICsgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICsgKGxhc3QgPDwgMjQpOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQoZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCk7CiAgICAgIH0pOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQodGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0KTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2hlY2tJbnQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7CiAgICAgICAgaWYgKCFCdWZmZXI4LmlzQnVmZmVyKGJ1ZikpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7CiAgICAgICAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVWludExFID0gQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMikgLSAxOwogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG1heEJ5dGVzLCAwKTsKICAgICAgICB9CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAvIG11bCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVpbnRCRSA9IEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpIC0gMTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBtYXhCeXRlcywgMCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVaW50OCA9IEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAyNTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID0gQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDY1NTM1LCAwKTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVWludDE2QkUgPSBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgNjU1MzUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVaW50MzJMRSA9IEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCA0Mjk0OTY3Mjk1LCAwKTsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID0gQnVmZmVyOC5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDQyOTQ5NjcyOTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiAyNDsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHsKICAgICAgICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpOwogICAgICAgIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgcmV0dXJuIG9mZnNldDsKICAgICAgfQogICAgICBmdW5jdGlvbiB3cnRCaWdVSW50NjRCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7CiAgICAgICAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KTsKICAgICAgICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQgKyA3XSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgNl0gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDVdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyA0XSA9IGxvOwogICAgICAgIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0ICsgM10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDJdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyAxXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0XSA9IGhpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA4OwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwogICAgICB9KTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIgLSAxKTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBsaW1pdCAtIDEsIC1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gMDsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgc3ViID0gMDsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkgewogICAgICAgICAgICBzdWIgPSAxOwogICAgICAgICAgfQogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCA+PiAwKSAtIHN1YiAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIgLSAxKTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBsaW1pdCAtIDEsIC1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBzdWIgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkgewogICAgICAgICAgICBzdWIgPSAxOwogICAgICAgICAgfQogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCA+PiAwKSAtIHN1YiAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDEyNywgLTEyOCk7CiAgICAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgIHZhbHVlID0gMjU1ICsgdmFsdWUgKyAxOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDMyNzY3LCAtMzI3NjgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAzMjc2NywgLTMyNzY4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDgpOwogICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICB2YWx1ZSA9IDQyOTQ5NjcyOTUgKyB2YWx1ZSArIDE7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLCBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKICAgICAgfSk7CiAgICAgIGZ1bmN0aW9uIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHsKICAgICAgICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzNDAyODIzNDY2Mzg1Mjg4NmUyMiwgLTM0MDI4MjM0NjYzODUyODg2ZTIyKTsKICAgICAgICB9CiAgICAgICAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgQnVmZmVyOC5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwgLTE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mik7CiAgICAgICAgfQogICAgICAgIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgODsKICAgICAgfQogICAgICBCdWZmZXI4LnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5KHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBpZiAoIUJ1ZmZlcjguaXNCdWZmZXIodGFyZ2V0KSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpOwogICAgICAgIGlmICghc3RhcnQpCiAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpCiAgICAgICAgICB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGg7CiAgICAgICAgaWYgKCF0YXJnZXRTdGFydCkKICAgICAgICAgIHRhcmdldFN0YXJ0ID0gMDsKICAgICAgICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkKICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgIGlmIChlbmQgPT09IHN0YXJ0KQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgIGlmIChlbmQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7CiAgICAgICAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydDsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodGFyZ2V0LCB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLCB0YXJnZXRTdGFydCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsZW47CiAgICAgIH07CiAgICAgIEJ1ZmZlcjgucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gc3RhcnQ7CiAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gZW5kOwogICAgICAgICAgICBlbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlbmNvZGluZyAhPT0gdm9pZCAwICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgJiYgIUJ1ZmZlcjguaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAidXRmOCIgJiYgY29kZSA8IDEyOCB8fCBlbmNvZGluZyA9PT0gImxhdGluMSIpIHsKICAgICAgICAgICAgICB2YWwgPSBjb2RlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgdmFsID0gdmFsICYgMjU1OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGFydCA9IHN0YXJ0ID4+PiAwOwogICAgICAgIGVuZCA9IGVuZCA9PT0gdm9pZCAwID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDA7CiAgICAgICAgaWYgKCF2YWwpCiAgICAgICAgICB2YWwgPSAwOwogICAgICAgIGxldCBpOwogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgICB0aGlzW2ldID0gdmFsOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlcjguaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlcjguZnJvbSh2YWwsIGVuY29kaW5nKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aDsKICAgICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInICsgdmFsICsgJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHsKICAgICAgICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICB2YXIgZXJyb3JzID0ge307CiAgICAgIGZ1bmN0aW9uIEUoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7CiAgICAgICAgZXJyb3JzW3N5bV0gPSBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHsKICAgICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1lc3NhZ2UiLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGdldE1lc3NhZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSwKICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gOwogICAgICAgICAgICB0aGlzLnN0YWNrOwogICAgICAgICAgICBkZWxldGUgdGhpcy5uYW1lOwogICAgICAgICAgfQogICAgICAgICAgZ2V0IGNvZGUoKSB7CiAgICAgICAgICAgIHJldHVybiBzeW07CiAgICAgICAgICB9CiAgICAgICAgICBzZXQgY29kZSh2YWx1ZSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvZGUiLCB7CiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB0b1N0cmluZygpIHsKICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7c3ltfV06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICBFKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLCBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gIkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiOwogICAgICB9LCBSYW5nZUVycm9yKTsKICAgICAgRSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLCBmdW5jdGlvbihuYW1lLCBhY3R1YWwpIHsKICAgICAgICByZXR1cm4gYFRoZSAiJHtuYW1lfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YDsKICAgICAgfSwgVHlwZUVycm9yKTsKICAgICAgRSgiRVJSX09VVF9PRl9SQU5HRSIsIGZ1bmN0aW9uKHN0ciwgcmFuZ2UsIGlucHV0KSB7CiAgICAgICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgIiR7c3RyfSIgaXMgb3V0IG9mIHJhbmdlLmA7CiAgICAgICAgbGV0IHJlY2VpdmVkID0gaW5wdXQ7CiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHsKICAgICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAiYmlnaW50IikgewogICAgICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpOwogICAgICAgICAgaWYgKGlucHV0ID4gQmlnSW50KDIpICoqIEJpZ0ludCgzMikgfHwgaW5wdXQgPCAtKEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpKSkgewogICAgICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZCk7CiAgICAgICAgICB9CiAgICAgICAgICByZWNlaXZlZCArPSAibiI7CiAgICAgICAgfQogICAgICAgIG1zZyArPSBgIEl0IG11c3QgYmUgJHtyYW5nZX0uIFJlY2VpdmVkICR7cmVjZWl2ZWR9YDsKICAgICAgICByZXR1cm4gbXNnOwogICAgICB9LCBSYW5nZUVycm9yKTsKICAgICAgZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHZhbCkgewogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBsZXQgaSA9IHZhbC5sZW5ndGg7CiAgICAgICAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICItIiA/IDEgOiAwOwogICAgICAgIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7CiAgICAgICAgICByZXMgPSBgXyR7dmFsLnNsaWNlKGkgLSAzLCBpKX0ke3Jlc31gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgaWYgKGJ1ZltvZmZzZXRdID09PSB2b2lkIDAgfHwgYnVmW29mZnNldCArIGJ5dGVMZW5ndGgyXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAoYnl0ZUxlbmd0aDIgKyAxKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgICAgICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHsKICAgICAgICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAiYmlnaW50IiA/ICJuIiA6ICIiOwogICAgICAgICAgbGV0IHJhbmdlOwogICAgICAgICAgaWYgKGJ5dGVMZW5ndGgyID4gMykgewogICAgICAgICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7CiAgICAgICAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bn0gYW5kIDwgMiR7bn0gKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDh9JHtufWA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmFuZ2UgPSBgPj0gLSgyJHtufSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtufWA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJhbmdlID0gYD49ICR7bWlufSR7bn0gYW5kIDw9ICR7bWF4fSR7bn1gOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCJ2YWx1ZSIsIHJhbmdlLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUsIG5hbWUpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAibnVtYmVyIikgewogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAibnVtYmVyIiwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBib3VuZHNFcnJvcih2YWx1ZSwgbGVuZ3RoLCB0eXBlKSB7CiAgICAgICAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkgewogICAgICAgICAgdmFsaWRhdGVOdW1iZXIodmFsdWUsIHR5cGUpOwogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgIm9mZnNldCIsICJhbiBpbnRlZ2VyIiwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAobGVuZ3RoIDwgMCkgewogICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFMoKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgIm9mZnNldCIsIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsIHZhbHVlKTsKICAgICAgfQogICAgICB2YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nOwogICAgICBmdW5jdGlvbiBiYXNlNjRjbGVhbihzdHIpIHsKICAgICAgICBzdHIgPSBzdHIuc3BsaXQoIj0iKVswXTsKICAgICAgICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICIiKTsKICAgICAgICBpZiAoc3RyLmxlbmd0aCA8IDIpCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7CiAgICAgICAgICBzdHIgPSBzdHIgKyAiPSI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyaW5nLCB1bml0cykgewogICAgICAgIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHk7CiAgICAgICAgbGV0IGNvZGVQb2ludDsKICAgICAgICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbDsKICAgICAgICBjb25zdCBieXRlcyA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDU1Mjk1ICYmIGNvZGVQb2ludCA8IDU3MzQ0KSB7CiAgICAgICAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkgewogICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiA1NjMxOSkgewogICAgICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29kZVBvaW50IDwgNTYzMjApIHsKICAgICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSA1NTI5NiA8PCAxMCB8IGNvZGVQb2ludCAtIDU2MzIwKSArIDY1NTM2OwogICAgICAgICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgfQogICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGw7CiAgICAgICAgICBpZiAoY29kZVBvaW50IDwgMTI4KSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDIwNDgpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDYgfCAxOTIsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgNjU1MzYpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDEyIHwgMjI0LCBjb2RlUG9pbnQgPj4gNiAmIDYzIHwgMTI4LCBjb2RlUG9pbnQgJiA2MyB8IDEyOCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDExMTQxMTIpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDE4IHwgMjQwLCBjb2RlUG9pbnQgPj4gMTIgJiA2MyB8IDEyOCwgY29kZVBvaW50ID4+IDYgJiA2MyB8IDEyOCwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVzOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhzdHIpIHsKICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogICAgICAgICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAyNTUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnl0ZUFycmF5OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKHN0ciwgdW5pdHMpIHsKICAgICAgICBsZXQgYywgaGksIGxvOwogICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICBoaSA9IGMgPj4gODsKICAgICAgICAgIGxvID0gYyAlIDI1NjsKICAgICAgICAgIGJ5dGVBcnJheS5wdXNoKGxvKTsKICAgICAgICAgIGJ5dGVBcnJheS5wdXNoKGhpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHN0cikgewogICAgICAgIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmxpdEJ1ZmZlcihzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBsZXQgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmIChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGggfHwgaSA+PSBzcmMubGVuZ3RoKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaXNJbnN0YW5jZShvYmosIHR5cGUpIHsKICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fCBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbnVtYmVySXNOYU4ob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiAhPT0gb2JqOwogICAgICB9CiAgICAgIHZhciBoZXhTbGljZUxvb2t1cFRhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY29uc3QgYWxwaGFiZXQgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKICAgICAgICAgIGNvbnN0IGkxNiA9IGkgKiAxNjsKICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikgewogICAgICAgICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgfSgpOwogICAgICBmdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QoZm4pIHsKICAgICAgICByZXR1cm4gdHlwZW9mIEJpZ0ludCA9PT0gInVuZGVmaW5lZCIgPyBCdWZmZXJCaWdJbnROb3REZWZpbmVkIDogZm47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBub3Qgc3VwcG9ydGVkIik7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gc3JjL2FsaWFzL2J1ZmZlci1zaGltLmpzCiAgdmFyIGltcG9ydF9idWZmZXI7CiAgdmFyIGluaXRfYnVmZmVyX3NoaW0gPSBfX2VzbSh7CiAgICAic3JjL2FsaWFzL2J1ZmZlci1zaGltLmpzIigpIHsKICAgICAgaW1wb3J0X2J1ZmZlciA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfaXNfb2JzZXJ2YWJsZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIG1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFN5bWJvbC5vYnNlcnZhYmxlID09PSAic3ltYm9sIiAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLm9ic2VydmFibGVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlW1N5bWJvbC5vYnNlcnZhYmxlXSgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHZhbHVlWyJAQG9ic2VydmFibGUiXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVsiQEBvYnNlcnZhYmxlIl0oKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzCiAgdmFyIHJlcXVpcmVfc2VyaWFsaXplcnMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzLkRlZmF1bHRTZXJpYWxpemVyID0gZXhwb3J0cy5leHRlbmRTZXJpYWxpemVyID0gdm9pZCAwOwogICAgICBmdW5jdGlvbiBleHRlbmRTZXJpYWxpemVyKGV4dGVuZCwgaW1wbGVtZW50YXRpb24pIHsKICAgICAgICBjb25zdCBmYWxsYmFja0Rlc2VyaWFsaXplciA9IGV4dGVuZC5kZXNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgY29uc3QgZmFsbGJhY2tTZXJpYWxpemVyID0gZXh0ZW5kLnNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmRlc2VyaWFsaXplKG1lc3NhZ2UsIGZhbGxiYWNrRGVzZXJpYWxpemVyKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLnNlcmlhbGl6ZShpbnB1dCwgZmFsbGJhY2tTZXJpYWxpemVyKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIGV4cG9ydHMuZXh0ZW5kU2VyaWFsaXplciA9IGV4dGVuZFNlcmlhbGl6ZXI7CiAgICAgIHZhciBEZWZhdWx0RXJyb3JTZXJpYWxpemVyID0gewogICAgICAgIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKEVycm9yKG1lc3NhZ2UubWVzc2FnZSksIHsKICAgICAgICAgICAgbmFtZTogbWVzc2FnZS5uYW1lLAogICAgICAgICAgICBzdGFjazogbWVzc2FnZS5zdGFjawogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemUoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIF9fZXJyb3JfbWFya2VyOiAiJCRlcnJvciIsCiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsCiAgICAgICAgICAgIHN0YWNrOiBlcnJvci5zdGFjawogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHZhciBpc1NlcmlhbGl6ZWRFcnJvciA9ICh0aGluZykgPT4gdGhpbmcgJiYgdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiAmJiAiX19lcnJvcl9tYXJrZXIiIGluIHRoaW5nICYmIHRoaW5nLl9fZXJyb3JfbWFya2VyID09PSAiJCRlcnJvciI7CiAgICAgIGV4cG9ydHMuRGVmYXVsdFNlcmlhbGl6ZXIgPSB7CiAgICAgICAgZGVzZXJpYWxpemUobWVzc2FnZSkgewogICAgICAgICAgaWYgKGlzU2VyaWFsaXplZEVycm9yKG1lc3NhZ2UpKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLmRlc2VyaWFsaXplKG1lc3NhZ2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLnNlcmlhbGl6ZShpbnB1dCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L2NvbW1vbi5qcwogIHZhciByZXF1aXJlX2NvbW1vbiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvY29tbW9uLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzLnNlcmlhbGl6ZSA9IGV4cG9ydHMuZGVzZXJpYWxpemUgPSBleHBvcnRzLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIHNlcmlhbGl6ZXJzXzEgPSByZXF1aXJlX3NlcmlhbGl6ZXJzKCk7CiAgICAgIHZhciByZWdpc3RlcmVkU2VyaWFsaXplciA9IHNlcmlhbGl6ZXJzXzEuRGVmYXVsdFNlcmlhbGl6ZXI7CiAgICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2VyaWFsaXplcjIoc2VyaWFsaXplcikgewogICAgICAgIHJlZ2lzdGVyZWRTZXJpYWxpemVyID0gc2VyaWFsaXplcnNfMS5leHRlbmRTZXJpYWxpemVyKHJlZ2lzdGVyZWRTZXJpYWxpemVyLCBzZXJpYWxpemVyKTsKICAgICAgfQogICAgICBleHBvcnRzLnJlZ2lzdGVyU2VyaWFsaXplciA9IHJlZ2lzdGVyU2VyaWFsaXplcjI7CiAgICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobWVzc2FnZSk7CiAgICAgIH0KICAgICAgZXhwb3J0cy5kZXNlcmlhbGl6ZSA9IGRlc2VyaWFsaXplOwogICAgICBmdW5jdGlvbiBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFNlcmlhbGl6ZXIuc2VyaWFsaXplKGlucHV0KTsKICAgICAgfQogICAgICBleHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC9zeW1ib2xzLmpzCiAgdmFyIHJlcXVpcmVfc3ltYm9scyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc3ltYm9scy5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0cy4kd29ya2VyID0gZXhwb3J0cy4kdHJhbnNmZXJhYmxlID0gZXhwb3J0cy4kdGVybWluYXRlID0gZXhwb3J0cy4kZXZlbnRzID0gZXhwb3J0cy4kZXJyb3JzID0gdm9pZCAwOwogICAgICBleHBvcnRzLiRlcnJvcnMgPSBTeW1ib2woInRocmVhZC5lcnJvcnMiKTsKICAgICAgZXhwb3J0cy4kZXZlbnRzID0gU3ltYm9sKCJ0aHJlYWQuZXZlbnRzIik7CiAgICAgIGV4cG9ydHMuJHRlcm1pbmF0ZSA9IFN5bWJvbCgidGhyZWFkLnRlcm1pbmF0ZSIpOwogICAgICBleHBvcnRzLiR0cmFuc2ZlcmFibGUgPSBTeW1ib2woInRocmVhZC50cmFuc2ZlcmFibGUiKTsKICAgICAgZXhwb3J0cy4kd29ya2VyID0gU3ltYm9sKCJ0aHJlYWQud29ya2VyIik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvdHJhbnNmZXJhYmxlLmpzCiAgdmFyIHJlcXVpcmVfdHJhbnNmZXJhYmxlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90cmFuc2ZlcmFibGUuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMuVHJhbnNmZXIgPSBleHBvcnRzLmlzVHJhbnNmZXJEZXNjcmlwdG9yID0gdm9pZCAwOwogICAgICB2YXIgc3ltYm9sc18xID0gcmVxdWlyZV9zeW1ib2xzKCk7CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJhYmxlKHRoaW5nKSB7CiAgICAgICAgaWYgKCF0aGluZyB8fCB0eXBlb2YgdGhpbmcgIT09ICJvYmplY3QiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJEZXNjcmlwdG9yKHRoaW5nKSB7CiAgICAgICAgcmV0dXJuIHRoaW5nICYmIHR5cGVvZiB0aGluZyA9PT0gIm9iamVjdCIgJiYgdGhpbmdbc3ltYm9sc18xLiR0cmFuc2ZlcmFibGVdOwogICAgICB9CiAgICAgIGV4cG9ydHMuaXNUcmFuc2ZlckRlc2NyaXB0b3IgPSBpc1RyYW5zZmVyRGVzY3JpcHRvcjsKICAgICAgZnVuY3Rpb24gVHJhbnNmZXIyKHBheWxvYWQsIHRyYW5zZmVyYWJsZXMpIHsKICAgICAgICBpZiAoIXRyYW5zZmVyYWJsZXMpIHsKICAgICAgICAgIGlmICghaXNUcmFuc2ZlcmFibGUocGF5bG9hZCkpCiAgICAgICAgICAgIHRocm93IEVycm9yKCk7CiAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gW3BheWxvYWRdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgW3N5bWJvbHNfMS4kdHJhbnNmZXJhYmxlXTogdHJ1ZSwKICAgICAgICAgIHNlbmQ6IHBheWxvYWQsCiAgICAgICAgICB0cmFuc2ZlcmFibGVzCiAgICAgICAgfTsKICAgICAgfQogICAgICBleHBvcnRzLlRyYW5zZmVyID0gVHJhbnNmZXIyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzCiAgdmFyIHJlcXVpcmVfbWVzc2FnZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzLldvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0cy5NYXN0ZXJNZXNzYWdlVHlwZSA9IHZvaWQgMDsKICAgICAgdmFyIE1hc3Rlck1lc3NhZ2VUeXBlOwogICAgICAoZnVuY3Rpb24oTWFzdGVyTWVzc2FnZVR5cGUyKSB7CiAgICAgICAgTWFzdGVyTWVzc2FnZVR5cGUyWyJjYW5jZWwiXSA9ICJjYW5jZWwiOwogICAgICAgIE1hc3Rlck1lc3NhZ2VUeXBlMlsicnVuIl0gPSAicnVuIjsKICAgICAgfSkoTWFzdGVyTWVzc2FnZVR5cGUgPSBleHBvcnRzLk1hc3Rlck1lc3NhZ2VUeXBlIHx8IChleHBvcnRzLk1hc3Rlck1lc3NhZ2VUeXBlID0ge30pKTsKICAgICAgdmFyIFdvcmtlck1lc3NhZ2VUeXBlOwogICAgICAoZnVuY3Rpb24oV29ya2VyTWVzc2FnZVR5cGUyKSB7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJlcnJvciJdID0gImVycm9yIjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbImluaXQiXSA9ICJpbml0IjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbInJlc3VsdCJdID0gInJlc3VsdCI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJydW5uaW5nIl0gPSAicnVubmluZyI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJ1bmNhdWdodEVycm9yIl0gPSAidW5jYXVnaHRFcnJvciI7CiAgICAgIH0pKFdvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0cy5Xb3JrZXJNZXNzYWdlVHlwZSB8fCAoZXhwb3J0cy5Xb3JrZXJNZXNzYWdlVHlwZSA9IHt9KSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvd29ya2VyL2ltcGxlbWVudGF0aW9uLmJyb3dzZXIuanMKICB2YXIgcmVxdWlyZV9pbXBsZW1lbnRhdGlvbl9icm93c2VyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW1wbGVtZW50YXRpb24uYnJvd3Nlci5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGlzV29ya2VyUnVudGltZSA9IGZ1bmN0aW9uIGlzV29ya2VyUnVudGltZTIoKSB7CiAgICAgICAgY29uc3QgaXNXaW5kb3dDb250ZXh0ID0gdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBXaW5kb3cgIT09ICJ1bmRlZmluZWQiICYmIHNlbGYgaW5zdGFuY2VvZiBXaW5kb3c7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiBzZWxmLnBvc3RNZXNzYWdlICYmICFpc1dpbmRvd0NvbnRleHQgPyB0cnVlIDogZmFsc2U7CiAgICAgIH07CiAgICAgIHZhciBwb3N0TWVzc2FnZVRvTWFzdGVyID0gZnVuY3Rpb24gcG9zdE1lc3NhZ2VUb01hc3RlcjIoZGF0YSwgdHJhbnNmZXJMaXN0KSB7CiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2Zlckxpc3QpOwogICAgICB9OwogICAgICB2YXIgc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcyA9IGZ1bmN0aW9uIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMyKG9uTWVzc2FnZSkgewogICAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gKG1lc3NhZ2VFdmVudCkgPT4gewogICAgICAgICAgb25NZXNzYWdlKG1lc3NhZ2VFdmVudC5kYXRhKTsKICAgICAgICB9OwogICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4gewogICAgICAgICAgc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOwogICAgICAgIH07CiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOwogICAgICAgIHJldHVybiB1bnN1YnNjcmliZTsKICAgICAgfTsKICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gewogICAgICAgIGlzV29ya2VyUnVudGltZSwKICAgICAgICBwb3N0TWVzc2FnZVRvTWFzdGVyLAogICAgICAgIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW5kZXguanMKICB2YXIgcmVxdWlyZV93b3JrZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbmRleC5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9fYXdhaXRlciA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgewogICAgICAgICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0cy5leHBvc2UgPSBleHBvcnRzLmlzV29ya2VyUnVudGltZSA9IGV4cG9ydHMuVHJhbnNmZXIgPSBleHBvcnRzLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIGlzX29ic2VydmFibGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2lzX29ic2VydmFibGUoKSk7CiAgICAgIHZhciBjb21tb25fMSA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciB0cmFuc2ZlcmFibGVfMSA9IHJlcXVpcmVfdHJhbnNmZXJhYmxlKCk7CiAgICAgIHZhciBtZXNzYWdlc18xID0gcmVxdWlyZV9tZXNzYWdlcygpOwogICAgICB2YXIgaW1wbGVtZW50YXRpb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2ltcGxlbWVudGF0aW9uX2Jyb3dzZXIoKSk7CiAgICAgIHZhciBjb21tb25fMiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAicmVnaXN0ZXJTZXJpYWxpemVyIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBjb21tb25fMi5yZWdpc3RlclNlcmlhbGl6ZXI7CiAgICAgIH0gfSk7CiAgICAgIHZhciB0cmFuc2ZlcmFibGVfMiA9IHJlcXVpcmVfdHJhbnNmZXJhYmxlKCk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiVHJhbnNmZXIiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZV8yLlRyYW5zZmVyOwogICAgICB9IH0pOwogICAgICBleHBvcnRzLmlzV29ya2VyUnVudGltZSA9IGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWU7CiAgICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTsKICAgICAgdmFyIGFjdGl2ZVN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7CiAgICAgIHZhciBpc01hc3RlckpvYkNhbmNlbE1lc3NhZ2UgPSAodGhpbmcpID0+IHRoaW5nICYmIHRoaW5nLnR5cGUgPT09IG1lc3NhZ2VzXzEuTWFzdGVyTWVzc2FnZVR5cGUuY2FuY2VsOwogICAgICB2YXIgaXNNYXN0ZXJKb2JSdW5NZXNzYWdlID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0aGluZy50eXBlID09PSBtZXNzYWdlc18xLk1hc3Rlck1lc3NhZ2VUeXBlLnJ1bjsKICAgICAgdmFyIGlzT2JzZXJ2YWJsZSA9ICh0aGluZykgPT4gaXNfb2JzZXJ2YWJsZV8xLmRlZmF1bHQodGhpbmcpIHx8IGlzWmVuT2JzZXJ2YWJsZSh0aGluZyk7CiAgICAgIGZ1bmN0aW9uIGlzWmVuT2JzZXJ2YWJsZSh0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmIHR5cGVvZiB0aGluZy5zdWJzY3JpYmUgPT09ICJmdW5jdGlvbiI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVjb25zdHJ1Y3RUcmFuc2Zlcih0aGluZykgewogICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVfMS5pc1RyYW5zZmVyRGVzY3JpcHRvcih0aGluZykgPyB7IHBheWxvYWQ6IHRoaW5nLnNlbmQsIHRyYW5zZmVyYWJsZXM6IHRoaW5nLnRyYW5zZmVyYWJsZXMgfSA6IHsgcGF5bG9hZDogdGhpbmcsIHRyYW5zZmVyYWJsZXM6IHZvaWQgMCB9OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCkgewogICAgICAgIGNvbnN0IGluaXRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5pbml0LAogICAgICAgICAgZXhwb3NlZDogewogICAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3Rlcihpbml0TWVzc2FnZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKSB7CiAgICAgICAgY29uc3QgaW5pdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLmluaXQsCiAgICAgICAgICBleHBvc2VkOiB7CiAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICBtZXRob2RzOiBtZXRob2ROYW1lcwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoaW5pdE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RKb2JFcnJvck1lc3NhZ2UodWlkLCByYXdFcnJvcikgewogICAgICAgIGNvbnN0IHsgcGF5bG9hZDogZXJyb3IsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmF3RXJyb3IpOwogICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHsKICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUuZXJyb3IsCiAgICAgICAgICB1aWQsCiAgICAgICAgICBlcnJvcjogY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoZXJyb3JNZXNzYWdlLCB0cmFuc2ZlcmFibGVzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0Sm9iUmVzdWx0TWVzc2FnZSh1aWQsIGNvbXBsZXRlZCwgcmVzdWx0VmFsdWUpIHsKICAgICAgICBjb25zdCB7IHBheWxvYWQsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmVzdWx0VmFsdWUpOwogICAgICAgIGNvbnN0IHJlc3VsdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJlc3VsdCwKICAgICAgICAgIHVpZCwKICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZWQgPyB0cnVlIDogdm9pZCAwLAogICAgICAgICAgcGF5bG9hZAogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIocmVzdWx0TWVzc2FnZSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdEpvYlN0YXJ0TWVzc2FnZSh1aWQsIHJlc3VsdFR5cGUpIHsKICAgICAgICBjb25zdCBzdGFydE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJ1bm5pbmcsCiAgICAgICAgICB1aWQsCiAgICAgICAgICByZXN1bHRUeXBlCiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihzdGFydE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7CiAgICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUudW5jYXVnaHRFcnJvciwKICAgICAgICAgICAgZXJyb3I6IGNvbW1vbl8xLnNlcmlhbGl6ZShlcnJvcikKICAgICAgICAgIH07CiAgICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihlcnJvck1lc3NhZ2UpOwogICAgICAgIH0gY2F0Y2ggKHN1YkVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJOb3QgcmVwb3J0aW5nIHVuY2F1Z2h0IGVycm9yIGJhY2sgdG8gbWFzdGVyIHRocmVhZCBhcyBpdCBvY2N1cmVkIHdoaWxlIHJlcG9ydGluZyBhbiB1bmNhdWdodCBlcnJvciBhbHJlYWR5LlxuTGF0ZXN0IGVycm9yOiIsIHN1YkVycm9yLCAiXG5PcmlnaW5hbCBlcnJvcjoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJ1bkZ1bmN0aW9uKGpvYlVJRCwgZm4sIGFyZ3MpIHsKICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgICAgbGV0IHN5bmNSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBzeW5jUmVzdWx0ID0gZm4oLi4uYXJncyk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICByZXR1cm4gcG9zdEpvYkVycm9yTWVzc2FnZShqb2JVSUQsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlc3VsdFR5cGUgPSBpc09ic2VydmFibGUoc3luY1Jlc3VsdCkgPyAib2JzZXJ2YWJsZSIgOiAicHJvbWlzZSI7CiAgICAgICAgICBwb3N0Sm9iU3RhcnRNZXNzYWdlKGpvYlVJRCwgcmVzdWx0VHlwZSk7CiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHN5bmNSZXN1bHQpKSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN5bmNSZXN1bHQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCBmYWxzZSwgY29tbW9uXzEuc2VyaWFsaXplKHZhbHVlKSksIChlcnJvcikgPT4gewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICAgICAgcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCB0cnVlKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5zZXQoam9iVUlELCBzdWJzY3JpcHRpb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBzeW5jUmVzdWx0OwogICAgICAgICAgICAgIHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgdHJ1ZSwgY29tbW9uXzEuc2VyaWFsaXplKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGV4cG9zZTIoZXhwb3NlZCkgewogICAgICAgIGlmICghaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIGluIHRoZSBtYXN0ZXIgdGhyZWFkLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoZXhwb3NlQ2FsbGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGlzIG5vdCBwb3NzaWJsZS4gUGFzcyBhbiBvYmplY3QgdG8gZXhwb3NlKCkgaWYgeW91IHdhbnQgdG8gZXhwb3NlIG11bHRpcGxlIGZ1bmN0aW9ucy4iKTsKICAgICAgICB9CiAgICAgICAgZXhwb3NlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBpZiAodHlwZW9mIGV4cG9zZWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgICBpZiAoaXNNYXN0ZXJKb2JSdW5NZXNzYWdlKG1lc3NhZ2VEYXRhKSAmJiAhbWVzc2FnZURhdGEubWV0aG9kKSB7CiAgICAgICAgICAgICAgcnVuRnVuY3Rpb24obWVzc2FnZURhdGEudWlkLCBleHBvc2VkLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3NlZCA9PT0gIm9iamVjdCIgJiYgZXhwb3NlZCkgewogICAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMoKG1lc3NhZ2VEYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChpc01hc3RlckpvYlJ1bk1lc3NhZ2UobWVzc2FnZURhdGEpICYmIG1lc3NhZ2VEYXRhLm1ldGhvZCkgewogICAgICAgICAgICAgIHJ1bkZ1bmN0aW9uKG1lc3NhZ2VEYXRhLnVpZCwgZXhwb3NlZFttZXNzYWdlRGF0YS5tZXRob2RdLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3NlZCkuZmlsdGVyKChrZXkpID0+IHR5cGVvZiBleHBvc2VkW2tleV0gPT09ICJmdW5jdGlvbiIpOwogICAgICAgICAgcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4cG9zZSgpLiBFeHBlY3RlZCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCwgZ290OiAke2V4cG9zZWR9YCk7CiAgICAgICAgfQogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgaWYgKGlzTWFzdGVySm9iQ2FuY2VsTWVzc2FnZShtZXNzYWdlRGF0YSkpIHsKICAgICAgICAgICAgY29uc3Qgam9iVUlEID0gbWVzc2FnZURhdGEudWlkOwogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhY3RpdmVTdWJzY3JpcHRpb25zLmdldChqb2JVSUQpOwogICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGV4cG9ydHMuZXhwb3NlID0gZXhwb3NlMjsKICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iICYmIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWUoKSkgewogICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGV2ZW50LmVycm9yIHx8IGV2ZW50KSwgMjUwKTsKICAgICAgICB9KTsKICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc3QgZXJyb3IgPSBldmVudC5yZWFzb247CiAgICAgICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGVycm9yKSwgMjUwKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBwcm9jZXNzLm9uID09PSAiZnVuY3Rpb24iICYmIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWUoKSkgewogICAgICAgIHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIiwgKGVycm9yKSA9PiB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvciksIDI1MCk7CiAgICAgICAgfSk7CiAgICAgICAgcHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIiwgKGVycm9yKSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGVycm9yKSwgMjUwKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcwogIHZhciByZXF1aXJlX2xvbmcgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSBMb25nNDsKICAgICAgdmFyIHdhc20gPSBudWxsOwogICAgICB0cnkgewogICAgICAgIHdhc20gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShuZXcgVWludDhBcnJheShbCiAgICAgICAgICAwLAogICAgICAgICAgOTcsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxLAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEzLAogICAgICAgICAgMiwKICAgICAgICAgIDk2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICA5NiwKICAgICAgICAgIDQsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMywKICAgICAgICAgIDcsCiAgICAgICAgICA2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgNiwKICAgICAgICAgIDYsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMSwKICAgICAgICAgIDY1LAogICAgICAgICAgMCwKICAgICAgICAgIDExLAogICAgICAgICAgNywKICAgICAgICAgIDUwLAogICAgICAgICAgNiwKICAgICAgICAgIDMsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxMTcsCiAgICAgICAgICAxMDgsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDUsCiAgICAgICAgICAxMDAsCiAgICAgICAgICAxMDUsCiAgICAgICAgICAxMTgsCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNSwKICAgICAgICAgIDAsCiAgICAgICAgICAyLAogICAgICAgICAgNSwKICAgICAgICAgIDEwMCwKICAgICAgICAgIDEwNSwKICAgICAgICAgIDExOCwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE3LAogICAgICAgICAgMCwKICAgICAgICAgIDMsCiAgICAgICAgICA1LAogICAgICAgICAgMTE0LAogICAgICAgICAgMTAxLAogICAgICAgICAgMTA5LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAwLAogICAgICAgICAgNCwKICAgICAgICAgIDUsCiAgICAgICAgICAxMTQsCiAgICAgICAgICAxMDEsCiAgICAgICAgICAxMDksCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNywKICAgICAgICAgIDAsCiAgICAgICAgICA1LAogICAgICAgICAgOCwKICAgICAgICAgIDEwMywKICAgICAgICAgIDEwMSwKICAgICAgICAgIDExNiwKICAgICAgICAgIDk1LAogICAgICAgICAgMTA0LAogICAgICAgICAgMTA1LAogICAgICAgICAgMTAzLAogICAgICAgICAgMTA0LAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAxMCwKICAgICAgICAgIDE5MSwKICAgICAgICAgIDEsCiAgICAgICAgICA2LAogICAgICAgICAgNCwKICAgICAgICAgIDAsCiAgICAgICAgICAzNSwKICAgICAgICAgIDAsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNywKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOSwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEzMCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMQogICAgICAgIF0pKSwge30pLmV4cG9ydHM7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgfQogICAgICBmdW5jdGlvbiBMb25nNChsb3csIGhpZ2gsIHVuc2lnbmVkKSB7CiAgICAgICAgdGhpcy5sb3cgPSBsb3cgfCAwOwogICAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggfCAwOwogICAgICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICB9CiAgICAgIExvbmc0LnByb3RvdHlwZS5fX2lzTG9uZ19fOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9uZzQucHJvdG90eXBlLCAiX19pc0xvbmdfXyIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGZ1bmN0aW9uIGlzTG9uZyhvYmopIHsKICAgICAgICByZXR1cm4gKG9iaiAmJiBvYmpbIl9faXNMb25nX18iXSkgPT09IHRydWU7CiAgICAgIH0KICAgICAgTG9uZzQuaXNMb25nID0gaXNMb25nOwogICAgICB2YXIgSU5UX0NBQ0hFID0ge307CiAgICAgIHZhciBVSU5UX0NBQ0hFID0ge307CiAgICAgIGZ1bmN0aW9uIGZyb21JbnQodmFsdWUsIHVuc2lnbmVkKSB7CiAgICAgICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTsKICAgICAgICBpZiAodW5zaWduZWQpIHsKICAgICAgICAgIHZhbHVlID4+Pj0gMDsKICAgICAgICAgIGlmIChjYWNoZSA9IDAgPD0gdmFsdWUgJiYgdmFsdWUgPCAyNTYpIHsKICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCAodmFsdWUgfCAwKSA8IDAgPyAtMSA6IDAsIHRydWUpOwogICAgICAgICAgaWYgKGNhY2hlKQogICAgICAgICAgICBVSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlIHw9IDA7CiAgICAgICAgICBpZiAoY2FjaGUgPSAtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSB7CiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTsKICAgICAgICAgIGlmIChjYWNoZSkKICAgICAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIExvbmc0LmZyb21JbnQgPSBmcm9tSW50OwogICAgICBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlLCB1bnNpZ25lZCkgewogICAgICAgIGlmIChpc05hTih2YWx1ZSkpCiAgICAgICAgICByZXR1cm4gdW5zaWduZWQgPyBVWkVSTyA6IFpFUk87CiAgICAgICAgaWYgKHVuc2lnbmVkKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpCiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpCiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKQogICAgICAgICAgICByZXR1cm4gTUFYX1ZBTFVFOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwgfCAwLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMIHwgMCwgdW5zaWduZWQpOwogICAgICB9CiAgICAgIExvbmc0LmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyOwogICAgICBmdW5jdGlvbiBmcm9tQml0cyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCk7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbUJpdHMgPSBmcm9tQml0czsKICAgICAgdmFyIHBvd19kYmwgPSBNYXRoLnBvdzsKICAgICAgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkgewogICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImVtcHR5IHN0cmluZyIpOwogICAgICAgIGlmIChzdHIgPT09ICJOYU4iIHx8IHN0ciA9PT0gIkluZmluaXR5IiB8fCBzdHIgPT09ICIrSW5maW5pdHkiIHx8IHN0ciA9PT0gIi1JbmZpbml0eSIpCiAgICAgICAgICByZXR1cm4gWkVSTzsKICAgICAgICBpZiAodHlwZW9mIHVuc2lnbmVkID09PSAibnVtYmVyIikgewogICAgICAgICAgcmFkaXggPSB1bnNpZ25lZCwgdW5zaWduZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICAgIH0KICAgICAgICByYWRpeCA9IHJhZGl4IHx8IDEwOwogICAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkKICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoInJhZGl4Iik7CiAgICAgICAgdmFyIHA7CiAgICAgICAgaWYgKChwID0gc3RyLmluZGV4T2YoIi0iKSkgPiAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImludGVyaW9yIGh5cGhlbiIpOwogICAgICAgIGVsc2UgaWYgKHAgPT09IDApIHsKICAgICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHN0ci5zdWJzdHJpbmcoMSksIHVuc2lnbmVkLCByYWRpeCkubmVnKCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTsKICAgICAgICB2YXIgcmVzdWx0ID0gWkVSTzsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkgewogICAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTsKICAgICAgICAgIGlmIChzaXplIDwgOCkgewogICAgICAgICAgICB2YXIgcG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIHNpemUpKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChwb3dlcikuYWRkKGZyb21OdW1iZXIodmFsdWUpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocmFkaXhUb1Bvd2VyKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc3VsdC51bnNpZ25lZCA9IHVuc2lnbmVkOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CiAgICAgIGZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKQogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICJib29sZWFuIiA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTsKICAgICAgfQogICAgICBMb25nNC5mcm9tVmFsdWUgPSBmcm9tVmFsdWU7CiAgICAgIHZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7CiAgICAgIHZhciBUV09fUFdSXzI0X0RCTCA9IDEgPDwgMjQ7CiAgICAgIHZhciBUV09fUFdSXzMyX0RCTCA9IFRXT19QV1JfMTZfREJMICogVFdPX1BXUl8xNl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzYzX0RCTCA9IFRXT19QV1JfNjRfREJMIC8gMjsKICAgICAgdmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTsKICAgICAgdmFyIFpFUk8gPSBmcm9tSW50KDApOwogICAgICBMb25nNC5aRVJPID0gWkVSTzsKICAgICAgdmFyIFVaRVJPID0gZnJvbUludCgwLCB0cnVlKTsKICAgICAgTG9uZzQuVVpFUk8gPSBVWkVSTzsKICAgICAgdmFyIE9ORSA9IGZyb21JbnQoMSk7CiAgICAgIExvbmc0Lk9ORSA9IE9ORTsKICAgICAgdmFyIFVPTkUgPSBmcm9tSW50KDEsIHRydWUpOwogICAgICBMb25nNC5VT05FID0gVU9ORTsKICAgICAgdmFyIE5FR19PTkUgPSBmcm9tSW50KC0xKTsKICAgICAgTG9uZzQuTkVHX09ORSA9IE5FR19PTkU7CiAgICAgIHZhciBNQVhfVkFMVUUgPSBmcm9tQml0cyg0Mjk0OTY3Mjk1IHwgMCwgMjE0NzQ4MzY0NyB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFOwogICAgICB2YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoNDI5NDk2NzI5NSB8IDAsIDQyOTQ5NjcyOTUgfCAwLCB0cnVlKTsKICAgICAgTG9uZzQuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFOwogICAgICB2YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMjE0NzQ4MzY0OCB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFOwogICAgICB2YXIgTG9uZ1Byb3RvdHlwZSA9IExvbmc0LnByb3RvdHlwZTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uIHRvSW50KCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKCkgewogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuICh0aGlzLmhpZ2ggPj4+IDApICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkgewogICAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7CiAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KQogICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigicmFkaXgiKTsKICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiAiMCI7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7CiAgICAgICAgICAgIHZhciByYWRpeExvbmcgPSBmcm9tTnVtYmVyKHJhZGl4KSwgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSwgcmVtMSA9IGRpdi5tdWwocmFkaXhMb25nKS5zdWIodGhpcyk7CiAgICAgICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtMS50b0ludCgpLnRvU3RyaW5nKHJhZGl4KTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gIi0iICsgdGhpcy5uZWcoKS50b1N0cmluZyhyYWRpeCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSwgcmVtID0gdGhpczsKICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksIGludHZhbCA9IHJlbS5zdWIocmVtRGl2Lm11bChyYWRpeFRvUG93ZXIpKS50b0ludCgpID4+PiAwLCBkaWdpdHMgPSBpbnR2YWwudG9TdHJpbmcocmFkaXgpOwogICAgICAgICAgcmVtID0gcmVtRGl2OwogICAgICAgICAgaWYgKHJlbS5pc1plcm8oKSkKICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDYpCiAgICAgICAgICAgICAgZGlnaXRzID0gIjAiICsgZGlnaXRzOwogICAgICAgICAgICByZXN1bHQgPSAiIiArIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRIaWdoQml0c1Vuc2lnbmVkKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TG93Qml0cyA9IGZ1bmN0aW9uIGdldExvd0JpdHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubG93OwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5sb3cgPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TnVtQml0c0FicyA9IGZ1bmN0aW9uIGdldE51bUJpdHNBYnMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgcmV0dXJuIHRoaXMuZXEoTUlOX1ZBTFVFKSA/IDY0IDogdGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7CiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaGlnaCAhPSAwID8gdGhpcy5oaWdoIDogdGhpcy5sb3c7CiAgICAgICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKQogICAgICAgICAgaWYgKCh2YWwgJiAxIDw8IGJpdCkgIT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmVxeiA9IExvbmdQcm90b3R5cGUuaXNaZXJvOwogICAgICBMb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkgewogICAgICAgIHJldHVybiAhdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiBpc1Bvc2l0aXZlKCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkICE9PSBvdGhlci51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPj4+IDMxID09PSAxICYmIG90aGVyLmhpZ2ggPj4+IDMxID09PSAxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5lcSA9IExvbmdQcm90b3R5cGUuZXF1YWxzOwogICAgICBMb25nUHJvdG90eXBlLm5vdEVxdWFscyA9IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikgewogICAgICAgIHJldHVybiAhdGhpcy5lcShvdGhlcik7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVxID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7CiAgICAgIExvbmdQcm90b3R5cGUubmUgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFsczsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbiA9IGZ1bmN0aW9uIGxlc3NUaGFuKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbjsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBsZXNzVGhhbk9yRXF1YWwob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wKG90aGVyKSA8PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmxlID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWw7CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbihvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpID4gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPj0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLmVxKG90aGVyKSkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksIG90aGVyTmVnID0gb3RoZXIuaXNOZWdhdGl2ZSgpOwogICAgICAgIGlmICh0aGlzTmVnICYmICFvdGhlck5lZykKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAoIXRoaXNOZWcgJiYgb3RoZXJOZWcpCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpcy5zdWIob3RoZXIpLmlzTmVnYXRpdmUoKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gb3RoZXIuaGlnaCA+Pj4gMCA+IHRoaXMuaGlnaCA+Pj4gMCB8fCBvdGhlci5oaWdoID09PSB0aGlzLmhpZ2ggJiYgb3RoZXIubG93ID4+PiAwID4gdGhpcy5sb3cgPj4+IDAgPyAtMSA6IDE7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKE9ORSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVnID0gTG9uZ1Byb3RvdHlwZS5uZWdhdGU7CiAgICAgIExvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkgewogICAgICAgIGlmICghaXNMb25nKGFkZGVuZCkpCiAgICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTsKICAgICAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjsKICAgICAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgNjU1MzU7CiAgICAgICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjsKICAgICAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiA2NTUzNTsKICAgICAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBhZGRlbmQubG93ID4+PiAxNjsKICAgICAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwOwogICAgICAgIGMwMCArPSBhMDAgKyBiMDA7CiAgICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7CiAgICAgICAgYzAwICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMTYgKyBiMTY7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMzIgKyBiMzI7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGM0OCArPSBhNDggKyBiNDg7CiAgICAgICAgYzQ4ICY9IDY1NTM1OwogICAgICAgIHJldHVybiBmcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChzdWJ0cmFoZW5kKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoc3VidHJhaGVuZCkpCiAgICAgICAgICBzdWJ0cmFoZW5kID0gZnJvbVZhbHVlKHN1YnRyYWhlbmQpOwogICAgICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZygpKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zdWIgPSBMb25nUHJvdG90eXBlLnN1YnRyYWN0OwogICAgICBMb25nUHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gbXVsdGlwbHkobXVsdGlwbGllcikgewogICAgICAgIGlmICh0aGlzLmlzWmVybygpKQogICAgICAgICAgcmV0dXJuIFpFUk87CiAgICAgICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpCiAgICAgICAgICBtdWx0aXBsaWVyID0gZnJvbVZhbHVlKG11bHRpcGxpZXIpOwogICAgICAgIGlmICh3YXNtKSB7CiAgICAgICAgICB2YXIgbG93ID0gd2FzbS5tdWwodGhpcy5sb3csIHRoaXMuaGlnaCwgbXVsdGlwbGllci5sb3csIG11bHRpcGxpZXIuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpCiAgICAgICAgICByZXR1cm4gbXVsdGlwbGllci5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTzsKICAgICAgICBpZiAobXVsdGlwbGllci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkubXVsKG11bHRpcGxpZXIpLm5lZygpOwogICAgICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICByZXR1cm4gdGhpcy5tdWwobXVsdGlwbGllci5uZWcoKSkubmVnKCk7CiAgICAgICAgaWYgKHRoaXMubHQoVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sdChUV09fUFdSXzI0KSkKICAgICAgICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMudG9OdW1iZXIoKSAqIG11bHRpcGxpZXIudG9OdW1iZXIoKSwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBtdWx0aXBsaWVyLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGM0OCA9IDAsIGMzMiA9IDAsIGMxNiA9IDAsIGMwMCA9IDA7CiAgICAgICAgYzAwICs9IGEwMCAqIGIwMDsKICAgICAgICBjMTYgKz0gYzAwID4+PiAxNjsKICAgICAgICBjMDAgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGExNiAqIGIwMDsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGEwMCAqIGIxNjsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEzMiAqIGIwMDsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGExNiAqIGIxNjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEwMCAqIGIzMjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODsKICAgICAgICBjNDggJj0gNjU1MzU7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGMxNiA8PCAxNiB8IGMwMCwgYzQ4IDw8IDE2IHwgYzMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tdWwgPSBMb25nUHJvdG90eXBlLm11bHRpcGx5OwogICAgICBMb25nUHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShkaXZpc29yKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpCiAgICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpOwogICAgICAgIGlmIChkaXZpc29yLmlzWmVybygpKQogICAgICAgICAgdGhyb3cgRXJyb3IoImRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA9PT0gLTIxNDc0ODM2NDggJiYgZGl2aXNvci5sb3cgPT09IC0xICYmIGRpdmlzb3IuaGlnaCA9PT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLmRpdl91IDogd2FzbS5kaXZfcykodGhpcy5sb3csIHRoaXMuaGlnaCwgZGl2aXNvci5sb3csIGRpdmlzb3IuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPOwogICAgICAgIHZhciBhcHByb3gsIHJlbSwgcmVzOwogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkgewogICAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5lcShPTkUpIHx8IGRpdmlzb3IuZXEoTkVHX09ORSkpCiAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsKICAgICAgICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICAgIHJldHVybiBPTkU7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciBoYWxmVGhpcyA9IHRoaXMuc2hyKDEpOwogICAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGwoMSk7CiAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IuaXNOZWdhdGl2ZSgpID8gT05FIDogTkVHX09ORTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVtID0gdGhpcy5zdWIoZGl2aXNvci5tdWwoYXBwcm94KSk7CiAgICAgICAgICAgICAgICByZXMgPSBhcHByb3guYWRkKHJlbS5kaXYoZGl2aXNvcikpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWcoKSkubmVnKCk7CiAgICAgICAgICByZXMgPSBaRVJPOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpCiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTsKICAgICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMpKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzLnNocnUoMSkpKQogICAgICAgICAgICByZXR1cm4gVU9ORTsKICAgICAgICAgIHJlcyA9IFVaRVJPOwogICAgICAgIH0KICAgICAgICByZW0gPSB0aGlzOwogICAgICAgIHdoaWxlIChyZW0uZ3RlKGRpdmlzb3IpKSB7CiAgICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7CiAgICAgICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLCBkZWx0YSA9IGxvZzIgPD0gNDggPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLCBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCksIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7CiAgICAgICAgICB3aGlsZSAoYXBwcm94UmVtLmlzTmVnYXRpdmUoKSB8fCBhcHByb3hSZW0uZ3QocmVtKSkgewogICAgICAgICAgICBhcHByb3ggLT0gZGVsdGE7CiAgICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94LCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpCiAgICAgICAgICAgIGFwcHJveFJlcyA9IE9ORTsKICAgICAgICAgIHJlcyA9IHJlcy5hZGQoYXBwcm94UmVzKTsKICAgICAgICAgIHJlbSA9IHJlbS5zdWIoYXBwcm94UmVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5kaXYgPSBMb25nUHJvdG90eXBlLmRpdmlkZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tb2R1bG8gPSBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikgewogICAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKQogICAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5yZW1fdSA6IHdhc20ucmVtX3MpKHRoaXMubG93LCB0aGlzLmhpZ2gsIGRpdmlzb3IubG93LCBkaXZpc29yLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubW9kID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUucmVtID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkgewogICAgICAgIHJldHVybiBmcm9tQml0cyh+dGhpcy5sb3csIH50aGlzLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZChvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IF4gb3RoZXIubG93LCB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQgPSBmdW5jdGlvbiBzaGlmdExlZnQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgdGhpcy5oaWdoIDw8IG51bUJpdHMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoMCwgdGhpcy5sb3cgPDwgbnVtQml0cyAtIDMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gc2hpZnRSaWdodChudW1CaXRzKSB7CiAgICAgICAgaWYgKGlzTG9uZyhudW1CaXRzKSkKICAgICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7CiAgICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMikKICAgICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyA+Pj4gbnVtQml0cyB8IHRoaXMuaGlnaCA8PCAzMiAtIG51bUJpdHMsIHRoaXMuaGlnaCA+PiBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoID4+IG51bUJpdHMgLSAzMiwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnNociA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQgPSBmdW5jdGlvbiBzaGlmdFJpZ2h0VW5zaWduZWQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIG51bUJpdHMgJj0gNjM7CiAgICAgICAgaWYgKG51bUJpdHMgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIHsKICAgICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoOwogICAgICAgICAgaWYgKG51bUJpdHMgPCAzMikgewogICAgICAgICAgICB2YXIgbG93ID0gdGhpcy5sb3c7CiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhsb3cgPj4+IG51bUJpdHMgfCBoaWdoIDw8IDMyIC0gbnVtQml0cywgaGlnaCA+Pj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG51bUJpdHMgPT09IDMyKQogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCwgMCwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiBudW1CaXRzIC0gMzIsIDAsIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hyX3UgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDsKICAgICAgTG9uZ1Byb3RvdHlwZS50b1NpZ25lZCA9IGZ1bmN0aW9uIHRvU2lnbmVkKCkgewogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7CiAgICAgICAgaWYgKHRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgdHJ1ZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlcyA9IGZ1bmN0aW9uIHRvQnl0ZXMobGUpIHsKICAgICAgICByZXR1cm4gbGUgPyB0aGlzLnRvQnl0ZXNMRSgpIDogdGhpcy50b0J5dGVzQkUoKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7CiAgICAgICAgdmFyIGhpID0gdGhpcy5oaWdoLCBsbyA9IHRoaXMubG93OwogICAgICAgIHJldHVybiBbCiAgICAgICAgICBsbyAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDE2ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDI0LAogICAgICAgICAgaGkgJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGhpID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGhpID4+PiAyNAogICAgICAgIF07CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0JFID0gZnVuY3Rpb24gdG9CeXRlc0JFKCkgewogICAgICAgIHZhciBoaSA9IHRoaXMuaGlnaCwgbG8gPSB0aGlzLmxvdzsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgaGkgPj4+IDI0LAogICAgICAgICAgaGkgPj4+IDE2ICYgMjU1LAogICAgICAgICAgaGkgPj4+IDggJiAyNTUsCiAgICAgICAgICBoaSAmIDI1NSwKICAgICAgICAgIGxvID4+PiAyNCwKICAgICAgICAgIGxvID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gJiAyNTUKICAgICAgICBdOwogICAgICB9OwogICAgICBMb25nNC5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMyKGJ5dGVzLCB1bnNpZ25lZCwgbGUpIHsKICAgICAgICByZXR1cm4gbGUgPyBMb25nNC5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZzQuZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzTEUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzBdIHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbM10gPDwgMjQsIGJ5dGVzWzRdIHwgYnl0ZXNbNV0gPDwgOCB8IGJ5dGVzWzZdIDw8IDE2IHwgYnl0ZXNbN10gPDwgMjQsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzRdIDw8IDI0IHwgYnl0ZXNbNV0gPDwgMTYgfCBieXRlc1s2XSA8PCA4IHwgYnl0ZXNbN10sIGJ5dGVzWzBdIDw8IDI0IHwgYnl0ZXNbMV0gPDwgMTYgfCBieXRlc1syXSA8PCA4IHwgYnl0ZXNbM10sIHVuc2lnbmVkKTsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gKGRpc2FibGVkKTpub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2xvY2FsRmlsZQogIHZhciByZXF1aXJlX2xvY2FsRmlsZSA9IF9fY29tbW9uSlMoewogICAgIihkaXNhYmxlZCk6bm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9sb2NhbEZpbGUiKCkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzCiAgdmFyIHJlcXVpcmVfY29tbW9uMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgVFlQRURfT0sgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFVpbnQxNkFycmF5ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgSW50MzJBcnJheSAhPT0gInVuZGVmaW5lZCI7CiAgICAgIGZ1bmN0aW9uIF9oYXMob2JqLCBrZXkpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKICAgICAgfQogICAgICBleHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7CiAgICAgICAgICBpZiAoIXNvdXJjZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNvdXJjZSArICJtdXN0IGJlIG5vbi1vYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7CiAgICAgICAgICAgIGlmIChfaGFzKHNvdXJjZSwgcCkpIHsKICAgICAgICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfTsKICAgICAgZXhwb3J0cy5zaHJpbmtCdWYgPSBmdW5jdGlvbihidWYsIHNpemUpIHsKICAgICAgICBpZiAoYnVmLmxlbmd0aCA9PT0gc2l6ZSkgewogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9CiAgICAgICAgaWYgKGJ1Zi5zdWJhcnJheSkgewogICAgICAgICAgcmV0dXJuIGJ1Zi5zdWJhcnJheSgwLCBzaXplKTsKICAgICAgICB9CiAgICAgICAgYnVmLmxlbmd0aCA9IHNpemU7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgdmFyIGZuVHlwZWQgPSB7CiAgICAgICAgYXJyYXlTZXQ6IGZ1bmN0aW9uKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICAgICAgICBpZiAoc3JjLnN1YmFycmF5ICYmIGRlc3Quc3ViYXJyYXkpIHsKICAgICAgICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLCBzcmNfb2ZmcyArIGxlbiksIGRlc3Rfb2Zmcyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24oY2h1bmtzKSB7CiAgICAgICAgICB2YXIgaSwgbCwgbGVuLCBwb3MsIGNodW5rLCByZXN1bHQ7CiAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgbGVuICs9IGNodW5rc1tpXS5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW4pOwogICAgICAgICAgcG9zID0gMDsKICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGNodW5rID0gY2h1bmtzW2ldOwogICAgICAgICAgICByZXN1bHQuc2V0KGNodW5rLCBwb3MpOwogICAgICAgICAgICBwb3MgKz0gY2h1bmsubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHZhciBmblVudHlwZWQgPSB7CiAgICAgICAgYXJyYXlTZXQ6IGZ1bmN0aW9uKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uKGNodW5rcykgewogICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgY2h1bmtzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMuc2V0VHlwZWQgPSBmdW5jdGlvbihvbikgewogICAgICAgIGlmIChvbikgewogICAgICAgICAgZXhwb3J0cy5CdWY4ID0gVWludDhBcnJheTsKICAgICAgICAgIGV4cG9ydHMuQnVmMTYgPSBVaW50MTZBcnJheTsKICAgICAgICAgIGV4cG9ydHMuQnVmMzIgPSBJbnQzMkFycmF5OwogICAgICAgICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5UeXBlZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV4cG9ydHMuQnVmOCA9IEFycmF5OwogICAgICAgICAgZXhwb3J0cy5CdWYxNiA9IEFycmF5OwogICAgICAgICAgZXhwb3J0cy5CdWYzMiA9IEFycmF5OwogICAgICAgICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5VbnR5cGVkKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMuc2V0VHlwZWQoVFlQRURfT0spOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvdHJlZXMuanMKICB2YXIgcmVxdWlyZV90cmVlcyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBaX0ZJWEVEID0gNDsKICAgICAgdmFyIFpfQklOQVJZID0gMDsKICAgICAgdmFyIFpfVEVYVCA9IDE7CiAgICAgIHZhciBaX1VOS05PV04gPSAyOwogICAgICBmdW5jdGlvbiB6ZXJvKGJ1ZikgewogICAgICAgIHZhciBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CiAgICAgICAgICBidWZbbGVuXSA9IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBTVE9SRURfQkxPQ0sgPSAwOwogICAgICB2YXIgU1RBVElDX1RSRUVTID0gMTsKICAgICAgdmFyIERZTl9UUkVFUyA9IDI7CiAgICAgIHZhciBNSU5fTUFUQ0ggPSAzOwogICAgICB2YXIgTUFYX01BVENIID0gMjU4OwogICAgICB2YXIgTEVOR1RIX0NPREVTID0gMjk7CiAgICAgIHZhciBMSVRFUkFMUyA9IDI1NjsKICAgICAgdmFyIExfQ09ERVMgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7CiAgICAgIHZhciBEX0NPREVTID0gMzA7CiAgICAgIHZhciBCTF9DT0RFUyA9IDE5OwogICAgICB2YXIgSEVBUF9TSVpFID0gMiAqIExfQ09ERVMgKyAxOwogICAgICB2YXIgTUFYX0JJVFMgPSAxNTsKICAgICAgdmFyIEJ1Zl9zaXplID0gMTY7CiAgICAgIHZhciBNQVhfQkxfQklUUyA9IDc7CiAgICAgIHZhciBFTkRfQkxPQ0sgPSAyNTY7CiAgICAgIHZhciBSRVBfM182ID0gMTY7CiAgICAgIHZhciBSRVBaXzNfMTAgPSAxNzsKICAgICAgdmFyIFJFUFpfMTFfMTM4ID0gMTg7CiAgICAgIHZhciBleHRyYV9sYml0cyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCAwXTsKICAgICAgdmFyIGV4dHJhX2RiaXRzID0gWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxM107CiAgICAgIHZhciBleHRyYV9ibGJpdHMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgN107CiAgICAgIHZhciBibF9vcmRlciA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKICAgICAgdmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7CiAgICAgIHZhciBzdGF0aWNfbHRyZWUgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpOwogICAgICB6ZXJvKHN0YXRpY19sdHJlZSk7CiAgICAgIHZhciBzdGF0aWNfZHRyZWUgPSBuZXcgQXJyYXkoRF9DT0RFUyAqIDIpOwogICAgICB6ZXJvKHN0YXRpY19kdHJlZSk7CiAgICAgIHZhciBfZGlzdF9jb2RlID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pOwogICAgICB6ZXJvKF9kaXN0X2NvZGUpOwogICAgICB2YXIgX2xlbmd0aF9jb2RlID0gbmV3IEFycmF5KE1BWF9NQVRDSCAtIE1JTl9NQVRDSCArIDEpOwogICAgICB6ZXJvKF9sZW5ndGhfY29kZSk7CiAgICAgIHZhciBiYXNlX2xlbmd0aCA9IG5ldyBBcnJheShMRU5HVEhfQ09ERVMpOwogICAgICB6ZXJvKGJhc2VfbGVuZ3RoKTsKICAgICAgdmFyIGJhc2VfZGlzdCA9IG5ldyBBcnJheShEX0NPREVTKTsKICAgICAgemVybyhiYXNlX2Rpc3QpOwogICAgICBmdW5jdGlvbiBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfdHJlZSwgZXh0cmFfYml0cywgZXh0cmFfYmFzZSwgZWxlbXMsIG1heF9sZW5ndGgpIHsKICAgICAgICB0aGlzLnN0YXRpY190cmVlID0gc3RhdGljX3RyZWU7CiAgICAgICAgdGhpcy5leHRyYV9iaXRzID0gZXh0cmFfYml0czsKICAgICAgICB0aGlzLmV4dHJhX2Jhc2UgPSBleHRyYV9iYXNlOwogICAgICAgIHRoaXMuZWxlbXMgPSBlbGVtczsKICAgICAgICB0aGlzLm1heF9sZW5ndGggPSBtYXhfbGVuZ3RoOwogICAgICAgIHRoaXMuaGFzX3N0cmVlID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoOwogICAgICB9CiAgICAgIHZhciBzdGF0aWNfbF9kZXNjOwogICAgICB2YXIgc3RhdGljX2RfZGVzYzsKICAgICAgdmFyIHN0YXRpY19ibF9kZXNjOwogICAgICBmdW5jdGlvbiBUcmVlRGVzYyhkeW5fdHJlZSwgc3RhdF9kZXNjKSB7CiAgICAgICAgdGhpcy5keW5fdHJlZSA9IGR5bl90cmVlOwogICAgICAgIHRoaXMubWF4X2NvZGUgPSAwOwogICAgICAgIHRoaXMuc3RhdF9kZXNjID0gc3RhdF9kZXNjOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRfY29kZShkaXN0KSB7CiAgICAgICAgcmV0dXJuIGRpc3QgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYgKyAoZGlzdCA+Pj4gNyldOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSB3ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gdyA+Pj4gOCAmIDI1NTsKICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX2JpdHMocywgdmFsdWUsIGxlbmd0aCkgewogICAgICAgIGlmIChzLmJpX3ZhbGlkID4gQnVmX3NpemUgLSBsZW5ndGgpIHsKICAgICAgICAgIHMuYmlfYnVmIHw9IHZhbHVlIDw8IHMuYmlfdmFsaWQgJiA2NTUzNTsKICAgICAgICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICAgICAgICBzLmJpX2J1ZiA9IHZhbHVlID4+IEJ1Zl9zaXplIC0gcy5iaV92YWxpZDsKICAgICAgICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoIC0gQnVmX3NpemU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHMuYmlfYnVmIHw9IHZhbHVlIDw8IHMuYmlfdmFsaWQgJiA2NTUzNTsKICAgICAgICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX2NvZGUocywgYywgdHJlZSkgewogICAgICAgIHNlbmRfYml0cyhzLCB0cmVlW2MgKiAyXSwgdHJlZVtjICogMiArIDFdKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiaV9yZXZlcnNlKGNvZGUsIGxlbikgewogICAgICAgIHZhciByZXMgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgIHJlcyB8PSBjb2RlICYgMTsKICAgICAgICAgIGNvZGUgPj4+PSAxOwogICAgICAgICAgcmVzIDw8PSAxOwogICAgICAgIH0gd2hpbGUgKC0tbGVuID4gMCk7CiAgICAgICAgcmV0dXJuIHJlcyA+Pj4gMTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiaV9mbHVzaChzKSB7CiAgICAgICAgaWYgKHMuYmlfdmFsaWQgPT09IDE2KSB7CiAgICAgICAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgICAgICAgcy5iaV9idWYgPSAwOwogICAgICAgICAgcy5iaV92YWxpZCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID49IDgpIHsKICAgICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWYgJiAyNTU7CiAgICAgICAgICBzLmJpX2J1ZiA+Pj0gODsKICAgICAgICAgIHMuYmlfdmFsaWQgLT0gODsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZ2VuX2JpdGxlbihzLCBkZXNjKSB7CiAgICAgICAgdmFyIHRyZWUgPSBkZXNjLmR5bl90cmVlOwogICAgICAgIHZhciBtYXhfY29kZSA9IGRlc2MubWF4X2NvZGU7CiAgICAgICAgdmFyIHN0cmVlID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7CiAgICAgICAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTsKICAgICAgICB2YXIgZXh0cmEgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iaXRzOwogICAgICAgIHZhciBiYXNlID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYmFzZTsKICAgICAgICB2YXIgbWF4X2xlbmd0aCA9IGRlc2Muc3RhdF9kZXNjLm1heF9sZW5ndGg7CiAgICAgICAgdmFyIGg7CiAgICAgICAgdmFyIG4sIG07CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIHhiaXRzOwogICAgICAgIHZhciBmOwogICAgICAgIHZhciBvdmVyZmxvdyA9IDA7CiAgICAgICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHNdID0gMDsKICAgICAgICB9CiAgICAgICAgdHJlZVtzLmhlYXBbcy5oZWFwX21heF0gKiAyICsgMV0gPSAwOwogICAgICAgIGZvciAoaCA9IHMuaGVhcF9tYXggKyAxOyBoIDwgSEVBUF9TSVpFOyBoKyspIHsKICAgICAgICAgIG4gPSBzLmhlYXBbaF07CiAgICAgICAgICBiaXRzID0gdHJlZVt0cmVlW24gKiAyICsgMV0gKiAyICsgMV0gKyAxOwogICAgICAgICAgaWYgKGJpdHMgPiBtYXhfbGVuZ3RoKSB7CiAgICAgICAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoOwogICAgICAgICAgICBvdmVyZmxvdysrOwogICAgICAgICAgfQogICAgICAgICAgdHJlZVtuICogMiArIDFdID0gYml0czsKICAgICAgICAgIGlmIChuID4gbWF4X2NvZGUpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHNdKys7CiAgICAgICAgICB4Yml0cyA9IDA7CiAgICAgICAgICBpZiAobiA+PSBiYXNlKSB7CiAgICAgICAgICAgIHhiaXRzID0gZXh0cmFbbiAtIGJhc2VdOwogICAgICAgICAgfQogICAgICAgICAgZiA9IHRyZWVbbiAqIDJdOwogICAgICAgICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTsKICAgICAgICAgIGlmIChoYXNfc3RyZWUpIHsKICAgICAgICAgICAgcy5zdGF0aWNfbGVuICs9IGYgKiAoc3RyZWVbbiAqIDIgKyAxXSArIHhiaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG92ZXJmbG93ID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRvIHsKICAgICAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoIC0gMTsKICAgICAgICAgIHdoaWxlIChzLmJsX2NvdW50W2JpdHNdID09PSAwKSB7CiAgICAgICAgICAgIGJpdHMtLTsKICAgICAgICAgIH0KICAgICAgICAgIHMuYmxfY291bnRbYml0c10tLTsKICAgICAgICAgIHMuYmxfY291bnRbYml0cyArIDFdICs9IDI7CiAgICAgICAgICBzLmJsX2NvdW50W21heF9sZW5ndGhdLS07CiAgICAgICAgICBvdmVyZmxvdyAtPSAyOwogICAgICAgIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7CiAgICAgICAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7CiAgICAgICAgICBuID0gcy5ibF9jb3VudFtiaXRzXTsKICAgICAgICAgIHdoaWxlIChuICE9PSAwKSB7CiAgICAgICAgICAgIG0gPSBzLmhlYXBbLS1oXTsKICAgICAgICAgICAgaWYgKG0gPiBtYXhfY29kZSkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0cmVlW20gKiAyICsgMV0gIT09IGJpdHMpIHsKICAgICAgICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0pICogdHJlZVttICogMl07CiAgICAgICAgICAgICAgdHJlZVttICogMiArIDFdID0gYml0czsKICAgICAgICAgICAgfQogICAgICAgICAgICBuLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgYmxfY291bnQpIHsKICAgICAgICB2YXIgbmV4dF9jb2RlID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7CiAgICAgICAgdmFyIGNvZGUgPSAwOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciBuOwogICAgICAgIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgICAgICAgbmV4dF9jb2RlW2JpdHNdID0gY29kZSA9IGNvZGUgKyBibF9jb3VudFtiaXRzIC0gMV0gPDwgMTsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgICB2YXIgbGVuID0gdHJlZVtuICogMiArIDFdOwogICAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHRyZWVbbiAqIDJdID0gYmlfcmV2ZXJzZShuZXh0X2NvZGVbbGVuXSsrLCBsZW4pOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHsKICAgICAgICB2YXIgbjsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgbGVuZ3RoOwogICAgICAgIHZhciBjb2RlOwogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBibF9jb3VudCA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOwogICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUyAtIDE7IGNvZGUrKykgewogICAgICAgICAgYmFzZV9sZW5ndGhbY29kZV0gPSBsZW5ndGg7CiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMSA8PCBleHRyYV9sYml0c1tjb2RlXTsgbisrKSB7CiAgICAgICAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoIC0gMV0gPSBjb2RlOwogICAgICAgIGRpc3QgPSAwOwogICAgICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgY29kZSsrKSB7CiAgICAgICAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0OwogICAgICAgICAgZm9yIChuID0gMDsgbiA8IDEgPDwgZXh0cmFfZGJpdHNbY29kZV07IG4rKykgewogICAgICAgICAgICBfZGlzdF9jb2RlW2Rpc3QrK10gPSBjb2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkaXN0ID4+PSA3OwogICAgICAgIGZvciAoOyBjb2RlIDwgRF9DT0RFUzsgY29kZSsrKSB7CiAgICAgICAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0IDw8IDc7CiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMSA8PCBleHRyYV9kYml0c1tjb2RlXSAtIDc7IG4rKykgewogICAgICAgICAgICBfZGlzdF9jb2RlWzI1NiArIGRpc3QrK10gPSBjb2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGJpdHMgPSAwOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgICAgICAgIGJsX2NvdW50W2JpdHNdID0gMDsKICAgICAgICB9CiAgICAgICAgbiA9IDA7CiAgICAgICAgd2hpbGUgKG4gPD0gMTQzKSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDg7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs4XSsrOwogICAgICAgIH0KICAgICAgICB3aGlsZSAobiA8PSAyNTUpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gOTsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzldKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChuIDw9IDI3OSkgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA3OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbN10rKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4gPD0gMjg3KSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDg7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs4XSsrOwogICAgICAgIH0KICAgICAgICBnZW5fY29kZXMoc3RhdGljX2x0cmVlLCBMX0NPREVTICsgMSwgYmxfY291bnQpOwogICAgICAgIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHsKICAgICAgICAgIHN0YXRpY19kdHJlZVtuICogMiArIDFdID0gNTsKICAgICAgICAgIHN0YXRpY19kdHJlZVtuICogMl0gPSBiaV9yZXZlcnNlKG4sIDUpOwogICAgICAgIH0KICAgICAgICBzdGF0aWNfbF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19sdHJlZSwgZXh0cmFfbGJpdHMsIExJVEVSQUxTICsgMSwgTF9DT0RFUywgTUFYX0JJVFMpOwogICAgICAgIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgRF9DT0RFUywgTUFYX0JJVFMpOwogICAgICAgIHN0YXRpY19ibF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKG5ldyBBcnJheSgwKSwgZXh0cmFfYmxiaXRzLCAwLCBCTF9DT0RFUywgTUFYX0JMX0JJVFMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluaXRfYmxvY2socykgewogICAgICAgIHZhciBuOwogICAgICAgIGZvciAobiA9IDA7IG4gPCBMX0NPREVTOyBuKyspIHsKICAgICAgICAgIHMuZHluX2x0cmVlW24gKiAyXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHsKICAgICAgICAgIHMuZHluX2R0cmVlW24gKiAyXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzLmJsX3RyZWVbbiAqIDJdID0gMDsKICAgICAgICB9CiAgICAgICAgcy5keW5fbHRyZWVbRU5EX0JMT0NLICogMl0gPSAxOwogICAgICAgIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7CiAgICAgICAgcy5sYXN0X2xpdCA9IHMubWF0Y2hlcyA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmlfd2luZHVwKHMpIHsKICAgICAgICBpZiAocy5iaV92YWxpZCA+IDgpIHsKICAgICAgICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICAgICAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID4gMCkgewogICAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZjsKICAgICAgICB9CiAgICAgICAgcy5iaV9idWYgPSAwOwogICAgICAgIHMuYmlfdmFsaWQgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcikgewogICAgICAgIGJpX3dpbmR1cChzKTsKICAgICAgICBpZiAoaGVhZGVyKSB7CiAgICAgICAgICBwdXRfc2hvcnQocywgbGVuKTsKICAgICAgICAgIHB1dF9zaG9ydChzLCB+bGVuKTsKICAgICAgICB9CiAgICAgICAgdXRpbHMuYXJyYXlTZXQocy5wZW5kaW5nX2J1Ziwgcy53aW5kb3csIGJ1ZiwgbGVuLCBzLnBlbmRpbmcpOwogICAgICAgIHMucGVuZGluZyArPSBsZW47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc21hbGxlcih0cmVlLCBuLCBtLCBkZXB0aCkgewogICAgICAgIHZhciBfbjIgPSBuICogMjsKICAgICAgICB2YXIgX20yID0gbSAqIDI7CiAgICAgICAgcmV0dXJuIHRyZWVbX24yXSA8IHRyZWVbX20yXSB8fCB0cmVlW19uMl0gPT09IHRyZWVbX20yXSAmJiBkZXB0aFtuXSA8PSBkZXB0aFttXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwcWRvd25oZWFwKHMsIHRyZWUsIGspIHsKICAgICAgICB2YXIgdiA9IHMuaGVhcFtrXTsKICAgICAgICB2YXIgaiA9IGsgPDwgMTsKICAgICAgICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7CiAgICAgICAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiYgc21hbGxlcih0cmVlLCBzLmhlYXBbaiArIDFdLCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7CiAgICAgICAgICAgIGorKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzLmhlYXBba10gPSBzLmhlYXBbal07CiAgICAgICAgICBrID0gajsKICAgICAgICAgIGogPDw9IDE7CiAgICAgICAgfQogICAgICAgIHMuaGVhcFtrXSA9IHY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKSB7CiAgICAgICAgdmFyIGRpc3Q7CiAgICAgICAgdmFyIGxjOwogICAgICAgIHZhciBseCA9IDA7CiAgICAgICAgdmFyIGNvZGU7CiAgICAgICAgdmFyIGV4dHJhOwogICAgICAgIGlmIChzLmxhc3RfbGl0ICE9PSAwKSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGRpc3QgPSBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDJdIDw8IDggfCBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDIgKyAxXTsKICAgICAgICAgICAgbGMgPSBzLnBlbmRpbmdfYnVmW3MubF9idWYgKyBseF07CiAgICAgICAgICAgIGx4Kys7CiAgICAgICAgICAgIGlmIChkaXN0ID09PSAwKSB7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJlZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29kZSA9IF9sZW5ndGhfY29kZVtsY107CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUgKyBMSVRFUkFMUyArIDEsIGx0cmVlKTsKICAgICAgICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdOwogICAgICAgICAgICAgIGlmIChleHRyYSAhPT0gMCkgewogICAgICAgICAgICAgICAgbGMgLT0gYmFzZV9sZW5ndGhbY29kZV07CiAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZGlzdC0tOwogICAgICAgICAgICAgIGNvZGUgPSBkX2NvZGUoZGlzdCk7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsKICAgICAgICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdOwogICAgICAgICAgICAgIGlmIChleHRyYSAhPT0gMCkgewogICAgICAgICAgICAgICAgZGlzdCAtPSBiYXNlX2Rpc3RbY29kZV07CiAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTsKICAgICAgICB9CiAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJ1aWxkX3RyZWUocywgZGVzYykgewogICAgICAgIHZhciB0cmVlID0gZGVzYy5keW5fdHJlZTsKICAgICAgICB2YXIgc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTsKICAgICAgICB2YXIgaGFzX3N0cmVlID0gZGVzYy5zdGF0X2Rlc2MuaGFzX3N0cmVlOwogICAgICAgIHZhciBlbGVtcyA9IGRlc2Muc3RhdF9kZXNjLmVsZW1zOwogICAgICAgIHZhciBuLCBtOwogICAgICAgIHZhciBtYXhfY29kZSA9IC0xOwogICAgICAgIHZhciBub2RlOwogICAgICAgIHMuaGVhcF9sZW4gPSAwOwogICAgICAgIHMuaGVhcF9tYXggPSBIRUFQX1NJWkU7CiAgICAgICAgZm9yIChuID0gMDsgbiA8IGVsZW1zOyBuKyspIHsKICAgICAgICAgIGlmICh0cmVlW24gKiAyXSAhPT0gMCkgewogICAgICAgICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjsKICAgICAgICAgICAgcy5kZXB0aFtuXSA9IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0cmVlW24gKiAyICsgMV0gPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aGlsZSAocy5oZWFwX2xlbiA8IDIpIHsKICAgICAgICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlIDwgMiA/ICsrbWF4X2NvZGUgOiAwOwogICAgICAgICAgdHJlZVtub2RlICogMl0gPSAxOwogICAgICAgICAgcy5kZXB0aFtub2RlXSA9IDA7CiAgICAgICAgICBzLm9wdF9sZW4tLTsKICAgICAgICAgIGlmIChoYXNfc3RyZWUpIHsKICAgICAgICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUgKiAyICsgMV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlc2MubWF4X2NvZGUgPSBtYXhfY29kZTsKICAgICAgICBmb3IgKG4gPSBzLmhlYXBfbGVuID4+IDE7IG4gPj0gMTsgbi0tKSB7CiAgICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIG4pOwogICAgICAgIH0KICAgICAgICBub2RlID0gZWxlbXM7CiAgICAgICAgZG8gewogICAgICAgICAgbiA9IHMuaGVhcFsxXTsKICAgICAgICAgIHMuaGVhcFsxXSA9IHMuaGVhcFtzLmhlYXBfbGVuLS1dOwogICAgICAgICAgcHFkb3duaGVhcChzLCB0cmVlLCAxKTsKICAgICAgICAgIG0gPSBzLmhlYXBbMV07CiAgICAgICAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG47CiAgICAgICAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG07CiAgICAgICAgICB0cmVlW25vZGUgKiAyXSA9IHRyZWVbbiAqIDJdICsgdHJlZVttICogMl07CiAgICAgICAgICBzLmRlcHRoW25vZGVdID0gKHMuZGVwdGhbbl0gPj0gcy5kZXB0aFttXSA/IHMuZGVwdGhbbl0gOiBzLmRlcHRoW21dKSArIDE7CiAgICAgICAgICB0cmVlW24gKiAyICsgMV0gPSB0cmVlW20gKiAyICsgMV0gPSBub2RlOwogICAgICAgICAgcy5oZWFwWzFdID0gbm9kZSsrOwogICAgICAgICAgcHFkb3duaGVhcChzLCB0cmVlLCAxKTsKICAgICAgICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpOwogICAgICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzFdOwogICAgICAgIGdlbl9iaXRsZW4ocywgZGVzYyk7CiAgICAgICAgZ2VuX2NvZGVzKHRyZWUsIG1heF9jb2RlLCBzLmJsX2NvdW50KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpIHsKICAgICAgICB2YXIgbjsKICAgICAgICB2YXIgcHJldmxlbiA9IC0xOwogICAgICAgIHZhciBjdXJsZW47CiAgICAgICAgdmFyIG5leHRsZW4gPSB0cmVlWzAgKiAyICsgMV07CiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIgbWF4X2NvdW50ID0gNzsKICAgICAgICB2YXIgbWluX2NvdW50ID0gNDsKICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICB9CiAgICAgICAgdHJlZVsobWF4X2NvZGUgKyAxKSAqIDIgKyAxXSA9IDY1NTM1OwogICAgICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgICAgICAgY3VybGVuID0gbmV4dGxlbjsKICAgICAgICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV07CiAgICAgICAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgICAgICAgIHMuYmxfdHJlZVtjdXJsZW4gKiAyXSArPSBjb3VudDsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9PSAwKSB7CiAgICAgICAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHsKICAgICAgICAgICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdKys7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7CiAgICAgICAgICAgIHMuYmxfdHJlZVtSRVBaXzNfMTAgKiAyXSsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5ibF90cmVlW1JFUFpfMTFfMTM4ICogMl0rKzsKICAgICAgICAgIH0KICAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgIHByZXZsZW4gPSBjdXJsZW47CiAgICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBtYXhfY291bnQgPSA2OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNzsKICAgICAgICAgICAgbWluX2NvdW50ID0gNDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF90cmVlKHMsIHRyZWUsIG1heF9jb2RlKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIHByZXZsZW4gPSAtMTsKICAgICAgICB2YXIgY3VybGVuOwogICAgICAgIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdOwogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgdmFyIG1heF9jb3VudCA9IDc7CiAgICAgICAgdmFyIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgICAgICAgY3VybGVuID0gbmV4dGxlbjsKICAgICAgICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV07CiAgICAgICAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpOwogICAgICAgICAgICB9IHdoaWxlICgtLWNvdW50ICE9PSAwKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9PSAwKSB7CiAgICAgICAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpOwogICAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZF9jb2RlKHMsIFJFUF8zXzYsIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDIpOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkgewogICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLmJsX3RyZWUpOwogICAgICAgICAgICBzZW5kX2JpdHMocywgY291bnQgLSAzLCAzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBaXzExXzEzOCwgcy5ibF90cmVlKTsKICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpOwogICAgICAgICAgfQogICAgICAgICAgY291bnQgPSAwOwogICAgICAgICAgcHJldmxlbiA9IGN1cmxlbjsKICAgICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDY7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXhfY291bnQgPSA3OwogICAgICAgICAgICBtaW5fY291bnQgPSA0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBidWlsZF9ibF90cmVlKHMpIHsKICAgICAgICB2YXIgbWF4X2JsaW5kZXg7CiAgICAgICAgc2Nhbl90cmVlKHMsIHMuZHluX2x0cmVlLCBzLmxfZGVzYy5tYXhfY29kZSk7CiAgICAgICAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7CiAgICAgICAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpOwogICAgICAgIGZvciAobWF4X2JsaW5kZXggPSBCTF9DT0RFUyAtIDE7IG1heF9ibGluZGV4ID49IDM7IG1heF9ibGluZGV4LS0pIHsKICAgICAgICAgIGlmIChzLmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdICogMiArIDFdICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLm9wdF9sZW4gKz0gMyAqIChtYXhfYmxpbmRleCArIDEpICsgNSArIDUgKyA0OwogICAgICAgIHJldHVybiBtYXhfYmxpbmRleDsKICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX2FsbF90cmVlcyhzLCBsY29kZXMsIGRjb2RlcywgYmxjb2RlcykgewogICAgICAgIHZhciByYW5rOwogICAgICAgIHNlbmRfYml0cyhzLCBsY29kZXMgLSAyNTcsIDUpOwogICAgICAgIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCA1KTsKICAgICAgICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsIDQpOwogICAgICAgIGZvciAocmFuayA9IDA7IHJhbmsgPCBibGNvZGVzOyByYW5rKyspIHsKICAgICAgICAgIHNlbmRfYml0cyhzLCBzLmJsX3RyZWVbYmxfb3JkZXJbcmFua10gKiAyICsgMV0sIDMpOwogICAgICAgIH0KICAgICAgICBzZW5kX3RyZWUocywgcy5keW5fbHRyZWUsIGxjb2RlcyAtIDEpOwogICAgICAgIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGV0ZWN0X2RhdGFfdHlwZShzKSB7CiAgICAgICAgdmFyIGJsYWNrX21hc2sgPSA0MDkzNjI0NDQ3OwogICAgICAgIHZhciBuOwogICAgICAgIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHsKICAgICAgICAgIGlmIChibGFja19tYXNrICYgMSAmJiBzLmR5bl9sdHJlZVtuICogMl0gIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIFpfQklOQVJZOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5keW5fbHRyZWVbOSAqIDJdICE9PSAwIHx8IHMuZHluX2x0cmVlWzEwICogMl0gIT09IDAgfHwgcy5keW5fbHRyZWVbMTMgKiAyXSAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIFpfVEVYVDsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUzsgbisrKSB7CiAgICAgICAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBaX1RFWFQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBaX0JJTkFSWTsKICAgICAgfQogICAgICB2YXIgc3RhdGljX2luaXRfZG9uZSA9IGZhbHNlOwogICAgICBmdW5jdGlvbiBfdHJfaW5pdChzKSB7CiAgICAgICAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7CiAgICAgICAgICB0cl9zdGF0aWNfaW5pdCgpOwogICAgICAgICAgc3RhdGljX2luaXRfZG9uZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHMubF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuZHluX2x0cmVlLCBzdGF0aWNfbF9kZXNjKTsKICAgICAgICBzLmRfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7CiAgICAgICAgcy5ibF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuYmxfdHJlZSwgc3RhdGljX2JsX2Rlc2MpOwogICAgICAgIHMuYmlfYnVmID0gMDsKICAgICAgICBzLmJpX3ZhbGlkID0gMDsKICAgICAgICBpbml0X2Jsb2NrKHMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KSB7CiAgICAgICAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0sgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7CiAgICAgICAgY29weV9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIHRydWUpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl9hbGlnbihzKSB7CiAgICAgICAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTsKICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwogICAgICAgIGJpX2ZsdXNoKHMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpIHsKICAgICAgICB2YXIgb3B0X2xlbmIsIHN0YXRpY19sZW5iOwogICAgICAgIHZhciBtYXhfYmxpbmRleCA9IDA7CiAgICAgICAgaWYgKHMubGV2ZWwgPiAwKSB7CiAgICAgICAgICBpZiAocy5zdHJtLmRhdGFfdHlwZSA9PT0gWl9VTktOT1dOKSB7CiAgICAgICAgICAgIHMuc3RybS5kYXRhX3R5cGUgPSBkZXRlY3RfZGF0YV90eXBlKHMpOwogICAgICAgICAgfQogICAgICAgICAgYnVpbGRfdHJlZShzLCBzLmxfZGVzYyk7CiAgICAgICAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTsKICAgICAgICAgIG1heF9ibGluZGV4ID0gYnVpbGRfYmxfdHJlZShzKTsKICAgICAgICAgIG9wdF9sZW5iID0gcy5vcHRfbGVuICsgMyArIDcgPj4+IDM7CiAgICAgICAgICBzdGF0aWNfbGVuYiA9IHMuc3RhdGljX2xlbiArIDMgKyA3ID4+PiAzOwogICAgICAgICAgaWYgKHN0YXRpY19sZW5iIDw9IG9wdF9sZW5iKSB7CiAgICAgICAgICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmIgPSBzdG9yZWRfbGVuICsgNTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0b3JlZF9sZW4gKyA0IDw9IG9wdF9sZW5iICYmIGJ1ZiAhPT0gLTEpIHsKICAgICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTsKICAgICAgICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7CiAgICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIHN0YXRpY19sdHJlZSwgc3RhdGljX2R0cmVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVMgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7CiAgICAgICAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTsKICAgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIHMuZHluX2x0cmVlLCBzLmR5bl9kdHJlZSk7CiAgICAgICAgfQogICAgICAgIGluaXRfYmxvY2socyk7CiAgICAgICAgaWYgKGxhc3QpIHsKICAgICAgICAgIGJpX3dpbmR1cChzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX3RhbGx5KHMsIGRpc3QsIGxjKSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgcy5sYXN0X2xpdCAqIDJdID0gZGlzdCA+Pj4gOCAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMiArIDFdID0gZGlzdCAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MubF9idWYgKyBzLmxhc3RfbGl0XSA9IGxjICYgMjU1OwogICAgICAgIHMubGFzdF9saXQrKzsKICAgICAgICBpZiAoZGlzdCA9PT0gMCkgewogICAgICAgICAgcy5keW5fbHRyZWVbbGMgKiAyXSsrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzLm1hdGNoZXMrKzsKICAgICAgICAgIGRpc3QtLTsKICAgICAgICAgIHMuZHluX2x0cmVlWyhfbGVuZ3RoX2NvZGVbbGNdICsgTElURVJBTFMgKyAxKSAqIDJdKys7CiAgICAgICAgICBzLmR5bl9kdHJlZVtkX2NvZGUoZGlzdCkgKiAyXSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5sYXN0X2xpdCA9PT0gcy5saXRfYnVmc2l6ZSAtIDE7CiAgICAgIH0KICAgICAgZXhwb3J0cy5fdHJfaW5pdCA9IF90cl9pbml0OwogICAgICBleHBvcnRzLl90cl9zdG9yZWRfYmxvY2sgPSBfdHJfc3RvcmVkX2Jsb2NrOwogICAgICBleHBvcnRzLl90cl9mbHVzaF9ibG9jayA9IF90cl9mbHVzaF9ibG9jazsKICAgICAgZXhwb3J0cy5fdHJfdGFsbHkgPSBfdHJfdGFsbHk7CiAgICAgIGV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcwogIHZhciByZXF1aXJlX2FkbGVyMzIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7CiAgICAgICAgdmFyIHMxID0gYWRsZXIgJiA2NTUzNSB8IDAsIHMyID0gYWRsZXIgPj4+IDE2ICYgNjU1MzUgfCAwLCBuID0gMDsKICAgICAgICB3aGlsZSAobGVuICE9PSAwKSB7CiAgICAgICAgICBuID0gbGVuID4gMmUzID8gMmUzIDogbGVuOwogICAgICAgICAgbGVuIC09IG47CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHMxID0gczEgKyBidWZbcG9zKytdIHwgMDsKICAgICAgICAgICAgczIgPSBzMiArIHMxIHwgMDsKICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgICBzMSAlPSA2NTUyMTsKICAgICAgICAgIHMyICU9IDY1NTIxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gczEgfCBzMiA8PCAxNiB8IDA7CiAgICAgIH0KICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY3JjMzIuanMKICB2YXIgcmVxdWlyZV9jcmMzMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBtYWtlVGFibGUoKSB7CiAgICAgICAgdmFyIGMsIHRhYmxlID0gW107CiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgYyA9IG47CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykgewogICAgICAgICAgICBjID0gYyAmIDEgPyAzOTg4MjkyMzg0IF4gYyA+Pj4gMSA6IGMgPj4+IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0YWJsZVtuXSA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgfQogICAgICB2YXIgY3JjVGFibGUgPSBtYWtlVGFibGUoKTsKICAgICAgZnVuY3Rpb24gY3JjMzIyKGNyYywgYnVmLCBsZW4sIHBvcykgewogICAgICAgIHZhciB0ID0gY3JjVGFibGUsIGVuZCA9IHBvcyArIGxlbjsKICAgICAgICBjcmMgXj0gLTE7CiAgICAgICAgZm9yICh2YXIgaSA9IHBvczsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICBjcmMgPSBjcmMgPj4+IDggXiB0WyhjcmMgXiBidWZbaV0pICYgMjU1XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNyYyBeIC0xOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gY3JjMzIyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMKICB2YXIgcmVxdWlyZV9tZXNzYWdlczIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7CiAgICAgICAgMjogIm5lZWQgZGljdGlvbmFyeSIsCiAgICAgICAgMTogInN0cmVhbSBlbmQiLAogICAgICAgIDA6ICIiLAogICAgICAgICItMSI6ICJmaWxlIGVycm9yIiwKICAgICAgICAiLTIiOiAic3RyZWFtIGVycm9yIiwKICAgICAgICAiLTMiOiAiZGF0YSBlcnJvciIsCiAgICAgICAgIi00IjogImluc3VmZmljaWVudCBtZW1vcnkiLAogICAgICAgICItNSI6ICJidWZmZXIgZXJyb3IiLAogICAgICAgICItNiI6ICJpbmNvbXBhdGlibGUgdmVyc2lvbiIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMKICB2YXIgcmVxdWlyZV9kZWZsYXRlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgdHJlZXMgPSByZXF1aXJlX3RyZWVzKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMjIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgWl9OT19GTFVTSCA9IDA7CiAgICAgIHZhciBaX1BBUlRJQUxfRkxVU0ggPSAxOwogICAgICB2YXIgWl9GVUxMX0ZMVVNIID0gMzsKICAgICAgdmFyIFpfRklOSVNIID0gNDsKICAgICAgdmFyIFpfQkxPQ0sgPSA1OwogICAgICB2YXIgWl9PSyA9IDA7CiAgICAgIHZhciBaX1NUUkVBTV9FTkQgPSAxOwogICAgICB2YXIgWl9TVFJFQU1fRVJST1IgPSAtMjsKICAgICAgdmFyIFpfREFUQV9FUlJPUiA9IC0zOwogICAgICB2YXIgWl9CVUZfRVJST1IgPSAtNTsKICAgICAgdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwogICAgICB2YXIgWl9GSUxURVJFRCA9IDE7CiAgICAgIHZhciBaX0hVRkZNQU5fT05MWSA9IDI7CiAgICAgIHZhciBaX1JMRSA9IDM7CiAgICAgIHZhciBaX0ZJWEVEID0gNDsKICAgICAgdmFyIFpfREVGQVVMVF9TVFJBVEVHWSA9IDA7CiAgICAgIHZhciBaX1VOS05PV04gPSAyOwogICAgICB2YXIgWl9ERUZMQVRFRCA9IDg7CiAgICAgIHZhciBNQVhfTUVNX0xFVkVMID0gOTsKICAgICAgdmFyIE1BWF9XQklUUyA9IDE1OwogICAgICB2YXIgREVGX01FTV9MRVZFTCA9IDg7CiAgICAgIHZhciBMRU5HVEhfQ09ERVMgPSAyOTsKICAgICAgdmFyIExJVEVSQUxTID0gMjU2OwogICAgICB2YXIgTF9DT0RFUyA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUzsKICAgICAgdmFyIERfQ09ERVMgPSAzMDsKICAgICAgdmFyIEJMX0NPREVTID0gMTk7CiAgICAgIHZhciBIRUFQX1NJWkUgPSAyICogTF9DT0RFUyArIDE7CiAgICAgIHZhciBNQVhfQklUUyA9IDE1OwogICAgICB2YXIgTUlOX01BVENIID0gMzsKICAgICAgdmFyIE1BWF9NQVRDSCA9IDI1ODsKICAgICAgdmFyIE1JTl9MT09LQUhFQUQgPSBNQVhfTUFUQ0ggKyBNSU5fTUFUQ0ggKyAxOwogICAgICB2YXIgUFJFU0VUX0RJQ1QgPSAzMjsKICAgICAgdmFyIElOSVRfU1RBVEUgPSA0MjsKICAgICAgdmFyIEVYVFJBX1NUQVRFID0gNjk7CiAgICAgIHZhciBOQU1FX1NUQVRFID0gNzM7CiAgICAgIHZhciBDT01NRU5UX1NUQVRFID0gOTE7CiAgICAgIHZhciBIQ1JDX1NUQVRFID0gMTAzOwogICAgICB2YXIgQlVTWV9TVEFURSA9IDExMzsKICAgICAgdmFyIEZJTklTSF9TVEFURSA9IDY2NjsKICAgICAgdmFyIEJTX05FRURfTU9SRSA9IDE7CiAgICAgIHZhciBCU19CTE9DS19ET05FID0gMjsKICAgICAgdmFyIEJTX0ZJTklTSF9TVEFSVEVEID0gMzsKICAgICAgdmFyIEJTX0ZJTklTSF9ET05FID0gNDsKICAgICAgdmFyIE9TX0NPREUgPSAzOwogICAgICBmdW5jdGlvbiBlcnIoc3RybSwgZXJyb3JDb2RlKSB7CiAgICAgICAgc3RybS5tc2cgPSBtc2dbZXJyb3JDb2RlXTsKICAgICAgICByZXR1cm4gZXJyb3JDb2RlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJhbmsoZikgewogICAgICAgIHJldHVybiAoZiA8PCAxKSAtIChmID4gNCA/IDkgOiAwKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB6ZXJvKGJ1ZikgewogICAgICAgIHZhciBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CiAgICAgICAgICBidWZbbGVuXSA9IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZsdXNoX3BlbmRpbmcoc3RybSkgewogICAgICAgIHZhciBzID0gc3RybS5zdGF0ZTsKICAgICAgICB2YXIgbGVuID0gcy5wZW5kaW5nOwogICAgICAgIGlmIChsZW4gPiBzdHJtLmF2YWlsX291dCkgewogICAgICAgICAgbGVuID0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHMucGVuZGluZ19idWYsIHMucGVuZGluZ19vdXQsIGxlbiwgc3RybS5uZXh0X291dCk7CiAgICAgICAgc3RybS5uZXh0X291dCArPSBsZW47CiAgICAgICAgcy5wZW5kaW5nX291dCArPSBsZW47CiAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gbGVuOwogICAgICAgIHN0cm0uYXZhaWxfb3V0IC09IGxlbjsKICAgICAgICBzLnBlbmRpbmcgLT0gbGVuOwogICAgICAgIGlmIChzLnBlbmRpbmcgPT09IDApIHsKICAgICAgICAgIHMucGVuZGluZ19vdXQgPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5KHMsIGxhc3QpIHsKICAgICAgICB0cmVlcy5fdHJfZmx1c2hfYmxvY2socywgcy5ibG9ja19zdGFydCA+PSAwID8gcy5ibG9ja19zdGFydCA6IC0xLCBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCwgbGFzdCk7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgZmx1c2hfcGVuZGluZyhzLnN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHB1dF9ieXRlKHMsIGIpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHV0U2hvcnRNU0IocywgYikgewogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiA+Pj4gOCAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGIgJiAyNTU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcmVhZF9idWYoc3RybSwgYnVmLCBzdGFydCwgc2l6ZSkgewogICAgICAgIHZhciBsZW4gPSBzdHJtLmF2YWlsX2luOwogICAgICAgIGlmIChsZW4gPiBzaXplKSB7CiAgICAgICAgICBsZW4gPSBzaXplOwogICAgICAgIH0KICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgc3RybS5hdmFpbF9pbiAtPSBsZW47CiAgICAgICAgdXRpbHMuYXJyYXlTZXQoYnVmLCBzdHJtLmlucHV0LCBzdHJtLm5leHRfaW4sIGxlbiwgc3RhcnQpOwogICAgICAgIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7CiAgICAgICAgfSBlbHNlIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDIpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X2luICs9IGxlbjsKICAgICAgICBzdHJtLnRvdGFsX2luICs9IGxlbjsKICAgICAgICByZXR1cm4gbGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKSB7CiAgICAgICAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsKICAgICAgICB2YXIgc2NhbiA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgdmFyIG1hdGNoOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIGJlc3RfbGVuID0gcy5wcmV2X2xlbmd0aDsKICAgICAgICB2YXIgbmljZV9tYXRjaCA9IHMubmljZV9tYXRjaDsKICAgICAgICB2YXIgbGltaXQgPSBzLnN0cnN0YXJ0ID4gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEID8gcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIHZhciB3bWFzayA9IHMud19tYXNrOwogICAgICAgIHZhciBwcmV2ID0gcy5wcmV2OwogICAgICAgIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIOwogICAgICAgIHZhciBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgIHZhciBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBzLmdvb2RfbWF0Y2gpIHsKICAgICAgICAgIGNoYWluX2xlbmd0aCA+Pj0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgbmljZV9tYXRjaCA9IHMubG9va2FoZWFkOwogICAgICAgIH0KICAgICAgICBkbyB7CiAgICAgICAgICBtYXRjaCA9IGN1cl9tYXRjaDsKICAgICAgICAgIGlmIChfd2luW21hdGNoICsgYmVzdF9sZW5dICE9PSBzY2FuX2VuZCB8fCBfd2luW21hdGNoICsgYmVzdF9sZW4gLSAxXSAhPT0gc2Nhbl9lbmQxIHx8IF93aW5bbWF0Y2hdICE9PSBfd2luW3NjYW5dIHx8IF93aW5bKyttYXRjaF0gIT09IF93aW5bc2NhbiArIDFdKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc2NhbiArPSAyOwogICAgICAgICAgbWF0Y2grKzsKICAgICAgICAgIGRvIHsKICAgICAgICAgIH0gd2hpbGUgKF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAgICAgICAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIOwogICAgICAgICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CiAgICAgICAgICAgIGJlc3RfbGVuID0gbGVuOwogICAgICAgICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgICAgICBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApOwogICAgICAgIGlmIChiZXN0X2xlbiA8PSBzLmxvb2thaGVhZCkgewogICAgICAgICAgcmV0dXJuIGJlc3RfbGVuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5sb29rYWhlYWQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmlsbF93aW5kb3cocykgewogICAgICAgIHZhciBfd19zaXplID0gcy53X3NpemU7CiAgICAgICAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjsKICAgICAgICBkbyB7CiAgICAgICAgICBtb3JlID0gcy53aW5kb3dfc2l6ZSAtIHMubG9va2FoZWFkIC0gcy5zdHJzdGFydDsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHMud2luZG93LCBzLndpbmRvdywgX3dfc2l6ZSwgX3dfc2l6ZSwgMCk7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7CiAgICAgICAgICAgIG4gPSBzLmhhc2hfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5oZWFkWy0tcF07CiAgICAgICAgICAgICAgcy5oZWFkW3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBuID0gX3dfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5wcmV2Wy0tcF07CiAgICAgICAgICAgICAgcy5wcmV2W3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBtb3JlICs9IF93X3NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX2luID09PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbiA9IHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCwgbW9yZSk7CiAgICAgICAgICBzLmxvb2thaGVhZCArPSBuOwogICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDsKICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3N0cl07CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICAgICAgICAgIHN0cisrOwogICAgICAgICAgICAgIHMuaW5zZXJ0LS07CiAgICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIG1heF9ibG9ja19zaXplID0gNjU1MzU7CiAgICAgICAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewogICAgICAgICAgbWF4X2Jsb2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1OwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDAgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7CiAgICAgICAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDsKICAgICAgICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHsKICAgICAgICB2YXIgaGFzaF9oZWFkOwogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaGFzaF9oZWFkID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaGFzaF9oZWFkICE9PSAwICYmIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSBzLm1heF9sYXp5X21hdGNoICYmIHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoLS07CiAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdOwogICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGhhc2hfaGVhZDsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIHZhciBtYXhfaW5zZXJ0OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2hfaGVhZCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgfQogICAgICAgICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgcy5wcmV2X21hdGNoID0gcy5tYXRjaF9zdGFydDsKICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGlmIChoYXNoX2hlYWQgIT09IDAgJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiYgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSBzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmIChzLnN0cmF0ZWd5ID09PSBaX0ZJTFRFUkVEIHx8IHMubWF0Y2hfbGVuZ3RoID09PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2KSkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHsKICAgICAgICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5wcmV2X2xlbmd0aCAtIDE7CiAgICAgICAgICAgIHMucHJldl9sZW5ndGggLT0gMjsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkgewogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5sYXN0X2xpdCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkgewogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgdmFyIHByZXY7CiAgICAgICAgdmFyIHNjYW4sIHN0cmVuZDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHsKICAgICAgICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxOwogICAgICAgICAgICBwcmV2ID0gX3dpbltzY2FuXTsKICAgICAgICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7CiAgICAgICAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBzY2FuIDwgc3RyZW5kKTsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGJmbHVzaDsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTsKICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHsKICAgICAgICB0aGlzLmdvb2RfbGVuZ3RoID0gZ29vZF9sZW5ndGg7CiAgICAgICAgdGhpcy5tYXhfbGF6eSA9IG1heF9sYXp5OwogICAgICAgIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDsKICAgICAgICB0aGlzLm1heF9jaGFpbiA9IG1heF9jaGFpbjsKICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jOwogICAgICB9CiAgICAgIHZhciBjb25maWd1cmF0aW9uX3RhYmxlOwogICAgICBjb25maWd1cmF0aW9uX3RhYmxlID0gWwogICAgICAgIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNiwgMzIsIDMyLCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLAogICAgICAgIG5ldyBDb25maWcoOCwgMTYsIDMyLCAzMiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KQogICAgICBdOwogICAgICBmdW5jdGlvbiBsbV9pbml0KHMpIHsKICAgICAgICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplOwogICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTsKICAgICAgICBzLmdvb2RfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmdvb2RfbGVuZ3RoOwogICAgICAgIHMubmljZV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGg7CiAgICAgICAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47CiAgICAgICAgcy5zdHJzdGFydCA9IDA7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICBzLmluc19oID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBEZWZsYXRlU3RhdGUoKSB7CiAgICAgICAgdGhpcy5zdHJtID0gbnVsbDsKICAgICAgICB0aGlzLnN0YXR1cyA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGw7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmcgPSAwOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5nemhlYWQgPSBudWxsOwogICAgICAgIHRoaXMuZ3ppbmRleCA9IDA7CiAgICAgICAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOwogICAgICAgIHRoaXMubGFzdF9mbHVzaCA9IC0xOwogICAgICAgIHRoaXMud19zaXplID0gMDsKICAgICAgICB0aGlzLndfYml0cyA9IDA7CiAgICAgICAgdGhpcy53X21hc2sgPSAwOwogICAgICAgIHRoaXMud2luZG93ID0gbnVsbDsKICAgICAgICB0aGlzLndpbmRvd19zaXplID0gMDsKICAgICAgICB0aGlzLnByZXYgPSBudWxsOwogICAgICAgIHRoaXMuaGVhZCA9IG51bGw7CiAgICAgICAgdGhpcy5pbnNfaCA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NpemUgPSAwOwogICAgICAgIHRoaXMuaGFzaF9iaXRzID0gMDsKICAgICAgICB0aGlzLmhhc2hfbWFzayA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NoaWZ0ID0gMDsKICAgICAgICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5wcmV2X21hdGNoID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgdGhpcy5zdHJzdGFydCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9zdGFydCA9IDA7CiAgICAgICAgdGhpcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHRoaXMucHJldl9sZW5ndGggPSAwOwogICAgICAgIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5sZXZlbCA9IDA7CiAgICAgICAgdGhpcy5zdHJhdGVneSA9IDA7CiAgICAgICAgdGhpcy5nb29kX21hdGNoID0gMDsKICAgICAgICB0aGlzLm5pY2VfbWF0Y2ggPSAwOwogICAgICAgIHRoaXMuZHluX2x0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KEhFQVBfU0laRSAqIDIpOwogICAgICAgIHRoaXMuZHluX2R0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogRF9DT0RFUyArIDEpICogMik7CiAgICAgICAgdGhpcy5ibF90cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpOwogICAgICAgIHplcm8odGhpcy5keW5fbHRyZWUpOwogICAgICAgIHplcm8odGhpcy5keW5fZHRyZWUpOwogICAgICAgIHplcm8odGhpcy5ibF90cmVlKTsKICAgICAgICB0aGlzLmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5kX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuYmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUyArIDEpOwogICAgICAgIHRoaXMuaGVhcCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOwogICAgICAgIHplcm8odGhpcy5oZWFwKTsKICAgICAgICB0aGlzLmhlYXBfbGVuID0gMDsKICAgICAgICB0aGlzLmhlYXBfbWF4ID0gMDsKICAgICAgICB0aGlzLmRlcHRoID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7CiAgICAgICAgemVybyh0aGlzLmRlcHRoKTsKICAgICAgICB0aGlzLmxfYnVmID0gMDsKICAgICAgICB0aGlzLmxpdF9idWZzaXplID0gMDsKICAgICAgICB0aGlzLmxhc3RfbGl0ID0gMDsKICAgICAgICB0aGlzLmRfYnVmID0gMDsKICAgICAgICB0aGlzLm9wdF9sZW4gPSAwOwogICAgICAgIHRoaXMuc3RhdGljX2xlbiA9IDA7CiAgICAgICAgdGhpcy5tYXRjaGVzID0gMDsKICAgICAgICB0aGlzLmluc2VydCA9IDA7CiAgICAgICAgdGhpcy5iaV9idWYgPSAwOwogICAgICAgIHRoaXMuYmlfdmFsaWQgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkgewogICAgICAgIHZhciBzOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgICAgfQogICAgICAgIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IDA7CiAgICAgICAgc3RybS5kYXRhX3R5cGUgPSBaX1VOS05PV047CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgcy5wZW5kaW5nID0gMDsKICAgICAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICBpZiAocy53cmFwIDwgMCkgewogICAgICAgICAgcy53cmFwID0gLXMud3JhcDsKICAgICAgICB9CiAgICAgICAgcy5zdGF0dXMgPSBzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURTsKICAgICAgICBzdHJtLmFkbGVyID0gcy53cmFwID09PSAyID8gMCA6IDE7CiAgICAgICAgcy5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKICAgICAgICB0cmVlcy5fdHJfaW5pdChzKTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkgewogICAgICAgIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOwogICAgICAgIGlmIChyZXQgPT09IFpfT0spIHsKICAgICAgICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIHsKICAgICAgICBpZiAoIXN0cm0pIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgdmFyIHdyYXAgPSAxOwogICAgICAgIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7CiAgICAgICAgICBsZXZlbCA9IDY7CiAgICAgICAgfQogICAgICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewogICAgICAgICAgd3JhcCA9IDA7CiAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHsKICAgICAgICAgIHdyYXAgPSAyOwogICAgICAgICAgd2luZG93Qml0cyAtPSAxNjsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9PSBaX0RFRkxBVEVEIHx8IHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyA9PT0gOCkgewogICAgICAgICAgd2luZG93Qml0cyA9IDk7CiAgICAgICAgfQogICAgICAgIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpOwogICAgICAgIHN0cm0uc3RhdGUgPSBzOwogICAgICAgIHMuc3RybSA9IHN0cm07CiAgICAgICAgcy53cmFwID0gd3JhcDsKICAgICAgICBzLmd6aGVhZCA9IG51bGw7CiAgICAgICAgcy53X2JpdHMgPSB3aW5kb3dCaXRzOwogICAgICAgIHMud19zaXplID0gMSA8PCBzLndfYml0czsKICAgICAgICBzLndfbWFzayA9IHMud19zaXplIC0gMTsKICAgICAgICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNzsKICAgICAgICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7CiAgICAgICAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7CiAgICAgICAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBNSU5fTUFUQ0gpOwogICAgICAgIHMud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUgKiAyKTsKICAgICAgICBzLmhlYWQgPSBuZXcgdXRpbHMuQnVmMTYocy5oYXNoX3NpemUpOwogICAgICAgIHMucHJldiA9IG5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSk7CiAgICAgICAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgbWVtTGV2ZWwgKyA2OwogICAgICAgIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0OwogICAgICAgIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpOwogICAgICAgIHMuZF9idWYgPSAxICogcy5saXRfYnVmc2l6ZTsKICAgICAgICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7CiAgICAgICAgcy5sZXZlbCA9IGxldmVsOwogICAgICAgIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTsKICAgICAgICBzLm1ldGhvZCA9IG1ldGhvZDsKICAgICAgICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7CiAgICAgICAgcmV0dXJuIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHsKICAgICAgICB2YXIgb2xkX2ZsdXNoLCBzOwogICAgICAgIHZhciBiZWcsIHZhbDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkgewogICAgICAgICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICghc3RybS5vdXRwdXQgfHwgIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCB8fCBzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBzdHJtLmF2YWlsX291dCA9PT0gMCA/IFpfQlVGX0VSUk9SIDogWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzLnN0cm0gPSBzdHJtOwogICAgICAgIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDsKICAgICAgICBzLmxhc3RfZmx1c2ggPSBmbHVzaDsKICAgICAgICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLndyYXAgPT09IDIpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKICAgICAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKICAgICAgICAgICAgcHV0X2J5dGUocywgOCk7CiAgICAgICAgICAgIGlmICghcy5nemhlYWQpIHsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50ZXh0ID8gMSA6IDApICsgKHMuZ3poZWFkLmhjcmMgPyAyIDogMCkgKyAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICsgKCFzLmd6aGVhZC5uYW1lID8gMCA6IDgpICsgKCFzLmd6aGVhZC5jb21tZW50ID8gMCA6IDE2KSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiA4ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDE2ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAyNTUpOwogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5leHRyYSAmJiBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDI1NSk7CiAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZywgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBFWFRSQV9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IFpfREVGTEFURUQgKyAocy53X2JpdHMgLSA4IDw8IDQpIDw8IDg7CiAgICAgICAgICAgIHZhciBsZXZlbF9mbGFncyA9IC0xOwogICAgICAgICAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsID09PSA2KSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIgfD0gbGV2ZWxfZmxhZ3MgPDwgNjsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVhZGVyICs9IDMxIC0gaGVhZGVyICUgMzE7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7CiAgICAgICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDY1NTM1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJtLmFkbGVyID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhKSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgd2hpbGUgKHMuZ3ppbmRleCA8IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiA2NTUzNSkpIHsKICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAyNTUpOwogICAgICAgICAgICAgIHMuZ3ppbmRleCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkgewogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gTkFNRV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLm5hbWUpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICAgIHZhbCA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQubmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAyNTU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CiAgICAgICAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7CiAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWwgPT09IDApIHsKICAgICAgICAgICAgICBzLmd6aW5kZXggPSAwOwogICAgICAgICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IENPTU1FTlRfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLmd6aGVhZC5jb21tZW50KSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMjIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgICB2YWwgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMjU1OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YWwgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOwogICAgICAgICAgICB9IHdoaWxlICh2YWwgIT09IDApOwogICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsID09PSAwKSB7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gSENSQ19TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMpIHsKICAgICAgICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgKyAyIDw9IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAyNTUpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnBlbmRpbmcgIT09IDApIHsKICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIHJldHVybiBaX09LOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiYgZmx1c2ggIT09IFpfRklOSVNIKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8IGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHZhciBic3RhdGUgPSBzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSA/IGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgOiBzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCk7CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9ET05FKSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gRklOSVNIX1NUQVRFOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJzdGF0ZSA9PT0gQlNfTkVFRF9NT1JFIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQpIHsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19CTE9DS19ET05FKSB7CiAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9QQVJUSUFMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZsdXNoICE9PSBaX0JMT0NLKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZVTExfRkxVU0gpIHsKICAgICAgICAgICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChzLndyYXAgPD0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VORDsKICAgICAgICB9CiAgICAgICAgaWYgKHMud3JhcCA9PT0gMikgewogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDggJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciA+PiAxNiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDI0ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiA4ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gPj4gMTYgJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiAyNCAmIDI1NSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiA2NTUzNSk7CiAgICAgICAgfQogICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgaWYgKHMud3JhcCA+IDApIHsKICAgICAgICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnBlbmRpbmcgIT09IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVFbmQoc3RybSkgewogICAgICAgIHZhciBzdGF0dXM7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzOwogICAgICAgIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiYgc3RhdHVzICE9PSBFWFRSQV9TVEFURSAmJiBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiYgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmIHN0YXR1cyAhPT0gSENSQ19TVEFURSAmJiBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiYgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzdHJtLnN0YXRlID0gbnVsbDsKICAgICAgICByZXR1cm4gc3RhdHVzID09PSBCVVNZX1NUQVRFID8gZXJyKHN0cm0sIFpfREFUQV9FUlJPUikgOiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICAgICAgICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwogICAgICAgIHZhciBzOwogICAgICAgIHZhciBzdHIsIG47CiAgICAgICAgdmFyIHdyYXA7CiAgICAgICAgdmFyIGF2YWlsOwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBpbnB1dDsKICAgICAgICB2YXIgdG1wRGljdDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgd3JhcCA9IHMud3JhcDsKICAgICAgICBpZiAod3JhcCA9PT0gMiB8fCB3cmFwID09PSAxICYmIHMuc3RhdHVzICE9PSBJTklUX1NUQVRFIHx8IHMubG9va2FoZWFkKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmICh3cmFwID09PSAxKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTsKICAgICAgICB9CiAgICAgICAgcy53cmFwID0gMDsKICAgICAgICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkgewogICAgICAgICAgaWYgKHdyYXAgPT09IDApIHsKICAgICAgICAgICAgemVybyhzLmhlYWQpOwogICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHRtcERpY3QgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSk7CiAgICAgICAgICB1dGlscy5hcnJheVNldCh0bXBEaWN0LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoIC0gcy53X3NpemUsIHMud19zaXplLCAwKTsKICAgICAgICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0OwogICAgICAgICAgZGljdExlbmd0aCA9IHMud19zaXplOwogICAgICAgIH0KICAgICAgICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgbmV4dCA9IHN0cm0ubmV4dF9pbjsKICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CiAgICAgICAgc3RybS5uZXh0X2luID0gMDsKICAgICAgICBzdHJtLmlucHV0ID0gZGljdGlvbmFyeTsKICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICB3aGlsZSAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICBzdHIgPSBzLnN0cnN0YXJ0OwogICAgICAgICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpOwogICAgICAgICAgZG8gewogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICAgICAgc3RyKys7CiAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgcy5zdHJzdGFydCA9IHN0cjsKICAgICAgICAgIHMubG9va2FoZWFkID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgIH0KICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0OwogICAgICAgIHMuaW5zZXJ0ID0gcy5sb29rYWhlYWQ7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgc3RybS5pbnB1dCA9IGlucHV0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBhdmFpbDsKICAgICAgICBzLndyYXAgPSB3cmFwOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGV4cG9ydHMuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDsKICAgICAgZXhwb3J0cy5kZWZsYXRlSW5pdDIgPSBkZWZsYXRlSW5pdDI7CiAgICAgIGV4cG9ydHMuZGVmbGF0ZVJlc2V0ID0gZGVmbGF0ZVJlc2V0OwogICAgICBleHBvcnRzLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwOwogICAgICBleHBvcnRzLmRlZmxhdGVTZXRIZWFkZXIgPSBkZWZsYXRlU2V0SGVhZGVyOwogICAgICBleHBvcnRzLmRlZmxhdGUgPSBkZWZsYXRlOwogICAgICBleHBvcnRzLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kOwogICAgICBleHBvcnRzLmRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gZGVmbGF0ZVNldERpY3Rpb25hcnk7CiAgICAgIGV4cG9ydHMuZGVmbGF0ZUluZm8gPSAicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvc3RyaW5ncy5qcwogIHZhciByZXF1aXJlX3N0cmluZ3MgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL3N0cmluZ3MuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgU1RSX0FQUExZX09LID0gdHJ1ZTsKICAgICAgdmFyIFNUUl9BUFBMWV9VSUFfT0sgPSB0cnVlOwogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKTsKICAgICAgfSBjYXRjaCAoX18pIHsKICAgICAgICBTVFJfQVBQTFlfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOwogICAgICB9IGNhdGNoIChfXykgewogICAgICAgIFNUUl9BUFBMWV9VSUFfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB2YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpOwogICAgICBmb3IgKHEgPSAwOyBxIDwgMjU2OyBxKyspIHsKICAgICAgICBfdXRmOGxlbltxXSA9IHEgPj0gMjUyID8gNiA6IHEgPj0gMjQ4ID8gNSA6IHEgPj0gMjQwID8gNCA6IHEgPj0gMjI0ID8gMyA6IHEgPj0gMTkyID8gMiA6IDE7CiAgICAgIH0KICAgICAgdmFyIHE7CiAgICAgIF91dGY4bGVuWzI1NF0gPSBfdXRmOGxlblsyNTRdID0gMTsKICAgICAgZXhwb3J0cy5zdHJpbmcyYnVmID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7CiAgICAgICAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykgewogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICAgIGlmICgoYyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgbV9wb3MgKyAxIDwgc3RyX2xlbikgewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiA2NDUxMikgPT09IDU2MzIwKSB7CiAgICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgLSA1NTI5NiA8PCAxMCkgKyAoYzIgLSA1NjMyMCk7CiAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnVmX2xlbiArPSBjIDwgMTI4ID8gMSA6IGMgPCAyMDQ4ID8gMiA6IGMgPCA2NTUzNiA/IDMgOiA0OwogICAgICAgIH0KICAgICAgICBidWYgPSBuZXcgdXRpbHMuQnVmOChidWZfbGVuKTsKICAgICAgICBmb3IgKGkgPSAwLCBtX3BvcyA9IDA7IGkgPCBidWZfbGVuOyBtX3BvcysrKSB7CiAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpOwogICAgICAgICAgaWYgKChjICYgNjQ1MTIpID09PSA1NTI5NiAmJiBtX3BvcyArIDEgPCBzdHJfbGVuKSB7CiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MgKyAxKTsKICAgICAgICAgICAgaWYgKChjMiAmIDY0NTEyKSA9PT0gNTYzMjApIHsKICAgICAgICAgICAgICBjID0gNjU1MzYgKyAoYyAtIDU1Mjk2IDw8IDEwKSArIChjMiAtIDU2MzIwKTsKICAgICAgICAgICAgICBtX3BvcysrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDEyOCkgewogICAgICAgICAgICBidWZbaSsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTkyIHwgYyA+Pj4gNjsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCA2NTUzNikgewogICAgICAgICAgICBidWZbaSsrXSA9IDIyNCB8IGMgPj4+IDEyOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDYgJiA2MzsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWZbaSsrXSA9IDI0MCB8IGMgPj4+IDE4OwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDEyICYgNjM7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyA+Pj4gNiAmIDYzOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgJiA2MzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYnVmMmJpbnN0cmluZyhidWYsIGxlbikgewogICAgICAgIGlmIChsZW4gPCA2NTUzNCkgewogICAgICAgICAgaWYgKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LIHx8ICFidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX09LKSB7CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0aWxzLnNocmlua0J1ZihidWYsIGxlbikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBleHBvcnRzLmJ1ZjJiaW5zdHJpbmcgPSBmdW5jdGlvbihidWYpIHsKICAgICAgICByZXR1cm4gYnVmMmJpbnN0cmluZyhidWYsIGJ1Zi5sZW5ndGgpOwogICAgICB9OwogICAgICBleHBvcnRzLmJpbnN0cmluZzJidWYgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICB2YXIgYnVmID0gbmV3IHV0aWxzLkJ1Zjgoc3RyLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgYnVmW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIGV4cG9ydHMuYnVmMnN0cmluZyA9IGZ1bmN0aW9uKGJ1ZiwgbWF4KSB7CiAgICAgICAgdmFyIGksIG91dCwgYywgY19sZW47CiAgICAgICAgdmFyIGxlbiA9IG1heCB8fCBidWYubGVuZ3RoOwogICAgICAgIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTsKICAgICAgICBmb3IgKG91dCA9IDAsIGkgPSAwOyBpIDwgbGVuOyApIHsKICAgICAgICAgIGMgPSBidWZbaSsrXTsKICAgICAgICAgIGlmIChjIDwgMTI4KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY19sZW4gPSBfdXRmOGxlbltjXTsKICAgICAgICAgIGlmIChjX2xlbiA+IDQpIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNjU1MzM7CiAgICAgICAgICAgIGkgKz0gY19sZW4gLSAxOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGMgJj0gY19sZW4gPT09IDIgPyAzMSA6IGNfbGVuID09PSAzID8gMTUgOiA3OwogICAgICAgICAgd2hpbGUgKGNfbGVuID4gMSAmJiBpIDwgbGVuKSB7CiAgICAgICAgICAgIGMgPSBjIDw8IDYgfCBidWZbaSsrXSAmIDYzOwogICAgICAgICAgICBjX2xlbi0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNfbGVuID4gMSkgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA2NTUzMzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDY1NTM2KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjIC09IDY1NTM2OwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NTI5NiB8IGMgPj4gMTAgJiAxMDIzOwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NjMyMCB8IGMgJiAxMDIzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTsKICAgICAgfTsKICAgICAgZXhwb3J0cy51dGY4Ym9yZGVyID0gZnVuY3Rpb24oYnVmLCBtYXgpIHsKICAgICAgICB2YXIgcG9zOwogICAgICAgIG1heCA9IG1heCB8fCBidWYubGVuZ3RoOwogICAgICAgIGlmIChtYXggPiBidWYubGVuZ3RoKSB7CiAgICAgICAgICBtYXggPSBidWYubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBwb3MgPSBtYXggLSAxOwogICAgICAgIHdoaWxlIChwb3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgIHBvcy0tOwogICAgICAgIH0KICAgICAgICBpZiAocG9zIDwgMCkgewogICAgICAgICAgcmV0dXJuIG1heDsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcyA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG1heDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvcyArIF91dGY4bGVuW2J1Zltwb3NdXSA+IG1heCA/IHBvcyA6IG1heDsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3pzdHJlYW0uanMKICB2YXIgcmVxdWlyZV96c3RyZWFtID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3pzdHJlYW0uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZnVuY3Rpb24gWlN0cmVhbSgpIHsKICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfaW4gPSAwOwogICAgICAgIHRoaXMuYXZhaWxfaW4gPSAwOwogICAgICAgIHRoaXMudG90YWxfaW4gPSAwOwogICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfb3V0ID0gMDsKICAgICAgICB0aGlzLmF2YWlsX291dCA9IDA7CiAgICAgICAgdGhpcy50b3RhbF9vdXQgPSAwOwogICAgICAgIHRoaXMubXNnID0gIiI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5kYXRhX3R5cGUgPSAyOwogICAgICAgIHRoaXMuYWRsZXIgPSAwOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9kZWZsYXRlLmpzCiAgdmFyIHJlcXVpcmVfZGVmbGF0ZTIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL2RlZmxhdGUuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB6bGliX2RlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUoKTsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBzdHJpbmdzID0gcmVxdWlyZV9zdHJpbmdzKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgWlN0cmVhbSA9IHJlcXVpcmVfenN0cmVhbSgpOwogICAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICB2YXIgWl9OT19GTFVTSCA9IDA7CiAgICAgIHZhciBaX0ZJTklTSCA9IDQ7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX1NZTkNfRkxVU0gyID0gMjsKICAgICAgdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwogICAgICB2YXIgWl9ERUZBVUxUX1NUUkFURUdZID0gMDsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICBmdW5jdGlvbiBEZWZsYXRlKG9wdGlvbnMpIHsKICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpCiAgICAgICAgICByZXR1cm4gbmV3IERlZmxhdGUob3B0aW9ucyk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgICAgICAgIGxldmVsOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCiAgICAgICAgICBtZXRob2Q6IFpfREVGTEFURUQsCiAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgICAgICAgd2luZG93Qml0czogMTUsCiAgICAgICAgICBtZW1MZXZlbDogOCwKICAgICAgICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksCiAgICAgICAgICB0bzogIiIKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTsKICAgICAgICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwogICAgICAgIGlmIChvcHQucmF3ICYmIG9wdC53aW5kb3dCaXRzID4gMCkgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmIChvcHQuZ3ppcCAmJiBvcHQud2luZG93Qml0cyA+IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNikgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgKz0gMTY7CiAgICAgICAgfQogICAgICAgIHRoaXMuZXJyID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgICAgICAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLCBvcHQubGV2ZWwsIG9wdC5tZXRob2QsIG9wdC53aW5kb3dCaXRzLCBvcHQubWVtTGV2ZWwsIG9wdC5zdHJhdGVneSk7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdC5oZWFkZXIpIHsKICAgICAgICAgIHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSwgb3B0LmhlYWRlcik7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkgewogICAgICAgICAgdmFyIGRpY3Q7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBkaWN0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgICAgZGljdCA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3QpOwogICAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogICAgICAgIHZhciBzdHJtID0gdGhpcy5zdHJtOwogICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogICAgICAgIHZhciBzdGF0dXMsIF9tb2RlOwogICAgICAgIGlmICh0aGlzLmVuZGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9tb2RlID0gbW9kZSA9PT0gfn5tb2RlID8gbW9kZSA6IG1vZGUgPT09IHRydWUgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihkYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiA9IDA7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHN0cm0sIF9tb2RlKTsKICAgICAgICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBaX0ZJTklTSCB8fCBfbW9kZSA9PT0gWl9TWU5DX0ZMVVNIMikpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IFpfU1RSRUFNX0VORCk7CiAgICAgICAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkgewogICAgICAgICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBaX1NZTkNfRkxVU0gyKSB7CiAgICAgICAgICB0aGlzLm9uRW5kKFpfT0spOwogICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogICAgICAgIGlmIChzdGF0dXMgPT09IFpfT0spIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbigiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuZXJyID0gc3RhdHVzOwogICAgICAgIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpOwogICAgICAgIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwogICAgICAgIGlmIChkZWZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IGRlZmxhdG9yLm1zZyB8fCBtc2dbZGVmbGF0b3IuZXJyXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5yYXcgPSB0cnVlOwogICAgICAgIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBnemlwKGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5nemlwID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZXhwb3J0cy5EZWZsYXRlID0gRGVmbGF0ZTsKICAgICAgZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTsKICAgICAgZXhwb3J0cy5kZWZsYXRlUmF3ID0gZGVmbGF0ZVJhdzsKICAgICAgZXhwb3J0cy5nemlwID0gZ3ppcDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmZhc3QuanMKICB2YXIgcmVxdWlyZV9pbmZmYXN0ID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmZhc3QuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIEJBRCA9IDMwOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkgewogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICB2YXIgX2luOwogICAgICAgIHZhciBsYXN0OwogICAgICAgIHZhciBfb3V0OwogICAgICAgIHZhciBiZWc7CiAgICAgICAgdmFyIGVuZDsKICAgICAgICB2YXIgZG1heDsKICAgICAgICB2YXIgd3NpemU7CiAgICAgICAgdmFyIHdoYXZlOwogICAgICAgIHZhciB3bmV4dDsKICAgICAgICB2YXIgc193aW5kb3c7CiAgICAgICAgdmFyIGhvbGQ7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIGxjb2RlOwogICAgICAgIHZhciBkY29kZTsKICAgICAgICB2YXIgbG1hc2s7CiAgICAgICAgdmFyIGRtYXNrOwogICAgICAgIHZhciBoZXJlOwogICAgICAgIHZhciBvcDsKICAgICAgICB2YXIgbGVuOwogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBmcm9tOwogICAgICAgIHZhciBmcm9tX3NvdXJjZTsKICAgICAgICB2YXIgaW5wdXQsIG91dHB1dDsKICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgX2luID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBsYXN0ID0gX2luICsgKHN0cm0uYXZhaWxfaW4gLSA1KTsKICAgICAgICBfb3V0ID0gc3RybS5uZXh0X291dDsKICAgICAgICBvdXRwdXQgPSBzdHJtLm91dHB1dDsKICAgICAgICBiZWcgPSBfb3V0IC0gKHN0YXJ0IC0gc3RybS5hdmFpbF9vdXQpOwogICAgICAgIGVuZCA9IF9vdXQgKyAoc3RybS5hdmFpbF9vdXQgLSAyNTcpOwogICAgICAgIGRtYXggPSBzdGF0ZS5kbWF4OwogICAgICAgIHdzaXplID0gc3RhdGUud3NpemU7CiAgICAgICAgd2hhdmUgPSBzdGF0ZS53aGF2ZTsKICAgICAgICB3bmV4dCA9IHN0YXRlLnduZXh0OwogICAgICAgIHNfd2luZG93ID0gc3RhdGUud2luZG93OwogICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzOwogICAgICAgIGxjb2RlID0gc3RhdGUubGVuY29kZTsKICAgICAgICBkY29kZSA9IHN0YXRlLmRpc3Rjb2RlOwogICAgICAgIGxtYXNrID0gKDEgPDwgc3RhdGUubGVuYml0cykgLSAxOwogICAgICAgIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTsKICAgICAgICB0b3A6CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChiaXRzIDwgMTUpIHsKICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZXJlID0gbGNvZGVbaG9sZCAmIGxtYXNrXTsKICAgICAgICAgICAgZG9sZW46CiAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICBpZiAob3AgPT09IDApIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wICYgMTYpIHsKICAgICAgICAgICAgICAgICAgbGVuID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBvcCAmPSAxNTsKICAgICAgICAgICAgICAgICAgaWYgKG9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbGVuICs9IGhvbGQgJiAoMSA8PCBvcCkgLSAxOwogICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgMTUpIHsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoZXJlID0gZGNvZGVbaG9sZCAmIGRtYXNrXTsKICAgICAgICAgICAgICAgICAgZG9kaXN0OgogICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAyNDsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgICAgaWYgKG9wICYgMTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICAgICAgb3AgJj0gMTU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBkaXN0ICs9IGhvbGQgJiAoMSA8PCBvcCkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA+IGRtYXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICBvcCA9IF9vdXQgLSBiZWc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IGRpc3QgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPiB3aGF2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNhbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gc193aW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHduZXh0ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHduZXh0IDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBoZXJlID0gZGNvZGVbKGhlcmUgJiA2NTUzNSkgKyAoaG9sZCAmICgxIDw8IG9wKSAtIDEpXTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgZG9kaXN0OwogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgNjU1MzUpICsgKGhvbGQgJiAoMSA8PCBvcCkgLSAxKV07CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGRvbGVuOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCAmIDMyKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9IHdoaWxlIChfaW4gPCBsYXN0ICYmIF9vdXQgPCBlbmQpOwogICAgICAgIGxlbiA9IGJpdHMgPj4gMzsKICAgICAgICBfaW4gLT0gbGVuOwogICAgICAgIGJpdHMgLT0gbGVuIDw8IDM7CiAgICAgICAgaG9sZCAmPSAoMSA8PCBiaXRzKSAtIDE7CiAgICAgICAgc3RybS5uZXh0X2luID0gX2luOwogICAgICAgIHN0cm0ubmV4dF9vdXQgPSBfb3V0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBfaW4gPCBsYXN0ID8gNSArIChsYXN0IC0gX2luKSA6IDUgLSAoX2luIC0gbGFzdCk7CiAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBfb3V0IDwgZW5kID8gMjU3ICsgKGVuZCAtIF9vdXQpIDogMjU3IC0gKF9vdXQgLSBlbmQpOwogICAgICAgIHN0YXRlLmhvbGQgPSBob2xkOwogICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgIHJldHVybjsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzCiAgdmFyIHJlcXVpcmVfaW5mdHJlZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mdHJlZXMuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBNQVhCSVRTID0gMTU7CiAgICAgIHZhciBFTk9VR0hfTEVOUyA9IDg1MjsKICAgICAgdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKICAgICAgdmFyIENPREVTID0gMDsKICAgICAgdmFyIExFTlMgPSAxOwogICAgICB2YXIgRElTVFMgPSAyOwogICAgICB2YXIgbGJhc2UgPSBbCiAgICAgICAgMywKICAgICAgICA0LAogICAgICAgIDUsCiAgICAgICAgNiwKICAgICAgICA3LAogICAgICAgIDgsCiAgICAgICAgOSwKICAgICAgICAxMCwKICAgICAgICAxMSwKICAgICAgICAxMywKICAgICAgICAxNSwKICAgICAgICAxNywKICAgICAgICAxOSwKICAgICAgICAyMywKICAgICAgICAyNywKICAgICAgICAzMSwKICAgICAgICAzNSwKICAgICAgICA0MywKICAgICAgICA1MSwKICAgICAgICA1OSwKICAgICAgICA2NywKICAgICAgICA4MywKICAgICAgICA5OSwKICAgICAgICAxMTUsCiAgICAgICAgMTMxLAogICAgICAgIDE2MywKICAgICAgICAxOTUsCiAgICAgICAgMjI3LAogICAgICAgIDI1OCwKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGxleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMTYsCiAgICAgICAgNzIsCiAgICAgICAgNzgKICAgICAgXTsKICAgICAgdmFyIGRiYXNlID0gWwogICAgICAgIDEsCiAgICAgICAgMiwKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA3LAogICAgICAgIDksCiAgICAgICAgMTMsCiAgICAgICAgMTcsCiAgICAgICAgMjUsCiAgICAgICAgMzMsCiAgICAgICAgNDksCiAgICAgICAgNjUsCiAgICAgICAgOTcsCiAgICAgICAgMTI5LAogICAgICAgIDE5MywKICAgICAgICAyNTcsCiAgICAgICAgMzg1LAogICAgICAgIDUxMywKICAgICAgICA3NjksCiAgICAgICAgMTAyNSwKICAgICAgICAxNTM3LAogICAgICAgIDIwNDksCiAgICAgICAgMzA3MywKICAgICAgICA0MDk3LAogICAgICAgIDYxNDUsCiAgICAgICAgODE5MywKICAgICAgICAxMjI4OSwKICAgICAgICAxNjM4NSwKICAgICAgICAyNDU3NywKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGRleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjIsCiAgICAgICAgMjIsCiAgICAgICAgMjMsCiAgICAgICAgMjMsCiAgICAgICAgMjQsCiAgICAgICAgMjQsCiAgICAgICAgMjUsCiAgICAgICAgMjUsCiAgICAgICAgMjYsCiAgICAgICAgMjYsCiAgICAgICAgMjcsCiAgICAgICAgMjcsCiAgICAgICAgMjgsCiAgICAgICAgMjgsCiAgICAgICAgMjksCiAgICAgICAgMjksCiAgICAgICAgNjQsCiAgICAgICAgNjQKICAgICAgXTsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpIHsKICAgICAgICB2YXIgYml0cyA9IG9wdHMuYml0czsKICAgICAgICB2YXIgbGVuID0gMDsKICAgICAgICB2YXIgc3ltID0gMDsKICAgICAgICB2YXIgbWluID0gMCwgbWF4ID0gMDsKICAgICAgICB2YXIgcm9vdCA9IDA7CiAgICAgICAgdmFyIGN1cnIgPSAwOwogICAgICAgIHZhciBkcm9wID0gMDsKICAgICAgICB2YXIgbGVmdCA9IDA7CiAgICAgICAgdmFyIHVzZWQgPSAwOwogICAgICAgIHZhciBodWZmID0gMDsKICAgICAgICB2YXIgaW5jcjsKICAgICAgICB2YXIgZmlsbDsKICAgICAgICB2YXIgbG93OwogICAgICAgIHZhciBtYXNrOwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBiYXNlID0gbnVsbDsKICAgICAgICB2YXIgYmFzZV9pbmRleCA9IDA7CiAgICAgICAgdmFyIGVuZDsKICAgICAgICB2YXIgY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOwogICAgICAgIHZhciBvZmZzID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsKICAgICAgICB2YXIgZXh0cmEgPSBudWxsOwogICAgICAgIHZhciBleHRyYV9pbmRleCA9IDA7CiAgICAgICAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7CiAgICAgICAgZm9yIChsZW4gPSAwOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIGNvdW50W2xlbl0gPSAwOwogICAgICAgIH0KICAgICAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykgewogICAgICAgICAgY291bnRbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rKzsKICAgICAgICB9CiAgICAgICAgcm9vdCA9IGJpdHM7CiAgICAgICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHsKICAgICAgICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocm9vdCA+IG1heCkgewogICAgICAgICAgcm9vdCA9IG1heDsKICAgICAgICB9CiAgICAgICAgaWYgKG1heCA9PT0gMCkgewogICAgICAgICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgICAgb3B0cy5iaXRzID0gMTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBmb3IgKG1pbiA9IDE7IG1pbiA8IG1heDsgbWluKyspIHsKICAgICAgICAgIGlmIChjb3VudFttaW5dICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocm9vdCA8IG1pbikgewogICAgICAgICAgcm9vdCA9IG1pbjsKICAgICAgICB9CiAgICAgICAgbGVmdCA9IDE7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIGxlZnQgPDw9IDE7CiAgICAgICAgICBsZWZ0IC09IGNvdW50W2xlbl07CiAgICAgICAgICBpZiAobGVmdCA8IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgb2Zmc1sxXSA9IDA7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykgewogICAgICAgICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07CiAgICAgICAgfQogICAgICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICAgICAgICBpZiAobGVuc1tsZW5zX2luZGV4ICsgc3ltXSAhPT0gMCkgewogICAgICAgICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSBDT0RFUykgewogICAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsKICAgICAgICAgIGVuZCA9IDE5OwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykgewogICAgICAgICAgYmFzZSA9IGxiYXNlOwogICAgICAgICAgYmFzZV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBleHRyYSA9IGxleHQ7CiAgICAgICAgICBleHRyYV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBlbmQgPSAyNTY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJhc2UgPSBkYmFzZTsKICAgICAgICAgIGV4dHJhID0gZGV4dDsKICAgICAgICAgIGVuZCA9IC0xOwogICAgICAgIH0KICAgICAgICBodWZmID0gMDsKICAgICAgICBzeW0gPSAwOwogICAgICAgIGxlbiA9IG1pbjsKICAgICAgICBuZXh0ID0gdGFibGVfaW5kZXg7CiAgICAgICAgY3VyciA9IHJvb3Q7CiAgICAgICAgZHJvcCA9IDA7CiAgICAgICAgbG93ID0gLTE7CiAgICAgICAgdXNlZCA9IDEgPDwgcm9vdDsKICAgICAgICBtYXNrID0gdXNlZCAtIDE7CiAgICAgICAgaWYgKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TIHx8IHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpIHsKICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7CiAgICAgICAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAwOwogICAgICAgICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTsKICAgICAgICAgIH0gZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCArIHdvcmtbc3ltXV07CiAgICAgICAgICAgIGhlcmVfdmFsID0gYmFzZVtiYXNlX2luZGV4ICsgd29ya1tzeW1dXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAzMiArIDY0OwogICAgICAgICAgICBoZXJlX3ZhbCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSBkcm9wOwogICAgICAgICAgZmlsbCA9IDEgPDwgY3VycjsKICAgICAgICAgIG1pbiA9IGZpbGw7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGZpbGwgLT0gaW5jcjsKICAgICAgICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlX2JpdHMgPDwgMjQgfCBoZXJlX29wIDw8IDE2IHwgaGVyZV92YWwgfCAwOwogICAgICAgICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSAxOwogICAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7CiAgICAgICAgICAgIGluY3IgPj49IDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5jciAhPT0gMCkgewogICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwogICAgICAgICAgICBodWZmICs9IGluY3I7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBodWZmID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHN5bSsrOwogICAgICAgICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkgewogICAgICAgICAgICBpZiAobGVuID09PSBtYXgpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZW4gPSBsZW5zW2xlbnNfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxlbiA+IHJvb3QgJiYgKGh1ZmYgJiBtYXNrKSAhPT0gbG93KSB7CiAgICAgICAgICAgIGlmIChkcm9wID09PSAwKSB7CiAgICAgICAgICAgICAgZHJvcCA9IHJvb3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dCArPSBtaW47CiAgICAgICAgICAgIGN1cnIgPSBsZW4gLSBkcm9wOwogICAgICAgICAgICBsZWZ0ID0gMSA8PCBjdXJyOwogICAgICAgICAgICB3aGlsZSAoY3VyciArIGRyb3AgPCBtYXgpIHsKICAgICAgICAgICAgICBsZWZ0IC09IGNvdW50W2N1cnIgKyBkcm9wXTsKICAgICAgICAgICAgICBpZiAobGVmdCA8PSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY3VycisrOwogICAgICAgICAgICAgIGxlZnQgPDw9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXNlZCArPSAxIDw8IGN1cnI7CiAgICAgICAgICAgIGlmICh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUyB8fCB0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG93ID0gaHVmZiAmIG1hc2s7CiAgICAgICAgICAgIHRhYmxlW2xvd10gPSByb290IDw8IDI0IHwgY3VyciA8PCAxNiB8IG5leHQgLSB0YWJsZV9pbmRleCB8IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChodWZmICE9PSAwKSB7CiAgICAgICAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSBsZW4gLSBkcm9wIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgIH0KICAgICAgICBvcHRzLmJpdHMgPSByb290OwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMjIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBpbmZsYXRlX2Zhc3QgPSByZXF1aXJlX2luZmZhc3QoKTsKICAgICAgdmFyIGluZmxhdGVfdGFibGUgPSByZXF1aXJlX2luZnRyZWVzKCk7CiAgICAgIHZhciBDT0RFUyA9IDA7CiAgICAgIHZhciBMRU5TID0gMTsKICAgICAgdmFyIERJU1RTID0gMjsKICAgICAgdmFyIFpfRklOSVNIID0gNDsKICAgICAgdmFyIFpfQkxPQ0sgPSA1OwogICAgICB2YXIgWl9UUkVFUyA9IDY7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX05FRURfRElDVCA9IDI7CiAgICAgIHZhciBaX1NUUkVBTV9FUlJPUiA9IC0yOwogICAgICB2YXIgWl9EQVRBX0VSUk9SID0gLTM7CiAgICAgIHZhciBaX01FTV9FUlJPUiA9IC00OwogICAgICB2YXIgWl9CVUZfRVJST1IgPSAtNTsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICB2YXIgSEVBRCA9IDE7CiAgICAgIHZhciBGTEFHUyA9IDI7CiAgICAgIHZhciBUSU1FID0gMzsKICAgICAgdmFyIE9TID0gNDsKICAgICAgdmFyIEVYTEVOID0gNTsKICAgICAgdmFyIEVYVFJBID0gNjsKICAgICAgdmFyIE5BTUUgPSA3OwogICAgICB2YXIgQ09NTUVOVCA9IDg7CiAgICAgIHZhciBIQ1JDID0gOTsKICAgICAgdmFyIERJQ1RJRCA9IDEwOwogICAgICB2YXIgRElDVCA9IDExOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICB2YXIgVFlQRURPID0gMTM7CiAgICAgIHZhciBTVE9SRUQgPSAxNDsKICAgICAgdmFyIENPUFlfID0gMTU7CiAgICAgIHZhciBDT1BZID0gMTY7CiAgICAgIHZhciBUQUJMRSA9IDE3OwogICAgICB2YXIgTEVOTEVOUyA9IDE4OwogICAgICB2YXIgQ09ERUxFTlMgPSAxOTsKICAgICAgdmFyIExFTl8gPSAyMDsKICAgICAgdmFyIExFTiA9IDIxOwogICAgICB2YXIgTEVORVhUID0gMjI7CiAgICAgIHZhciBESVNUID0gMjM7CiAgICAgIHZhciBESVNURVhUID0gMjQ7CiAgICAgIHZhciBNQVRDSCA9IDI1OwogICAgICB2YXIgTElUID0gMjY7CiAgICAgIHZhciBDSEVDSyA9IDI3OwogICAgICB2YXIgTEVOR1RIID0gMjg7CiAgICAgIHZhciBET05FID0gMjk7CiAgICAgIHZhciBCQUQgPSAzMDsKICAgICAgdmFyIE1FTSA9IDMxOwogICAgICB2YXIgU1lOQyA9IDMyOwogICAgICB2YXIgRU5PVUdIX0xFTlMgPSA4NTI7CiAgICAgIHZhciBFTk9VR0hfRElTVFMgPSA1OTI7CiAgICAgIHZhciBNQVhfV0JJVFMgPSAxNTsKICAgICAgdmFyIERFRl9XQklUUyA9IE1BWF9XQklUUzsKICAgICAgZnVuY3Rpb24genN3YXAzMihxKSB7CiAgICAgICAgcmV0dXJuIChxID4+PiAyNCAmIDI1NSkgKyAocSA+Pj4gOCAmIDY1MjgwKSArICgocSAmIDY1MjgwKSA8PCA4KSArICgocSAmIDI1NSkgPDwgMjQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHsKICAgICAgICB0aGlzLm1vZGUgPSAwOwogICAgICAgIHRoaXMubGFzdCA9IGZhbHNlOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5oYXZlZGljdCA9IGZhbHNlOwogICAgICAgIHRoaXMuZmxhZ3MgPSAwOwogICAgICAgIHRoaXMuZG1heCA9IDA7CiAgICAgICAgdGhpcy5jaGVjayA9IDA7CiAgICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICAgICAgdGhpcy5oZWFkID0gbnVsbDsKICAgICAgICB0aGlzLndiaXRzID0gMDsKICAgICAgICB0aGlzLndzaXplID0gMDsKICAgICAgICB0aGlzLndoYXZlID0gMDsKICAgICAgICB0aGlzLnduZXh0ID0gMDsKICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICAgICAgdGhpcy5ob2xkID0gMDsKICAgICAgICB0aGlzLmJpdHMgPSAwOwogICAgICAgIHRoaXMubGVuZ3RoID0gMDsKICAgICAgICB0aGlzLm9mZnNldCA9IDA7CiAgICAgICAgdGhpcy5leHRyYSA9IDA7CiAgICAgICAgdGhpcy5sZW5jb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3Rjb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmxlbmJpdHMgPSAwOwogICAgICAgIHRoaXMuZGlzdGJpdHMgPSAwOwogICAgICAgIHRoaXMubmNvZGUgPSAwOwogICAgICAgIHRoaXMubmxlbiA9IDA7CiAgICAgICAgdGhpcy5uZGlzdCA9IDA7CiAgICAgICAgdGhpcy5oYXZlID0gMDsKICAgICAgICB0aGlzLm5leHQgPSBudWxsOwogICAgICAgIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOwogICAgICAgIHRoaXMud29yayA9IG5ldyB1dGlscy5CdWYxNigyODgpOwogICAgICAgIHRoaXMubGVuZHluID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3RkeW4gPSBudWxsOwogICAgICAgIHRoaXMuc2FuZSA9IDA7CiAgICAgICAgdGhpcy5iYWNrID0gMDsKICAgICAgICB0aGlzLndhcyA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gc3RhdGUudG90YWwgPSAwOwogICAgICAgIHN0cm0ubXNnID0gIiI7CiAgICAgICAgaWYgKHN0YXRlLndyYXApIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS53cmFwICYgMTsKICAgICAgICB9CiAgICAgICAgc3RhdGUubW9kZSA9IEhFQUQ7CiAgICAgICAgc3RhdGUubGFzdCA9IDA7CiAgICAgICAgc3RhdGUuaGF2ZWRpY3QgPSAwOwogICAgICAgIHN0YXRlLmRtYXggPSAzMjc2ODsKICAgICAgICBzdGF0ZS5oZWFkID0gbnVsbDsKICAgICAgICBzdGF0ZS5ob2xkID0gMDsKICAgICAgICBzdGF0ZS5iaXRzID0gMDsKICAgICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTsKICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0RJU1RTKTsKICAgICAgICBzdGF0ZS5zYW5lID0gMTsKICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBzdGF0ZS53c2l6ZSA9IDA7CiAgICAgICAgc3RhdGUud2hhdmUgPSAwOwogICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHsKICAgICAgICB2YXIgd3JhcDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgICAgICAgIHdyYXAgPSAwOwogICAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOwogICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkgewogICAgICAgICAgICB3aW5kb3dCaXRzICY9IDE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7CiAgICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdGF0ZS53cmFwID0gd3JhcDsKICAgICAgICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7CiAgICAgICAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgewogICAgICAgIHZhciByZXQ7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IG5ldyBJbmZsYXRlU3RhdGUoKTsKICAgICAgICBzdHJtLnN0YXRlID0gc3RhdGU7CiAgICAgICAgc3RhdGUud2luZG93ID0gbnVsbDsKICAgICAgICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOwogICAgICAgIGlmIChyZXQgIT09IFpfT0spIHsKICAgICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHsKICAgICAgICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7CiAgICAgIH0KICAgICAgdmFyIHZpcmdpbiA9IHRydWU7CiAgICAgIHZhciBsZW5maXg7CiAgICAgIHZhciBkaXN0Zml4OwogICAgICBmdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkgewogICAgICAgIGlmICh2aXJnaW4pIHsKICAgICAgICAgIHZhciBzeW07CiAgICAgICAgICBsZW5maXggPSBuZXcgdXRpbHMuQnVmMzIoNTEyKTsKICAgICAgICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAxNDQpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN5bSA8IDI1NikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gNzsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzeW0gPCAyODgpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA5IH0pOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAzMikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDU7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgZGlzdGZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA1IH0pOwogICAgICAgICAgdmlyZ2luID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7CiAgICAgICAgc3RhdGUubGVuYml0cyA9IDk7CiAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBkaXN0Zml4OwogICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53aW5kb3cgPT09IG51bGwpIHsKICAgICAgICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0czsKICAgICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICAgIHN0YXRlLndoYXZlID0gMDsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHN0YXRlLndzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHsKICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBzdGF0ZS53c2l6ZSwgc3RhdGUud3NpemUsIDApOwogICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7CiAgICAgICAgICBpZiAoZGlzdCA+IGNvcHkpIHsKICAgICAgICAgICAgZGlzdCA9IGNvcHk7CiAgICAgICAgICB9CiAgICAgICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgZGlzdCwgc3RhdGUud25leHQpOwogICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICAgaWYgKGNvcHkpIHsKICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIGNvcHksIGNvcHksIDApOwogICAgICAgICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7CiAgICAgICAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS53bmV4dCArPSBkaXN0OwogICAgICAgICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGF0ZS53aGF2ZSA8IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud2hhdmUgKz0gZGlzdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBpbnB1dCwgb3V0cHV0OwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBwdXQ7CiAgICAgICAgdmFyIGhhdmUsIGxlZnQ7CiAgICAgICAgdmFyIGhvbGQ7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIF9pbiwgX291dDsKICAgICAgICB2YXIgY29weTsKICAgICAgICB2YXIgZnJvbTsKICAgICAgICB2YXIgZnJvbV9zb3VyY2U7CiAgICAgICAgdmFyIGhlcmUgPSAwOwogICAgICAgIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOwogICAgICAgIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgaGJ1ZiA9IG5ldyB1dGlscy5CdWY4KDQpOwogICAgICAgIHZhciBvcHRzOwogICAgICAgIHZhciBuOwogICAgICAgIHZhciBvcmRlciA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgIXN0cm0ub3V0cHV0IHx8ICFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPOwogICAgICAgIH0KICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgIGxlZnQgPSBzdHJtLmF2YWlsX291dDsKICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBoYXZlID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICBfaW4gPSBoYXZlOwogICAgICAgIF9vdXQgPSBsZWZ0OwogICAgICAgIHJldCA9IFpfT0s7CiAgICAgICAgaW5mX2xlYXZlOgogICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUubW9kZSkgewogICAgICAgICAgICAgIGNhc2UgSEVBRDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud3JhcCAmIDIgJiYgaG9sZCA9PT0gMzU2MTUpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSAwOwogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTsKICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRkxBR1M7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MgPSAwOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIShzdGF0ZS53cmFwICYgMSkgfHwgKCgoaG9sZCAmIDI1NSkgPDwgOCkgKyAoaG9sZCA+PiA4KSkgJSAzMSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhvbGQgJiAxNSkgIT09IFpfREVGTEFURUQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA0OwogICAgICAgICAgICAgICAgYml0cyAtPSA0OwogICAgICAgICAgICAgICAgbGVuID0gKGhvbGQgJiAxNSkgKyA4OwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLndiaXRzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLndiaXRzID0gbGVuOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPiBzdGF0ZS53Yml0cykgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIHdpbmRvdyBzaXplIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5kbWF4ID0gMSA8PCBsZW47CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGhvbGQgJiA1MTIgPyBESUNUSUQgOiBUWVBFOwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgRkxBR1M6CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzID0gaG9sZDsKICAgICAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAyNTUpICE9PSBaX0RFRkxBVEVEKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1NzM0NCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQudGV4dCA9IGhvbGQgPj4gOCAmIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhidWZbMV0gPSBob2xkID4+PiA4ICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRJTUU7CiAgICAgICAgICAgICAgY2FzZSBUSU1FOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnRpbWUgPSBob2xkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsyXSA9IGhvbGQgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzNdID0gaG9sZCA+Pj4gMjQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIyKHN0YXRlLmNoZWNrLCBoYnVmLCA0LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gT1M7CiAgICAgICAgICAgICAgY2FzZSBPUzoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm9zID0gaG9sZCA+PiA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMjIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBFWExFTjsKICAgICAgICAgICAgICBjYXNlIEVYTEVOOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMTAyNCkgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkOwogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbGVuID0gaG9sZDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEVYVFJBOwogICAgICAgICAgICAgIGNhc2UgRVhUUkE6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAxMDI0KSB7CiAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBuZXcgQXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUuaGVhZC5leHRyYSwgaW5wdXQsIG5leHQsIGNvcHksIGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMjIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE5BTUU7CiAgICAgICAgICAgICAgY2FzZSBOQU1FOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMjA0OCkgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJiBzdGF0ZS5sZW5ndGggPCA2NTUzNikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT01NRU5UOwogICAgICAgICAgICAgIGNhc2UgQ09NTUVOVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDQwOTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29weSA9IDA7CiAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiYgc3RhdGUubGVuZ3RoIDwgNjU1MzYpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpOwogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDOwogICAgICAgICAgICAgIGNhc2UgSENSQzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaG9sZCAhPT0gKHN0YXRlLmNoZWNrICYgNjU1MzUpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaGVhZGVyIGNyYyBtaXNtYXRjaCI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmhjcmMgPSBzdGF0ZS5mbGFncyA+PiA5ICYgMTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgRElDVElEOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSB6c3dhcDMyKGhvbGQpOwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESUNUOwogICAgICAgICAgICAgIGNhc2UgRElDVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogICAgICAgICAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICAgICAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgICAgICAgICAgIHJldHVybiBaX05FRURfRElDVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDE7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICBjYXNlIFRZUEU6CiAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfQkxPQ0sgfHwgZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgVFlQRURPOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxhc3QpIHsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxhc3QgPSBob2xkICYgMTsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAxOwogICAgICAgICAgICAgICAgYml0cyAtPSAxOwogICAgICAgICAgICAgICAgc3dpdGNoIChob2xkICYgMykgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFNUT1JFRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUQUJMRTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYmxvY2sgdHlwZSI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBTVE9SRUQ6CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7CiAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhvbGQgJiA2NTUzNSkgIT09IChob2xkID4+PiAxNiBeIDY1NTM1KSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgNjU1MzU7CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFlfOwogICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIENPUFlfOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFk7CiAgICAgICAgICAgICAgY2FzZSBDT1BZOgogICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBsZWZ0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KG91dHB1dCwgaW5wdXQsIG5leHQsIGNvcHksIHB1dCk7CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIHB1dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgVEFCTEU6CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE0KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDMxKSArIDI1NzsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA1OwogICAgICAgICAgICAgICAgYml0cyAtPSA1OwogICAgICAgICAgICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDMxKSArIDE7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNTsKICAgICAgICAgICAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAxNSkgKyA0OwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgICAgICAgICAgICBiaXRzIC09IDQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5MRU5TOwogICAgICAgICAgICAgIGNhc2UgTEVOTEVOUzoKICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmNvZGUpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gaG9sZCAmIDc7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAzOwogICAgICAgICAgICAgICAgICBiaXRzIC09IDM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5bjsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUubGVucywgMCwgMTksIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICAgICAgICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT0RFTEVOUzsKICAgICAgICAgICAgICBjYXNlIENPREVMRU5TOgogICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhlcmVfdmFsIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX3ZhbCA9PT0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAyOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdOwogICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDMpOwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZXJlX3ZhbCA9PT0gMTcpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgNyk7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gMzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDc7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAxMSArIChob2xkICYgMTI3KTsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA3OwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSArIGNvcHkgPiBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29weS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBsZW47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gQkFEKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA5OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2OwogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluOwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUuZGlzdGJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIHN0YXRlLm5sZW4sIHN0YXRlLm5kaXN0LCBzdGF0ZS5kaXN0Y29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAgICAgICAgICAgICBzdGF0ZS5kaXN0Yml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZXMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSBMRU5fOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTjsKICAgICAgICAgICAgICBjYXNlIExFTjoKICAgICAgICAgICAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgICAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7CiAgICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgICAgICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgICAgICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICAgICAgICAgICAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgICAgICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gMDsKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKDEgPDwgc3RhdGUubGVuYml0cykgLSAxXTsKICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYmIChoZXJlX29wICYgMjQwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgICAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgIGlmIChoZXJlX29wID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGhlcmVfb3AgJiAzMikgewogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYgNjQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5FWFQ7CiAgICAgICAgICAgICAgY2FzZSBMRU5FWFQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKDEgPDwgc3RhdGUuZXh0cmEpIC0gMTsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUud2FzID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERJU1Q7CiAgICAgICAgICAgICAgY2FzZSBESVNUOgogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICBoZXJlX29wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhlcmVfb3AgJiAyNDApID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7CiAgICAgICAgICAgICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESVNURVhUOwogICAgICAgICAgICAgIGNhc2UgRElTVEVYVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5leHRyYSkgewogICAgICAgICAgICAgICAgICBuID0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ICs9IGhvbGQgJiAoMSA8PCBzdGF0ZS5leHRyYSkgLSAxOwogICAgICAgICAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gc3RhdGUuZG1heCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1BVENIOwogICAgICAgICAgICAgIGNhc2UgTUFUQ0g6CiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3B5ID0gX291dCAtIGxlZnQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53aGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLnduZXh0OwogICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBzdGF0ZS53aW5kb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDsKICAgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIExJVDoKICAgICAgICAgICAgICAgIGlmIChsZWZ0ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG91dHB1dFtwdXQrK10gPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBsZWZ0LS07CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBDSEVDSzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCB8PSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9vdXQgLT0gbGVmdDsKICAgICAgICAgICAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICAgICAgICAgICAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICAgICAgICAgICAgaWYgKF9vdXQpIHsKICAgICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgPyBob2xkIDogenN3YXAzMihob2xkKSkgIT09IHN0YXRlLmNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDsKICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiA0Mjk0OTY3Mjk1KSkgewogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImluY29ycmVjdCBsZW5ndGggY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERPTkU7CiAgICAgICAgICAgICAgY2FzZSBET05FOgogICAgICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgQkFEOgogICAgICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgTUVNOgogICAgICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgICAgIGNhc2UgU1lOQzoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICBpZiAoc3RhdGUud3NpemUgfHwgX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJiAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCkpIHsKICAgICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQsIF9vdXQgLSBzdHJtLmF2YWlsX291dCkpIHsKICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1FTTsKICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfaW4gLT0gc3RybS5hdmFpbF9pbjsKICAgICAgICBfb3V0IC09IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIHN0cm0udG90YWxfaW4gKz0gX2luOwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICBpZiAoc3RhdGUud3JhcCAmJiBfb3V0KSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkgOiBhZGxlcjMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KTsKICAgICAgICB9CiAgICAgICAgc3RybS5kYXRhX3R5cGUgPSBzdGF0ZS5iaXRzICsgKHN0YXRlLmxhc3QgPyA2NCA6IDApICsgKHN0YXRlLm1vZGUgPT09IFRZUEUgPyAxMjggOiAwKSArIChzdGF0ZS5tb2RlID09PSBMRU5fIHx8IHN0YXRlLm1vZGUgPT09IENPUFlfID8gMjU2IDogMCk7CiAgICAgICAgaWYgKChfaW4gPT09IDAgJiYgX291dCA9PT0gMCB8fCBmbHVzaCA9PT0gWl9GSU5JU0gpICYmIHJldCA9PT0gWl9PSykgewogICAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZUVuZChzdHJtKSB7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLndpbmRvdykgewogICAgICAgICAgc3RhdGUud2luZG93ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc3RybS5zdGF0ZSA9IG51bGw7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZUdldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKChzdGF0ZS53cmFwICYgMikgPT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUuaGVhZCA9IGhlYWQ7CiAgICAgICAgaGVhZC5kb25lID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkgewogICAgICAgIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBkaWN0aWQ7CiAgICAgICAgdmFyIHJldDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53cmFwICE9PSAwICYmIHN0YXRlLm1vZGUgIT09IERJQ1QpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IERJQ1QpIHsKICAgICAgICAgIGRpY3RpZCA9IDE7CiAgICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7CiAgICAgICAgICBpZiAoZGljdGlkICE9PSBzdGF0ZS5jaGVjaykgewogICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgZGljdExlbmd0aCk7CiAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgc3RhdGUubW9kZSA9IE1FTTsKICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUuaGF2ZWRpY3QgPSAxOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGV4cG9ydHMuaW5mbGF0ZVJlc2V0ID0gaW5mbGF0ZVJlc2V0OwogICAgICBleHBvcnRzLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyOwogICAgICBleHBvcnRzLmluZmxhdGVSZXNldEtlZXAgPSBpbmZsYXRlUmVzZXRLZWVwOwogICAgICBleHBvcnRzLmluZmxhdGVJbml0ID0gaW5mbGF0ZUluaXQ7CiAgICAgIGV4cG9ydHMuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyOwogICAgICBleHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlOwogICAgICBleHBvcnRzLmluZmxhdGVFbmQgPSBpbmZsYXRlRW5kOwogICAgICBleHBvcnRzLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyOwogICAgICBleHBvcnRzLmluZmxhdGVTZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZVNldERpY3Rpb25hcnk7CiAgICAgIGV4cG9ydHMuaW5mbGF0ZUluZm8gPSAicGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMKICB2YXIgcmVxdWlyZV9jb25zdGFudHMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY29uc3RhbnRzLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIG1vZHVsZS5leHBvcnRzID0gewogICAgICAgIFpfTk9fRkxVU0g6IDAsCiAgICAgICAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogICAgICAgIFpfU1lOQ19GTFVTSDogMiwKICAgICAgICBaX0ZVTExfRkxVU0g6IDMsCiAgICAgICAgWl9GSU5JU0g6IDQsCiAgICAgICAgWl9CTE9DSzogNSwKICAgICAgICBaX1RSRUVTOiA2LAogICAgICAgIFpfT0s6IDAsCiAgICAgICAgWl9TVFJFQU1fRU5EOiAxLAogICAgICAgIFpfTkVFRF9ESUNUOiAyLAogICAgICAgIFpfRVJSTk86IC0xLAogICAgICAgIFpfU1RSRUFNX0VSUk9SOiAtMiwKICAgICAgICBaX0RBVEFfRVJST1I6IC0zLAogICAgICAgIFpfQlVGX0VSUk9SOiAtNSwKICAgICAgICBaX05PX0NPTVBSRVNTSU9OOiAwLAogICAgICAgIFpfQkVTVF9TUEVFRDogMSwKICAgICAgICBaX0JFU1RfQ09NUFJFU1NJT046IDksCiAgICAgICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSwKICAgICAgICBaX0ZJTFRFUkVEOiAxLAogICAgICAgIFpfSFVGRk1BTl9PTkxZOiAyLAogICAgICAgIFpfUkxFOiAzLAogICAgICAgIFpfRklYRUQ6IDQsCiAgICAgICAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogICAgICAgIFpfQklOQVJZOiAwLAogICAgICAgIFpfVEVYVDogMSwKICAgICAgICBaX1VOS05PV046IDIsCiAgICAgICAgWl9ERUZMQVRFRDogOAogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvZ3poZWFkZXIuanMKICB2YXIgcmVxdWlyZV9nemhlYWRlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9nemhlYWRlci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBHWmhlYWRlcigpIHsKICAgICAgICB0aGlzLnRleHQgPSAwOwogICAgICAgIHRoaXMudGltZSA9IDA7CiAgICAgICAgdGhpcy54ZmxhZ3MgPSAwOwogICAgICAgIHRoaXMub3MgPSAwOwogICAgICAgIHRoaXMuZXh0cmEgPSBudWxsOwogICAgICAgIHRoaXMuZXh0cmFfbGVuID0gMDsKICAgICAgICB0aGlzLm5hbWUgPSAiIjsKICAgICAgICB0aGlzLmNvbW1lbnQgPSAiIjsKICAgICAgICB0aGlzLmhjcmMgPSAwOwogICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gR1poZWFkZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9pbmZsYXRlLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgemxpYl9pbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlKCk7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgc3RyaW5ncyA9IHJlcXVpcmVfc3RyaW5ncygpOwogICAgICB2YXIgYyA9IHJlcXVpcmVfY29uc3RhbnRzKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgWlN0cmVhbSA9IHJlcXVpcmVfenN0cmVhbSgpOwogICAgICB2YXIgR1poZWFkZXIgPSByZXF1aXJlX2d6aGVhZGVyKCk7CiAgICAgIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICAgIGZ1bmN0aW9uIEluZmxhdGUyKG9wdGlvbnMpIHsKICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZTIpKQogICAgICAgICAgcmV0dXJuIG5ldyBJbmZsYXRlMihvcHRpb25zKTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB1dGlscy5hc3NpZ24oewogICAgICAgICAgY2h1bmtTaXplOiAxNjM4NCwKICAgICAgICAgIHdpbmRvd0JpdHM6IDAsCiAgICAgICAgICB0bzogIiIKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTsKICAgICAgICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwogICAgICAgIGlmIChvcHQucmF3ICYmIG9wdC53aW5kb3dCaXRzID49IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNikgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICAgICAgICBpZiAob3B0LndpbmRvd0JpdHMgPT09IDApIHsKICAgICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtMTU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvcHQud2luZG93Qml0cyA+PSAwICYmIG9wdC53aW5kb3dCaXRzIDwgMTYgJiYgIShvcHRpb25zICYmIG9wdGlvbnMud2luZG93Qml0cykpIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzICs9IDMyOwogICAgICAgIH0KICAgICAgICBpZiAob3B0LndpbmRvd0JpdHMgPiAxNSAmJiBvcHQud2luZG93Qml0cyA8IDQ4KSB7CiAgICAgICAgICBpZiAoKG9wdC53aW5kb3dCaXRzICYgMTUpID09PSAwKSB7CiAgICAgICAgICAgIG9wdC53aW5kb3dCaXRzIHw9IDE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmVyciA9IDA7CiAgICAgICAgdGhpcy5tc2cgPSAiIjsKICAgICAgICB0aGlzLmVuZGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLnN0cm0gPSBuZXcgWlN0cmVhbSgpOwogICAgICAgIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgIHZhciBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSwgb3B0LndpbmRvd0JpdHMpOwogICAgICAgIGlmIChzdGF0dXMgIT09IGMuWl9PSykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oZWFkZXIgPSBuZXcgR1poZWFkZXIoKTsKICAgICAgICB6bGliX2luZmxhdGUuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sIHRoaXMuaGVhZGVyKTsKICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygb3B0LmRpY3Rpb25hcnkgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIG9wdC5kaWN0aW9uYXJ5ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgICAgb3B0LmRpY3Rpb25hcnkgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3B0LnJhdykgewogICAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICAgIGlmIChzdGF0dXMgIT09IGMuWl9PSykgewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgSW5mbGF0ZTIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBtb2RlKSB7CiAgICAgICAgdmFyIHN0cm0gPSB0aGlzLnN0cm07CiAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemU7CiAgICAgICAgdmFyIGRpY3Rpb25hcnkgPSB0aGlzLm9wdGlvbnMuZGljdGlvbmFyeTsKICAgICAgICB2YXIgc3RhdHVzLCBfbW9kZTsKICAgICAgICB2YXIgbmV4dF9vdXRfdXRmOCwgdGFpbCwgdXRmOHN0cjsKICAgICAgICB2YXIgYWxsb3dCdWZFcnJvciA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLmVuZGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9tb2RlID0gbW9kZSA9PT0gfn5tb2RlID8gbW9kZSA6IG1vZGUgPT09IHRydWUgPyBjLlpfRklOSVNIIDogYy5aX05PX0ZMVVNIOwogICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLmJpbnN0cmluZzJidWYoZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKGRhdGEpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBkYXRhOwogICAgICAgIH0KICAgICAgICBzdHJtLm5leHRfaW4gPSAwOwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpOwogICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gMDsKICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZShzdHJtLCBjLlpfTk9fRkxVU0gpOwogICAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX05FRURfRElDVCAmJiBkaWN0aW9uYXJ5KSB7CiAgICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3Rpb25hcnkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX0JVRl9FUlJPUiAmJiBhbGxvd0J1ZkVycm9yID09PSB0cnVlKSB7CiAgICAgICAgICAgIHN0YXR1cyA9IGMuWl9PSzsKICAgICAgICAgICAgYWxsb3dCdWZFcnJvciA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXR1cyAhPT0gYy5aX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBjLlpfT0spIHsKICAgICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0ubmV4dF9vdXQpIHsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQgfHwgc3RybS5hdmFpbF9pbiA9PT0gMCAmJiAoX21vZGUgPT09IGMuWl9GSU5JU0ggfHwgX21vZGUgPT09IGMuWl9TWU5DX0ZMVVNIKSkgewogICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICBuZXh0X291dF91dGY4ID0gc3RyaW5ncy51dGY4Ym9yZGVyKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KTsKICAgICAgICAgICAgICAgIHRhaWwgPSBzdHJtLm5leHRfb3V0IC0gbmV4dF9vdXRfdXRmODsKICAgICAgICAgICAgICAgIHV0ZjhzdHIgPSBzdHJpbmdzLmJ1ZjJzdHJpbmcoc3RybS5vdXRwdXQsIG5leHRfb3V0X3V0ZjgpOwogICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHRhaWw7CiAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZSAtIHRhaWw7CiAgICAgICAgICAgICAgICBpZiAodGFpbCkgewogICAgICAgICAgICAgICAgICB1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCwgc3RybS5vdXRwdXQsIG5leHRfb3V0X3V0ZjgsIHRhaWwsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5vbkRhdGEodXRmOHN0cik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgYWxsb3dCdWZFcnJvciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IGMuWl9TVFJFQU1fRU5EKTsKICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfU1RSRUFNX0VORCkgewogICAgICAgICAgX21vZGUgPSBjLlpfRklOSVNIOwogICAgICAgIH0KICAgICAgICBpZiAoX21vZGUgPT09IGMuWl9GSU5JU0gpIHsKICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlRW5kKHRoaXMuc3RybSk7CiAgICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBzdGF0dXMgPT09IGMuWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBjLlpfU1lOQ19GTFVTSCkgewogICAgICAgICAgdGhpcy5vbkVuZChjLlpfT0spOwogICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICBJbmZsYXRlMi5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmspIHsKICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTsKICAgICAgfTsKICAgICAgSW5mbGF0ZTIucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24oc3RhdHVzKSB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX09LKSB7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oIiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLmVyciA9IHN0YXR1czsKICAgICAgICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGluZmxhdGUoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaW5mbGF0b3IgPSBuZXcgSW5mbGF0ZTIob3B0aW9ucyk7CiAgICAgICAgaW5mbGF0b3IucHVzaChpbnB1dCwgdHJ1ZSk7CiAgICAgICAgaWYgKGluZmxhdG9yLmVycikgewogICAgICAgICAgdGhyb3cgaW5mbGF0b3IubXNnIHx8IG1zZ1tpbmZsYXRvci5lcnJdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaW5mbGF0b3IucmVzdWx0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVSYXcoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBvcHRpb25zLnJhdyA9IHRydWU7CiAgICAgICAgcmV0dXJuIGluZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGV4cG9ydHMuSW5mbGF0ZSA9IEluZmxhdGUyOwogICAgICBleHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlOwogICAgICBleHBvcnRzLmluZmxhdGVSYXcgPSBpbmZsYXRlUmF3OwogICAgICBleHBvcnRzLnVuZ3ppcCA9IGluZmxhdGU7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9pbmRleC5qcwogIHZhciByZXF1aXJlX3Bha28gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIGFzc2lnbiA9IHJlcXVpcmVfY29tbW9uMigpLmFzc2lnbjsKICAgICAgdmFyIGRlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUyKCk7CiAgICAgIHZhciBpbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlMigpOwogICAgICB2YXIgY29uc3RhbnRzID0gcmVxdWlyZV9jb25zdGFudHMoKTsKICAgICAgdmFyIHBha28gPSB7fTsKICAgICAgYXNzaWduKHBha28sIGRlZmxhdGUsIGluZmxhdGUsIGNvbnN0YW50cyk7CiAgICAgIG1vZHVsZS5leHBvcnRzID0gcGFrbzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlci1jcmMzMkAwLjIuMTMvbm9kZV9tb2R1bGVzL2J1ZmZlci1jcmMzMi9pbmRleC5qcwogIHZhciByZXF1aXJlX2J1ZmZlcl9jcmMzMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXItY3JjMzJAMC4yLjEzL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgIHZhciBCdWZmZXI4ID0gcmVxdWlyZV9idWZmZXIoKS5CdWZmZXI7CiAgICAgIHZhciBDUkNfVEFCTEUgPSBbCiAgICAgICAgMCwKICAgICAgICAxOTk2OTU5ODk0LAogICAgICAgIDM5OTM5MTk3ODgsCiAgICAgICAgMjU2NzUyNDc5NCwKICAgICAgICAxMjQ2MzQxMzcsCiAgICAgICAgMTg4NjA1NzYxNSwKICAgICAgICAzOTE1NjIxNjg1LAogICAgICAgIDI2NTczOTIwMzUsCiAgICAgICAgMjQ5MjY4Mjc0LAogICAgICAgIDIwNDQ1MDgzMjQsCiAgICAgICAgMzc3MjExNTIzMCwKICAgICAgICAyNTQ3MTc3ODY0LAogICAgICAgIDE2Mjk0MTk5NSwKICAgICAgICAyMTI1NTYxMDIxLAogICAgICAgIDM4ODc2MDcwNDcsCiAgICAgICAgMjQyODQ0NDA0OSwKICAgICAgICA0OTg1MzY1NDgsCiAgICAgICAgMTc4OTkyNzY2NiwKICAgICAgICA0MDg5MDE2NjQ4LAogICAgICAgIDIyMjcwNjEyMTQsCiAgICAgICAgNDUwNTQ4ODYxLAogICAgICAgIDE4NDMyNTg2MDMsCiAgICAgICAgNDEwNzU4MDc1MywKICAgICAgICAyMjExNjc3NjM5LAogICAgICAgIDMyNTg4Mzk5MCwKICAgICAgICAxNjg0Nzc3MTUyLAogICAgICAgIDQyNTExMjIwNDIsCiAgICAgICAgMjMyMTkyNjYzNiwKICAgICAgICAzMzU2MzM0ODcsCiAgICAgICAgMTY2MTM2NTQ2NSwKICAgICAgICA0MTk1MzAyNzU1LAogICAgICAgIDIzNjYxMTUzMTcsCiAgICAgICAgOTk3MDczMDk2LAogICAgICAgIDEyODE5NTM4ODYsCiAgICAgICAgMzU3OTg1NTMzMiwKICAgICAgICAyNzI0Njg4MjQyLAogICAgICAgIDEwMDY4ODgxNDUsCiAgICAgICAgMTI1ODYwNzY4NywKICAgICAgICAzNTI0MTAxNjI5LAogICAgICAgIDI3Njg5NDI0NDMsCiAgICAgICAgOTAxMDk3NzIyLAogICAgICAgIDExMTkwMDA2ODQsCiAgICAgICAgMzY4NjUxNzIwNiwKICAgICAgICAyODk4MDY1NzI4LAogICAgICAgIDg1MzA0NDQ1MSwKICAgICAgICAxMTcyMjY2MTAxLAogICAgICAgIDM3MDUwMTU3NTksCiAgICAgICAgMjg4MjYxNjY2NSwKICAgICAgICA2NTE3Njc5ODAsCiAgICAgICAgMTM3MzUwMzU0NiwKICAgICAgICAzMzY5NTU0MzA0LAogICAgICAgIDMyMTgxMDQ1OTgsCiAgICAgICAgNTY1NTA3MjUzLAogICAgICAgIDE0NTQ2MjE3MzEsCiAgICAgICAgMzQ4NTExMTcwNSwKICAgICAgICAzMDk5NDM2MzAzLAogICAgICAgIDY3MTI2Njk3NCwKICAgICAgICAxNTk0MTk4MDI0LAogICAgICAgIDMzMjI3MzA5MzAsCiAgICAgICAgMjk3MDM0NzgxMiwKICAgICAgICA3OTU4MzU1MjcsCiAgICAgICAgMTQ4MzIzMDIyNSwKICAgICAgICAzMjQ0MzY3Mjc1LAogICAgICAgIDMwNjAxNDk1NjUsCiAgICAgICAgMTk5NDE0NjE5MiwKICAgICAgICAzMTE1ODUzNCwKICAgICAgICAyNTYzOTA3NzcyLAogICAgICAgIDQwMjM3MTc5MzAsCiAgICAgICAgMTkwNzQ1OTQ2NSwKICAgICAgICAxMTI2MzcyMTUsCiAgICAgICAgMjY4MDE1MzI1MywKICAgICAgICAzOTA0NDI3MDU5LAogICAgICAgIDIwMTM3NzYyOTAsCiAgICAgICAgMjUxNzIyMDM2LAogICAgICAgIDI1MTcyMTUzNzQsCiAgICAgICAgMzc3NTgzMDA0MCwKICAgICAgICAyMTM3NjU2NzYzLAogICAgICAgIDE0MTM3NjgxMywKICAgICAgICAyNDM5Mjc3NzE5LAogICAgICAgIDM4NjUyNzEyOTcsCiAgICAgICAgMTgwMjE5NTQ0NCwKICAgICAgICA0NzY4NjQ4NjYsCiAgICAgICAgMjIzODAwMTM2OCwKICAgICAgICA0MDY2NTA4ODc4LAogICAgICAgIDE4MTIzNzA5MjUsCiAgICAgICAgNDUzMDkyNzMxLAogICAgICAgIDIxODE2MjUwMjUsCiAgICAgICAgNDExMTQ1MTIyMywKICAgICAgICAxNzA2MDg4OTAyLAogICAgICAgIDMxNDA0MjcwNCwKICAgICAgICAyMzQ0NTMyMjAyLAogICAgICAgIDQyNDAwMTc1MzIsCiAgICAgICAgMTY1ODY1ODI3MSwKICAgICAgICAzNjY2MTk5NzcsCiAgICAgICAgMjM2MjY3MDMyMywKICAgICAgICA0MjI0OTk0NDA1LAogICAgICAgIDEzMDM1MzU5NjAsCiAgICAgICAgOTg0OTYxNDg2LAogICAgICAgIDI3NDcwMDcwOTIsCiAgICAgICAgMzU2OTAzNzUzOCwKICAgICAgICAxMjU2MTcwODE3LAogICAgICAgIDEwMzc2MDQzMTEsCiAgICAgICAgMjc2NTIxMDczMywKICAgICAgICAzNTU0MDc5OTk1LAogICAgICAgIDExMzEwMTQ1MDYsCiAgICAgICAgODc5Njc5OTk2LAogICAgICAgIDI5MDkyNDM0NjIsCiAgICAgICAgMzY2Mzc3MTg1NiwKICAgICAgICAxMTQxMTI0NDY3LAogICAgICAgIDg1NTg0MjI3NywKICAgICAgICAyODUyODAxNjMxLAogICAgICAgIDM3MDg2NDg2NDksCiAgICAgICAgMTM0MjUzMzk0OCwKICAgICAgICA2NTQ0NTkzMDYsCiAgICAgICAgMzE4ODM5NjA0OCwKICAgICAgICAzMzczMDE1MTc0LAogICAgICAgIDE0NjY0Nzk5MDksCiAgICAgICAgNTQ0MTc5NjM1LAogICAgICAgIDMxMTA1MjM5MTMsCiAgICAgICAgMzQ2MjUyMjAxNSwKICAgICAgICAxNTkxNjcxMDU0LAogICAgICAgIDcwMjEzODc3NiwKICAgICAgICAyOTY2NDYwNDUwLAogICAgICAgIDMzNTI3OTk0MTIsCiAgICAgICAgMTUwNDkxODgwNywKICAgICAgICA3ODM1NTE4NzMsCiAgICAgICAgMzA4MjY0MDQ0MywKICAgICAgICAzMjMzNDQyOTg5LAogICAgICAgIDM5ODgyOTIzODQsCiAgICAgICAgMjU5NjI1NDY0NiwKICAgICAgICA2MjMxNzA2OCwKICAgICAgICAxOTU3ODEwODQyLAogICAgICAgIDM5Mzk4NDU5NDUsCiAgICAgICAgMjY0NzgxNjExMSwKICAgICAgICA4MTQ3MDk5NywKICAgICAgICAxOTQzODAzNTIzLAogICAgICAgIDM4MTQ5MTg5MzAsCiAgICAgICAgMjQ4OTU5NjgwNCwKICAgICAgICAyMjUyNzQ0MzAsCiAgICAgICAgMjA1Mzc5MDM3NiwKICAgICAgICAzODI2MTc1NzU1LAogICAgICAgIDI0NjY5MDYwMTMsCiAgICAgICAgMTY3ODE2NzQzLAogICAgICAgIDIwOTc2NTEzNzcsCiAgICAgICAgNDAyNzU1MjU4MCwKICAgICAgICAyMjY1NDkwMzg2LAogICAgICAgIDUwMzQ0NDA3MiwKICAgICAgICAxNzYyMDUwODE0LAogICAgICAgIDQxNTA0MTcyNDUsCiAgICAgICAgMjE1NDEyOTM1NSwKICAgICAgICA0MjY1MjIyMjUsCiAgICAgICAgMTg1MjUwNzg3OSwKICAgICAgICA0Mjc1MzEzNTI2LAogICAgICAgIDIzMTIzMTc5MjAsCiAgICAgICAgMjgyNzUzNjI2LAogICAgICAgIDE3NDI1NTU4NTIsCiAgICAgICAgNDE4OTcwODE0MywKICAgICAgICAyMzk0ODc3OTQ1LAogICAgICAgIDM5NzkxNzc2MywKICAgICAgICAxNjIyMTgzNjM3LAogICAgICAgIDM2MDQzOTA4ODgsCiAgICAgICAgMjcxNDg2NjU1OCwKICAgICAgICA5NTM3Mjk3MzIsCiAgICAgICAgMTM0MDA3NjYyNiwKICAgICAgICAzNTE4NzE5OTg1LAogICAgICAgIDI3OTczNjA5OTksCiAgICAgICAgMTA2ODgyODM4MSwKICAgICAgICAxMjE5NjM4ODU5LAogICAgICAgIDM2MjQ3NDE4NTAsCiAgICAgICAgMjkzNjY3NTE0OCwKICAgICAgICA5MDYxODU0NjIsCiAgICAgICAgMTA5MDgxMjUxMiwKICAgICAgICAzNzQ3NjcyMDAzLAogICAgICAgIDI4MjUzNzk2NjksCiAgICAgICAgODI5MzI5MTM1LAogICAgICAgIDExODEzMzUxNjEsCiAgICAgICAgMzQxMjE3NzgwNCwKICAgICAgICAzMTYwODM0ODQyLAogICAgICAgIDYyODA4NTQwOCwKICAgICAgICAxMzgyNjA1MzY2LAogICAgICAgIDM0MjMzNjkxMDksCiAgICAgICAgMzEzODA3ODQ2NywKICAgICAgICA1NzA1NjIyMzMsCiAgICAgICAgMTQyNjQwMDgxNSwKICAgICAgICAzMzE3MzE2NTQyLAogICAgICAgIDI5OTg3MzM2MDgsCiAgICAgICAgNzMzMjM5OTU0LAogICAgICAgIDE1NTUyNjE5NTYsCiAgICAgICAgMzI2ODkzNTU5MSwKICAgICAgICAzMDUwMzYwNjI1LAogICAgICAgIDc1MjQ1OTQwMywKICAgICAgICAxNTQxMzIwMjIxLAogICAgICAgIDI2MDcwNzE5MjAsCiAgICAgICAgMzk2NTk3MzAzMCwKICAgICAgICAxOTY5OTIyOTcyLAogICAgICAgIDQwNzM1NDk4LAogICAgICAgIDI2MTc4MzcyMjUsCiAgICAgICAgMzk0MzU3NzE1MSwKICAgICAgICAxOTEzMDg3ODc3LAogICAgICAgIDgzOTA4MzcxLAogICAgICAgIDI1MTIzNDE2MzQsCiAgICAgICAgMzgwMzc0MDY5MiwKICAgICAgICAyMDc1MjA4NjIyLAogICAgICAgIDIxMzI2MTExMiwKICAgICAgICAyNDYzMjcyNjAzLAogICAgICAgIDM4NTU5OTAyODUsCiAgICAgICAgMjA5NDg1NDA3MSwKICAgICAgICAxOTg5NTg4ODEsCiAgICAgICAgMjI2MjAyOTAxMiwKICAgICAgICA0MDU3MjYwNjEwLAogICAgICAgIDE3NTkzNTk5OTIsCiAgICAgICAgNTM0NDE0MTkwLAogICAgICAgIDIxNzY3MTg1NDEsCiAgICAgICAgNDEzOTMyOTExNSwKICAgICAgICAxODczODM2MDAxLAogICAgICAgIDQxNDY2NDU2NywKICAgICAgICAyMjgyMjQ4OTM0LAogICAgICAgIDQyNzkyMDAzNjgsCiAgICAgICAgMTcxMTY4NDU1NCwKICAgICAgICAyODUyODExMTYsCiAgICAgICAgMjQwNTgwMTcyNywKICAgICAgICA0MTY3MjE2NzQ1LAogICAgICAgIDE2MzQ0Njc3OTUsCiAgICAgICAgMzc2MjI5NzAxLAogICAgICAgIDI2ODUwNjc4OTYsCiAgICAgICAgMzYwODAwNzQwNiwKICAgICAgICAxMzA4OTE4NjEyLAogICAgICAgIDk1NjU0MzkzOCwKICAgICAgICAyODA4NTU1MTA1LAogICAgICAgIDM0OTU5NTgyNjMsCiAgICAgICAgMTIzMTYzNjMwMSwKICAgICAgICAxMDQ3NDI3MDM1LAogICAgICAgIDI5MzI5NTk4MTgsCiAgICAgICAgMzY1NDcwMzgzNiwKICAgICAgICAxMDg4MzU5MjcwLAogICAgICAgIDkzNjkxOGUzLAogICAgICAgIDI4NDc3MTQ4OTksCiAgICAgICAgMzczNjgzNzgyOSwKICAgICAgICAxMjAyOTAwODYzLAogICAgICAgIDgxNzIzMzg5NywKICAgICAgICAzMTgzMzQyMTA4LAogICAgICAgIDM0MDEyMzcxMzAsCiAgICAgICAgMTQwNDI3NzU1MiwKICAgICAgICA2MTU4MTgxNTAsCiAgICAgICAgMzEzNDIwNzQ5MywKICAgICAgICAzNDUzNDIxMjAzLAogICAgICAgIDE0MjM4NTc0NDksCiAgICAgICAgNjAxNDUwNDMxLAogICAgICAgIDMwMDk4Mzc2MTQsCiAgICAgICAgMzI5NDcxMDQ1NiwKICAgICAgICAxNTY3MTAzNzQ2LAogICAgICAgIDcxMTkyODcyNCwKICAgICAgICAzMDIwNjY4NDcxLAogICAgICAgIDMyNzIzODAwNjUsCiAgICAgICAgMTUxMDMzNDIzNSwKICAgICAgICA3NTUxNjcxMTcKICAgICAgXTsKICAgICAgaWYgKHR5cGVvZiBJbnQzMkFycmF5ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIENSQ19UQUJMRSA9IG5ldyBJbnQzMkFycmF5KENSQ19UQUJMRSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZW5zdXJlQnVmZmVyKGlucHV0KSB7CiAgICAgICAgaWYgKEJ1ZmZlcjguaXNCdWZmZXIoaW5wdXQpKSB7CiAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgfQogICAgICAgIHZhciBoYXNOZXdCdWZmZXJBUEkgPSB0eXBlb2YgQnVmZmVyOC5hbGxvYyA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgQnVmZmVyOC5mcm9tID09PSAiZnVuY3Rpb24iOwogICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICByZXR1cm4gaGFzTmV3QnVmZmVyQVBJID8gQnVmZmVyOC5hbGxvYyhpbnB1dCkgOiBuZXcgQnVmZmVyOChpbnB1dCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gaGFzTmV3QnVmZmVyQVBJID8gQnVmZmVyOC5mcm9tKGlucHV0KSA6IG5ldyBCdWZmZXI4KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnB1dCBtdXN0IGJlIGJ1ZmZlciwgbnVtYmVyLCBvciBzdHJpbmcsIHJlY2VpdmVkICIgKyB0eXBlb2YgaW5wdXQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBidWZmZXJpemVJbnQobnVtKSB7CiAgICAgICAgdmFyIHRtcCA9IGVuc3VyZUJ1ZmZlcig0KTsKICAgICAgICB0bXAud3JpdGVJbnQzMkJFKG51bSwgMCk7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgfQogICAgICBmdW5jdGlvbiBfY3JjMzIoYnVmLCBwcmV2aW91cykgewogICAgICAgIGJ1ZiA9IGVuc3VyZUJ1ZmZlcihidWYpOwogICAgICAgIGlmIChCdWZmZXI4LmlzQnVmZmVyKHByZXZpb3VzKSkgewogICAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5yZWFkVUludDMyQkUoMCk7CiAgICAgICAgfQogICAgICAgIHZhciBjcmMgPSB+fnByZXZpb3VzIF4gLTE7CiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBidWYubGVuZ3RoOyBuKyspIHsKICAgICAgICAgIGNyYyA9IENSQ19UQUJMRVsoY3JjIF4gYnVmW25dKSAmIDI1NV0gXiBjcmMgPj4+IDg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjcmMgXiAtMTsKICAgICAgfQogICAgICBmdW5jdGlvbiBjcmMzMjIoKSB7CiAgICAgICAgcmV0dXJuIGJ1ZmZlcml6ZUludChfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7CiAgICAgIH0KICAgICAgY3JjMzIyLnNpZ25lZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgICAgfTsKICAgICAgY3JjMzIyLnVuc2lnbmVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpID4+PiAwOwogICAgICB9OwogICAgICBtb2R1bGUuZXhwb3J0cyA9IGNyYzMyMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL29iamVjdC5lbnRyaWVzLXBvbnlmaWxsQDEuMC4xL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy1wb255ZmlsbC9lbnRyaWVzLmpzCiAgdmFyIHJlcXVpcmVfZW50cmllcyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9vYmplY3QuZW50cmllcy1wb255ZmlsbEAxLjAuMS9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMtcG9ueWZpbGwvZW50cmllcy5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgaGFzID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwogICAgICB9OwogICAgICB2YXIgaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHByb3ApOwogICAgICB9OwogICAgICBmdW5jdGlvbiBlbnRyaWVzMihvYmopIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpOwogICAgICAgIH0KICAgICAgICB2YXIgcGFpcnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICBpZiAoaGFzKG9iaiwga2V5KSAmJiBpc0VudW1lcmFibGUob2JqLCBrZXkpKSB7CiAgICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgb2JqW2tleV1dKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhaXJzOwogICAgICB9CiAgICAgIG1vZHVsZS5leHBvcnRzID0gZW50cmllczI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9vYmplY3QuZW50cmllcy1wb255ZmlsbEAxLjAuMS9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMtcG9ueWZpbGwvaW5kZXguanMKICB2YXIgcmVxdWlyZV9vYmplY3QgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vb2JqZWN0LmVudHJpZXMtcG9ueWZpbGxAMS4wLjEvbm9kZV9tb2R1bGVzL29iamVjdC5lbnRyaWVzLXBvbnlmaWxsL2luZGV4LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBPYmplY3QuZW50cmllcyA9PT0gImZ1bmN0aW9uIiA/IE9iamVjdC5lbnRyaWVzIDogcmVxdWlyZV9lbnRyaWVzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGxAMS43LjUvbm9kZV9tb2R1bGVzL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Nqcy1wb255ZmlsbC5qcwogIHZhciByZXF1aXJlX2Nqc19wb255ZmlsbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGxAMS43LjUvbm9kZV9tb2R1bGVzL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Nqcy1wb255ZmlsbC5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKQogICAgICAgICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgewogICAgICAgIGlmIChwcm90b1Byb3BzKQogICAgICAgICAgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgICAgICBpZiAoc3RhdGljUHJvcHMpCiAgICAgICAgICBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsKICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgICAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7CiAgICAgICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsICJwcm90b3R5cGUiLCB7CiAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgICBpZiAoc3VwZXJDbGFzcykKICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKICAgICAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mMihvMikgewogICAgICAgICAgcmV0dXJuIG8yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YobzIpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgewogICAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YyKG8yLCBwMikgewogICAgICAgICAgbzIuX19wcm90b19fID0gcDI7CiAgICAgICAgICByZXR1cm4gbzI7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkgewogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYyKSB7CiAgICAgICAgaWYgKHNlbGYyID09PSB2b2lkIDApIHsKICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmMjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmMiwgY2FsbCkgewogICAgICAgIGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpKSB7CiAgICAgICAgICByZXR1cm4gY2FsbDsKICAgICAgICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZjIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7CiAgICAgICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgewogICAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7CiAgICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgewogICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOwogICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7CiAgICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9nZXQoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSAidW5kZWZpbmVkIiAmJiBSZWZsZWN0LmdldCkgewogICAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0LmJpbmQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQyKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7CiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmICghYmFzZSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmIChkZXNjLmdldCkgewogICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9nZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfQogICAgICB2YXIgRW1pdHRlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBFbWl0dGVyMigpIHsKICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbWl0dGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImxpc3RlbmVycyIsIHsKICAgICAgICAgICAgdmFsdWU6IHt9LAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEVtaXR0ZXIyLCBbewogICAgICAgICAga2V5OiAiYWRkRXZlbnRMaXN0ZW5lciIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoISh0eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdID0gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0ucHVzaCh7CiAgICAgICAgICAgICAgY2FsbGJhY2ssCiAgICAgICAgICAgICAgb3B0aW9ucwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJyZW1vdmVFdmVudExpc3RlbmVyIiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgIGlmICghKHR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW3R5cGVdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIGlmIChzdGFja1tpXS5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJkaXNwYXRjaEV2ZW50IiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKGV2ZW50LnR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW2V2ZW50LnR5cGVdOwogICAgICAgICAgICB2YXIgc3RhY2tUb0NhbGwgPSBzdGFjay5zbGljZSgpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrVG9DYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHN0YWNrVG9DYWxsW2ldOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsaXN0ZW5lci5vcHRpb25zICYmIGxpc3RlbmVyLm9wdGlvbnMub25jZSkgewogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUsIGxpc3RlbmVyLmNhbGxiYWNrKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gRW1pdHRlcjI7CiAgICAgIH0oKTsKICAgICAgdmFyIEFib3J0U2lnbmFsID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKF9FbWl0dGVyKSB7CiAgICAgICAgX2luaGVyaXRzKEFib3J0U2lnbmFsMiwgX0VtaXR0ZXIpOwogICAgICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQWJvcnRTaWduYWwyKTsKICAgICAgICBmdW5jdGlvbiBBYm9ydFNpZ25hbDIoKSB7CiAgICAgICAgICB2YXIgX3RoaXM7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRTaWduYWwyKTsKICAgICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7CiAgICAgICAgICBpZiAoIV90aGlzLmxpc3RlbmVycykgewogICAgICAgICAgICBFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOwogICAgICAgICAgfQogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCAiYWJvcnRlZCIsIHsKICAgICAgICAgICAgdmFsdWU6IGZhbHNlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgIm9uYWJvcnQiLCB7CiAgICAgICAgICAgIHZhbHVlOiBudWxsLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgInJlYXNvbiIsIHsKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhBYm9ydFNpZ25hbDIsIFt7CiAgICAgICAgICBrZXk6ICJ0b1N0cmluZyIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiAiW29iamVjdCBBYm9ydFNpZ25hbF0iOwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGtleTogImRpc3BhdGNoRXZlbnQiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsKICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJhYm9ydCIpIHsKICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbmFib3J0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uYWJvcnQuY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9nZXQoX2dldFByb3RvdHlwZU9mKEFib3J0U2lnbmFsMi5wcm90b3R5cGUpLCAiZGlzcGF0Y2hFdmVudCIsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gQWJvcnRTaWduYWwyOwogICAgICB9KEVtaXR0ZXIpOwogICAgICB2YXIgQWJvcnRDb250cm9sbGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIEFib3J0Q29udHJvbGxlcjIoKSB7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRDb250cm9sbGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNpZ25hbCIsIHsKICAgICAgICAgICAgdmFsdWU6IG5ldyBBYm9ydFNpZ25hbCgpLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEFib3J0Q29udHJvbGxlcjIsIFt7CiAgICAgICAgICBrZXk6ICJhYm9ydCIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7CiAgICAgICAgICAgIHZhciBldmVudDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudCgiYWJvcnQiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7CiAgICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9ICJhYm9ydCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICAgICAgICAgICAgICBldmVudC5pbml0RXZlbnQoImFib3J0IiwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhYm9ydCIsCiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLAogICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNpZ25hbFJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgICAgaWYgKHNpZ25hbFJlYXNvbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbi5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRE9NRXhjZXB0aW9uKCJzaWduYWwgaXMgYWJvcnRlZCB3aXRob3V0IHJlYXNvbiIpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgICAgc2lnbmFsUmVhc29uLm5hbWUgPSAiQWJvcnRFcnJvciI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHNpZ25hbFJlYXNvbjsKICAgICAgICAgICAgdGhpcy5zaWduYWwuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAidG9TdHJpbmciLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gIltvYmplY3QgQWJvcnRDb250cm9sbGVyXSI7CiAgICAgICAgICB9CiAgICAgICAgfV0pOwogICAgICAgIHJldHVybiBBYm9ydENvbnRyb2xsZXIyOwogICAgICB9KCk7CiAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHsKICAgICAgICBBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiQWJvcnRDb250cm9sbGVyIjsKICAgICAgICBBYm9ydFNpZ25hbC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICJBYm9ydFNpZ25hbCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9seWZpbGxOZWVkZWQoc2VsZjIpIHsKICAgICAgICBpZiAoc2VsZjIuX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgY29uc29sZS5sb2coIl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEw9dHJ1ZSBpcyBzZXQsIHdpbGwgZm9yY2UgaW5zdGFsbCBwb2x5ZmlsbCIpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0eXBlb2Ygc2VsZjIuUmVxdWVzdCA9PT0gImZ1bmN0aW9uIiAmJiAhc2VsZjIuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpIHx8ICFzZWxmMi5BYm9ydENvbnRyb2xsZXI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWJvcnRhYmxlRmV0Y2hEZWNvcmF0b3IocGF0Y2hUYXJnZXRzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBwYXRjaFRhcmdldHMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBhdGNoVGFyZ2V0cyA9IHsKICAgICAgICAgICAgZmV0Y2g6IHBhdGNoVGFyZ2V0cwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIF9wYXRjaFRhcmdldHMgPSBwYXRjaFRhcmdldHMsIGZldGNoMiA9IF9wYXRjaFRhcmdldHMuZmV0Y2gsIF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMuUmVxdWVzdCwgTmF0aXZlUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9PT0gdm9pZCAwID8gZmV0Y2gyLlJlcXVlc3QgOiBfcGF0Y2hUYXJnZXRzJFJlcXVlc3QsIE5hdGl2ZUFib3J0Q29udHJvbGxlciA9IF9wYXRjaFRhcmdldHMuQWJvcnRDb250cm9sbGVyLCBfcGF0Y2hUYXJnZXRzJF9fRk9SQ0UgPSBfcGF0Y2hUYXJnZXRzLl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwsIF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwgPSBfcGF0Y2hUYXJnZXRzJF9fRk9SQ0UgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhdGNoVGFyZ2V0cyRfX0ZPUkNFOwogICAgICAgIGlmICghcG9seWZpbGxOZWVkZWQoewogICAgICAgICAgZmV0Y2g6IGZldGNoMiwKICAgICAgICAgIFJlcXVlc3Q6IE5hdGl2ZVJlcXVlc3QsCiAgICAgICAgICBBYm9ydENvbnRyb2xsZXI6IE5hdGl2ZUFib3J0Q29udHJvbGxlciwKICAgICAgICAgIF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwKICAgICAgICB9KSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZmV0Y2g6IGZldGNoMiwKICAgICAgICAgICAgUmVxdWVzdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIFJlcXVlc3QgPSBOYXRpdmVSZXF1ZXN0OwogICAgICAgIGlmIChSZXF1ZXN0ICYmICFSZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic2lnbmFsIikgfHwgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgUmVxdWVzdCA9IGZ1bmN0aW9uIFJlcXVlc3QyKGlucHV0LCBpbml0MikgewogICAgICAgICAgICB2YXIgc2lnbmFsOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgc2lnbmFsID0gaW5pdDIuc2lnbmFsOwogICAgICAgICAgICAgIGRlbGV0ZSBpbml0Mi5zaWduYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgaW5pdDIpOwogICAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVlc3QsICJzaWduYWwiLCB7CiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIHZhbHVlOiBzaWduYWwKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgICAgIH07CiAgICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QucHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICB2YXIgcmVhbEZldGNoID0gZmV0Y2gyOwogICAgICAgIHZhciBhYm9ydGFibGVGZXRjaCA9IGZ1bmN0aW9uIGFib3J0YWJsZUZldGNoMihpbnB1dCwgaW5pdDIpIHsKICAgICAgICAgIHZhciBzaWduYWwgPSBSZXF1ZXN0ICYmIFJlcXVlc3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5wdXQpID8gaW5wdXQuc2lnbmFsIDogaW5pdDIgPyBpbml0Mi5zaWduYWwgOiB2b2lkIDA7CiAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgIHZhciBhYm9ydEVycm9yOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGFib3J0RXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwgIkFib3J0RXJyb3IiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgYWJvcnRFcnJvciA9IG5ldyBFcnJvcigiQWJvcnRlZCIpOwogICAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGNhbmNlbGxhdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIHJlamVjdCkgewogICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChhYm9ydEVycm9yKTsKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvbmNlOiB0cnVlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgZGVsZXRlIGluaXQyLnNpZ25hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtjYW5jZWxsYXRpb24sIHJlYWxGZXRjaChpbnB1dCwgaW5pdDIpXSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVhbEZldGNoKGlucHV0LCBpbml0Mik7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZmV0Y2g6IGFib3J0YWJsZUZldGNoLAogICAgICAgICAgUmVxdWVzdAogICAgICAgIH07CiAgICAgIH0KICAgICAgZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7CiAgICAgIGV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDsKICAgICAgZXhwb3J0cy5hYm9ydGFibGVGZXRjaCA9IGFib3J0YWJsZUZldGNoRGVjb3JhdG9yOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMKICB2YXIgcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMuQWJvcnRTaWduYWwgPSBleHBvcnRzLkFib3J0Q29udHJvbGxlciA9IHZvaWQgMDsKICAgICAgdmFyIGNqc19wb255ZmlsbF8xID0gcmVxdWlyZV9janNfcG9ueWZpbGwoKTsKICAgICAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBzZWxmOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIGdsb2JhbDsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QiKTsKICAgICAgfTsKICAgICAgdmFyIEFib3J0Q29udHJvbGxlciA9IHR5cGVvZiBnZXRHbG9iYWwoKS5BYm9ydENvbnRyb2xsZXIgPT09ICJ1bmRlZmluZWQiID8gY2pzX3BvbnlmaWxsXzEuQWJvcnRDb250cm9sbGVyIDogZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyOwogICAgICBleHBvcnRzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlcjsKICAgICAgdmFyIEFib3J0U2lnbmFsID0gdHlwZW9mIGdldEdsb2JhbCgpLkFib3J0Q29udHJvbGxlciA9PT0gInVuZGVmaW5lZCIgPyBjanNfcG9ueWZpbGxfMS5BYm9ydFNpZ25hbCA6IGdldEdsb2JhbCgpLkFib3J0U2lnbmFsOwogICAgICBleHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xID0gcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwoKTsKICAgICAgdmFyIE51bGxTaWduYWwgPSBjbGFzcyB7CiAgICAgIH07CiAgICAgIHZhciBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXIgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICB0aGlzLnNpZ25hbHMgPSBuZXcgU2V0KCk7CiAgICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMS5BYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICB9CiAgICAgICAgYWRkU2lnbmFsKHNpZ25hbCA9IG5ldyBOdWxsU2lnbmFsKCkpIHsKICAgICAgICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiY2Fubm90IGFkZCBhIHNpZ25hbCwgYWxyZWFkeSBhYm9ydGVkISIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zaWduYWxzLmFkZChzaWduYWwpOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWJvcnRlZChzaWduYWwpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwgKCkgPT4gewogICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWJvcnRlZChzaWduYWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlQWJvcnRlZChzaWduYWwpIHsKICAgICAgICAgIHRoaXMuc2lnbmFscy5kZWxldGUoc2lnbmFsKTsKICAgICAgICAgIGlmICh0aGlzLnNpZ25hbHMuc2l6ZSA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXQgc2lnbmFsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICB9CiAgICAgICAgYWJvcnQoKSB7CiAgICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gQWdncmVnYXRlQWJvcnRDb250cm9sbGVyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIuanMiKGV4cG9ydHMpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlciA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHRoaXMuY2FsbGJhY2tzID0gbmV3IFNldCgpOwogICAgICAgIH0KICAgICAgICBhZGRDYWxsYmFjayhjYWxsYmFjayA9ICgpID0+IHsKICAgICAgICB9KSB7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5hZGQoY2FsbGJhY2spOwogICAgICAgICAgY2FsbGJhY2sodGhpcy5jdXJyZW50TWVzc2FnZSk7CiAgICAgICAgfQogICAgICAgIGNhbGxiYWNrKG1lc3NhZ2UpIHsKICAgICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2UgPSBtZXNzYWdlOwogICAgICAgICAgdGhpcy5jYWxsYmFja3MuZm9yRWFjaCgoZWx0KSA9PiB7CiAgICAgICAgICAgIGVsdChtZXNzYWdlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcwogIHZhciByZXF1aXJlX0Fib3J0YWJsZVByb21pc2VDYWNoZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcyIoZXhwb3J0cykgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xID0gcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwoKTsKICAgICAgdmFyIEFnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmVfQWdncmVnYXRlQWJvcnRDb250cm9sbGVyKCkpOwogICAgICB2YXIgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyKCkpOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlMiA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZpbGwsIGNhY2hlIH0pIHsKICAgICAgICAgIGlmICh0eXBlb2YgZmlsbCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBmaWxsIGZ1bmN0aW9uIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBjYWNoZSBvYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2YgY2FjaGUuZ2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBjYWNoZS5zZXQgIT09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIGNhY2hlLmRlbGV0ZSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWNoZSBtdXN0IGltcGxlbWVudCBnZXQoa2V5KSwgc2V0KGtleSwgdmFsKSwgYW5kIGFuZCBkZWxldGUoa2V5KSIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlOwogICAgICAgICAgdGhpcy5maWxsQ2FsbGJhY2sgPSBmaWxsOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaXNBYm9ydEV4Y2VwdGlvbihleGNlcHRpb24pIHsKICAgICAgICAgIHJldHVybiBleGNlcHRpb24ubmFtZSA9PT0gIkFib3J0RXJyb3IiIHx8IGV4Y2VwdGlvbi5jb2RlID09PSAiRVJSX0FCT1JURUQiIHx8IGV4Y2VwdGlvbi5tZXNzYWdlID09PSAiQWJvcnRFcnJvcjogYWJvcnRlZCIgfHwgZXhjZXB0aW9uLm1lc3NhZ2UgPT09ICJFcnJvcjogYWJvcnRlZCI7CiAgICAgICAgfQogICAgICAgIGV2aWN0KGtleSwgZW50cnkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmdldChrZXkpID09PSBlbnRyeSkgewogICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgY29uc3QgYWJvcnRlciA9IG5ldyBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXJfMS5kZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBzdGF0dXNSZXBvcnRlciA9IG5ldyBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcl8xLmRlZmF1bHQoKTsKICAgICAgICAgIHN0YXR1c1JlcG9ydGVyLmFkZENhbGxiYWNrKHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgIGNvbnN0IG5ld0VudHJ5ID0gewogICAgICAgICAgICBhYm9ydGVyLAogICAgICAgICAgICBwcm9taXNlOiB0aGlzLmZpbGxDYWxsYmFjayhkYXRhLCBhYm9ydGVyLnNpZ25hbCwgKG1lc3NhZ2UpID0+IHsKICAgICAgICAgICAgICBzdGF0dXNSZXBvcnRlci5jYWxsYmFjayhtZXNzYWdlKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHNldHRsZWQ6IGZhbHNlLAogICAgICAgICAgICBzdGF0dXNSZXBvcnRlciwKICAgICAgICAgICAgZ2V0IGFib3J0ZWQoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRlci5zaWduYWwuYWJvcnRlZDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIG5ld0VudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICBuZXdFbnRyeS5hYm9ydGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsICgpID0+IHsKICAgICAgICAgICAgaWYgKCFuZXdFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5ldmljdChrZXksIG5ld0VudHJ5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBuZXdFbnRyeS5wcm9taXNlLnRoZW4oKCkgPT4gewogICAgICAgICAgICBuZXdFbnRyeS5zZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0sICgpID0+IHsKICAgICAgICAgICAgbmV3RW50cnkuc2V0dGxlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIG5ld0VudHJ5KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGNoZWNrU2luZ2xlUHJvbWlzZShwcm9taXNlLCBzaWduYWwpIHsKICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2luZ2xlQWJvcnQoKSB7CiAgICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiYWJvcnRlZCIpLCB7IGNvZGU6ICJFUlJfQUJPUlRFRCIgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4gewogICAgICAgICAgICBjaGVja0ZvclNpbmdsZUFib3J0KCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9LCAoZXJyb3IpID0+IHsKICAgICAgICAgICAgY2hlY2tGb3JTaW5nbGVBYm9ydCgpOwogICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBoYXMoa2V5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgZ2V0KGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgaWYgKCFzaWduYWwgJiYgZGF0YSBpbnN0YW5jZW9mIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xLkFib3J0U2lnbmFsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInNlY29uZCBnZXQgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhbiBBYm9ydFNpZ25hbCwgcGVyaGFwcyB5b3UgbWVhbnQgdG8gcGFzcyBgbnVsbGAgZm9yIHRoZSBmaWxsIGRhdGE/Iik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjYWNoZUVudHJ5ID0gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIGlmIChjYWNoZUVudHJ5KSB7CiAgICAgICAgICAgIGlmIChjYWNoZUVudHJ5LmFib3J0ZWQgJiYgIWNhY2hlRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBjYWNoZUVudHJ5KTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoa2V5LCBkYXRhLCBzaWduYWwsIHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlRW50cnkucHJvbWlzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYWNoZUVudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICAgIGNhY2hlRW50cnkuc3RhdHVzUmVwb3J0ZXIuYWRkQ2FsbGJhY2soc3RhdHVzQ2FsbGJhY2spOwogICAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UoY2FjaGVFbnRyeS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UodGhpcy5jYWNoZS5nZXQoa2V5KS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgIH0KICAgICAgICBkZWxldGUoa2V5KSB7CiAgICAgICAgICBjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICBpZiAoY2FjaGVkRW50cnkpIHsKICAgICAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgY2FjaGVkRW50cnkuYWJvcnRlci5hYm9ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgY29uc3Qga2V5SXRlciA9IHRoaXMuY2FjaGUua2V5cygpOwogICAgICAgICAgbGV0IGRlbGV0ZUNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpOyAhcmVzdWx0LmRvbmU7IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpKSB7CiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHJlc3VsdC52YWx1ZSk7CiAgICAgICAgICAgIGRlbGV0ZUNvdW50ICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZGVsZXRlQ291bnQ7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzLmRlZmF1bHQgPSBBYm9ydGFibGVQcm9taXNlQ2FjaGUyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9pbmRleC5qcwogIHZhciByZXF1aXJlX2VzbSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgX19pbXBvcnREZWZhdWx0ID0gZXhwb3J0cyAmJiBleHBvcnRzLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyAiZGVmYXVsdCI6IG1vZCB9OwogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9BYm9ydGFibGVQcm9taXNlQ2FjaGUoKSk7CiAgICAgIGV4cG9ydHMuZGVmYXVsdCA9IEFib3J0YWJsZVByb21pc2VDYWNoZV8xLmRlZmF1bHQ7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVAMi4wLjAvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcwogIHZhciByZXF1aXJlX3F1aWNrX2xydSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVAMi4wLjAvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgUXVpY2tMUlUzID0gY2xhc3MgewogICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkgewogICAgICAgICAgaWYgKCEob3B0aW9ucy5tYXhTaXplICYmIG9wdGlvbnMubWF4U2l6ZSA+IDApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBtYXhTaXplYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLm1heFNpemUgPSBvcHRpb25zLm1heFNpemU7CiAgICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICAgICAgdGhpcy5vbGRDYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgIH0KICAgICAgICBfc2V0KGtleSwgdmFsdWUpIHsKICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgdGhpcy5fc2l6ZSsrOwogICAgICAgICAgaWYgKHRoaXMuX3NpemUgPj0gdGhpcy5tYXhTaXplKSB7CiAgICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgICAgICB0aGlzLm9sZENhY2hlID0gdGhpcy5jYWNoZTsKICAgICAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0KGtleSkgewogICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5vbGRDYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMub2xkQ2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICAgIHRoaXMuX3NldChrZXksIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLl9zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgaGFzKGtleSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSkgfHwgdGhpcy5vbGRDYWNoZS5oYXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgcGVlayhrZXkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMub2xkQ2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMub2xkQ2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlbGV0ZShrZXkpIHsKICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgaWYgKGRlbGV0ZWQpIHsKICAgICAgICAgICAgdGhpcy5fc2l6ZS0tOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMub2xkQ2FjaGUuZGVsZXRlKGtleSkgfHwgZGVsZXRlZDsKICAgICAgICB9CiAgICAgICAgY2xlYXIoKSB7CiAgICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7CiAgICAgICAgICB0aGlzLm9sZENhY2hlLmNsZWFyKCk7CiAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICB9CiAgICAgICAgKmtleXMoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIHRoaXMpIHsKICAgICAgICAgICAgeWllbGQga2V5OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAqdmFsdWVzKCkgewogICAgICAgICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgdGhpcykgewogICAgICAgICAgICB5aWVsZCB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkgewogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY2FjaGUpIHsKICAgICAgICAgICAgeWllbGQgaXRlbTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm9sZENhY2hlKSB7CiAgICAgICAgICAgIGNvbnN0IFtrZXldID0gaXRlbTsKICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgICAgeWllbGQgaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXQgc2l6ZSgpIHsKICAgICAgICAgIGxldCBvbGRDYWNoZVNpemUgPSAwOwogICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5vbGRDYWNoZS5rZXlzKCkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgICAgb2xkQ2FjaGVTaXplKys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplICsgb2xkQ2FjaGVTaXplOwogICAgICAgIH0KICAgICAgfTsKICAgICAgbW9kdWxlLmV4cG9ydHMgPSBRdWlja0xSVTM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1mZXRjaEAzLjEuOC9ub2RlX21vZHVsZXMvY3Jvc3MtZmV0Y2gvZGlzdC9icm93c2VyLXBvbHlmaWxsLmpzCiAgdmFyIHJlcXVpcmVfYnJvd3Nlcl9wb2x5ZmlsbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1mZXRjaEAzLjEuOC9ub2RlX21vZHVsZXMvY3Jvc3MtZmV0Y2gvZGlzdC9icm93c2VyLXBvbHlmaWxsLmpzIihleHBvcnRzKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgKGZ1bmN0aW9uKHNlbGYyKSB7CiAgICAgICAgdmFyIGlycmVsZXZhbnQgPSBmdW5jdGlvbihleHBvcnRzMikgewogICAgICAgICAgdmFyIHN1cHBvcnQgPSB7CiAgICAgICAgICAgIHNlYXJjaFBhcmFtczogIlVSTFNlYXJjaFBhcmFtcyIgaW4gc2VsZjIsCiAgICAgICAgICAgIGl0ZXJhYmxlOiAiU3ltYm9sIiBpbiBzZWxmMiAmJiAiaXRlcmF0b3IiIGluIFN5bWJvbCwKICAgICAgICAgICAgYmxvYjogIkZpbGVSZWFkZXIiIGluIHNlbGYyICYmICJCbG9iIiBpbiBzZWxmMiAmJiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgbmV3IEJsb2IoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0oKSwKICAgICAgICAgICAgZm9ybURhdGE6ICJGb3JtRGF0YSIgaW4gc2VsZjIsCiAgICAgICAgICAgIGFycmF5QnVmZmVyOiAiQXJyYXlCdWZmZXIiIGluIHNlbGYyCiAgICAgICAgICB9OwogICAgICAgICAgZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHsKICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgdmFyIHZpZXdDbGFzc2VzID0gWwogICAgICAgICAgICAgICJbb2JqZWN0IEludDhBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IFVpbnQ4QXJyYXldIiwKICAgICAgICAgICAgICAiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEludDE2QXJyYXldIiwKICAgICAgICAgICAgICAiW29iamVjdCBVaW50MTZBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEludDMyQXJyYXldIiwKICAgICAgICAgICAgICAiW29iamVjdCBVaW50MzJBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLAogICAgICAgICAgICAgICJbb2JqZWN0IEZsb2F0NjRBcnJheV0iCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTE7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAic3RyaW5nIikgewogICAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KG5hbWUpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gewogICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHZhbHVlID09PSB2b2lkIDAsIHZhbHVlIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkgewogICAgICAgICAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykgewogICAgICAgICAgICB0aGlzLm1hcCA9IHt9OwogICAgICAgICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHsKICAgICAgICAgICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsKICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKTsKICAgICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7CiAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikgewogICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pOwogICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pOwogICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewogICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTsKICAgICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdOwogICAgICAgICAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAiLCAiICsgdmFsdWUgOiB2YWx1ZTsKICAgICAgICAgIH07CiAgICAgICAgICBIZWFkZXJzLnByb3RvdHlwZVsiZGVsZXRlIl0gPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXTsKICAgICAgICAgIH07CiAgICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGw7CiAgICAgICAgICB9OwogICAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSk7CiAgICAgICAgICB9OwogICAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICB9OwogICAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7CiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHsKICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107CiAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgewogICAgICAgICAgICAgIGl0ZW1zLnB1c2gobmFtZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTsKICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107CiAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgewogICAgICAgICAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7CiAgICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkgewogICAgICAgICAgICBpZiAoYm9keS5ib2R5VXNlZCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYm9keS5ib2R5VXNlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHsKICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7CiAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpOwogICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTsKICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7CiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTsKICAgICAgICAgICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjaGFycy5qb2luKCIiKTsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1ZikgewogICAgICAgICAgICBpZiAoYnVmLnNsaWNlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKTsKICAgICAgICAgICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTsKICAgICAgICAgICAgICByZXR1cm4gdmlldy5idWZmZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIEJvZHkoKSB7CiAgICAgICAgICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7CiAgICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5OwogICAgICAgICAgICAgIGlmICghYm9keSkgewogICAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSAiIjsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkgewogICAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpOwogICAgICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwgInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsIHRoaXMuX2JvZHlCbG9iLnR5cGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Iik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7CiAgICAgICAgICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTsKICAgICAgICAgICAgICAgIGlmIChyZWplY3RlZCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikgewogICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkgewogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTsKICAgICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RlZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkgewogICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbWV0aG9kcyA9IFsiREVMRVRFIiwgIkdFVCIsICJIRUFEIiwgIk9QVElPTlMiLCAiUE9TVCIsICJQVVQiXTsKICAgICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHsKICAgICAgICAgICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZDsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5OwogICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7CiAgICAgICAgICAgICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7CiAgICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzOwogICAgICAgICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2Q7CiAgICAgICAgICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTsKICAgICAgICAgICAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbDsKICAgICAgICAgICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7CiAgICAgICAgICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICJzYW1lLW9yaWdpbiI7CiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykgewogICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgIkdFVCIpOwogICAgICAgICAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7CiAgICAgICAgICAgIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWw7CiAgICAgICAgICAgIHRoaXMucmVmZXJyZXIgPSBudWxsOwogICAgICAgICAgICBpZiAoKHRoaXMubWV0aG9kID09PSAiR0VUIiB8fCB0aGlzLm1ldGhvZCA9PT0gIkhFQUQiKSAmJiBib2R5KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5KTsKICAgICAgICAgIH0KICAgICAgICAgIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pOwogICAgICAgICAgfTsKICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7CiAgICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIGJvZHkudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihieXRlcykgewogICAgICAgICAgICAgIGlmIChieXRlcykgewogICAgICAgICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoIj0iKTsKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCAiICIpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbigiPSIpLnJlcGxhY2UoL1wrL2csICIgIik7CiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBmb3JtOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHsKICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpOwogICAgICAgICAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywgIiAiKTsKICAgICAgICAgICAgcHJlUHJvY2Vzc2VkSGVhZGVycy5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpOwogICAgICAgICAgICAgIGlmIChrZXkpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oIjoiKS50cmltKCk7CiAgICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaGVhZGVyczsKICAgICAgICAgIH0KICAgICAgICAgIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSk7CiAgICAgICAgICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHsKICAgICAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy50eXBlID0gImRlZmF1bHQiOwogICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB2b2lkIDAgPyAyMDAgOiBvcHRpb25zLnN0YXR1czsKICAgICAgICAgICAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMDsKICAgICAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gInN0YXR1c1RleHQiIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAiT0siOwogICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpOwogICAgICAgICAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICIiOwogICAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7CiAgICAgICAgICB9CiAgICAgICAgICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTsKICAgICAgICAgIFJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7CiAgICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cywKICAgICAgICAgICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsCiAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSwKICAgICAgICAgICAgICB1cmw6IHRoaXMudXJsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfTsKICAgICAgICAgIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMCwgc3RhdHVzVGV4dDogIiIgfSk7CiAgICAgICAgICAgIHJlc3BvbnNlLnR5cGUgPSAiZXJyb3IiOwogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdOwogICAgICAgICAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykgewogICAgICAgICAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzLCBoZWFkZXJzOiB7IGxvY2F0aW9uOiB1cmwgfSB9KTsKICAgICAgICAgIH07CiAgICAgICAgICBleHBvcnRzMi5ET01FeGNlcHRpb24gPSBzZWxmMi5ET01FeGNlcHRpb247CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBuZXcgZXhwb3J0czIuRE9NRXhjZXB0aW9uKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZXhwb3J0czIuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkgewogICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKTsKICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2s7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGV4cG9ydHMyLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7CiAgICAgICAgICAgIGV4cG9ydHMyLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBleHBvcnRzMi5ET01FeGNlcHRpb247CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBmZXRjaDIoaW5wdXQsIGluaXQyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0Mik7CiAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IGV4cG9ydHMyLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsICJBYm9ydEVycm9yIikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgICAgICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7CiAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cywKICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgIiIpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSAicmVzcG9uc2VVUkwiIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTsKICAgICAgICAgICAgICAgIHZhciBib2R5ID0gInJlc3BvbnNlIiBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBleHBvcnRzMi5ET01FeGNlcHRpb24oIkFib3J0ZWQiLCAiQWJvcnRFcnJvciIpKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7CiAgICAgICAgICAgICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICJpbmNsdWRlIikgewogICAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAib21pdCIpIHsKICAgICAgICAgICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCJyZXNwb25zZVR5cGUiIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHsKICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAiYmxvYiI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7CiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGFib3J0WGhyKTsKICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBhYm9ydFhocik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gInVuZGVmaW5lZCIgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGZldGNoMi5wb2x5ZmlsbCA9IHRydWU7CiAgICAgICAgICBpZiAoIXNlbGYyLmZldGNoKSB7CiAgICAgICAgICAgIHNlbGYyLmZldGNoID0gZmV0Y2gyOwogICAgICAgICAgICBzZWxmMi5IZWFkZXJzID0gSGVhZGVyczsKICAgICAgICAgICAgc2VsZjIuUmVxdWVzdCA9IFJlcXVlc3Q7CiAgICAgICAgICAgIHNlbGYyLlJlc3BvbnNlID0gUmVzcG9uc2U7CiAgICAgICAgICB9CiAgICAgICAgICBleHBvcnRzMi5IZWFkZXJzID0gSGVhZGVyczsKICAgICAgICAgIGV4cG9ydHMyLlJlcXVlc3QgPSBSZXF1ZXN0OwogICAgICAgICAgZXhwb3J0czIuUmVzcG9uc2UgPSBSZXNwb25zZTsKICAgICAgICAgIGV4cG9ydHMyLmZldGNoID0gZmV0Y2gyOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgICAgICByZXR1cm4gZXhwb3J0czI7CiAgICAgICAgfSh7fSk7CiAgICAgIH0pKHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiBleHBvcnRzKTsKICAgIH0KICB9KTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvYmFtL2JhbS13b3JrZXIudHM/d29ya2VyJmlubGluZT93b3JrZXJfZmlsZQogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvd29ya2VyLm1qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X3dvcmtlciA9IF9fdG9Nb2R1bGUocmVxdWlyZV93b3JrZXIoKSk7CiAgdmFyIGV4cG9zZSA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5leHBvc2U7CiAgdmFyIHJlZ2lzdGVyU2VyaWFsaXplciA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5yZWdpc3RlclNlcmlhbGl6ZXI7CiAgdmFyIFRyYW5zZmVyID0gaW1wb3J0X3dvcmtlci5kZWZhdWx0LlRyYW5zZmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vYmFpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb25nKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS92aXJ0dWFsT2Zmc2V0LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBWaXJ0dWFsT2Zmc2V0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoYmxvY2tQb3NpdGlvbiwgZGF0YVBvc2l0aW9uKSB7CiAgICAgIHRoaXMuYmxvY2tQb3NpdGlvbiA9IGJsb2NrUG9zaXRpb247CiAgICAgIHRoaXMuZGF0YVBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBgJHt0aGlzLmJsb2NrUG9zaXRpb259OiR7dGhpcy5kYXRhUG9zaXRpb259YDsKICAgIH0KICAgIGNvbXBhcmVUbyhiKSB7CiAgICAgIHJldHVybiB0aGlzLmJsb2NrUG9zaXRpb24gLSBiLmJsb2NrUG9zaXRpb24gfHwgdGhpcy5kYXRhUG9zaXRpb24gLSBiLmRhdGFQb3NpdGlvbjsKICAgIH0KICAgIHN0YXRpYyBtaW4oLi4uYXJncykgewogICAgICBsZXQgbWluOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGZvciAoOyAhbWluOyBpICs9IDEpIHsKICAgICAgICBtaW4gPSBhcmdzW2ldOwogICAgICB9CiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgIGlmIChtaW4uY29tcGFyZVRvKGFyZ3NbaV0pID4gMCkgewogICAgICAgICAgbWluID0gYXJnc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG1pbjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlcywgb2Zmc2V0ID0gMCwgYmlnZW5kaWFuID0gZmFsc2UpIHsKICAgIGlmIChiaWdlbmRpYW4pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWctZW5kaWFuIHZpcnR1YWwgZmlsZSBvZmZzZXRzIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBWaXJ0dWFsT2Zmc2V0KGJ5dGVzW29mZnNldCArIDddICogMTA5OTUxMTYyNzc3NiArIGJ5dGVzW29mZnNldCArIDZdICogNDI5NDk2NzI5NiArIGJ5dGVzW29mZnNldCArIDVdICogMTY3NzcyMTYgKyBieXRlc1tvZmZzZXQgKyA0XSAqIDY1NTM2ICsgYnl0ZXNbb2Zmc2V0ICsgM10gKiAyNTYgKyBieXRlc1tvZmZzZXQgKyAyXSwgYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCB8IGJ5dGVzW29mZnNldF0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vY2h1bmsuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIENodW5rID0gY2xhc3MgewogICAgY29uc3RydWN0b3IobWludiwgbWF4diwgYmluLCBmZXRjaGVkU2l6ZSA9IHZvaWQgMCkgewogICAgICB0aGlzLm1pbnYgPSBtaW52OwogICAgICB0aGlzLm1heHYgPSBtYXh2OwogICAgICB0aGlzLmJpbiA9IGJpbjsKICAgICAgdGhpcy5fZmV0Y2hlZFNpemUgPSBmZXRjaGVkU2l6ZTsKICAgIH0KICAgIHRvVW5pcXVlU3RyaW5nKCkgewogICAgICByZXR1cm4gYCR7dGhpcy5taW52fS4uJHt0aGlzLm1heHZ9IChiaW4gJHt0aGlzLmJpbn0sIGZldGNoZWRTaXplICR7dGhpcy5mZXRjaGVkU2l6ZSgpfSlgOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvVW5pcXVlU3RyaW5nKCk7CiAgICB9CiAgICBjb21wYXJlVG8oYikgewogICAgICByZXR1cm4gdGhpcy5taW52LmNvbXBhcmVUbyhiLm1pbnYpIHx8IHRoaXMubWF4di5jb21wYXJlVG8oYi5tYXh2KSB8fCB0aGlzLmJpbiAtIGIuYmluOwogICAgfQogICAgZmV0Y2hlZFNpemUoKSB7CiAgICAgIGlmICh0aGlzLl9mZXRjaGVkU2l6ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoZWRTaXplOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1heHYuYmxvY2tQb3NpdGlvbiArICgxIDw8IDE2KSAtIHRoaXMubWludi5ibG9ja1Bvc2l0aW9uOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL2luZGV4RmlsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgSW5kZXhGaWxlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoeyBmaWxlaGFuZGxlLCByZW5hbWVSZWZTZXEgPSAobikgPT4gbiB9KSB7CiAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGU7CiAgICAgIHRoaXMucmVuYW1lUmVmU2VxID0gcmVuYW1lUmVmU2VxOwogICAgfQogICAgX2ZpbmRGaXJzdERhdGEoZGF0YSwgdmlydHVhbE9mZnNldCkgewogICAgICBjb25zdCBjdXJyZW50RmRsID0gZGF0YS5maXJzdERhdGFMaW5lOwogICAgICBpZiAoY3VycmVudEZkbCkgewogICAgICAgIGRhdGEuZmlyc3REYXRhTGluZSA9IGN1cnJlbnRGZGwuY29tcGFyZVRvKHZpcnR1YWxPZmZzZXQpID4gMCA/IHZpcnR1YWxPZmZzZXQgOiBjdXJyZW50RmRsOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEuZmlyc3REYXRhTGluZSA9IHZpcnR1YWxPZmZzZXQ7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHBhcnNlKG9wdHMgPSB7fSkgewogICAgICBpZiAoIXRoaXMuc2V0dXBQKSB7CiAgICAgICAgdGhpcy5zZXR1cFAgPSB0aGlzLl9wYXJzZShvcHRzKS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgdGhpcy5zZXR1cFAgPSB2b2lkIDA7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnNldHVwUDsKICAgIH0KICAgIGFzeW5jIGhhc1JlZlNlcShzZXFJZCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiAhISgoYXdhaXQgdGhpcy5wYXJzZShvcHRzKSkuaW5kaWNlc1tzZXFJZF0gfHwge30pLmJpbkluZGV4OwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3V0aWwuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gdGltZW91dChtcykgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7CiAgfQogIGZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nKSB7CiAgICBpZiAobG9uZy5ncmVhdGVyVGhhbihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgfHwgbG9uZy5sZXNzVGhhbihOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICB9CiAgICByZXR1cm4gbG9uZy50b051bWJlcigpOwogIH0KICBmdW5jdGlvbiBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCkgewogICAgaWYgKCFzaWduYWwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgIGlmICh0eXBlb2YgRE9NRXhjZXB0aW9uICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oImFib3J0ZWQiLCAiQWJvcnRFcnJvciIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoImFib3J0ZWQiKTsKICAgICAgICBlLmNvZGUgPSAiRVJSX0FCT1JURUQiOwogICAgICAgIHRocm93IGU7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gYWJvcnRCcmVha1BvaW50KHNpZ25hbCkgewogICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCk7CiAgfQogIGZ1bmN0aW9uIGNhbk1lcmdlQmxvY2tzKGNodW5rMSwgY2h1bmsyKSB7CiAgICByZXR1cm4gY2h1bmsyLm1pbnYuYmxvY2tQb3NpdGlvbiAtIGNodW5rMS5tYXh2LmJsb2NrUG9zaXRpb24gPCA2NWUzICYmIGNodW5rMi5tYXh2LmJsb2NrUG9zaXRpb24gLSBjaHVuazEubWludi5ibG9ja1Bvc2l0aW9uIDwgNWU2OwogIH0KICBmdW5jdGlvbiBtYWtlT3B0cyhvYmogPSB7fSkgewogICAgcmV0dXJuICJhYm9ydGVkIiBpbiBvYmogPyB7IHNpZ25hbDogb2JqIH0gOiBvYmo7CiAgfQogIGZ1bmN0aW9uIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KSB7CiAgICBjb25zdCBtZXJnZWRDaHVua3MgPSBbXTsKICAgIGxldCBsYXN0Q2h1bmsgPSBudWxsOwogICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGNodW5rczsKICAgIH0KICAgIGNodW5rcy5zb3J0KChjMCwgYzEpID0+IHsKICAgICAgY29uc3QgZGlmID0gYzAubWludi5ibG9ja1Bvc2l0aW9uIC0gYzEubWludi5ibG9ja1Bvc2l0aW9uOwogICAgICBpZiAoZGlmICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGRpZjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gYzAubWludi5kYXRhUG9zaXRpb24gLSBjMS5taW52LmRhdGFQb3NpdGlvbjsKICAgICAgfQogICAgfSk7CiAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHsKICAgICAgaWYgKCFsb3dlc3QgfHwgY2h1bmsubWF4di5jb21wYXJlVG8obG93ZXN0KSA+IDApIHsKICAgICAgICBpZiAobGFzdENodW5rID09PSBudWxsKSB7CiAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICBsYXN0Q2h1bmsgPSBjaHVuazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGNhbk1lcmdlQmxvY2tzKGxhc3RDaHVuaywgY2h1bmspKSB7CiAgICAgICAgICAgIGlmIChjaHVuay5tYXh2LmNvbXBhcmVUbyhsYXN0Q2h1bmsubWF4dikgPiAwKSB7CiAgICAgICAgICAgICAgbGFzdENodW5rLm1heHYgPSBjaHVuay5tYXh2OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbWVyZ2VkQ2h1bmtzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vYmFpLmpzCiAgdmFyIEJBSV9NQUdJQyA9IDIxNTc4MDUwOwogIGZ1bmN0aW9uIHJvdW5kRG93bihuLCBtdWx0aXBsZSkgewogICAgcmV0dXJuIG4gLSBuICUgbXVsdGlwbGU7CiAgfQogIGZ1bmN0aW9uIHJvdW5kVXAobiwgbXVsdGlwbGUpIHsKICAgIHJldHVybiBuIC0gbiAlIG11bHRpcGxlICsgbXVsdGlwbGU7CiAgfQogIHZhciBCQUkgPSBjbGFzcyBleHRlbmRzIEluZGV4RmlsZSB7CiAgICBwYXJzZVBzZXVkb0JpbihieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihpbXBvcnRfbG9uZy5kZWZhdWx0LmZyb21CeXRlc0xFKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzLCBvZmZzZXQgKyAxNiwgb2Zmc2V0ICsgMjQpLCB0cnVlKSk7CiAgICAgIHJldHVybiB7IGxpbmVDb3VudCB9OwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZklkLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgcHJvbSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGNvbnN0IGluZGV4ID0gcHJvbS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFpbmRleCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCByZXQgPSBpbmRleC5zdGF0cyB8fCB7fTsKICAgICAgcmV0dXJuIHJldC5saW5lQ291bnQgPT09IHZvaWQgMCA/IC0xIDogcmV0LmxpbmVDb3VudDsKICAgIH0KICAgIGZldGNoQmFpKG9wdHMgPSB7fSkgewogICAgICBpZiAoIXRoaXMuYmFpUCkgewogICAgICAgIHRoaXMuYmFpUCA9IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZShvcHRzKS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgdGhpcy5iYWlQID0gdm9pZCAwOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5iYWlQOwogICAgfQogICAgYXN5bmMgX3BhcnNlKCkgewogICAgICBjb25zdCBkYXRhID0geyBiYWk6IHRydWUsIG1heEJsb2NrU2l6ZTogMSA8PCAxNiB9OwogICAgICBjb25zdCBieXRlcyA9IGF3YWl0IHRoaXMuZmV0Y2hCYWkoKTsKICAgICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSAhPT0gQkFJX01BR0lDKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBCQUkgZmlsZSIpOwogICAgICB9CiAgICAgIGRhdGEucmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KTsKICAgICAgY29uc3QgZGVwdGggPSA1OwogICAgICBjb25zdCBiaW5MaW1pdCA9ICgoMSA8PCAoZGVwdGggKyAxKSAqIDMpIC0gMSkgLyA3OwogICAgICBkYXRhLmluZGljZXMgPSBuZXcgQXJyYXkoZGF0YS5yZWZDb3VudCk7CiAgICAgIGxldCBjdXJyT2Zmc2V0ID0gODsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJlZkNvdW50OyBpICs9IDEpIHsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgY29uc3QgYmluSW5kZXggPSB7fTsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICAgIGlmIChiaW4gPT09IGJpbkxpbWl0ICsgMSkgewogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCk7CiAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMzI7CiAgICAgICAgICB9IGVsc2UgaWYgKGJpbiA+IGJpbkxpbWl0ICsgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhaSBpbmRleCBjb250YWlucyB0b28gbWFueSBiaW5zLCBwbGVhc2UgdXNlIENTSSIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IG5ldyBBcnJheShjaHVua0NvdW50KTsKICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjaHVua0NvdW50OyBrICs9IDEpIHsKICAgICAgICAgICAgICBjb25zdCB1ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgICBjb25zdCB2ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0ICsgOCk7CiAgICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgICB0aGlzLl9maW5kRmlyc3REYXRhKGRhdGEsIHUpOwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxpbmVhckNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgIGNvbnN0IGxpbmVhckluZGV4ID0gbmV3IEFycmF5KGxpbmVhckNvdW50KTsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmVhckNvdW50OyBrICs9IDEpIHsKICAgICAgICAgIGxpbmVhckluZGV4W2tdID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gODsKICAgICAgICAgIHRoaXMuX2ZpbmRGaXJzdERhdGEoZGF0YSwgbGluZWFySW5kZXhba10pOwogICAgICAgIH0KICAgICAgICBkYXRhLmluZGljZXNbaV0gPSB7IGJpbkluZGV4LCBsaW5lYXJJbmRleCwgc3RhdHMgfTsKICAgICAgfQogICAgICByZXR1cm4gZGF0YTsKICAgIH0KICAgIGFzeW5jIGluZGV4Q292KHNlcUlkLCBzdGFydCwgZW5kLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgdiA9IDE2Mzg0OwogICAgICBjb25zdCByYW5nZSA9IHN0YXJ0ICE9PSB2b2lkIDA7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGNvbnN0IHNlcUlkeCA9IGluZGV4RGF0YS5pbmRpY2VzW3NlcUlkXTsKICAgICAgaWYgKCFzZXFJZHgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgeyBsaW5lYXJJbmRleCA9IFtdLCBzdGF0cyB9ID0gc2VxSWR4OwogICAgICBpZiAoIWxpbmVhckluZGV4Lmxlbmd0aCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCBlID0gZW5kICE9PSB2b2lkIDAgPyByb3VuZFVwKGVuZCwgdikgOiAobGluZWFySW5kZXgubGVuZ3RoIC0gMSkgKiB2OwogICAgICBjb25zdCBzID0gc3RhcnQgIT09IHZvaWQgMCA/IHJvdW5kRG93bihzdGFydCwgdikgOiAwOwogICAgICBsZXQgZGVwdGhzOwogICAgICBpZiAocmFuZ2UpIHsKICAgICAgICBkZXB0aHMgPSBuZXcgQXJyYXkoKGUgLSBzKSAvIHYpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlcHRocyA9IG5ldyBBcnJheShsaW5lYXJJbmRleC5sZW5ndGggLSAxKTsKICAgICAgfQogICAgICBjb25zdCB0b3RhbFNpemUgPSBsaW5lYXJJbmRleFtsaW5lYXJJbmRleC5sZW5ndGggLSAxXS5ibG9ja1Bvc2l0aW9uOwogICAgICBpZiAoZSA+IChsaW5lYXJJbmRleC5sZW5ndGggLSAxKSAqIHYpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInF1ZXJ5IG91dHNpZGUgb2YgcmFuZ2Ugb2YgbGluZWFyIGluZGV4Iik7CiAgICAgIH0KICAgICAgbGV0IGN1cnJlbnRQb3MgPSBsaW5lYXJJbmRleFtzIC8gdl0uYmxvY2tQb3NpdGlvbjsKICAgICAgZm9yIChsZXQgaSA9IHMgLyB2LCBqID0gMDsgaSA8IGUgLyB2OyBpKyssIGorKykgewogICAgICAgIGRlcHRoc1tqXSA9IHsKICAgICAgICAgIHNjb3JlOiBsaW5lYXJJbmRleFtpICsgMV0uYmxvY2tQb3NpdGlvbiAtIGN1cnJlbnRQb3MsCiAgICAgICAgICBzdGFydDogaSAqIHYsCiAgICAgICAgICBlbmQ6IGkgKiB2ICsgdgogICAgICAgIH07CiAgICAgICAgY3VycmVudFBvcyA9IGxpbmVhckluZGV4W2kgKyAxXS5ibG9ja1Bvc2l0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBkZXB0aHMubWFwKChkKSA9PiB7CiAgICAgICAgcmV0dXJuIHsgLi4uZCwgc2NvcmU6IGQuc2NvcmUgKiBzdGF0cy5saW5lQ291bnQgLyB0b3RhbFNpemUgfTsKICAgICAgfSk7CiAgICB9CiAgICByZWcyYmlucyhiZWcsIGVuZCkgewogICAgICBlbmQgLT0gMTsKICAgICAgcmV0dXJuIFsKICAgICAgICBbMCwgMF0sCiAgICAgICAgWzEgKyAoYmVnID4+IDI2KSwgMSArIChlbmQgPj4gMjYpXSwKICAgICAgICBbOSArIChiZWcgPj4gMjMpLCA5ICsgKGVuZCA+PiAyMyldLAogICAgICAgIFs3MyArIChiZWcgPj4gMjApLCA3MyArIChlbmQgPj4gMjApXSwKICAgICAgICBbNTg1ICsgKGJlZyA+PiAxNyksIDU4NSArIChlbmQgPj4gMTcpXSwKICAgICAgICBbNDY4MSArIChiZWcgPj4gMTQpLCA0NjgxICsgKGVuZCA+PiAxNCldCiAgICAgIF07CiAgICB9CiAgICBhc3luYyBibG9ja3NGb3JSYW5nZShyZWZJZCwgbWluLCBtYXgsIG9wdHMgPSB7fSkgewogICAgICBpZiAobWluIDwgMCkgewogICAgICAgIG1pbiA9IDA7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghYmEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdCaW5zID0gdGhpcy5yZWcyYmlucyhtaW4sIG1heCk7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IFtzdGFydCwgZW5kXSBvZiBvdmVybGFwcGluZ0JpbnMpIHsKICAgICAgICBmb3IgKGxldCBiaW4gPSBzdGFydDsgYmluIDw9IGVuZDsgYmluKyspIHsKICAgICAgICAgIGlmIChiYS5iaW5JbmRleFtiaW5dKSB7CiAgICAgICAgICAgIGNvbnN0IGJpbkNodW5rcyA9IGJhLmJpbkluZGV4W2Jpbl07CiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgYmluQ2h1bmtzLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICAgICAgY2h1bmtzLnB1c2gobmV3IENodW5rKGJpbkNodW5rc1tjXS5taW52LCBiaW5DaHVua3NbY10ubWF4diwgYmluKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgbmludHYgPSBiYS5saW5lYXJJbmRleC5sZW5ndGg7CiAgICAgIGxldCBsb3dlc3QgPSBudWxsOwogICAgICBjb25zdCBtaW5MaW4gPSBNYXRoLm1pbihtaW4gPj4gMTQsIG5pbnR2IC0gMSk7CiAgICAgIGNvbnN0IG1heExpbiA9IE1hdGgubWluKG1heCA+PiAxNCwgbmludHYgLSAxKTsKICAgICAgZm9yIChsZXQgaSA9IG1pbkxpbjsgaSA8PSBtYXhMaW47ICsraSkgewogICAgICAgIGNvbnN0IHZwID0gYmEubGluZWFySW5kZXhbaV07CiAgICAgICAgaWYgKHZwKSB7CiAgICAgICAgICBpZiAoIWxvd2VzdCB8fCB2cC5jb21wYXJlVG8obG93ZXN0KSA8IDApIHsKICAgICAgICAgICAgbG93ZXN0ID0gdnA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvcHRpbWl6ZUNodW5rcyhjaHVua3MsIGxvd2VzdCk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vY3NpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzMgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9iZ3pGaWxlaGFuZGxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNiA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vaW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9sb2NhbEZpbGUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9jYWxGaWxlKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL3JlbW90ZUZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXIyID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKICB2YXIgUmVtb3RlRmlsZSA9IGNsYXNzIHsKICAgIGFzeW5jIGdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSkgewogICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmJ1ZmZlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiByZXNwb25zZS5idWZmZXIoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2UuYXJyYXlCdWZmZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTsKICAgICAgICByZXR1cm4gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmZyb20ocmVzcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBIVFRQIHJlc3BvbnNlIG9iamVjdCwgaGFzIG5vIGJ1ZmZlciBtZXRob2QsIGFuZCBubyBhcnJheUJ1ZmZlciBtZXRob2QiKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRzID0ge30pIHsKICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0ge307CiAgICAgIHRoaXMudXJsID0gc291cmNlOwogICAgICBjb25zdCBmZXRjaDIgPSBvcHRzLmZldGNoIHx8IGdsb2JhbFRoaXMuZmV0Y2guYmluZChnbG9iYWxUaGlzKTsKICAgICAgaWYgKCFmZXRjaDIpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBubyBmZXRjaCBmdW5jdGlvbiBzdXBwbGllZCwgYW5kIG5vbmUgZm91bmQgaW4gZ2xvYmFsIGVudmlyb25tZW50YCk7CiAgICAgIH0KICAgICAgaWYgKG9wdHMub3ZlcnJpZGVzKSB7CiAgICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0gb3B0cy5vdmVycmlkZXM7CiAgICAgIH0KICAgICAgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uID0gZmV0Y2gyOwogICAgfQogICAgYXN5bmMgZmV0Y2goaW5wdXQsIGluaXQyKSB7CiAgICAgIGxldCByZXNwb25zZTsKICAgICAgdHJ5IHsKICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgaW5pdDIpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgaWYgKGAke2V9YC5pbmNsdWRlcygiRmFpbGVkIHRvIGZldGNoIikpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgZ2VuZXJpYy1maWxlaGFuZGxlOiByZWZldGNoaW5nICR7aW5wdXR9IHRvIGF0dGVtcHQgdG8gd29yayBhcm91bmQgY2hyb21lIENPUlMgaGVhZGVyIGNhY2hpbmcgYnVnYCk7CiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgewogICAgICAgICAgICAuLi5pbml0MiwKICAgICAgICAgICAgY2FjaGU6ICJyZWxvYWQiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQogICAgYXN5bmMgcmVhZChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgJiYgcG9zaXRpb24gPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIke3RoaXMudXJsfSBmZXRjaCByZXR1cm5lZCBzdGF0dXMgMjAwLCBleHBlY3RlZCAyMDYiKTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZldGNoaW5nICR7dGhpcy51cmx9YCk7CiAgICB9CiAgICBhc3luYyByZWFkRmlsZShvcHRpb25zID0ge30pIHsKICAgICAgbGV0IGVuY29kaW5nOwogICAgICBsZXQgb3B0czsKICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIikgewogICAgICAgIGVuY29kaW5nID0gb3B0aW9uczsKICAgICAgICBvcHRzID0ge307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nOwogICAgICAgIG9wdHMgPSBvcHRpb25zOwogICAgICAgIGRlbGV0ZSBvcHRzLmVuY29kaW5nOwogICAgICB9CiAgICAgIGNvbnN0IHsgaGVhZGVycyA9IHt9LCBzaWduYWwsIG92ZXJyaWRlcyA9IHt9IH0gPSBvcHRzOwogICAgICBjb25zdCBhcmdzID0gewogICAgICAgIGhlYWRlcnMsCiAgICAgICAgbWV0aG9kOiAiR0VUIiwKICAgICAgICByZWRpcmVjdDogImZvbGxvdyIsCiAgICAgICAgbW9kZTogImNvcnMiLAogICAgICAgIHNpZ25hbCwKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdlbmVyaWMtZmlsZWhhbmRsZSBmYWlsZWQgdG8gZmV0Y2giKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZmV0Y2hpbmcgJHt0aGlzLnVybH1gKSwgewogICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IikgewogICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBlbmNvZGluZzogJHtlbmNvZGluZ31gKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJGcm9tUmVzcG9uc2UocmVzcG9uc2UpOwogICAgfQogICAgYXN5bmMgc3RhdCgpIHsKICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgY29uc3QgYnVmID0gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmFsbG9jVW5zYWZlKDEwKTsKICAgICAgICBhd2FpdCB0aGlzLnJlYWQoYnVmLCAwLCAxMCwgMCk7CiAgICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBkZXRlcm1pbmUgc2l6ZSBvZiBmaWxlIGF0ICR7dGhpcy51cmx9YCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zdGF0OwogICAgfQogICAgYXN5bmMgY2xvc2UoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2Jsb2JGaWxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyMyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vZmlsZWhhbmRsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS91bnppcC1wYWtvLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNCA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CiAgdmFyIGltcG9ydF9wYWtvID0gX190b01vZHVsZShyZXF1aXJlX3Bha28oKSk7CiAgYXN5bmMgZnVuY3Rpb24gdW56aXAoaW5wdXREYXRhKSB7CiAgICB0cnkgewogICAgICBsZXQgc3RybTsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGxldCBpID0gMDsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGxldCB0b3RhbFNpemUgPSAwOwogICAgICBsZXQgaW5mbGF0b3I7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCByZW1haW5pbmdJbnB1dCA9IGlucHV0RGF0YS5zdWJhcnJheShwb3MpOwogICAgICAgIGluZmxhdG9yID0gbmV3IGltcG9ydF9wYWtvLkluZmxhdGUoKTsKICAgICAgICAoeyBzdHJtIH0gPSBpbmZsYXRvcik7CiAgICAgICAgaW5mbGF0b3IucHVzaChyZW1haW5pbmdJbnB1dCwgaW1wb3J0X3Bha28uWl9TWU5DX0ZMVVNIKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKTsKICAgICAgICB9CiAgICAgICAgcG9zICs9IHN0cm0ubmV4dF9pbjsKICAgICAgICBjaHVua3NbaV0gPSBpbmZsYXRvci5yZXN1bHQ7CiAgICAgICAgdG90YWxTaXplICs9IGNodW5rc1tpXS5sZW5ndGg7CiAgICAgICAgaSArPSAxOwogICAgICB9IHdoaWxlIChzdHJtLmF2YWlsX2luKTsKICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxTaXplKTsKICAgICAgZm9yIChsZXQgaTIgPSAwLCBvZmZzZXQgPSAwOyBpMiA8IGNodW5rcy5sZW5ndGg7IGkyKyspIHsKICAgICAgICByZXN1bHQuc2V0KGNodW5rc1tpMl0sIG9mZnNldCk7CiAgICAgICAgb2Zmc2V0ICs9IGNodW5rc1tpMl0ubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAoYCR7ZX1gLm1hdGNoKC9pbmNvcnJlY3QgaGVhZGVyIGNoZWNrLykpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2JsZW0gZGVjb21wcmVzc2luZyBibG9jazogaW5jb3JyZWN0IGd6aXAgaGVhZGVyIGNoZWNrIik7CiAgICAgIH0KICAgICAgdGhyb3cgZTsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gdW56aXBDaHVua1NsaWNlKGlucHV0RGF0YSwgY2h1bmspIHsKICAgIHRyeSB7CiAgICAgIGxldCBzdHJtOwogICAgICBjb25zdCB7IG1pbnYsIG1heHYgfSA9IGNodW5rOwogICAgICBsZXQgY3BvcyA9IG1pbnYuYmxvY2tQb3NpdGlvbjsKICAgICAgbGV0IGRwb3MgPSBtaW52LmRhdGFQb3NpdGlvbjsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGNvbnN0IGNwb3NpdGlvbnMgPSBbXTsKICAgICAgY29uc3QgZHBvc2l0aW9ucyA9IFtdOwogICAgICBsZXQgdG90YWxTaXplID0gMDsKICAgICAgbGV0IGkgPSAwOwogICAgICBkbyB7CiAgICAgICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc3ViYXJyYXkoY3BvcyAtIG1pbnYuYmxvY2tQb3NpdGlvbik7CiAgICAgICAgY29uc3QgaW5mbGF0b3IgPSBuZXcgaW1wb3J0X3Bha28uSW5mbGF0ZSgpOwogICAgICAgICh7IHN0cm0gfSA9IGluZmxhdG9yKTsKICAgICAgICBpbmZsYXRvci5wdXNoKHJlbWFpbmluZ0lucHV0LCBpbXBvcnRfcGFrby5aX1NZTkNfRkxVU0gpOwogICAgICAgIGlmIChpbmZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZsYXRvci5tc2cpOwogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIyID0gaW5mbGF0b3IucmVzdWx0OwogICAgICAgIGNodW5rcy5wdXNoKGJ1ZmZlcjIpOwogICAgICAgIGxldCBsZW4gPSBidWZmZXIyLmxlbmd0aDsKICAgICAgICBjcG9zaXRpb25zLnB1c2goY3Bvcyk7CiAgICAgICAgZHBvc2l0aW9ucy5wdXNoKGRwb3MpOwogICAgICAgIGlmIChjaHVua3MubGVuZ3RoID09PSAxICYmIG1pbnYuZGF0YVBvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3NbMF0gPSBjaHVua3NbMF0uc3ViYXJyYXkobWludi5kYXRhUG9zaXRpb24pOwogICAgICAgICAgbGVuID0gY2h1bmtzWzBdLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3JpZ0Nwb3MgPSBjcG9zOwogICAgICAgIGNwb3MgKz0gc3RybS5uZXh0X2luOwogICAgICAgIGRwb3MgKz0gbGVuOwogICAgICAgIGlmIChvcmlnQ3BvcyA+PSBtYXh2LmJsb2NrUG9zaXRpb24pIHsKICAgICAgICAgIGNodW5rc1tpXSA9IGNodW5rc1tpXS5zdWJhcnJheSgwLCBtYXh2LmJsb2NrUG9zaXRpb24gPT09IG1pbnYuYmxvY2tQb3NpdGlvbiA/IG1heHYuZGF0YVBvc2l0aW9uIC0gbWludi5kYXRhUG9zaXRpb24gKyAxIDogbWF4di5kYXRhUG9zaXRpb24gKyAxKTsKICAgICAgICAgIGNwb3NpdGlvbnMucHVzaChjcG9zKTsKICAgICAgICAgIGRwb3NpdGlvbnMucHVzaChkcG9zKTsKICAgICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7CiAgICAgIGZvciAobGV0IGkyID0gMCwgb2Zmc2V0ID0gMDsgaTIgPCBjaHVua3MubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgcmVzdWx0LnNldChjaHVua3NbaTJdLCBvZmZzZXQpOwogICAgICAgIG9mZnNldCArPSBjaHVua3NbaTJdLmxlbmd0aDsKICAgICAgfQogICAgICBjb25zdCBidWZmZXIgPSBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgICByZXR1cm4geyBidWZmZXIsIGNwb3NpdGlvbnMsIGRwb3NpdGlvbnMgfTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGAke2V9YC5tYXRjaCgvaW5jb3JyZWN0IGhlYWRlciBjaGVjay8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJwcm9ibGVtIGRlY29tcHJlc3NpbmcgYmxvY2s6IGluY29ycmVjdCBnemlwIGhlYWRlciBjaGVjayIpOwogICAgICB9CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2d6aUluZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS9jc2kuanMKICB2YXIgQ1NJMV9NQUdJQyA9IDIxNTgyNjU5OwogIHZhciBDU0kyX01BR0lDID0gMzgzNTk4NzU7CiAgZnVuY3Rpb24gbHNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIG51bSAqIDIgKiogYml0czsKICB9CiAgZnVuY3Rpb24gcnNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIE1hdGguZmxvb3IobnVtIC8gMiAqKiBiaXRzKTsKICB9CiAgdmFyIENTSSA9IGNsYXNzIGV4dGVuZHMgSW5kZXhGaWxlIHsKICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHsKICAgICAgc3VwZXIoYXJncyk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gMDsKICAgICAgdGhpcy5kZXB0aCA9IDA7CiAgICAgIHRoaXMubWluU2hpZnQgPSAwOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZklkKSB7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2UoKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgaWR4ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoIWlkeCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCB7IHN0YXRzIH0gPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmIChzdGF0cykgewogICAgICAgIHJldHVybiBzdGF0cy5saW5lQ291bnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgYXN5bmMgaW5kZXhDb3YoKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIHBhcnNlQXV4RGF0YShieXRlcywgb2Zmc2V0LCBhdXhMZW5ndGgpIHsKICAgICAgaWYgKGF1eExlbmd0aCA8IDMwKSB7CiAgICAgICAgcmV0dXJuIHt9OwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSB7fTsKICAgICAgZGF0YS5mb3JtYXRGbGFncyA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCk7CiAgICAgIGRhdGEuY29vcmRpbmF0ZVR5cGUgPSBkYXRhLmZvcm1hdEZsYWdzICYgNjU1MzYgPyAiemVyby1iYXNlZC1oYWxmLW9wZW4iIDogIjEtYmFzZWQtY2xvc2VkIjsKICAgICAgZGF0YS5mb3JtYXQgPSB7IDA6ICJnZW5lcmljIiwgMTogIlNBTSIsIDI6ICJWQ0YiIH1bZGF0YS5mb3JtYXRGbGFncyAmIDE1XTsKICAgICAgaWYgKCFkYXRhLmZvcm1hdCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBUYWJpeCBwcmVzZXQgZm9ybWF0IGZsYWdzICR7ZGF0YS5mb3JtYXRGbGFnc31gKTsKICAgICAgfQogICAgICBkYXRhLmNvbHVtbk51bWJlcnMgPSB7CiAgICAgICAgcmVmOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyA0KSwKICAgICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgOCksCiAgICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxMikKICAgICAgfTsKICAgICAgZGF0YS5tZXRhVmFsdWUgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxNik7CiAgICAgIGRhdGEubWV0YUNoYXIgPSBkYXRhLm1ldGFWYWx1ZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YS5tZXRhVmFsdWUpIDogIiI7CiAgICAgIGRhdGEuc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMjApOwogICAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDI0KTsKICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zdWJhcnJheShvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMjggKyBuYW1lU2VjdGlvbkxlbmd0aCkpKTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBfcGFyc2VOYW1lQnl0ZXMobmFtZXNCeXRlcykgewogICAgICBsZXQgY3VyclJlZklkID0gMDsKICAgICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwOwogICAgICBjb25zdCByZWZJZFRvTmFtZSA9IFtdOwogICAgICBjb25zdCByZWZOYW1lVG9JZCA9IHt9OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBpZiAoIW5hbWVzQnl0ZXNbaV0pIHsKICAgICAgICAgIGlmIChjdXJyTmFtZVN0YXJ0IDwgaSkgewogICAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoInV0ZjgiLCBjdXJyTmFtZVN0YXJ0LCBpKTsKICAgICAgICAgICAgcmVmTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxKHJlZk5hbWUpOwogICAgICAgICAgICByZWZJZFRvTmFtZVtjdXJyUmVmSWRdID0gcmVmTmFtZTsKICAgICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjdXJyUmVmSWQgKz0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH07CiAgICB9CiAgICBhc3luYyBfcGFyc2Uob3B0cykgewogICAgICBjb25zdCBkYXRhID0geyBjc2k6IHRydWUsIG1heEJsb2NrU2l6ZTogMSA8PCAxNiB9OwogICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmZpbGVoYW5kbGUucmVhZEZpbGUob3B0cyk7CiAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgdW56aXAoYnVmZmVyKTsKICAgICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSA9PT0gQ1NJMV9NQUdJQykgewogICAgICAgIGRhdGEuY3NpVmVyc2lvbiA9IDE7CiAgICAgIH0gZWxzZSBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kyX01BR0lDKSB7CiAgICAgICAgZGF0YS5jc2lWZXJzaW9uID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIENTSSBmaWxlIik7CiAgICAgIH0KICAgICAgdGhpcy5taW5TaGlmdCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDQpOwogICAgICB0aGlzLmRlcHRoID0gYnl0ZXMucmVhZEludDMyTEUoOCk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gKCgxIDw8ICh0aGlzLmRlcHRoICsgMSkgKiAzKSAtIDEpIC8gNzsKICAgICAgY29uc3QgYXV4TGVuZ3RoID0gYnl0ZXMucmVhZEludDMyTEUoMTIpOwogICAgICBpZiAoYXV4TGVuZ3RoKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0aGlzLnBhcnNlQXV4RGF0YShieXRlcywgMTYsIGF1eExlbmd0aCkpOwogICAgICB9CiAgICAgIGRhdGEucmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSgxNiArIGF1eExlbmd0aCk7CiAgICAgIGRhdGEuaW5kaWNlcyA9IG5ldyBBcnJheShkYXRhLnJlZkNvdW50KTsKICAgICAgbGV0IGN1cnJPZmZzZXQgPSAxNiArIGF1eExlbmd0aCArIDQ7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5yZWZDb3VudDsgaSArPSAxKSB7CiAgICAgICAgYXdhaXQgYWJvcnRCcmVha1BvaW50KG9wdHMuc2lnbmFsKTsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICBjb25zdCBiaW5JbmRleCA9IHt9OwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGlmIChiaW4gPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgICBzdGF0cyA9IHRoaXMucGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIGN1cnJPZmZzZXQgKyA0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0ICsgOCArIDQgKyAxNiArIDE2OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbG9mZnNldCA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDQpOwogICAgICAgICAgICB0aGlzLl9maW5kRmlyc3REYXRhKGRhdGEsIGxvZmZzZXQpOwogICAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCArIDEyKTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gbmV3IEFycmF5KGNodW5rQ291bnQpOwogICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgICAgIGNvbnN0IHUgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KTsKICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2OwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRhdGEuaW5kaWNlc1tpXSA9IHsgYmluSW5kZXgsIHN0YXRzIH07CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBwYXJzZVBzZXVkb0JpbihieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihpbXBvcnRfbG9uZzMuZGVmYXVsdC5mcm9tQnl0ZXNMRShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcywgb2Zmc2V0ICsgMjgsIG9mZnNldCArIDM2KSwgdHJ1ZSkpOwogICAgICByZXR1cm4geyBsaW5lQ291bnQgfTsKICAgIH0KICAgIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZklkLCBtaW4sIG1heCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChtaW4gPCAwKSB7CiAgICAgICAgbWluID0gMDsKICAgICAgfQogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBjb25zdCBiYSA9IGluZGV4RGF0YSA9PT0gbnVsbCB8fCBpbmRleERhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFiYSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCBvdmVybGFwcGluZ0JpbnMgPSB0aGlzLnJlZzJiaW5zKG1pbiwgbWF4KTsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykgewogICAgICAgIGZvciAobGV0IGJpbiA9IHN0YXJ0OyBiaW4gPD0gZW5kOyBiaW4rKykgewogICAgICAgICAgaWYgKGJhLmJpbkluZGV4W2Jpbl0pIHsKICAgICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXTsKICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBiaW5DaHVua3MubGVuZ3RoOyArK2MpIHsKICAgICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3B0aW1pemVDaHVua3MoY2h1bmtzLCBuZXcgVmlydHVhbE9mZnNldCgwLCAwKSk7CiAgICB9CiAgICByZWcyYmlucyhiZWcsIGVuZCkgewogICAgICBiZWcgLT0gMTsKICAgICAgaWYgKGJlZyA8IDEpIHsKICAgICAgICBiZWcgPSAxOwogICAgICB9CiAgICAgIGlmIChlbmQgPiAyICoqIDUwKSB7CiAgICAgICAgZW5kID0gMiAqKiAzNDsKICAgICAgfQogICAgICBlbmQgLT0gMTsKICAgICAgbGV0IGwgPSAwOwogICAgICBsZXQgdCA9IDA7CiAgICAgIGxldCBzID0gdGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzOwogICAgICBjb25zdCBiaW5zID0gW107CiAgICAgIGZvciAoOyBsIDw9IHRoaXMuZGVwdGg7IHMgLT0gMywgdCArPSBsc2hpZnQoMSwgbCAqIDMpLCBsICs9IDEpIHsKICAgICAgICBjb25zdCBiID0gdCArIHJzaGlmdChiZWcsIHMpOwogICAgICAgIGNvbnN0IGUgPSB0ICsgcnNoaWZ0KGVuZCwgcyk7CiAgICAgICAgaWYgKGUgLSBiICsgYmlucy5sZW5ndGggPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdWVyeSAke2JlZ30tJHtlbmR9IGlzIHRvbyBsYXJnZSBmb3IgY3VycmVudCBiaW5uaW5nIHNjaGVtZSAoc2hpZnQgJHt0aGlzLm1pblNoaWZ0fSwgZGVwdGggJHt0aGlzLmRlcHRofSksIHRyeSBhIHNtYWxsZXIgcXVlcnkgb3IgYSBjb2Fyc2VyIGluZGV4IGJpbm5pbmcgc2NoZW1lYCk7CiAgICAgICAgfQogICAgICAgIGJpbnMucHVzaChbYiwgZV0pOwogICAgICB9CiAgICAgIHJldHVybiBiaW5zOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL2JhbUZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXJfY3JjMzIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyX2NyYzMyKCkpOwogIHZhciBpbXBvcnRfb2JqZWN0ID0gX190b01vZHVsZShyZXF1aXJlX29iamVjdCgpKTsKICB2YXIgaW1wb3J0X2Fib3J0YWJsZV9wcm9taXNlX2NhY2hlID0gX190b01vZHVsZShyZXF1aXJlX2VzbSgpKTsKICB2YXIgaW1wb3J0X3F1aWNrX2xydSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9xdWlja19scnUoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3JlY29yZC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JhbUAxLjEuMTgvbm9kZV9tb2R1bGVzL0BnbW9kL2JhbS9lc20vY29uc3RhbnRzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBjb25zdGFudHNfZGVmYXVsdCA9IHsKICAgIEJBTV9GUEFJUkVEOiAxLAogICAgQkFNX0ZQUk9QRVJfUEFJUjogMiwKICAgIEJBTV9GVU5NQVA6IDQsCiAgICBCQU1fRk1VTk1BUDogOCwKICAgIEJBTV9GUkVWRVJTRTogMTYsCiAgICBCQU1fRk1SRVZFUlNFOiAzMiwKICAgIEJBTV9GUkVBRDE6IDY0LAogICAgQkFNX0ZSRUFEMjogMTI4LAogICAgQkFNX0ZTRUNPTkRBUlk6IDI1NiwKICAgIEJBTV9GUUNGQUlMOiA1MTIsCiAgICBCQU1fRkRVUDogMTAyNCwKICAgIEJBTV9GU1VQUExFTUVOVEFSWTogMjA0OAogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3JlY29yZC5qcwogIHZhciBTRVFSRVRfREVDT0RFUiA9ICI9QUNNR1JTVlRXWUhLREJOIi5zcGxpdCgiIik7CiAgdmFyIENJR0FSX0RFQ09ERVIgPSAiTUlETlNIUD1YPz8/Pz8/PyIuc3BsaXQoIiIpOwogIHZhciBCYW1SZWNvcmQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihhcmdzKSB7CiAgICAgIHRoaXMuZGF0YSA9IHt9OwogICAgICB0aGlzLl90YWdMaXN0ID0gW107CiAgICAgIHRoaXMuX2FsbFRhZ3NQYXJzZWQgPSBmYWxzZTsKICAgICAgY29uc3QgeyBieXRlcywgZmlsZU9mZnNldCB9ID0gYXJnczsKICAgICAgY29uc3QgeyBieXRlQXJyYXksIHN0YXJ0IH0gPSBieXRlczsKICAgICAgdGhpcy5kYXRhID0ge307CiAgICAgIHRoaXMuYnl0ZXMgPSBieXRlczsKICAgICAgdGhpcy5faWQgPSBmaWxlT2Zmc2V0OwogICAgICB0aGlzLl9yZWZJRCA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShzdGFydCArIDQpOwogICAgICB0aGlzLmRhdGEuc3RhcnQgPSBieXRlQXJyYXkucmVhZEludDMyTEUoc3RhcnQgKyA4KTsKICAgICAgdGhpcy5mbGFncyA9IChieXRlQXJyYXkucmVhZEludDMyTEUoc3RhcnQgKyAxNikgJiA0Mjk0OTAxNzYwKSA+PiAxNjsKICAgIH0KICAgIGdldChmaWVsZCkgewogICAgICBpZiAodGhpc1tmaWVsZF0pIHsKICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkXSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtmaWVsZF07CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YVtmaWVsZF0gPSB0aGlzW2ZpZWxkXSgpOwogICAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9nZXQoZmllbGQudG9Mb3dlckNhc2UoKSk7CiAgICB9CiAgICBlbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmdldCgic3RhcnQiKSArIHRoaXMuZ2V0KCJsZW5ndGhfb25fcmVmIik7CiAgICB9CiAgICBzZXFfaWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9yZWZJRDsKICAgIH0KICAgIF9nZXQoZmllbGQpIHsKICAgICAgaWYgKGZpZWxkIGluIHRoaXMuZGF0YSkgewogICAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdOwogICAgICB9CiAgICAgIHRoaXMuZGF0YVtmaWVsZF0gPSB0aGlzLl9wYXJzZVRhZyhmaWVsZCk7CiAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdOwogICAgfQogICAgX3RhZ3MoKSB7CiAgICAgIHRoaXMuX3BhcnNlQWxsVGFncygpOwogICAgICBsZXQgdGFncyA9IFsic2VxIl07CiAgICAgIGlmICghdGhpcy5pc1NlZ21lbnRVbm1hcHBlZCgpKSB7CiAgICAgICAgdGFncy5wdXNoKCJzdGFydCIsICJlbmQiLCAic3RyYW5kIiwgInNjb3JlIiwgInF1YWwiLCAiTVEiLCAiQ0lHQVIiLCAibGVuZ3RoX29uX3JlZiIsICJ0ZW1wbGF0ZV9sZW5ndGgiKTsKICAgICAgfQogICAgICBpZiAodGhpcy5pc1BhaXJlZCgpKSB7CiAgICAgICAgdGFncy5wdXNoKCJuZXh0X3NlZ21lbnRfcG9zaXRpb24iLCAicGFpcl9vcmllbnRhdGlvbiIpOwogICAgICB9CiAgICAgIHRhZ3MgPSB0YWdzLmNvbmNhdCh0aGlzLl90YWdMaXN0IHx8IFtdKTsKICAgICAgT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKChrKSA9PiB7CiAgICAgICAgaWYgKGtbMF0gIT09ICJfIiAmJiBrICE9PSAibmV4dF9zZXFfaWQiKSB7CiAgICAgICAgICB0YWdzLnB1c2goayk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgY29uc3Qgc2VlbiA9IHt9OwogICAgICByZXR1cm4gdGFncy5maWx0ZXIoKHQpID0+IHsKICAgICAgICBpZiAodCBpbiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhW3RdID09PSB2b2lkIDAgfHwgdCA9PT0gIkNHIiB8fCB0ID09PSAiY2ciKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGx0ID0gdC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHMgPSBzZWVuW2x0XTsKICAgICAgICBzZWVuW2x0XSA9IHRydWU7CiAgICAgICAgcmV0dXJuICFzOwogICAgICB9KTsKICAgIH0KICAgIHBhcmVudCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGNoaWxkcmVuKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoInN1YmZlYXR1cmVzIik7CiAgICB9CiAgICBpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2lkOwogICAgfQogICAgbXEoKSB7CiAgICAgIGNvbnN0IG1xID0gKHRoaXMuZ2V0KCJfYmluX21xX25sIikgJiA2NTI4MCkgPj4gODsKICAgICAgcmV0dXJuIG1xID09PSAyNTUgPyB2b2lkIDAgOiBtcTsKICAgIH0KICAgIHNjb3JlKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoIm1xIik7CiAgICB9CiAgICBxdWFsKCkgewogICAgICB2YXIgX2E7CiAgICAgIHJldHVybiAoX2EgPSB0aGlzLnF1YWxSYXcoKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmpvaW4oIiAiKTsKICAgIH0KICAgIHF1YWxSYXcoKSB7CiAgICAgIGlmICh0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkpIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9CiAgICAgIGNvbnN0IHsgc3RhcnQsIGJ5dGVBcnJheSB9ID0gdGhpcy5ieXRlczsKICAgICAgY29uc3QgcCA9IHN0YXJ0ICsgMzYgKyB0aGlzLmdldCgiX2xfcmVhZF9uYW1lIikgKyB0aGlzLmdldCgiX25fY2lnYXJfb3AiKSAqIDQgKyB0aGlzLmdldCgiX3NlcV9ieXRlcyIpOwogICAgICBjb25zdCBsc2VxID0gdGhpcy5nZXQoInNlcV9sZW5ndGgiKTsKICAgICAgcmV0dXJuIGJ5dGVBcnJheS5zdWJhcnJheShwLCBwICsgbHNlcSk7CiAgICB9CiAgICBzdHJhbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpID8gLTEgOiAxOwogICAgfQogICAgbXVsdGlfc2VnbWVudF9uZXh0X3NlZ21lbnRfc3RyYW5kKCkgewogICAgICBpZiAodGhpcy5pc01hdGVVbm1hcHBlZCgpKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAtMSA6IDE7CiAgICB9CiAgICBuYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoIl9yZWFkX25hbWUiKTsKICAgIH0KICAgIF9yZWFkX25hbWUoKSB7CiAgICAgIGNvbnN0IG5sID0gdGhpcy5nZXQoIl9sX3JlYWRfbmFtZSIpOwogICAgICBjb25zdCB7IGJ5dGVBcnJheSwgc3RhcnQgfSA9IHRoaXMuYnl0ZXM7CiAgICAgIHJldHVybiBieXRlQXJyYXkudG9TdHJpbmcoImFzY2lpIiwgc3RhcnQgKyAzNiwgc3RhcnQgKyAzNiArIG5sIC0gMSk7CiAgICB9CiAgICBfcGFyc2VUYWcodGFnTmFtZSkgewogICAgICBpZiAodGhpcy5fYWxsVGFnc1BhcnNlZCkgewogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0KICAgICAgY29uc3QgeyBieXRlQXJyYXksIHN0YXJ0IH0gPSB0aGlzLmJ5dGVzOwogICAgICBsZXQgcCA9IHRoaXMuX3RhZ09mZnNldCB8fCBzdGFydCArIDM2ICsgdGhpcy5nZXQoIl9sX3JlYWRfbmFtZSIpICsgdGhpcy5nZXQoIl9uX2NpZ2FyX29wIikgKiA0ICsgdGhpcy5nZXQoIl9zZXFfYnl0ZXMiKSArIHRoaXMuZ2V0KCJzZXFfbGVuZ3RoIik7CiAgICAgIGNvbnN0IGJsb2NrRW5kID0gdGhpcy5ieXRlcy5lbmQ7CiAgICAgIGxldCBsY1RhZzsKICAgICAgd2hpbGUgKHAgPCBibG9ja0VuZCAmJiBsY1RhZyAhPT0gdGFnTmFtZSkgewogICAgICAgIGNvbnN0IHRhZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZUFycmF5W3BdLCBieXRlQXJyYXlbcCArIDFdKTsKICAgICAgICBsY1RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVBcnJheVtwICsgMl0pOwogICAgICAgIHAgKz0gMzsKICAgICAgICBsZXQgdmFsdWU7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVBcnJheVtwXSk7CiAgICAgICAgICAgIHAgKz0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJpIjoKICAgICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJJIjoKICAgICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZFVJbnQzMkxFKHApOwogICAgICAgICAgICBwICs9IDQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRJbnQ4KHApOwogICAgICAgICAgICBwICs9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQyI6CiAgICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRVSW50OChwKTsKICAgICAgICAgICAgcCArPSAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkSW50MTZMRShwKTsKICAgICAgICAgICAgcCArPSAyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIlMiOgogICAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkVUludDE2TEUocCk7CiAgICAgICAgICAgIHAgKz0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJmIjoKICAgICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZEZsb2F0TEUocCk7CiAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJaIjoKICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICB2YWx1ZSA9ICIiOwogICAgICAgICAgICB3aGlsZSAocCA8PSBibG9ja0VuZCkgewogICAgICAgICAgICAgIGNvbnN0IGNjID0gYnl0ZUFycmF5W3ArK107CiAgICAgICAgICAgICAgaWYgKGNjID09PSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjYyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQiI6IHsKICAgICAgICAgICAgdmFsdWUgPSAiIjsKICAgICAgICAgICAgY29uc3QgY2MgPSBieXRlQXJyYXlbcCsrXTsKICAgICAgICAgICAgY29uc3QgQnR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNjKTsKICAgICAgICAgICAgY29uc3QgbGltaXQgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgaWYgKEJ0eXBlID09PSAiaSIpIHsKICAgICAgICAgICAgICBpZiAodGFnID09PSAiQ0ciKSB7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvcCA9IGNpZ29wID4+IDQ7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDE1XTsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbG9wICsgb3A7CiAgICAgICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKTsKICAgICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiLCI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcCArPSA0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQnR5cGUgPT09ICJJIikgewogICAgICAgICAgICAgIGlmICh0YWcgPT09ICJDRyIpIHsKICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykgewogICAgICAgICAgICAgICAgICBjb25zdCBjaWdvcCA9IGJ5dGVBcnJheS5yZWFkVUludDMyTEUocCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvcCA9IGNpZ29wID4+IDQ7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDE1XTsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbG9wICsgb3A7CiAgICAgICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkVUludDMyTEUocCk7CiAgICAgICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiwiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEJ0eXBlID09PSAicyIpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHsKICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50MTZMRShwKTsKICAgICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIsIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHAgKz0gMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEJ0eXBlID09PSAiUyIpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHsKICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkVUludDE2TEUocCk7CiAgICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkgewogICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiLCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwICs9IDI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChCdHlwZSA9PT0gImMiKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZEludDgocCk7CiAgICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkgewogICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiLCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwICs9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChCdHlwZSA9PT0gIkMiKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZFVJbnQ4KHApOwogICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcCArPSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQnR5cGUgPT09ICJmIikgewogICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykgewogICAgICAgICAgICAgICAgdmFsdWUgKz0gYnl0ZUFycmF5LnJlYWRGbG9hdExFKHApOwogICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcCArPSA0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biBCQU0gdGFnIHR5cGUgJyR7dHlwZX0nLCB0YWdzIG1heSBiZSBpbmNvbXBsZXRlYCk7CiAgICAgICAgICAgIHZhbHVlID0gdm9pZCAwOwogICAgICAgICAgICBwID0gYmxvY2tFbmQ7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3RhZ09mZnNldCA9IHA7CiAgICAgICAgdGhpcy5fdGFnTGlzdC5wdXNoKHRhZyk7CiAgICAgICAgaWYgKGxjVGFnID09PSB0YWdOYW1lKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YVtsY1RhZ10gPSB2YWx1ZTsKICAgICAgfQogICAgICB0aGlzLl9hbGxUYWdzUGFyc2VkID0gdHJ1ZTsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIF9wYXJzZUFsbFRhZ3MoKSB7CiAgICAgIHRoaXMuX3BhcnNlVGFnKCIiKTsKICAgIH0KICAgIF9wYXJzZUNpZ2FyKGNpZ2FyKSB7CiAgICAgIHJldHVybiBjaWdhci5tYXRjaCgvXGQrXEQvZykubWFwKChvcCkgPT4gW29wLm1hdGNoKC9cRC8pWzBdLnRvVXBwZXJDYXNlKCksIHBhcnNlSW50KG9wLCAxMCldKTsKICAgIH0KICAgIGlzUGFpcmVkKCkgewogICAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIGNvbnN0YW50c19kZWZhdWx0LkJBTV9GUEFJUkVEKTsKICAgIH0KICAgIGlzUHJvcGVybHlQYWlyZWQoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZQUk9QRVJfUEFJUik7CiAgICB9CiAgICBpc1NlZ21lbnRVbm1hcHBlZCgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRlVOTUFQKTsKICAgIH0KICAgIGlzTWF0ZVVubWFwcGVkKCkgewogICAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIGNvbnN0YW50c19kZWZhdWx0LkJBTV9GTVVOTUFQKTsKICAgIH0KICAgIGlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRlJFVkVSU0UpOwogICAgfQogICAgaXNNYXRlUmV2ZXJzZUNvbXBsZW1lbnRlZCgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRk1SRVZFUlNFKTsKICAgIH0KICAgIGlzUmVhZDEoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZSRUFEMSk7CiAgICB9CiAgICBpc1JlYWQyKCkgewogICAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIGNvbnN0YW50c19kZWZhdWx0LkJBTV9GUkVBRDIpOwogICAgfQogICAgaXNTZWNvbmRhcnkoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZTRUNPTkRBUlkpOwogICAgfQogICAgaXNGYWlsZWRRYygpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRlFDRkFJTCk7CiAgICB9CiAgICBpc0R1cGxpY2F0ZSgpIHsKICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBjb25zdGFudHNfZGVmYXVsdC5CQU1fRkRVUCk7CiAgICB9CiAgICBpc1N1cHBsZW1lbnRhcnkoKSB7CiAgICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgY29uc3RhbnRzX2RlZmF1bHQuQkFNX0ZTVVBQTEVNRU5UQVJZKTsKICAgIH0KICAgIGNpZ2FyKCkgewogICAgICBpZiAodGhpcy5pc1NlZ21lbnRVbm1hcHBlZCgpKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdCB7IGJ5dGVBcnJheSwgc3RhcnQgfSA9IHRoaXMuYnl0ZXM7CiAgICAgIGNvbnN0IG51bUNpZ2FyT3BzID0gdGhpcy5nZXQoIl9uX2NpZ2FyX29wIik7CiAgICAgIGxldCBwID0gc3RhcnQgKyAzNiArIHRoaXMuZ2V0KCJfbF9yZWFkX25hbWUiKTsKICAgICAgY29uc3Qgc2VxTGVuID0gdGhpcy5nZXQoInNlcV9sZW5ndGgiKTsKICAgICAgbGV0IGNpZ2FyID0gIiI7CiAgICAgIGxldCBscmVmID0gMDsKICAgICAgbGV0IGNpZ29wID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApOwogICAgICBsZXQgbG9wID0gY2lnb3AgPj4gNDsKICAgICAgbGV0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDE1XTsKICAgICAgaWYgKG9wID09PSAiUyIgJiYgbG9wID09PSBzZXFMZW4pIHsKICAgICAgICBwICs9IDQ7CiAgICAgICAgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgbG9wID0gY2lnb3AgPj4gNDsKICAgICAgICBvcCA9IENJR0FSX0RFQ09ERVJbY2lnb3AgJiAxNV07CiAgICAgICAgaWYgKG9wICE9PSAiTiIpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiQ0cgdGFnIHdpdGggbm8gTiB0YWciKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWYgPSBsb3A7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCJDRyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbnVtQ2lnYXJPcHM7ICsrYykgewogICAgICAgICAgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocCk7CiAgICAgICAgICBsb3AgPSBjaWdvcCA+PiA0OwogICAgICAgICAgb3AgPSBDSUdBUl9ERUNPREVSW2NpZ29wICYgMTVdOwogICAgICAgICAgY2lnYXIgKz0gbG9wICsgb3A7CiAgICAgICAgICBpZiAob3AgIT09ICJIIiAmJiBvcCAhPT0gIlMiICYmIG9wICE9PSAiSSIpIHsKICAgICAgICAgICAgbHJlZiArPSBsb3A7CiAgICAgICAgICB9CiAgICAgICAgICBwICs9IDQ7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGF0YS5sZW5ndGhfb25fcmVmID0gbHJlZjsKICAgICAgICByZXR1cm4gY2lnYXI7CiAgICAgIH0KICAgIH0KICAgIF9mbGFncygpIHsKICAgIH0KICAgIGxlbmd0aF9vbl9yZWYoKSB7CiAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoX29uX3JlZikgewogICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoX29uX3JlZjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmdldCgiY2lnYXIiKTsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWY7CiAgICAgIH0KICAgIH0KICAgIF9uX2NpZ2FyX29wKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoIl9mbGFnX25jIikgJiA2NTUzNTsKICAgIH0KICAgIF9sX3JlYWRfbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0KCJfYmluX21xX25sIikgJiAyNTU7CiAgICB9CiAgICBfc2VxX2J5dGVzKCkgewogICAgICByZXR1cm4gdGhpcy5nZXQoInNlcV9sZW5ndGgiKSArIDEgPj4gMTsKICAgIH0KICAgIGdldFJlYWRCYXNlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VxKCk7CiAgICB9CiAgICBzZXEoKSB7CiAgICAgIGNvbnN0IHsgYnl0ZUFycmF5LCBzdGFydCB9ID0gdGhpcy5ieXRlczsKICAgICAgY29uc3QgcCA9IHN0YXJ0ICsgMzYgKyB0aGlzLmdldCgiX2xfcmVhZF9uYW1lIikgKyB0aGlzLmdldCgiX25fY2lnYXJfb3AiKSAqIDQ7CiAgICAgIGNvbnN0IHNlcUJ5dGVzID0gdGhpcy5nZXQoIl9zZXFfYnl0ZXMiKTsKICAgICAgY29uc3QgbGVuID0gdGhpcy5nZXQoInNlcV9sZW5ndGgiKTsKICAgICAgbGV0IGJ1ZiA9ICIiOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2VxQnl0ZXM7ICsraikgewogICAgICAgIGNvbnN0IHNiID0gYnl0ZUFycmF5W3AgKyBqXTsKICAgICAgICBidWYgKz0gU0VRUkVUX0RFQ09ERVJbKHNiICYgMjQwKSA+PiA0XTsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPCBsZW4pIHsKICAgICAgICAgIGJ1ZiArPSBTRVFSRVRfREVDT0RFUltzYiAmIDE1XTsKICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGJ1ZjsKICAgIH0KICAgIGdldFBhaXJPcmllbnRhdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkgJiYgIXRoaXMuaXNNYXRlVW5tYXBwZWQoKSAmJiB0aGlzLl9yZWZJRCA9PT0gdGhpcy5fbmV4dF9yZWZpZCgpKSB7CiAgICAgICAgY29uc3QgczEgPSB0aGlzLmlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpID8gIlIiIDogIkYiOwogICAgICAgIGNvbnN0IHMyID0gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAiUiIgOiAiRiI7CiAgICAgICAgbGV0IG8xID0gIiAiOwogICAgICAgIGxldCBvMiA9ICIgIjsKICAgICAgICBpZiAodGhpcy5pc1JlYWQxKCkpIHsKICAgICAgICAgIG8xID0gIjEiOwogICAgICAgICAgbzIgPSAiMiI7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUmVhZDIoKSkgewogICAgICAgICAgbzEgPSAiMiI7CiAgICAgICAgICBvMiA9ICIxIjsKICAgICAgICB9CiAgICAgICAgY29uc3QgdG1wID0gW107CiAgICAgICAgY29uc3QgaXNpemUgPSB0aGlzLnRlbXBsYXRlX2xlbmd0aCgpOwogICAgICAgIGlmIChpc2l6ZSA+IDApIHsKICAgICAgICAgIHRtcFswXSA9IHMxOwogICAgICAgICAgdG1wWzFdID0gbzE7CiAgICAgICAgICB0bXBbMl0gPSBzMjsKICAgICAgICAgIHRtcFszXSA9IG8yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0bXBbMl0gPSBzMTsKICAgICAgICAgIHRtcFszXSA9IG8xOwogICAgICAgICAgdG1wWzBdID0gczI7CiAgICAgICAgICB0bXBbMV0gPSBvMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRtcC5qb2luKCIiKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIF9iaW5fbXFfbmwoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMTIpOwogICAgfQogICAgX2ZsYWdfbmMoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMTYpOwogICAgfQogICAgc2VxX2xlbmd0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAyMCk7CiAgICB9CiAgICBfbmV4dF9yZWZpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAyNCk7CiAgICB9CiAgICBfbmV4dF9wb3MoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMjgpOwogICAgfQogICAgdGVtcGxhdGVfbGVuZ3RoKCkgewogICAgICByZXR1cm4gdGhpcy5ieXRlcy5ieXRlQXJyYXkucmVhZEludDMyTEUodGhpcy5ieXRlcy5zdGFydCArIDMyKTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgY29uc3QgZGF0YSA9IHt9OwogICAgICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKChrKSA9PiB7CiAgICAgICAgaWYgKGsuY2hhckF0KDApID09PSAiXyIgfHwgayA9PT0gImJ5dGVzIikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBkYXRhW2tdID0gdGhpc1trXTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL3NhbS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBwYXJzZUhlYWRlclRleHQodGV4dCkgewogICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KC9ccj9cbi8pOwogICAgY29uc3QgZGF0YSA9IFtdOwogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbdGFnLCAuLi5maWVsZHNdID0gbGluZS5zcGxpdCgvXHQvKTsKICAgICAgY29uc3QgcGFyc2VkRmllbGRzID0gZmllbGRzLm1hcCgoZikgPT4gewogICAgICAgIGNvbnN0IFtmaWVsZFRhZywgdmFsdWVdID0gZi5zcGxpdCgiOiIsIDIpOwogICAgICAgIHJldHVybiB7IHRhZzogZmllbGRUYWcsIHZhbHVlIH07CiAgICAgIH0pOwogICAgICBpZiAodGFnKSB7CiAgICAgICAgZGF0YS5wdXNoKHsgdGFnOiB0YWcuc3Vic3RyKDEpLCBkYXRhOiBwYXJzZWRGaWVsZHMgfSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGRhdGE7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmFtQDEuMS4xOC9ub2RlX21vZHVsZXMvQGdtb2QvYmFtL2VzbS9iYW1GaWxlLmpzCiAgdmFyIEJBTV9NQUdJQyA9IDIxODQwMTk0OwogIHZhciBibG9ja0xlbiA9IDEgPDwgMTY7CiAgZnVuY3Rpb24gZmxhdChhcnIpIHsKICAgIHJldHVybiBbXS5jb25jYXQoLi4uYXJyKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZ2VuMmFycmF5KGdlbikgewogICAgY29uc3Qgb3V0ID0gW107CiAgICBmb3IgYXdhaXQgKGNvbnN0IHggb2YgZ2VuKSB7CiAgICAgIG91dC5wdXNoKHgpOwogICAgfQogICAgcmV0dXJuIG91dDsKICB9CiAgdmFyIEJhbUZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih7IGJhbUZpbGVoYW5kbGUsIGJhbVBhdGgsIGJhbVVybCwgYmFpUGF0aCwgYmFpRmlsZWhhbmRsZSwgYmFpVXJsLCBjc2lQYXRoLCBjc2lGaWxlaGFuZGxlLCBjc2lVcmwsIGZldGNoU2l6ZUxpbWl0LCBjaHVua1NpemVMaW1pdCwgeWllbGRUaHJlYWRUaW1lID0gMTAwLCByZW5hbWVSZWZTZXFzID0gKG4pID0+IG4gfSkgewogICAgICB0aGlzLmZlYXR1cmVDYWNoZSA9IG5ldyBpbXBvcnRfYWJvcnRhYmxlX3Byb21pc2VfY2FjaGUuZGVmYXVsdCh7CiAgICAgICAgY2FjaGU6IG5ldyBpbXBvcnRfcXVpY2tfbHJ1LmRlZmF1bHQoewogICAgICAgICAgbWF4U2l6ZTogNTAKICAgICAgICB9KSwKICAgICAgICBmaWxsOiBhc3luYyAoeyBjaHVuaywgb3B0cyB9LCBzaWduYWwpID0+IHsKICAgICAgICAgIGNvbnN0IHsgZGF0YSwgY3Bvc2l0aW9ucywgZHBvc2l0aW9ucyB9ID0gYXdhaXQgdGhpcy5fcmVhZENodW5rKHsKICAgICAgICAgICAgY2h1bmssCiAgICAgICAgICAgIG9wdHM6IHsgLi4ub3B0cywgc2lnbmFsIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZmVhdHMgPSBhd2FpdCB0aGlzLnJlYWRCYW1GZWF0dXJlcyhkYXRhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuayk7CiAgICAgICAgICByZXR1cm4gZmVhdHM7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZW5hbWVSZWZTZXEgPSByZW5hbWVSZWZTZXFzOwogICAgICBpZiAoYmFtRmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuYmFtID0gYmFtRmlsZWhhbmRsZTsKICAgICAgfSBlbHNlIGlmIChiYW1QYXRoKSB7CiAgICAgICAgdGhpcy5iYW0gPSBuZXcgaW1wb3J0X2xvY2FsRmlsZS5kZWZhdWx0KGJhbVBhdGgpOwogICAgICB9IGVsc2UgaWYgKGJhbVVybCkgewogICAgICAgIHRoaXMuYmFtID0gbmV3IFJlbW90ZUZpbGUoYmFtVXJsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBpbml0aWFsaXplIGJhbSIpOwogICAgICB9CiAgICAgIGlmIChjc2lGaWxlaGFuZGxlKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBDU0koeyBmaWxlaGFuZGxlOiBjc2lGaWxlaGFuZGxlIH0pOwogICAgICB9IGVsc2UgaWYgKGNzaVBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IENTSSh7IGZpbGVoYW5kbGU6IG5ldyBpbXBvcnRfbG9jYWxGaWxlLmRlZmF1bHQoY3NpUGF0aCkgfSk7CiAgICAgIH0gZWxzZSBpZiAoY3NpVXJsKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBDU0koeyBmaWxlaGFuZGxlOiBuZXcgUmVtb3RlRmlsZShjc2lVcmwpIH0pOwogICAgICB9IGVsc2UgaWYgKGJhaUZpbGVoYW5kbGUpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IEJBSSh7IGZpbGVoYW5kbGU6IGJhaUZpbGVoYW5kbGUgfSk7CiAgICAgIH0gZWxzZSBpZiAoYmFpUGF0aCkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgQkFJKHsgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChiYWlQYXRoKSB9KTsKICAgICAgfSBlbHNlIGlmIChiYWlVcmwpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IEJBSSh7IGZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlKGJhaVVybCkgfSk7CiAgICAgIH0gZWxzZSBpZiAoYmFtUGF0aCkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgQkFJKHsgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChgJHtiYW1QYXRofS5iYWlgKSB9KTsKICAgICAgfSBlbHNlIGlmIChiYW1VcmwpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IEJBSSh7IGZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlKGAke2JhbVVybH0uYmFpYCkgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gaW5mZXIgaW5kZXggZm9ybWF0Iik7CiAgICAgIH0KICAgICAgdGhpcy5mZXRjaFNpemVMaW1pdCA9IGZldGNoU2l6ZUxpbWl0IHx8IDVlODsKICAgICAgdGhpcy5jaHVua1NpemVMaW1pdCA9IGNodW5rU2l6ZUxpbWl0IHx8IDNlODsKICAgICAgdGhpcy55aWVsZFRocmVhZFRpbWUgPSB5aWVsZFRocmVhZFRpbWU7CiAgICB9CiAgICBhc3luYyBnZXRIZWFkZXIob3JpZ09wdHMgPSB7fSkgewogICAgICBjb25zdCBvcHRzID0gbWFrZU9wdHMob3JpZ09wdHMpOwogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLmluZGV4LnBhcnNlKG9wdHMpOwogICAgICBjb25zdCByZXQgPSBpbmRleERhdGEuZmlyc3REYXRhTGluZSA/IGluZGV4RGF0YS5maXJzdERhdGFMaW5lLmJsb2NrUG9zaXRpb24gKyA2NTUzNSA6IHZvaWQgMDsKICAgICAgbGV0IGJ1ZmZlcjsKICAgICAgaWYgKHJldCkgewogICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYmFtLnJlYWQoaW1wb3J0X2J1ZmZlci5CdWZmZXIuYWxsb2MocmV0ICsgYmxvY2tMZW4pLCAwLCByZXQgKyBibG9ja0xlbiwgMCwgb3B0cyk7CiAgICAgICAgY29uc3QgeyBieXRlc1JlYWQgfSA9IHJlczsKICAgICAgICAoeyBidWZmZXIgfSA9IHJlcyk7CiAgICAgICAgaWYgKCFieXRlc1JlYWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXJyb3IgcmVhZGluZyBoZWFkZXIiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IHJldCkgewogICAgICAgICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDAsIGJ5dGVzUmVhZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgwLCByZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBidWZmZXIgPSBhd2FpdCB0aGlzLmJhbS5yZWFkRmlsZShvcHRzKTsKICAgICAgfQogICAgICBjb25zdCB1bmNiYSA9IGF3YWl0IHVuemlwKGJ1ZmZlcik7CiAgICAgIGlmICh1bmNiYS5yZWFkSW50MzJMRSgwKSAhPT0gQkFNX01BR0lDKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBCQU0gZmlsZSIpOwogICAgICB9CiAgICAgIGNvbnN0IGhlYWRMZW4gPSB1bmNiYS5yZWFkSW50MzJMRSg0KTsKICAgICAgdGhpcy5oZWFkZXIgPSB1bmNiYS50b1N0cmluZygidXRmOCIsIDgsIDggKyBoZWFkTGVuKTsKICAgICAgY29uc3QgeyBjaHJUb0luZGV4LCBpbmRleFRvQ2hyIH0gPSBhd2FpdCB0aGlzLl9yZWFkUmVmU2VxcyhoZWFkTGVuICsgOCwgNjU1MzUsIG9wdHMpOwogICAgICB0aGlzLmNoclRvSW5kZXggPSBjaHJUb0luZGV4OwogICAgICB0aGlzLmluZGV4VG9DaHIgPSBpbmRleFRvQ2hyOwogICAgICByZXR1cm4gcGFyc2VIZWFkZXJUZXh0KHRoaXMuaGVhZGVyKTsKICAgIH0KICAgIGFzeW5jIGdldEhlYWRlclRleHQob3B0cyA9IHt9KSB7CiAgICAgIGF3YWl0IHRoaXMuZ2V0SGVhZGVyKG9wdHMpOwogICAgICByZXR1cm4gdGhpcy5oZWFkZXI7CiAgICB9CiAgICBhc3luYyBfcmVhZFJlZlNlcXMoc3RhcnQsIHJlZlNlcUJ5dGVzLCBvcHRzID0ge30pIHsKICAgICAgaWYgKHN0YXJ0ID4gcmVmU2VxQnl0ZXMpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZFJlZlNlcXMoc3RhcnQsIHJlZlNlcUJ5dGVzICogMiwgb3B0cyk7CiAgICAgIH0KICAgICAgY29uc3Qgc2l6ZSA9IHJlZlNlcUJ5dGVzICsgYmxvY2tMZW47CiAgICAgIGNvbnN0IHsgYnl0ZXNSZWFkLCBidWZmZXIgfSA9IGF3YWl0IHRoaXMuYmFtLnJlYWQoaW1wb3J0X2J1ZmZlci5CdWZmZXIuYWxsb2Moc2l6ZSksIDAsIHJlZlNlcUJ5dGVzLCAwLCBvcHRzKTsKICAgICAgaWYgKCFieXRlc1JlYWQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHJlYWRpbmcgcmVmc2VxcyBmcm9tIGhlYWRlciIpOwogICAgICB9CiAgICAgIGNvbnN0IHVuY2JhID0gYXdhaXQgdW56aXAoYnVmZmVyLnN1YmFycmF5KDAsIE1hdGgubWluKGJ5dGVzUmVhZCwgcmVmU2VxQnl0ZXMpKSk7CiAgICAgIGNvbnN0IG5SZWYgPSB1bmNiYS5yZWFkSW50MzJMRShzdGFydCk7CiAgICAgIGxldCBwID0gc3RhcnQgKyA0OwogICAgICBjb25zdCBjaHJUb0luZGV4ID0ge307CiAgICAgIGNvbnN0IGluZGV4VG9DaHIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUmVmOyBpICs9IDEpIHsKICAgICAgICBjb25zdCBsTmFtZSA9IHVuY2JhLnJlYWRJbnQzMkxFKHApOwogICAgICAgIGNvbnN0IHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcSh1bmNiYS50b1N0cmluZygidXRmOCIsIHAgKyA0LCBwICsgNCArIGxOYW1lIC0gMSkpOwogICAgICAgIGNvbnN0IGxSZWYgPSB1bmNiYS5yZWFkSW50MzJMRShwICsgbE5hbWUgKyA0KTsKICAgICAgICBjaHJUb0luZGV4W3JlZk5hbWVdID0gaTsKICAgICAgICBpbmRleFRvQ2hyLnB1c2goeyByZWZOYW1lLCBsZW5ndGg6IGxSZWYgfSk7CiAgICAgICAgcCA9IHAgKyA4ICsgbE5hbWU7CiAgICAgICAgaWYgKHAgPiB1bmNiYS5sZW5ndGgpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgQkFNIGhlYWRlciBpcyB2ZXJ5IGJpZy4gIFJlLWZldGNoaW5nICR7cmVmU2VxQnl0ZXN9IGJ5dGVzLmApOwogICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRSZWZTZXFzKHN0YXJ0LCByZWZTZXFCeXRlcyAqIDIsIG9wdHMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyBjaHJUb0luZGV4LCBpbmRleFRvQ2hyIH07CiAgICB9CiAgICBhc3luYyBnZXRSZWNvcmRzRm9yUmFuZ2UoY2hyLCBtaW4sIG1heCwgb3B0cyA9IHsKICAgICAgdmlld0FzUGFpcnM6IGZhbHNlLAogICAgICBwYWlyQWNyb3NzQ2hyOiBmYWxzZSwKICAgICAgbWF4SW5zZXJ0U2l6ZTogMmU1CiAgICB9KSB7CiAgICAgIHJldHVybiBmbGF0KGF3YWl0IGdlbjJhcnJheSh0aGlzLnN0cmVhbVJlY29yZHNGb3JSYW5nZShjaHIsIG1pbiwgbWF4LCBvcHRzKSkpOwogICAgfQogICAgYXN5bmMgKnN0cmVhbVJlY29yZHNGb3JSYW5nZShjaHIsIG1pbiwgbWF4LCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdHM7CiAgICAgIGNvbnN0IGNocklkID0gdGhpcy5jaHJUb0luZGV4ICYmIHRoaXMuY2hyVG9JbmRleFtjaHJdOwogICAgICBsZXQgY2h1bmtzOwogICAgICBpZiAoIShjaHJJZCA+PSAwKSkgewogICAgICAgIGNodW5rcyA9IFtdOwogICAgICB9IGVsc2UgewogICAgICAgIGNodW5rcyA9IGF3YWl0IHRoaXMuaW5kZXguYmxvY2tzRm9yUmFuZ2UoY2hySWQsIG1pbiAtIDEsIG1heCwgb3B0cyk7CiAgICAgICAgaWYgKCFjaHVua3MpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXJyb3IgaW4gaW5kZXggZmV0Y2giKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBhd2FpdCBhYm9ydEJyZWFrUG9pbnQoc2lnbmFsKTsKICAgICAgICBjb25zdCBzaXplID0gY2h1bmtzW2ldLmZldGNoZWRTaXplKCk7CiAgICAgICAgaWYgKHNpemUgPiB0aGlzLmNodW5rU2l6ZUxpbWl0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvbyBtYW55IEJBTSBmZWF0dXJlcy4gQkFNIGNodW5rIHNpemUgJHtzaXplfSBieXRlcyBleGNlZWRzIGNodW5rU2l6ZUxpbWl0IG9mICR7dGhpcy5jaHVua1NpemVMaW1pdH1gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgdG90YWxTaXplID0gY2h1bmtzLm1hcCgocykgPT4gcy5mZXRjaGVkU2l6ZSgpKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICAgICAgaWYgKHRvdGFsU2l6ZSA+IHRoaXMuZmV0Y2hTaXplTGltaXQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRhdGEgc2l6ZSBvZiAke3RvdGFsU2l6ZS50b0xvY2FsZVN0cmluZygpfSBieXRlcyBleGNlZWRlZCBmZXRjaCBzaXplIGxpbWl0IG9mICR7dGhpcy5mZXRjaFNpemVMaW1pdC50b0xvY2FsZVN0cmluZygpfSBieXRlc2ApOwogICAgICB9CiAgICAgIHlpZWxkKiB0aGlzLl9mZXRjaENodW5rRmVhdHVyZXMoY2h1bmtzLCBjaHJJZCwgbWluLCBtYXgsIG9wdHMpOwogICAgfQogICAgYXN5bmMgKl9mZXRjaENodW5rRmVhdHVyZXMoY2h1bmtzLCBjaHJJZCwgbWluLCBtYXgsIG9wdHMpIHsKICAgICAgY29uc3QgeyB2aWV3QXNQYWlycyA9IGZhbHNlIH0gPSBvcHRzOwogICAgICBjb25zdCBmZWF0cyA9IFtdOwogICAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IGMgPSBjaHVua3NbaV07CiAgICAgICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMuZmVhdHVyZUNhY2hlLmdldChjLnRvU3RyaW5nKCksIHsKICAgICAgICAgIGNodW5rOiBjLAogICAgICAgICAgb3B0cwogICAgICAgIH0sIG9wdHMuc2lnbmFsKTsKICAgICAgICBjb25zdCByZWNzID0gW107CiAgICAgICAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IHJlY29yZHMubGVuZ3RoOyBpMiArPSAxKSB7CiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gcmVjb3Jkc1tpMl07CiAgICAgICAgICBpZiAoZmVhdHVyZS5zZXFfaWQoKSA9PT0gY2hySWQpIHsKICAgICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJzdGFydCIpID49IG1heCkgewogICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmUuZ2V0KCJlbmQiKSA+PSBtaW4pIHsKICAgICAgICAgICAgICByZWNzLnB1c2goZmVhdHVyZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmVhdHMucHVzaChyZWNzKTsKICAgICAgICB5aWVsZCByZWNzOwogICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2hlY2tBYm9ydFNpZ25hbChvcHRzLnNpZ25hbCk7CiAgICAgIGlmICh2aWV3QXNQYWlycykgewogICAgICAgIHlpZWxkIHRoaXMuZmV0Y2hQYWlycyhjaHJJZCwgZmVhdHMsIG9wdHMpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBmZXRjaFBhaXJzKGNocklkLCBmZWF0cywgb3B0cykgewogICAgICBjb25zdCB7IHBhaXJBY3Jvc3NDaHIgPSBmYWxzZSwgbWF4SW5zZXJ0U2l6ZSA9IDJlNSB9ID0gb3B0czsKICAgICAgY29uc3QgdW5tYXRlZFBhaXJzID0ge307CiAgICAgIGNvbnN0IHJlYWRJZHMgPSB7fTsKICAgICAgZmVhdHMubWFwKChyZXQpID0+IHsKICAgICAgICBjb25zdCByZWFkTmFtZXMgPSB7fTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykgewogICAgICAgICAgY29uc3QgbmFtZSA9IHJldFtpXS5uYW1lKCk7CiAgICAgICAgICBjb25zdCBpZCA9IHJldFtpXS5pZCgpOwogICAgICAgICAgaWYgKCFyZWFkTmFtZXNbbmFtZV0pIHsKICAgICAgICAgICAgcmVhZE5hbWVzW25hbWVdID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHJlYWROYW1lc1tuYW1lXSsrOwogICAgICAgICAgcmVhZElkc1tpZF0gPSAxOwogICAgICAgIH0KICAgICAgICAoMCwgaW1wb3J0X29iamVjdC5kZWZhdWx0KShyZWFkTmFtZXMpLmZvckVhY2goKFtrLCB2XSkgPT4gewogICAgICAgICAgaWYgKHYgPT09IDEpIHsKICAgICAgICAgICAgdW5tYXRlZFBhaXJzW2tdID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIGNvbnN0IG1hdGVQcm9taXNlcyA9IFtdOwogICAgICBmZWF0cy5tYXAoKHJldCkgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCBmID0gcmV0W2ldOwogICAgICAgICAgY29uc3QgbmFtZSA9IGYubmFtZSgpOwogICAgICAgICAgY29uc3Qgc3RhcnQgPSBmLmdldCgic3RhcnQiKTsKICAgICAgICAgIGNvbnN0IHBuZXh0ID0gZi5fbmV4dF9wb3MoKTsKICAgICAgICAgIGNvbnN0IHJuZXh0ID0gZi5fbmV4dF9yZWZpZCgpOwogICAgICAgICAgaWYgKHVubWF0ZWRQYWlyc1tuYW1lXSAmJiAocGFpckFjcm9zc0NociB8fCBybmV4dCA9PT0gY2hySWQgJiYgTWF0aC5hYnMoc3RhcnQgLSBwbmV4dCkgPCBtYXhJbnNlcnRTaXplKSkgewogICAgICAgICAgICBtYXRlUHJvbWlzZXMucHVzaCh0aGlzLmluZGV4LmJsb2Nrc0ZvclJhbmdlKHJuZXh0LCBwbmV4dCwgcG5leHQgKyAxLCBvcHRzKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgY29uc3QgbWF0ZUNodW5rcyA9IGZsYXQoYXdhaXQgUHJvbWlzZS5hbGwobWF0ZVByb21pc2VzKSkuc29ydCgpLmZpbHRlcigoaXRlbSwgcG9zLCBhcnkpID0+ICFwb3MgfHwgaXRlbS50b1N0cmluZygpICE9PSBhcnlbcG9zIC0gMV0udG9TdHJpbmcoKSk7CiAgICAgIGNvbnN0IG1hdGVUb3RhbFNpemUgPSBtYXRlQ2h1bmtzLm1hcCgocykgPT4gcy5mZXRjaGVkU2l6ZSgpKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICAgICAgaWYgKG1hdGVUb3RhbFNpemUgPiB0aGlzLmZldGNoU2l6ZUxpbWl0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkYXRhIHNpemUgb2YgJHttYXRlVG90YWxTaXplLnRvTG9jYWxlU3RyaW5nKCl9IGJ5dGVzIGV4Y2VlZGVkIGZldGNoIHNpemUgbGltaXQgb2YgJHt0aGlzLmZldGNoU2l6ZUxpbWl0LnRvTG9jYWxlU3RyaW5nKCl9IGJ5dGVzYCk7CiAgICAgIH0KICAgICAgY29uc3QgbWF0ZUZlYXRQcm9taXNlcyA9IG1hdGVDaHVua3MubWFwKGFzeW5jIChjKSA9PiB7CiAgICAgICAgY29uc3QgeyBkYXRhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuayB9ID0gYXdhaXQgdGhpcy5fcmVhZENodW5rKHsKICAgICAgICAgIGNodW5rOiBjLAogICAgICAgICAgb3B0cwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGZlYXRzMiA9IGF3YWl0IHRoaXMucmVhZEJhbUZlYXR1cmVzKGRhdGEsIGNwb3NpdGlvbnMsIGRwb3NpdGlvbnMsIGNodW5rKTsKICAgICAgICBjb25zdCBtYXRlUmVjcyA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHMyLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHMyW2ldOwogICAgICAgICAgaWYgKHVubWF0ZWRQYWlyc1tmZWF0dXJlLmdldCgibmFtZSIpXSAmJiAhcmVhZElkc1tmZWF0dXJlLmlkKCldKSB7CiAgICAgICAgICAgIG1hdGVSZWNzLnB1c2goZmVhdHVyZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBtYXRlUmVjczsKICAgICAgfSk7CiAgICAgIHJldHVybiBmbGF0KGF3YWl0IFByb21pc2UuYWxsKG1hdGVGZWF0UHJvbWlzZXMpKTsKICAgIH0KICAgIGFzeW5jIF9yZWFkQ2h1bmsoeyBjaHVuaywgb3B0cyB9KSB7CiAgICAgIGNvbnN0IHNpemUgPSBjaHVuay5mZXRjaGVkU2l6ZSgpOwogICAgICBjb25zdCB7IGJ1ZmZlciwgYnl0ZXNSZWFkIH0gPSBhd2FpdCB0aGlzLmJhbS5yZWFkKGltcG9ydF9idWZmZXIuQnVmZmVyLmFsbG9jKHNpemUpLCAwLCBzaXplLCBjaHVuay5taW52LmJsb2NrUG9zaXRpb24sIG9wdHMpOwogICAgICBjb25zdCB7IGJ1ZmZlcjogZGF0YSwgY3Bvc2l0aW9ucywgZHBvc2l0aW9ucyB9ID0gYXdhaXQgdW56aXBDaHVua1NsaWNlKGJ1ZmZlci5zdWJhcnJheSgwLCBNYXRoLm1pbihieXRlc1JlYWQsIHNpemUpKSwgY2h1bmspOwogICAgICByZXR1cm4geyBkYXRhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuayB9OwogICAgfQogICAgYXN5bmMgcmVhZEJhbUZlYXR1cmVzKGJhLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zLCBjaHVuaykgewogICAgICBsZXQgYmxvY2tTdGFydCA9IDA7CiAgICAgIGNvbnN0IHNpbmsgPSBbXTsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGxldCBsYXN0ID0gK0RhdGUubm93KCk7CiAgICAgIHdoaWxlIChibG9ja1N0YXJ0ICsgNCA8IGJhLmxlbmd0aCkgewogICAgICAgIGNvbnN0IGJsb2NrU2l6ZSA9IGJhLnJlYWRJbnQzMkxFKGJsb2NrU3RhcnQpOwogICAgICAgIGNvbnN0IGJsb2NrRW5kID0gYmxvY2tTdGFydCArIDQgKyBibG9ja1NpemUgLSAxOwogICAgICAgIGlmIChkcG9zaXRpb25zKSB7CiAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFydCArIGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uID49IGRwb3NpdGlvbnNbcG9zKytdKSB7CiAgICAgICAgICB9CiAgICAgICAgICBwb3MtLTsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrRW5kIDwgYmEubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbmV3IEJhbVJlY29yZCh7CiAgICAgICAgICAgIGJ5dGVzOiB7CiAgICAgICAgICAgICAgYnl0ZUFycmF5OiBiYSwKICAgICAgICAgICAgICBzdGFydDogYmxvY2tTdGFydCwKICAgICAgICAgICAgICBlbmQ6IGJsb2NrRW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZpbGVPZmZzZXQ6IGNwb3NpdGlvbnMgPyBjcG9zaXRpb25zW3Bvc10gKiAoMSA8PCA4KSArIChibG9ja1N0YXJ0IC0gZHBvc2l0aW9uc1twb3NdKSArIGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uICsgMSA6IGltcG9ydF9idWZmZXJfY3JjMzIuZGVmYXVsdC5zaWduZWQoYmEuc2xpY2UoYmxvY2tTdGFydCwgYmxvY2tFbmQpKQogICAgICAgICAgfSk7CiAgICAgICAgICBzaW5rLnB1c2goZmVhdHVyZSk7CiAgICAgICAgICBpZiAodGhpcy55aWVsZFRocmVhZFRpbWUgJiYgK0RhdGUubm93KCkgLSBsYXN0ID4gdGhpcy55aWVsZFRocmVhZFRpbWUpIHsKICAgICAgICAgICAgYXdhaXQgdGltZW91dCgxKTsKICAgICAgICAgICAgbGFzdCA9ICtEYXRlLm5vdygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBibG9ja1N0YXJ0ID0gYmxvY2tFbmQgKyAxOwogICAgICB9CiAgICAgIHJldHVybiBzaW5rOwogICAgfQogICAgYXN5bmMgaGFzUmVmU2VxKHNlcU5hbWUpIHsKICAgICAgY29uc3QgcmVmSWQgPSB0aGlzLmNoclRvSW5kZXggJiYgdGhpcy5jaHJUb0luZGV4W3NlcU5hbWVdOwogICAgICByZXR1cm4gdGhpcy5pbmRleC5oYXNSZWZTZXEocmVmSWQpOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHNlcU5hbWUpIHsKICAgICAgY29uc3QgcmVmSWQgPSB0aGlzLmNoclRvSW5kZXggJiYgdGhpcy5jaHJUb0luZGV4W3NlcU5hbWVdOwogICAgICByZXR1cm4gdGhpcy5pbmRleC5saW5lQ291bnQocmVmSWQpOwogICAgfQogICAgYXN5bmMgaW5kZXhDb3Yoc2VxTmFtZSwgc3RhcnQsIGVuZCkgewogICAgICBhd2FpdCB0aGlzLmluZGV4LnBhcnNlKCk7CiAgICAgIGNvbnN0IHNlcUlkID0gdGhpcy5jaHJUb0luZGV4ICYmIHRoaXMuY2hyVG9JbmRleFtzZXFOYW1lXTsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaW5kZXhDb3Yoc2VxSWQsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgYXN5bmMgYmxvY2tzRm9yUmFuZ2Uoc2VxTmFtZSwgc3RhcnQsIGVuZCwgb3B0cykgewogICAgICBhd2FpdCB0aGlzLmluZGV4LnBhcnNlKCk7CiAgICAgIGNvbnN0IHNlcUlkID0gdGhpcy5jaHJUb0luZGV4ICYmIHRoaXMuY2hyVG9JbmRleFtzZXFOYW1lXTsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXguYmxvY2tzRm9yUmFuZ2Uoc2VxSWQsIHN0YXJ0LCBlbmQsIG9wdHMpOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiYW1AMS4xLjE4L25vZGVfbW9kdWxlcy9AZ21vZC9iYW0vZXNtL2h0c2dldC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X3BvbHlmaWxsID0gX190b01vZHVsZShyZXF1aXJlX2Jyb3dzZXJfcG9seWZpbGwoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVANi4xLjIvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgUXVpY2tMUlUyID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIGlmICghKG9wdGlvbnMubWF4U2l6ZSAmJiBvcHRpb25zLm1heFNpemUgPiAwKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBtYXhTaXplYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heEFnZSA9PT0gIm51bWJlciIgJiYgb3B0aW9ucy5tYXhBZ2UgPT09IDApIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4QWdlYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7CiAgICAgIH0KICAgICAgdGhpcy5tYXhTaXplID0gb3B0aW9ucy5tYXhTaXplOwogICAgICB0aGlzLm1heEFnZSA9IG9wdGlvbnMubWF4QWdlIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgdGhpcy5vbkV2aWN0aW9uID0gb3B0aW9ucy5vbkV2aWN0aW9uOwogICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICB0aGlzLm9sZENhY2hlID0gbmV3IE1hcCgpOwogICAgICB0aGlzLl9zaXplID0gMDsKICAgIH0KICAgIF9lbWl0RXZpY3Rpb25zKGNhY2hlKSB7CiAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkV2aWN0aW9uICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgY2FjaGUpIHsKICAgICAgICB0aGlzLm9uRXZpY3Rpb24oa2V5LCBpdGVtLnZhbHVlKTsKICAgICAgfQogICAgfQogICAgX2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIHsKICAgICAgaWYgKHR5cGVvZiBpdGVtLmV4cGlyeSA9PT0gIm51bWJlciIgJiYgaXRlbS5leHBpcnkgPD0gRGF0ZS5ub3coKSkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkV2aWN0aW9uID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGlzLm9uRXZpY3Rpb24oa2V5LCBpdGVtLnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2dldE9yRGVsZXRlSWZFeHBpcmVkKGtleSwgaXRlbSkgewogICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5fZGVsZXRlSWZFeHBpcmVkKGtleSwgaXRlbSk7CiAgICAgIGlmIChkZWxldGVkID09PSBmYWxzZSkgewogICAgICAgIHJldHVybiBpdGVtLnZhbHVlOwogICAgICB9CiAgICB9CiAgICBfZ2V0SXRlbVZhbHVlKGtleSwgaXRlbSkgewogICAgICByZXR1cm4gaXRlbS5leHBpcnkgPyB0aGlzLl9nZXRPckRlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIDogaXRlbS52YWx1ZTsKICAgIH0KICAgIF9wZWVrKGtleSwgY2FjaGUpIHsKICAgICAgY29uc3QgaXRlbSA9IGNhY2hlLmdldChrZXkpOwogICAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbVZhbHVlKGtleSwgaXRlbSk7CiAgICB9CiAgICBfc2V0KGtleSwgdmFsdWUpIHsKICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgIHRoaXMuX3NpemUrKzsKICAgICAgaWYgKHRoaXMuX3NpemUgPj0gdGhpcy5tYXhTaXplKSB7CiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5fZW1pdEV2aWN0aW9ucyh0aGlzLm9sZENhY2hlKTsKICAgICAgICB0aGlzLm9sZENhY2hlID0gdGhpcy5jYWNoZTsKICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICB9CiAgICB9CiAgICBfbW92ZVRvUmVjZW50KGtleSwgaXRlbSkgewogICAgICB0aGlzLm9sZENhY2hlLmRlbGV0ZShrZXkpOwogICAgICB0aGlzLl9zZXQoa2V5LCBpdGVtKTsKICAgIH0KICAgICpfZW50cmllc0FzY2VuZGluZygpIHsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub2xkQ2FjaGUpIHsKICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtOwogICAgICAgIGlmICghdGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTsKICAgICAgICAgIGlmIChkZWxldGVkID09PSBmYWxzZSkgewogICAgICAgICAgICB5aWVsZCBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jYWNoZSkgewogICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGl0ZW07CiAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTsKICAgICAgICBpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgIHlpZWxkIGl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBnZXQoa2V5KSB7CiAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1WYWx1ZShrZXksIGl0ZW0pOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMub2xkQ2FjaGUuZ2V0KGtleSk7CiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pID09PSBmYWxzZSkgewogICAgICAgICAgdGhpcy5fbW92ZVRvUmVjZW50KGtleSwgaXRlbSk7CiAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNldChrZXksIHZhbHVlLCB7IG1heEFnZSA9IHRoaXMubWF4QWdlIH0gPSB7fSkgewogICAgICBjb25zdCBleHBpcnkgPSB0eXBlb2YgbWF4QWdlID09PSAibnVtYmVyIiAmJiBtYXhBZ2UgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA/IERhdGUubm93KCkgKyBtYXhBZ2UgOiB2b2lkIDA7CiAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7CiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGV4cGlyeQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX3NldChrZXksIHsgdmFsdWUsIGV4cGlyeSB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGhhcyhrZXkpIHsKICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICByZXR1cm4gIXRoaXMuX2RlbGV0ZUlmRXhwaXJlZChrZXksIHRoaXMuY2FjaGUuZ2V0KGtleSkpOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgcmV0dXJuICF0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB0aGlzLm9sZENhY2hlLmdldChrZXkpKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBwZWVrKGtleSkgewogICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgIHJldHVybiB0aGlzLl9wZWVrKGtleSwgdGhpcy5jYWNoZSk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMub2xkQ2FjaGUuaGFzKGtleSkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcGVlayhrZXksIHRoaXMub2xkQ2FjaGUpOwogICAgICB9CiAgICB9CiAgICBkZWxldGUoa2V5KSB7CiAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICBpZiAoZGVsZXRlZCkgewogICAgICAgIHRoaXMuX3NpemUtLTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5vbGRDYWNoZS5kZWxldGUoa2V5KSB8fCBkZWxldGVkOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTsKICAgICAgdGhpcy5vbGRDYWNoZS5jbGVhcigpOwogICAgICB0aGlzLl9zaXplID0gMDsKICAgIH0KICAgIHJlc2l6ZShuZXdTaXplKSB7CiAgICAgIGlmICghKG5ld1NpemUgJiYgbmV3U2l6ZSA+IDApKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiYG1heFNpemVgIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAiKTsKICAgICAgfQogICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLl9lbnRyaWVzQXNjZW5kaW5nKCldOwogICAgICBjb25zdCByZW1vdmVDb3VudCA9IGl0ZW1zLmxlbmd0aCAtIG5ld1NpemU7CiAgICAgIGlmIChyZW1vdmVDb3VudCA8IDApIHsKICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcChpdGVtcyk7CiAgICAgICAgdGhpcy5vbGRDYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICB0aGlzLl9zaXplID0gaXRlbXMubGVuZ3RoOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChyZW1vdmVDb3VudCA+IDApIHsKICAgICAgICAgIHRoaXMuX2VtaXRFdmljdGlvbnMoaXRlbXMuc2xpY2UoMCwgcmVtb3ZlQ291bnQpKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vbGRDYWNoZSA9IG5ldyBNYXAoaXRlbXMuc2xpY2UocmVtb3ZlQ291bnQpKTsKICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICB9CiAgICAgIHRoaXMubWF4U2l6ZSA9IG5ld1NpemU7CiAgICB9CiAgICAqa2V5cygpIHsKICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB0aGlzKSB7CiAgICAgICAgeWllbGQga2V5OwogICAgICB9CiAgICB9CiAgICAqdmFsdWVzKCkgewogICAgICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiB0aGlzKSB7CiAgICAgICAgeWllbGQgdmFsdWU7CiAgICAgIH0KICAgIH0KICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY2FjaGUpIHsKICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtOwogICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgaWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICB5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm9sZENhY2hlKSB7CiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaXRlbTsKICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICBpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgeWllbGQgW2tleSwgdmFsdWUudmFsdWVdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgKmVudHJpZXNEZXNjZW5kaW5nKCkgewogICAgICBsZXQgaXRlbXMgPSBbLi4udGhpcy5jYWNoZV07CiAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewogICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTsKICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtOwogICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgaWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICB5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07CiAgICAgICAgfQogICAgICB9CiAgICAgIGl0ZW1zID0gWy4uLnRoaXMub2xkQ2FjaGVdOwogICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07CiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaXRlbTsKICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICBpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgeWllbGQgW2tleSwgdmFsdWUudmFsdWVdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgKmVudHJpZXNBc2NlbmRpbmcoKSB7CiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuX2VudHJpZXNBc2NlbmRpbmcoKSkgewogICAgICAgIHlpZWxkIFtrZXksIHZhbHVlLnZhbHVlXTsKICAgICAgfQogICAgfQogICAgZ2V0IHNpemUoKSB7CiAgICAgIGlmICghdGhpcy5fc2l6ZSkgewogICAgICAgIHJldHVybiB0aGlzLm9sZENhY2hlLnNpemU7CiAgICAgIH0KICAgICAgbGV0IG9sZENhY2hlU2l6ZSA9IDA7CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMub2xkQ2FjaGUua2V5cygpKSB7CiAgICAgICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICBvbGRDYWNoZVNpemUrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuX3NpemUgKyBvbGRDYWNoZVNpemUsIHRoaXMubWF4U2l6ZSk7CiAgICB9CiAgICBlbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy5lbnRyaWVzQXNjZW5kaW5nKCk7CiAgICB9CiAgICBmb3JFYWNoKGNhbGxiYWNrRnVuY3Rpb24sIHRoaXNBcmd1bWVudCA9IHRoaXMpIHsKICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5lbnRyaWVzQXNjZW5kaW5nKCkpIHsKICAgICAgICBjYWxsYmFja0Z1bmN0aW9uLmNhbGwodGhpc0FyZ3VtZW50LCB2YWx1ZSwga2V5LCB0aGlzKTsKICAgICAgfQogICAgfQogICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkgewogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLnRoaXMuZW50cmllc0FzY2VuZGluZygpXSk7CiAgICB9CiAgfTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kMy1hcnJheUAyLjEyLjEvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2QzLWFycmF5QDIuMTIuMS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhc2NlbmRpbmdfZGVmYXVsdChhLCBiKSB7CiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZDMtYXJyYXlAMi4xMi4xL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmlzZWN0b3JfZGVmYXVsdChmKSB7CiAgICBsZXQgZGVsdGEgPSBmOwogICAgbGV0IGNvbXBhcmUgPSBmOwogICAgaWYgKGYubGVuZ3RoID09PSAxKSB7CiAgICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4OwogICAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICBjb25zdCBtaWQgPSBsbyArIGhpID4+PiAxOwogICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKQogICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgIGhpID0gbWlkOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICAgIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkKICAgICAgICBsbyA9IDA7CiAgICAgIGlmIChoaSA9PSBudWxsKQogICAgICAgIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkKICAgICAgICAgIGhpID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgIGxvID0gbWlkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbG87CiAgICB9CiAgICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7CiAgICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpOwogICAgfQogICAgcmV0dXJuIHsgbGVmdCwgY2VudGVyLCByaWdodCB9OwogIH0KICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHsKICAgIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nX2RlZmF1bHQoZihkKSwgeCk7CiAgfQoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy91dGlscy50cwogIHZhciBEYXRhU291cmNlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZmlsZSwgY2hyb21TaXplcywgb3B0aW9ucykgewogICAgICB0aGlzLmZpbGUgPSBmaWxlOwogICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmNocm9tSW5mbyA9IHNpemVzVG9DaHJvbUluZm8oY2hyb21TaXplcyk7CiAgICAgIHRoaXMudGlsZXNldEluZm8gPSB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8odGhpcy5jaHJvbUluZm8pOwogICAgfQogICAgY2hyb21JbmZvOwogICAgdGlsZXNldEluZm87CiAgfTsKICB2YXIgY2hyb21JbmZvQmlzZWN0b3IgPSBiaXNlY3Rvcl9kZWZhdWx0KChkKSA9PiBkLnBvcykubGVmdDsKICB2YXIgY2hyVG9BYnMgPSAoY2hyb20sIGNocm9tUG9zLCBjaHJvbUluZm8pID0+IGNocm9tSW5mby5jaHJQb3NpdGlvbnNbY2hyb21dLnBvcyArIGNocm9tUG9zOwogIHZhciBhYnNUb0NociA9IChhYnNQb3NpdGlvbiwgY2hyb21JbmZvKSA9PiB7CiAgICBpZiAoIWNocm9tSW5mbyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgaW5zZXJ0UG9pbnQgPSBjaHJvbUluZm9CaXNlY3RvcihjaHJvbUluZm8uY3VtUG9zaXRpb25zLCBhYnNQb3NpdGlvbik7CiAgICBjb25zdCBsYXN0Q2hyID0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tjaHJvbUluZm8uY3VtUG9zaXRpb25zLmxlbmd0aCAtIDFdLmNocjsKICAgIGNvbnN0IGxhc3RMZW5ndGggPSBjaHJvbUluZm8uY2hyb21MZW5ndGhzW2xhc3RDaHJdOwogICAgaW5zZXJ0UG9pbnQgLT0gaW5zZXJ0UG9pbnQgPiAwICYmIDE7CiAgICBsZXQgY2hyUG9zaXRpb24gPSBNYXRoLmZsb29yKGFic1Bvc2l0aW9uIC0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0ucG9zKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaWYgKGNoclBvc2l0aW9uIDwgMCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIDE7CiAgICAgIGNoclBvc2l0aW9uID0gMTsKICAgIH0KICAgIGlmIChpbnNlcnRQb2ludCA9PT0gY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIGNoclBvc2l0aW9uID4gbGFzdExlbmd0aCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIGxhc3RMZW5ndGg7CiAgICAgIGNoclBvc2l0aW9uID0gbGFzdExlbmd0aDsKICAgIH0KICAgIHJldHVybiBbY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0uY2hyLCBjaHJQb3NpdGlvbiwgb2Zmc2V0LCBpbnNlcnRQb2ludF07CiAgfTsKICBmdW5jdGlvbiB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8oY2hyb21JbmZvLCB0aWxlU2l6ZSA9IDEwMjQpIHsKICAgIHJldHVybiB7CiAgICAgIHRpbGVfc2l6ZTogdGlsZVNpemUsCiAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbjogdGlsZVNpemUsCiAgICAgIG1heF96b29tOiBNYXRoLmNlaWwoTWF0aC5sb2coY2hyb21JbmZvLnRvdGFsTGVuZ3RoIC8gdGlsZVNpemUpIC8gTWF0aC5sb2coMikpLAogICAgICBtYXhfd2lkdGg6IGNocm9tSW5mby50b3RhbExlbmd0aCwKICAgICAgbWluX3BvczogWzBdLAogICAgICBtYXhfcG9zOiBbY2hyb21JbmZvLnRvdGFsTGVuZ3RoXQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2l6ZXNUb0Nocm9tSW5mbyhzaXplcykgewogICAgY29uc3QgaW5mbyA9IHsKICAgICAgY3VtUG9zaXRpb25zOiBbXSwKICAgICAgY2hyb21MZW5ndGhzOiB7fSwKICAgICAgY2hyUG9zaXRpb25zOiB7fSwKICAgICAgdG90YWxMZW5ndGg6IDAKICAgIH07CiAgICBzaXplcy5mb3JFYWNoKChbY2hyLCBsZW5ndGhdLCBpKSA9PiB7CiAgICAgIGNvbnN0IGNoclBvc2l0aW9uID0geyBpZDogaSwgY2hyLCBwb3M6IGluZm8udG90YWxMZW5ndGggfTsKICAgICAgaW5mby5jaHJQb3NpdGlvbnNbY2hyXSA9IGNoclBvc2l0aW9uOwogICAgICBpbmZvLmNocm9tTGVuZ3Roc1tjaHJdID0gbGVuZ3RoOwogICAgICBpbmZvLmN1bVBvc2l0aW9ucy5wdXNoKGNoclBvc2l0aW9uKTsKICAgICAgaW5mby50b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmluZm8sCiAgICAgIGFic1RvQ2hyOiAoYWJzUG9zKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGFic1RvQ2hyKGFic1BvcywgaW5mbykgOiBudWxsLAogICAgICBjaHJUb0FiczogKFtjaHJOYW1lLCBjaHJQb3NdKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGNoclRvQWJzKGNock5hbWUsIGNoclBvcywgaW5mbykgOiBudWxsCiAgICB9OwogIH0KICB2YXIgUmVtb3RlRmlsZTIgPSBjbGFzcyBleHRlbmRzIFJlbW90ZUZpbGUgewogICAgcmVhZCA9IGFzeW5jIChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pID0+IHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApOwogICAgfTsKICB9OwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy9iYW0vYmFtLXdvcmtlci50cz93b3JrZXImaW5saW5lP3dvcmtlcl9maWxlCiAgZnVuY3Rpb24gcGFyc2VNRChtZFN0cmluZywgdXNlQ291bnRzKSB7CiAgICBsZXQgY3VyclBvcyA9IDA7CiAgICBsZXQgY3Vyck51bSA9IDA7CiAgICBsZXQgZGVsZXRpb25FbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgbGV0IGJhbVNlcVNoaWZ0ID0gMDsKICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWRTdHJpbmcubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKG1kU3RyaW5nW2ldLm1hdGNoKC9bMC05XS9nKSkgewogICAgICAgIGN1cnJOdW0gPSBjdXJyTnVtICogMTAgKyArbWRTdHJpbmdbaV07CiAgICAgICAgZGVsZXRpb25FbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKG1kU3RyaW5nW2ldID09PSAiXiIpIHsKICAgICAgICBkZWxldGlvbkVuY291bnRlcmVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjdXJyUG9zICs9IGN1cnJOdW07CiAgICAgICAgaWYgKHVzZUNvdW50cykgewogICAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgbGVuZ3RoOiBjdXJyTnVtLAogICAgICAgICAgICB0eXBlOiBtZFN0cmluZ1tpXQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChkZWxldGlvbkVuY291bnRlcmVkKSB7CiAgICAgICAgICBiYW1TZXFTaGlmdCAtPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzdGl0dXRpb25zLnB1c2goewogICAgICAgICAgICBwb3M6IGN1cnJQb3MsCiAgICAgICAgICAgIGJhc2U6IG1kU3RyaW5nW2ldLAogICAgICAgICAgICBsZW5ndGg6IDEsCiAgICAgICAgICAgIGJhbVNlcVNoaWZ0CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY3Vyck51bSA9IDA7CiAgICAgICAgY3VyclBvcyArPSAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uczsKICB9CiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9ucyhzZWdtZW50LCBzZXEpIHsKICAgIGxldCBzdWJzdGl0dXRpb25zID0gW107CiAgICBsZXQgc29mdENsaXBwaW5nQXRSZWFkU3RhcnQgPSBudWxsOwogICAgaWYgKHNlZ21lbnQuY2lnYXIpIHsKICAgICAgY29uc3QgY2lnYXJTdWJzID0gcGFyc2VNRChzZWdtZW50LmNpZ2FyLCB0cnVlKTsKICAgICAgbGV0IGN1cnJQb3MgPSAwOwogICAgICBmb3IgKGNvbnN0IHN1YiBvZiBjaWdhclN1YnMpIHsKICAgICAgICBpZiAoc3ViLnR5cGUgPT09ICJYIikgewogICAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgcG9zOiBjdXJyUG9zLAogICAgICAgICAgICBsZW5ndGg6IHN1Yi5sZW5ndGgsCiAgICAgICAgICAgIHR5cGU6ICJYIgogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyUG9zICs9IHN1Yi5sZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChzdWIudHlwZSA9PT0gIkkiKSB7CiAgICAgICAgICBzdWJzdGl0dXRpb25zLnB1c2goewogICAgICAgICAgICBwb3M6IGN1cnJQb3MsCiAgICAgICAgICAgIGxlbmd0aDogc3ViLmxlbmd0aCwKICAgICAgICAgICAgdHlwZTogIkkiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKHN1Yi50eXBlID09PSAiRCIpIHsKICAgICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh7CiAgICAgICAgICAgIHBvczogY3VyclBvcywKICAgICAgICAgICAgbGVuZ3RoOiBzdWIubGVuZ3RoLAogICAgICAgICAgICB0eXBlOiAiRCIKICAgICAgICAgIH0pOwogICAgICAgICAgY3VyclBvcyArPSBzdWIubGVuZ3RoOwogICAgICAgIH0gZWxzZSBpZiAoc3ViLnR5cGUgPT09ICJOIikgewogICAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgcG9zOiBjdXJyUG9zLAogICAgICAgICAgICBsZW5ndGg6IHN1Yi5sZW5ndGgsCiAgICAgICAgICAgIHR5cGU6ICJOIgogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyUG9zICs9IHN1Yi5sZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChzdWIudHlwZSA9PT0gIj0iIHx8IHN1Yi50eXBlID09PSAiTSIpIHsKICAgICAgICAgIGN1cnJQb3MgKz0gc3ViLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBmaXJzdFN1YiA9IGNpZ2FyU3Vic1swXTsKICAgICAgY29uc3QgbGFzdFN1YiA9IGNpZ2FyU3Vic1tjaWdhclN1YnMubGVuZ3RoIC0gMV07CiAgICAgIGlmIChmaXJzdFN1Yi50eXBlID09PSAiUyIpIHsKICAgICAgICBzb2Z0Q2xpcHBpbmdBdFJlYWRTdGFydCA9IGZpcnN0U3ViOwogICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh7CiAgICAgICAgICBwb3M6IC1maXJzdFN1Yi5sZW5ndGgsCiAgICAgICAgICB0eXBlOiAiUyIsCiAgICAgICAgICBsZW5ndGg6IGZpcnN0U3ViLmxlbmd0aAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChsYXN0U3ViLnR5cGUgPT09ICJTIikgewogICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh7CiAgICAgICAgICBwb3M6IHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydCwKICAgICAgICAgIGxlbmd0aDogbGFzdFN1Yi5sZW5ndGgsCiAgICAgICAgICB0eXBlOiAiUyIKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZmlyc3RTdWIudHlwZSA9PT0gIkgiKSB7CiAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgIHBvczogLWZpcnN0U3ViLmxlbmd0aCwKICAgICAgICAgIHR5cGU6ICJIIiwKICAgICAgICAgIGxlbmd0aDogZmlyc3RTdWIubGVuZ3RoCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGxhc3RTdWIudHlwZSA9PT0gIkgiKSB7CiAgICAgICAgc3Vic3RpdHV0aW9ucy5wdXNoKHsKICAgICAgICAgIHBvczogc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0LAogICAgICAgICAgbGVuZ3RoOiBsYXN0U3ViLmxlbmd0aCwKICAgICAgICAgIHR5cGU6ICJIIgogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpZiAoc2VnbWVudC5tZCkgewogICAgICBjb25zdCBtZFN1YnN0aXR1dGlvbnMgPSBwYXJzZU1EKHNlZ21lbnQubWQsIGZhbHNlKTsKICAgICAgbWRTdWJzdGl0dXRpb25zLmZvckVhY2goZnVuY3Rpb24oc3Vic3RpdHV0aW9uKSB7CiAgICAgICAgbGV0IHBvc1N0YXJ0ID0gc3Vic3RpdHV0aW9uWyJwb3MiXSArIHN1YnN0aXR1dGlvblsiYmFtU2VxU2hpZnQiXTsKICAgICAgICBsZXQgcG9zRW5kID0gcG9zU3RhcnQgKyBzdWJzdGl0dXRpb25bImxlbmd0aCJdOwogICAgICAgIGlmIChzb2Z0Q2xpcHBpbmdBdFJlYWRTdGFydCAhPT0gbnVsbCkgewogICAgICAgICAgcG9zU3RhcnQgKz0gc29mdENsaXBwaW5nQXRSZWFkU3RhcnQubGVuZ3RoOwogICAgICAgICAgcG9zRW5kICs9IHNvZnRDbGlwcGluZ0F0UmVhZFN0YXJ0Lmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3Vic3RpdHV0aW9uWyJ2YXJpYW50Il0gPSBzZXEuc3Vic3RyaW5nKHBvc1N0YXJ0LCBwb3NFbmQpOwogICAgICAgIGRlbGV0ZSBzdWJzdGl0dXRpb25bImJhbVNlcVNoaWZ0Il07CiAgICAgIH0pOwogICAgICBzdWJzdGl0dXRpb25zID0gbWRTdWJzdGl0dXRpb25zLmNvbmNhdChzdWJzdGl0dXRpb25zKTsKICAgIH0KICAgIHJldHVybiBzdWJzdGl0dXRpb25zOwogIH0KICB2YXIgYmFtUmVjb3JkVG9Kc29uID0gKGJhbVJlY29yZCwgY2hyTmFtZSwgY2hyT2Zmc2V0KSA9PiB7CiAgICBjb25zdCBzZXEgPSBiYW1SZWNvcmQuZ2V0KCJzZXEiKTsKICAgIGNvbnN0IHNlZ21lbnQgPSB7CiAgICAgIGlkOiBiYW1SZWNvcmQuX2lkLAogICAgICBuYW1lOiBiYW1SZWNvcmQuZ2V0KCJuYW1lIiksCiAgICAgIHN0YXJ0OiArYmFtUmVjb3JkLmRhdGEuc3RhcnQgKyAxICsgY2hyT2Zmc2V0LAogICAgICBlbmQ6ICtiYW1SZWNvcmQuZGF0YS5lbmQgKyAxICsgY2hyT2Zmc2V0LAogICAgICBtZDogYmFtUmVjb3JkLmdldCgiTUQiKSwKICAgICAgY2hyTmFtZSwKICAgICAgY2hyT2Zmc2V0LAogICAgICBjaWdhcjogYmFtUmVjb3JkLmdldCgiY2lnYXIiKSwKICAgICAgbWFwcTogYmFtUmVjb3JkLmdldCgibXEiKSwKICAgICAgc3RyYW5kOiBiYW1SZWNvcmQuZ2V0KCJzdHJhbmQiKSA9PT0gMSA/ICIrIiA6ICItIgogICAgfTsKICAgIHJldHVybiBPYmplY3QuYXNzaWduKHNlZ21lbnQsIHsgc3Vic3RpdHV0aW9uczogZ2V0U3Vic3RpdHV0aW9ucyhzZWdtZW50LCBzZXEpIH0pOwogIH07CiAgdmFyIEJhbUZpbGUyID0gY2xhc3MgZXh0ZW5kcyBCYW1GaWxlIHsKICAgIGhlYWRlclByb21pc2U7CiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3MpOwogICAgICB0aGlzLmhlYWRlclByb21pc2UgPSB0aGlzLmdldEhlYWRlcigpOwogICAgfQogICAgc3RhdGljIGZyb21VcmwodXJsLCBpbmRleFVybCwgdXJsRmV0Y2hPcHRpb25zLCBpbmRleFVybEZldGNoT3B0aW9ucykgewogICAgICByZXR1cm4gbmV3IEJhbUZpbGUyKHsKICAgICAgICBiYW1GaWxlaGFuZGxlOiBuZXcgUmVtb3RlRmlsZTIodXJsLCB7IG92ZXJyaWRlczogdXJsRmV0Y2hPcHRpb25zIH0pLAogICAgICAgIGJhaUZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlMihpbmRleFVybCwgeyBvdmVycmlkZXM6IGluZGV4VXJsRmV0Y2hPcHRpb25zIH0pCiAgICAgIH0pOwogICAgfQogICAgZ2V0Q2hyb21OYW1lcygpIHsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXhUb0Noci5tYXAoKHYpID0+IHYucmVmTmFtZSk7CiAgICB9CiAgfTsKICB2YXIgZGF0YVNvdXJjZXMgPSBuZXcgTWFwKCk7CiAgdmFyIGJhbUZpbGVDYWNoZSA9IG5ldyBNYXAoKTsKICB2YXIgTUFYX1RJTEVTID0gMjA7CiAgdmFyIHRpbGVWYWx1ZXMgPSBuZXcgUXVpY2tMUlUyKHsgbWF4U2l6ZTogTUFYX1RJTEVTIH0pOwogIHZhciBpbml0ID0gYXN5bmMgKHVpZCwgYmFtLCBjaHJvbVNpemVzLCBvcHRpb25zID0ge30pID0+IHsKICAgIGlmICghYmFtRmlsZUNhY2hlLmhhcyhiYW0udXJsKSkgewogICAgICBjb25zdCBiYW1GaWxlMiA9IEJhbUZpbGUyLmZyb21VcmwoYmFtLnVybCwgYmFtLmluZGV4VXJsLCBvcHRpb25zLnVybEZldGNoT3B0aW9ucywgb3B0aW9ucy5pbmRleFVybEZldGNoT3B0aW9ucyk7CiAgICAgIGF3YWl0IGJhbUZpbGUyLmdldEhlYWRlcigpOwogICAgICBjb25zdCBmaXJzdENocm9tTmFtZUluSGVhZGVyID0gYmFtRmlsZTIuZ2V0Q2hyb21OYW1lcygpWzBdOwogICAgICBpZiAoZmlyc3RDaHJvbU5hbWVJbkhlYWRlcikgewogICAgICAgIGNvbnN0IGhlYWRlckhhc1ByZWZpeCA9IGZpcnN0Q2hyb21OYW1lSW5IZWFkZXIuaW5jbHVkZXMoImNociIpOwogICAgICAgIGNvbnN0IHNwZWNIYXNQcmVmaXggPSBjaHJvbVNpemVzWzBdPy5bMF0uaW5jbHVkZXMoImNociIpOwogICAgICAgIGlmIChoZWFkZXJIYXNQcmVmaXggJiYgIXNwZWNIYXNQcmVmaXgpIHsKICAgICAgICAgIGNocm9tU2l6ZXMgPSBjaHJvbVNpemVzLm1hcCgoW3MsIG5dKSA9PiBbYGNociR7c31gLCBuXSk7CiAgICAgICAgfSBlbHNlIGlmICghaGVhZGVySGFzUHJlZml4ICYmIHNwZWNIYXNQcmVmaXgpIHsKICAgICAgICAgIGNocm9tU2l6ZXMgPSBjaHJvbVNpemVzLm1hcCgoW3MsIG5dKSA9PiBbcy5yZXBsYWNlKCJjaHIiLCAiIiksIG5dKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmFtRmlsZUNhY2hlLnNldChiYW0udXJsLCBiYW1GaWxlMik7CiAgICB9CiAgICBjb25zdCBiYW1GaWxlID0gYmFtRmlsZUNhY2hlLmdldChiYW0udXJsKTsKICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgRGF0YVNvdXJjZShiYW1GaWxlLCBjaHJvbVNpemVzLCB7CiAgICAgIGxvYWRNYXRlczogZmFsc2UsCiAgICAgIG1heEluc2VydFNpemU6IDVlMywKICAgICAgZXh0cmFjdEp1bmN0aW9uOiBmYWxzZSwKICAgICAganVuY3Rpb25NaW5Db3ZlcmFnZTogMSwKICAgICAgLi4ub3B0aW9ucwogICAgfSk7CiAgICBkYXRhU291cmNlcy5zZXQodWlkLCBkYXRhU291cmNlKTsKICB9OwogIHZhciB0aWxlc2V0SW5mbyA9ICh1aWQpID0+IHsKICAgIHJldHVybiBkYXRhU291cmNlcy5nZXQodWlkKS50aWxlc2V0SW5mbzsKICB9OwogIHZhciB0aWxlID0gYXN5bmMgKHVpZCwgeiwgeCkgPT4gewogICAgY29uc3QgTUFYX1RJTEVfV0lEVEggPSAyZTU7CiAgICBjb25zdCBiYW0gPSBkYXRhU291cmNlcy5nZXQodWlkKTsKICAgIGNvbnN0IGluZm8gPSB0aWxlc2V0SW5mbyh1aWQpOwogICAgaWYgKCEoIm1heF93aWR0aCIgaW4gaW5mbykpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aWxlc2V0SW5mbyBkb2VzIG5vdCBpbmNsdWRlIGBtYXhfd2lkdGhgLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdGhlIEdvc2xpbmcgQmFtRGF0YUZldGNoZXIuIik7CiAgICB9CiAgICBjb25zdCB0aWxlV2lkdGggPSAraW5mby5tYXhfd2lkdGggLyAyICoqICt6OwogICAgY29uc3QgcmVjb3JkUHJvbWlzZXMgPSBbXTsKICAgIGlmICh0aWxlV2lkdGggPiBNQVhfVElMRV9XSURUSCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUoW10pKTsKICAgIH0KICAgIGxldCBtaW5YID0gaW5mby5taW5fcG9zWzBdICsgeCAqIHRpbGVXaWR0aDsKICAgIGNvbnN0IG1heFggPSBpbmZvLm1pbl9wb3NbMF0gKyAoeCArIDEpICogdGlsZVdpZHRoOwogICAgY29uc3QgeyBjaHJvbUxlbmd0aHMsIGN1bVBvc2l0aW9ucyB9ID0gYmFtLmNocm9tSW5mbzsKICAgIGNvbnN0IG9wdCA9IHsKICAgICAgdmlld0FzUGFpcnM6IGJhbS5vcHRpb25zLmxvYWRNYXRlcwogICAgfTsKICAgIHRpbGVWYWx1ZXMuc2V0KGAke3VpZH0uJHt6fS4ke3h9YCwgW10pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdW1Qb3NpdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hyb21OYW1lID0gY3VtUG9zaXRpb25zW2ldLmNocjsKICAgICAgY29uc3QgY2hyb21TdGFydCA9IGN1bVBvc2l0aW9uc1tpXS5wb3M7CiAgICAgIGNvbnN0IGNocm9tRW5kID0gY3VtUG9zaXRpb25zW2ldLnBvcyArIGNocm9tTGVuZ3Roc1tjaHJvbU5hbWVdOwogICAgICBpZiAoY2hyb21TdGFydCA8PSBtaW5YICYmIG1pblggPCBjaHJvbUVuZCkgewogICAgICAgIGlmIChtYXhYID4gY2hyb21FbmQpIHsKICAgICAgICAgIHJlY29yZFByb21pc2VzLnB1c2goYmFtLmZpbGUuZ2V0UmVjb3Jkc0ZvclJhbmdlKGNocm9tTmFtZSwgbWluWCAtIGNocm9tU3RhcnQsIGNocm9tRW5kIC0gY2hyb21TdGFydCwgb3B0KS50aGVuKChyZWNvcmRzKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlY29yZHMgPSByZWNvcmRzLm1hcCgocmVjKSA9PiBiYW1SZWNvcmRUb0pzb24ocmVjLCBjaHJvbU5hbWUsIGN1bVBvc2l0aW9uc1tpXS5wb3MpKTsKICAgICAgICAgICAgdGlsZVZhbHVlcy5zZXQoYCR7dWlkfS4ke3p9LiR7eH1gLCB0aWxlVmFsdWVzLmdldChgJHt1aWR9LiR7en0uJHt4fWApLmNvbmNhdChtYXBwZWRSZWNvcmRzKSk7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0pKTsKICAgICAgICAgIG1pblggPSBjaHJvbUVuZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBNYXRoLmZsb29yKG1pblggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgIGNvbnN0IGVuZFBvcyA9IE1hdGguY2VpbChtYXhYIC0gY2hyb21TdGFydCk7CiAgICAgICAgICByZWNvcmRQcm9taXNlcy5wdXNoKGJhbS5maWxlLmdldFJlY29yZHNGb3JSYW5nZShjaHJvbU5hbWUsIHN0YXJ0UG9zLCBlbmRQb3MsIG9wdCkudGhlbigocmVjb3JkcykgPT4gewogICAgICAgICAgICBjb25zdCBtYXBwZWRSZWNvcmRzID0gcmVjb3Jkcy5tYXAoKHJlYykgPT4gYmFtUmVjb3JkVG9Kc29uKHJlYywgY2hyb21OYW1lLCBjdW1Qb3NpdGlvbnNbaV0ucG9zKSk7CiAgICAgICAgICAgIHRpbGVWYWx1ZXMuc2V0KGAke3VpZH0uJHt6fS4ke3h9YCwgdGlsZVZhbHVlcy5nZXQoYCR7dWlkfS4ke3p9LiR7eH1gKS5jb25jYXQobWFwcGVkUmVjb3JkcykpOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbChyZWNvcmRQcm9taXNlcykudGhlbigodmFsdWVzKSA9PiB7CiAgICAgIHJldHVybiB2YWx1ZXMuZmxhdCgpOwogICAgfSk7CiAgfTsKICB2YXIgZmV0Y2hUaWxlc0RlYm91bmNlZCA9IGFzeW5jICh1aWQsIHRpbGVJZHMpID0+IHsKICAgIGNvbnN0IHRpbGVzID0ge307CiAgICBjb25zdCB2YWxpZFRpbGVJZHMgPSBbXTsKICAgIGNvbnN0IHRpbGVQcm9taXNlcyA9IFtdOwogICAgZm9yIChjb25zdCB0aWxlSWQgb2YgdGlsZUlkcykgewogICAgICBjb25zdCBwYXJ0cyA9IHRpbGVJZC5zcGxpdCgiLiIpOwogICAgICBjb25zdCB6ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTsKICAgICAgY29uc3QgeCA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7CiAgICAgIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHopKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJJbnZhbGlkIHRpbGUgem9vbSBvciBwb3NpdGlvbjoiLCB6LCB4KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YWxpZFRpbGVJZHMucHVzaCh0aWxlSWQpOwogICAgICB0aWxlUHJvbWlzZXMucHVzaCh0aWxlKHVpZCwgeiwgeCkpOwogICAgfQogICAgcmV0dXJuIFByb21pc2UuYWxsKHRpbGVQcm9taXNlcykudGhlbigodmFsdWVzKSA9PiB7CiAgICAgIHZhbHVlcy5mb3JFYWNoKChkLCBpKSA9PiB7CiAgICAgICAgY29uc3QgdmFsaWRUaWxlSWQgPSB2YWxpZFRpbGVJZHNbaV07CiAgICAgICAgdGlsZXNbdmFsaWRUaWxlSWRdID0gT2JqZWN0LmFzc2lnbihkLCB7IHRpbGVQb3NpdGlvbklkOiB2YWxpZFRpbGVJZCB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybiB0aWxlczsKICAgIH0pOwogIH07CiAgdmFyIGdldFRhYnVsYXJEYXRhID0gKHVpZCwgdGlsZUlkcykgPT4gewogICAgY29uc3QgeyBvcHRpb25zIH0gPSBkYXRhU291cmNlcy5nZXQodWlkKTsKICAgIGNvbnN0IGFsbFNlZ21lbnRzID0ge307CiAgICBmb3IgKGNvbnN0IHRpbGVJZCBvZiB0aWxlSWRzKSB7CiAgICAgIGNvbnN0IHRpbGVWYWx1ZSA9IHRpbGVWYWx1ZXMuZ2V0KGAke3VpZH0uJHt0aWxlSWR9YCk7CiAgICAgIGlmICghdGlsZVZhbHVlKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCJlcnJvciIgaW4gdGlsZVZhbHVlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbGVWYWx1ZS5lcnJvcik7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHRpbGVWYWx1ZSkgewogICAgICAgIGFsbFNlZ21lbnRzW3NlZ21lbnQuaWRdID0gewogICAgICAgICAgLi4uc2VnbWVudCwKICAgICAgICAgIHN1YnN0aXR1dGlvbnM6IEpTT04uc3RyaW5naWZ5KHNlZ21lbnQuc3Vic3RpdHV0aW9ucykKICAgICAgICB9OwogICAgICB9CiAgICB9CiAgICBjb25zdCBzZWdtZW50cyA9IE9iamVjdC52YWx1ZXMoYWxsU2VnbWVudHMpOwogICAgaWYgKG9wdGlvbnMubG9hZE1hdGVzKSB7CiAgICAgIGZpbmRNYXRlcyhzZWdtZW50cywgb3B0aW9ucy5tYXhJbnNlcnRTaXplKTsKICAgIH0KICAgIGxldCBvdXRwdXQ7CiAgICBpZiAob3B0aW9ucy5leHRyYWN0SnVuY3Rpb24pIHsKICAgICAgb3V0cHV0ID0gZmluZEp1bmN0aW9ucyhzZWdtZW50cywgb3B0aW9ucy5qdW5jdGlvbk1pbkNvdmVyYWdlKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dHB1dCA9IHNlZ21lbnRzOwogICAgfQogICAgY29uc3QgYnVmZmVyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpLmJ1ZmZlcjsKICAgIHJldHVybiBUcmFuc2ZlcihidWZmZXIsIFtidWZmZXJdKTsKICB9OwogIHZhciBncm91cEJ5ID0gKHhzLCBrZXkpID0+IHhzLnJlZHVjZSgocnYsIHgpID0+IHsKICAgIChydlt4W2tleV1dID0gcnZbeFtrZXldXSB8fCBbXSkucHVzaCh4KTsKICAgIHJldHVybiBydjsKICB9LCB7fSk7CiAgdmFyIGZpbmRNYXRlcyA9IChzZWdtZW50cywgbWF4SW5zZXJ0U2l6ZSA9IDApID0+IHsKICAgIGNvbnN0IHNlZ21lbnRzQnlSZWFkTmFtZSA9IGdyb3VwQnkoc2VnbWVudHMsICJuYW1lIik7CiAgICBPYmplY3QudmFsdWVzKHNlZ21lbnRzQnlSZWFkTmFtZSkuZm9yRWFjaCgoc2VnbWVudEdyb3VwKSA9PiB7CiAgICAgIGlmIChzZWdtZW50R3JvdXAubGVuZ3RoID09PSAyKSB7CiAgICAgICAgY29uc3QgcmVhZCA9IHNlZ21lbnRHcm91cFswXTsKICAgICAgICBjb25zdCBtYXRlID0gc2VnbWVudEdyb3VwWzFdOwogICAgICAgIHJlYWQubWF0ZUlkcyA9IFttYXRlLmlkXTsKICAgICAgICBtYXRlLm1hdGVJZHMgPSBbcmVhZC5pZF07CiAgICAgICAgY29uc3QgW2wsIHJdID0gW3JlYWQsIG1hdGVdLnNvcnQoKGEsIGIpID0+ICthLnN0YXJ0IC0gK2Iuc3RhcnQpOwogICAgICAgIGNvbnN0IGluc2VydFNpemUgPSBNYXRoLm1heCgwLCArci5zdGFydCAtICtsLmVuZCk7CiAgICAgICAgY29uc3QgbGFyZ2VJbnNlcnRTaXplID0gaW5zZXJ0U2l6ZSA+PSBtYXhJbnNlcnRTaXplOwogICAgICAgIGxldCBzdlR5cGU7CiAgICAgICAgaWYgKCFsYXJnZUluc2VydFNpemUpIHsKICAgICAgICAgIHN2VHlwZSA9ICJub3JtYWwgcmVhZCI7CiAgICAgICAgfSBlbHNlIGlmIChsLnN0cmFuZCA9PT0gIisiICYmIHIuc3RyYW5kID09PSAiLSIpIHsKICAgICAgICAgIHN2VHlwZSA9ICJkZWxldGlvbiAoKy0pIjsKICAgICAgICB9IGVsc2UgaWYgKGwuc3RyYW5kID09PSAiKyIgJiYgci5zdHJhbmQgPT09ICIrIikgewogICAgICAgICAgc3ZUeXBlID0gImludmVyc2lvbiAoKyspIjsKICAgICAgICB9IGVsc2UgaWYgKGwuc3RyYW5kID09PSAiLSIgJiYgci5zdHJhbmQgPT09ICItIikgewogICAgICAgICAgc3ZUeXBlID0gImludmVyc2lvbiAoLS0pIjsKICAgICAgICB9IGVsc2UgaWYgKGwuc3RyYW5kID09PSAiLSIgJiYgci5zdHJhbmQgPT09ICIrIikgewogICAgICAgICAgc3ZUeXBlID0gImR1cGxpY2F0aW9uICgtKykiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdlR5cGUgPSBgKCR7bC5zdHJhbmR9JHtyLnN0cmFuZH0pYDsKICAgICAgICB9CiAgICAgICAgW3JlYWQsIG1hdGVdLmZvckVhY2goKGQpID0+IHsKICAgICAgICAgIGQuZm91bmRNYXRlID0gdHJ1ZTsKICAgICAgICAgIGQuaW5zZXJ0U2l6ZSA9IGluc2VydFNpemU7CiAgICAgICAgICBkLmxhcmdlSW5zZXJ0U2l6ZSA9IGxhcmdlSW5zZXJ0U2l6ZTsKICAgICAgICAgIGQuc3ZUeXBlID0gc3ZUeXBlOwogICAgICAgICAgZC5udW1NYXRlcyA9IDI7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2VnbWVudEdyb3VwLmZvckVhY2goKGQpID0+IHsKICAgICAgICAgIGQubWF0ZUlkcyA9IHNlZ21lbnRHcm91cC5maWx0ZXIoKG1hdGUpID0+IG1hdGUuaWQgIT09IGQuaWQpLm1hcCgobWF0ZSkgPT4gbWF0ZS5pZCk7CiAgICAgICAgICBkLmZvdW5kTWF0ZSA9IGZhbHNlOwogICAgICAgICAgZC5pbnNlcnRTaXplID0gLTE7CiAgICAgICAgICBkLmxhcmdlSW5zZXJ0U2l6ZSA9IGZhbHNlOwogICAgICAgICAgZC5zdlR5cGUgPSBzZWdtZW50R3JvdXAubGVuZ3RoID09PSAxID8gIm1hdGVzIG5vdCBmb3VuZCB3aXRoaW4gY2hyb21vc29tZSIgOiAibW9yZSB0aGFuIHR3byBtYXRlcyI7CiAgICAgICAgICBkLm51bU1hdGVzID0gc2VnbWVudEdyb3VwLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gc2VnbWVudHNCeVJlYWROYW1lOwogIH07CiAgdmFyIGZpbmRKdW5jdGlvbnMgPSAoc2VnbWVudHMsIG1pbkNvdmVyYWdlID0gMCkgPT4gewogICAgY29uc3QganVuY3Rpb25zID0gW107CiAgICBzZWdtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7CiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBKU09OLnBhcnNlKHNlZ21lbnQuc3Vic3RpdHV0aW9ucyk7CiAgICAgIHN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoc3ViKSA9PiB7CiAgICAgICAgY29uc3QgZG9uID0gc2VnbWVudC5zdGFydCArIHN1Yi5wb3M7CiAgICAgICAgY29uc3QgYWNjID0gc2VnbWVudC5zdGFydCArIHN1Yi5wb3MgKyBzdWIubGVuZ3RoOwogICAgICAgIGlmIChzZWdtZW50LnN0YXJ0IDwgZG9uICYmIGFjYyA8IHNlZ21lbnQuZW5kKSB7CiAgICAgICAgICBjb25zdCBqID0ganVuY3Rpb25zLmZpbmQoKGQpID0+IGQuc3RhcnQgPT09IGRvbiAmJiBkLmVuZCA9PT0gYWNjKTsKICAgICAgICAgIGlmIChqKSB7CiAgICAgICAgICAgIGouc2NvcmUgKz0gMTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGp1bmN0aW9ucy5wdXNoKHsgc3RhcnQ6IGRvbiwgZW5kOiBhY2MsIHNjb3JlOiAxIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBqdW5jdGlvbnMuZmlsdGVyKChkKSA9PiBkLnNjb3JlID49IG1pbkNvdmVyYWdlKTsKICB9OwogIHZhciB0aWxlRnVuY3Rpb25zID0gewogICAgaW5pdCwKICAgIHRpbGVzZXRJbmZvLAogICAgZmV0Y2hUaWxlc0RlYm91bmNlZCwKICAgIHRpbGUsCiAgICBnZXRUYWJ1bGFyRGF0YQogIH07CiAgZXhwb3NlKHRpbGVGdW5jdGlvbnMpOwp9KSgpOwovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCg==",Rle=typeof window<"u"&&window.Blob&&new Blob([atob(T2e)],{type:"text/javascript;charset=utf-8"});function xgg(){const e=Rle&&(window.URL||window.webkitURL).createObjectURL(Rle);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+T2e,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const Egg=200;class HH{constructor(g,i){Ct(this,"dataConfig",{}),Ct(this,"uid"),Ct(this,"fetchTimeout"),Ct(this,"toFetch"),Ct(this,"MAX_TILE_WIDTH",2e4),Ct(this,"worker"),Ct(this,"track"),this.uid=g.libraries.slugid.nice(),this.toFetch=new Set;const{url:I,indexUrl:n,assembly:r,...C}=i;this.worker=tN(new xgg).then(async o=>{const a=Object.entries(yi(r).size);return await o.init(this.uid,{url:I,indexUrl:n},a,C),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,i){var I;const{toFetch:n}=this,r=i[0].split(".")[0],C=n.size?[...n][0].split(".")[0]:null;if(r!==C){for(const o of this.toFetch)(I=this.track)==null||I.fetching.delete(o);this.toFetch.clear()}i.forEach(o=>this.toFetch.add(o)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},Egg)}async sendFetch(g,i){(await this.worker).fetchTilesDebounced(this.uid,i).then(g)}async getTabularData(g){const i=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(i))}}Ct(HH,"config",{type:"bam"});const N2e="KCgpID0+IHsKICB2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIF9fbWFya0FzTW9kdWxlID0gKHRhcmdldCkgPT4gX19kZWZQcm9wKHRhcmdldCwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7CiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltPYmplY3Qua2V5cyhmbilbMF1dKShmbiA9IDApKSwgcmVzOwogIH07CiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkgewogICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbT2JqZWN0LmtleXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7CiAgfTsKICB2YXIgX19yZUV4cG9ydCA9ICh0YXJnZXQsIG1vZHVsZTIsIGRlc2MpID0+IHsKICAgIGlmIChtb2R1bGUyICYmIHR5cGVvZiBtb2R1bGUyID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbW9kdWxlMiA9PT0gImZ1bmN0aW9uIikgewogICAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kdWxlMikpCiAgICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0YXJnZXQsIGtleSkgJiYga2V5ICE9PSAiZGVmYXVsdCIpCiAgICAgICAgICBfX2RlZlByb3AodGFyZ2V0LCBrZXksIHsgZ2V0OiAoKSA9PiBtb2R1bGUyW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MobW9kdWxlMiwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9OwogIHZhciBfX3RvTW9kdWxlID0gKG1vZHVsZTIpID0+IHsKICAgIHJldHVybiBfX3JlRXhwb3J0KF9fbWFya0FzTW9kdWxlKF9fZGVmUHJvcChtb2R1bGUyICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kdWxlMikpIDoge30sICJkZWZhdWx0IiwgbW9kdWxlMiAmJiBtb2R1bGUyLl9fZXNNb2R1bGUgJiYgImRlZmF1bHQiIGluIG1vZHVsZTIgPyB7IGdldDogKCkgPT4gbW9kdWxlMi5kZWZhdWx0LCBlbnVtZXJhYmxlOiB0cnVlIH0gOiB7IHZhbHVlOiBtb2R1bGUyLCBlbnVtZXJhYmxlOiB0cnVlIH0pKSwgbW9kdWxlMik7CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jhc2U2NC1qc0AxLjUuMS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfYmFzZTY0X2pzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jhc2U2NC1qc0AxLjUuMS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZXhwb3J0czIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGV4cG9ydHMyLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXk7CiAgICAgIGV4cG9ydHMyLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5OwogICAgICB2YXIgbG9va3VwID0gW107CiAgICAgIHZhciByZXZMb29rdXAgPSBbXTsKICAgICAgdmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAidW5kZWZpbmVkIiA/IFVpbnQ4QXJyYXkgOiBBcnJheTsKICAgICAgdmFyIGNvZGUgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICBsb29rdXBbaV0gPSBjb2RlW2ldOwogICAgICAgIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaTsKICAgICAgfQogICAgICB2YXIgaTsKICAgICAgdmFyIGxlbjsKICAgICAgcmV2TG9va3VwWyItIi5jaGFyQ29kZUF0KDApXSA9IDYyOwogICAgICByZXZMb29rdXBbIl8iLmNoYXJDb2RlQXQoMCldID0gNjM7CiAgICAgIGZ1bmN0aW9uIGdldExlbnMoYjY0KSB7CiAgICAgICAgdmFyIGxlbjIgPSBiNjQubGVuZ3RoOwogICAgICAgIGlmIChsZW4yICUgNCA+IDApIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpOwogICAgICAgIH0KICAgICAgICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZigiPSIpOwogICAgICAgIGlmICh2YWxpZExlbiA9PT0gLTEpCiAgICAgICAgICB2YWxpZExlbiA9IGxlbjI7CiAgICAgICAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW4yID8gMCA6IDQgLSB2YWxpZExlbiAlIDQ7CiAgICAgICAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBieXRlTGVuZ3RoKGI2NCkgewogICAgICAgIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpOwogICAgICAgIHZhciB2YWxpZExlbiA9IGxlbnNbMF07CiAgICAgICAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV07CiAgICAgICAgcmV0dXJuICh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0xlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHsKICAgICAgICByZXR1cm4gKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzTGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHRvQnl0ZUFycmF5KGI2NCkgewogICAgICAgIHZhciB0bXA7CiAgICAgICAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NCk7CiAgICAgICAgdmFyIHZhbGlkTGVuID0gbGVuc1swXTsKICAgICAgICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXTsKICAgICAgICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKTsKICAgICAgICB2YXIgY3VyQnl0ZSA9IDA7CiAgICAgICAgdmFyIGxlbjIgPSBwbGFjZUhvbGRlcnNMZW4gPiAwID8gdmFsaWRMZW4gLSA0IDogdmFsaWRMZW47CiAgICAgICAgdmFyIGkyOwogICAgICAgIGZvciAoaTIgPSAwOyBpMiA8IGxlbjI7IGkyICs9IDQpIHsKICAgICAgICAgIHRtcCA9IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMildIDw8IDE4IHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMSldIDw8IDEyIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMildIDw8IDYgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAzKV07CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCA+PiAxNiAmIDI1NTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wID4+IDggJiAyNTU7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikgewogICAgICAgICAgdG1wID0gcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyKV0gPDwgMiB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDEpXSA+PiA0OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAyNTU7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHsKICAgICAgICAgIHRtcCA9IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMildIDw8IDEwIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMSldIDw8IDQgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAyKV0gPj4gMjsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wID4+IDggJiAyNTU7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycjsKICAgICAgfQogICAgICBmdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQobnVtKSB7CiAgICAgICAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiA2M10gKyBsb29rdXBbbnVtID4+IDEyICYgNjNdICsgbG9va3VwW251bSA+PiA2ICYgNjNdICsgbG9va3VwW251bSAmIDYzXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBlbmNvZGVDaHVuayh1aW50OCwgc3RhcnQsIGVuZCkgewogICAgICAgIHZhciB0bXA7CiAgICAgICAgdmFyIG91dHB1dCA9IFtdOwogICAgICAgIGZvciAodmFyIGkyID0gc3RhcnQ7IGkyIDwgZW5kOyBpMiArPSAzKSB7CiAgICAgICAgICB0bXAgPSAodWludDhbaTJdIDw8IDE2ICYgMTY3MTE2ODApICsgKHVpbnQ4W2kyICsgMV0gPDwgOCAmIDY1MjgwKSArICh1aW50OFtpMiArIDJdICYgMjU1KTsKICAgICAgICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dHB1dC5qb2luKCIiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQnl0ZUFycmF5KHVpbnQ4KSB7CiAgICAgICAgdmFyIHRtcDsKICAgICAgICB2YXIgbGVuMiA9IHVpbnQ4Lmxlbmd0aDsKICAgICAgICB2YXIgZXh0cmFCeXRlcyA9IGxlbjIgJSAzOwogICAgICAgIHZhciBwYXJ0cyA9IFtdOwogICAgICAgIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzOwogICAgICAgIGZvciAodmFyIGkyID0gMCwgbGVuMjIgPSBsZW4yIC0gZXh0cmFCeXRlczsgaTIgPCBsZW4yMjsgaTIgKz0gbWF4Q2h1bmtMZW5ndGgpIHsKICAgICAgICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGkyLCBpMiArIG1heENodW5rTGVuZ3RoID4gbGVuMjIgPyBsZW4yMiA6IGkyICsgbWF4Q2h1bmtMZW5ndGgpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHsKICAgICAgICAgIHRtcCA9IHVpbnQ4W2xlbjIgLSAxXTsKICAgICAgICAgIHBhcnRzLnB1c2gobG9va3VwW3RtcCA+PiAyXSArIGxvb2t1cFt0bXAgPDwgNCAmIDYzXSArICI9PSIpOwogICAgICAgIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikgewogICAgICAgICAgdG1wID0gKHVpbnQ4W2xlbjIgLSAyXSA8PCA4KSArIHVpbnQ4W2xlbjIgLSAxXTsKICAgICAgICAgIHBhcnRzLnB1c2gobG9va3VwW3RtcCA+PiAxMF0gKyBsb29rdXBbdG1wID4+IDQgJiA2M10gKyBsb29rdXBbdG1wIDw8IDIgJiA2M10gKyAiPSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFydHMuam9pbigiIik7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMKICB2YXIgcmVxdWlyZV9pZWVlNzU0ID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgZXhwb3J0czIucmVhZCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHsKICAgICAgICB2YXIgZSwgbTsKICAgICAgICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTsKICAgICAgICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTsKICAgICAgICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7CiAgICAgICAgdmFyIG5CaXRzID0gLTc7CiAgICAgICAgdmFyIGkgPSBpc0xFID8gbkJ5dGVzIC0gMSA6IDA7CiAgICAgICAgdmFyIGQgPSBpc0xFID8gLTEgOiAxOwogICAgICAgIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldOwogICAgICAgIGkgKz0gZDsKICAgICAgICBlID0gcyAmICgxIDw8IC1uQml0cykgLSAxOwogICAgICAgIHMgPj49IC1uQml0czsKICAgICAgICBuQml0cyArPSBlTGVuOwogICAgICAgIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTsKICAgICAgICBlID4+PSAtbkJpdHM7CiAgICAgICAgbkJpdHMgKz0gbUxlbjsKICAgICAgICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7CiAgICAgICAgfQogICAgICAgIGlmIChlID09PSAwKSB7CiAgICAgICAgICBlID0gMSAtIGVCaWFzOwogICAgICAgIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkgewogICAgICAgICAgcmV0dXJuIG0gPyBOYU4gOiAocyA/IC0xIDogMSkgKiBJbmZpbml0eTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKTsKICAgICAgICAgIGUgPSBlIC0gZUJpYXM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pOwogICAgICB9OwogICAgICBleHBvcnRzMi53cml0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7CiAgICAgICAgdmFyIGUsIG0sIGM7CiAgICAgICAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7CiAgICAgICAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7CiAgICAgICAgdmFyIGVCaWFzID0gZU1heCA+PiAxOwogICAgICAgIHZhciBydCA9IG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwOwogICAgICAgIHZhciBpID0gaXNMRSA/IDAgOiBuQnl0ZXMgLSAxOwogICAgICAgIHZhciBkID0gaXNMRSA/IDEgOiAtMTsKICAgICAgICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7CiAgICAgICAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7CiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHsKICAgICAgICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMDsKICAgICAgICAgIGUgPSBlTWF4OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMik7CiAgICAgICAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7CiAgICAgICAgICAgIGUtLTsKICAgICAgICAgICAgYyAqPSAyOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7CiAgICAgICAgICAgIHZhbHVlICs9IHJ0IC8gYzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWx1ZSAqIGMgPj0gMikgewogICAgICAgICAgICBlKys7CiAgICAgICAgICAgIGMgLz0gMjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkgewogICAgICAgICAgICBtID0gMDsKICAgICAgICAgICAgZSA9IGVNYXg7CiAgICAgICAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7CiAgICAgICAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKTsKICAgICAgICAgICAgZSA9IGUgKyBlQmlhczsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKTsKICAgICAgICAgICAgZSA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAyNTUsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkgewogICAgICAgIH0KICAgICAgICBlID0gZSA8PCBtTGVuIHwgbTsKICAgICAgICBlTGVuICs9IG1MZW47CiAgICAgICAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMjU1LCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4OwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYnVmZmVyQDYuMC4zL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMKICB2YXIgcmVxdWlyZV9idWZmZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYnVmZmVyQDYuMC4zL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgYmFzZTY0ID0gcmVxdWlyZV9iYXNlNjRfanMoKTsKICAgICAgdmFyIGllZWU3NTQgPSByZXF1aXJlX2llZWU3NTQoKTsKICAgICAgdmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2xbImZvciJdID09PSAiZnVuY3Rpb24iID8gU3ltYm9sWyJmb3IiXSgibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKSA6IG51bGw7CiAgICAgIGV4cG9ydHMyLkJ1ZmZlciA9IEJ1ZmZlcjEwOwogICAgICBleHBvcnRzMi5TbG93QnVmZmVyID0gU2xvd0J1ZmZlcjsKICAgICAgZXhwb3J0czIuSU5TUEVDVF9NQVhfQllURVMgPSA1MDsKICAgICAgdmFyIEtfTUFYX0xFTkdUSCA9IDIxNDc0ODM2NDc7CiAgICAgIGV4cG9ydHMyLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEg7CiAgICAgIEJ1ZmZlcjEwLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpOwogICAgICBpZiAoIUJ1ZmZlcjEwLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgICAgY29uc3QgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiA0MjsKICAgICAgICAgIH0gfTsKICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpOwogICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pOwogICAgICAgICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDI7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyMTAucHJvdG90eXBlLCAicGFyZW50IiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGhpcykpCiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlcjEwLnByb3RvdHlwZSwgIm9mZnNldCIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKHRoaXMpKQogICAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBmdW5jdGlvbiBjcmVhdGVCdWZmZXIobGVuZ3RoKSB7CiAgICAgICAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyArIGxlbmd0aCArICciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTsKICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIxMC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQnVmZmVyMTAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnBvb2xTaXplID0gODE5MjsKICAgICAgZnVuY3Rpb24gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIgKyB0eXBlb2YgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8IHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHwgdmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpOwogICAgICAgIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHsKICAgICAgICAgIHJldHVybiBCdWZmZXIxMC5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGIgPSBmcm9tT2JqZWN0KHZhbHVlKTsKICAgICAgICBpZiAoYikKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlcjEwLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIgKyB0eXBlb2YgdmFsdWUpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmZyb20gPSBmdW5jdGlvbih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH07CiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIxMC5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjEwLCBVaW50OEFycmF5KTsKICAgICAgZnVuY3Rpb24gYXNzZXJ0U2l6ZShzaXplKSB7CiAgICAgICAgaWYgKHR5cGVvZiBzaXplICE9PSAibnVtYmVyIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTsKICAgICAgICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInICsgc2l6ZSArICciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHsKICAgICAgICBhc3NlcnRTaXplKHNpemUpOwogICAgICAgIGlmIChzaXplIDw9IDApIHsKICAgICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChmaWxsICE9PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICJzdHJpbmciID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAuYWxsb2MgPSBmdW5jdGlvbihzaXplLCBmaWxsLCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZyk7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGFsbG9jVW5zYWZlKHNpemUpIHsKICAgICAgICBhc3NlcnRTaXplKHNpemUpOwogICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcsIGVuY29kaW5nKSB7CiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIgfHwgZW5jb2RpbmcgPT09ICIiKSB7CiAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICB9CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDA7CiAgICAgICAgbGV0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpOwogICAgICAgIGNvbnN0IGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKTsKICAgICAgICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHsKICAgICAgICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHsKICAgICAgICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDA7CiAgICAgICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUFycmF5VmlldyhhcnJheVZpZXcpIHsKICAgICAgICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7CiAgICAgICAgICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlWaWV3KTsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsIGNvcHkuYnl0ZU9mZnNldCwgY29weS5ieXRlTGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpOwogICAgICAgIH0KICAgICAgICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7CiAgICAgICAgfQogICAgICAgIGxldCBidWY7CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPT09IHZvaWQgMCAmJiBsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpOwogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKICAgICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlcjEwLnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaikgewogICAgICAgIGlmIChCdWZmZXIxMC5pc0J1ZmZlcihvYmopKSB7CiAgICAgICAgICBjb25zdCBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMDsKICAgICAgICAgIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pOwogICAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICAgIH0KICAgICAgICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKTsKICAgICAgICAgIHJldHVybiBidWY7CiAgICAgICAgfQogICAgICAgIGlmIChvYmoubGVuZ3RoICE9PSB2b2lkIDApIHsKICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gIm51bWJlciIgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHsKICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iaik7CiAgICAgICAgfQogICAgICAgIGlmIChvYmoudHlwZSA9PT0gIkJ1ZmZlciIgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHsKICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY2hlY2tlZChsZW5ndGgpIHsKICAgICAgICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICIgYnl0ZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxlbmd0aCB8IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gU2xvd0J1ZmZlcihsZW5ndGgpIHsKICAgICAgICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsKICAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBCdWZmZXIxMC5hbGxvYygrbGVuZ3RoKTsKICAgICAgfQogICAgICBCdWZmZXIxMC5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyMihiKSB7CiAgICAgICAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJiBiICE9PSBCdWZmZXIxMC5wcm90b3R5cGU7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHsKICAgICAgICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkKICAgICAgICAgIGEgPSBCdWZmZXIxMC5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpOwogICAgICAgIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKQogICAgICAgICAgYiA9IEJ1ZmZlcjEwLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aCk7CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyMTAuaXNCdWZmZXIoYikpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpOwogICAgICAgIH0KICAgICAgICBpZiAoYSA9PT0gYikKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCB4ID0gYS5sZW5ndGg7CiAgICAgICAgbGV0IHkgPSBiLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHsKICAgICAgICAgICAgeCA9IGFbaV07CiAgICAgICAgICAgIHkgPSBiW2ldOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHggPCB5KQogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIGlmICh5IDwgeCkKICAgICAgICAgIHJldHVybiAxOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgICBCdWZmZXIxMC5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyhlbmNvZGluZykgewogICAgICAgIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICBjYXNlICJoZXgiOgogICAgICAgICAgY2FzZSAidXRmOCI6CiAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICBjYXNlICJhc2NpaSI6CiAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgIGNhc2UgInVjcy0yIjoKICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdChsaXN0LCBsZW5ndGgpIHsKICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyMTAuYWxsb2MoMCk7CiAgICAgICAgfQogICAgICAgIGxldCBpOwogICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyMTAuYWxsb2NVbnNhZmUobGVuZ3RoKTsKICAgICAgICBsZXQgcG9zID0gMDsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgewogICAgICAgICAgbGV0IGJ1ZiA9IGxpc3RbaV07CiAgICAgICAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7CiAgICAgICAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYnVmKSkKICAgICAgICAgICAgICAgIGJ1ZiA9IEJ1ZmZlcjEwLmZyb20oYnVmKTsKICAgICAgICAgICAgICBidWYuY29weShidWZmZXIsIHBvcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoYnVmZmVyLCBidWYsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKGJ1ZikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpOwogICAgICAgICAgfQogICAgICAgICAgcG9zICs9IGJ1Zi5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgewogICAgICAgIGlmIChCdWZmZXIxMC5pc0J1ZmZlcihzdHJpbmcpKSB7CiAgICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGNvbnN0IG11c3RNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZTsKICAgICAgICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsZW47CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOwogICAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gKiAyOwogICAgICAgICAgICBjYXNlICJoZXgiOgogICAgICAgICAgICAgIHJldHVybiBsZW4gPj4+IDE7CiAgICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoIiIgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoOwogICAgICBmdW5jdGlvbiBzbG93VG9TdHJpbmcoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCB8fCBzdGFydCA8IDApIHsKICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA9PT0gdm9pZCAwIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICBlbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8PSAwKSB7CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGVuZCA+Pj49IDA7CiAgICAgICAgc3RhcnQgPj4+PSAwOwogICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKCFlbmNvZGluZykKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJ1Y3MyIjoKICAgICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgICBjYXNlICJ1dGYxNmxlIjoKICAgICAgICAgICAgY2FzZSAidXRmLTE2bGUiOgogICAgICAgICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGxvd2VyZWRDYXNlKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWU7CiAgICAgIGZ1bmN0aW9uIHN3YXAoYiwgbiwgbSkgewogICAgICAgIGNvbnN0IGkgPSBiW25dOwogICAgICAgIGJbbl0gPSBiW21dOwogICAgICAgIGJbbV0gPSBpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDIgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDQgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyAzKTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQoKSB7CiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbiAlIDggIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7CiAgICAgICAgICBzd2FwKHRoaXMsIGksIGkgKyA3KTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KTsKICAgICAgICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIxMC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMoYikgewogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYikpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7CiAgICAgICAgaWYgKHRoaXMgPT09IGIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gQnVmZmVyMTAuY29tcGFyZSh0aGlzLCBiKSA9PT0gMDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkgewogICAgICAgIGxldCBzdHIgPSAiIjsKICAgICAgICBjb25zdCBtYXggPSBleHBvcnRzMi5JTlNQRUNUX01BWF9CWVRFUzsKICAgICAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCJoZXgiLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAiJDEgIikudHJpbSgpOwogICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkKICAgICAgICAgIHN0ciArPSAiIC4uLiAiOwogICAgICAgIHJldHVybiAiPEJ1ZmZlciAiICsgc3RyICsgIj4iOwogICAgICB9OwogICAgICBpZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkgewogICAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5pbnNwZWN0OwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkgewogICAgICAgIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHsKICAgICAgICAgIHRhcmdldCA9IEJ1ZmZlcjEwLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGFyZ2V0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNTdGFydCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzRW5kID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHN0YXJ0ID4+Pj0gMDsKICAgICAgICBlbmQgPj4+PSAwOwogICAgICAgIHRoaXNTdGFydCA+Pj49IDA7CiAgICAgICAgdGhpc0VuZCA+Pj49IDA7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydDsKICAgICAgICBsZXQgeSA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpOwogICAgICAgIGNvbnN0IHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpOwogICAgICAgIGNvbnN0IHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7CiAgICAgICAgICAgIHggPSB0aGlzQ29weVtpXTsKICAgICAgICAgICAgeSA9IHRhcmdldENvcHlbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0OwogICAgICAgICAgYnl0ZU9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMjE0NzQ4MzY0NykgewogICAgICAgICAgYnl0ZU9mZnNldCA9IDIxNDc0ODM2NDc7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTIxNDc0ODM2NDgpIHsKICAgICAgICAgIGJ5dGVPZmZzZXQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICB9CiAgICAgICAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0OwogICAgICAgIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkgewogICAgICAgICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiBidWZmZXIubGVuZ3RoIC0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwKQogICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0OwogICAgICAgIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHsKICAgICAgICAgIGlmIChkaXIpCiAgICAgICAgICAgIGJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFsID0gQnVmZmVyMTAuZnJvbSh2YWwsIGVuY29kaW5nKTsKICAgICAgICB9CiAgICAgICAgaWYgKEJ1ZmZlcjEwLmlzQnVmZmVyKHZhbCkpIHsKICAgICAgICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHZhbCA9IHZhbCAmIDI1NTsKICAgICAgICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBpZiAoZGlyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBhcnJheUluZGV4T2YoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHsKICAgICAgICBsZXQgaW5kZXhTaXplID0gMTsKICAgICAgICBsZXQgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aDsKICAgICAgICBsZXQgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aDsKICAgICAgICBpZiAoZW5jb2RpbmcgIT09IHZvaWQgMCkgewogICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1Y3MyIiB8fCBlbmNvZGluZyA9PT0gInVjcy0yIiB8fCBlbmNvZGluZyA9PT0gInV0ZjE2bGUiIHx8IGVuY29kaW5nID09PSAidXRmLTE2bGUiKSB7CiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmRleFNpemUgPSAyOwogICAgICAgICAgICBhcnJMZW5ndGggLz0gMjsKICAgICAgICAgICAgdmFsTGVuZ3RoIC89IDI7CiAgICAgICAgICAgIGJ5dGVPZmZzZXQgLz0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcmVhZChidWYsIGkyKSB7CiAgICAgICAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBidWZbaTJdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaTIgKiBpbmRleFNpemUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgaTsKICAgICAgICBpZiAoZGlyKSB7CiAgICAgICAgICBsZXQgZm91bmRJbmRleCA9IC0xOwogICAgICAgICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHsKICAgICAgICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpCiAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gaTsKICAgICAgICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpCiAgICAgICAgICAgICAgICBpIC09IGkgLSBmb3VuZEluZGV4OwogICAgICAgICAgICAgIGZvdW5kSW5kZXggPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aDsKICAgICAgICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGxldCBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7CiAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBoZXhXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwOwogICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXQ7CiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7CiAgICAgICAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7CiAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RyTGVuID0gc3RyaW5nLmxlbmd0aDsKICAgICAgICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikgewogICAgICAgICAgbGVuZ3RoID0gc3RyTGVuIC8gMjsKICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpOwogICAgICAgICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpCiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGY4V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmFzZTY0V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1Y3MyV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHsKICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSB2b2lkIDAgJiYgdHlwZW9mIG9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGVuY29kaW5nID0gb2Zmc2V0OwogICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkgewogICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHsKICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IHZvaWQgMCkKICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoOwogICAgICAgICAgICBsZW5ndGggPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwIHx8IGxlbmd0aCA+IHJlbWFpbmluZykKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2U7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgICAgY2FzZSAidXRmLTgiOgogICAgICAgICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgICAgY2FzZSAibGF0aW4xIjoKICAgICAgICAgICAgY2FzZSAiYmluYXJ5IjoKICAgICAgICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKCIiICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogIkJ1ZmZlciIsCiAgICAgICAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMCkKICAgICAgICB9OwogICAgICB9OwogICAgICBmdW5jdGlvbiBiYXNlNjRTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpOwogICAgICAgIGNvbnN0IHJlcyA9IFtdOwogICAgICAgIGxldCBpID0gc3RhcnQ7CiAgICAgICAgd2hpbGUgKGkgPCBlbmQpIHsKICAgICAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IGJ1ZltpXTsKICAgICAgICAgIGxldCBjb2RlUG9pbnQgPSBudWxsOwogICAgICAgICAgbGV0IGJ5dGVzUGVyU2VxdWVuY2UgPSBmaXJzdEJ5dGUgPiAyMzkgPyA0IDogZmlyc3RCeXRlID4gMjIzID8gMyA6IGZpcnN0Qnl0ZSA+IDE5MSA/IDIgOiAxOwogICAgICAgICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkgewogICAgICAgICAgICBsZXQgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMTI4KSB7CiAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMzEpIDw8IDYgfCBzZWNvbmRCeXRlICYgNjM7CiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMTI3KSB7CiAgICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07CiAgICAgICAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTIgfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCA2IHwgdGhpcmRCeXRlICYgNjM7CiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMjA0NyAmJiAodGVtcENvZGVQb2ludCA8IDU1Mjk2IHx8IHRlbXBDb2RlUG9pbnQgPiA1NzM0MykpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTsKICAgICAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07CiAgICAgICAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXTsKICAgICAgICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDE5MikgPT09IDEyOCAmJiAodGhpcmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmIChmb3VydGhCeXRlICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMTUpIDw8IDE4IHwgKHNlY29uZEJ5dGUgJiA2MykgPDwgMTIgfCAodGhpcmRCeXRlICYgNjMpIDw8IDYgfCBmb3VydGhCeXRlICYgNjM7CiAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gNjU1MzUgJiYgdGVtcENvZGVQb2ludCA8IDExMTQxMTIpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHsKICAgICAgICAgICAgY29kZVBvaW50ID0gNjU1MzM7CiAgICAgICAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiA2NTUzNSkgewogICAgICAgICAgICBjb2RlUG9pbnQgLT0gNjU1MzY7CiAgICAgICAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAxMDIzIHwgNTUyOTYpOwogICAgICAgICAgICBjb2RlUG9pbnQgPSA1NjMyMCB8IGNvZGVQb2ludCAmIDEwMjM7CiAgICAgICAgICB9CiAgICAgICAgICByZXMucHVzaChjb2RlUG9pbnQpOwogICAgICAgICAgaSArPSBieXRlc1BlclNlcXVlbmNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcyk7CiAgICAgIH0KICAgICAgdmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gNDA5NjsKICAgICAgZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5KGNvZGVQb2ludHMpIHsKICAgICAgICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aDsKICAgICAgICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7CiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpOwogICAgICAgIH0KICAgICAgICBsZXQgcmVzID0gIiI7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFzY2lpU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgbGV0IHJldCA9ICIiOwogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDEyNyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbGF0aW4xU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgbGV0IHJldCA9ICIiOwogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaGV4U2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgbGVuID0gYnVmLmxlbmd0aDsKICAgICAgICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkKICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikKICAgICAgICAgIGVuZCA9IGxlbjsKICAgICAgICBsZXQgb3V0ID0gIiI7CiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmMTZsZVNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGNvbnN0IGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBzdGFydCA9IH5+c3RhcnQ7CiAgICAgICAgZW5kID0gZW5kID09PSB2b2lkIDAgPyBsZW4gOiB+fmVuZDsKICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgICBzdGFydCArPSBsZW47CiAgICAgICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikgewogICAgICAgICAgc3RhcnQgPSBsZW47CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgICBlbmQgKz0gbGVuOwogICAgICAgICAgaWYgKGVuZCA8IDApCiAgICAgICAgICAgIGVuZCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHsKICAgICAgICAgIGVuZCA9IGxlbjsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8IHN0YXJ0KQogICAgICAgICAgZW5kID0gc3RhcnQ7CiAgICAgICAgY29uc3QgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKTsKICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3QnVmLCBCdWZmZXIxMC5wcm90b3R5cGUpOwogICAgICAgIHJldHVybiBuZXdCdWY7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGNoZWNrT2Zmc2V0KG9mZnNldCwgZXh0LCBsZW5ndGgpIHsKICAgICAgICBpZiAob2Zmc2V0ICUgMSAhPT0gMCB8fCBvZmZzZXQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVWludExFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFKG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBpID0gMDsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50QkUgPSBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGxldCB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aDJdOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIHdoaWxlIChieXRlTGVuZ3RoMiA+IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGgyXSAqIG11bDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50OCA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgODsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAxXTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MzJMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuICh0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2KSArIHRoaXNbb2Zmc2V0ICsgM10gKiAxNjc3NzIxNjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSAqIDE2Nzc3MjE2ICsgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYgfCB0aGlzW29mZnNldCArIDJdIDw8IDggfCB0aGlzW29mZnNldCArIDNdKTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsbyA9IGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQ7CiAgICAgICAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgbGFzdCAqIDIgKiogMjQ7CiAgICAgICAgcmV0dXJuIEJpZ0ludChsbykgKyAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NEJFKG9mZnNldCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XTsKICAgICAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaGkgPSBmaXJzdCAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdOwogICAgICAgIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0OwogICAgICAgIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbyk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFKG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBpID0gMDsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bDsKICAgICAgICB9CiAgICAgICAgbXVsICo9IDEyODsKICAgICAgICBpZiAodmFsID49IG11bCkKICAgICAgICAgIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpOwogICAgICAgIHJldHVybiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDI7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXTsKICAgICAgICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsOwogICAgICAgIH0KICAgICAgICBtdWwgKj0gMTI4OwogICAgICAgIGlmICh2YWwgPj0gbXVsKQogICAgICAgICAgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMik7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDgob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgaWYgKCEodGhpc1tvZmZzZXRdICYgMTI4KSkKICAgICAgICAgIHJldHVybiB0aGlzW29mZnNldF07CiAgICAgICAgcmV0dXJuICgyNTUgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDg7CiAgICAgICAgcmV0dXJuIHZhbCAmIDMyNzY4ID8gdmFsIHwgNDI5NDkwMTc2MCA6IHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8IHRoaXNbb2Zmc2V0XSA8PCA4OwogICAgICAgIHJldHVybiB2YWwgJiAzMjc2OCA/IHZhbCB8IDQyOTQ5MDE3NjAgOiB2YWw7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAzXSA8PCAyNDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSA8PCAyNCB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYgfCB0aGlzW29mZnNldCArIDJdIDw8IDggfCB0aGlzW29mZnNldCArIDNdOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDRdICsgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICsgKGxhc3QgPDwgMjQpOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQoZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XTsKICAgICAgICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdCk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBjaGVja0ludChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHsKICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKGJ1ZikpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7CiAgICAgICAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpOwogICAgICAgIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKSAtIDE7CiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbWF4Qnl0ZXMsIDApOwogICAgICAgIH0KICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlIC8gbXVsICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnRCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKSAtIDE7CiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbWF4Qnl0ZXMsIDApOwogICAgICAgIH0KICAgICAgICBsZXQgaSA9IGJ5dGVMZW5ndGgyIC0gMTsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAyNTU7CiAgICAgICAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlIC8gbXVsICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQ4ID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAyNTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgNjU1MzUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludDE2QkUgPSBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDY1NTM1LCAwKTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCA0Mjk0OTY3Mjk1LCAwKTsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgNDI5NDk2NzI5NSwgMCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gMTY7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gd3J0QmlnVUludDY0TEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkgewogICAgICAgIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNyk7CiAgICAgICAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHdydEJpZ1VJbnQ2NEJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHsKICAgICAgICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpOwogICAgICAgIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCArIDddID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyA2XSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgNV0gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDRdID0gbG87CiAgICAgICAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQgKyAzXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgMl0gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDFdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXRdID0gaGk7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDg7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwogICAgICB9KTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwogICAgICB9KTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMiAtIDEpOwogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIGxpbWl0IC0gMSwgLWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBzdWIgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7CiAgICAgICAgICAgIHN1YiA9IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsID4+IDApIC0gc3ViICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIgLSAxKTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBsaW1pdCAtIDEsIC1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBzdWIgPSAwOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkgewogICAgICAgICAgICBzdWIgPSAxOwogICAgICAgICAgfQogICAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCA+PiAwKSAtIHN1YiAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGgyOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAxMjcsIC0xMjgpOwogICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICB2YWx1ZSA9IDI1NSArIHZhbHVlICsgMTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMzI3NjcsIC0zMjc2OCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAyOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAzMjc2NywgLTMyNzY4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDIxNDc0ODM2NDcsIC0yMTQ3NDgzNjQ4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAyMTQ3NDgzNjQ3LCAtMjE0NzQ4MzY0OCk7CiAgICAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgIHZhbHVlID0gNDI5NDk2NzI5NSArIHZhbHVlICsgMTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICAgIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBmdW5jdGlvbiBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7CiAgICAgICAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMzQwMjgyMzQ2NjM4NTI4ODZlMjIsIC0zNDAyODIzNDY2Mzg1Mjg4NmUyMik7CiAgICAgICAgfQogICAgICAgIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwgLTE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mik7CiAgICAgICAgfQogICAgICAgIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgODsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5KHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKHRhcmdldCkpCiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTsKICAgICAgICBpZiAoIXN0YXJ0KQogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGlmICghZW5kICYmIGVuZCAhPT0gMCkKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKQogICAgICAgICAgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoOwogICAgICAgIGlmICghdGFyZ2V0U3RhcnQpCiAgICAgICAgICB0YXJnZXRTdGFydCA9IDA7CiAgICAgICAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpCiAgICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBpZiAoZW5kID09PSBzdGFydCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHRhcmdldFN0YXJ0IDwgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICBpZiAoZW5kIDwgMCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkgewogICAgICAgICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHRhcmdldCwgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSwgdGFyZ2V0U3RhcnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVuOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykgewogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICAgICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBzdGFydDsKICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICAgICBlbmQgPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmQ7CiAgICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDAgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAic3RyaW5nIiAmJiAhQnVmZmVyMTAuaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAidXRmOCIgJiYgY29kZSA8IDEyOCB8fCBlbmNvZGluZyA9PT0gImxhdGluMSIpIHsKICAgICAgICAgICAgICB2YWwgPSBjb2RlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgdmFsID0gdmFsICYgMjU1OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGFydCA9IHN0YXJ0ID4+PiAwOwogICAgICAgIGVuZCA9IGVuZCA9PT0gdm9pZCAwID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDA7CiAgICAgICAgaWYgKCF2YWwpCiAgICAgICAgICB2YWwgPSAwOwogICAgICAgIGxldCBpOwogICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgICB0aGlzW2ldID0gdmFsOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlcjEwLmlzQnVmZmVyKHZhbCkgPyB2YWwgOiBCdWZmZXIxMC5mcm9tKHZhbCwgZW5jb2RpbmcpOwogICAgICAgICAgY29uc3QgbGVuID0gYnl0ZXMubGVuZ3RoOwogICAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicgKyB2YWwgKyAnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkgewogICAgICAgICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIHZhciBlcnJvcnMgPSB7fTsKICAgICAgZnVuY3Rpb24gRShzeW0sIGdldE1lc3NhZ2UsIEJhc2UpIHsKICAgICAgICBlcnJvcnNbc3ltXSA9IGNsYXNzIE5vZGVFcnJvciBleHRlbmRzIEJhc2UgewogICAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibWVzc2FnZSIsIHsKICAgICAgICAgICAgICB2YWx1ZTogZ2V0TWVzc2FnZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLAogICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lfSBbJHtzeW19XWA7CiAgICAgICAgICAgIHRoaXMuc3RhY2s7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgICBnZXQgY29kZSgpIHsKICAgICAgICAgICAgcmV0dXJuIHN5bTsKICAgICAgICAgIH0KICAgICAgICAgIHNldCBjb2RlKHZhbHVlKSB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtzeW19XTogJHt0aGlzLm1lc3NhZ2V9YDsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIEUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsIGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgcmV0dXJuIGAke25hbWV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcyI7CiAgICAgIH0sIFJhbmdlRXJyb3IpOwogICAgICBFKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsIGZ1bmN0aW9uKG5hbWUsIGFjdHVhbCkgewogICAgICAgIHJldHVybiBgVGhlICIke25hbWV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gOwogICAgICB9LCBUeXBlRXJyb3IpOwogICAgICBFKCJFUlJfT1VUX09GX1JBTkdFIiwgZnVuY3Rpb24oc3RyLCByYW5nZSwgaW5wdXQpIHsKICAgICAgICBsZXQgbXNnID0gYFRoZSB2YWx1ZSBvZiAiJHtzdHJ9IiBpcyBvdXQgb2YgcmFuZ2UuYDsKICAgICAgICBsZXQgcmVjZWl2ZWQgPSBpbnB1dDsKICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgJiYgTWF0aC5hYnMoaW5wdXQpID4gMiAqKiAzMikgewogICAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICJiaWdpbnQiKSB7CiAgICAgICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dCk7CiAgICAgICAgICBpZiAoaW5wdXQgPiBCaWdJbnQoMikgKiogQmlnSW50KDMyKSB8fCBpbnB1dCA8IC0oQmlnSW50KDIpICoqIEJpZ0ludCgzMikpKSB7CiAgICAgICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHJlY2VpdmVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJlY2VpdmVkICs9ICJuIjsKICAgICAgICB9CiAgICAgICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gOwogICAgICAgIHJldHVybiBtc2c7CiAgICAgIH0sIFJhbmdlRXJyb3IpOwogICAgICBmdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IodmFsKSB7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGxldCBpID0gdmFsLmxlbmd0aDsKICAgICAgICBjb25zdCBzdGFydCA9IHZhbFswXSA9PT0gIi0iID8gMSA6IDA7CiAgICAgICAgZm9yICg7IGkgPj0gc3RhcnQgKyA0OyBpIC09IDMpIHsKICAgICAgICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YDsKICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgICAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgICAgICBpZiAoYnVmW29mZnNldF0gPT09IHZvaWQgMCB8fCBidWZbb2Zmc2V0ICsgYnl0ZUxlbmd0aDJdID09PSB2b2lkIDApIHsKICAgICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIChieXRlTGVuZ3RoMiArIDEpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMikgewogICAgICAgIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgewogICAgICAgICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgICAgICBsZXQgcmFuZ2U7CiAgICAgICAgICBpZiAoYnl0ZUxlbmd0aDIgPiAzKSB7CiAgICAgICAgICAgIGlmIChtaW4gPT09IDAgfHwgbWluID09PSBCaWdJbnQoMCkpIHsKICAgICAgICAgICAgICByYW5nZSA9IGA+PSAwJHtufSBhbmQgPCAyJHtufSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOH0ke259YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByYW5nZSA9IGA+PSAtKDIke259ICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMX0ke259KSBhbmQgPCAyICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMX0ke259YDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWA7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIiwgcmFuZ2UsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSkgewogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJudW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJvdW5kc0Vycm9yKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHsKICAgICAgICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7CiAgICAgICAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgdHlwZSk7CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAib2Zmc2V0IiwgImFuIGludGVnZXIiLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChsZW5ndGggPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAib2Zmc2V0IiwgYD49ICR7dHlwZSA/IDEgOiAwfSBhbmQgPD0gJHtsZW5ndGh9YCwgdmFsdWUpOwogICAgICB9CiAgICAgIHZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2c7CiAgICAgIGZ1bmN0aW9uIGJhc2U2NGNsZWFuKHN0cikgewogICAgICAgIHN0ciA9IHN0ci5zcGxpdCgiPSIpWzBdOwogICAgICAgIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgIiIpOwogICAgICAgIGlmIChzdHIubGVuZ3RoIDwgMikKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHsKICAgICAgICAgIHN0ciA9IHN0ciArICI9IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGY4VG9CeXRlcyhzdHJpbmcsIHVuaXRzKSB7CiAgICAgICAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eTsKICAgICAgICBsZXQgY29kZVBvaW50OwogICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICAgICAgbGV0IGxlYWRTdXJyb2dhdGUgPSBudWxsOwogICAgICAgIGNvbnN0IGJ5dGVzID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICBpZiAoY29kZVBvaW50ID4gNTUyOTUgJiYgY29kZVBvaW50IDwgNTczNDQpIHsKICAgICAgICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7CiAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDU2MzE5KSB7CiAgICAgICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50OwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPCA1NjMyMCkgewogICAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDU1Mjk2IDw8IDEwIHwgY29kZVBvaW50IC0gNTYzMjApICsgNjU1MzY7CiAgICAgICAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gbnVsbDsKICAgICAgICAgIGlmIChjb2RlUG9pbnQgPCAxMjgpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMjA0OCkgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gNiB8IDE5MiwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCA2NTUzNikgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gMTIgfCAyMjQsIGNvZGVQb2ludCA+PiA2ICYgNjMgfCAxMjgsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMTExNDExMikgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gMTggfCAyNDAsIGNvZGVQb2ludCA+PiAxMiAmIDYzIHwgMTI4LCBjb2RlUG9pbnQgPj4gNiAmIDYzIHwgMTI4LCBjb2RlUG9pbnQgJiA2MyB8IDEyOCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnl0ZXM7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlUb0J5dGVzKHN0cikgewogICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDI1NSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMoc3RyLCB1bml0cykgewogICAgICAgIGxldCBjLCBoaSwgbG87CiAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgICAgIGhpID0gYyA+PiA4OwogICAgICAgICAgbG8gPSBjICUgMjU2OwogICAgICAgICAgYnl0ZUFycmF5LnB1c2gobG8pOwogICAgICAgICAgYnl0ZUFycmF5LnB1c2goaGkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnl0ZUFycmF5OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMoc3RyKSB7CiAgICAgICAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBibGl0QnVmZmVyKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGxldCBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCB8fCBpID49IHNyYy5sZW5ndGgpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpc0luc3RhbmNlKG9iaiwgdHlwZSkgewogICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8IG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZTsKICAgICAgfQogICAgICBmdW5jdGlvbiBudW1iZXJJc05hTihvYmopIHsKICAgICAgICByZXR1cm4gb2JqICE9PSBvYmo7CiAgICAgIH0KICAgICAgdmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBjb25zdCBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkgewogICAgICAgICAgY29uc3QgaTE2ID0gaSAqIDE2OwogICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7CiAgICAgICAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgICB9KCk7CiAgICAgIGZ1bmN0aW9uIGRlZmluZUJpZ0ludE1ldGhvZChmbikgewogICAgICAgIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAidW5kZWZpbmVkIiA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkKCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBzcmMvYWxpYXMvYnVmZmVyLXNoaW0uanMKICB2YXIgaW1wb3J0X2J1ZmZlcjsKICB2YXIgaW5pdF9idWZmZXJfc2hpbSA9IF9fZXNtKHsKICAgICJzcmMvYWxpYXMvYnVmZmVyLXNoaW0uanMiKCkgewogICAgICBpbXBvcnRfYnVmZmVyID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbEAxLjcuNS9ub2RlX21vZHVsZXMvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvY2pzLXBvbnlmaWxsLmpzCiAgdmFyIHJlcXVpcmVfY2pzX3BvbnlmaWxsID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbEAxLjcuNS9ub2RlX21vZHVsZXMvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvY2pzLXBvbnlmaWxsLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOwogICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOwogICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikKICAgICAgICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgICBpZiAocHJvdG9Qcm9wcykKICAgICAgICAgIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgICAgaWYgKHN0YXRpY1Byb3BzKQogICAgICAgICAgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsICJwcm90b3R5cGUiLCB7CiAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgewogICAgICAgICAgY29uc3RydWN0b3I6IHsKICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCAicHJvdG90eXBlIiwgewogICAgICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICAgICAgfSk7CiAgICAgICAgaWYgKHN1cGVyQ2xhc3MpCiAgICAgICAgICBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7CiAgICAgICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZjIobzIpIHsKICAgICAgICAgIHJldHVybiBvMi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8yKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsKICAgICAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mMihvMiwgcDIpIHsKICAgICAgICAgIG8yLl9fcHJvdG9fXyA9IHAyOwogICAgICAgICAgcmV0dXJuIG8yOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgewogICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gInVuZGVmaW5lZCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmICh0eXBlb2YgUHJveHkgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHsKICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmMikgewogICAgICAgIGlmIChzZWxmMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZjIsIGNhbGwpIHsKICAgICAgICBpZiAoY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSkgewogICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgICAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgewogICAgICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsKICAgICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OwogICAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsKICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsKICAgICAgICB9OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICB3aGlsZSAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkgewogICAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBfZ2V0KCkgewogICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gInVuZGVmaW5lZCIgJiYgUmVmbGVjdC5nZXQpIHsKICAgICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldC5iaW5kKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0Mih0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikgewogICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpOwogICAgICAgICAgICBpZiAoIWJhc2UpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpOwogICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHsKICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IHJlY2VpdmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0KICAgICAgdmFyIEVtaXR0ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gRW1pdHRlcjIoKSB7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRW1pdHRlcjIpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJsaXN0ZW5lcnMiLCB7CiAgICAgICAgICAgIHZhbHVlOiB7fSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhFbWl0dGVyMiwgW3sKICAgICAgICAgIGtleTogImFkZEV2ZW50TGlzdGVuZXIiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKCEodHlwZSBpbiB0aGlzLmxpc3RlbmVycykpIHsKICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1t0eXBlXSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdLnB1c2goewogICAgICAgICAgICAgIGNhbGxiYWNrLAogICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaykgewogICAgICAgICAgICBpZiAoISh0eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmxpc3RlbmVyc1t0eXBlXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICBpZiAoc3RhY2tbaV0uY2FsbGJhY2sgPT09IGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAiZGlzcGF0Y2hFdmVudCIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkgewogICAgICAgICAgICBpZiAoIShldmVudC50eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmxpc3RlbmVyc1tldmVudC50eXBlXTsKICAgICAgICAgICAgdmFyIHN0YWNrVG9DYWxsID0gc3RhY2suc2xpY2UoKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdGFja1RvQ2FsbC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBzdGFja1RvQ2FsbFtpXTsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbGJhY2suY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobGlzdGVuZXIub3B0aW9ucyAmJiBsaXN0ZW5lci5vcHRpb25zLm9uY2UpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudC50eXBlLCBsaXN0ZW5lci5jYWxsYmFjayk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZDsKICAgICAgICAgIH0KICAgICAgICB9XSk7CiAgICAgICAgcmV0dXJuIEVtaXR0ZXIyOwogICAgICB9KCk7CiAgICAgIHZhciBBYm9ydFNpZ25hbCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihfRW1pdHRlcikgewogICAgICAgIF9pbmhlcml0cyhBYm9ydFNpZ25hbDIsIF9FbWl0dGVyKTsKICAgICAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEFib3J0U2lnbmFsMik7CiAgICAgICAgZnVuY3Rpb24gQWJvcnRTaWduYWwyKCkgewogICAgICAgICAgdmFyIF90aGlzOwogICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFib3J0U2lnbmFsMik7CiAgICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpOwogICAgICAgICAgaWYgKCFfdGhpcy5saXN0ZW5lcnMpIHsKICAgICAgICAgICAgRW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsKICAgICAgICAgIH0KICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgImFib3J0ZWQiLCB7CiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksICJvbmFib3J0IiwgewogICAgICAgICAgICB2YWx1ZTogbnVsbCwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksICJyZWFzb24iLCB7CiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICAgIH0KICAgICAgICBfY3JlYXRlQ2xhc3MoQWJvcnRTaWduYWwyLCBbewogICAgICAgICAga2V5OiAidG9TdHJpbmciLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gIltvYmplY3QgQWJvcnRTaWduYWxdIjsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJkaXNwYXRjaEV2ZW50IiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7CiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAiYWJvcnQiKSB7CiAgICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub25hYm9ydCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgdGhpcy5vbmFib3J0LmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBfZ2V0KF9nZXRQcm90b3R5cGVPZihBYm9ydFNpZ25hbDIucHJvdG90eXBlKSwgImRpc3BhdGNoRXZlbnQiLCB0aGlzKS5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9XSk7CiAgICAgICAgcmV0dXJuIEFib3J0U2lnbmFsMjsKICAgICAgfShFbWl0dGVyKTsKICAgICAgdmFyIEFib3J0Q29udHJvbGxlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBBYm9ydENvbnRyb2xsZXIyKCkgewogICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFib3J0Q29udHJvbGxlcjIpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYWwiLCB7CiAgICAgICAgICAgIHZhbHVlOiBuZXcgQWJvcnRTaWduYWwoKSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhBYm9ydENvbnRyb2xsZXIyLCBbewogICAgICAgICAga2V5OiAiYWJvcnQiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KHJlYXNvbikgewogICAgICAgICAgICB2YXIgZXZlbnQ7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoImFib3J0Iik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSAiYWJvcnQiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTsKICAgICAgICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCJhYm9ydCIsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGV2ZW50ID0gewogICAgICAgICAgICAgICAgICB0eXBlOiAiYWJvcnQiLAogICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzaWduYWxSZWFzb24gPSByZWFzb247CiAgICAgICAgICAgIGlmIChzaWduYWxSZWFzb24gPT09IHZvaWQgMCkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRXJyb3IoIlRoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIik7CiAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24ubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgc2lnbmFsUmVhc29uID0gbmV3IERPTUV4Y2VwdGlvbigic2lnbmFsIGlzIGFib3J0ZWQgd2l0aG91dCByZWFzb24iKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRXJyb3IoIlRoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIik7CiAgICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbi5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSBzaWduYWxSZWFzb247CiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGtleTogInRvU3RyaW5nIiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHsKICAgICAgICAgICAgcmV0dXJuICJbb2JqZWN0IEFib3J0Q29udHJvbGxlcl0iOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gQWJvcnRDb250cm9sbGVyMjsKICAgICAgfSgpOwogICAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gInVuZGVmaW5lZCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7CiAgICAgICAgQWJvcnRDb250cm9sbGVyLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkFib3J0Q29udHJvbGxlciI7CiAgICAgICAgQWJvcnRTaWduYWwucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiQWJvcnRTaWduYWwiOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvbHlmaWxsTmVlZGVkKHNlbGYyKSB7CiAgICAgICAgaWYgKHNlbGYyLl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJfX0ZPUkNFX0lOU1RBTExfQUJPUlRDT05UUk9MTEVSX1BPTFlGSUxMPXRydWUgaXMgc2V0LCB3aWxsIGZvcmNlIGluc3RhbGwgcG9seWZpbGwiKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZW9mIHNlbGYyLlJlcXVlc3QgPT09ICJmdW5jdGlvbiIgJiYgIXNlbGYyLlJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzaWduYWwiKSB8fCAhc2VsZjIuQWJvcnRDb250cm9sbGVyOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFib3J0YWJsZUZldGNoRGVjb3JhdG9yKHBhdGNoVGFyZ2V0cykgewogICAgICAgIGlmICh0eXBlb2YgcGF0Y2hUYXJnZXRzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBwYXRjaFRhcmdldHMgPSB7CiAgICAgICAgICAgIGZldGNoOiBwYXRjaFRhcmdldHMKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHZhciBfcGF0Y2hUYXJnZXRzID0gcGF0Y2hUYXJnZXRzLCBmZXRjaCA9IF9wYXRjaFRhcmdldHMuZmV0Y2gsIF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMuUmVxdWVzdCwgTmF0aXZlUmVxdWVzdCA9IF9wYXRjaFRhcmdldHMkUmVxdWVzdCA9PT0gdm9pZCAwID8gZmV0Y2guUmVxdWVzdCA6IF9wYXRjaFRhcmdldHMkUmVxdWVzdCwgTmF0aXZlQWJvcnRDb250cm9sbGVyID0gX3BhdGNoVGFyZ2V0cy5BYm9ydENvbnRyb2xsZXIsIF9wYXRjaFRhcmdldHMkX19GT1JDRSA9IF9wYXRjaFRhcmdldHMuX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCwgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCA9IF9wYXRjaFRhcmdldHMkX19GT1JDRSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGF0Y2hUYXJnZXRzJF9fRk9SQ0U7CiAgICAgICAgaWYgKCFwb2x5ZmlsbE5lZWRlZCh7CiAgICAgICAgICBmZXRjaCwKICAgICAgICAgIFJlcXVlc3Q6IE5hdGl2ZVJlcXVlc3QsCiAgICAgICAgICBBYm9ydENvbnRyb2xsZXI6IE5hdGl2ZUFib3J0Q29udHJvbGxlciwKICAgICAgICAgIF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwKICAgICAgICB9KSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZmV0Y2gsCiAgICAgICAgICAgIFJlcXVlc3QKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHZhciBSZXF1ZXN0ID0gTmF0aXZlUmVxdWVzdDsKICAgICAgICBpZiAoUmVxdWVzdCAmJiAhUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpIHx8IF9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEwpIHsKICAgICAgICAgIFJlcXVlc3QgPSBmdW5jdGlvbiBSZXF1ZXN0MihpbnB1dCwgaW5pdDIpIHsKICAgICAgICAgICAgdmFyIHNpZ25hbDsKICAgICAgICAgICAgaWYgKGluaXQyICYmIGluaXQyLnNpZ25hbCkgewogICAgICAgICAgICAgIHNpZ25hbCA9IGluaXQyLnNpZ25hbDsKICAgICAgICAgICAgICBkZWxldGUgaW5pdDIuc2lnbmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IE5hdGl2ZVJlcXVlc3QoaW5wdXQsIGluaXQyKTsKICAgICAgICAgICAgaWYgKHNpZ25hbCkgewogICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1ZXN0LCAic2lnbmFsIiwgewogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgICAgICB2YWx1ZTogc2lnbmFsCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CiAgICAgICAgICB9OwogICAgICAgICAgUmVxdWVzdC5wcm90b3R5cGUgPSBOYXRpdmVSZXF1ZXN0LnByb3RvdHlwZTsKICAgICAgICB9CiAgICAgICAgdmFyIHJlYWxGZXRjaCA9IGZldGNoOwogICAgICAgIHZhciBhYm9ydGFibGVGZXRjaCA9IGZ1bmN0aW9uIGFib3J0YWJsZUZldGNoMihpbnB1dCwgaW5pdDIpIHsKICAgICAgICAgIHZhciBzaWduYWwgPSBSZXF1ZXN0ICYmIFJlcXVlc3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5wdXQpID8gaW5wdXQuc2lnbmFsIDogaW5pdDIgPyBpbml0Mi5zaWduYWwgOiB2b2lkIDA7CiAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgIHZhciBhYm9ydEVycm9yOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGFib3J0RXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwgIkFib3J0RXJyb3IiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgYWJvcnRFcnJvciA9IG5ldyBFcnJvcigiQWJvcnRlZCIpOwogICAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGNhbmNlbGxhdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIHJlamVjdCkgewogICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChhYm9ydEVycm9yKTsKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvbmNlOiB0cnVlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgZGVsZXRlIGluaXQyLnNpZ25hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtjYW5jZWxsYXRpb24sIHJlYWxGZXRjaChpbnB1dCwgaW5pdDIpXSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVhbEZldGNoKGlucHV0LCBpbml0Mik7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZmV0Y2g6IGFib3J0YWJsZUZldGNoLAogICAgICAgICAgUmVxdWVzdAogICAgICAgIH07CiAgICAgIH0KICAgICAgZXhwb3J0czIuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyOwogICAgICBleHBvcnRzMi5BYm9ydFNpZ25hbCA9IEFib3J0U2lnbmFsOwogICAgICBleHBvcnRzMi5hYm9ydGFibGVGZXRjaCA9IGFib3J0YWJsZUZldGNoRGVjb3JhdG9yOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMKICB2YXIgcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9hYm9ydGNvbnRyb2xsZXItcG9ueWZpbGwuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuQWJvcnRTaWduYWwgPSBleHBvcnRzMi5BYm9ydENvbnRyb2xsZXIgPSB2b2lkIDA7CiAgICAgIHZhciBjanNfcG9ueWZpbGxfMSA9IHJlcXVpcmVfY2pzX3BvbnlmaWxsKCk7CiAgICAgIHZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gc2VsZjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gd2luZG93OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBnbG9iYWw7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Iik7CiAgICAgIH07CiAgICAgIHZhciBBYm9ydENvbnRyb2xsZXIgPSB0eXBlb2YgZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyID09PSAidW5kZWZpbmVkIiA/IGNqc19wb255ZmlsbF8xLkFib3J0Q29udHJvbGxlciA6IGdldEdsb2JhbCgpLkFib3J0Q29udHJvbGxlcjsKICAgICAgZXhwb3J0czIuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyOwogICAgICB2YXIgQWJvcnRTaWduYWwgPSB0eXBlb2YgZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyID09PSAidW5kZWZpbmVkIiA/IGNqc19wb255ZmlsbF8xLkFib3J0U2lnbmFsIDogZ2V0R2xvYmFsKCkuQWJvcnRTaWduYWw7CiAgICAgIGV4cG9ydHMyLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlci5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsXzEgPSByZXF1aXJlX2Fib3J0Y29udHJvbGxlcl9wb255ZmlsbCgpOwogICAgICB2YXIgTnVsbFNpZ25hbCA9IGNsYXNzIHsKICAgICAgfTsKICAgICAgdmFyIEFnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlciA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHRoaXMuc2lnbmFscyA9IG5ldyBTZXQoKTsKICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xLkFib3J0Q29udHJvbGxlcigpOwogICAgICAgIH0KICAgICAgICBhZGRTaWduYWwoc2lnbmFsID0gbmV3IE51bGxTaWduYWwoKSkgewogICAgICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgYWRkIGEgc2lnbmFsLCBhbHJlYWR5IGFib3J0ZWQhIik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNpZ25hbHMuYWRkKHNpZ25hbCk7CiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVBYm9ydGVkKHNpZ25hbCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCAoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBYm9ydGVkKHNpZ25hbCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVBYm9ydGVkKHNpZ25hbCkgewogICAgICAgICAgdGhpcy5zaWduYWxzLmRlbGV0ZShzaWduYWwpOwogICAgICAgICAgaWYgKHRoaXMuc2lnbmFscy5zaXplID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldCBzaWduYWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsOwogICAgICAgIH0KICAgICAgICBhYm9ydCgpIHsKICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gQWdncmVnYXRlQWJvcnRDb250cm9sbGVyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlci5qcwogIHZhciByZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIEFnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyID0gY2xhc3MgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgU2V0KCk7CiAgICAgICAgfQogICAgICAgIGFkZENhbGxiYWNrKGNhbGxiYWNrID0gKCkgPT4gewogICAgICAgIH0pIHsKICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmFkZChjYWxsYmFjayk7CiAgICAgICAgICBjYWxsYmFjayh0aGlzLmN1cnJlbnRNZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgY2FsbGJhY2sobWVzc2FnZSkgewogICAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5mb3JFYWNoKChlbHQpID0+IHsKICAgICAgICAgICAgZWx0KG1lc3NhZ2UpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcwogIHZhciByZXF1aXJlX0Fib3J0YWJsZVByb21pc2VDYWNoZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0Fib3J0YWJsZVByb21pc2VDYWNoZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2ltcG9ydERlZmF1bHQgPSBleHBvcnRzMiAmJiBleHBvcnRzMi5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMSA9IHJlcXVpcmVfYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsKCk7CiAgICAgIHZhciBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0FnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlcigpKTsKICAgICAgdmFyIEFnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcigpKTsKICAgICAgdmFyIEFib3J0YWJsZVByb21pc2VDYWNoZTIgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3IoeyBmaWxsLCBjYWNoZSB9KSB7CiAgICAgICAgICBpZiAodHlwZW9mIGZpbGwgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwYXNzIGEgZmlsbCBmdW5jdGlvbiIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVvZiBjYWNoZSAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwYXNzIGEgY2FjaGUgb2JqZWN0Iik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlLmdldCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgY2FjaGUuc2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBjYWNoZS5kZWxldGUgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FjaGUgbXVzdCBpbXBsZW1lbnQgZ2V0KGtleSksIHNldChrZXksIHZhbCksIGFuZCBhbmQgZGVsZXRlKGtleSkiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY2FjaGUgPSBjYWNoZTsKICAgICAgICAgIHRoaXMuZmlsbENhbGxiYWNrID0gZmlsbDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGlzQWJvcnRFeGNlcHRpb24oZXhjZXB0aW9uKSB7CiAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uLm5hbWUgPT09ICJBYm9ydEVycm9yIiB8fCBleGNlcHRpb24uY29kZSA9PT0gIkVSUl9BQk9SVEVEIiB8fCBleGNlcHRpb24ubWVzc2FnZSA9PT0gIkFib3J0RXJyb3I6IGFib3J0ZWQiIHx8IGV4Y2VwdGlvbi5tZXNzYWdlID09PSAiRXJyb3I6IGFib3J0ZWQiOwogICAgICAgIH0KICAgICAgICBldmljdChrZXksIGVudHJ5KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5nZXQoa2V5KSA9PT0gZW50cnkpIHsKICAgICAgICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmlsbChrZXksIGRhdGEsIHNpZ25hbCwgc3RhdHVzQ2FsbGJhY2spIHsKICAgICAgICAgIGNvbnN0IGFib3J0ZXIgPSBuZXcgQWdncmVnYXRlQWJvcnRDb250cm9sbGVyXzEuZGVmYXVsdCgpOwogICAgICAgICAgY29uc3Qgc3RhdHVzUmVwb3J0ZXIgPSBuZXcgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXJfMS5kZWZhdWx0KCk7CiAgICAgICAgICBzdGF0dXNSZXBvcnRlci5hZGRDYWxsYmFjayhzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICBjb25zdCBuZXdFbnRyeSA9IHsKICAgICAgICAgICAgYWJvcnRlciwKICAgICAgICAgICAgcHJvbWlzZTogdGhpcy5maWxsQ2FsbGJhY2soZGF0YSwgYWJvcnRlci5zaWduYWwsIChtZXNzYWdlKSA9PiB7CiAgICAgICAgICAgICAgc3RhdHVzUmVwb3J0ZXIuY2FsbGJhY2sobWVzc2FnZSk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzZXR0bGVkOiBmYWxzZSwKICAgICAgICAgICAgc3RhdHVzUmVwb3J0ZXIsCiAgICAgICAgICAgIGdldCBhYm9ydGVkKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmFib3J0ZXIuc2lnbmFsLmFib3J0ZWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBuZXdFbnRyeS5hYm9ydGVyLmFkZFNpZ25hbChzaWduYWwpOwogICAgICAgICAgbmV3RW50cnkuYWJvcnRlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCAoKSA9PiB7CiAgICAgICAgICAgIGlmICghbmV3RW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgbmV3RW50cnkucHJvbWlzZS50aGVuKCgpID0+IHsKICAgICAgICAgICAgbmV3RW50cnkuc2V0dGxlZCA9IHRydWU7CiAgICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICAgIG5ld0VudHJ5LnNldHRsZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmV2aWN0KGtleSwgbmV3RW50cnkpOwogICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBjaGVja1NpbmdsZVByb21pc2UocHJvbWlzZSwgc2lnbmFsKSB7CiAgICAgICAgICBmdW5jdGlvbiBjaGVja0ZvclNpbmdsZUFib3J0KCkgewogICAgICAgICAgICBpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoImFib3J0ZWQiKSwgeyBjb2RlOiAiRVJSX0FCT1JURUQiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChyZXN1bHQpID0+IHsKICAgICAgICAgICAgY2hlY2tGb3JTaW5nbGVBYm9ydCgpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfSwgKGVycm9yKSA9PiB7CiAgICAgICAgICAgIGNoZWNrRm9yU2luZ2xlQWJvcnQoKTsKICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaGFzKGtleSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSk7CiAgICAgICAgfQogICAgICAgIGdldChrZXksIGRhdGEsIHNpZ25hbCwgc3RhdHVzQ2FsbGJhY2spIHsKICAgICAgICAgIGlmICghc2lnbmFsICYmIGRhdGEgaW5zdGFuY2VvZiBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMS5BYm9ydFNpZ25hbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJzZWNvbmQgZ2V0IGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYW4gQWJvcnRTaWduYWwsIHBlcmhhcHMgeW91IG1lYW50IHRvIHBhc3MgYG51bGxgIGZvciB0aGUgZmlsbCBkYXRhPyIpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY2FjaGVFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICBpZiAoY2FjaGVFbnRyeSkgewogICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5hYm9ydGVkICYmICFjYWNoZUVudHJ5LnNldHRsZWQpIHsKICAgICAgICAgICAgICB0aGlzLmV2aWN0KGtleSwgY2FjaGVFbnRyeSk7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNhY2hlRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHJldHVybiBjYWNoZUVudHJ5LnByb21pc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FjaGVFbnRyeS5hYm9ydGVyLmFkZFNpZ25hbChzaWduYWwpOwogICAgICAgICAgICBjYWNoZUVudHJ5LnN0YXR1c1JlcG9ydGVyLmFkZENhbGxiYWNrKHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgICAgcmV0dXJuIEFib3J0YWJsZVByb21pc2VDYWNoZTIuY2hlY2tTaW5nbGVQcm9taXNlKGNhY2hlRW50cnkucHJvbWlzZSwgc2lnbmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZmlsbChrZXksIGRhdGEsIHNpZ25hbCwgc3RhdHVzQ2FsbGJhY2spOwogICAgICAgICAgcmV0dXJuIEFib3J0YWJsZVByb21pc2VDYWNoZTIuY2hlY2tTaW5nbGVQcm9taXNlKHRoaXMuY2FjaGUuZ2V0KGtleSkucHJvbWlzZSwgc2lnbmFsKTsKICAgICAgICB9CiAgICAgICAgZGVsZXRlKGtleSkgewogICAgICAgICAgY29uc3QgY2FjaGVkRW50cnkgPSB0aGlzLmNhY2hlLmdldChrZXkpOwogICAgICAgICAgaWYgKGNhY2hlZEVudHJ5KSB7CiAgICAgICAgICAgIGlmICghY2FjaGVkRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIGNhY2hlZEVudHJ5LmFib3J0ZXIuYWJvcnQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhcigpIHsKICAgICAgICAgIGNvbnN0IGtleUl0ZXIgPSB0aGlzLmNhY2hlLmtleXMoKTsKICAgICAgICAgIGxldCBkZWxldGVDb3VudCA9IDA7CiAgICAgICAgICBmb3IgKGxldCByZXN1bHQgPSBrZXlJdGVyLm5leHQoKTsgIXJlc3VsdC5kb25lOyByZXN1bHQgPSBrZXlJdGVyLm5leHQoKSkgewogICAgICAgICAgICB0aGlzLmRlbGV0ZShyZXN1bHQudmFsdWUpOwogICAgICAgICAgICBkZWxldGVDb3VudCArPSAxOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGRlbGV0ZUNvdW50OwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0czIuZGVmYXVsdCA9IEFib3J0YWJsZVByb21pc2VDYWNoZTI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfZXNtID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgX19pbXBvcnREZWZhdWx0ID0gZXhwb3J0czIgJiYgZXhwb3J0czIuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uKG1vZCkgewogICAgICAgIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7ICJkZWZhdWx0IjogbW9kIH07CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9BYm9ydGFibGVQcm9taXNlQ2FjaGUoKSk7CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSBBYm9ydGFibGVQcm9taXNlQ2FjaGVfMS5kZWZhdWx0OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcXVpY2stbHJ1QDQuMC4xL25vZGVfbW9kdWxlcy9xdWljay1scnUvaW5kZXguanMKICB2YXIgcmVxdWlyZV9xdWlja19scnUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcXVpY2stbHJ1QDQuMC4xL25vZGVfbW9kdWxlcy9xdWljay1scnUvaW5kZXguanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgUXVpY2tMUlUgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7CiAgICAgICAgICBpZiAoIShvcHRpb25zLm1heFNpemUgJiYgb3B0aW9ucy5tYXhTaXplID4gMCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiYG1heFNpemVgIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IG9wdGlvbnMubWF4U2l6ZTsKICAgICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTWFwKCk7CiAgICAgICAgICB0aGlzLm9sZENhY2hlID0gbmV3IE1hcCgpOwogICAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgfQogICAgICAgIF9zZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLl9zaXplKys7CiAgICAgICAgICBpZiAodGhpcy5fc2l6ZSA+PSB0aGlzLm1heFNpemUpIHsKICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgICAgIHRoaXMub2xkQ2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXQoa2V5KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5vbGRDYWNoZS5nZXQoa2V5KTsKICAgICAgICAgICAgdGhpcy5vbGRDYWNoZS5kZWxldGUoa2V5KTsKICAgICAgICAgICAgdGhpcy5fc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldChrZXksIHZhbHVlKSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX3NldChrZXksIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBoYXMoa2V5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KSB8fCB0aGlzLm9sZENhY2hlLmhhcyhrZXkpOwogICAgICAgIH0KICAgICAgICBwZWVrKGtleSkgewogICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5vbGRDYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5vbGRDYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVsZXRlKGtleSkgewogICAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7CiAgICAgICAgICBpZiAoZGVsZXRlZCkgewogICAgICAgICAgICB0aGlzLl9zaXplLS07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5vbGRDYWNoZS5kZWxldGUoa2V5KSB8fCBkZWxldGVkOwogICAgICAgIH0KICAgICAgICBjbGVhcigpIHsKICAgICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTsKICAgICAgICAgIHRoaXMub2xkQ2FjaGUuY2xlYXIoKTsKICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgIH0KICAgICAgICAqa2V5cygpIHsKICAgICAgICAgIGZvciAoY29uc3QgW2tleV0gb2YgdGhpcykgewogICAgICAgICAgICB5aWVsZCBrZXk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICp2YWx1ZXMoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiB0aGlzKSB7CiAgICAgICAgICAgIHlpZWxkIHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jYWNoZSkgewogICAgICAgICAgICB5aWVsZCBpdGVtOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub2xkQ2FjaGUpIHsKICAgICAgICAgICAgY29uc3QgW2tleV0gPSBpdGVtOwogICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgICB5aWVsZCBpdGVtOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldCBzaXplKCkgewogICAgICAgICAgbGV0IG9sZENhY2hlU2l6ZSA9IDA7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLm9sZENhY2hlLmtleXMoKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgICBvbGRDYWNoZVNpemUrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgKyBvbGRDYWNoZVNpemU7CiAgICAgICAgfQogICAgICB9OwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBRdWlja0xSVTsKICAgIH0KICB9KTsKCiAgLy8gKGRpc2FibGVkKTpub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2xvY2FsRmlsZQogIHZhciByZXF1aXJlX2xvY2FsRmlsZSA9IF9fY29tbW9uSlMoewogICAgIihkaXNhYmxlZCk6bm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9sb2NhbEZpbGUiKCkgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzCiAgdmFyIHJlcXVpcmVfY29tbW9uID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgVFlQRURfT0sgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFVpbnQxNkFycmF5ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgSW50MzJBcnJheSAhPT0gInVuZGVmaW5lZCI7CiAgICAgIGZ1bmN0aW9uIF9oYXMob2JqLCBrZXkpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKICAgICAgfQogICAgICBleHBvcnRzMi5hc3NpZ24gPSBmdW5jdGlvbihvYmopIHsKICAgICAgICB2YXIgc291cmNlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7CiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpOwogICAgICAgICAgaWYgKCFzb3VyY2UpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzb3VyY2UgKyAibXVzdCBiZSBub24tb2JqZWN0Iik7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBwIGluIHNvdXJjZSkgewogICAgICAgICAgICBpZiAoX2hhcyhzb3VyY2UsIHApKSB7CiAgICAgICAgICAgICAgb2JqW3BdID0gc291cmNlW3BdOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmo7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLnNocmlua0J1ZiA9IGZ1bmN0aW9uKGJ1Ziwgc2l6ZSkgewogICAgICAgIGlmIChidWYubGVuZ3RoID09PSBzaXplKSB7CiAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgIH0KICAgICAgICBpZiAoYnVmLnN1YmFycmF5KSB7CiAgICAgICAgICByZXR1cm4gYnVmLnN1YmFycmF5KDAsIHNpemUpOwogICAgICAgIH0KICAgICAgICBidWYubGVuZ3RoID0gc2l6ZTsKICAgICAgICByZXR1cm4gYnVmOwogICAgICB9OwogICAgICB2YXIgZm5UeXBlZCA9IHsKICAgICAgICBhcnJheVNldDogZnVuY3Rpb24oZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHsKICAgICAgICAgIGlmIChzcmMuc3ViYXJyYXkgJiYgZGVzdC5zdWJhcnJheSkgewogICAgICAgICAgICBkZXN0LnNldChzcmMuc3ViYXJyYXkoc3JjX29mZnMsIHNyY19vZmZzICsgbGVuKSwgZGVzdF9vZmZzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbihjaHVua3MpIHsKICAgICAgICAgIHZhciBpLCBsLCBsZW4sIHBvcywgY2h1bmssIHJlc3VsdDsKICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBsZW4gKz0gY2h1bmtzW2ldLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7CiAgICAgICAgICBwb3MgPSAwOwogICAgICAgICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgY2h1bmsgPSBjaHVua3NbaV07CiAgICAgICAgICAgIHJlc3VsdC5zZXQoY2h1bmssIHBvcyk7CiAgICAgICAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGZuVW50eXBlZCA9IHsKICAgICAgICBhcnJheVNldDogZnVuY3Rpb24oZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24oY2h1bmtzKSB7CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCBjaHVua3MpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZXhwb3J0czIuc2V0VHlwZWQgPSBmdW5jdGlvbihvbikgewogICAgICAgIGlmIChvbikgewogICAgICAgICAgZXhwb3J0czIuQnVmOCA9IFVpbnQ4QXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5CdWYxNiA9IFVpbnQxNkFycmF5OwogICAgICAgICAgZXhwb3J0czIuQnVmMzIgPSBJbnQzMkFycmF5OwogICAgICAgICAgZXhwb3J0czIuYXNzaWduKGV4cG9ydHMyLCBmblR5cGVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXhwb3J0czIuQnVmOCA9IEFycmF5OwogICAgICAgICAgZXhwb3J0czIuQnVmMTYgPSBBcnJheTsKICAgICAgICAgIGV4cG9ydHMyLkJ1ZjMyID0gQXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5hc3NpZ24oZXhwb3J0czIsIGZuVW50eXBlZCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5zZXRUeXBlZChUWVBFRF9PSyk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcwogIHZhciByZXF1aXJlX3RyZWVzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3RyZWVzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIFpfRklYRUQgPSA0OwogICAgICB2YXIgWl9CSU5BUlkgPSAwOwogICAgICB2YXIgWl9URVhUID0gMTsKICAgICAgdmFyIFpfVU5LTk9XTiA9IDI7CiAgICAgIGZ1bmN0aW9uIHplcm8oYnVmKSB7CiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7CiAgICAgICAgd2hpbGUgKC0tbGVuID49IDApIHsKICAgICAgICAgIGJ1ZltsZW5dID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIFNUT1JFRF9CTE9DSyA9IDA7CiAgICAgIHZhciBTVEFUSUNfVFJFRVMgPSAxOwogICAgICB2YXIgRFlOX1RSRUVTID0gMjsKICAgICAgdmFyIE1JTl9NQVRDSCA9IDM7CiAgICAgIHZhciBNQVhfTUFUQ0ggPSAyNTg7CiAgICAgIHZhciBMRU5HVEhfQ09ERVMgPSAyOTsKICAgICAgdmFyIExJVEVSQUxTID0gMjU2OwogICAgICB2YXIgTF9DT0RFUyA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUzsKICAgICAgdmFyIERfQ09ERVMgPSAzMDsKICAgICAgdmFyIEJMX0NPREVTID0gMTk7CiAgICAgIHZhciBIRUFQX1NJWkUgPSAyICogTF9DT0RFUyArIDE7CiAgICAgIHZhciBNQVhfQklUUyA9IDE1OwogICAgICB2YXIgQnVmX3NpemUgPSAxNjsKICAgICAgdmFyIE1BWF9CTF9CSVRTID0gNzsKICAgICAgdmFyIEVORF9CTE9DSyA9IDI1NjsKICAgICAgdmFyIFJFUF8zXzYgPSAxNjsKICAgICAgdmFyIFJFUFpfM18xMCA9IDE3OwogICAgICB2YXIgUkVQWl8xMV8xMzggPSAxODsKICAgICAgdmFyIGV4dHJhX2xiaXRzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDBdOwogICAgICB2YXIgZXh0cmFfZGJpdHMgPSBbMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzXTsKICAgICAgdmFyIGV4dHJhX2JsYml0cyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA3XTsKICAgICAgdmFyIGJsX29yZGVyID0gWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdOwogICAgICB2YXIgRElTVF9DT0RFX0xFTiA9IDUxMjsKICAgICAgdmFyIHN0YXRpY19sdHJlZSA9IG5ldyBBcnJheSgoTF9DT0RFUyArIDIpICogMik7CiAgICAgIHplcm8oc3RhdGljX2x0cmVlKTsKICAgICAgdmFyIHN0YXRpY19kdHJlZSA9IG5ldyBBcnJheShEX0NPREVTICogMik7CiAgICAgIHplcm8oc3RhdGljX2R0cmVlKTsKICAgICAgdmFyIF9kaXN0X2NvZGUgPSBuZXcgQXJyYXkoRElTVF9DT0RFX0xFTik7CiAgICAgIHplcm8oX2Rpc3RfY29kZSk7CiAgICAgIHZhciBfbGVuZ3RoX2NvZGUgPSBuZXcgQXJyYXkoTUFYX01BVENIIC0gTUlOX01BVENIICsgMSk7CiAgICAgIHplcm8oX2xlbmd0aF9jb2RlKTsKICAgICAgdmFyIGJhc2VfbGVuZ3RoID0gbmV3IEFycmF5KExFTkdUSF9DT0RFUyk7CiAgICAgIHplcm8oYmFzZV9sZW5ndGgpOwogICAgICB2YXIgYmFzZV9kaXN0ID0gbmV3IEFycmF5KERfQ09ERVMpOwogICAgICB6ZXJvKGJhc2VfZGlzdCk7CiAgICAgIGZ1bmN0aW9uIFN0YXRpY1RyZWVEZXNjKHN0YXRpY190cmVlLCBleHRyYV9iaXRzLCBleHRyYV9iYXNlLCBlbGVtcywgbWF4X2xlbmd0aCkgewogICAgICAgIHRoaXMuc3RhdGljX3RyZWUgPSBzdGF0aWNfdHJlZTsKICAgICAgICB0aGlzLmV4dHJhX2JpdHMgPSBleHRyYV9iaXRzOwogICAgICAgIHRoaXMuZXh0cmFfYmFzZSA9IGV4dHJhX2Jhc2U7CiAgICAgICAgdGhpcy5lbGVtcyA9IGVsZW1zOwogICAgICAgIHRoaXMubWF4X2xlbmd0aCA9IG1heF9sZW5ndGg7CiAgICAgICAgdGhpcy5oYXNfc3RyZWUgPSBzdGF0aWNfdHJlZSAmJiBzdGF0aWNfdHJlZS5sZW5ndGg7CiAgICAgIH0KICAgICAgdmFyIHN0YXRpY19sX2Rlc2M7CiAgICAgIHZhciBzdGF0aWNfZF9kZXNjOwogICAgICB2YXIgc3RhdGljX2JsX2Rlc2M7CiAgICAgIGZ1bmN0aW9uIFRyZWVEZXNjKGR5bl90cmVlLCBzdGF0X2Rlc2MpIHsKICAgICAgICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7CiAgICAgICAgdGhpcy5tYXhfY29kZSA9IDA7CiAgICAgICAgdGhpcy5zdGF0X2Rlc2MgPSBzdGF0X2Rlc2M7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHsKICAgICAgICByZXR1cm4gZGlzdCA8IDI1NiA/IF9kaXN0X2NvZGVbZGlzdF0gOiBfZGlzdF9jb2RlWzI1NiArIChkaXN0ID4+PiA3KV07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHV0X3Nob3J0KHMsIHcpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHcgJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSB3ID4+PiA4ICYgMjU1OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfYml0cyhzLCB2YWx1ZSwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKHMuYmlfdmFsaWQgPiBCdWZfc2l6ZSAtIGxlbmd0aCkgewogICAgICAgICAgcy5iaV9idWYgfD0gdmFsdWUgPDwgcy5iaV92YWxpZCAmIDY1NTM1OwogICAgICAgICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgICAgICAgIHMuYmlfYnVmID0gdmFsdWUgPj4gQnVmX3NpemUgLSBzLmJpX3ZhbGlkOwogICAgICAgICAgcy5iaV92YWxpZCArPSBsZW5ndGggLSBCdWZfc2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcy5iaV9idWYgfD0gdmFsdWUgPDwgcy5iaV92YWxpZCAmIDY1NTM1OwogICAgICAgICAgcy5iaV92YWxpZCArPSBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7CiAgICAgICAgc2VuZF9iaXRzKHMsIHRyZWVbYyAqIDJdLCB0cmVlW2MgKiAyICsgMV0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJpX3JldmVyc2UoY29kZSwgbGVuKSB7CiAgICAgICAgdmFyIHJlcyA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgcmVzIHw9IGNvZGUgJiAxOwogICAgICAgICAgY29kZSA+Pj49IDE7CiAgICAgICAgICByZXMgPDw9IDE7CiAgICAgICAgfSB3aGlsZSAoLS1sZW4gPiAwKTsKICAgICAgICByZXR1cm4gcmVzID4+PiAxOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJpX2ZsdXNoKHMpIHsKICAgICAgICBpZiAocy5iaV92YWxpZCA9PT0gMTYpIHsKICAgICAgICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7CiAgICAgICAgICBzLmJpX2J1ZiA9IDA7CiAgICAgICAgICBzLmJpX3ZhbGlkID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPj0gOCkgewogICAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZiAmIDI1NTsKICAgICAgICAgIHMuYmlfYnVmID4+PSA4OwogICAgICAgICAgcy5iaV92YWxpZCAtPSA4OwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBnZW5fYml0bGVuKHMsIGRlc2MpIHsKICAgICAgICB2YXIgdHJlZSA9IGRlc2MuZHluX3RyZWU7CiAgICAgICAgdmFyIG1heF9jb2RlID0gZGVzYy5tYXhfY29kZTsKICAgICAgICB2YXIgc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTsKICAgICAgICB2YXIgaGFzX3N0cmVlID0gZGVzYy5zdGF0X2Rlc2MuaGFzX3N0cmVlOwogICAgICAgIHZhciBleHRyYSA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7CiAgICAgICAgdmFyIGJhc2UgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlOwogICAgICAgIHZhciBtYXhfbGVuZ3RoID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDsKICAgICAgICB2YXIgaDsKICAgICAgICB2YXIgbiwgbTsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgeGJpdHM7CiAgICAgICAgdmFyIGY7CiAgICAgICAgdmFyIG92ZXJmbG93ID0gMDsKICAgICAgICBmb3IgKGJpdHMgPSAwOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgICAgICAgIHMuYmxfY291bnRbYml0c10gPSAwOwogICAgICAgIH0KICAgICAgICB0cmVlW3MuaGVhcFtzLmhlYXBfbWF4XSAqIDIgKyAxXSA9IDA7CiAgICAgICAgZm9yIChoID0gcy5oZWFwX21heCArIDE7IGggPCBIRUFQX1NJWkU7IGgrKykgewogICAgICAgICAgbiA9IHMuaGVhcFtoXTsKICAgICAgICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXSAqIDIgKyAxXSArIDE7CiAgICAgICAgICBpZiAoYml0cyA+IG1heF9sZW5ndGgpIHsKICAgICAgICAgICAgYml0cyA9IG1heF9sZW5ndGg7CiAgICAgICAgICAgIG92ZXJmbG93Kys7CiAgICAgICAgICB9CiAgICAgICAgICB0cmVlW24gKiAyICsgMV0gPSBiaXRzOwogICAgICAgICAgaWYgKG4gPiBtYXhfY29kZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHMuYmxfY291bnRbYml0c10rKzsKICAgICAgICAgIHhiaXRzID0gMDsKICAgICAgICAgIGlmIChuID49IGJhc2UpIHsKICAgICAgICAgICAgeGJpdHMgPSBleHRyYVtuIC0gYmFzZV07CiAgICAgICAgICB9CiAgICAgICAgICBmID0gdHJlZVtuICogMl07CiAgICAgICAgICBzLm9wdF9sZW4gKz0gZiAqIChiaXRzICsgeGJpdHMpOwogICAgICAgICAgaWYgKGhhc19zdHJlZSkgewogICAgICAgICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdICsgeGJpdHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3ZlcmZsb3cgPT09IDApIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZG8gewogICAgICAgICAgYml0cyA9IG1heF9sZW5ndGggLSAxOwogICAgICAgICAgd2hpbGUgKHMuYmxfY291bnRbYml0c10gPT09IDApIHsKICAgICAgICAgICAgYml0cy0tOwogICAgICAgICAgfQogICAgICAgICAgcy5ibF9jb3VudFtiaXRzXS0tOwogICAgICAgICAgcy5ibF9jb3VudFtiaXRzICsgMV0gKz0gMjsKICAgICAgICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTsKICAgICAgICAgIG92ZXJmbG93IC09IDI7CiAgICAgICAgfSB3aGlsZSAob3ZlcmZsb3cgPiAwKTsKICAgICAgICBmb3IgKGJpdHMgPSBtYXhfbGVuZ3RoOyBiaXRzICE9PSAwOyBiaXRzLS0pIHsKICAgICAgICAgIG4gPSBzLmJsX2NvdW50W2JpdHNdOwogICAgICAgICAgd2hpbGUgKG4gIT09IDApIHsKICAgICAgICAgICAgbSA9IHMuaGVhcFstLWhdOwogICAgICAgICAgICBpZiAobSA+IG1heF9jb2RlKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRyZWVbbSAqIDIgKyAxXSAhPT0gYml0cykgewogICAgICAgICAgICAgIHMub3B0X2xlbiArPSAoYml0cyAtIHRyZWVbbSAqIDIgKyAxXSkgKiB0cmVlW20gKiAyXTsKICAgICAgICAgICAgICB0cmVlW20gKiAyICsgMV0gPSBiaXRzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG4tLTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZ2VuX2NvZGVzKHRyZWUsIG1heF9jb2RlLCBibF9jb3VudCkgewogICAgICAgIHZhciBuZXh0X2NvZGUgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTsKICAgICAgICB2YXIgY29kZSA9IDA7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIG47CiAgICAgICAgZm9yIChiaXRzID0gMTsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgICBuZXh0X2NvZGVbYml0c10gPSBjb2RlID0gY29kZSArIGJsX2NvdW50W2JpdHMgLSAxXSA8PCAxOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICAgIHZhciBsZW4gPSB0cmVlW24gKiAyICsgMV07CiAgICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdHJlZVtuICogMl0gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHRyX3N0YXRpY19pbml0KCkgewogICAgICAgIHZhciBuOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciBsZW5ndGg7CiAgICAgICAgdmFyIGNvZGU7CiAgICAgICAgdmFyIGRpc3Q7CiAgICAgICAgdmFyIGJsX2NvdW50ID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7CiAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgTEVOR1RIX0NPREVTIC0gMTsgY29kZSsrKSB7CiAgICAgICAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDsKICAgICAgICAgIGZvciAobiA9IDA7IG4gPCAxIDw8IGV4dHJhX2xiaXRzW2NvZGVdOyBuKyspIHsKICAgICAgICAgICAgX2xlbmd0aF9jb2RlW2xlbmd0aCsrXSA9IGNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGggLSAxXSA9IGNvZGU7CiAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IDE2OyBjb2RlKyspIHsKICAgICAgICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3Q7CiAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMSA8PCBleHRyYV9kYml0c1tjb2RlXTsgbisrKSB7CiAgICAgICAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRpc3QgPj49IDc7CiAgICAgICAgZm9yICg7IGNvZGUgPCBEX0NPREVTOyBjb2RlKyspIHsKICAgICAgICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNzsKICAgICAgICAgIGZvciAobiA9IDA7IG4gPCAxIDw8IGV4dHJhX2RiaXRzW2NvZGVdIC0gNzsgbisrKSB7CiAgICAgICAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgICAgICAgYmxfY291bnRbYml0c10gPSAwOwogICAgICAgIH0KICAgICAgICBuID0gMDsKICAgICAgICB3aGlsZSAobiA8PSAxNDMpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gODsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzhdKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChuIDw9IDI1NSkgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA5OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbOV0rKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4gPD0gMjc5KSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDc7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs3XSsrOwogICAgICAgIH0KICAgICAgICB3aGlsZSAobiA8PSAyODcpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gODsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzhdKys7CiAgICAgICAgfQogICAgICAgIGdlbl9jb2RlcyhzdGF0aWNfbHRyZWUsIExfQ09ERVMgKyAxLCBibF9jb3VudCk7CiAgICAgICAgZm9yIChuID0gMDsgbiA8IERfQ09ERVM7IG4rKykgewogICAgICAgICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0gPSA1OwogICAgICAgICAgc3RhdGljX2R0cmVlW24gKiAyXSA9IGJpX3JldmVyc2UobiwgNSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMgKyAxLCBMX0NPREVTLCBNQVhfQklUUyk7CiAgICAgICAgc3RhdGljX2RfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfZHRyZWUsIGV4dHJhX2RiaXRzLCAwLCBEX0NPREVTLCBNQVhfQklUUyk7CiAgICAgICAgc3RhdGljX2JsX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2MobmV3IEFycmF5KDApLCBleHRyYV9ibGJpdHMsIDAsIEJMX0NPREVTLCBNQVhfQkxfQklUUyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5pdF9ibG9jayhzKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgZm9yIChuID0gMDsgbiA8IExfQ09ERVM7IG4rKykgewogICAgICAgICAgcy5keW5fbHRyZWVbbiAqIDJdID0gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8IERfQ09ERVM7IG4rKykgewogICAgICAgICAgcy5keW5fZHRyZWVbbiAqIDJdID0gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsKICAgICAgICAgIHMuYmxfdHJlZVtuICogMl0gPSAwOwogICAgICAgIH0KICAgICAgICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXSA9IDE7CiAgICAgICAgcy5vcHRfbGVuID0gcy5zdGF0aWNfbGVuID0gMDsKICAgICAgICBzLmxhc3RfbGl0ID0gcy5tYXRjaGVzID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBiaV93aW5kdXAocykgewogICAgICAgIGlmIChzLmJpX3ZhbGlkID4gOCkgewogICAgICAgICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgICAgICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7CiAgICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmOwogICAgICAgIH0KICAgICAgICBzLmJpX2J1ZiA9IDA7CiAgICAgICAgcy5iaV92YWxpZCA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gY29weV9ibG9jayhzLCBidWYsIGxlbiwgaGVhZGVyKSB7CiAgICAgICAgYmlfd2luZHVwKHMpOwogICAgICAgIGlmIChoZWFkZXIpIHsKICAgICAgICAgIHB1dF9zaG9ydChzLCBsZW4pOwogICAgICAgICAgcHV0X3Nob3J0KHMsIH5sZW4pOwogICAgICAgIH0KICAgICAgICB1dGlscy5hcnJheVNldChzLnBlbmRpbmdfYnVmLCBzLndpbmRvdywgYnVmLCBsZW4sIHMucGVuZGluZyk7CiAgICAgICAgcy5wZW5kaW5nICs9IGxlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBzbWFsbGVyKHRyZWUsIG4sIG0sIGRlcHRoKSB7CiAgICAgICAgdmFyIF9uMiA9IG4gKiAyOwogICAgICAgIHZhciBfbTIgPSBtICogMjsKICAgICAgICByZXR1cm4gdHJlZVtfbjJdIDwgdHJlZVtfbTJdIHx8IHRyZWVbX24yXSA9PT0gdHJlZVtfbTJdICYmIGRlcHRoW25dIDw9IGRlcHRoW21dOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaykgewogICAgICAgIHZhciB2ID0gcy5oZWFwW2tdOwogICAgICAgIHZhciBqID0gayA8PCAxOwogICAgICAgIHdoaWxlIChqIDw9IHMuaGVhcF9sZW4pIHsKICAgICAgICAgIGlmIChqIDwgcy5oZWFwX2xlbiAmJiBzbWFsbGVyKHRyZWUsIHMuaGVhcFtqICsgMV0sIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsKICAgICAgICAgICAgaisrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNtYWxsZXIodHJlZSwgdiwgcy5oZWFwW2pdLCBzLmRlcHRoKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHMuaGVhcFtrXSA9IHMuaGVhcFtqXTsKICAgICAgICAgIGsgPSBqOwogICAgICAgICAgaiA8PD0gMTsKICAgICAgICB9CiAgICAgICAgcy5oZWFwW2tdID0gdjsKICAgICAgfQogICAgICBmdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpIHsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgbGM7CiAgICAgICAgdmFyIGx4ID0gMDsKICAgICAgICB2YXIgY29kZTsKICAgICAgICB2YXIgZXh0cmE7CiAgICAgICAgaWYgKHMubGFzdF9saXQgIT09IDApIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgZGlzdCA9IHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMl0gPDwgOCB8IHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMiArIDFdOwogICAgICAgICAgICBsYyA9IHMucGVuZGluZ19idWZbcy5sX2J1ZiArIGx4XTsKICAgICAgICAgICAgbHgrKzsKICAgICAgICAgICAgaWYgKGRpc3QgPT09IDApIHsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgbGMsIGx0cmVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb2RlID0gX2xlbmd0aF9jb2RlW2xjXTsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY29kZSArIExJVEVSQUxTICsgMSwgbHRyZWUpOwogICAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfbGJpdHNbY29kZV07CiAgICAgICAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7CiAgICAgICAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTsKICAgICAgICAgICAgICAgIHNlbmRfYml0cyhzLCBsYywgZXh0cmEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkaXN0LS07CiAgICAgICAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTsKICAgICAgICAgICAgICBzZW5kX2NvZGUocywgY29kZSwgZHRyZWUpOwogICAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfZGJpdHNbY29kZV07CiAgICAgICAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7CiAgICAgICAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTsKICAgICAgICAgICAgICAgIHNlbmRfYml0cyhzLCBkaXN0LCBleHRyYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IHdoaWxlIChseCA8IHMubGFzdF9saXQpOwogICAgICAgIH0KICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKSB7CiAgICAgICAgdmFyIHRyZWUgPSBkZXNjLmR5bl90cmVlOwogICAgICAgIHZhciBzdHJlZSA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogICAgICAgIHZhciBoYXNfc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgICAgICAgdmFyIGVsZW1zID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7CiAgICAgICAgdmFyIG4sIG07CiAgICAgICAgdmFyIG1heF9jb2RlID0gLTE7CiAgICAgICAgdmFyIG5vZGU7CiAgICAgICAgcy5oZWFwX2xlbiA9IDA7CiAgICAgICAgcy5oZWFwX21heCA9IEhFQVBfU0laRTsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgZWxlbXM7IG4rKykgewogICAgICAgICAgaWYgKHRyZWVbbiAqIDJdICE9PSAwKSB7CiAgICAgICAgICAgIHMuaGVhcFsrK3MuaGVhcF9sZW5dID0gbWF4X2NvZGUgPSBuOwogICAgICAgICAgICBzLmRlcHRoW25dID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyZWVbbiAqIDIgKyAxXSA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdoaWxlIChzLmhlYXBfbGVuIDwgMikgewogICAgICAgICAgbm9kZSA9IHMuaGVhcFsrK3MuaGVhcF9sZW5dID0gbWF4X2NvZGUgPCAyID8gKyttYXhfY29kZSA6IDA7CiAgICAgICAgICB0cmVlW25vZGUgKiAyXSA9IDE7CiAgICAgICAgICBzLmRlcHRoW25vZGVdID0gMDsKICAgICAgICAgIHMub3B0X2xlbi0tOwogICAgICAgICAgaWYgKGhhc19zdHJlZSkgewogICAgICAgICAgICBzLnN0YXRpY19sZW4gLT0gc3RyZWVbbm9kZSAqIDIgKyAxXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlOwogICAgICAgIGZvciAobiA9IHMuaGVhcF9sZW4gPj4gMTsgbiA+PSAxOyBuLS0pIHsKICAgICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwgbik7CiAgICAgICAgfQogICAgICAgIG5vZGUgPSBlbGVtczsKICAgICAgICBkbyB7CiAgICAgICAgICBuID0gcy5oZWFwWzFdOwogICAgICAgICAgcy5oZWFwWzFdID0gcy5oZWFwW3MuaGVhcF9sZW4tLV07CiAgICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEpOwogICAgICAgICAgbSA9IHMuaGVhcFsxXTsKICAgICAgICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbjsKICAgICAgICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbTsKICAgICAgICAgIHRyZWVbbm9kZSAqIDJdID0gdHJlZVtuICogMl0gKyB0cmVlW20gKiAyXTsKICAgICAgICAgIHMuZGVwdGhbbm9kZV0gPSAocy5kZXB0aFtuXSA+PSBzLmRlcHRoW21dID8gcy5kZXB0aFtuXSA6IHMuZGVwdGhbbV0pICsgMTsKICAgICAgICAgIHRyZWVbbiAqIDIgKyAxXSA9IHRyZWVbbSAqIDIgKyAxXSA9IG5vZGU7CiAgICAgICAgICBzLmhlYXBbMV0gPSBub2RlKys7CiAgICAgICAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEpOwogICAgICAgIH0gd2hpbGUgKHMuaGVhcF9sZW4gPj0gMik7CiAgICAgICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBzLmhlYXBbMV07CiAgICAgICAgZ2VuX2JpdGxlbihzLCBkZXNjKTsKICAgICAgICBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIHMuYmxfY291bnQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNjYW5fdHJlZShzLCB0cmVlLCBtYXhfY29kZSkgewogICAgICAgIHZhciBuOwogICAgICAgIHZhciBwcmV2bGVuID0gLTE7CiAgICAgICAgdmFyIGN1cmxlbjsKICAgICAgICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXTsKICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgIHZhciBtYXhfY291bnQgPSA3OwogICAgICAgIHZhciBtaW5fY291bnQgPSA0OwogICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgIH0KICAgICAgICB0cmVlWyhtYXhfY29kZSArIDEpICogMiArIDFdID0gNjU1MzU7CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgICBjdXJsZW4gPSBuZXh0bGVuOwogICAgICAgICAgbmV4dGxlbiA9IHRyZWVbKG4gKyAxKSAqIDIgKyAxXTsKICAgICAgICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHsKICAgICAgICAgICAgcy5ibF90cmVlW2N1cmxlbiAqIDJdICs9IGNvdW50OwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHsKICAgICAgICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgewogICAgICAgICAgICAgIHMuYmxfdHJlZVtjdXJsZW4gKiAyXSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHMuYmxfdHJlZVtSRVBfM182ICogMl0rKzsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHsKICAgICAgICAgICAgcy5ibF90cmVlW1JFUFpfM18xMCAqIDJdKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXSsrOwogICAgICAgICAgfQogICAgICAgICAgY291bnQgPSAwOwogICAgICAgICAgcHJldmxlbiA9IGN1cmxlbjsKICAgICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDY7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXhfY291bnQgPSA3OwogICAgICAgICAgICBtaW5fY291bnQgPSA0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpIHsKICAgICAgICB2YXIgbjsKICAgICAgICB2YXIgcHJldmxlbiA9IC0xOwogICAgICAgIHZhciBjdXJsZW47CiAgICAgICAgdmFyIG5leHRsZW4gPSB0cmVlWzAgKiAyICsgMV07CiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIgbWF4X2NvdW50ID0gNzsKICAgICAgICB2YXIgbWluX2NvdW50ID0gNDsKICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICB9CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICAgICAgICBjdXJsZW4gPSBuZXh0bGVuOwogICAgICAgICAgbmV4dGxlbiA9IHRyZWVbKG4gKyAxKSAqIDIgKyAxXTsKICAgICAgICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIH0gd2hpbGUgKC0tY291bnQgIT09IDApOwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHsKICAgICAgICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgewogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7CiAgICAgICAgICAgICAgY291bnQtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQXzNfNiwgcy5ibF90cmVlKTsKICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMik7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7CiAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBaXzNfMTAsIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfMTFfMTM4LCBzLmJsX3RyZWUpOwogICAgICAgICAgICBzZW5kX2JpdHMocywgY291bnQgLSAxMSwgNyk7CiAgICAgICAgICB9CiAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgICBwcmV2bGVuID0gY3VybGVuOwogICAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNjsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDc7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykgewogICAgICAgIHZhciBtYXhfYmxpbmRleDsKICAgICAgICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTsKICAgICAgICBzY2FuX3RyZWUocywgcy5keW5fZHRyZWUsIHMuZF9kZXNjLm1heF9jb2RlKTsKICAgICAgICBidWlsZF90cmVlKHMsIHMuYmxfZGVzYyk7CiAgICAgICAgZm9yIChtYXhfYmxpbmRleCA9IEJMX0NPREVTIC0gMTsgbWF4X2JsaW5kZXggPj0gMzsgbWF4X2JsaW5kZXgtLSkgewogICAgICAgICAgaWYgKHMuYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF0gKiAyICsgMV0gIT09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7CiAgICAgICAgcmV0dXJuIG1heF9ibGluZGV4OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKSB7CiAgICAgICAgdmFyIHJhbms7CiAgICAgICAgc2VuZF9iaXRzKHMsIGxjb2RlcyAtIDI1NywgNSk7CiAgICAgICAgc2VuZF9iaXRzKHMsIGRjb2RlcyAtIDEsIDUpOwogICAgICAgIHNlbmRfYml0cyhzLCBibGNvZGVzIC0gNCwgNCk7CiAgICAgICAgZm9yIChyYW5rID0gMDsgcmFuayA8IGJsY29kZXM7IHJhbmsrKykgewogICAgICAgICAgc2VuZF9iaXRzKHMsIHMuYmxfdHJlZVtibF9vcmRlcltyYW5rXSAqIDIgKyAxXSwgMyk7CiAgICAgICAgfQogICAgICAgIHNlbmRfdHJlZShzLCBzLmR5bl9sdHJlZSwgbGNvZGVzIC0gMSk7CiAgICAgICAgc2VuZF90cmVlKHMsIHMuZHluX2R0cmVlLCBkY29kZXMgLSAxKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHsKICAgICAgICB2YXIgYmxhY2tfbWFzayA9IDQwOTM2MjQ0NDc7CiAgICAgICAgdmFyIG47CiAgICAgICAgZm9yIChuID0gMDsgbiA8PSAzMTsgbisrLCBibGFja19tYXNrID4+Pj0gMSkgewogICAgICAgICAgaWYgKGJsYWNrX21hc2sgJiAxICYmIHMuZHluX2x0cmVlW24gKiAyXSAhPT0gMCkgewogICAgICAgICAgICByZXR1cm4gWl9CSU5BUlk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLmR5bl9sdHJlZVs5ICogMl0gIT09IDAgfHwgcy5keW5fbHRyZWVbMTAgKiAyXSAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMyAqIDJdICE9PSAwKSB7CiAgICAgICAgICByZXR1cm4gWl9URVhUOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHsKICAgICAgICAgIGlmIChzLmR5bl9sdHJlZVtuICogMl0gIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIFpfVEVYVDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFpfQklOQVJZOwogICAgICB9CiAgICAgIHZhciBzdGF0aWNfaW5pdF9kb25lID0gZmFsc2U7CiAgICAgIGZ1bmN0aW9uIF90cl9pbml0KHMpIHsKICAgICAgICBpZiAoIXN0YXRpY19pbml0X2RvbmUpIHsKICAgICAgICAgIHRyX3N0YXRpY19pbml0KCk7CiAgICAgICAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcy5sX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5keW5fbHRyZWUsIHN0YXRpY19sX2Rlc2MpOwogICAgICAgIHMuZF9kZXNjID0gbmV3IFRyZWVEZXNjKHMuZHluX2R0cmVlLCBzdGF0aWNfZF9kZXNjKTsKICAgICAgICBzLmJsX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5ibF90cmVlLCBzdGF0aWNfYmxfZGVzYyk7CiAgICAgICAgcy5iaV9idWYgPSAwOwogICAgICAgIHMuYmlfdmFsaWQgPSAwOwogICAgICAgIGluaXRfYmxvY2socyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpIHsKICAgICAgICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgICAgICBjb3B5X2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX2FsaWduKHMpIHsKICAgICAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTIDw8IDEsIDMpOwogICAgICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7CiAgICAgICAgYmlfZmx1c2gocyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkgewogICAgICAgIHZhciBvcHRfbGVuYiwgc3RhdGljX2xlbmI7CiAgICAgICAgdmFyIG1heF9ibGluZGV4ID0gMDsKICAgICAgICBpZiAocy5sZXZlbCA+IDApIHsKICAgICAgICAgIGlmIChzLnN0cm0uZGF0YV90eXBlID09PSBaX1VOS05PV04pIHsKICAgICAgICAgICAgcy5zdHJtLmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7CiAgICAgICAgICB9CiAgICAgICAgICBidWlsZF90cmVlKHMsIHMubF9kZXNjKTsKICAgICAgICAgIGJ1aWxkX3RyZWUocywgcy5kX2Rlc2MpOwogICAgICAgICAgbWF4X2JsaW5kZXggPSBidWlsZF9ibF90cmVlKHMpOwogICAgICAgICAgb3B0X2xlbmIgPSBzLm9wdF9sZW4gKyAzICsgNyA+Pj4gMzsKICAgICAgICAgIHN0YXRpY19sZW5iID0gcy5zdGF0aWNfbGVuICsgMyArIDcgPj4+IDM7CiAgICAgICAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIHsKICAgICAgICAgICAgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYiA9IHN0b3JlZF9sZW4gKyA1OwogICAgICAgIH0KICAgICAgICBpZiAoc3RvcmVkX2xlbiArIDQgPD0gb3B0X2xlbmIgJiYgYnVmICE9PSAtMSkgewogICAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpOwogICAgICAgIH0gZWxzZSBpZiAocy5zdHJhdGVneSA9PT0gWl9GSVhFRCB8fCBzdGF0aWNfbGVuYiA9PT0gb3B0X2xlbmIpIHsKICAgICAgICAgIHNlbmRfYml0cyhzLCAoU1RBVElDX1RSRUVTIDw8IDEpICsgKGxhc3QgPyAxIDogMCksIDMpOwogICAgICAgICAgY29tcHJlc3NfYmxvY2socywgc3RhdGljX2x0cmVlLCBzdGF0aWNfZHRyZWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMubF9kZXNjLm1heF9jb2RlICsgMSwgcy5kX2Rlc2MubWF4X2NvZGUgKyAxLCBtYXhfYmxpbmRleCArIDEpOwogICAgICAgICAgY29tcHJlc3NfYmxvY2socywgcy5keW5fbHRyZWUsIHMuZHluX2R0cmVlKTsKICAgICAgICB9CiAgICAgICAgaW5pdF9ibG9jayhzKTsKICAgICAgICBpZiAobGFzdCkgewogICAgICAgICAgYmlfd2luZHVwKHMpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfdGFsbHkocywgZGlzdCwgbGMpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMl0gPSBkaXN0ID4+PiA4ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyICsgMV0gPSBkaXN0ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5sX2J1ZiArIHMubGFzdF9saXRdID0gbGMgJiAyNTU7CiAgICAgICAgcy5sYXN0X2xpdCsrOwogICAgICAgIGlmIChkaXN0ID09PSAwKSB7CiAgICAgICAgICBzLmR5bl9sdHJlZVtsYyAqIDJdKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHMubWF0Y2hlcysrOwogICAgICAgICAgZGlzdC0tOwogICAgICAgICAgcy5keW5fbHRyZWVbKF9sZW5ndGhfY29kZVtsY10gKyBMSVRFUkFMUyArIDEpICogMl0rKzsKICAgICAgICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdKys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLmxhc3RfbGl0ID09PSBzLmxpdF9idWZzaXplIC0gMTsKICAgICAgfQogICAgICBleHBvcnRzMi5fdHJfaW5pdCA9IF90cl9pbml0OwogICAgICBleHBvcnRzMi5fdHJfc3RvcmVkX2Jsb2NrID0gX3RyX3N0b3JlZF9ibG9jazsKICAgICAgZXhwb3J0czIuX3RyX2ZsdXNoX2Jsb2NrID0gX3RyX2ZsdXNoX2Jsb2NrOwogICAgICBleHBvcnRzMi5fdHJfdGFsbHkgPSBfdHJfdGFsbHk7CiAgICAgIGV4cG9ydHMyLl90cl9hbGlnbiA9IF90cl9hbGlnbjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2FkbGVyMzIuanMKICB2YXIgcmVxdWlyZV9hZGxlcjMyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2FkbGVyMzIuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7CiAgICAgICAgdmFyIHMxID0gYWRsZXIgJiA2NTUzNSB8IDAsIHMyID0gYWRsZXIgPj4+IDE2ICYgNjU1MzUgfCAwLCBuID0gMDsKICAgICAgICB3aGlsZSAobGVuICE9PSAwKSB7CiAgICAgICAgICBuID0gbGVuID4gMmUzID8gMmUzIDogbGVuOwogICAgICAgICAgbGVuIC09IG47CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHMxID0gczEgKyBidWZbcG9zKytdIHwgMDsKICAgICAgICAgICAgczIgPSBzMiArIHMxIHwgMDsKICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgICBzMSAlPSA2NTUyMTsKICAgICAgICAgIHMyICU9IDY1NTIxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gczEgfCBzMiA8PCAxNiB8IDA7CiAgICAgIH0KICAgICAgbW9kdWxlMi5leHBvcnRzID0gYWRsZXIzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NyYzMyLmpzCiAgdmFyIHJlcXVpcmVfY3JjMzIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY3JjMzIuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBmdW5jdGlvbiBtYWtlVGFibGUoKSB7CiAgICAgICAgdmFyIGMsIHRhYmxlID0gW107CiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgYyA9IG47CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykgewogICAgICAgICAgICBjID0gYyAmIDEgPyAzOTg4MjkyMzg0IF4gYyA+Pj4gMSA6IGMgPj4+IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0YWJsZVtuXSA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgfQogICAgICB2YXIgY3JjVGFibGUgPSBtYWtlVGFibGUoKTsKICAgICAgZnVuY3Rpb24gY3JjMzIoY3JjLCBidWYsIGxlbiwgcG9zKSB7CiAgICAgICAgdmFyIHQgPSBjcmNUYWJsZSwgZW5kID0gcG9zICsgbGVuOwogICAgICAgIGNyYyBePSAtMTsKICAgICAgICBmb3IgKHZhciBpID0gcG9zOyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIGNyYyA9IGNyYyA+Pj4gOCBeIHRbKGNyYyBeIGJ1ZltpXSkgJiAyNTVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY3JjIF4gLTE7CiAgICAgIH0KICAgICAgbW9kdWxlMi5leHBvcnRzID0gY3JjMzI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9tZXNzYWdlcy5qcwogIHZhciByZXF1aXJlX21lc3NhZ2VzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gewogICAgICAgIDI6ICJuZWVkIGRpY3Rpb25hcnkiLAogICAgICAgIDE6ICJzdHJlYW0gZW5kIiwKICAgICAgICAwOiAiIiwKICAgICAgICAiLTEiOiAiZmlsZSBlcnJvciIsCiAgICAgICAgIi0yIjogInN0cmVhbSBlcnJvciIsCiAgICAgICAgIi0zIjogImRhdGEgZXJyb3IiLAogICAgICAgICItNCI6ICJpbnN1ZmZpY2llbnQgbWVtb3J5IiwKICAgICAgICAiLTUiOiAiYnVmZmVyIGVycm9yIiwKICAgICAgICAiLTYiOiAiaW5jb21wYXRpYmxlIHZlcnNpb24iCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9kZWZsYXRlLmpzCiAgdmFyIHJlcXVpcmVfZGVmbGF0ZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9kZWZsYXRlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIHRyZWVzID0gcmVxdWlyZV90cmVlcygpOwogICAgICB2YXIgYWRsZXIzMiA9IHJlcXVpcmVfYWRsZXIzMigpOwogICAgICB2YXIgY3JjMzIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzKCk7CiAgICAgIHZhciBaX05PX0ZMVVNIID0gMDsKICAgICAgdmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7CiAgICAgIHZhciBaX0ZVTExfRkxVU0ggPSAzOwogICAgICB2YXIgWl9GSU5JU0ggPSA0OwogICAgICB2YXIgWl9CTE9DSyA9IDU7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX1NUUkVBTV9FUlJPUiA9IC0yOwogICAgICB2YXIgWl9EQVRBX0VSUk9SID0gLTM7CiAgICAgIHZhciBaX0JVRl9FUlJPUiA9IC01OwogICAgICB2YXIgWl9ERUZBVUxUX0NPTVBSRVNTSU9OID0gLTE7CiAgICAgIHZhciBaX0ZJTFRFUkVEID0gMTsKICAgICAgdmFyIFpfSFVGRk1BTl9PTkxZID0gMjsKICAgICAgdmFyIFpfUkxFID0gMzsKICAgICAgdmFyIFpfRklYRUQgPSA0OwogICAgICB2YXIgWl9ERUZBVUxUX1NUUkFURUdZID0gMDsKICAgICAgdmFyIFpfVU5LTk9XTiA9IDI7CiAgICAgIHZhciBaX0RFRkxBVEVEID0gODsKICAgICAgdmFyIE1BWF9NRU1fTEVWRUwgPSA5OwogICAgICB2YXIgTUFYX1dCSVRTID0gMTU7CiAgICAgIHZhciBERUZfTUVNX0xFVkVMID0gODsKICAgICAgdmFyIExFTkdUSF9DT0RFUyA9IDI5OwogICAgICB2YXIgTElURVJBTFMgPSAyNTY7CiAgICAgIHZhciBMX0NPREVTID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTOwogICAgICB2YXIgRF9DT0RFUyA9IDMwOwogICAgICB2YXIgQkxfQ09ERVMgPSAxOTsKICAgICAgdmFyIEhFQVBfU0laRSA9IDIgKiBMX0NPREVTICsgMTsKICAgICAgdmFyIE1BWF9CSVRTID0gMTU7CiAgICAgIHZhciBNSU5fTUFUQ0ggPSAzOwogICAgICB2YXIgTUFYX01BVENIID0gMjU4OwogICAgICB2YXIgTUlOX0xPT0tBSEVBRCA9IE1BWF9NQVRDSCArIE1JTl9NQVRDSCArIDE7CiAgICAgIHZhciBQUkVTRVRfRElDVCA9IDMyOwogICAgICB2YXIgSU5JVF9TVEFURSA9IDQyOwogICAgICB2YXIgRVhUUkFfU1RBVEUgPSA2OTsKICAgICAgdmFyIE5BTUVfU1RBVEUgPSA3MzsKICAgICAgdmFyIENPTU1FTlRfU1RBVEUgPSA5MTsKICAgICAgdmFyIEhDUkNfU1RBVEUgPSAxMDM7CiAgICAgIHZhciBCVVNZX1NUQVRFID0gMTEzOwogICAgICB2YXIgRklOSVNIX1NUQVRFID0gNjY2OwogICAgICB2YXIgQlNfTkVFRF9NT1JFID0gMTsKICAgICAgdmFyIEJTX0JMT0NLX0RPTkUgPSAyOwogICAgICB2YXIgQlNfRklOSVNIX1NUQVJURUQgPSAzOwogICAgICB2YXIgQlNfRklOSVNIX0RPTkUgPSA0OwogICAgICB2YXIgT1NfQ09ERSA9IDM7CiAgICAgIGZ1bmN0aW9uIGVycihzdHJtLCBlcnJvckNvZGUpIHsKICAgICAgICBzdHJtLm1zZyA9IG1zZ1tlcnJvckNvZGVdOwogICAgICAgIHJldHVybiBlcnJvckNvZGU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcmFuayhmKSB7CiAgICAgICAgcmV0dXJuIChmIDw8IDEpIC0gKGYgPiA0ID8gOSA6IDApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHplcm8oYnVmKSB7CiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7CiAgICAgICAgd2hpbGUgKC0tbGVuID49IDApIHsKICAgICAgICAgIGJ1ZltsZW5dID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmx1c2hfcGVuZGluZyhzdHJtKSB7CiAgICAgICAgdmFyIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIHZhciBsZW4gPSBzLnBlbmRpbmc7CiAgICAgICAgaWYgKGxlbiA+IHN0cm0uYXZhaWxfb3V0KSB7CiAgICAgICAgICBsZW4gPSBzdHJtLmF2YWlsX291dDsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nX291dCwgbGVuLCBzdHJtLm5leHRfb3V0KTsKICAgICAgICBzdHJtLm5leHRfb3V0ICs9IGxlbjsKICAgICAgICBzLnBlbmRpbmdfb3V0ICs9IGxlbjsKICAgICAgICBzdHJtLnRvdGFsX291dCArPSBsZW47CiAgICAgICAgc3RybS5hdmFpbF9vdXQgLT0gbGVuOwogICAgICAgIHMucGVuZGluZyAtPSBsZW47CiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gMCkgewogICAgICAgICAgcy5wZW5kaW5nX291dCA9IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZsdXNoX2Jsb2NrX29ubHkocywgbGFzdCkgewogICAgICAgIHRyZWVzLl90cl9mbHVzaF9ibG9jayhzLCBzLmJsb2NrX3N0YXJ0ID49IDAgPyBzLmJsb2NrX3N0YXJ0IDogLTEsIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTsKICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gcy5zdHJzdGFydDsKICAgICAgICBmbHVzaF9wZW5kaW5nKHMuc3RybSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHV0X2J5dGUocywgYikgewogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYjsKICAgICAgfQogICAgICBmdW5jdGlvbiBwdXRTaG9ydE1TQihzLCBiKSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiID4+PiA4ICYgMjU1OwogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiAmIDI1NTsKICAgICAgfQogICAgICBmdW5jdGlvbiByZWFkX2J1ZihzdHJtLCBidWYsIHN0YXJ0LCBzaXplKSB7CiAgICAgICAgdmFyIGxlbiA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgaWYgKGxlbiA+IHNpemUpIHsKICAgICAgICAgIGxlbiA9IHNpemU7CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBzdHJtLmF2YWlsX2luIC09IGxlbjsKICAgICAgICB1dGlscy5hcnJheVNldChidWYsIHN0cm0uaW5wdXQsIHN0cm0ubmV4dF9pbiwgbGVuLCBzdGFydCk7CiAgICAgICAgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMSkgewogICAgICAgICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTsKICAgICAgICB9IGVsc2UgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMikgewogICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiArPSBsZW47CiAgICAgICAgc3RybS50b3RhbF9pbiArPSBsZW47CiAgICAgICAgcmV0dXJuIGxlbjsKICAgICAgfQogICAgICBmdW5jdGlvbiBsb25nZXN0X21hdGNoKHMsIGN1cl9tYXRjaCkgewogICAgICAgIHZhciBjaGFpbl9sZW5ndGggPSBzLm1heF9jaGFpbl9sZW5ndGg7CiAgICAgICAgdmFyIHNjYW4gPSBzLnN0cnN0YXJ0OwogICAgICAgIHZhciBtYXRjaDsKICAgICAgICB2YXIgbGVuOwogICAgICAgIHZhciBiZXN0X2xlbiA9IHMucHJldl9sZW5ndGg7CiAgICAgICAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7CiAgICAgICAgdmFyIGxpbWl0ID0gcy5zdHJzdGFydCA+IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCA/IHMuc3Ryc3RhcnQgLSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSA6IDA7CiAgICAgICAgdmFyIF93aW4gPSBzLndpbmRvdzsKICAgICAgICB2YXIgd21hc2sgPSBzLndfbWFzazsKICAgICAgICB2YXIgcHJldiA9IHMucHJldjsKICAgICAgICB2YXIgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICB2YXIgc2Nhbl9lbmQxID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTsKICAgICAgICB2YXIgc2Nhbl9lbmQgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07CiAgICAgICAgaWYgKHMucHJldl9sZW5ndGggPj0gcy5nb29kX21hdGNoKSB7CiAgICAgICAgICBjaGFpbl9sZW5ndGggPj49IDI7CiAgICAgICAgfQogICAgICAgIGlmIChuaWNlX21hdGNoID4gcy5sb29rYWhlYWQpIHsKICAgICAgICAgIG5pY2VfbWF0Y2ggPSBzLmxvb2thaGVhZDsKICAgICAgICB9CiAgICAgICAgZG8gewogICAgICAgICAgbWF0Y2ggPSBjdXJfbWF0Y2g7CiAgICAgICAgICBpZiAoX3dpblttYXRjaCArIGJlc3RfbGVuXSAhPT0gc2Nhbl9lbmQgfHwgX3dpblttYXRjaCArIGJlc3RfbGVuIC0gMV0gIT09IHNjYW5fZW5kMSB8fCBfd2luW21hdGNoXSAhPT0gX3dpbltzY2FuXSB8fCBfd2luWysrbWF0Y2hdICE9PSBfd2luW3NjYW4gKyAxXSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHNjYW4gKz0gMjsKICAgICAgICAgIG1hdGNoKys7CiAgICAgICAgICBkbyB7CiAgICAgICAgICB9IHdoaWxlIChfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIHNjYW4gPCBzdHJlbmQpOwogICAgICAgICAgbGVuID0gTUFYX01BVENIIC0gKHN0cmVuZCAtIHNjYW4pOwogICAgICAgICAgc2NhbiA9IHN0cmVuZCAtIE1BWF9NQVRDSDsKICAgICAgICAgIGlmIChsZW4gPiBiZXN0X2xlbikgewogICAgICAgICAgICBzLm1hdGNoX3N0YXJ0ID0gY3VyX21hdGNoOwogICAgICAgICAgICBiZXN0X2xlbiA9IGxlbjsKICAgICAgICAgICAgaWYgKGxlbiA+PSBuaWNlX21hdGNoKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2Nhbl9lbmQxID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTsKICAgICAgICAgICAgc2Nhbl9lbmQgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKGN1cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0ICYmIC0tY2hhaW5fbGVuZ3RoICE9PSAwKTsKICAgICAgICBpZiAoYmVzdF9sZW4gPD0gcy5sb29rYWhlYWQpIHsKICAgICAgICAgIHJldHVybiBiZXN0X2xlbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMubG9va2FoZWFkOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHsKICAgICAgICB2YXIgX3dfc2l6ZSA9IHMud19zaXplOwogICAgICAgIHZhciBwLCBuLCBtLCBtb3JlLCBzdHI7CiAgICAgICAgZG8gewogICAgICAgICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7CiAgICAgICAgICBpZiAocy5zdHJzdGFydCA+PSBfd19zaXplICsgKF93X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkgewogICAgICAgICAgICB1dGlscy5hcnJheVNldChzLndpbmRvdywgcy53aW5kb3csIF93X3NpemUsIF93X3NpemUsIDApOwogICAgICAgICAgICBzLm1hdGNoX3N0YXJ0IC09IF93X3NpemU7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgICAgICAgcy5ibG9ja19zdGFydCAtPSBfd19zaXplOwogICAgICAgICAgICBuID0gcy5oYXNoX3NpemU7CiAgICAgICAgICAgIHAgPSBuOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgbSA9IHMuaGVhZFstLXBdOwogICAgICAgICAgICAgIHMuaGVhZFtwXSA9IG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMDsKICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgICAgbiA9IF93X3NpemU7CiAgICAgICAgICAgIHAgPSBuOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgbSA9IHMucHJldlstLXBdOwogICAgICAgICAgICAgIHMucHJldltwXSA9IG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMDsKICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgICAgbW9yZSArPSBfd19zaXplOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpOwogICAgICAgICAgcy5sb29rYWhlYWQgKz0gbjsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0ID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBzdHIgPSBzLnN0cnN0YXJ0IC0gcy5pbnNlcnQ7CiAgICAgICAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdOwogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbc3RyICsgMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIHdoaWxlIChzLmluc2VydCkgewogICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICAgICAgICBzdHIrKzsKICAgICAgICAgICAgICBzLmluc2VydC0tOwogICAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0IDwgTUlOX01BVENIKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgcy5zdHJtLmF2YWlsX2luICE9PSAwKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX3N0b3JlZChzLCBmbHVzaCkgewogICAgICAgIHZhciBtYXhfYmxvY2tfc2l6ZSA9IDY1NTM1OwogICAgICAgIGlmIChtYXhfYmxvY2tfc2l6ZSA+IHMucGVuZGluZ19idWZfc2l6ZSAtIDUpIHsKICAgICAgICAgIG1heF9ibG9ja19zaXplID0gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPD0gMSkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcy5zdHJzdGFydCArPSBzLmxvb2thaGVhZDsKICAgICAgICAgIHMubG9va2FoZWFkID0gMDsKICAgICAgICAgIHZhciBtYXhfc3RhcnQgPSBzLmJsb2NrX3N0YXJ0ICsgbWF4X2Jsb2NrX3NpemU7CiAgICAgICAgICBpZiAocy5zdHJzdGFydCA9PT0gMCB8fCBzLnN0cnN0YXJ0ID49IG1heF9zdGFydCkgewogICAgICAgICAgICBzLmxvb2thaGVhZCA9IHMuc3Ryc3RhcnQgLSBtYXhfc3RhcnQ7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSBtYXhfc3RhcnQ7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCA+PSBzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMuc3Ryc3RhcnQgPiBzLmJsb2NrX3N0YXJ0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9mYXN0KHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGhhc2hfaGVhZDsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2hfaGVhZCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKGhhc2hfaGVhZCAhPT0gMCAmJiBzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkIDw9IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7CiAgICAgICAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gcy5tYXhfbGF6eV9tYXRjaCAmJiBzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aC0tOwogICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICAgICAgfSB3aGlsZSAoLS1zLm1hdGNoX2xlbmd0aCAhPT0gMCk7CiAgICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgICAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzLnN0cnN0YXJ0XTsKICAgICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbcy5zdHJzdGFydCArIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSBzLnN0cnN0YXJ0IDwgTUlOX01BVENIIC0gMSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0ggLSAxOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfc2xvdyhzLCBmbHVzaCkgewogICAgICAgIHZhciBoYXNoX2hlYWQ7CiAgICAgICAgdmFyIGJmbHVzaDsKICAgICAgICB2YXIgbWF4X2luc2VydDsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBoYXNoX2hlYWQgPSAwOwogICAgICAgICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgIH0KICAgICAgICAgIHMucHJldl9sZW5ndGggPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICAgIHMucHJldl9tYXRjaCA9IHMubWF0Y2hfc3RhcnQ7CiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgICBpZiAoaGFzaF9oZWFkICE9PSAwICYmIHMucHJldl9sZW5ndGggPCBzLm1heF9sYXp5X21hdGNoICYmIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gNSAmJiAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCBzLm1hdGNoX2xlbmd0aCA9PT0gTUlOX01BVENIICYmIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0ID4gNDA5NikpIHsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLm1hdGNoX2xlbmd0aCA8PSBzLnByZXZfbGVuZ3RoKSB7CiAgICAgICAgICAgIG1heF9pbnNlcnQgPSBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQgLSBNSU5fTUFUQ0g7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCk7CiAgICAgICAgICAgIHMubG9va2FoZWFkIC09IHMucHJldl9sZW5ndGggLSAxOwogICAgICAgICAgICBzLnByZXZfbGVuZ3RoIC09IDI7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBpZiAoKytzLnN0cnN0YXJ0IDw9IG1heF9pbnNlcnQpIHsKICAgICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICgtLXMucHJldl9sZW5ndGggIT09IDApOwogICAgICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pOwogICAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMTsKICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pOwogICAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9ybGUocywgZmx1c2gpIHsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIHZhciBwcmV2OwogICAgICAgIHZhciBzY2FuLCBzdHJlbmQ7CiAgICAgICAgdmFyIF93aW4gPSBzLndpbmRvdzsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHsKICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIICYmIHMuc3Ryc3RhcnQgPiAwKSB7CiAgICAgICAgICAgIHNjYW4gPSBzLnN0cnN0YXJ0IC0gMTsKICAgICAgICAgICAgcHJldiA9IF93aW5bc2Nhbl07CiAgICAgICAgICAgIGlmIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSkgewogICAgICAgICAgICAgIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CiAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIH0gd2hpbGUgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAgICAgICAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID4gcy5sb29rYWhlYWQpIHsKICAgICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5sb29rYWhlYWQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7CiAgICAgICAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwogICAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgewogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICBzLmxvb2thaGVhZC0tOwogICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgaWYgKGJmbHVzaCkgewogICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5sYXN0X2xpdCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKICAgICAgfQogICAgICBmdW5jdGlvbiBDb25maWcoZ29vZF9sZW5ndGgsIG1heF9sYXp5LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluLCBmdW5jKSB7CiAgICAgICAgdGhpcy5nb29kX2xlbmd0aCA9IGdvb2RfbGVuZ3RoOwogICAgICAgIHRoaXMubWF4X2xhenkgPSBtYXhfbGF6eTsKICAgICAgICB0aGlzLm5pY2VfbGVuZ3RoID0gbmljZV9sZW5ndGg7CiAgICAgICAgdGhpcy5tYXhfY2hhaW4gPSBtYXhfY2hhaW47CiAgICAgICAgdGhpcy5mdW5jID0gZnVuYzsKICAgICAgfQogICAgICB2YXIgY29uZmlndXJhdGlvbl90YWJsZTsKICAgICAgY29uZmlndXJhdGlvbl90YWJsZSA9IFsKICAgICAgICBuZXcgQ29uZmlnKDAsIDAsIDAsIDAsIGRlZmxhdGVfc3RvcmVkKSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDQsIDgsIDQsIGRlZmxhdGVfZmFzdCksCiAgICAgICAgbmV3IENvbmZpZyg0LCA1LCAxNiwgOCwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDYsIDMyLCAzMiwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDQsIDE2LCAxNiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDE2LCAzMiwgMzIsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZyg4LCAxNiwgMTI4LCAxMjgsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZyg4LCAzMiwgMTI4LCAyNTYsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZygzMiwgMTI4LCAyNTgsIDEwMjQsIGRlZmxhdGVfc2xvdyksCiAgICAgICAgbmV3IENvbmZpZygzMiwgMjU4LCAyNTgsIDQwOTYsIGRlZmxhdGVfc2xvdykKICAgICAgXTsKICAgICAgZnVuY3Rpb24gbG1faW5pdChzKSB7CiAgICAgICAgcy53aW5kb3dfc2l6ZSA9IDIgKiBzLndfc2l6ZTsKICAgICAgICB6ZXJvKHMuaGVhZCk7CiAgICAgICAgcy5tYXhfbGF6eV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2xhenk7CiAgICAgICAgcy5nb29kX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5nb29kX2xlbmd0aDsKICAgICAgICBzLm5pY2VfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm5pY2VfbGVuZ3RoOwogICAgICAgIHMubWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2NoYWluOwogICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSAwOwogICAgICAgIHMubG9va2FoZWFkID0gMDsKICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgcy5pbnNfaCA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gRGVmbGF0ZVN0YXRlKCkgewogICAgICAgIHRoaXMuc3RybSA9IG51bGw7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAwOwogICAgICAgIHRoaXMucGVuZGluZ19idWYgPSBudWxsOwogICAgICAgIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nX291dCA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nID0gMDsKICAgICAgICB0aGlzLndyYXAgPSAwOwogICAgICAgIHRoaXMuZ3poZWFkID0gbnVsbDsKICAgICAgICB0aGlzLmd6aW5kZXggPSAwOwogICAgICAgIHRoaXMubWV0aG9kID0gWl9ERUZMQVRFRDsKICAgICAgICB0aGlzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICB0aGlzLndfc2l6ZSA9IDA7CiAgICAgICAgdGhpcy53X2JpdHMgPSAwOwogICAgICAgIHRoaXMud19tYXNrID0gMDsKICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICAgICAgdGhpcy53aW5kb3dfc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5wcmV2ID0gbnVsbDsKICAgICAgICB0aGlzLmhlYWQgPSBudWxsOwogICAgICAgIHRoaXMuaW5zX2ggPSAwOwogICAgICAgIHRoaXMuaGFzaF9zaXplID0gMDsKICAgICAgICB0aGlzLmhhc2hfYml0cyA9IDA7CiAgICAgICAgdGhpcy5oYXNoX21hc2sgPSAwOwogICAgICAgIHRoaXMuaGFzaF9zaGlmdCA9IDA7CiAgICAgICAgdGhpcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgIHRoaXMucHJldl9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIHRoaXMuc3Ryc3RhcnQgPSAwOwogICAgICAgIHRoaXMubWF0Y2hfc3RhcnQgPSAwOwogICAgICAgIHRoaXMubG9va2FoZWFkID0gMDsKICAgICAgICB0aGlzLnByZXZfbGVuZ3RoID0gMDsKICAgICAgICB0aGlzLm1heF9jaGFpbl9sZW5ndGggPSAwOwogICAgICAgIHRoaXMubWF4X2xhenlfbWF0Y2ggPSAwOwogICAgICAgIHRoaXMubGV2ZWwgPSAwOwogICAgICAgIHRoaXMuc3RyYXRlZ3kgPSAwOwogICAgICAgIHRoaXMuZ29vZF9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5uaWNlX21hdGNoID0gMDsKICAgICAgICB0aGlzLmR5bl9sdHJlZSA9IG5ldyB1dGlscy5CdWYxNihIRUFQX1NJWkUgKiAyKTsKICAgICAgICB0aGlzLmR5bl9kdHJlZSA9IG5ldyB1dGlscy5CdWYxNigoMiAqIERfQ09ERVMgKyAxKSAqIDIpOwogICAgICAgIHRoaXMuYmxfdHJlZSA9IG5ldyB1dGlscy5CdWYxNigoMiAqIEJMX0NPREVTICsgMSkgKiAyKTsKICAgICAgICB6ZXJvKHRoaXMuZHluX2x0cmVlKTsKICAgICAgICB6ZXJvKHRoaXMuZHluX2R0cmVlKTsKICAgICAgICB6ZXJvKHRoaXMuYmxfdHJlZSk7CiAgICAgICAgdGhpcy5sX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuZF9kZXNjID0gbnVsbDsKICAgICAgICB0aGlzLmJsX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuYmxfY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYX0JJVFMgKyAxKTsKICAgICAgICB0aGlzLmhlYXAgPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsKICAgICAgICB6ZXJvKHRoaXMuaGVhcCk7CiAgICAgICAgdGhpcy5oZWFwX2xlbiA9IDA7CiAgICAgICAgdGhpcy5oZWFwX21heCA9IDA7CiAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOwogICAgICAgIHplcm8odGhpcy5kZXB0aCk7CiAgICAgICAgdGhpcy5sX2J1ZiA9IDA7CiAgICAgICAgdGhpcy5saXRfYnVmc2l6ZSA9IDA7CiAgICAgICAgdGhpcy5sYXN0X2xpdCA9IDA7CiAgICAgICAgdGhpcy5kX2J1ZiA9IDA7CiAgICAgICAgdGhpcy5vcHRfbGVuID0gMDsKICAgICAgICB0aGlzLnN0YXRpY19sZW4gPSAwOwogICAgICAgIHRoaXMubWF0Y2hlcyA9IDA7CiAgICAgICAgdGhpcy5pbnNlcnQgPSAwOwogICAgICAgIHRoaXMuYmlfYnVmID0gMDsKICAgICAgICB0aGlzLmJpX3ZhbGlkID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pIHsKICAgICAgICB2YXIgczsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSAwOwogICAgICAgIHN0cm0uZGF0YV90eXBlID0gWl9VTktOT1dOOwogICAgICAgIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIHMucGVuZGluZyA9IDA7CiAgICAgICAgcy5wZW5kaW5nX291dCA9IDA7CiAgICAgICAgaWYgKHMud3JhcCA8IDApIHsKICAgICAgICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAgICAgfQogICAgICAgIHMuc3RhdHVzID0gcy53cmFwID8gSU5JVF9TVEFURSA6IEJVU1lfU1RBVEU7CiAgICAgICAgc3RybS5hZGxlciA9IHMud3JhcCA9PT0gMiA/IDAgOiAxOwogICAgICAgIHMubGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7CiAgICAgICAgdHJlZXMuX3RyX2luaXQocyk7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVJlc2V0KHN0cm0pIHsKICAgICAgICB2YXIgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTsKICAgICAgICBpZiAocmV0ID09PSBaX09LKSB7CiAgICAgICAgICBsbV9pbml0KHN0cm0uc3RhdGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTZXRIZWFkZXIoc3RybSwgaGVhZCkgewogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RybS5zdGF0ZS53cmFwICE9PSAyKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0cm0uc3RhdGUuZ3poZWFkID0gaGVhZDsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSB7CiAgICAgICAgaWYgKCFzdHJtKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHZhciB3cmFwID0gMTsKICAgICAgICBpZiAobGV2ZWwgPT09IFpfREVGQVVMVF9DT01QUkVTU0lPTikgewogICAgICAgICAgbGV2ZWwgPSA2OwogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgICAgICAgIHdyYXAgPSAwOwogICAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICB3cmFwID0gMjsKICAgICAgICAgIHdpbmRvd0JpdHMgLT0gMTY7CiAgICAgICAgfQogICAgICAgIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPT0gWl9ERUZMQVRFRCB8fCB3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUgfHwgbGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fCBzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0ZJWEVEKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHdpbmRvd0JpdHMgPT09IDgpIHsKICAgICAgICAgIHdpbmRvd0JpdHMgPSA5OwogICAgICAgIH0KICAgICAgICB2YXIgcyA9IG5ldyBEZWZsYXRlU3RhdGUoKTsKICAgICAgICBzdHJtLnN0YXRlID0gczsKICAgICAgICBzLnN0cm0gPSBzdHJtOwogICAgICAgIHMud3JhcCA9IHdyYXA7CiAgICAgICAgcy5nemhlYWQgPSBudWxsOwogICAgICAgIHMud19iaXRzID0gd2luZG93Qml0czsKICAgICAgICBzLndfc2l6ZSA9IDEgPDwgcy53X2JpdHM7CiAgICAgICAgcy53X21hc2sgPSBzLndfc2l6ZSAtIDE7CiAgICAgICAgcy5oYXNoX2JpdHMgPSBtZW1MZXZlbCArIDc7CiAgICAgICAgcy5oYXNoX3NpemUgPSAxIDw8IHMuaGFzaF9iaXRzOwogICAgICAgIHMuaGFzaF9tYXNrID0gcy5oYXNoX3NpemUgLSAxOwogICAgICAgIHMuaGFzaF9zaGlmdCA9IH5+KChzLmhhc2hfYml0cyArIE1JTl9NQVRDSCAtIDEpIC8gTUlOX01BVENIKTsKICAgICAgICBzLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplICogMik7CiAgICAgICAgcy5oZWFkID0gbmV3IHV0aWxzLkJ1ZjE2KHMuaGFzaF9zaXplKTsKICAgICAgICBzLnByZXYgPSBuZXcgdXRpbHMuQnVmMTYocy53X3NpemUpOwogICAgICAgIHMubGl0X2J1ZnNpemUgPSAxIDw8IG1lbUxldmVsICsgNjsKICAgICAgICBzLnBlbmRpbmdfYnVmX3NpemUgPSBzLmxpdF9idWZzaXplICogNDsKICAgICAgICBzLnBlbmRpbmdfYnVmID0gbmV3IHV0aWxzLkJ1Zjgocy5wZW5kaW5nX2J1Zl9zaXplKTsKICAgICAgICBzLmRfYnVmID0gMSAqIHMubGl0X2J1ZnNpemU7CiAgICAgICAgcy5sX2J1ZiA9ICgxICsgMikgKiBzLmxpdF9idWZzaXplOwogICAgICAgIHMubGV2ZWwgPSBsZXZlbDsKICAgICAgICBzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CiAgICAgICAgcy5tZXRob2QgPSBtZXRob2Q7CiAgICAgICAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgewogICAgICAgIHJldHVybiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgICAgICAgdmFyIG9sZF9mbHVzaCwgczsKICAgICAgICB2YXIgYmVnLCB2YWw7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIHx8IGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHsKICAgICAgICAgIHJldHVybiBzdHJtID8gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKSA6IFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoIXN0cm0ub3V0cHV0IHx8ICFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDAgfHwgcy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBmbHVzaCAhPT0gWl9GSU5JU0gpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgc3RybS5hdmFpbF9vdXQgPT09IDAgPyBaX0JVRl9FUlJPUiA6IFpfU1RSRUFNX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgcy5zdHJtID0gc3RybTsKICAgICAgICBvbGRfZmx1c2ggPSBzLmxhc3RfZmx1c2g7CiAgICAgICAgcy5sYXN0X2ZsdXNoID0gZmx1c2g7CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBJTklUX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy53cmFwID09PSAyKSB7CiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSAwOwogICAgICAgICAgICBwdXRfYnl0ZShzLCAzMSk7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDEzOSk7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDgpOwogICAgICAgICAgICBpZiAoIXMuZ3poZWFkKSB7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOiBzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID8gNCA6IDApOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpOwogICAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGV4dCA/IDEgOiAwKSArIChzLmd6aGVhZC5oY3JjID8gMiA6IDApICsgKCFzLmd6aGVhZC5leHRyYSA/IDAgOiA0KSArICghcy5nemhlYWQubmFtZSA/IDAgOiA4KSArICghcy5nemhlYWQuY29tbWVudCA/IDAgOiAxNikpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLnRpbWUgJiAyNTUpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLnRpbWUgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiAxNiAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiAyNCAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOiBzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID8gNCA6IDApOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLm9zICYgMjU1KTsKICAgICAgICAgICAgICBpZiAocy5nemhlYWQuZXh0cmEgJiYgcy5nemhlYWQuZXh0cmEubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggJiAyNTUpOwogICAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDggJiAyNTUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZywgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBFWFRSQV9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IFpfREVGTEFURUQgKyAocy53X2JpdHMgLSA4IDw8IDQpIDw8IDg7CiAgICAgICAgICAgIHZhciBsZXZlbF9mbGFncyA9IC0xOwogICAgICAgICAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxldmVsID09PSA2KSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIgfD0gbGV2ZWxfZmxhZ3MgPDwgNjsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVhZGVyICs9IDMxIC0gaGVhZGVyICUgMzE7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKICAgICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7CiAgICAgICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDY1NTM1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJtLmFkbGVyID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhKSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgd2hpbGUgKHMuZ3ppbmRleCA8IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiA2NTUzNSkpIHsKICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmFbcy5nemluZGV4XSAmIDI1NSk7CiAgICAgICAgICAgICAgcy5nemluZGV4Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5nemluZGV4ID09PSBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgICAgICBzLmd6aW5kZXggPSAwOwogICAgICAgICAgICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLmd6aGVhZC5uYW1lKSB7CiAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICAgIHZhbCA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQubmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAyNTU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CiAgICAgICAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7CiAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkgewogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gQ09NTUVOVF9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmNvbW1lbnQpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5jb21tZW50Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFsID0gcy5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDI1NTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsID09PSAwKSB7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gSENSQ19TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMpIHsKICAgICAgICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgKyAyIDw9IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAyNTUpOwogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnBlbmRpbmcgIT09IDApIHsKICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIHJldHVybiBaX09LOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiYgZmx1c2ggIT09IFpfRklOSVNIKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8IGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHZhciBic3RhdGUgPSBzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSA/IGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgOiBzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCk7CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9ET05FKSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gRklOSVNIX1NUQVRFOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJzdGF0ZSA9PT0gQlNfTkVFRF9NT1JFIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQpIHsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19CTE9DS19ET05FKSB7CiAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9QQVJUSUFMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZsdXNoICE9PSBaX0JMT0NLKSB7CiAgICAgICAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZVTExfRkxVU0gpIHsKICAgICAgICAgICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChzLndyYXAgPD0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VORDsKICAgICAgICB9CiAgICAgICAgaWYgKHMud3JhcCA9PT0gMikgewogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDggJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciA+PiAxNiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDI0ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiA4ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gPj4gMTYgJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiAyNCAmIDI1NSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiA2NTUzNSk7CiAgICAgICAgfQogICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgaWYgKHMud3JhcCA+IDApIHsKICAgICAgICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnBlbmRpbmcgIT09IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVFbmQoc3RybSkgewogICAgICAgIHZhciBzdGF0dXM7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzOwogICAgICAgIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiYgc3RhdHVzICE9PSBFWFRSQV9TVEFURSAmJiBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiYgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmIHN0YXR1cyAhPT0gSENSQ19TVEFURSAmJiBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiYgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzdHJtLnN0YXRlID0gbnVsbDsKICAgICAgICByZXR1cm4gc3RhdHVzID09PSBCVVNZX1NUQVRFID8gZXJyKHN0cm0sIFpfREFUQV9FUlJPUikgOiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICAgICAgICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwogICAgICAgIHZhciBzOwogICAgICAgIHZhciBzdHIsIG47CiAgICAgICAgdmFyIHdyYXA7CiAgICAgICAgdmFyIGF2YWlsOwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBpbnB1dDsKICAgICAgICB2YXIgdG1wRGljdDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgd3JhcCA9IHMud3JhcDsKICAgICAgICBpZiAod3JhcCA9PT0gMiB8fCB3cmFwID09PSAxICYmIHMuc3RhdHVzICE9PSBJTklUX1NUQVRFIHx8IHMubG9va2FoZWFkKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmICh3cmFwID09PSAxKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTsKICAgICAgICB9CiAgICAgICAgcy53cmFwID0gMDsKICAgICAgICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkgewogICAgICAgICAgaWYgKHdyYXAgPT09IDApIHsKICAgICAgICAgICAgemVybyhzLmhlYWQpOwogICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHRtcERpY3QgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSk7CiAgICAgICAgICB1dGlscy5hcnJheVNldCh0bXBEaWN0LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoIC0gcy53X3NpemUsIHMud19zaXplLCAwKTsKICAgICAgICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0OwogICAgICAgICAgZGljdExlbmd0aCA9IHMud19zaXplOwogICAgICAgIH0KICAgICAgICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgbmV4dCA9IHN0cm0ubmV4dF9pbjsKICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CiAgICAgICAgc3RybS5uZXh0X2luID0gMDsKICAgICAgICBzdHJtLmlucHV0ID0gZGljdGlvbmFyeTsKICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICB3aGlsZSAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICBzdHIgPSBzLnN0cnN0YXJ0OwogICAgICAgICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpOwogICAgICAgICAgZG8gewogICAgICAgICAgICBzLmluc19oID0gKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0IF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjsKICAgICAgICAgICAgc3RyKys7CiAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgcy5zdHJzdGFydCA9IHN0cjsKICAgICAgICAgIHMubG9va2FoZWFkID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgIH0KICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0OwogICAgICAgIHMuaW5zZXJ0ID0gcy5sb29rYWhlYWQ7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgc3RybS5pbnB1dCA9IGlucHV0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBhdmFpbDsKICAgICAgICBzLndyYXAgPSB3cmFwOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVJbml0ID0gZGVmbGF0ZUluaXQ7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVJbml0MiA9IGRlZmxhdGVJbml0MjsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVJlc2V0ID0gZGVmbGF0ZVJlc2V0OwogICAgICBleHBvcnRzMi5kZWZsYXRlUmVzZXRLZWVwID0gZGVmbGF0ZVJlc2V0S2VlcDsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVNldEhlYWRlciA9IGRlZmxhdGVTZXRIZWFkZXI7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGUgPSBkZWZsYXRlOwogICAgICBleHBvcnRzMi5kZWZsYXRlRW5kID0gZGVmbGF0ZUVuZDsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVNldERpY3Rpb25hcnkgPSBkZWZsYXRlU2V0RGljdGlvbmFyeTsKICAgICAgZXhwb3J0czIuZGVmbGF0ZUluZm8gPSAicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvc3RyaW5ncy5qcwogIHZhciByZXF1aXJlX3N0cmluZ3MgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL3N0cmluZ3MuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgU1RSX0FQUExZX09LID0gdHJ1ZTsKICAgICAgdmFyIFNUUl9BUFBMWV9VSUFfT0sgPSB0cnVlOwogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKTsKICAgICAgfSBjYXRjaCAoX18pIHsKICAgICAgICBTVFJfQVBQTFlfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOwogICAgICB9IGNhdGNoIChfXykgewogICAgICAgIFNUUl9BUFBMWV9VSUFfT0sgPSBmYWxzZTsKICAgICAgfQogICAgICB2YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpOwogICAgICBmb3IgKHEgPSAwOyBxIDwgMjU2OyBxKyspIHsKICAgICAgICBfdXRmOGxlbltxXSA9IHEgPj0gMjUyID8gNiA6IHEgPj0gMjQ4ID8gNSA6IHEgPj0gMjQwID8gNCA6IHEgPj0gMjI0ID8gMyA6IHEgPj0gMTkyID8gMiA6IDE7CiAgICAgIH0KICAgICAgdmFyIHE7CiAgICAgIF91dGY4bGVuWzI1NF0gPSBfdXRmOGxlblsyNTRdID0gMTsKICAgICAgZXhwb3J0czIuc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHZhciBidWYsIGMsIGMyLCBtX3BvcywgaSwgc3RyX2xlbiA9IHN0ci5sZW5ndGgsIGJ1Zl9sZW4gPSAwOwogICAgICAgIGZvciAobV9wb3MgPSAwOyBtX3BvcyA8IHN0cl9sZW47IG1fcG9zKyspIHsKICAgICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChtX3Bvcyk7CiAgICAgICAgICBpZiAoKGMgJiA2NDUxMikgPT09IDU1Mjk2ICYmIG1fcG9zICsgMSA8IHN0cl9sZW4pIHsKICAgICAgICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpOwogICAgICAgICAgICBpZiAoKGMyICYgNjQ1MTIpID09PSA1NjMyMCkgewogICAgICAgICAgICAgIGMgPSA2NTUzNiArIChjIC0gNTUyOTYgPDwgMTApICsgKGMyIC0gNTYzMjApOwogICAgICAgICAgICAgIG1fcG9zKys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJ1Zl9sZW4gKz0gYyA8IDEyOCA/IDEgOiBjIDwgMjA0OCA/IDIgOiBjIDwgNjU1MzYgPyAzIDogNDsKICAgICAgICB9CiAgICAgICAgYnVmID0gbmV3IHV0aWxzLkJ1ZjgoYnVmX2xlbik7CiAgICAgICAgZm9yIChpID0gMCwgbV9wb3MgPSAwOyBpIDwgYnVmX2xlbjsgbV9wb3MrKykgewogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICAgIGlmICgoYyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgbV9wb3MgKyAxIDwgc3RyX2xlbikgewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiA2NDUxMikgPT09IDU2MzIwKSB7CiAgICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgLSA1NTI5NiA8PCAxMCkgKyAoYzIgLSA1NjMyMCk7CiAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGMgPCAxMjgpIHsKICAgICAgICAgICAgYnVmW2krK10gPSBjOwogICAgICAgICAgfSBlbHNlIGlmIChjIDwgMjA0OCkgewogICAgICAgICAgICBidWZbaSsrXSA9IDE5MiB8IGMgPj4+IDY7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyAmIDYzOwogICAgICAgICAgfSBlbHNlIGlmIChjIDwgNjU1MzYpIHsKICAgICAgICAgICAgYnVmW2krK10gPSAyMjQgfCBjID4+PiAxMjsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjID4+PiA2ICYgNjM7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyAmIDYzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVmW2krK10gPSAyNDAgfCBjID4+PiAxODsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjID4+PiAxMiAmIDYzOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDYgJiA2MzsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJ1ZjJiaW5zdHJpbmcoYnVmLCBsZW4pIHsKICAgICAgICBpZiAobGVuIDwgNjU1MzQpIHsKICAgICAgICAgIGlmIChidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX1VJQV9PSyB8fCAhYnVmLnN1YmFycmF5ICYmIFNUUl9BUFBMWV9PSykgewogICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB1dGlscy5zaHJpbmtCdWYoYnVmLCBsZW4pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgZXhwb3J0czIuYnVmMmJpbnN0cmluZyA9IGZ1bmN0aW9uKGJ1ZikgewogICAgICAgIHJldHVybiBidWYyYmluc3RyaW5nKGJ1ZiwgYnVmLmxlbmd0aCk7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmJpbnN0cmluZzJidWYgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICB2YXIgYnVmID0gbmV3IHV0aWxzLkJ1Zjgoc3RyLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgYnVmW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmJ1ZjJzdHJpbmcgPSBmdW5jdGlvbihidWYsIG1heCkgewogICAgICAgIHZhciBpLCBvdXQsIGMsIGNfbGVuOwogICAgICAgIHZhciBsZW4gPSBtYXggfHwgYnVmLmxlbmd0aDsKICAgICAgICB2YXIgdXRmMTZidWYgPSBuZXcgQXJyYXkobGVuICogMik7CiAgICAgICAgZm9yIChvdXQgPSAwLCBpID0gMDsgaSA8IGxlbjsgKSB7CiAgICAgICAgICBjID0gYnVmW2krK107CiAgICAgICAgICBpZiAoYyA8IDEyOCkgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSBjOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNfbGVuID0gX3V0ZjhsZW5bY107CiAgICAgICAgICBpZiAoY19sZW4gPiA0KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDY1NTMzOwogICAgICAgICAgICBpICs9IGNfbGVuIC0gMTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjICY9IGNfbGVuID09PSAyID8gMzEgOiBjX2xlbiA9PT0gMyA/IDE1IDogNzsKICAgICAgICAgIHdoaWxlIChjX2xlbiA+IDEgJiYgaSA8IGxlbikgewogICAgICAgICAgICBjID0gYyA8PCA2IHwgYnVmW2krK10gJiA2MzsKICAgICAgICAgICAgY19sZW4tLTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjX2xlbiA+IDEpIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNjU1MzM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGMgPCA2NTUzNikgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSBjOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYyAtPSA2NTUzNjsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNTUyOTYgfCBjID4+IDEwICYgMTAyMzsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNTYzMjAgfCBjICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjJiaW5zdHJpbmcodXRmMTZidWYsIG91dCk7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLnV0Zjhib3JkZXIgPSBmdW5jdGlvbihidWYsIG1heCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgbWF4ID0gbWF4IHx8IGJ1Zi5sZW5ndGg7CiAgICAgICAgaWYgKG1heCA+IGJ1Zi5sZW5ndGgpIHsKICAgICAgICAgIG1heCA9IGJ1Zi5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHBvcyA9IG1heCAtIDE7CiAgICAgICAgd2hpbGUgKHBvcyA+PSAwICYmIChidWZbcG9zXSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgcG9zLS07CiAgICAgICAgfQogICAgICAgIGlmIChwb3MgPCAwKSB7CiAgICAgICAgICByZXR1cm4gbWF4OwogICAgICAgIH0KICAgICAgICBpZiAocG9zID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbWF4OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcG9zICsgX3V0ZjhsZW5bYnVmW3Bvc11dID4gbWF4ID8gcG9zIDogbWF4OwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvenN0cmVhbS5qcwogIHZhciByZXF1aXJlX3pzdHJlYW0gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvenN0cmVhbS5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIFpTdHJlYW0oKSB7CiAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0X2luID0gMDsKICAgICAgICB0aGlzLmF2YWlsX2luID0gMDsKICAgICAgICB0aGlzLnRvdGFsX2luID0gMDsKICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0X291dCA9IDA7CiAgICAgICAgdGhpcy5hdmFpbF9vdXQgPSAwOwogICAgICAgIHRoaXMudG90YWxfb3V0ID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuc3RhdGUgPSBudWxsOwogICAgICAgIHRoaXMuZGF0YV90eXBlID0gMjsKICAgICAgICB0aGlzLmFkbGVyID0gMDsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBaU3RyZWFtOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL2RlZmxhdGUuanMKICB2YXIgcmVxdWlyZV9kZWZsYXRlMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvZGVmbGF0ZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB6bGliX2RlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUoKTsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIHN0cmluZ3MgPSByZXF1aXJlX3N0cmluZ3MoKTsKICAgICAgdmFyIG1zZyA9IHJlcXVpcmVfbWVzc2FnZXMoKTsKICAgICAgdmFyIFpTdHJlYW0gPSByZXF1aXJlX3pzdHJlYW0oKTsKICAgICAgdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgICAgdmFyIFpfTk9fRkxVU0ggPSAwOwogICAgICB2YXIgWl9GSU5JU0ggPSA0OwogICAgICB2YXIgWl9PSyA9IDA7CiAgICAgIHZhciBaX1NUUkVBTV9FTkQgPSAxOwogICAgICB2YXIgWl9TWU5DX0ZMVVNIMiA9IDI7CiAgICAgIHZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTsKICAgICAgdmFyIFpfREVGQVVMVF9TVFJBVEVHWSA9IDA7CiAgICAgIHZhciBaX0RFRkxBVEVEID0gODsKICAgICAgZnVuY3Rpb24gRGVmbGF0ZShvcHRpb25zKSB7CiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGUpKQogICAgICAgICAgcmV0dXJuIG5ldyBEZWZsYXRlKG9wdGlvbnMpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHV0aWxzLmFzc2lnbih7CiAgICAgICAgICBsZXZlbDogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAogICAgICAgICAgbWV0aG9kOiBaX0RFRkxBVEVELAogICAgICAgICAgY2h1bmtTaXplOiAxNjM4NCwKICAgICAgICAgIHdpbmRvd0JpdHM6IDE1LAogICAgICAgICAgbWVtTGV2ZWw6IDgsCiAgICAgICAgICBzdHJhdGVneTogWl9ERUZBVUxUX1NUUkFURUdZLAogICAgICAgICAgdG86ICIiCiAgICAgICAgfSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgdmFyIG9wdCA9IHRoaXMub3B0aW9uczsKICAgICAgICBpZiAob3B0LnJhdyAmJiBvcHQud2luZG93Qml0cyA+IDApIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSBpZiAob3B0Lmd6aXAgJiYgb3B0LndpbmRvd0JpdHMgPiAwICYmIG9wdC53aW5kb3dCaXRzIDwgMTYpIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzICs9IDE2OwogICAgICAgIH0KICAgICAgICB0aGlzLmVyciA9IDA7CiAgICAgICAgdGhpcy5tc2cgPSAiIjsKICAgICAgICB0aGlzLmVuZGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLnN0cm0gPSBuZXcgWlN0cmVhbSgpOwogICAgICAgIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgIHZhciBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSwgb3B0LmxldmVsLCBvcHQubWV0aG9kLCBvcHQud2luZG93Qml0cywgb3B0Lm1lbUxldmVsLCBvcHQuc3RyYXRlZ3kpOwogICAgICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQuaGVhZGVyKSB7CiAgICAgICAgICB6bGliX2RlZmxhdGUuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sIG9wdC5oZWFkZXIpOwogICAgICAgIH0KICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHsKICAgICAgICAgIHZhciBkaWN0OwogICAgICAgICAgaWYgKHR5cGVvZiBvcHQuZGljdGlvbmFyeSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGljdCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwob3B0LmRpY3Rpb25hcnkpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICAgIGRpY3QgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkaWN0ID0gb3B0LmRpY3Rpb25hcnk7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBkaWN0KTsKICAgICAgICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX2RpY3Rfc2V0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIG1vZGUpIHsKICAgICAgICB2YXIgc3RybSA9IHRoaXMuc3RybTsKICAgICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZTsKICAgICAgICB2YXIgc3RhdHVzLCBfbW9kZTsKICAgICAgICBpZiAodGhpcy5lbmRlZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBfbW9kZSA9IG1vZGUgPT09IH5+bW9kZSA/IG1vZGUgOiBtb2RlID09PSB0cnVlID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIOwogICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLnN0cmluZzJidWYoZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKGRhdGEpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBkYXRhOwogICAgICAgIH0KICAgICAgICBzdHJtLm5leHRfaW4gPSAwOwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpOwogICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gMDsKICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZShzdHJtLCBfbW9kZSk7CiAgICAgICAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7CiAgICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCB8fCBzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gWl9GSU5JU0ggfHwgX21vZGUgPT09IFpfU1lOQ19GTFVTSDIpKSB7CiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgdGhpcy5vbkRhdGEoc3RyaW5ncy5idWYyYmluc3RyaW5nKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLm9uRGF0YSh1dGlscy5zaHJpbmtCdWYoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChzdHJtLmF2YWlsX2luID4gMCB8fCBzdHJtLmF2YWlsX291dCA9PT0gMCkgJiYgc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQpOwogICAgICAgIGlmIChfbW9kZSA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk7CiAgICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBzdGF0dXMgPT09IFpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChfbW9kZSA9PT0gWl9TWU5DX0ZMVVNIMikgewogICAgICAgICAgdGhpcy5vbkVuZChaX09LKTsKICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gMDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfTsKICAgICAgRGVmbGF0ZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmspIHsKICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTsKICAgICAgfTsKICAgICAgRGVmbGF0ZS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbihzdGF0dXMpIHsKICAgICAgICBpZiAoc3RhdHVzID09PSBaX09LKSB7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oIiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTsKICAgICAgICB0aGlzLmVyciA9IHN0YXR1czsKICAgICAgICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgZGVmbGF0b3IgPSBuZXcgRGVmbGF0ZShvcHRpb25zKTsKICAgICAgICBkZWZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTsKICAgICAgICBpZiAoZGVmbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBkZWZsYXRvci5tc2cgfHwgbXNnW2RlZmxhdG9yLmVycl07CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWZsYXRvci5yZXN1bHQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVJhdyhpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZ3ppcChpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMuZ3ppcCA9IHRydWU7CiAgICAgICAgcmV0dXJuIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLkRlZmxhdGUgPSBEZWZsYXRlOwogICAgICBleHBvcnRzMi5kZWZsYXRlID0gZGVmbGF0ZTsKICAgICAgZXhwb3J0czIuZGVmbGF0ZVJhdyA9IGRlZmxhdGVSYXc7CiAgICAgIGV4cG9ydHMyLmd6aXAgPSBnemlwOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mZmFzdC5qcwogIHZhciByZXF1aXJlX2luZmZhc3QgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mZmFzdC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBCQUQgPSAzMDsKICAgICAgdmFyIFRZUEUgPSAxMjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBfaW47CiAgICAgICAgdmFyIGxhc3Q7CiAgICAgICAgdmFyIF9vdXQ7CiAgICAgICAgdmFyIGJlZzsKICAgICAgICB2YXIgZW5kOwogICAgICAgIHZhciBkbWF4OwogICAgICAgIHZhciB3c2l6ZTsKICAgICAgICB2YXIgd2hhdmU7CiAgICAgICAgdmFyIHduZXh0OwogICAgICAgIHZhciBzX3dpbmRvdzsKICAgICAgICB2YXIgaG9sZDsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgbGNvZGU7CiAgICAgICAgdmFyIGRjb2RlOwogICAgICAgIHZhciBsbWFzazsKICAgICAgICB2YXIgZG1hc2s7CiAgICAgICAgdmFyIGhlcmU7CiAgICAgICAgdmFyIG9wOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIGRpc3Q7CiAgICAgICAgdmFyIGZyb207CiAgICAgICAgdmFyIGZyb21fc291cmNlOwogICAgICAgIHZhciBpbnB1dCwgb3V0cHV0OwogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBfaW4gPSBzdHJtLm5leHRfaW47CiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0OwogICAgICAgIGxhc3QgPSBfaW4gKyAoc3RybS5hdmFpbF9pbiAtIDUpOwogICAgICAgIF9vdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgIGJlZyA9IF9vdXQgLSAoc3RhcnQgLSBzdHJtLmF2YWlsX291dCk7CiAgICAgICAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7CiAgICAgICAgZG1heCA9IHN0YXRlLmRtYXg7CiAgICAgICAgd3NpemUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICB3aGF2ZSA9IHN0YXRlLndoYXZlOwogICAgICAgIHduZXh0ID0gc3RhdGUud25leHQ7CiAgICAgICAgc193aW5kb3cgPSBzdGF0ZS53aW5kb3c7CiAgICAgICAgaG9sZCA9IHN0YXRlLmhvbGQ7CiAgICAgICAgYml0cyA9IHN0YXRlLmJpdHM7CiAgICAgICAgbGNvZGUgPSBzdGF0ZS5sZW5jb2RlOwogICAgICAgIGRjb2RlID0gc3RhdGUuZGlzdGNvZGU7CiAgICAgICAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7CiAgICAgICAgZG1hc2sgPSAoMSA8PCBzdGF0ZS5kaXN0Yml0cykgLSAxOwogICAgICAgIHRvcDoKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGJpdHMgPCAxNSkgewogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdOwogICAgICAgICAgICBkb2xlbjoKICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgJiAxNikgewogICAgICAgICAgICAgICAgICBsZW4gPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgIG9wICY9IDE1OwogICAgICAgICAgICAgICAgICBpZiAob3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsZW4gKz0gaG9sZCAmICgxIDw8IG9wKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCAxNSkgewogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdOwogICAgICAgICAgICAgICAgICBkb2Rpc3Q6CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgJiAxNikgewogICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgICAgICBvcCAmPSAxNTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgKz0gaG9sZCAmICgxIDw8IG9wKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gX291dCAtIGJlZzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gZGlzdCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA+IHdoYXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBzX3dpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod25leHQgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSArIHduZXh0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCAtPSB3bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSB3bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHduZXh0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBkY29kZVsoaGVyZSAmIDY1NTM1KSArIChob2xkICYgKDEgPDwgb3ApIC0gMSldOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBkb2Rpc3Q7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBoZXJlID0gbGNvZGVbKGhlcmUgJiA2NTUzNSkgKyAoaG9sZCAmICgxIDw8IG9wKSAtIDEpXTsKICAgICAgICAgICAgICAgICAgY29udGludWUgZG9sZW47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wICYgMzIpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0gd2hpbGUgKF9pbiA8IGxhc3QgJiYgX291dCA8IGVuZCk7CiAgICAgICAgbGVuID0gYml0cyA+PiAzOwogICAgICAgIF9pbiAtPSBsZW47CiAgICAgICAgYml0cyAtPSBsZW4gPDwgMzsKICAgICAgICBob2xkICY9ICgxIDw8IGJpdHMpIC0gMTsKICAgICAgICBzdHJtLm5leHRfaW4gPSBfaW47CiAgICAgICAgc3RybS5uZXh0X291dCA9IF9vdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IF9pbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBfaW4pIDogNSAtIChfaW4gLSBsYXN0KTsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IF9vdXQgPCBlbmQgPyAyNTcgKyAoZW5kIC0gX291dCkgOiAyNTcgLSAoX291dCAtIGVuZCk7CiAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgcmV0dXJuOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mdHJlZXMuanMKICB2YXIgcmVxdWlyZV9pbmZ0cmVlcyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZ0cmVlcy5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBNQVhCSVRTID0gMTU7CiAgICAgIHZhciBFTk9VR0hfTEVOUyA9IDg1MjsKICAgICAgdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKICAgICAgdmFyIENPREVTID0gMDsKICAgICAgdmFyIExFTlMgPSAxOwogICAgICB2YXIgRElTVFMgPSAyOwogICAgICB2YXIgbGJhc2UgPSBbCiAgICAgICAgMywKICAgICAgICA0LAogICAgICAgIDUsCiAgICAgICAgNiwKICAgICAgICA3LAogICAgICAgIDgsCiAgICAgICAgOSwKICAgICAgICAxMCwKICAgICAgICAxMSwKICAgICAgICAxMywKICAgICAgICAxNSwKICAgICAgICAxNywKICAgICAgICAxOSwKICAgICAgICAyMywKICAgICAgICAyNywKICAgICAgICAzMSwKICAgICAgICAzNSwKICAgICAgICA0MywKICAgICAgICA1MSwKICAgICAgICA1OSwKICAgICAgICA2NywKICAgICAgICA4MywKICAgICAgICA5OSwKICAgICAgICAxMTUsCiAgICAgICAgMTMxLAogICAgICAgIDE2MywKICAgICAgICAxOTUsCiAgICAgICAgMjI3LAogICAgICAgIDI1OCwKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGxleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMTYsCiAgICAgICAgNzIsCiAgICAgICAgNzgKICAgICAgXTsKICAgICAgdmFyIGRiYXNlID0gWwogICAgICAgIDEsCiAgICAgICAgMiwKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA3LAogICAgICAgIDksCiAgICAgICAgMTMsCiAgICAgICAgMTcsCiAgICAgICAgMjUsCiAgICAgICAgMzMsCiAgICAgICAgNDksCiAgICAgICAgNjUsCiAgICAgICAgOTcsCiAgICAgICAgMTI5LAogICAgICAgIDE5MywKICAgICAgICAyNTcsCiAgICAgICAgMzg1LAogICAgICAgIDUxMywKICAgICAgICA3NjksCiAgICAgICAgMTAyNSwKICAgICAgICAxNTM3LAogICAgICAgIDIwNDksCiAgICAgICAgMzA3MywKICAgICAgICA0MDk3LAogICAgICAgIDYxNDUsCiAgICAgICAgODE5MywKICAgICAgICAxMjI4OSwKICAgICAgICAxNjM4NSwKICAgICAgICAyNDU3NywKICAgICAgICAwLAogICAgICAgIDAKICAgICAgXTsKICAgICAgdmFyIGRleHQgPSBbCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTYsCiAgICAgICAgMTcsCiAgICAgICAgMTcsCiAgICAgICAgMTgsCiAgICAgICAgMTgsCiAgICAgICAgMTksCiAgICAgICAgMTksCiAgICAgICAgMjAsCiAgICAgICAgMjAsCiAgICAgICAgMjEsCiAgICAgICAgMjEsCiAgICAgICAgMjIsCiAgICAgICAgMjIsCiAgICAgICAgMjMsCiAgICAgICAgMjMsCiAgICAgICAgMjQsCiAgICAgICAgMjQsCiAgICAgICAgMjUsCiAgICAgICAgMjUsCiAgICAgICAgMjYsCiAgICAgICAgMjYsCiAgICAgICAgMjcsCiAgICAgICAgMjcsCiAgICAgICAgMjgsCiAgICAgICAgMjgsCiAgICAgICAgMjksCiAgICAgICAgMjksCiAgICAgICAgNjQsCiAgICAgICAgNjQKICAgICAgXTsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV90YWJsZSh0eXBlLCBsZW5zLCBsZW5zX2luZGV4LCBjb2RlcywgdGFibGUsIHRhYmxlX2luZGV4LCB3b3JrLCBvcHRzKSB7CiAgICAgICAgdmFyIGJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgdmFyIGxlbiA9IDA7CiAgICAgICAgdmFyIHN5bSA9IDA7CiAgICAgICAgdmFyIG1pbiA9IDAsIG1heCA9IDA7CiAgICAgICAgdmFyIHJvb3QyID0gMDsKICAgICAgICB2YXIgY3VyciA9IDA7CiAgICAgICAgdmFyIGRyb3AgPSAwOwogICAgICAgIHZhciBsZWZ0ID0gMDsKICAgICAgICB2YXIgdXNlZCA9IDA7CiAgICAgICAgdmFyIGh1ZmYgPSAwOwogICAgICAgIHZhciBpbmNyOwogICAgICAgIHZhciBmaWxsOwogICAgICAgIHZhciBsb3c7CiAgICAgICAgdmFyIG1hc2s7CiAgICAgICAgdmFyIG5leHQ7CiAgICAgICAgdmFyIGJhc2UgPSBudWxsOwogICAgICAgIHZhciBiYXNlX2luZGV4ID0gMDsKICAgICAgICB2YXIgZW5kOwogICAgICAgIHZhciBjb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7CiAgICAgICAgdmFyIG9mZnMgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOwogICAgICAgIHZhciBleHRyYSA9IG51bGw7CiAgICAgICAgdmFyIGV4dHJhX2luZGV4ID0gMDsKICAgICAgICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsKICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykgewogICAgICAgICAgY291bnRbbGVuXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICAgICAgICBjb3VudFtsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrOwogICAgICAgIH0KICAgICAgICByb290MiA9IGJpdHM7CiAgICAgICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHsKICAgICAgICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocm9vdDIgPiBtYXgpIHsKICAgICAgICAgIHJvb3QyID0gbWF4OwogICAgICAgIH0KICAgICAgICBpZiAobWF4ID09PSAwKSB7CiAgICAgICAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9IDEgPDwgMjQgfCA2NCA8PCAxNiB8IDA7CiAgICAgICAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9IDEgPDwgMjQgfCA2NCA8PCAxNiB8IDA7CiAgICAgICAgICBvcHRzLmJpdHMgPSAxOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGZvciAobWluID0gMTsgbWluIDwgbWF4OyBtaW4rKykgewogICAgICAgICAgaWYgKGNvdW50W21pbl0gIT09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChyb290MiA8IG1pbikgewogICAgICAgICAgcm9vdDIgPSBtaW47CiAgICAgICAgfQogICAgICAgIGxlZnQgPSAxOwogICAgICAgIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CiAgICAgICAgICBsZWZ0IDw8PSAxOwogICAgICAgICAgbGVmdCAtPSBjb3VudFtsZW5dOwogICAgICAgICAgaWYgKGxlZnQgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09PSBDT0RFUyB8fCBtYXggIT09IDEpKSB7CiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIG9mZnNbMV0gPSAwOwogICAgICAgIGZvciAobGVuID0gMTsgbGVuIDwgTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFtsZW5dOwogICAgICAgIH0KICAgICAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykgewogICAgICAgICAgaWYgKGxlbnNbbGVuc19pbmRleCArIHN5bV0gIT09IDApIHsKICAgICAgICAgICAgd29ya1tvZmZzW2xlbnNbbGVuc19pbmRleCArIHN5bV1dKytdID0gc3ltOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZSA9PT0gQ09ERVMpIHsKICAgICAgICAgIGJhc2UgPSBleHRyYSA9IHdvcms7CiAgICAgICAgICBlbmQgPSAxOTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IExFTlMpIHsKICAgICAgICAgIGJhc2UgPSBsYmFzZTsKICAgICAgICAgIGJhc2VfaW5kZXggLT0gMjU3OwogICAgICAgICAgZXh0cmEgPSBsZXh0OwogICAgICAgICAgZXh0cmFfaW5kZXggLT0gMjU3OwogICAgICAgICAgZW5kID0gMjU2OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBiYXNlID0gZGJhc2U7CiAgICAgICAgICBleHRyYSA9IGRleHQ7CiAgICAgICAgICBlbmQgPSAtMTsKICAgICAgICB9CiAgICAgICAgaHVmZiA9IDA7CiAgICAgICAgc3ltID0gMDsKICAgICAgICBsZW4gPSBtaW47CiAgICAgICAgbmV4dCA9IHRhYmxlX2luZGV4OwogICAgICAgIGN1cnIgPSByb290MjsKICAgICAgICBkcm9wID0gMDsKICAgICAgICBsb3cgPSAtMTsKICAgICAgICB1c2VkID0gMSA8PCByb290MjsKICAgICAgICBtYXNrID0gdXNlZCAtIDE7CiAgICAgICAgaWYgKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TIHx8IHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpIHsKICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7CiAgICAgICAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAwOwogICAgICAgICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTsKICAgICAgICAgIH0gZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCArIHdvcmtbc3ltXV07CiAgICAgICAgICAgIGhlcmVfdmFsID0gYmFzZVtiYXNlX2luZGV4ICsgd29ya1tzeW1dXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlcmVfb3AgPSAzMiArIDY0OwogICAgICAgICAgICBoZXJlX3ZhbCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSBkcm9wOwogICAgICAgICAgZmlsbCA9IDEgPDwgY3VycjsKICAgICAgICAgIG1pbiA9IGZpbGw7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGZpbGwgLT0gaW5jcjsKICAgICAgICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlX2JpdHMgPDwgMjQgfCBoZXJlX29wIDw8IDE2IHwgaGVyZV92YWwgfCAwOwogICAgICAgICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7CiAgICAgICAgICBpbmNyID0gMSA8PCBsZW4gLSAxOwogICAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7CiAgICAgICAgICAgIGluY3IgPj49IDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5jciAhPT0gMCkgewogICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwogICAgICAgICAgICBodWZmICs9IGluY3I7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBodWZmID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHN5bSsrOwogICAgICAgICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkgewogICAgICAgICAgICBpZiAobGVuID09PSBtYXgpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZW4gPSBsZW5zW2xlbnNfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxlbiA+IHJvb3QyICYmIChodWZmICYgbWFzaykgIT09IGxvdykgewogICAgICAgICAgICBpZiAoZHJvcCA9PT0gMCkgewogICAgICAgICAgICAgIGRyb3AgPSByb290MjsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0ICs9IG1pbjsKICAgICAgICAgICAgY3VyciA9IGxlbiAtIGRyb3A7CiAgICAgICAgICAgIGxlZnQgPSAxIDw8IGN1cnI7CiAgICAgICAgICAgIHdoaWxlIChjdXJyICsgZHJvcCA8IG1heCkgewogICAgICAgICAgICAgIGxlZnQgLT0gY291bnRbY3VyciArIGRyb3BdOwogICAgICAgICAgICAgIGlmIChsZWZ0IDw9IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjdXJyKys7CiAgICAgICAgICAgICAgbGVmdCA8PD0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1c2VkICs9IDEgPDwgY3VycjsKICAgICAgICAgICAgaWYgKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TIHx8IHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpIHsKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsb3cgPSBodWZmICYgbWFzazsKICAgICAgICAgICAgdGFibGVbbG93XSA9IHJvb3QyIDw8IDI0IHwgY3VyciA8PCAxNiB8IG5leHQgLSB0YWJsZV9pbmRleCB8IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChodWZmICE9PSAwKSB7CiAgICAgICAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSBsZW4gLSBkcm9wIDw8IDI0IHwgNjQgPDwgMTYgfCAwOwogICAgICAgIH0KICAgICAgICBvcHRzLmJpdHMgPSByb290MjsKICAgICAgICByZXR1cm4gMDsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmxhdGUuanMKICB2YXIgcmVxdWlyZV9pbmZsYXRlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmxhdGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgYWRsZXIzMiA9IHJlcXVpcmVfYWRsZXIzMigpOwogICAgICB2YXIgY3JjMzIgPSByZXF1aXJlX2NyYzMyKCk7CiAgICAgIHZhciBpbmZsYXRlX2Zhc3QgPSByZXF1aXJlX2luZmZhc3QoKTsKICAgICAgdmFyIGluZmxhdGVfdGFibGUgPSByZXF1aXJlX2luZnRyZWVzKCk7CiAgICAgIHZhciBDT0RFUyA9IDA7CiAgICAgIHZhciBMRU5TID0gMTsKICAgICAgdmFyIERJU1RTID0gMjsKICAgICAgdmFyIFpfRklOSVNIID0gNDsKICAgICAgdmFyIFpfQkxPQ0sgPSA1OwogICAgICB2YXIgWl9UUkVFUyA9IDY7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX05FRURfRElDVCA9IDI7CiAgICAgIHZhciBaX1NUUkVBTV9FUlJPUiA9IC0yOwogICAgICB2YXIgWl9EQVRBX0VSUk9SID0gLTM7CiAgICAgIHZhciBaX01FTV9FUlJPUiA9IC00OwogICAgICB2YXIgWl9CVUZfRVJST1IgPSAtNTsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICB2YXIgSEVBRCA9IDE7CiAgICAgIHZhciBGTEFHUyA9IDI7CiAgICAgIHZhciBUSU1FID0gMzsKICAgICAgdmFyIE9TID0gNDsKICAgICAgdmFyIEVYTEVOID0gNTsKICAgICAgdmFyIEVYVFJBID0gNjsKICAgICAgdmFyIE5BTUUgPSA3OwogICAgICB2YXIgQ09NTUVOVCA9IDg7CiAgICAgIHZhciBIQ1JDID0gOTsKICAgICAgdmFyIERJQ1RJRCA9IDEwOwogICAgICB2YXIgRElDVCA9IDExOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICB2YXIgVFlQRURPID0gMTM7CiAgICAgIHZhciBTVE9SRUQgPSAxNDsKICAgICAgdmFyIENPUFlfID0gMTU7CiAgICAgIHZhciBDT1BZID0gMTY7CiAgICAgIHZhciBUQUJMRSA9IDE3OwogICAgICB2YXIgTEVOTEVOUyA9IDE4OwogICAgICB2YXIgQ09ERUxFTlMgPSAxOTsKICAgICAgdmFyIExFTl8gPSAyMDsKICAgICAgdmFyIExFTiA9IDIxOwogICAgICB2YXIgTEVORVhUID0gMjI7CiAgICAgIHZhciBESVNUID0gMjM7CiAgICAgIHZhciBESVNURVhUID0gMjQ7CiAgICAgIHZhciBNQVRDSCA9IDI1OwogICAgICB2YXIgTElUID0gMjY7CiAgICAgIHZhciBDSEVDSyA9IDI3OwogICAgICB2YXIgTEVOR1RIID0gMjg7CiAgICAgIHZhciBET05FID0gMjk7CiAgICAgIHZhciBCQUQgPSAzMDsKICAgICAgdmFyIE1FTSA9IDMxOwogICAgICB2YXIgU1lOQyA9IDMyOwogICAgICB2YXIgRU5PVUdIX0xFTlMgPSA4NTI7CiAgICAgIHZhciBFTk9VR0hfRElTVFMgPSA1OTI7CiAgICAgIHZhciBNQVhfV0JJVFMgPSAxNTsKICAgICAgdmFyIERFRl9XQklUUyA9IE1BWF9XQklUUzsKICAgICAgZnVuY3Rpb24genN3YXAzMihxKSB7CiAgICAgICAgcmV0dXJuIChxID4+PiAyNCAmIDI1NSkgKyAocSA+Pj4gOCAmIDY1MjgwKSArICgocSAmIDY1MjgwKSA8PCA4KSArICgocSAmIDI1NSkgPDwgMjQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHsKICAgICAgICB0aGlzLm1vZGUgPSAwOwogICAgICAgIHRoaXMubGFzdCA9IGZhbHNlOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5oYXZlZGljdCA9IGZhbHNlOwogICAgICAgIHRoaXMuZmxhZ3MgPSAwOwogICAgICAgIHRoaXMuZG1heCA9IDA7CiAgICAgICAgdGhpcy5jaGVjayA9IDA7CiAgICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICAgICAgdGhpcy5oZWFkID0gbnVsbDsKICAgICAgICB0aGlzLndiaXRzID0gMDsKICAgICAgICB0aGlzLndzaXplID0gMDsKICAgICAgICB0aGlzLndoYXZlID0gMDsKICAgICAgICB0aGlzLnduZXh0ID0gMDsKICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICAgICAgdGhpcy5ob2xkID0gMDsKICAgICAgICB0aGlzLmJpdHMgPSAwOwogICAgICAgIHRoaXMubGVuZ3RoID0gMDsKICAgICAgICB0aGlzLm9mZnNldCA9IDA7CiAgICAgICAgdGhpcy5leHRyYSA9IDA7CiAgICAgICAgdGhpcy5sZW5jb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3Rjb2RlID0gbnVsbDsKICAgICAgICB0aGlzLmxlbmJpdHMgPSAwOwogICAgICAgIHRoaXMuZGlzdGJpdHMgPSAwOwogICAgICAgIHRoaXMubmNvZGUgPSAwOwogICAgICAgIHRoaXMubmxlbiA9IDA7CiAgICAgICAgdGhpcy5uZGlzdCA9IDA7CiAgICAgICAgdGhpcy5oYXZlID0gMDsKICAgICAgICB0aGlzLm5leHQgPSBudWxsOwogICAgICAgIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOwogICAgICAgIHRoaXMud29yayA9IG5ldyB1dGlscy5CdWYxNigyODgpOwogICAgICAgIHRoaXMubGVuZHluID0gbnVsbDsKICAgICAgICB0aGlzLmRpc3RkeW4gPSBudWxsOwogICAgICAgIHRoaXMuc2FuZSA9IDA7CiAgICAgICAgdGhpcy5iYWNrID0gMDsKICAgICAgICB0aGlzLndhcyA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gc3RhdGUudG90YWwgPSAwOwogICAgICAgIHN0cm0ubXNnID0gIiI7CiAgICAgICAgaWYgKHN0YXRlLndyYXApIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS53cmFwICYgMTsKICAgICAgICB9CiAgICAgICAgc3RhdGUubW9kZSA9IEhFQUQ7CiAgICAgICAgc3RhdGUubGFzdCA9IDA7CiAgICAgICAgc3RhdGUuaGF2ZWRpY3QgPSAwOwogICAgICAgIHN0YXRlLmRtYXggPSAzMjc2ODsKICAgICAgICBzdGF0ZS5oZWFkID0gbnVsbDsKICAgICAgICBzdGF0ZS5ob2xkID0gMDsKICAgICAgICBzdGF0ZS5iaXRzID0gMDsKICAgICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTsKICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0RJU1RTKTsKICAgICAgICBzdGF0ZS5zYW5lID0gMTsKICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBzdGF0ZS53c2l6ZSA9IDA7CiAgICAgICAgc3RhdGUud2hhdmUgPSAwOwogICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHsKICAgICAgICB2YXIgd3JhcDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgICAgICAgIHdyYXAgPSAwOwogICAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOwogICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkgewogICAgICAgICAgICB3aW5kb3dCaXRzICY9IDE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7CiAgICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdGF0ZS53cmFwID0gd3JhcDsKICAgICAgICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7CiAgICAgICAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgewogICAgICAgIHZhciByZXQ7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIGlmICghc3RybSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IG5ldyBJbmZsYXRlU3RhdGUoKTsKICAgICAgICBzdHJtLnN0YXRlID0gc3RhdGU7CiAgICAgICAgc3RhdGUud2luZG93ID0gbnVsbDsKICAgICAgICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOwogICAgICAgIGlmIChyZXQgIT09IFpfT0spIHsKICAgICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHsKICAgICAgICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7CiAgICAgIH0KICAgICAgdmFyIHZpcmdpbiA9IHRydWU7CiAgICAgIHZhciBsZW5maXg7CiAgICAgIHZhciBkaXN0Zml4OwogICAgICBmdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkgewogICAgICAgIGlmICh2aXJnaW4pIHsKICAgICAgICAgIHZhciBzeW07CiAgICAgICAgICBsZW5maXggPSBuZXcgdXRpbHMuQnVmMzIoNTEyKTsKICAgICAgICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAxNDQpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN5bSA8IDI1NikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gNzsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzeW0gPCAyODgpIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA4OwogICAgICAgICAgfQogICAgICAgICAgaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA5IH0pOwogICAgICAgICAgc3ltID0gMDsKICAgICAgICAgIHdoaWxlIChzeW0gPCAzMikgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDU7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgZGlzdGZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA1IH0pOwogICAgICAgICAgdmlyZ2luID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7CiAgICAgICAgc3RhdGUubGVuYml0cyA9IDk7CiAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBkaXN0Zml4OwogICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53aW5kb3cgPT09IG51bGwpIHsKICAgICAgICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0czsKICAgICAgICAgIHN0YXRlLnduZXh0ID0gMDsKICAgICAgICAgIHN0YXRlLndoYXZlID0gMDsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHN0YXRlLndzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHsKICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBzdGF0ZS53c2l6ZSwgc3RhdGUud3NpemUsIDApOwogICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7CiAgICAgICAgICBpZiAoZGlzdCA+IGNvcHkpIHsKICAgICAgICAgICAgZGlzdCA9IGNvcHk7CiAgICAgICAgICB9CiAgICAgICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgZGlzdCwgc3RhdGUud25leHQpOwogICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICAgaWYgKGNvcHkpIHsKICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIGNvcHksIGNvcHksIDApOwogICAgICAgICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7CiAgICAgICAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS53bmV4dCArPSBkaXN0OwogICAgICAgICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGF0ZS53aGF2ZSA8IHN0YXRlLndzaXplKSB7CiAgICAgICAgICAgICAgc3RhdGUud2hhdmUgKz0gZGlzdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgICAgICAgdmFyIHN0YXRlOwogICAgICAgIHZhciBpbnB1dCwgb3V0cHV0OwogICAgICAgIHZhciBuZXh0OwogICAgICAgIHZhciBwdXQ7CiAgICAgICAgdmFyIGhhdmUsIGxlZnQ7CiAgICAgICAgdmFyIGhvbGQ7CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIF9pbiwgX291dDsKICAgICAgICB2YXIgY29weTsKICAgICAgICB2YXIgZnJvbTsKICAgICAgICB2YXIgZnJvbV9zb3VyY2U7CiAgICAgICAgdmFyIGhlcmUgPSAwOwogICAgICAgIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOwogICAgICAgIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgaGJ1ZiA9IG5ldyB1dGlscy5CdWY4KDQpOwogICAgICAgIHZhciBvcHRzOwogICAgICAgIHZhciBuOwogICAgICAgIHZhciBvcmRlciA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgIXN0cm0ub3V0cHV0IHx8ICFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPOwogICAgICAgIH0KICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgIGxlZnQgPSBzdHJtLmF2YWlsX291dDsKICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBoYXZlID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICBfaW4gPSBoYXZlOwogICAgICAgIF9vdXQgPSBsZWZ0OwogICAgICAgIHJldCA9IFpfT0s7CiAgICAgICAgaW5mX2xlYXZlOgogICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUubW9kZSkgewogICAgICAgICAgICAgIGNhc2UgSEVBRDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud3JhcCAmIDIgJiYgaG9sZCA9PT0gMzU2MTUpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSAwOwogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBGTEFHUzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncyA9IDA7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghKHN0YXRlLndyYXAgJiAxKSB8fCAoKChob2xkICYgMjU1KSA8PCA4KSArIChob2xkID4+IDgpKSAlIDMxKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImluY29ycmVjdCBoZWFkZXIgY2hlY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgoaG9sZCAmIDE1KSAhPT0gWl9ERUZMQVRFRCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgICAgICAgICAgICBiaXRzIC09IDQ7CiAgICAgICAgICAgICAgICBsZW4gPSAoaG9sZCAmIDE1KSArIDg7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud2JpdHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RhdGUud2JpdHMgPSBsZW47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA+IHN0YXRlLndiaXRzKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgd2luZG93IHNpemUiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmRtYXggPSAxIDw8IGxlbjsKICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDE7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gaG9sZCAmIDUxMiA/IERJQ1RJRCA6IFRZUEU7CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBGTEFHUzoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MgPSBob2xkOwogICAgICAgICAgICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDI1NSkgIT09IFpfREVGTEFURUQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDU3MzQ0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInVua25vd24gaGVhZGVyIGZsYWdzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC50ZXh0ID0gaG9sZCA+PiA4ICYgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUSU1FOwogICAgICAgICAgICAgIGNhc2UgVElNRToKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC50aW1lID0gaG9sZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhidWZbMl0gPSBob2xkID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlszXSA9IGhvbGQgPj4+IDI0ICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCA0LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gT1M7CiAgICAgICAgICAgICAgY2FzZSBPUzoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm9zID0gaG9sZCA+PiA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEVYTEVOOwogICAgICAgICAgICAgIGNhc2UgRVhMRU46CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAxMDI0KSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9sZW4gPSBob2xkOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhidWZbMV0gPSBob2xkID4+PiA4ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBFWFRSQTsKICAgICAgICAgICAgICBjYXNlIEVYVFJBOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMTAyNCkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5oZWFkLmV4dHJhX2xlbiAtIHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaGVhZC5leHRyYSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbmV3IEFycmF5KHN0YXRlLmhlYWQuZXh0cmFfbGVuKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLmhlYWQuZXh0cmEsIGlucHV0LCBuZXh0LCBjb3B5LCBsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE5BTUU7CiAgICAgICAgICAgICAgY2FzZSBOQU1FOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMjA0OCkgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJiBzdGF0ZS5sZW5ndGggPCA2NTUzNikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgY2FzZSBDT01NRU5UOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNDA5NikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJiBzdGF0ZS5sZW5ndGggPCA2NTUzNikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gSENSQzsKICAgICAgICAgICAgICBjYXNlIEhDUkM6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS5jaGVjayAmIDY1NTM1KSkgewogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImhlYWRlciBjcmMgbWlzbWF0Y2giOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5oY3JjID0gc3RhdGUuZmxhZ3MgPj4gOSAmIDE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0genN3YXAzMihob2xkKTsKICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRElDVDsKICAgICAgICAgICAgICBjYXNlIERJQ1Q6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZWRpY3QgPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgICAgICAgICAgICByZXR1cm4gWl9ORUVEX0RJQ1Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgY2FzZSBUWVBFOgogICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX0JMT0NLIHx8IGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIFRZUEVETzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sYXN0KSB7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNzsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBiaXRzICYgNzsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENIRUNLOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMykgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sYXN0ID0gaG9sZCAmIDE7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gMTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gMTsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9sZCAmIDMpIHsKICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBTVE9SRUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBmaXhlZHRhYmxlcyhzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTl87CiAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVEFCTEU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGJsb2NrIHR5cGUiOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgU1RPUkVEOgogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgYml0cyAtPSBiaXRzICYgNzsKICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKChob2xkICYgNjU1MzUpICE9PSAoaG9sZCA+Pj4gMTYgXiA2NTUzNSkpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZCAmIDY1NTM1OwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT1BZXzsKICAgICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSBDT1BZXzoKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT1BZOwogICAgICAgICAgICAgIGNhc2UgQ09QWToKICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB1dGlscy5hcnJheVNldChvdXRwdXQsIGlucHV0LCBuZXh0LCBjb3B5LCBwdXQpOwogICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5OwogICAgICAgICAgICAgICAgICBwdXQgKz0gY29weTsKICAgICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIFRBQkxFOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNCkgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5ubGVuID0gKGhvbGQgJiAzMSkgKyAyNTc7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNTsKICAgICAgICAgICAgICAgIHN0YXRlLm5kaXN0ID0gKGhvbGQgJiAzMSkgKyAxOwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDU7CiAgICAgICAgICAgICAgICBiaXRzIC09IDU7CiAgICAgICAgICAgICAgICBzdGF0ZS5uY29kZSA9IChob2xkICYgMTUpICsgNDsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA0OwogICAgICAgICAgICAgICAgYml0cyAtPSA0OwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm5sZW4gPiAyODYgfHwgc3RhdGUubmRpc3QgPiAzMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuaGF2ZSA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUzsKICAgICAgICAgICAgICBjYXNlIExFTkxFTlM6CiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMykgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IGhvbGQgJiA3OwogICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgICAgICAgYml0cyAtPSAzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCAxOSkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5sZW5keW47CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5iaXRzID0gNzsKICAgICAgICAgICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLmxlbnMsIDAsIDE5LCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgY29kZSBsZW5ndGhzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuaGF2ZSA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7CiAgICAgICAgICAgICAgY2FzZSBDT0RFTEVOUzoKICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2hvbGQgJiAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDFdOwogICAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChoZXJlX3ZhbCA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZV92YWwgPT09IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMjsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUgLSAxXTsKICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgKGhvbGQgJiAzKTsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMzsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDcpOwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IDM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IDM7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyA3OwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMTEgKyAoaG9sZCAmIDEyNyk7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gNzsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gNzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhhdmUgKyBjb3B5ID4gc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvcHktLSkgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdID0gbGVuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IEJBRCkgewogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sZW5zWzI1Nl0gPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5iaXRzID0gOTsKICAgICAgICAgICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUubGVucywgMCwgc3RhdGUubmxlbiwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzOwogICAgICAgICAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNjsKICAgICAgICAgICAgICAgIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5bjsKICAgICAgICAgICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmRpc3RiaXRzIH07CiAgICAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCBzdGF0ZS5ubGVuLCBzdGF0ZS5uZGlzdCwgc3RhdGUuZGlzdGNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2VzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTl87CiAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgTEVOXzoKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgICAgICAgICAgY2FzZSBMRU46CiAgICAgICAgICAgICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7CiAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9pbiA9IGhhdmU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhvbGQgPSBob2xkOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICAgICAgICAgICAgaW5mbGF0ZV9mYXN0KHN0cm0sIF9vdXQpOwogICAgICAgICAgICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0OwogICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdHJtLm91dHB1dDsKICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgICAgICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgICAgICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgICAgICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogICAgICAgICAgICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRlLmJpdHM7CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFjayA9IC0xOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuYmFjayA9IDA7CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICBoZXJlX29wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmJiAoaGVyZV9vcCAmIDI0MCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgbGFzdF9iaXRzID0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICBsYXN0X29wID0gaGVyZV9vcDsKICAgICAgICAgICAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbbGFzdF92YWwgKyAoKGhvbGQgJiAoMSA8PCBsYXN0X2JpdHMgKyBsYXN0X29wKSAtIDEpID4+IGxhc3RfYml0cyldOwogICAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF9iaXRzICsgaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTElUOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYgMzIpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuYmFjayA9IC0xOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZXh0cmEgPSBoZXJlX29wICYgMTU7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVORVhUOwogICAgICAgICAgICAgIGNhc2UgTEVORVhUOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgIG4gPSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggKz0gaG9sZCAmICgxIDw8IHN0YXRlLmV4dHJhKSAtIDE7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESVNUOwogICAgICAgICAgICAgIGNhc2UgRElTVDoKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDFdOwogICAgICAgICAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDsKICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgaWYgKGhlcmVfYml0cyA8PSBiaXRzKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKChoZXJlX29wICYgMjQwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgICAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbbGFzdF92YWwgKyAoKGhvbGQgJiAoMSA8PCBsYXN0X2JpdHMgKyBsYXN0X29wKSAtIDEpID4+IGxhc3RfYml0cyldOwogICAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF9iaXRzICsgaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgaWYgKGhlcmVfb3AgJiA2NCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm9mZnNldCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgc3RhdGUuZXh0cmEgPSBoZXJlX29wICYgMTU7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRElTVEVYVDsKICAgICAgICAgICAgICBjYXNlIERJU1RFWFQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLm9mZnNldCArPSBob2xkICYgKDEgPDwgc3RhdGUuZXh0cmEpIC0gMTsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBNQVRDSDsKICAgICAgICAgICAgICBjYXNlIE1BVENIOgogICAgICAgICAgICAgICAgaWYgKGxlZnQgPT09IDApIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29weSA9IF9vdXQgLSBsZWZ0OwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IGNvcHkpIHsKICAgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLm9mZnNldCAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud2hhdmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkgewogICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLnduZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgY29weSAtPSBzdGF0ZS53bmV4dDsKICAgICAgICAgICAgICAgICAgICBmcm9tID0gc3RhdGUud3NpemUgLSBjb3B5OwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53bmV4dCAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gc3RhdGUud2luZG93OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgIGZyb20gPSBwdXQgLSBzdGF0ZS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsKICAgICAgICAgICAgICAgICAgY29weSA9IGxlZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWNvcHkpOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBMSVQ6CiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgbGVmdC0tOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgQ0hFQ0s6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUud3JhcCkgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgfD0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfb3V0IC09IGxlZnQ7CiAgICAgICAgICAgICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLnRvdGFsICs9IF9vdXQ7CiAgICAgICAgICAgICAgICAgIGlmIChfb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgPyBob2xkIDogenN3YXAzMihob2xkKSkgIT09IHN0YXRlLmNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDsKICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiA0Mjk0OTY3Mjk1KSkgewogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImluY29ycmVjdCBsZW5ndGggY2hlY2siOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERPTkU7CiAgICAgICAgICAgICAgY2FzZSBET05FOgogICAgICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgQkFEOgogICAgICAgICAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SOwogICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgIGNhc2UgTUVNOgogICAgICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgICAgIGNhc2UgU1lOQzoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICBpZiAoc3RhdGUud3NpemUgfHwgX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJiAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCkpIHsKICAgICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQsIF9vdXQgLSBzdHJtLmF2YWlsX291dCkpIHsKICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1FTTsKICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfaW4gLT0gc3RybS5hdmFpbF9pbjsKICAgICAgICBfb3V0IC09IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIHN0cm0udG90YWxfaW4gKz0gX2luOwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICBpZiAoc3RhdGUud3JhcCAmJiBfb3V0KSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpOwogICAgICAgIH0KICAgICAgICBzdHJtLmRhdGFfdHlwZSA9IHN0YXRlLmJpdHMgKyAoc3RhdGUubGFzdCA/IDY0IDogMCkgKyAoc3RhdGUubW9kZSA9PT0gVFlQRSA/IDEyOCA6IDApICsgKHN0YXRlLm1vZGUgPT09IExFTl8gfHwgc3RhdGUubW9kZSA9PT0gQ09QWV8gPyAyNTYgOiAwKTsKICAgICAgICBpZiAoKF9pbiA9PT0gMCAmJiBfb3V0ID09PSAwIHx8IGZsdXNoID09PSBaX0ZJTklTSCkgJiYgcmV0ID09PSBaX09LKSB7CiAgICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlRW5kKHN0cm0pIHsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgdmFyIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoc3RhdGUud2luZG93KSB7CiAgICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdHJtLnN0YXRlID0gbnVsbDsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0sIGhlYWQpIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoKHN0YXRlLndyYXAgJiAyKSA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5oZWFkID0gaGVhZDsKICAgICAgICBoZWFkLmRvbmUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5KSB7CiAgICAgICAgdmFyIGRpY3RMZW5ndGggPSBkaWN0aW9uYXJ5Lmxlbmd0aDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgdmFyIGRpY3RpZDsKICAgICAgICB2YXIgcmV0OwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLndyYXAgIT09IDAgJiYgc3RhdGUubW9kZSAhPT0gRElDVCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gRElDVCkgewogICAgICAgICAgZGljdGlkID0gMTsKICAgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTsKICAgICAgICAgIGlmIChkaWN0aWQgIT09IHN0YXRlLmNoZWNrKSB7CiAgICAgICAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCBkaWN0TGVuZ3RoKTsKICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gTUVNOwogICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5oYXZlZGljdCA9IDE7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZXhwb3J0czIuaW5mbGF0ZVJlc2V0ID0gaW5mbGF0ZVJlc2V0OwogICAgICBleHBvcnRzMi5pbmZsYXRlUmVzZXQyID0gaW5mbGF0ZVJlc2V0MjsKICAgICAgZXhwb3J0czIuaW5mbGF0ZVJlc2V0S2VlcCA9IGluZmxhdGVSZXNldEtlZXA7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVJbml0ID0gaW5mbGF0ZUluaXQ7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVJbml0MiA9IGluZmxhdGVJbml0MjsKICAgICAgZXhwb3J0czIuaW5mbGF0ZSA9IGluZmxhdGU7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVFbmQgPSBpbmZsYXRlRW5kOwogICAgICBleHBvcnRzMi5pbmZsYXRlR2V0SGVhZGVyID0gaW5mbGF0ZUdldEhlYWRlcjsKICAgICAgZXhwb3J0czIuaW5mbGF0ZVNldERpY3Rpb25hcnkgPSBpbmZsYXRlU2V0RGljdGlvbmFyeTsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUluZm8gPSAicGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMKICB2YXIgcmVxdWlyZV9jb25zdGFudHMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY29uc3RhbnRzLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gewogICAgICAgIFpfTk9fRkxVU0g6IDAsCiAgICAgICAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogICAgICAgIFpfU1lOQ19GTFVTSDogMiwKICAgICAgICBaX0ZVTExfRkxVU0g6IDMsCiAgICAgICAgWl9GSU5JU0g6IDQsCiAgICAgICAgWl9CTE9DSzogNSwKICAgICAgICBaX1RSRUVTOiA2LAogICAgICAgIFpfT0s6IDAsCiAgICAgICAgWl9TVFJFQU1fRU5EOiAxLAogICAgICAgIFpfTkVFRF9ESUNUOiAyLAogICAgICAgIFpfRVJSTk86IC0xLAogICAgICAgIFpfU1RSRUFNX0VSUk9SOiAtMiwKICAgICAgICBaX0RBVEFfRVJST1I6IC0zLAogICAgICAgIFpfQlVGX0VSUk9SOiAtNSwKICAgICAgICBaX05PX0NPTVBSRVNTSU9OOiAwLAogICAgICAgIFpfQkVTVF9TUEVFRDogMSwKICAgICAgICBaX0JFU1RfQ09NUFJFU1NJT046IDksCiAgICAgICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSwKICAgICAgICBaX0ZJTFRFUkVEOiAxLAogICAgICAgIFpfSFVGRk1BTl9PTkxZOiAyLAogICAgICAgIFpfUkxFOiAzLAogICAgICAgIFpfRklYRUQ6IDQsCiAgICAgICAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogICAgICAgIFpfQklOQVJZOiAwLAogICAgICAgIFpfVEVYVDogMSwKICAgICAgICBaX1VOS05PV046IDIsCiAgICAgICAgWl9ERUZMQVRFRDogOAogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvZ3poZWFkZXIuanMKICB2YXIgcmVxdWlyZV9nemhlYWRlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9nemhlYWRlci5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIEdaaGVhZGVyKCkgewogICAgICAgIHRoaXMudGV4dCA9IDA7CiAgICAgICAgdGhpcy50aW1lID0gMDsKICAgICAgICB0aGlzLnhmbGFncyA9IDA7CiAgICAgICAgdGhpcy5vcyA9IDA7CiAgICAgICAgdGhpcy5leHRyYSA9IG51bGw7CiAgICAgICAgdGhpcy5leHRyYV9sZW4gPSAwOwogICAgICAgIHRoaXMubmFtZSA9ICIiOwogICAgICAgIHRoaXMuY29tbWVudCA9ICIiOwogICAgICAgIHRoaXMuaGNyYyA9IDA7CiAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7CiAgICAgIH0KICAgICAgbW9kdWxlMi5leHBvcnRzID0gR1poZWFkZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9pbmZsYXRlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHpsaWJfaW5mbGF0ZSA9IHJlcXVpcmVfaW5mbGF0ZSgpOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgc3RyaW5ncyA9IHJlcXVpcmVfc3RyaW5ncygpOwogICAgICB2YXIgYyA9IHJlcXVpcmVfY29uc3RhbnRzKCk7CiAgICAgIHZhciBtc2cgPSByZXF1aXJlX21lc3NhZ2VzKCk7CiAgICAgIHZhciBaU3RyZWFtID0gcmVxdWlyZV96c3RyZWFtKCk7CiAgICAgIHZhciBHWmhlYWRlciA9IHJlcXVpcmVfZ3poZWFkZXIoKTsKICAgICAgdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgICAgZnVuY3Rpb24gSW5mbGF0ZTIob3B0aW9ucykgewogICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmZsYXRlMikpCiAgICAgICAgICByZXR1cm4gbmV3IEluZmxhdGUyKG9wdGlvbnMpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHV0aWxzLmFzc2lnbih7CiAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgICAgICAgd2luZG93Qml0czogMCwKICAgICAgICAgIHRvOiAiIgogICAgICAgIH0sIG9wdGlvbnMgfHwge30pOwogICAgICAgIHZhciBvcHQgPSB0aGlzLm9wdGlvbnM7CiAgICAgICAgaWYgKG9wdC5yYXcgJiYgb3B0LndpbmRvd0JpdHMgPj0gMCAmJiBvcHQud2luZG93Qml0cyA8IDE2KSB7CiAgICAgICAgICBvcHQud2luZG93Qml0cyA9IC1vcHQud2luZG93Qml0czsKICAgICAgICAgIGlmIChvcHQud2luZG93Qml0cyA9PT0gMCkgewogICAgICAgICAgICBvcHQud2luZG93Qml0cyA9IC0xNTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG9wdC53aW5kb3dCaXRzID49IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNiAmJiAhKG9wdGlvbnMgJiYgb3B0aW9ucy53aW5kb3dCaXRzKSkgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgKz0gMzI7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQud2luZG93Qml0cyA+IDE1ICYmIG9wdC53aW5kb3dCaXRzIDwgNDgpIHsKICAgICAgICAgIGlmICgob3B0LndpbmRvd0JpdHMgJiAxNSkgPT09IDApIHsKICAgICAgICAgICAgb3B0LndpbmRvd0JpdHMgfD0gMTU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuZXJyID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgICAgICAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLCBvcHQud2luZG93Qml0cyk7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgIH0KICAgICAgICB0aGlzLmhlYWRlciA9IG5ldyBHWmhlYWRlcigpOwogICAgICAgIHpsaWJfaW5mbGF0ZS5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSwgdGhpcy5oZWFkZXIpOwogICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkgewogICAgICAgICAgaWYgKHR5cGVvZiBvcHQuZGljdGlvbmFyeSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgb3B0LmRpY3Rpb25hcnkgPSBzdHJpbmdzLnN0cmluZzJidWYob3B0LmRpY3Rpb25hcnkpOwogICAgICAgICAgfSBlbHNlIGlmICh0b1N0cmluZy5jYWxsKG9wdC5kaWN0aW9uYXJ5KSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIikgewogICAgICAgICAgICBvcHQuZGljdGlvbmFyeSA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcHQucmF3KSB7CiAgICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBJbmZsYXRlMi5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIG1vZGUpIHsKICAgICAgICB2YXIgc3RybSA9IHRoaXMuc3RybTsKICAgICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZTsKICAgICAgICB2YXIgZGljdGlvbmFyeSA9IHRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5OwogICAgICAgIHZhciBzdGF0dXMsIF9tb2RlOwogICAgICAgIHZhciBuZXh0X291dF91dGY4LCB0YWlsLCB1dGY4c3RyOwogICAgICAgIHZhciBhbGxvd0J1ZkVycm9yID0gZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuZW5kZWQpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgX21vZGUgPSBtb2RlID09PSB+fm1vZGUgPyBtb2RlIDogbW9kZSA9PT0gdHJ1ZSA/IGMuWl9GSU5JU0ggOiBjLlpfTk9fRkxVU0g7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IHN0cmluZ3MuYmluc3RyaW5nMmJ1ZihkYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiA9IDA7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlKHN0cm0sIGMuWl9OT19GTFVTSCk7CiAgICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfTkVFRF9ESUNUICYmIGRpY3Rpb25hcnkpIHsKICAgICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZGljdGlvbmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfQlVGX0VSUk9SICYmIGFsbG93QnVmRXJyb3IgPT09IHRydWUpIHsKICAgICAgICAgICAgc3RhdHVzID0gYy5aX09LOwogICAgICAgICAgICBhbGxvd0J1ZkVycm9yID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IGMuWl9PSykgewogICAgICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RybS5uZXh0X291dCkgewogICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDAgfHwgc3RhdHVzID09PSBjLlpfU1RSRUFNX0VORCB8fCBzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCB8fCBfbW9kZSA9PT0gYy5aX1NZTkNfRkxVU0gpKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIG5leHRfb3V0X3V0ZjggPSBzdHJpbmdzLnV0Zjhib3JkZXIoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpOwogICAgICAgICAgICAgICAgdGFpbCA9IHN0cm0ubmV4dF9vdXQgLSBuZXh0X291dF91dGY4OwogICAgICAgICAgICAgICAgdXRmOHN0ciA9IHN0cmluZ3MuYnVmMnN0cmluZyhzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCk7CiAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gdGFpbDsKICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplIC0gdGFpbDsKICAgICAgICAgICAgICAgIGlmICh0YWlsKSB7CiAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCwgdGFpbCwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YSh1dGY4c3RyKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5vbkRhdGEodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiBzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBhbGxvd0J1ZkVycm9yID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoc3RybS5hdmFpbF9pbiA+IDAgfHwgc3RybS5hdmFpbF9vdXQgPT09IDApICYmIHN0YXR1cyAhPT0gYy5aX1NUUkVBTV9FTkQpOwogICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9TVFJFQU1fRU5EKSB7CiAgICAgICAgICBfbW9kZSA9IGMuWl9GSU5JU0g7CiAgICAgICAgfQogICAgICAgIGlmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCkgewogICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gYy5aX09LOwogICAgICAgIH0KICAgICAgICBpZiAoX21vZGUgPT09IGMuWl9TWU5DX0ZMVVNIKSB7CiAgICAgICAgICB0aGlzLm9uRW5kKGMuWl9PSyk7CiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH07CiAgICAgIEluZmxhdGUyLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwogICAgICB9OwogICAgICBJbmZsYXRlMi5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbihzdGF0dXMpIHsKICAgICAgICBpZiAoc3RhdHVzID09PSBjLlpfT0spIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbigiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuZXJyID0gc3RhdHVzOwogICAgICAgIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gaW5mbGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIHZhciBpbmZsYXRvciA9IG5ldyBJbmZsYXRlMihvcHRpb25zKTsKICAgICAgICBpbmZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBpbmZsYXRvci5tc2cgfHwgbXNnW2luZmxhdG9yLmVycl07CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbmZsYXRvci5yZXN1bHQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZVJhdyhpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gaW5mbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuSW5mbGF0ZSA9IEluZmxhdGUyOwogICAgICBleHBvcnRzMi5pbmZsYXRlID0gaW5mbGF0ZTsKICAgICAgZXhwb3J0czIuaW5mbGF0ZVJhdyA9IGluZmxhdGVSYXc7CiAgICAgIGV4cG9ydHMyLnVuZ3ppcCA9IGluZmxhdGU7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9pbmRleC5qcwogIHZhciByZXF1aXJlX3Bha28gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vaW5kZXguanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgYXNzaWduID0gcmVxdWlyZV9jb21tb24oKS5hc3NpZ247CiAgICAgIHZhciBkZWZsYXRlID0gcmVxdWlyZV9kZWZsYXRlMigpOwogICAgICB2YXIgaW5mbGF0ZSA9IHJlcXVpcmVfaW5mbGF0ZTIoKTsKICAgICAgdmFyIGNvbnN0YW50cyA9IHJlcXVpcmVfY29uc3RhbnRzKCk7CiAgICAgIHZhciBwYWtvID0ge307CiAgICAgIGFzc2lnbihwYWtvLCBkZWZsYXRlLCBpbmZsYXRlLCBjb25zdGFudHMpOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBwYWtvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcwogIHZhciByZXF1aXJlX2xvbmcgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vbG9uZ0A0LjAuMC9ub2RlX21vZHVsZXMvbG9uZy9zcmMvbG9uZy5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBMb25nNDsKICAgICAgdmFyIHdhc20gPSBudWxsOwogICAgICB0cnkgewogICAgICAgIHdhc20gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShuZXcgVWludDhBcnJheShbCiAgICAgICAgICAwLAogICAgICAgICAgOTcsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxLAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEzLAogICAgICAgICAgMiwKICAgICAgICAgIDk2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICA5NiwKICAgICAgICAgIDQsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMywKICAgICAgICAgIDcsCiAgICAgICAgICA2LAogICAgICAgICAgMCwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgNiwKICAgICAgICAgIDYsCiAgICAgICAgICAxLAogICAgICAgICAgMTI3LAogICAgICAgICAgMSwKICAgICAgICAgIDY1LAogICAgICAgICAgMCwKICAgICAgICAgIDExLAogICAgICAgICAgNywKICAgICAgICAgIDUwLAogICAgICAgICAgNiwKICAgICAgICAgIDMsCiAgICAgICAgICAxMDksCiAgICAgICAgICAxMTcsCiAgICAgICAgICAxMDgsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDUsCiAgICAgICAgICAxMDAsCiAgICAgICAgICAxMDUsCiAgICAgICAgICAxMTgsCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNSwKICAgICAgICAgIDAsCiAgICAgICAgICAyLAogICAgICAgICAgNSwKICAgICAgICAgIDEwMCwKICAgICAgICAgIDEwNSwKICAgICAgICAgIDExOCwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE3LAogICAgICAgICAgMCwKICAgICAgICAgIDMsCiAgICAgICAgICA1LAogICAgICAgICAgMTE0LAogICAgICAgICAgMTAxLAogICAgICAgICAgMTA5LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMTUsCiAgICAgICAgICAwLAogICAgICAgICAgNCwKICAgICAgICAgIDUsCiAgICAgICAgICAxMTQsCiAgICAgICAgICAxMDEsCiAgICAgICAgICAxMDksCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNywKICAgICAgICAgIDAsCiAgICAgICAgICA1LAogICAgICAgICAgOCwKICAgICAgICAgIDEwMywKICAgICAgICAgIDEwMSwKICAgICAgICAgIDExNiwKICAgICAgICAgIDk1LAogICAgICAgICAgMTA0LAogICAgICAgICAgMTA1LAogICAgICAgICAgMTAzLAogICAgICAgICAgMTA0LAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAxMCwKICAgICAgICAgIDE5MSwKICAgICAgICAgIDEsCiAgICAgICAgICA2LAogICAgICAgICAgNCwKICAgICAgICAgIDAsCiAgICAgICAgICAzNSwKICAgICAgICAgIDAsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyNywKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEyOSwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMSwKICAgICAgICAgIDM2LAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDAsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMzIsCiAgICAgICAgICAyLAogICAgICAgICAgMTczLAogICAgICAgICAgMzIsCiAgICAgICAgICAzLAogICAgICAgICAgMTczLAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNCwKICAgICAgICAgIDEzMiwKICAgICAgICAgIDEzMCwKICAgICAgICAgIDM0LAogICAgICAgICAgNCwKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzUsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAzNiwKICAgICAgICAgIDAsCiAgICAgICAgICAzMiwKICAgICAgICAgIDQsCiAgICAgICAgICAxNjcsCiAgICAgICAgICAxMQogICAgICAgIF0pKSwge30pLmV4cG9ydHM7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgfQogICAgICBmdW5jdGlvbiBMb25nNChsb3csIGhpZ2gsIHVuc2lnbmVkKSB7CiAgICAgICAgdGhpcy5sb3cgPSBsb3cgfCAwOwogICAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggfCAwOwogICAgICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICB9CiAgICAgIExvbmc0LnByb3RvdHlwZS5fX2lzTG9uZ19fOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9uZzQucHJvdG90eXBlLCAiX19pc0xvbmdfXyIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGZ1bmN0aW9uIGlzTG9uZyhvYmopIHsKICAgICAgICByZXR1cm4gKG9iaiAmJiBvYmpbIl9faXNMb25nX18iXSkgPT09IHRydWU7CiAgICAgIH0KICAgICAgTG9uZzQuaXNMb25nID0gaXNMb25nOwogICAgICB2YXIgSU5UX0NBQ0hFID0ge307CiAgICAgIHZhciBVSU5UX0NBQ0hFID0ge307CiAgICAgIGZ1bmN0aW9uIGZyb21JbnQodmFsdWUsIHVuc2lnbmVkKSB7CiAgICAgICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTsKICAgICAgICBpZiAodW5zaWduZWQpIHsKICAgICAgICAgIHZhbHVlID4+Pj0gMDsKICAgICAgICAgIGlmIChjYWNoZSA9IDAgPD0gdmFsdWUgJiYgdmFsdWUgPCAyNTYpIHsKICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCAodmFsdWUgfCAwKSA8IDAgPyAtMSA6IDAsIHRydWUpOwogICAgICAgICAgaWYgKGNhY2hlKQogICAgICAgICAgICBVSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlIHw9IDA7CiAgICAgICAgICBpZiAoY2FjaGUgPSAtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSB7CiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07CiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopCiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTsKICAgICAgICAgIGlmIChjYWNoZSkKICAgICAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIExvbmc0LmZyb21JbnQgPSBmcm9tSW50OwogICAgICBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlLCB1bnNpZ25lZCkgewogICAgICAgIGlmIChpc05hTih2YWx1ZSkpCiAgICAgICAgICByZXR1cm4gdW5zaWduZWQgPyBVWkVSTyA6IFpFUk87CiAgICAgICAgaWYgKHVuc2lnbmVkKSB7CiAgICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpCiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpCiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKQogICAgICAgICAgICByZXR1cm4gTUFYX1ZBTFVFOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwgfCAwLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMIHwgMCwgdW5zaWduZWQpOwogICAgICB9CiAgICAgIExvbmc0LmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyOwogICAgICBmdW5jdGlvbiBmcm9tQml0cyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCk7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbUJpdHMgPSBmcm9tQml0czsKICAgICAgdmFyIHBvd19kYmwgPSBNYXRoLnBvdzsKICAgICAgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkgewogICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImVtcHR5IHN0cmluZyIpOwogICAgICAgIGlmIChzdHIgPT09ICJOYU4iIHx8IHN0ciA9PT0gIkluZmluaXR5IiB8fCBzdHIgPT09ICIrSW5maW5pdHkiIHx8IHN0ciA9PT0gIi1JbmZpbml0eSIpCiAgICAgICAgICByZXR1cm4gWkVSTzsKICAgICAgICBpZiAodHlwZW9mIHVuc2lnbmVkID09PSAibnVtYmVyIikgewogICAgICAgICAgcmFkaXggPSB1bnNpZ25lZCwgdW5zaWduZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5zaWduZWQgPSAhIXVuc2lnbmVkOwogICAgICAgIH0KICAgICAgICByYWRpeCA9IHJhZGl4IHx8IDEwOwogICAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkKICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoInJhZGl4Iik7CiAgICAgICAgdmFyIHA7CiAgICAgICAgaWYgKChwID0gc3RyLmluZGV4T2YoIi0iKSkgPiAwKQogICAgICAgICAgdGhyb3cgRXJyb3IoImludGVyaW9yIGh5cGhlbiIpOwogICAgICAgIGVsc2UgaWYgKHAgPT09IDApIHsKICAgICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHN0ci5zdWJzdHJpbmcoMSksIHVuc2lnbmVkLCByYWRpeCkubmVnKCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTsKICAgICAgICB2YXIgcmVzdWx0ID0gWkVSTzsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkgewogICAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTsKICAgICAgICAgIGlmIChzaXplIDwgOCkgewogICAgICAgICAgICB2YXIgcG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIHNpemUpKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChwb3dlcikuYWRkKGZyb21OdW1iZXIodmFsdWUpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocmFkaXhUb1Bvd2VyKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc3VsdC51bnNpZ25lZCA9IHVuc2lnbmVkOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CiAgICAgIGZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKQogICAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKQogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICJib29sZWFuIiA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTsKICAgICAgfQogICAgICBMb25nNC5mcm9tVmFsdWUgPSBmcm9tVmFsdWU7CiAgICAgIHZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7CiAgICAgIHZhciBUV09fUFdSXzI0X0RCTCA9IDEgPDwgMjQ7CiAgICAgIHZhciBUV09fUFdSXzMyX0RCTCA9IFRXT19QV1JfMTZfREJMICogVFdPX1BXUl8xNl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7CiAgICAgIHZhciBUV09fUFdSXzYzX0RCTCA9IFRXT19QV1JfNjRfREJMIC8gMjsKICAgICAgdmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTsKICAgICAgdmFyIFpFUk8gPSBmcm9tSW50KDApOwogICAgICBMb25nNC5aRVJPID0gWkVSTzsKICAgICAgdmFyIFVaRVJPID0gZnJvbUludCgwLCB0cnVlKTsKICAgICAgTG9uZzQuVVpFUk8gPSBVWkVSTzsKICAgICAgdmFyIE9ORSA9IGZyb21JbnQoMSk7CiAgICAgIExvbmc0Lk9ORSA9IE9ORTsKICAgICAgdmFyIFVPTkUgPSBmcm9tSW50KDEsIHRydWUpOwogICAgICBMb25nNC5VT05FID0gVU9ORTsKICAgICAgdmFyIE5FR19PTkUgPSBmcm9tSW50KC0xKTsKICAgICAgTG9uZzQuTkVHX09ORSA9IE5FR19PTkU7CiAgICAgIHZhciBNQVhfVkFMVUUgPSBmcm9tQml0cyg0Mjk0OTY3Mjk1IHwgMCwgMjE0NzQ4MzY0NyB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFOwogICAgICB2YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoNDI5NDk2NzI5NSB8IDAsIDQyOTQ5NjcyOTUgfCAwLCB0cnVlKTsKICAgICAgTG9uZzQuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFOwogICAgICB2YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMjE0NzQ4MzY0OCB8IDAsIGZhbHNlKTsKICAgICAgTG9uZzQuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFOwogICAgICB2YXIgTG9uZ1Byb3RvdHlwZSA9IExvbmc0LnByb3RvdHlwZTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uIHRvSW50KCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyMigpIHsKICAgICAgICBpZiAodGhpcy51bnNpZ25lZCkKICAgICAgICAgIHJldHVybiAodGhpcy5oaWdoID4+PiAwKSAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcocmFkaXgpIHsKICAgICAgICByYWRpeCA9IHJhZGl4IHx8IDEwOwogICAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkKICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoInJhZGl4Iik7CiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpCiAgICAgICAgICByZXR1cm4gIjAiOwogICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgewogICAgICAgICAgICB2YXIgcmFkaXhMb25nID0gZnJvbU51bWJlcihyYWRpeCksIGRpdiA9IHRoaXMuZGl2KHJhZGl4TG9uZyksIHJlbTEgPSBkaXYubXVsKHJhZGl4TG9uZykuc3ViKHRoaXMpOwogICAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgcmV0dXJuICItIiArIHRoaXMubmVnKCkudG9TdHJpbmcocmFkaXgpOwogICAgICAgIH0KICAgICAgICB2YXIgcmFkaXhUb1Bvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCA2KSwgdGhpcy51bnNpZ25lZCksIHJlbSA9IHRoaXM7CiAgICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLCBpbnR2YWwgPSByZW0uc3ViKHJlbURpdi5tdWwocmFkaXhUb1Bvd2VyKSkudG9JbnQoKSA+Pj4gMCwgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTsKICAgICAgICAgIHJlbSA9IHJlbURpdjsKICAgICAgICAgIGlmIChyZW0uaXNaZXJvKCkpCiAgICAgICAgICAgIHJldHVybiBkaWdpdHMgKyByZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KQogICAgICAgICAgICAgIGRpZ2l0cyA9ICIwIiArIGRpZ2l0czsKICAgICAgICAgICAgcmVzdWx0ID0gIiIgKyBkaWdpdHMgKyByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID4+PiAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldExvd0JpdHMgPSBmdW5jdGlvbiBnZXRMb3dCaXRzKCkgewogICAgICAgIHJldHVybiB0aGlzLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZXRMb3dCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRMb3dCaXRzVW5zaWduZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubG93ID4+PiAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkgewogICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkKICAgICAgICAgIHJldHVybiB0aGlzLmVxKE1JTl9WQUxVRSkgPyA2NCA6IHRoaXMubmVnKCkuZ2V0TnVtQml0c0FicygpOwogICAgICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93OwogICAgICAgIGZvciAodmFyIGJpdCA9IDMxOyBiaXQgPiAwOyBiaXQtLSkKICAgICAgICAgIGlmICgodmFsICYgMSA8PCBiaXQpICE9IDApCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggIT0gMCA/IGJpdCArIDMzIDogYml0ICsgMTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gMCAmJiB0aGlzLmxvdyA9PT0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5lcXogPSBMb25nUHJvdG90eXBlLmlzWmVybzsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc05lZ2F0aXZlID0gZnVuY3Rpb24gaXNOZWdhdGl2ZSgpIHsKICAgICAgICByZXR1cm4gIXRoaXMudW5zaWduZWQgJiYgdGhpcy5oaWdoIDwgMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCB8fCB0aGlzLmhpZ2ggPj0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkKCkgewogICAgICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4oKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICBpZiAodGhpcy51bnNpZ25lZCAhPT0gb3RoZXIudW5zaWduZWQgJiYgdGhpcy5oaWdoID4+PiAzMSA9PT0gMSAmJiBvdGhlci5oaWdoID4+PiAzMSA9PT0gMSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID09PSBvdGhlci5oaWdoICYmIHRoaXMubG93ID09PSBvdGhlci5sb3c7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZXEgPSBMb25nUHJvdG90eXBlLmVxdWFsczsKICAgICAgTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHMgPSBmdW5jdGlvbiBub3RFcXVhbHMob3RoZXIpIHsKICAgICAgICByZXR1cm4gIXRoaXMuZXEob3RoZXIpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm5lcSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzOwogICAgICBMb25nUHJvdG90eXBlLm5lID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7CiAgICAgIExvbmdQcm90b3R5cGUubGVzc1RoYW4gPSBmdW5jdGlvbiBsZXNzVGhhbihvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpIDwgMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5sdCA9IExvbmdQcm90b3R5cGUubGVzc1RoYW47CiAgICAgIExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsID0gZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPD0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5sdGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wKG90aGVyKSA+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ3QgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuOwogICAgICBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbCA9IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuT3JFcXVhbChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpID49IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ3RlID0gTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWw7CiAgICAgIExvbmdQcm90b3R5cGUuZ2UgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICBpZiAodGhpcy5lcShvdGhlcikpCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB2YXIgdGhpc05lZyA9IHRoaXMuaXNOZWdhdGl2ZSgpLCBvdGhlck5lZyA9IG90aGVyLmlzTmVnYXRpdmUoKTsKICAgICAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuIHRoaXMuc3ViKG90aGVyKS5pc05lZ2F0aXZlKCkgPyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIG90aGVyLmhpZ2ggPj4+IDAgPiB0aGlzLmhpZ2ggPj4+IDAgfHwgb3RoZXIuaGlnaCA9PT0gdGhpcy5oaWdoICYmIG90aGVyLmxvdyA+Pj4gMCA+IHRoaXMubG93ID4+PiAwID8gLTEgOiAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmNvbXAgPSBMb25nUHJvdG90eXBlLmNvbXBhcmU7CiAgICAgIExvbmdQcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24gbmVnYXRlKCkgewogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJiB0aGlzLmVxKE1JTl9WQUxVRSkpCiAgICAgICAgICByZXR1cm4gTUlOX1ZBTFVFOwogICAgICAgIHJldHVybiB0aGlzLm5vdCgpLmFkZChPTkUpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm5lZyA9IExvbmdQcm90b3R5cGUubmVnYXRlOwogICAgICBMb25nUHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChhZGRlbmQpIHsKICAgICAgICBpZiAoIWlzTG9uZyhhZGRlbmQpKQogICAgICAgICAgYWRkZW5kID0gZnJvbVZhbHVlKGFkZGVuZCk7CiAgICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGI0OCA9IGFkZGVuZC5oaWdoID4+PiAxNjsKICAgICAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiA2NTUzNTsKICAgICAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGIwMCA9IGFkZGVuZC5sb3cgJiA2NTUzNTsKICAgICAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDsKICAgICAgICBjMDAgKz0gYTAwICsgYjAwOwogICAgICAgIGMxNiArPSBjMDAgPj4+IDE2OwogICAgICAgIGMwMCAmPSA2NTUzNTsKICAgICAgICBjMTYgKz0gYTE2ICsgYjE2OwogICAgICAgIGMzMiArPSBjMTYgPj4+IDE2OwogICAgICAgIGMxNiAmPSA2NTUzNTsKICAgICAgICBjMzIgKz0gYTMyICsgYjMyOwogICAgICAgIGM0OCArPSBjMzIgPj4+IDE2OwogICAgICAgIGMzMiAmPSA2NTUzNTsKICAgICAgICBjNDggKz0gYTQ4ICsgYjQ4OwogICAgICAgIGM0OCAmPSA2NTUzNTsKICAgICAgICByZXR1cm4gZnJvbUJpdHMoYzE2IDw8IDE2IHwgYzAwLCBjNDggPDwgMTYgfCBjMzIsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gc3VidHJhY3Qoc3VidHJhaGVuZCkgewogICAgICAgIGlmICghaXNMb25nKHN1YnRyYWhlbmQpKQogICAgICAgICAgc3VidHJhaGVuZCA9IGZyb21WYWx1ZShzdWJ0cmFoZW5kKTsKICAgICAgICByZXR1cm4gdGhpcy5hZGQoc3VidHJhaGVuZC5uZWcoKSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc3ViID0gTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdDsKICAgICAgTG9uZ1Byb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHsKICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICghaXNMb25nKG11bHRpcGxpZXIpKQogICAgICAgICAgbXVsdGlwbGllciA9IGZyb21WYWx1ZShtdWx0aXBsaWVyKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgdmFyIGxvdyA9IHdhc20ubXVsKHRoaXMubG93LCB0aGlzLmhpZ2gsIG11bHRpcGxpZXIubG93LCBtdWx0aXBsaWVyLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpCiAgICAgICAgICByZXR1cm4gWkVSTzsKICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKQogICAgICAgICAgcmV0dXJuIG11bHRpcGxpZXIuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87CiAgICAgICAgaWYgKG11bHRpcGxpZXIuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgIHJldHVybiB0aGlzLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPOwogICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5tdWwobXVsdGlwbGllci5uZWcoKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyKS5uZWcoKTsKICAgICAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgcmV0dXJuIHRoaXMubXVsKG11bHRpcGxpZXIubmVnKCkpLm5lZygpOwogICAgICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpCiAgICAgICAgICByZXR1cm4gZnJvbU51bWJlcih0aGlzLnRvTnVtYmVyKCkgKiBtdWx0aXBsaWVyLnRvTnVtYmVyKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiA2NTUzNTsKICAgICAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2OwogICAgICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBiNDggPSBtdWx0aXBsaWVyLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiA2NTUzNTsKICAgICAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2OwogICAgICAgIHZhciBiMDAgPSBtdWx0aXBsaWVyLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwOwogICAgICAgIGMwMCArPSBhMDAgKiBiMDA7CiAgICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7CiAgICAgICAgYzAwICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMTYgKiBiMDA7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMDAgKiBiMTY7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMzIgKiBiMDA7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMTYgKiBiMTY7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMDAgKiBiMzI7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGM0OCArPSBhNDggKiBiMDAgKyBhMzIgKiBiMTYgKyBhMTYgKiBiMzIgKyBhMDAgKiBiNDg7CiAgICAgICAgYzQ4ICY9IDY1NTM1OwogICAgICAgIHJldHVybiBmcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubXVsID0gTG9uZ1Byb3RvdHlwZS5tdWx0aXBseTsKICAgICAgTG9uZ1Byb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiBkaXZpZGUoZGl2aXNvcikgewogICAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKQogICAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTsKICAgICAgICBpZiAoZGl2aXNvci5pc1plcm8oKSkKICAgICAgICAgIHRocm93IEVycm9yKCJkaXZpc2lvbiBieSB6ZXJvIik7CiAgICAgICAgaWYgKHdhc20pIHsKICAgICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPT09IC0yMTQ3NDgzNjQ4ICYmIGRpdmlzb3IubG93ID09PSAtMSAmJiBkaXZpc29yLmhpZ2ggPT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5kaXZfdSA6IHdhc20uZGl2X3MpKHRoaXMubG93LCB0aGlzLmhpZ2gsIGRpdmlzb3IubG93LCBkaXZpc29yLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpCiAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICB2YXIgYXBwcm94LCByZW0sIHJlczsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpIHsKICAgICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHsKICAgICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKQogICAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgICAgICByZXR1cm4gT05FOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2YXIgaGFsZlRoaXMgPSB0aGlzLnNocigxKTsKICAgICAgICAgICAgICBhcHByb3ggPSBoYWxmVGhpcy5kaXYoZGl2aXNvcikuc2hsKDEpOwogICAgICAgICAgICAgIGlmIChhcHByb3guZXEoWkVSTykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlbSA9IHRoaXMuc3ViKGRpdmlzb3IubXVsKGFwcHJveCkpOwogICAgICAgICAgICAgICAgcmVzID0gYXBwcm94LmFkZChyZW0uZGl2KGRpdmlzb3IpKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyBVWkVSTyA6IFpFUk87CiAgICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLmRpdihkaXZpc29yLm5lZygpKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IpLm5lZygpOwogICAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2KGRpdmlzb3IubmVnKCkpLm5lZygpOwogICAgICAgICAgcmVzID0gWkVSTzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFkaXZpc29yLnVuc2lnbmVkKQogICAgICAgICAgICBkaXZpc29yID0gZGl2aXNvci50b1Vuc2lnbmVkKCk7CiAgICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzKSkKICAgICAgICAgICAgcmV0dXJuIFVaRVJPOwogICAgICAgICAgaWYgKGRpdmlzb3IuZ3QodGhpcy5zaHJ1KDEpKSkKICAgICAgICAgICAgcmV0dXJuIFVPTkU7CiAgICAgICAgICByZXMgPSBVWkVSTzsKICAgICAgICB9CiAgICAgICAgcmVtID0gdGhpczsKICAgICAgICB3aGlsZSAocmVtLmd0ZShkaXZpc29yKSkgewogICAgICAgICAgYXBwcm94ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihyZW0udG9OdW1iZXIoKSAvIGRpdmlzb3IudG9OdW1iZXIoKSkpOwogICAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSwgZGVsdGEgPSBsb2cyIDw9IDQ4ID8gMSA6IHBvd19kYmwoMiwgbG9nMiAtIDQ4KSwgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gpLCBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpOwogICAgICAgICAgd2hpbGUgKGFwcHJveFJlbS5pc05lZ2F0aXZlKCkgfHwgYXBwcm94UmVtLmd0KHJlbSkpIHsKICAgICAgICAgICAgYXBwcm94IC09IGRlbHRhOwogICAgICAgICAgICBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYXBwcm94UmVzLmlzWmVybygpKQogICAgICAgICAgICBhcHByb3hSZXMgPSBPTkU7CiAgICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7CiAgICAgICAgICByZW0gPSByZW0uc3ViKGFwcHJveFJlbSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZGl2ID0gTG9uZ1Byb3RvdHlwZS5kaXZpZGU7CiAgICAgIExvbmdQcm90b3R5cGUubW9kdWxvID0gZnVuY3Rpb24gbW9kdWxvKGRpdmlzb3IpIHsKICAgICAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSkKICAgICAgICAgIGRpdmlzb3IgPSBmcm9tVmFsdWUoZGl2aXNvcik7CiAgICAgICAgaWYgKHdhc20pIHsKICAgICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20ucmVtX3UgOiB3YXNtLnJlbV9zKSh0aGlzLmxvdywgdGhpcy5oaWdoLCBkaXZpc29yLmxvdywgZGl2aXNvci5oaWdoKTsKICAgICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnN1Yih0aGlzLmRpdihkaXZpc29yKS5tdWwoZGl2aXNvcikpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm1vZCA9IExvbmdQcm90b3R5cGUubW9kdWxvOwogICAgICBMb25nUHJvdG90eXBlLnJlbSA9IExvbmdQcm90b3R5cGUubW9kdWxvOwogICAgICBMb25nUHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uIG5vdCgpIHsKICAgICAgICByZXR1cm4gZnJvbUJpdHMofnRoaXMubG93LCB+dGhpcy5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93ICYgb3RoZXIubG93LCB0aGlzLmhpZ2ggJiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyB8IG90aGVyLmxvdywgdGhpcy5oaWdoIHwgb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyBeIG90aGVyLmxvdywgdGhpcy5oaWdoIF4gb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHsKICAgICAgICBpZiAoaXNMb25nKG51bUJpdHMpKQogICAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTsKICAgICAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZWxzZSBpZiAobnVtQml0cyA8IDMyKQogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsIHRoaXMuaGlnaCA8PCBudW1CaXRzIHwgdGhpcy5sb3cgPj4+IDMyIC0gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKDAsIHRoaXMubG93IDw8IG51bUJpdHMgLSAzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc2hsID0gTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hpZnRSaWdodCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPj4+IG51bUJpdHMgfCB0aGlzLmhpZ2ggPDwgMzIgLSBudW1CaXRzLCB0aGlzLmhpZ2ggPj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCA+PiBudW1CaXRzIC0gMzIsIHRoaXMuaGlnaCA+PSAwID8gMCA6IC0xLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaHIgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkID0gZnVuY3Rpb24gc2hpZnRSaWdodFVuc2lnbmVkKG51bUJpdHMpIHsKICAgICAgICBpZiAoaXNMb25nKG51bUJpdHMpKQogICAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTsKICAgICAgICBudW1CaXRzICY9IDYzOwogICAgICAgIGlmIChudW1CaXRzID09PSAwKQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgaGlnaCA9IHRoaXMuaGlnaDsKICAgICAgICAgIGlmIChudW1CaXRzIDwgMzIpIHsKICAgICAgICAgICAgdmFyIGxvdyA9IHRoaXMubG93OwogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93ID4+PiBudW1CaXRzIHwgaGlnaCA8PCAzMiAtIG51bUJpdHMsIGhpZ2ggPj4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpOwogICAgICAgICAgfSBlbHNlIGlmIChudW1CaXRzID09PSAzMikKICAgICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGhpZ2gsIDAsIHRoaXMudW5zaWduZWQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCA+Pj4gbnVtQml0cyAtIDMyLCAwLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc2hydSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkOwogICAgICBMb25nUHJvdG90eXBlLnNocl91ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7CiAgICAgIExvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgZmFsc2UpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvVW5zaWduZWQgPSBmdW5jdGlvbiB0b1Vuc2lnbmVkKCkgewogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93LCB0aGlzLmhpZ2gsIHRydWUpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKGxlKSB7CiAgICAgICAgcmV0dXJuIGxlID8gdGhpcy50b0J5dGVzTEUoKSA6IHRoaXMudG9CeXRlc0JFKCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0xFID0gZnVuY3Rpb24gdG9CeXRlc0xFKCkgewogICAgICAgIHZhciBoaSA9IHRoaXMuaGlnaCwgbG8gPSB0aGlzLmxvdzsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgbG8gJiAyNTUsCiAgICAgICAgICBsbyA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGxvID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGxvID4+PiAyNCwKICAgICAgICAgIGhpICYgMjU1LAogICAgICAgICAgaGkgPj4+IDggJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gMTYgJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gMjQKICAgICAgICBdOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvQnl0ZXNCRSA9IGZ1bmN0aW9uIHRvQnl0ZXNCRSgpIHsKICAgICAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsIGxvID0gdGhpcy5sb3c7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGhpID4+PiAyNCwKICAgICAgICAgIGhpID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGhpID4+PiA4ICYgMjU1LAogICAgICAgICAgaGkgJiAyNTUsCiAgICAgICAgICBsbyA+Pj4gMjQsCiAgICAgICAgICBsbyA+Pj4gMTYgJiAyNTUsCiAgICAgICAgICBsbyA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGxvICYgMjU1CiAgICAgICAgXTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzID0gZnVuY3Rpb24gZnJvbUJ5dGVzMihieXRlcywgdW5zaWduZWQsIGxlKSB7CiAgICAgICAgcmV0dXJuIGxlID8gTG9uZzQuZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSA6IExvbmc0LmZyb21CeXRlc0JFKGJ5dGVzLCB1bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmc0LmZyb21CeXRlc0xFID0gZnVuY3Rpb24gZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMb25nNChieXRlc1swXSB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzNdIDw8IDI0LCBieXRlc1s0XSB8IGJ5dGVzWzVdIDw8IDggfCBieXRlc1s2XSA8PCAxNiB8IGJ5dGVzWzddIDw8IDI0LCB1bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmc0LmZyb21CeXRlc0JFID0gZnVuY3Rpb24gZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMb25nNChieXRlc1s0XSA8PCAyNCB8IGJ5dGVzWzVdIDw8IDE2IHwgYnl0ZXNbNl0gPDwgOCB8IGJ5dGVzWzddLCBieXRlc1swXSA8PCAyNCB8IGJ5dGVzWzFdIDw8IDE2IHwgYnl0ZXNbMl0gPDwgOCB8IGJ5dGVzWzNdLCB1bnNpZ25lZCk7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfaXNfb2JzZXJ2YWJsZSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9pcy1vYnNlcnZhYmxlQDIuMS4wL25vZGVfbW9kdWxlcy9pcy1vYnNlcnZhYmxlL2luZGV4LmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgbW9kdWxlMi5leHBvcnRzID0gKHZhbHVlKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFN5bWJvbC5vYnNlcnZhYmxlID09PSAic3ltYm9sIiAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLm9ic2VydmFibGVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlW1N5bWJvbC5vYnNlcnZhYmxlXSgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHZhbHVlWyJAQG9ic2VydmFibGUiXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVsiQEBvYnNlcnZhYmxlIl0oKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzCiAgdmFyIHJlcXVpcmVfc2VyaWFsaXplcnMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3NlcmlhbGl6ZXJzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLkRlZmF1bHRTZXJpYWxpemVyID0gZXhwb3J0czIuZXh0ZW5kU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VyaWFsaXplcihleHRlbmQsIGltcGxlbWVudGF0aW9uKSB7CiAgICAgICAgY29uc3QgZmFsbGJhY2tEZXNlcmlhbGl6ZXIgPSBleHRlbmQuZGVzZXJpYWxpemUuYmluZChleHRlbmQpOwogICAgICAgIGNvbnN0IGZhbGxiYWNrU2VyaWFsaXplciA9IGV4dGVuZC5zZXJpYWxpemUuYmluZChleHRlbmQpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5kZXNlcmlhbGl6ZShtZXNzYWdlLCBmYWxsYmFja0Rlc2VyaWFsaXplcik7CiAgICAgICAgICB9LAogICAgICAgICAgc2VyaWFsaXplKGlucHV0KSB7CiAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5zZXJpYWxpemUoaW5wdXQsIGZhbGxiYWNrU2VyaWFsaXplcik7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICBleHBvcnRzMi5leHRlbmRTZXJpYWxpemVyID0gZXh0ZW5kU2VyaWFsaXplcjsKICAgICAgdmFyIERlZmF1bHRFcnJvclNlcmlhbGl6ZXIgPSB7CiAgICAgICAgZGVzZXJpYWxpemUobWVzc2FnZSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oRXJyb3IobWVzc2FnZS5tZXNzYWdlKSwgewogICAgICAgICAgICBuYW1lOiBtZXNzYWdlLm5hbWUsCiAgICAgICAgICAgIHN0YWNrOiBtZXNzYWdlLnN0YWNrCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZShlcnJvcikgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgX19lcnJvcl9tYXJrZXI6ICIkJGVycm9yIiwKICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwKICAgICAgICAgICAgbmFtZTogZXJyb3IubmFtZSwKICAgICAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGlzU2VyaWFsaXplZEVycm9yID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmICJfX2Vycm9yX21hcmtlciIgaW4gdGhpbmcgJiYgdGhpbmcuX19lcnJvcl9tYXJrZXIgPT09ICIkJGVycm9yIjsKICAgICAgZXhwb3J0czIuRGVmYXVsdFNlcmlhbGl6ZXIgPSB7CiAgICAgICAgZGVzZXJpYWxpemUobWVzc2FnZSkgewogICAgICAgICAgaWYgKGlzU2VyaWFsaXplZEVycm9yKG1lc3NhZ2UpKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLmRlc2VyaWFsaXplKG1lc3NhZ2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXJyb3JTZXJpYWxpemVyLnNlcmlhbGl6ZShpbnB1dCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L2NvbW1vbi5qcwogIHZhciByZXF1aXJlX2NvbW1vbjIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L2NvbW1vbi5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5zZXJpYWxpemUgPSBleHBvcnRzMi5kZXNlcmlhbGl6ZSA9IGV4cG9ydHMyLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIHNlcmlhbGl6ZXJzXzEgPSByZXF1aXJlX3NlcmlhbGl6ZXJzKCk7CiAgICAgIHZhciByZWdpc3RlcmVkU2VyaWFsaXplciA9IHNlcmlhbGl6ZXJzXzEuRGVmYXVsdFNlcmlhbGl6ZXI7CiAgICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2VyaWFsaXplcjIoc2VyaWFsaXplcikgewogICAgICAgIHJlZ2lzdGVyZWRTZXJpYWxpemVyID0gc2VyaWFsaXplcnNfMS5leHRlbmRTZXJpYWxpemVyKHJlZ2lzdGVyZWRTZXJpYWxpemVyLCBzZXJpYWxpemVyKTsKICAgICAgfQogICAgICBleHBvcnRzMi5yZWdpc3RlclNlcmlhbGl6ZXIgPSByZWdpc3RlclNlcmlhbGl6ZXIyOwogICAgICBmdW5jdGlvbiBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmRlc2VyaWFsaXplID0gZGVzZXJpYWxpemU7CiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZShpbnB1dCkgewogICAgICAgIHJldHVybiByZWdpc3RlcmVkU2VyaWFsaXplci5zZXJpYWxpemUoaW5wdXQpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC9zeW1ib2xzLmpzCiAgdmFyIHJlcXVpcmVfc3ltYm9scyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc3ltYm9scy5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi4kd29ya2VyID0gZXhwb3J0czIuJHRyYW5zZmVyYWJsZSA9IGV4cG9ydHMyLiR0ZXJtaW5hdGUgPSBleHBvcnRzMi4kZXZlbnRzID0gZXhwb3J0czIuJGVycm9ycyA9IHZvaWQgMDsKICAgICAgZXhwb3J0czIuJGVycm9ycyA9IFN5bWJvbCgidGhyZWFkLmVycm9ycyIpOwogICAgICBleHBvcnRzMi4kZXZlbnRzID0gU3ltYm9sKCJ0aHJlYWQuZXZlbnRzIik7CiAgICAgIGV4cG9ydHMyLiR0ZXJtaW5hdGUgPSBTeW1ib2woInRocmVhZC50ZXJtaW5hdGUiKTsKICAgICAgZXhwb3J0czIuJHRyYW5zZmVyYWJsZSA9IFN5bWJvbCgidGhyZWFkLnRyYW5zZmVyYWJsZSIpOwogICAgICBleHBvcnRzMi4kd29ya2VyID0gU3ltYm9sKCJ0aHJlYWQud29ya2VyIik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvdHJhbnNmZXJhYmxlLmpzCiAgdmFyIHJlcXVpcmVfdHJhbnNmZXJhYmxlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90cmFuc2ZlcmFibGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuVHJhbnNmZXIgPSBleHBvcnRzMi5pc1RyYW5zZmVyRGVzY3JpcHRvciA9IHZvaWQgMDsKICAgICAgdmFyIHN5bWJvbHNfMSA9IHJlcXVpcmVfc3ltYm9scygpOwogICAgICBmdW5jdGlvbiBpc1RyYW5zZmVyYWJsZSh0aGluZykgewogICAgICAgIGlmICghdGhpbmcgfHwgdHlwZW9mIHRoaW5nICE9PSAib2JqZWN0IikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpc1RyYW5zZmVyRGVzY3JpcHRvcih0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmIHRoaW5nW3N5bWJvbHNfMS4kdHJhbnNmZXJhYmxlXTsKICAgICAgfQogICAgICBleHBvcnRzMi5pc1RyYW5zZmVyRGVzY3JpcHRvciA9IGlzVHJhbnNmZXJEZXNjcmlwdG9yOwogICAgICBmdW5jdGlvbiBUcmFuc2ZlcjIocGF5bG9hZCwgdHJhbnNmZXJhYmxlcykgewogICAgICAgIGlmICghdHJhbnNmZXJhYmxlcykgewogICAgICAgICAgaWYgKCFpc1RyYW5zZmVyYWJsZShwYXlsb2FkKSkKICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTsKICAgICAgICAgIHRyYW5zZmVyYWJsZXMgPSBbcGF5bG9hZF07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBbc3ltYm9sc18xLiR0cmFuc2ZlcmFibGVdOiB0cnVlLAogICAgICAgICAgc2VuZDogcGF5bG9hZCwKICAgICAgICAgIHRyYW5zZmVyYWJsZXMKICAgICAgICB9OwogICAgICB9CiAgICAgIGV4cG9ydHMyLlRyYW5zZmVyID0gVHJhbnNmZXIyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzCiAgdmFyIHJlcXVpcmVfbWVzc2FnZXMyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90eXBlcy9tZXNzYWdlcy5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5Xb3JrZXJNZXNzYWdlVHlwZSA9IGV4cG9ydHMyLk1hc3Rlck1lc3NhZ2VUeXBlID0gdm9pZCAwOwogICAgICB2YXIgTWFzdGVyTWVzc2FnZVR5cGU7CiAgICAgIChmdW5jdGlvbihNYXN0ZXJNZXNzYWdlVHlwZTIpIHsKICAgICAgICBNYXN0ZXJNZXNzYWdlVHlwZTJbImNhbmNlbCJdID0gImNhbmNlbCI7CiAgICAgICAgTWFzdGVyTWVzc2FnZVR5cGUyWyJydW4iXSA9ICJydW4iOwogICAgICB9KShNYXN0ZXJNZXNzYWdlVHlwZSA9IGV4cG9ydHMyLk1hc3Rlck1lc3NhZ2VUeXBlIHx8IChleHBvcnRzMi5NYXN0ZXJNZXNzYWdlVHlwZSA9IHt9KSk7CiAgICAgIHZhciBXb3JrZXJNZXNzYWdlVHlwZTsKICAgICAgKGZ1bmN0aW9uKFdvcmtlck1lc3NhZ2VUeXBlMikgewogICAgICAgIFdvcmtlck1lc3NhZ2VUeXBlMlsiZXJyb3IiXSA9ICJlcnJvciI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJpbml0Il0gPSAiaW5pdCI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJyZXN1bHQiXSA9ICJyZXN1bHQiOwogICAgICAgIFdvcmtlck1lc3NhZ2VUeXBlMlsicnVubmluZyJdID0gInJ1bm5pbmciOwogICAgICAgIFdvcmtlck1lc3NhZ2VUeXBlMlsidW5jYXVnaHRFcnJvciJdID0gInVuY2F1Z2h0RXJyb3IiOwogICAgICB9KShXb3JrZXJNZXNzYWdlVHlwZSA9IGV4cG9ydHMyLldvcmtlck1lc3NhZ2VUeXBlIHx8IChleHBvcnRzMi5Xb3JrZXJNZXNzYWdlVHlwZSA9IHt9KSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvd29ya2VyL2ltcGxlbWVudGF0aW9uLmJyb3dzZXIuanMKICB2YXIgcmVxdWlyZV9pbXBsZW1lbnRhdGlvbl9icm93c2VyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW1wbGVtZW50YXRpb24uYnJvd3Nlci5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgaXNXb3JrZXJSdW50aW1lID0gZnVuY3Rpb24gaXNXb3JrZXJSdW50aW1lMigpIHsKICAgICAgICBjb25zdCBpc1dpbmRvd0NvbnRleHQgPSB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdpbmRvdzsKICAgICAgICByZXR1cm4gdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiICYmIHNlbGYucG9zdE1lc3NhZ2UgJiYgIWlzV2luZG93Q29udGV4dCA/IHRydWUgOiBmYWxzZTsKICAgICAgfTsKICAgICAgdmFyIHBvc3RNZXNzYWdlVG9NYXN0ZXIgPSBmdW5jdGlvbiBwb3N0TWVzc2FnZVRvTWFzdGVyMihkYXRhLCB0cmFuc2Zlckxpc3QpIHsKICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGRhdGEsIHRyYW5zZmVyTGlzdCk7CiAgICAgIH07CiAgICAgIHZhciBzdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzID0gZnVuY3Rpb24gc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlczIob25NZXNzYWdlKSB7CiAgICAgICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSAobWVzc2FnZUV2ZW50KSA9PiB7CiAgICAgICAgICBvbk1lc3NhZ2UobWVzc2FnZUV2ZW50LmRhdGEpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgICAgICBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBtZXNzYWdlSGFuZGxlcik7CiAgICAgICAgfTsKICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBtZXNzYWdlSGFuZGxlcik7CiAgICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlOwogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gewogICAgICAgIGlzV29ya2VyUnVudGltZSwKICAgICAgICBwb3N0TWVzc2FnZVRvTWFzdGVyLAogICAgICAgIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW5kZXguanMKICB2YXIgcmVxdWlyZV93b3JrZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2F3YWl0ZXIgPSBleHBvcnRzMiAmJiBleHBvcnRzMi5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgewogICAgICAgICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMyICYmIGV4cG9ydHMyLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyAiZGVmYXVsdCI6IG1vZCB9OwogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuZXhwb3NlID0gZXhwb3J0czIuaXNXb3JrZXJSdW50aW1lID0gZXhwb3J0czIuVHJhbnNmZXIgPSBleHBvcnRzMi5yZWdpc3RlclNlcmlhbGl6ZXIgPSB2b2lkIDA7CiAgICAgIHZhciBpc19vYnNlcnZhYmxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZV9pc19vYnNlcnZhYmxlKCkpOwogICAgICB2YXIgY29tbW9uXzEgPSByZXF1aXJlX2NvbW1vbjIoKTsKICAgICAgdmFyIHRyYW5zZmVyYWJsZV8xID0gcmVxdWlyZV90cmFuc2ZlcmFibGUoKTsKICAgICAgdmFyIG1lc3NhZ2VzXzEgPSByZXF1aXJlX21lc3NhZ2VzMigpOwogICAgICB2YXIgaW1wbGVtZW50YXRpb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2ltcGxlbWVudGF0aW9uX2Jyb3dzZXIoKSk7CiAgICAgIHZhciBjb21tb25fMiA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJyZWdpc3RlclNlcmlhbGl6ZXIiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGNvbW1vbl8yLnJlZ2lzdGVyU2VyaWFsaXplcjsKICAgICAgfSB9KTsKICAgICAgdmFyIHRyYW5zZmVyYWJsZV8yID0gcmVxdWlyZV90cmFuc2ZlcmFibGUoKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiVHJhbnNmZXIiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZV8yLlRyYW5zZmVyOwogICAgICB9IH0pOwogICAgICBleHBvcnRzMi5pc1dvcmtlclJ1bnRpbWUgPSBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuaXNXb3JrZXJSdW50aW1lOwogICAgICB2YXIgZXhwb3NlQ2FsbGVkID0gZmFsc2U7CiAgICAgIHZhciBhY3RpdmVTdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpOwogICAgICB2YXIgaXNNYXN0ZXJKb2JDYW5jZWxNZXNzYWdlID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0aGluZy50eXBlID09PSBtZXNzYWdlc18xLk1hc3Rlck1lc3NhZ2VUeXBlLmNhbmNlbDsKICAgICAgdmFyIGlzTWFzdGVySm9iUnVuTWVzc2FnZSA9ICh0aGluZykgPT4gdGhpbmcgJiYgdGhpbmcudHlwZSA9PT0gbWVzc2FnZXNfMS5NYXN0ZXJNZXNzYWdlVHlwZS5ydW47CiAgICAgIHZhciBpc09ic2VydmFibGUgPSAodGhpbmcpID0+IGlzX29ic2VydmFibGVfMS5kZWZhdWx0KHRoaW5nKSB8fCBpc1plbk9ic2VydmFibGUodGhpbmcpOwogICAgICBmdW5jdGlvbiBpc1plbk9ic2VydmFibGUodGhpbmcpIHsKICAgICAgICByZXR1cm4gdGhpbmcgJiYgdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiAmJiB0eXBlb2YgdGhpbmcuc3Vic2NyaWJlID09PSAiZnVuY3Rpb24iOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlY29uc3RydWN0VHJhbnNmZXIodGhpbmcpIHsKICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlXzEuaXNUcmFuc2ZlckRlc2NyaXB0b3IodGhpbmcpID8geyBwYXlsb2FkOiB0aGluZy5zZW5kLCB0cmFuc2ZlcmFibGVzOiB0aGluZy50cmFuc2ZlcmFibGVzIH0gOiB7IHBheWxvYWQ6IHRoaW5nLCB0cmFuc2ZlcmFibGVzOiB2b2lkIDAgfTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0RnVuY3Rpb25Jbml0TWVzc2FnZSgpIHsKICAgICAgICBjb25zdCBpbml0TWVzc2FnZSA9IHsKICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUuaW5pdCwKICAgICAgICAgIGV4cG9zZWQ6IHsKICAgICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoaW5pdE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RNb2R1bGVJbml0TWVzc2FnZShtZXRob2ROYW1lcykgewogICAgICAgIGNvbnN0IGluaXRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5pbml0LAogICAgICAgICAgZXhwb3NlZDogewogICAgICAgICAgICB0eXBlOiAibW9kdWxlIiwKICAgICAgICAgICAgbWV0aG9kczogbWV0aG9kTmFtZXMKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5wb3N0TWVzc2FnZVRvTWFzdGVyKGluaXRNZXNzYWdlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0Sm9iRXJyb3JNZXNzYWdlKHVpZCwgcmF3RXJyb3IpIHsKICAgICAgICBjb25zdCB7IHBheWxvYWQ6IGVycm9yLCB0cmFuc2ZlcmFibGVzIH0gPSBkZWNvbnN0cnVjdFRyYW5zZmVyKHJhd0Vycm9yKTsKICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLmVycm9yLAogICAgICAgICAgdWlkLAogICAgICAgICAgZXJyb3I6IGNvbW1vbl8xLnNlcmlhbGl6ZShlcnJvcikKICAgICAgICB9OwogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5wb3N0TWVzc2FnZVRvTWFzdGVyKGVycm9yTWVzc2FnZSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdEpvYlJlc3VsdE1lc3NhZ2UodWlkLCBjb21wbGV0ZWQsIHJlc3VsdFZhbHVlKSB7CiAgICAgICAgY29uc3QgeyBwYXlsb2FkLCB0cmFuc2ZlcmFibGVzIH0gPSBkZWNvbnN0cnVjdFRyYW5zZmVyKHJlc3VsdFZhbHVlKTsKICAgICAgICBjb25zdCByZXN1bHRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5yZXN1bHQsCiAgICAgICAgICB1aWQsCiAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGVkID8gdHJ1ZSA6IHZvaWQgMCwKICAgICAgICAgIHBheWxvYWQKICAgICAgICB9OwogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5wb3N0TWVzc2FnZVRvTWFzdGVyKHJlc3VsdE1lc3NhZ2UsIHRyYW5zZmVyYWJsZXMpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RKb2JTdGFydE1lc3NhZ2UodWlkLCByZXN1bHRUeXBlKSB7CiAgICAgICAgY29uc3Qgc3RhcnRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5ydW5uaW5nLAogICAgICAgICAgdWlkLAogICAgICAgICAgcmVzdWx0VHlwZQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoc3RhcnRNZXNzYWdlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gewogICAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnVuY2F1Z2h0RXJyb3IsCiAgICAgICAgICAgIGVycm9yOiBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpCiAgICAgICAgICB9OwogICAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoZXJyb3JNZXNzYWdlKTsKICAgICAgICB9IGNhdGNoIChzdWJFcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcigiTm90IHJlcG9ydGluZyB1bmNhdWdodCBlcnJvciBiYWNrIHRvIG1hc3RlciB0aHJlYWQgYXMgaXQgb2NjdXJlZCB3aGlsZSByZXBvcnRpbmcgYW4gdW5jYXVnaHQgZXJyb3IgYWxyZWFkeS5cbkxhdGVzdCBlcnJvcjoiLCBzdWJFcnJvciwgIlxuT3JpZ2luYWwgZXJyb3I6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBydW5GdW5jdGlvbihqb2JVSUQsIGZuLCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsKICAgICAgICAgIGxldCBzeW5jUmVzdWx0OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc3luY1Jlc3VsdCA9IGZuKC4uLmFyZ3MpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgcmV0dXJuIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHRUeXBlID0gaXNPYnNlcnZhYmxlKHN5bmNSZXN1bHQpID8gIm9ic2VydmFibGUiIDogInByb21pc2UiOwogICAgICAgICAgcG9zdEpvYlN0YXJ0TWVzc2FnZShqb2JVSUQsIHJlc3VsdFR5cGUpOwogICAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShzeW5jUmVzdWx0KSkgewogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzeW5jUmVzdWx0LnN1YnNjcmliZSgodmFsdWUpID0+IHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgZmFsc2UsIGNvbW1vbl8xLnNlcmlhbGl6ZSh2YWx1ZSkpLCAoZXJyb3IpID0+IHsKICAgICAgICAgICAgICBwb3N0Sm9iRXJyb3JNZXNzYWdlKGpvYlVJRCwgY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKSk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfSwgKCkgPT4gewogICAgICAgICAgICAgIHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgdHJ1ZSk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGFjdGl2ZVN1YnNjcmlwdGlvbnMuc2V0KGpvYlVJRCwgc3Vic2NyaXB0aW9uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgc3luY1Jlc3VsdDsKICAgICAgICAgICAgICBwb3N0Sm9iUmVzdWx0TWVzc2FnZShqb2JVSUQsIHRydWUsIGNvbW1vbl8xLnNlcmlhbGl6ZShyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICBwb3N0Sm9iRXJyb3JNZXNzYWdlKGpvYlVJRCwgY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBleHBvc2UyKGV4cG9zZWQpIHsKICAgICAgICBpZiAoIWltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWUoKSkgewogICAgICAgICAgdGhyb3cgRXJyb3IoImV4cG9zZSgpIGNhbGxlZCBpbiB0aGUgbWFzdGVyIHRocmVhZC4iKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cG9zZUNhbGxlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoImV4cG9zZSgpIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4gVGhpcyBpcyBub3QgcG9zc2libGUuIFBhc3MgYW4gb2JqZWN0IHRvIGV4cG9zZSgpIGlmIHlvdSB3YW50IHRvIGV4cG9zZSBtdWx0aXBsZSBmdW5jdGlvbnMuIik7CiAgICAgICAgfQogICAgICAgIGV4cG9zZUNhbGxlZCA9IHRydWU7CiAgICAgICAgaWYgKHR5cGVvZiBleHBvc2VkID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcygobWVzc2FnZURhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGlzTWFzdGVySm9iUnVuTWVzc2FnZShtZXNzYWdlRGF0YSkgJiYgIW1lc3NhZ2VEYXRhLm1ldGhvZCkgewogICAgICAgICAgICAgIHJ1bkZ1bmN0aW9uKG1lc3NhZ2VEYXRhLnVpZCwgZXhwb3NlZCwgbWVzc2FnZURhdGEuYXJncy5tYXAoY29tbW9uXzEuZGVzZXJpYWxpemUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBwb3N0RnVuY3Rpb25Jbml0TWVzc2FnZSgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9zZWQgPT09ICJvYmplY3QiICYmIGV4cG9zZWQpIHsKICAgICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgICBpZiAoaXNNYXN0ZXJKb2JSdW5NZXNzYWdlKG1lc3NhZ2VEYXRhKSAmJiBtZXNzYWdlRGF0YS5tZXRob2QpIHsKICAgICAgICAgICAgICBydW5GdW5jdGlvbihtZXNzYWdlRGF0YS51aWQsIGV4cG9zZWRbbWVzc2FnZURhdGEubWV0aG9kXSwgbWVzc2FnZURhdGEuYXJncy5tYXAoY29tbW9uXzEuZGVzZXJpYWxpemUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lcyA9IE9iamVjdC5rZXlzKGV4cG9zZWQpLmZpbHRlcigoa2V5KSA9PiB0eXBlb2YgZXhwb3NlZFtrZXldID09PSAiZnVuY3Rpb24iKTsKICAgICAgICAgIHBvc3RNb2R1bGVJbml0TWVzc2FnZShtZXRob2ROYW1lcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHBvc2UoKS4gRXhwZWN0ZWQgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QsIGdvdDogJHtleHBvc2VkfWApOwogICAgICAgIH0KICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcygobWVzc2FnZURhdGEpID0+IHsKICAgICAgICAgIGlmIChpc01hc3RlckpvYkNhbmNlbE1lc3NhZ2UobWVzc2FnZURhdGEpKSB7CiAgICAgICAgICAgIGNvbnN0IGpvYlVJRCA9IG1lc3NhZ2VEYXRhLnVpZDsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gYWN0aXZlU3Vic2NyaXB0aW9ucy5nZXQoam9iVUlEKTsKICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikgewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIGFjdGl2ZVN1YnNjcmlwdGlvbnMuZGVsZXRlKGpvYlVJRCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBleHBvcnRzMi5leHBvc2UgPSBleHBvc2UyOwogICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBzZWxmLmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIgJiYgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIChldmVudCkgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IgfHwgZXZlbnQpLCAyNTApOwogICAgICAgIH0pOwogICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGV2ZW50LnJlYXNvbjsKICAgICAgICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpLCAyNTApOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHByb2Nlc3Mub24gPT09ICJmdW5jdGlvbiIgJiYgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgcHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLCAoZXJyb3IpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFVuY2F1Z2h0RXJyb3JNZXNzYWdlKGVycm9yKSwgMjUwKTsKICAgICAgICB9KTsKICAgICAgICBwcm9jZXNzLm9uKCJ1bmhhbmRsZWRSZWplY3Rpb24iLCAoZXJyb3IpID0+IHsKICAgICAgICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpLCAyNTApOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIHNyYy9kYXRhLWZldGNoZXJzL3ZjZi92Y2Ytd29ya2VyLnRzP3dvcmtlciZpbmxpbmU/d29ya2VyX2ZpbGUKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3RhYml4SW5kZXhlZEZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9hYm9ydGFibGVfcHJvbWlzZV9jYWNoZSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9lc20oKSk7CiAgdmFyIGltcG9ydF9xdWlja19scnUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfcXVpY2tfbHJ1KCkpOwogIHZhciBpbXBvcnRfYnVmZmVyNyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vaW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9sb2NhbEZpbGUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9jYWxGaWxlKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL3JlbW90ZUZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXIyID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKICB2YXIgUmVtb3RlRmlsZSA9IGNsYXNzIHsKICAgIGFzeW5jIGdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSkgewogICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmJ1ZmZlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiByZXNwb25zZS5idWZmZXIoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2UuYXJyYXlCdWZmZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTsKICAgICAgICByZXR1cm4gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmZyb20ocmVzcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBIVFRQIHJlc3BvbnNlIG9iamVjdCwgaGFzIG5vIGJ1ZmZlciBtZXRob2QsIGFuZCBubyBhcnJheUJ1ZmZlciBtZXRob2QiKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRzID0ge30pIHsKICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0ge307CiAgICAgIHRoaXMudXJsID0gc291cmNlOwogICAgICBjb25zdCBmZXRjaCA9IG9wdHMuZmV0Y2ggfHwgZ2xvYmFsVGhpcy5mZXRjaC5iaW5kKGdsb2JhbFRoaXMpOwogICAgICBpZiAoIWZldGNoKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgbm8gZmV0Y2ggZnVuY3Rpb24gc3VwcGxpZWQsIGFuZCBub25lIGZvdW5kIGluIGdsb2JhbCBlbnZpcm9ubWVudGApOwogICAgICB9CiAgICAgIGlmIChvcHRzLm92ZXJyaWRlcykgewogICAgICAgIHRoaXMuYmFzZU92ZXJyaWRlcyA9IG9wdHMub3ZlcnJpZGVzOwogICAgICB9CiAgICAgIHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbiA9IGZldGNoOwogICAgfQogICAgYXN5bmMgZmV0Y2goaW5wdXQsIGluaXQyKSB7CiAgICAgIGxldCByZXNwb25zZTsKICAgICAgdHJ5IHsKICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgaW5pdDIpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgaWYgKGAke2V9YC5pbmNsdWRlcygiRmFpbGVkIHRvIGZldGNoIikpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgZ2VuZXJpYy1maWxlaGFuZGxlOiByZWZldGNoaW5nICR7aW5wdXR9IHRvIGF0dGVtcHQgdG8gd29yayBhcm91bmQgY2hyb21lIENPUlMgaGVhZGVyIGNhY2hpbmcgYnVnYCk7CiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbihpbnB1dCwgewogICAgICAgICAgICAuLi5pbml0MiwKICAgICAgICAgICAgY2FjaGU6ICJyZWxvYWQiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQogICAgYXN5bmMgcmVhZChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgJiYgcG9zaXRpb24gPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIke3RoaXMudXJsfSBmZXRjaCByZXR1cm5lZCBzdGF0dXMgMjAwLCBleHBlY3RlZCAyMDYiKTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZldGNoaW5nICR7dGhpcy51cmx9YCk7CiAgICB9CiAgICBhc3luYyByZWFkRmlsZShvcHRpb25zID0ge30pIHsKICAgICAgbGV0IGVuY29kaW5nOwogICAgICBsZXQgb3B0czsKICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIikgewogICAgICAgIGVuY29kaW5nID0gb3B0aW9uczsKICAgICAgICBvcHRzID0ge307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nOwogICAgICAgIG9wdHMgPSBvcHRpb25zOwogICAgICAgIGRlbGV0ZSBvcHRzLmVuY29kaW5nOwogICAgICB9CiAgICAgIGNvbnN0IHsgaGVhZGVycyA9IHt9LCBzaWduYWwsIG92ZXJyaWRlcyA9IHt9IH0gPSBvcHRzOwogICAgICBjb25zdCBhcmdzID0gewogICAgICAgIGhlYWRlcnMsCiAgICAgICAgbWV0aG9kOiAiR0VUIiwKICAgICAgICByZWRpcmVjdDogImZvbGxvdyIsCiAgICAgICAgbW9kZTogImNvcnMiLAogICAgICAgIHNpZ25hbCwKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdlbmVyaWMtZmlsZWhhbmRsZSBmYWlsZWQgdG8gZmV0Y2giKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZmV0Y2hpbmcgJHt0aGlzLnVybH1gKSwgewogICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IikgewogICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBlbmNvZGluZzogJHtlbmNvZGluZ31gKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJGcm9tUmVzcG9uc2UocmVzcG9uc2UpOwogICAgfQogICAgYXN5bmMgc3RhdCgpIHsKICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgY29uc3QgYnVmID0gaW1wb3J0X2J1ZmZlcjIuQnVmZmVyLmFsbG9jVW5zYWZlKDEwKTsKICAgICAgICBhd2FpdCB0aGlzLnJlYWQoYnVmLCAwLCAxMCwgMCk7CiAgICAgICAgaWYgKCF0aGlzLl9zdGF0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBkZXRlcm1pbmUgc2l6ZSBvZiBmaWxlIGF0ICR7dGhpcy51cmx9YCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zdGF0OwogICAgfQogICAgYXN5bmMgY2xvc2UoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2Jsb2JGaWxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyMyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vZmlsZWhhbmRsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9iZ3pGaWxlaGFuZGxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNiA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiZ3pmLWZpbGVoYW5kbGVAMS40Ljcvbm9kZV9tb2R1bGVzL0BnbW9kL2JnemYtZmlsZWhhbmRsZS9lc20vdW56aXAtcGFrby5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjQgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwogIHZhciBpbXBvcnRfcGFrbyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9wYWtvKCkpOwogIGFzeW5jIGZ1bmN0aW9uIHVuemlwKGlucHV0RGF0YSkgewogICAgdHJ5IHsKICAgICAgbGV0IHN0cm07CiAgICAgIGxldCBwb3MgPSAwOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBsZXQgdG90YWxTaXplID0gMDsKICAgICAgbGV0IGluZmxhdG9yOwogICAgICBkbyB7CiAgICAgICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc3ViYXJyYXkocG9zKTsKICAgICAgICBpbmZsYXRvciA9IG5ldyBpbXBvcnRfcGFrby5JbmZsYXRlKCk7CiAgICAgICAgKHsgc3RybSB9ID0gaW5mbGF0b3IpOwogICAgICAgIGluZmxhdG9yLnB1c2gocmVtYWluaW5nSW5wdXQsIGltcG9ydF9wYWtvLlpfU1lOQ19GTFVTSCk7CiAgICAgICAgaWYgKGluZmxhdG9yLmVycikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGluZmxhdG9yLm1zZyk7CiAgICAgICAgfQogICAgICAgIHBvcyArPSBzdHJtLm5leHRfaW47CiAgICAgICAgY2h1bmtzW2ldID0gaW5mbGF0b3IucmVzdWx0OwogICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgIGkgKz0gMTsKICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7CiAgICAgIGZvciAobGV0IGkyID0gMCwgb2Zmc2V0ID0gMDsgaTIgPCBjaHVua3MubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgcmVzdWx0LnNldChjaHVua3NbaTJdLCBvZmZzZXQpOwogICAgICAgIG9mZnNldCArPSBjaHVua3NbaTJdLmxlbmd0aDsKICAgICAgfQogICAgICByZXR1cm4gaW1wb3J0X2J1ZmZlcjQuQnVmZmVyLmZyb20ocmVzdWx0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGAke2V9YC5tYXRjaCgvaW5jb3JyZWN0IGhlYWRlciBjaGVjay8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJwcm9ibGVtIGRlY29tcHJlc3NpbmcgYmxvY2s6IGluY29ycmVjdCBnemlwIGhlYWRlciBjaGVjayIpOwogICAgICB9CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHVuemlwQ2h1bmtTbGljZShpbnB1dERhdGEsIGNodW5rKSB7CiAgICB0cnkgewogICAgICBsZXQgc3RybTsKICAgICAgY29uc3QgeyBtaW52LCBtYXh2IH0gPSBjaHVuazsKICAgICAgbGV0IGNwb3MgPSBtaW52LmJsb2NrUG9zaXRpb247CiAgICAgIGxldCBkcG9zID0gbWludi5kYXRhUG9zaXRpb247CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBjb25zdCBjcG9zaXRpb25zID0gW107CiAgICAgIGNvbnN0IGRwb3NpdGlvbnMgPSBbXTsKICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7CiAgICAgIGxldCBpID0gMDsKICAgICAgZG8gewogICAgICAgIGNvbnN0IHJlbWFpbmluZ0lucHV0ID0gaW5wdXREYXRhLnN1YmFycmF5KGNwb3MgLSBtaW52LmJsb2NrUG9zaXRpb24pOwogICAgICAgIGNvbnN0IGluZmxhdG9yID0gbmV3IGltcG9ydF9wYWtvLkluZmxhdGUoKTsKICAgICAgICAoeyBzdHJtIH0gPSBpbmZsYXRvcik7CiAgICAgICAgaW5mbGF0b3IucHVzaChyZW1haW5pbmdJbnB1dCwgaW1wb3J0X3Bha28uWl9TWU5DX0ZMVVNIKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYnVmZmVyMiA9IGluZmxhdG9yLnJlc3VsdDsKICAgICAgICBjaHVua3MucHVzaChidWZmZXIyKTsKICAgICAgICBsZXQgbGVuID0gYnVmZmVyMi5sZW5ndGg7CiAgICAgICAgY3Bvc2l0aW9ucy5wdXNoKGNwb3MpOwogICAgICAgIGRwb3NpdGlvbnMucHVzaChkcG9zKTsKICAgICAgICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMSAmJiBtaW52LmRhdGFQb3NpdGlvbikgewogICAgICAgICAgY2h1bmtzWzBdID0gY2h1bmtzWzBdLnN1YmFycmF5KG1pbnYuZGF0YVBvc2l0aW9uKTsKICAgICAgICAgIGxlbiA9IGNodW5rc1swXS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG9yaWdDcG9zID0gY3BvczsKICAgICAgICBjcG9zICs9IHN0cm0ubmV4dF9pbjsKICAgICAgICBkcG9zICs9IGxlbjsKICAgICAgICBpZiAob3JpZ0Nwb3MgPj0gbWF4di5ibG9ja1Bvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3NbaV0gPSBjaHVua3NbaV0uc3ViYXJyYXkoMCwgbWF4di5ibG9ja1Bvc2l0aW9uID09PSBtaW52LmJsb2NrUG9zaXRpb24gPyBtYXh2LmRhdGFQb3NpdGlvbiAtIG1pbnYuZGF0YVBvc2l0aW9uICsgMSA6IG1heHYuZGF0YVBvc2l0aW9uICsgMSk7CiAgICAgICAgICBjcG9zaXRpb25zLnB1c2goY3Bvcyk7CiAgICAgICAgICBkcG9zaXRpb25zLnB1c2goZHBvcyk7CiAgICAgICAgICB0b3RhbFNpemUgKz0gY2h1bmtzW2ldLmxlbmd0aDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0b3RhbFNpemUgKz0gY2h1bmtzW2ldLmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfaW4pOwogICAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSh0b3RhbFNpemUpOwogICAgICBmb3IgKGxldCBpMiA9IDAsIG9mZnNldCA9IDA7IGkyIDwgY2h1bmtzLmxlbmd0aDsgaTIrKykgewogICAgICAgIHJlc3VsdC5zZXQoY2h1bmtzW2kyXSwgb2Zmc2V0KTsKICAgICAgICBvZmZzZXQgKz0gY2h1bmtzW2kyXS5sZW5ndGg7CiAgICAgIH0KICAgICAgY29uc3QgYnVmZmVyID0gaW1wb3J0X2J1ZmZlcjQuQnVmZmVyLmZyb20ocmVzdWx0KTsKICAgICAgcmV0dXJuIHsgYnVmZmVyLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChgJHtlfWAubWF0Y2goL2luY29ycmVjdCBoZWFkZXIgY2hlY2svKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigicHJvYmxlbSBkZWNvbXByZXNzaW5nIGJsb2NrOiBpbmNvcnJlY3QgZ3ppcCBoZWFkZXIgY2hlY2siKTsKICAgICAgfQogICAgICB0aHJvdyBlOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS9nemlJbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2xvbmcgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjUgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdXRpbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBsb25nVG9OdW1iZXIobG9uZykgewogICAgaWYgKGxvbmcuZ3JlYXRlclRoYW4oTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHx8IGxvbmcubGVzc1RoYW4oTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiaW50ZWdlciBvdmVyZmxvdyIpOwogICAgfQogICAgcmV0dXJuIGxvbmcudG9OdW1iZXIoKTsKICB9CiAgdmFyIEFib3J0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICB9OwogIGZ1bmN0aW9uIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKSB7CiAgICBpZiAoIXNpZ25hbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgaWYgKHR5cGVvZiBET01FeGNlcHRpb24gIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiYWJvcnRlZCIsICJBYm9ydEVycm9yIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgZSA9IG5ldyBBYm9ydEVycm9yKCJhYm9ydGVkIik7CiAgICAgICAgZS5jb2RlID0gIkVSUl9BQk9SVEVEIjsKICAgICAgICB0aHJvdyBlOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNhbk1lcmdlQmxvY2tzKGNodW5rMSwgY2h1bmsyKSB7CiAgICByZXR1cm4gY2h1bmsyLm1pbnYuYmxvY2tQb3NpdGlvbiAtIGNodW5rMS5tYXh2LmJsb2NrUG9zaXRpb24gPCA2NWUzICYmIGNodW5rMi5tYXh2LmJsb2NrUG9zaXRpb24gLSBjaHVuazEubWludi5ibG9ja1Bvc2l0aW9uIDwgNWU2OwogIH0KICBmdW5jdGlvbiBvcHRpbWl6ZUNodW5rcyhjaHVua3MsIGxvd2VzdCkgewogICAgY29uc3QgbWVyZ2VkQ2h1bmtzID0gW107CiAgICBsZXQgbGFzdENodW5rID0gbnVsbDsKICAgIGlmIChjaHVua3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBjaHVua3M7CiAgICB9CiAgICBjaHVua3Muc29ydChmdW5jdGlvbihjMCwgYzEpIHsKICAgICAgY29uc3QgZGlmID0gYzAubWludi5ibG9ja1Bvc2l0aW9uIC0gYzEubWludi5ibG9ja1Bvc2l0aW9uOwogICAgICBpZiAoZGlmICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGRpZjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gYzAubWludi5kYXRhUG9zaXRpb24gLSBjMS5taW52LmRhdGFQb3NpdGlvbjsKICAgICAgfQogICAgfSk7CiAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHsKICAgICAgaWYgKCFsb3dlc3QgfHwgY2h1bmsubWF4di5jb21wYXJlVG8obG93ZXN0KSA+IDApIHsKICAgICAgICBpZiAobGFzdENodW5rID09PSBudWxsKSB7CiAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICBsYXN0Q2h1bmsgPSBjaHVuazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGNhbk1lcmdlQmxvY2tzKGxhc3RDaHVuaywgY2h1bmspKSB7CiAgICAgICAgICAgIGlmIChjaHVuay5tYXh2LmNvbXBhcmVUbyhsYXN0Q2h1bmsubWF4dikgPiAwKSB7CiAgICAgICAgICAgICAgbGFzdENodW5rLm1heHYgPSBjaHVuay5tYXh2OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbWVyZ2VkQ2h1bmtzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3RiaS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2xvbmcyID0gX190b01vZHVsZShyZXF1aXJlX2xvbmcoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS92aXJ0dWFsT2Zmc2V0LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBWaXJ0dWFsT2Zmc2V0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoYmxvY2tQb3NpdGlvbiwgZGF0YVBvc2l0aW9uKSB7CiAgICAgIHRoaXMuYmxvY2tQb3NpdGlvbiA9IGJsb2NrUG9zaXRpb247CiAgICAgIHRoaXMuZGF0YVBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBgJHt0aGlzLmJsb2NrUG9zaXRpb259OiR7dGhpcy5kYXRhUG9zaXRpb259YDsKICAgIH0KICAgIGNvbXBhcmVUbyhiKSB7CiAgICAgIHJldHVybiB0aGlzLmJsb2NrUG9zaXRpb24gLSBiLmJsb2NrUG9zaXRpb24gfHwgdGhpcy5kYXRhUG9zaXRpb24gLSBiLmRhdGFQb3NpdGlvbjsKICAgIH0KICAgIHN0YXRpYyBtaW4oLi4uYXJncykgewogICAgICBsZXQgbWluOwogICAgICBsZXQgaSA9IDA7CiAgICAgIGZvciAoOyAhbWluOyBpICs9IDEpIHsKICAgICAgICBtaW4gPSBhcmdzW2ldOwogICAgICB9CiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgIGlmIChtaW4uY29tcGFyZVRvKGFyZ3NbaV0pID4gMCkgewogICAgICAgICAgbWluID0gYXJnc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG1pbjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlcywgb2Zmc2V0ID0gMCwgYmlnZW5kaWFuID0gZmFsc2UpIHsKICAgIGlmIChiaWdlbmRpYW4pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWctZW5kaWFuIHZpcnR1YWwgZmlsZSBvZmZzZXRzIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBWaXJ0dWFsT2Zmc2V0KGJ5dGVzW29mZnNldCArIDddICogMTA5OTUxMTYyNzc3NiArIGJ5dGVzW29mZnNldCArIDZdICogNDI5NDk2NzI5NiArIGJ5dGVzW29mZnNldCArIDVdICogMTY3NzcyMTYgKyBieXRlc1tvZmZzZXQgKyA0XSAqIDY1NTM2ICsgYnl0ZXNbb2Zmc2V0ICsgM10gKiAyNTYgKyBieXRlc1tvZmZzZXQgKyAyXSwgYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCB8IGJ5dGVzW29mZnNldF0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL2NodW5rLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBDaHVuayA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKG1pbnYsIG1heHYsIGJpbiwgZmV0Y2hlZFNpemUgPSB2b2lkIDApIHsKICAgICAgdGhpcy5taW52ID0gbWludjsKICAgICAgdGhpcy5tYXh2ID0gbWF4djsKICAgICAgdGhpcy5iaW4gPSBiaW47CiAgICAgIHRoaXMuX2ZldGNoZWRTaXplID0gZmV0Y2hlZFNpemU7CiAgICB9CiAgICB0b1VuaXF1ZVN0cmluZygpIHsKICAgICAgcmV0dXJuIGAke3RoaXMubWludn0uLiR7dGhpcy5tYXh2fSAoYmluICR7dGhpcy5iaW59LCBmZXRjaGVkU2l6ZSAke3RoaXMuZmV0Y2hlZFNpemUoKX0pYDsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy50b1VuaXF1ZVN0cmluZygpOwogICAgfQogICAgY29tcGFyZVRvKGIpIHsKICAgICAgcmV0dXJuIHRoaXMubWludi5jb21wYXJlVG8oYi5taW52KSB8fCB0aGlzLm1heHYuY29tcGFyZVRvKGIubWF4dikgfHwgdGhpcy5iaW4gLSBiLmJpbjsKICAgIH0KICAgIGZldGNoZWRTaXplKCkgewogICAgICBpZiAodGhpcy5fZmV0Y2hlZFNpemUgIT09IHZvaWQgMCkgewogICAgICAgIHJldHVybiB0aGlzLl9mZXRjaGVkU2l6ZTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5tYXh2LmJsb2NrUG9zaXRpb24gKyAoMSA8PCAxNikgLSB0aGlzLm1pbnYuYmxvY2tQb3NpdGlvbjsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vaW5kZXhGaWxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBJbmRleEZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMgPSAobikgPT4gbiB9KSB7CiAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGU7CiAgICAgIHRoaXMucmVuYW1lUmVmU2VxID0gcmVuYW1lUmVmU2VxczsKICAgIH0KICAgIGFzeW5jIGdldE1ldGFkYXRhKG9wdHMgPSB7fSkgewogICAgICBjb25zdCB7IGluZGljZXMsIC4uLnJlc3QgfSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIHJldHVybiByZXN0OwogICAgfQogICAgX2ZpbmRGaXJzdERhdGEoY3VycmVudEZkbCwgdmlydHVhbE9mZnNldCkgewogICAgICBpZiAoY3VycmVudEZkbCkgewogICAgICAgIHJldHVybiBjdXJyZW50RmRsLmNvbXBhcmVUbyh2aXJ0dWFsT2Zmc2V0KSA+IDAgPyB2aXJ0dWFsT2Zmc2V0IDogY3VycmVudEZkbDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdmlydHVhbE9mZnNldDsKICAgICAgfQogICAgfQogICAgYXN5bmMgcGFyc2Uob3B0cyA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5wYXJzZVApIHsKICAgICAgICB0aGlzLnBhcnNlUCA9IHRoaXMuX3BhcnNlKG9wdHMpLmNhdGNoKChlKSA9PiB7CiAgICAgICAgICB0aGlzLnBhcnNlUCA9IHZvaWQgMDsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMucGFyc2VQOwogICAgfQogICAgYXN5bmMgaGFzUmVmU2VxKHNlcUlkLCBvcHRzID0ge30pIHsKICAgICAgcmV0dXJuICEhKChhd2FpdCB0aGlzLnBhcnNlKG9wdHMpKS5pbmRpY2VzW3NlcUlkXSB8fCB7fSkuYmluSW5kZXg7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3RiaS5qcwogIHZhciBUQklfTUFHSUMgPSAyMTU3ODMyNDsKICB2YXIgVEFEX0xJRFhfU0hJRlQgPSAxNDsKICBmdW5jdGlvbiByZWcyYmlucyhiZWcsIGVuZCkgewogICAgYmVnICs9IDE7CiAgICBlbmQgLT0gMTsKICAgIHJldHVybiBbCiAgICAgIFswLCAwXSwKICAgICAgWzEgKyAoYmVnID4+IDI2KSwgMSArIChlbmQgPj4gMjYpXSwKICAgICAgWzkgKyAoYmVnID4+IDIzKSwgOSArIChlbmQgPj4gMjMpXSwKICAgICAgWzczICsgKGJlZyA+PiAyMCksIDczICsgKGVuZCA+PiAyMCldLAogICAgICBbNTg1ICsgKGJlZyA+PiAxNyksIDU4NSArIChlbmQgPj4gMTcpXSwKICAgICAgWzQ2ODEgKyAoYmVnID4+IDE0KSwgNDY4MSArIChlbmQgPj4gMTQpXQogICAgXTsKICB9CiAgdmFyIFRhYml4SW5kZXggPSBjbGFzcyBleHRlbmRzIEluZGV4RmlsZSB7CiAgICBhc3luYyBsaW5lQ291bnQocmVmTmFtZSwgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGlmICghaW5kZXhEYXRhKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHJlZklkID0gaW5kZXhEYXRhLnJlZk5hbWVUb0lkW3JlZk5hbWVdOwogICAgICBjb25zdCBpZHggPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghaWR4KSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHsgc3RhdHMgfSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKHN0YXRzKSB7CiAgICAgICAgcmV0dXJuIHN0YXRzLmxpbmVDb3VudDsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBhc3luYyBfcGFyc2Uob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZShvcHRzKTsKICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCB1bnppcChidWYpOwogICAgICBjaGVja0Fib3J0U2lnbmFsKG9wdHMuc2lnbmFsKTsKICAgICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSAhPT0gVEJJX01BR0lDKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBUQkkgZmlsZSIpOwogICAgICB9CiAgICAgIGNvbnN0IHJlZkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoNCk7CiAgICAgIGNvbnN0IGZvcm1hdEZsYWdzID0gYnl0ZXMucmVhZEludDMyTEUoOCk7CiAgICAgIGNvbnN0IGNvb3JkaW5hdGVUeXBlID0gZm9ybWF0RmxhZ3MgJiA2NTUzNiA/ICJ6ZXJvLWJhc2VkLWhhbGYtb3BlbiIgOiAiMS1iYXNlZC1jbG9zZWQiOwogICAgICBjb25zdCBmb3JtYXRPcHRzID0gewogICAgICAgIDA6ICJnZW5lcmljIiwKICAgICAgICAxOiAiU0FNIiwKICAgICAgICAyOiAiVkNGIgogICAgICB9OwogICAgICBjb25zdCBmb3JtYXQgPSBmb3JtYXRPcHRzW2Zvcm1hdEZsYWdzICYgMTVdOwogICAgICBpZiAoIWZvcm1hdCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBUYWJpeCBwcmVzZXQgZm9ybWF0IGZsYWdzICR7Zm9ybWF0RmxhZ3N9YCk7CiAgICAgIH0KICAgICAgY29uc3QgY29sdW1uTnVtYmVycyA9IHsKICAgICAgICByZWY6IGJ5dGVzLnJlYWRJbnQzMkxFKDEyKSwKICAgICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUoMTYpLAogICAgICAgIGVuZDogYnl0ZXMucmVhZEludDMyTEUoMjApCiAgICAgIH07CiAgICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGJ5dGVzLnJlYWRJbnQzMkxFKDI0KTsKICAgICAgY29uc3QgZGVwdGggPSA1OwogICAgICBjb25zdCBtYXhCaW5OdW1iZXIgPSAoKDEgPDwgKGRlcHRoICsgMSkgKiAzKSAtIDEpIC8gNzsKICAgICAgY29uc3QgbWF4UmVmTGVuZ3RoID0gMiAqKiAoMTQgKyBkZXB0aCAqIDMpOwogICAgICBjb25zdCBtZXRhQ2hhciA9IG1ldGFWYWx1ZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUobWV0YVZhbHVlKSA6IG51bGw7CiAgICAgIGNvbnN0IHNraXBMaW5lcyA9IGJ5dGVzLnJlYWRJbnQzMkxFKDI4KTsKICAgICAgY29uc3QgbmFtZVNlY3Rpb25MZW5ndGggPSBieXRlcy5yZWFkSW50MzJMRSgzMik7CiAgICAgIGNvbnN0IHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH0gPSB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zbGljZSgzNiwgMzYgKyBuYW1lU2VjdGlvbkxlbmd0aCkpOwogICAgICBsZXQgY3Vyck9mZnNldCA9IDM2ICsgbmFtZVNlY3Rpb25MZW5ndGg7CiAgICAgIGxldCBmaXJzdERhdGFMaW5lOwogICAgICBjb25zdCBpbmRpY2VzID0gbmV3IEFycmF5KHJlZkNvdW50KS5maWxsKDApLm1hcCgoKSA9PiB7CiAgICAgICAgY29uc3QgYmluQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgY29uc3QgYmluSW5kZXggPSB7fTsKICAgICAgICBsZXQgc3RhdHM7CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiaW5Db3VudDsgaiArPSAxKSB7CiAgICAgICAgICBjb25zdCBiaW4gPSBieXRlcy5yZWFkVUludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICBpZiAoYmluID4gbWF4QmluTnVtYmVyICsgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRhYml4IGluZGV4IGNvbnRhaW5zIHRvbyBtYW55IGJpbnMsIHBsZWFzZSB1c2UgYSBDU0kgaW5kZXgiKTsKICAgICAgICAgIH0gZWxzZSBpZiAoYmluID09PSBtYXhCaW5OdW1iZXIgKyAxKSB7CiAgICAgICAgICAgIGNvbnN0IGNodW5rQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgICAgICBpZiAoY2h1bmtDb3VudCA9PT0gMikgewogICAgICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNiAqIGNodW5rQ291bnQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gbmV3IEFycmF5KGNodW5rQ291bnQpOwogICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgICAgIGNvbnN0IHUgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KTsKICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2OwogICAgICAgICAgICAgIGZpcnN0RGF0YUxpbmUgPSB0aGlzLl9maW5kRmlyc3REYXRhKGZpcnN0RGF0YUxpbmUsIHUpOwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxpbmVhckNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgIGNvbnN0IGxpbmVhckluZGV4ID0gbmV3IEFycmF5KGxpbmVhckNvdW50KTsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmVhckNvdW50OyBrICs9IDEpIHsKICAgICAgICAgIGxpbmVhckluZGV4W2tdID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gODsKICAgICAgICAgIGZpcnN0RGF0YUxpbmUgPSB0aGlzLl9maW5kRmlyc3REYXRhKGZpcnN0RGF0YUxpbmUsIGxpbmVhckluZGV4W2tdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYmluSW5kZXgsIGxpbmVhckluZGV4LCBzdGF0cyB9OwogICAgICB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBpbmRpY2VzLAogICAgICAgIG1ldGFDaGFyLAogICAgICAgIG1heEJpbk51bWJlciwKICAgICAgICBtYXhSZWZMZW5ndGgsCiAgICAgICAgc2tpcExpbmVzLAogICAgICAgIGZpcnN0RGF0YUxpbmUsCiAgICAgICAgY29sdW1uTnVtYmVycywKICAgICAgICBjb29yZGluYXRlVHlwZSwKICAgICAgICBmb3JtYXQsCiAgICAgICAgcmVmSWRUb05hbWUsCiAgICAgICAgcmVmTmFtZVRvSWQsCiAgICAgICAgbWF4QmxvY2tTaXplOiAxIDw8IDE2CiAgICAgIH07CiAgICB9CiAgICBwYXJzZVBzZXVkb0JpbihieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihpbXBvcnRfbG9uZzIuZGVmYXVsdC5mcm9tQnl0ZXNMRShieXRlcy5zbGljZShvZmZzZXQgKyAxNiwgb2Zmc2V0ICsgMjQpLCB0cnVlKSk7CiAgICAgIHJldHVybiB7IGxpbmVDb3VudCB9OwogICAgfQogICAgX3BhcnNlTmFtZUJ5dGVzKG5hbWVzQnl0ZXMpIHsKICAgICAgbGV0IGN1cnJSZWZJZCA9IDA7CiAgICAgIGxldCBjdXJyTmFtZVN0YXJ0ID0gMDsKICAgICAgY29uc3QgcmVmSWRUb05hbWUgPSBbXTsKICAgICAgY29uc3QgcmVmTmFtZVRvSWQgPSB7fTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc0J5dGVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKCFuYW1lc0J5dGVzW2ldKSB7CiAgICAgICAgICBpZiAoY3Vyck5hbWVTdGFydCA8IGkpIHsKICAgICAgICAgICAgbGV0IHJlZk5hbWUgPSBuYW1lc0J5dGVzLnRvU3RyaW5nKCJ1dGY4IiwgY3Vyck5hbWVTdGFydCwgaSk7CiAgICAgICAgICAgIHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcShyZWZOYW1lKTsKICAgICAgICAgICAgcmVmSWRUb05hbWVbY3VyclJlZklkXSA9IHJlZk5hbWU7CiAgICAgICAgICAgIHJlZk5hbWVUb0lkW3JlZk5hbWVdID0gY3VyclJlZklkOwogICAgICAgICAgfQogICAgICAgICAgY3Vyck5hbWVTdGFydCA9IGkgKyAxOwogICAgICAgICAgY3VyclJlZklkICs9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHJlZk5hbWVUb0lkLCByZWZJZFRvTmFtZSB9OwogICAgfQogICAgYXN5bmMgYmxvY2tzRm9yUmFuZ2UocmVmTmFtZSwgbWluLCBtYXgsIG9wdHMgPSB7fSkgewogICAgICBpZiAobWluIDwgMCkgewogICAgICAgIG1pbiA9IDA7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgcmVmSWQgPSBpbmRleERhdGEucmVmTmFtZVRvSWRbcmVmTmFtZV07CiAgICAgIGNvbnN0IGJhID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoIWJhKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGNvbnN0IG1pbk9mZnNldCA9IGJhLmxpbmVhckluZGV4Lmxlbmd0aCA/IGJhLmxpbmVhckluZGV4W21pbiA+PiBUQURfTElEWF9TSElGVCA+PSBiYS5saW5lYXJJbmRleC5sZW5ndGggPyBiYS5saW5lYXJJbmRleC5sZW5ndGggLSAxIDogbWluID4+IFRBRF9MSURYX1NISUZUXSA6IG5ldyBWaXJ0dWFsT2Zmc2V0KDAsIDApOwogICAgICBpZiAoIW1pbk9mZnNldCkgewogICAgICAgIGNvbnNvbGUud2FybigicXVlcnlpbmcgb3V0c2lkZSBvZiBwb3NzaWJsZSB0YWJpeCByYW5nZSIpOwogICAgICB9CiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nQmlucyA9IHJlZzJiaW5zKG1pbiwgbWF4KTsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykgewogICAgICAgIGZvciAobGV0IGJpbiA9IHN0YXJ0OyBiaW4gPD0gZW5kOyBiaW4rKykgewogICAgICAgICAgaWYgKGJhLmJpbkluZGV4W2Jpbl0pIHsKICAgICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXTsKICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBiaW5DaHVua3MubGVuZ3RoOyArK2MpIHsKICAgICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBuaW50diA9IGJhLmxpbmVhckluZGV4Lmxlbmd0aDsKICAgICAgbGV0IGxvd2VzdCA9IG51bGw7CiAgICAgIGNvbnN0IG1pbkxpbiA9IE1hdGgubWluKG1pbiA+PiAxNCwgbmludHYgLSAxKTsKICAgICAgY29uc3QgbWF4TGluID0gTWF0aC5taW4obWF4ID4+IDE0LCBuaW50diAtIDEpOwogICAgICBmb3IgKGxldCBpID0gbWluTGluOyBpIDw9IG1heExpbjsgKytpKSB7CiAgICAgICAgY29uc3QgdnAgPSBiYS5saW5lYXJJbmRleFtpXTsKICAgICAgICBpZiAodnApIHsKICAgICAgICAgIGlmICghbG93ZXN0IHx8IHZwLmNvbXBhcmVUbyhsb3dlc3QpIDwgMCkgewogICAgICAgICAgICBsb3dlc3QgPSB2cDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vY3NpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzMgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKICB2YXIgQ1NJMV9NQUdJQyA9IDIxNTgyNjU5OwogIHZhciBDU0kyX01BR0lDID0gMzgzNTk4NzU7CiAgZnVuY3Rpb24gbHNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIG51bSAqIDIgKiogYml0czsKICB9CiAgZnVuY3Rpb24gcnNoaWZ0KG51bSwgYml0cykgewogICAgcmV0dXJuIE1hdGguZmxvb3IobnVtIC8gMiAqKiBiaXRzKTsKICB9CiAgdmFyIENTSSA9IGNsYXNzIGV4dGVuZHMgSW5kZXhGaWxlIHsKICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHsKICAgICAgc3VwZXIoYXJncyk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gMDsKICAgICAgdGhpcy5kZXB0aCA9IDA7CiAgICAgIHRoaXMubWluU2hpZnQgPSAwOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZk5hbWUsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBpZiAoIWluZGV4RGF0YSkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCByZWZJZCA9IGluZGV4RGF0YS5yZWZOYW1lVG9JZFtyZWZOYW1lXTsKICAgICAgY29uc3QgaWR4ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoIWlkeCkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCB7IHN0YXRzIH0gPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmIChzdGF0cykgewogICAgICAgIHJldHVybiBzdGF0cy5saW5lQ291bnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgYXN5bmMgaW5kZXhDb3YoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ1NJIGluZGV4ZXMgZG8gbm90IHN1cHBvcnQgaW5kZXhjb3YiKTsKICAgIH0KICAgIHBhcnNlQXV4RGF0YShieXRlcywgb2Zmc2V0KSB7CiAgICAgIGNvbnN0IGZvcm1hdEZsYWdzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0KTsKICAgICAgY29uc3QgY29vcmRpbmF0ZVR5cGUgPSBmb3JtYXRGbGFncyAmIDY1NTM2ID8gInplcm8tYmFzZWQtaGFsZi1vcGVuIiA6ICIxLWJhc2VkLWNsb3NlZCI7CiAgICAgIGNvbnN0IGZvcm1hdCA9IHsgMDogImdlbmVyaWMiLCAxOiAiU0FNIiwgMjogIlZDRiIgfVtmb3JtYXRGbGFncyAmIDE1XTsKICAgICAgaWYgKCFmb3JtYXQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgVGFiaXggcHJlc2V0IGZvcm1hdCBmbGFncyAke2Zvcm1hdEZsYWdzfWApOwogICAgICB9CiAgICAgIGNvbnN0IGNvbHVtbk51bWJlcnMgPSB7CiAgICAgICAgcmVmOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyA0KSwKICAgICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgOCksCiAgICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxMikKICAgICAgfTsKICAgICAgY29uc3QgbWV0YVZhbHVlID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMTYpOwogICAgICBjb25zdCBtZXRhQ2hhciA9IG1ldGFWYWx1ZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUobWV0YVZhbHVlKSA6IG51bGw7CiAgICAgIGNvbnN0IHNraXBMaW5lcyA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDIwKTsKICAgICAgY29uc3QgbmFtZVNlY3Rpb25MZW5ndGggPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAyNCk7CiAgICAgIGNvbnN0IHsgcmVmSWRUb05hbWUsIHJlZk5hbWVUb0lkIH0gPSB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zbGljZShvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMjggKyBuYW1lU2VjdGlvbkxlbmd0aCkpOwogICAgICByZXR1cm4gewogICAgICAgIHJlZklkVG9OYW1lLAogICAgICAgIHJlZk5hbWVUb0lkLAogICAgICAgIHNraXBMaW5lcywKICAgICAgICBtZXRhQ2hhciwKICAgICAgICBjb2x1bW5OdW1iZXJzLAogICAgICAgIGZvcm1hdCwKICAgICAgICBjb29yZGluYXRlVHlwZQogICAgICB9OwogICAgfQogICAgX3BhcnNlTmFtZUJ5dGVzKG5hbWVzQnl0ZXMpIHsKICAgICAgbGV0IGN1cnJSZWZJZCA9IDA7CiAgICAgIGxldCBjdXJyTmFtZVN0YXJ0ID0gMDsKICAgICAgY29uc3QgcmVmSWRUb05hbWUgPSBbXTsKICAgICAgY29uc3QgcmVmTmFtZVRvSWQgPSB7fTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc0J5dGVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKCFuYW1lc0J5dGVzW2ldKSB7CiAgICAgICAgICBpZiAoY3Vyck5hbWVTdGFydCA8IGkpIHsKICAgICAgICAgICAgbGV0IHJlZk5hbWUgPSBuYW1lc0J5dGVzLnRvU3RyaW5nKCJ1dGY4IiwgY3Vyck5hbWVTdGFydCwgaSk7CiAgICAgICAgICAgIHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcShyZWZOYW1lKTsKICAgICAgICAgICAgcmVmSWRUb05hbWVbY3VyclJlZklkXSA9IHJlZk5hbWU7CiAgICAgICAgICAgIHJlZk5hbWVUb0lkW3JlZk5hbWVdID0gY3VyclJlZklkOwogICAgICAgICAgfQogICAgICAgICAgY3Vyck5hbWVTdGFydCA9IGkgKyAxOwogICAgICAgICAgY3VyclJlZklkICs9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHJlZk5hbWVUb0lkLCByZWZJZFRvTmFtZSB9OwogICAgfQogICAgYXN5bmMgX3BhcnNlKG9wdHMgPSB7fSkgewogICAgICBjb25zdCBieXRlcyA9IGF3YWl0IHVuemlwKGF3YWl0IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZShvcHRzKSk7CiAgICAgIGxldCBjc2lWZXJzaW9uOwogICAgICBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kxX01BR0lDKSB7CiAgICAgICAgY3NpVmVyc2lvbiA9IDE7CiAgICAgIH0gZWxzZSBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kyX01BR0lDKSB7CiAgICAgICAgY3NpVmVyc2lvbiA9IDI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgYSBDU0kgZmlsZSIpOwogICAgICB9CiAgICAgIHRoaXMubWluU2hpZnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KTsKICAgICAgdGhpcy5kZXB0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDgpOwogICAgICB0aGlzLm1heEJpbk51bWJlciA9ICgoMSA8PCAodGhpcy5kZXB0aCArIDEpICogMykgLSAxKSAvIDc7CiAgICAgIGNvbnN0IG1heFJlZkxlbmd0aCA9IDIgKiogKHRoaXMubWluU2hpZnQgKyB0aGlzLmRlcHRoICogMyk7CiAgICAgIGNvbnN0IGF1eExlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDEyKTsKICAgICAgY29uc3QgYXV4ID0gYXV4TGVuZ3RoICYmIGF1eExlbmd0aCA+PSAzMCA/IHRoaXMucGFyc2VBdXhEYXRhKGJ5dGVzLCAxNikgOiB7CiAgICAgICAgcmVmSWRUb05hbWU6IFtdLAogICAgICAgIHJlZk5hbWVUb0lkOiB7fSwKICAgICAgICBtZXRhQ2hhcjogbnVsbCwKICAgICAgICBjb2x1bW5OdW1iZXJzOiB7IHJlZjogMCwgc3RhcnQ6IDEsIGVuZDogMiB9LAogICAgICAgIGNvb3JkaW5hdGVUeXBlOiAiemVyby1iYXNlZC1oYWxmLW9wZW4iLAogICAgICAgIGZvcm1hdDogImdlbmVyaWMiCiAgICAgIH07CiAgICAgIGNvbnN0IHJlZkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoMTYgKyBhdXhMZW5ndGgpOwogICAgICBsZXQgZmlyc3REYXRhTGluZTsKICAgICAgbGV0IGN1cnJPZmZzZXQgPSAxNiArIGF1eExlbmd0aCArIDQ7CiAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgQXJyYXkocmVmQ291bnQpLmZpbGwoMCkubWFwKCgpID0+IHsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICBjb25zdCBiaW5JbmRleCA9IHt9OwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGlmIChiaW4gPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgICBzdGF0cyA9IHRoaXMucGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIGN1cnJPZmZzZXQgKyA0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0ICsgOCArIDQgKyAxNiArIDE2OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbG9mZnNldCA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDQpOwogICAgICAgICAgICBmaXJzdERhdGFMaW5lID0gdGhpcy5fZmluZEZpcnN0RGF0YShmaXJzdERhdGFMaW5lLCBsb2Zmc2V0KTsKICAgICAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQgKyAxMik7CiAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMTY7CiAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IG5ldyBBcnJheShjaHVua0NvdW50KTsKICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjaHVua0NvdW50OyBrICs9IDEpIHsKICAgICAgICAgICAgICBjb25zdCB1ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgICBjb25zdCB2ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0ICsgOCk7CiAgICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgICBjaHVua3Nba10gPSBuZXcgQ2h1bmsodSwgdiwgYmluKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBiaW5JbmRleFtiaW5dID0gY2h1bmtzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4geyBiaW5JbmRleCwgc3RhdHMgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgLi4uYXV4LAogICAgICAgIGNzaTogdHJ1ZSwKICAgICAgICByZWZDb3VudCwKICAgICAgICBtYXhCbG9ja1NpemU6IDEgPDwgMTYsCiAgICAgICAgZmlyc3REYXRhTGluZSwKICAgICAgICBjc2lWZXJzaW9uLAogICAgICAgIGluZGljZXMsCiAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsCiAgICAgICAgbWF4QmluTnVtYmVyOiB0aGlzLm1heEJpbk51bWJlciwKICAgICAgICBtYXhSZWZMZW5ndGgKICAgICAgfTsKICAgIH0KICAgIHBhcnNlUHNldWRvQmluKGJ5dGVzLCBvZmZzZXQpIHsKICAgICAgY29uc3QgbGluZUNvdW50ID0gbG9uZ1RvTnVtYmVyKGltcG9ydF9sb25nMy5kZWZhdWx0LmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDI4LCBvZmZzZXQgKyAzNiksIHRydWUpKTsKICAgICAgcmV0dXJuIHsgbGluZUNvdW50IH07CiAgICB9CiAgICBhc3luYyBibG9ja3NGb3JSYW5nZShyZWZOYW1lLCBtaW4sIG1heCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChtaW4gPCAwKSB7CiAgICAgICAgbWluID0gMDsKICAgICAgfQogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBpZiAoIWluZGV4RGF0YSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCByZWZJZCA9IGluZGV4RGF0YS5yZWZOYW1lVG9JZFtyZWZOYW1lXTsKICAgICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghYmEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdCaW5zID0gdGhpcy5yZWcyYmlucyhtaW4sIG1heCk7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IFtzdGFydCwgZW5kXSBvZiBvdmVybGFwcGluZ0JpbnMpIHsKICAgICAgICBmb3IgKGxldCBiaW4gPSBzdGFydDsgYmluIDw9IGVuZDsgYmluKyspIHsKICAgICAgICAgIGlmIChiYS5iaW5JbmRleFtiaW5dKSB7CiAgICAgICAgICAgIGNvbnN0IGJpbkNodW5rcyA9IGJhLmJpbkluZGV4W2Jpbl07CiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgYmluQ2h1bmtzLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICAgICAgY2h1bmtzLnB1c2gobmV3IENodW5rKGJpbkNodW5rc1tjXS5taW52LCBiaW5DaHVua3NbY10ubWF4diwgYmluKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbmV3IFZpcnR1YWxPZmZzZXQoMCwgMCkpOwogICAgfQogICAgcmVnMmJpbnMoYmVnLCBlbmQpIHsKICAgICAgYmVnIC09IDE7CiAgICAgIGlmIChiZWcgPCAxKSB7CiAgICAgICAgYmVnID0gMTsKICAgICAgfQogICAgICBpZiAoZW5kID4gMiAqKiA1MCkgewogICAgICAgIGVuZCA9IDIgKiogMzQ7CiAgICAgIH0KICAgICAgZW5kIC09IDE7CiAgICAgIGxldCBsID0gMDsKICAgICAgbGV0IHQgPSAwOwogICAgICBsZXQgcyA9IHRoaXMubWluU2hpZnQgKyB0aGlzLmRlcHRoICogMzsKICAgICAgY29uc3QgYmlucyA9IFtdOwogICAgICBmb3IgKDsgbCA8PSB0aGlzLmRlcHRoOyBzIC09IDMsIHQgKz0gbHNoaWZ0KDEsIGwgKiAzKSwgbCArPSAxKSB7CiAgICAgICAgY29uc3QgYiA9IHQgKyByc2hpZnQoYmVnLCBzKTsKICAgICAgICBjb25zdCBlID0gdCArIHJzaGlmdChlbmQsIHMpOwogICAgICAgIGlmIChlIC0gYiArIGJpbnMubGVuZ3RoID4gdGhpcy5tYXhCaW5OdW1iZXIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcXVlcnkgJHtiZWd9LSR7ZW5kfSBpcyB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgYmlubmluZyBzY2hlbWUgKHNoaWZ0ICR7dGhpcy5taW5TaGlmdH0sIGRlcHRoICR7dGhpcy5kZXB0aH0pLCB0cnkgYSBzbWFsbGVyIHF1ZXJ5IG9yIGEgY29hcnNlciBpbmRleCBiaW5uaW5nIHNjaGVtZWApOwogICAgICAgIH0KICAgICAgICBiaW5zLnB1c2goW2IsIGVdKTsKICAgICAgfQogICAgICByZXR1cm4gYmluczsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGFiaXhJbmRleGVkRmlsZS5qcwogIHZhciBkZWNvZGVyID0gdHlwZW9mIFRleHREZWNvZGVyICE9PSAidW5kZWZpbmVkIiA/IG5ldyBUZXh0RGVjb2RlcigidXRmLTgiKSA6IHZvaWQgMDsKICBmdW5jdGlvbiB0aW1lb3V0KHRpbWUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lKSk7CiAgfQogIHZhciBUYWJpeEluZGV4ZWRGaWxlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoeyBwYXRoLCBmaWxlaGFuZGxlLCB0YmlQYXRoLCB0YmlGaWxlaGFuZGxlLCBjc2lQYXRoLCBjc2lGaWxlaGFuZGxlLCB5aWVsZFRpbWUgPSA1MDAsIGNodW5rU2l6ZUxpbWl0ID0gNWU3LCByZW5hbWVSZWZTZXFzID0gKG4pID0+IG4sIGNodW5rQ2FjaGVTaXplID0gNSAqIDIgKiogMjAgfSkgewogICAgICBpZiAoZmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGU7CiAgICAgIH0gZWxzZSBpZiAocGF0aCkgewogICAgICAgIHRoaXMuZmlsZWhhbmRsZSA9IG5ldyBpbXBvcnRfbG9jYWxGaWxlLmRlZmF1bHQocGF0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwcm92aWRlIGVpdGhlciBmaWxlaGFuZGxlIG9yIHBhdGgiKTsKICAgICAgfQogICAgICBpZiAodGJpRmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgVGFiaXhJbmRleCh7CiAgICAgICAgICBmaWxlaGFuZGxlOiB0YmlGaWxlaGFuZGxlLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGNzaUZpbGVoYW5kbGUpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IENTSSh7CiAgICAgICAgICBmaWxlaGFuZGxlOiBjc2lGaWxlaGFuZGxlLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHRiaVBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IFRhYml4SW5kZXgoewogICAgICAgICAgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdCh0YmlQYXRoKSwKICAgICAgICAgIHJlbmFtZVJlZlNlcXMKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChjc2lQYXRoKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBDU0koewogICAgICAgICAgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChjc2lQYXRoKSwKICAgICAgICAgIHJlbmFtZVJlZlNlcXMKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChwYXRoKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBUYWJpeEluZGV4KHsKICAgICAgICAgIGZpbGVoYW5kbGU6IG5ldyBpbXBvcnRfbG9jYWxGaWxlLmRlZmF1bHQoYCR7cGF0aH0udGJpYCksCiAgICAgICAgICByZW5hbWVSZWZTZXFzCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBwcm92aWRlIG9uZSBvZiB0YmlGaWxlaGFuZGxlLCB0YmlQYXRoLCBjc2lGaWxlaGFuZGxlLCBvciBjc2lQYXRoIik7CiAgICAgIH0KICAgICAgdGhpcy5jaHVua1NpemVMaW1pdCA9IGNodW5rU2l6ZUxpbWl0OwogICAgICB0aGlzLnJlbmFtZVJlZlNlcSA9IHJlbmFtZVJlZlNlcXM7CiAgICAgIHRoaXMueWllbGRUaW1lID0geWllbGRUaW1lOwogICAgICB0aGlzLmNodW5rQ2FjaGUgPSBuZXcgaW1wb3J0X2Fib3J0YWJsZV9wcm9taXNlX2NhY2hlLmRlZmF1bHQoewogICAgICAgIGNhY2hlOiBuZXcgaW1wb3J0X3F1aWNrX2xydS5kZWZhdWx0KHsgbWF4U2l6ZTogTWF0aC5mbG9vcihjaHVua0NhY2hlU2l6ZSAvICgxIDw8IDE2KSkgfSksCiAgICAgICAgZmlsbDogKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5yZWFkQ2h1bmsoYXJncywgeyBzaWduYWwgfSkKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBnZXRMaW5lcyhyZWZOYW1lLCBzdGFydCwgZW5kLCBvcHRzKSB7CiAgICAgIGxldCBzaWduYWw7CiAgICAgIGxldCBvcHRpb25zID0ge307CiAgICAgIGxldCBjYWxsYmFjazsKICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImxpbmUgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIGNhbGxiYWNrID0gb3B0czsKICAgICAgfSBlbHNlIHsKICAgICAgICBvcHRpb25zID0gb3B0czsKICAgICAgICBjYWxsYmFjayA9IG9wdHMubGluZUNhbGxiYWNrOwogICAgICB9CiAgICAgIGlmIChyZWZOYW1lID09PSB2b2lkIDApIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHByb3ZpZGUgYSByZWZlcmVuY2Ugc2VxdWVuY2UgbmFtZSIpOwogICAgICB9CiAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJsaW5lIGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQiKTsKICAgICAgfQogICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuaW5kZXguZ2V0TWV0YWRhdGEob3B0aW9ucyk7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKTsKICAgICAgaWYgKCFzdGFydCkgewogICAgICAgIHN0YXJ0ID0gMDsKICAgICAgfQogICAgICBpZiAoIWVuZCkgewogICAgICAgIGVuZCA9IG1ldGFkYXRhLm1heFJlZkxlbmd0aDsKICAgICAgfQogICAgICBpZiAoIShzdGFydCA8PSBlbmQpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdGFydCBhbmQgZW5kIGNvb3JkaW5hdGVzLiBzdGFydCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBlbmQiKTsKICAgICAgfQogICAgICBpZiAoc3RhcnQgPT09IGVuZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBjaHVua3MgPSBhd2FpdCB0aGlzLmluZGV4LmJsb2Nrc0ZvclJhbmdlKHJlZk5hbWUsIHN0YXJ0LCBlbmQsIG9wdGlvbnMpOwogICAgICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgY29uc3Qgc2l6ZSA9IGNodW5rc1tpXS5mZXRjaGVkU2l6ZSgpOwogICAgICAgIGlmIChzaXplID4gdGhpcy5jaHVua1NpemVMaW1pdCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb28gbXVjaCBkYXRhLiBDaHVuayBzaXplICR7c2l6ZS50b0xvY2FsZVN0cmluZygpfSBieXRlcyBleGNlZWRzIGNodW5rU2l6ZUxpbWl0IG9mICR7dGhpcy5jaHVua1NpemVMaW1pdC50b0xvY2FsZVN0cmluZygpfS5gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IGxhc3QgPSBEYXRlLm5vdygpOwogICAgICBmb3IgKGxldCBjaHVua051bSA9IDA7IGNodW5rTnVtIDwgY2h1bmtzLmxlbmd0aDsgY2h1bmtOdW0gKz0gMSkgewogICAgICAgIGxldCBwcmV2aW91c1N0YXJ0Q29vcmRpbmF0ZTsKICAgICAgICBjb25zdCBjID0gY2h1bmtzW2NodW5rTnVtXTsKICAgICAgICBjb25zdCB7IGJ1ZmZlciwgY3Bvc2l0aW9ucywgZHBvc2l0aW9ucyB9ID0gYXdhaXQgdGhpcy5jaHVua0NhY2hlLmdldChjLnRvU3RyaW5nKCksIGMpOwogICAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKTsKICAgICAgICBsZXQgYmxvY2tTdGFydCA9IDA7CiAgICAgICAgbGV0IHBvcyA9IDA7CiAgICAgICAgd2hpbGUgKGJsb2NrU3RhcnQgPCBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBuID0gYnVmZmVyLmluZGV4T2YoIlxuIiwgYmxvY2tTdGFydCk7CiAgICAgICAgICBpZiAobiA9PT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBiID0gYnVmZmVyLnNsaWNlKGJsb2NrU3RhcnQsIG4pOwogICAgICAgICAgY29uc3QgbGluZSA9IChkZWNvZGVyID09PSBudWxsIHx8IGRlY29kZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlY29kZXIuZGVjb2RlKGIpKSB8fCBiLnRvU3RyaW5nKCk7CiAgICAgICAgICBpZiAoZHBvc2l0aW9ucykgewogICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFydCArIGMubWludi5kYXRhUG9zaXRpb24gPj0gZHBvc2l0aW9uc1twb3MrK10pIHsKICAgICAgICAgICAgfQogICAgICAgICAgICBwb3MtLTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb29yZGluYXRlLCBvdmVybGFwcyB9ID0gdGhpcy5jaGVja0xpbmUobWV0YWRhdGEsIHJlZk5hbWUsIHN0YXJ0LCBlbmQsIGxpbmUpOwogICAgICAgICAgaWYgKHByZXZpb3VzU3RhcnRDb29yZGluYXRlICE9PSB2b2lkIDAgJiYgc3RhcnRDb29yZGluYXRlICE9PSB2b2lkIDAgJiYgcHJldmlvdXNTdGFydENvb3JkaW5hdGUgPiBzdGFydENvb3JkaW5hdGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lcyBub3Qgc29ydGVkIGJ5IHN0YXJ0IGNvb3JkaW5hdGUgKCR7cHJldmlvdXNTdGFydENvb3JkaW5hdGV9ID4gJHtzdGFydENvb3JkaW5hdGV9KSwgdGhpcyBmaWxlIGlzIG5vdCB1c2FibGUgd2l0aCBUYWJpeC5gKTsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZpb3VzU3RhcnRDb29yZGluYXRlID0gc3RhcnRDb29yZGluYXRlOwogICAgICAgICAgaWYgKG92ZXJsYXBzKSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGxpbmUudHJpbSgpLCBjcG9zaXRpb25zW3Bvc10gKiAoMSA8PCA4KSArIChibG9ja1N0YXJ0IC0gZHBvc2l0aW9uc1twb3NdKSArIGMubWludi5kYXRhUG9zaXRpb24gKyAxKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRDb29yZGluYXRlICE9PSB2b2lkIDAgJiYgc3RhcnRDb29yZGluYXRlID49IGVuZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy55aWVsZFRpbWUgJiYgbGFzdCAtIERhdGUubm93KCkgPiB0aGlzLnlpZWxkVGltZSkgewogICAgICAgICAgICBsYXN0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpOwogICAgICAgICAgICBhd2FpdCB0aW1lb3V0KDEpOwogICAgICAgICAgfQogICAgICAgICAgYmxvY2tTdGFydCA9IG4gKyAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZ2V0TWV0YWRhdGEob3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmluZGV4LmdldE1ldGFkYXRhKG9wdHMpOwogICAgfQogICAgYXN5bmMgZ2V0SGVhZGVyQnVmZmVyKG9wdHMgPSB7fSkgewogICAgICBjb25zdCB7IGZpcnN0RGF0YUxpbmUsIG1ldGFDaGFyLCBtYXhCbG9ja1NpemUgfSA9IGF3YWl0IHRoaXMuZ2V0TWV0YWRhdGEob3B0cyk7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwob3B0cy5zaWduYWwpOwogICAgICBjb25zdCBtYXhGZXRjaCA9ICgoZmlyc3REYXRhTGluZSA9PT0gbnVsbCB8fCBmaXJzdERhdGFMaW5lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaXJzdERhdGFMaW5lLmJsb2NrUG9zaXRpb24pIHx8IDApICsgbWF4QmxvY2tTaXplOwogICAgICBsZXQgYnl0ZXMgPSBhd2FpdCB0aGlzLl9yZWFkUmVnaW9uKDAsIG1heEZldGNoLCBvcHRzKTsKICAgICAgY2hlY2tBYm9ydFNpZ25hbChvcHRzLnNpZ25hbCk7CiAgICAgIHRyeSB7CiAgICAgICAgYnl0ZXMgPSBhd2FpdCB1bnppcChieXRlcyk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgZGVjb21wcmVzc2luZyBibG9jayAke2UuY29kZX0gYXQgMCAobGVuZ3RoICR7bWF4RmV0Y2h9KSAke2V9YCk7CiAgICAgIH0KICAgICAgaWYgKG1ldGFDaGFyKSB7CiAgICAgICAgbGV0IGxhc3ROZXdsaW5lID0gLTE7CiAgICAgICAgY29uc3QgbmV3bGluZUJ5dGUgPSAiXG4iLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgY29uc3QgbWV0YUJ5dGUgPSBtZXRhQ2hhci5jaGFyQ29kZUF0KDApOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGlmIChpID09PSBsYXN0TmV3bGluZSArIDEgJiYgYnl0ZXNbaV0gIT09IG1ldGFCeXRlKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJ5dGVzW2ldID09PSBuZXdsaW5lQnl0ZSkgewogICAgICAgICAgICBsYXN0TmV3bGluZSA9IGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJ5dGVzID0gYnl0ZXMuc2xpY2UoMCwgbGFzdE5ld2xpbmUgKyAxKTsKICAgICAgfQogICAgICByZXR1cm4gYnl0ZXM7CiAgICB9CiAgICBhc3luYyBnZXRIZWFkZXIob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgdGhpcy5nZXRIZWFkZXJCdWZmZXIob3B0cyk7CiAgICAgIHJldHVybiBieXRlcy50b1N0cmluZygidXRmOCIpOwogICAgfQogICAgYXN5bmMgZ2V0UmVmZXJlbmNlU2VxdWVuY2VOYW1lcyhvcHRzID0ge30pIHsKICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLmdldE1ldGFkYXRhKG9wdHMpOwogICAgICByZXR1cm4gbWV0YWRhdGEucmVmSWRUb05hbWU7CiAgICB9CiAgICBjaGVja0xpbmUobWV0YWRhdGEsIHJlZ2lvblJlZk5hbWUsIHJlZ2lvblN0YXJ0LCByZWdpb25FbmQsIGxpbmUpIHsKICAgICAgY29uc3QgeyBjb2x1bW5OdW1iZXJzLCBtZXRhQ2hhciwgY29vcmRpbmF0ZVR5cGUsIGZvcm1hdCB9ID0gbWV0YWRhdGE7CiAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gbWV0YUNoYXIpIHsKICAgICAgICByZXR1cm4geyBvdmVybGFwczogZmFsc2UgfTsKICAgICAgfQogICAgICBsZXQgeyByZWYsIHN0YXJ0LCBlbmQgfSA9IGNvbHVtbk51bWJlcnM7CiAgICAgIGlmICghcmVmKSB7CiAgICAgICAgcmVmID0gMDsKICAgICAgfQogICAgICBpZiAoIXN0YXJ0KSB7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICB9CiAgICAgIGlmICghZW5kKSB7CiAgICAgICAgZW5kID0gMDsKICAgICAgfQogICAgICBpZiAoZm9ybWF0ID09PSAiVkNGIikgewogICAgICAgIGVuZCA9IDg7CiAgICAgIH0KICAgICAgY29uc3QgbWF4Q29sdW1uID0gTWF0aC5tYXgocmVmLCBzdGFydCwgZW5kKTsKICAgICAgbGV0IGN1cnJlbnRDb2x1bW5OdW1iZXIgPSAxOwogICAgICBsZXQgY3VycmVudENvbHVtblN0YXJ0ID0gMDsKICAgICAgbGV0IHJlZlNlcSA9ICIiOwogICAgICBsZXQgc3RhcnRDb29yZGluYXRlID0gLUluZmluaXR5OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoICsgMTsgaSArPSAxKSB7CiAgICAgICAgaWYgKGxpbmVbaV0gPT09ICIJIiB8fCBpID09PSBsaW5lLmxlbmd0aCkgewogICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPT09IHJlZikgewogICAgICAgICAgICBpZiAodGhpcy5yZW5hbWVSZWZTZXEobGluZS5zbGljZShjdXJyZW50Q29sdW1uU3RhcnQsIGkpKSAhPT0gcmVnaW9uUmVmTmFtZSkgewogICAgICAgICAgICAgIHJldHVybiB7IG92ZXJsYXBzOiBmYWxzZSB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPT09IHN0YXJ0KSB7CiAgICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZSA9IHBhcnNlSW50KGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKSwgMTApOwogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZVR5cGUgPT09ICIxLWJhc2VkLWNsb3NlZCIpIHsKICAgICAgICAgICAgICBzdGFydENvb3JkaW5hdGUgLT0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RhcnRDb29yZGluYXRlID49IHJlZ2lvbkVuZCkgewogICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0Q29vcmRpbmF0ZSwgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGVuZCA9PT0gMCB8fCBlbmQgPT09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29vcmRpbmF0ZSArIDEgPD0gcmVnaW9uU3RhcnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0Q29vcmRpbmF0ZSwgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gIlZDRiIgJiYgY3VycmVudENvbHVtbk51bWJlciA9PT0gNCkgewogICAgICAgICAgICByZWZTZXEgPSBsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPT09IGVuZCkgewogICAgICAgICAgICBsZXQgZW5kQ29vcmRpbmF0ZTsKICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gIlZDRiIpIHsKICAgICAgICAgICAgICBlbmRDb29yZGluYXRlID0gdGhpcy5fZ2V0VmNmRW5kKHN0YXJ0Q29vcmRpbmF0ZSwgcmVmU2VxLCBsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVuZENvb3JkaW5hdGUgPSBwYXJzZUludChsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSksIDEwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kQ29vcmRpbmF0ZSA8PSByZWdpb25TdGFydCkgewogICAgICAgICAgICAgIHJldHVybiB7IG92ZXJsYXBzOiBmYWxzZSB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50Q29sdW1uU3RhcnQgPSBpICsgMTsKICAgICAgICAgIGN1cnJlbnRDb2x1bW5OdW1iZXIgKz0gMTsKICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uTnVtYmVyID4gbWF4Q29sdW1uKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyBzdGFydENvb3JkaW5hdGUsIG92ZXJsYXBzOiB0cnVlIH07CiAgICB9CiAgICBfZ2V0VmNmRW5kKHN0YXJ0Q29vcmRpbmF0ZSwgcmVmU2VxLCBpbmZvKSB7CiAgICAgIGxldCBlbmRDb29yZGluYXRlID0gc3RhcnRDb29yZGluYXRlICsgcmVmU2VxLmxlbmd0aDsKICAgICAgY29uc3QgaXNUUkEgPSBpbmZvLmluZGV4T2YoIlNWVFlQRT1UUkEiKSAhPT0gLTE7CiAgICAgIGlmIChpbmZvWzBdICE9PSAiLiIgJiYgIWlzVFJBKSB7CiAgICAgICAgbGV0IHByZXZDaGFyID0gIjsiOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5mby5sZW5ndGg7IGogKz0gMSkgewogICAgICAgICAgaWYgKHByZXZDaGFyID09PSAiOyIgJiYgaW5mby5zbGljZShqLCBqICsgNCkgPT09ICJFTkQ9IikgewogICAgICAgICAgICBsZXQgdmFsdWVFbmQgPSBpbmZvLmluZGV4T2YoIjsiLCBqKTsKICAgICAgICAgICAgaWYgKHZhbHVlRW5kID09PSAtMSkgewogICAgICAgICAgICAgIHZhbHVlRW5kID0gaW5mby5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kQ29vcmRpbmF0ZSA9IHBhcnNlSW50KGluZm8uc2xpY2UoaiArIDQsIHZhbHVlRW5kKSwgMTApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZDaGFyID0gaW5mb1tqXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNUUkEpIHsKICAgICAgICByZXR1cm4gc3RhcnRDb29yZGluYXRlICsgMTsKICAgICAgfQogICAgICByZXR1cm4gZW5kQ29vcmRpbmF0ZTsKICAgIH0KICAgIGFzeW5jIGxpbmVDb3VudChyZWZOYW1lLCBvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXgubGluZUNvdW50KHJlZk5hbWUsIG9wdHMpOwogICAgfQogICAgYXN5bmMgX3JlYWRSZWdpb24ocG9zLCBzaXplLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgYiA9IGltcG9ydF9idWZmZXI3LkJ1ZmZlci5hbGxvYyhzaXplKTsKICAgICAgY29uc3QgeyBieXRlc1JlYWQsIGJ1ZmZlciB9ID0gYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWQoYiwgMCwgc2l6ZSwgcG9zLCBvcHRzKTsKICAgICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgwLCBieXRlc1JlYWQpOwogICAgfQogICAgYXN5bmMgcmVhZENodW5rKGMsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fcmVhZFJlZ2lvbihjLm1pbnYuYmxvY2tQb3NpdGlvbiwgYy5mZXRjaGVkU2l6ZSgpLCBvcHRzKTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW56aXBDaHVua1NsaWNlKGRhdGEsIGMpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBkZWNvbXByZXNzaW5nIGMgJHtjLnRvU3RyaW5nKCl9ICR7ZX1gKTsKICAgICAgfQogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt2Y2ZANS4wLjEwL25vZGVfbW9kdWxlcy9AZ21vZC92Y2YvZXNtL2luZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdmNmQDUuMC4xMC9ub2RlX21vZHVsZXMvQGdtb2QvdmNmL2VzbS9wYXJzZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3ZjZkA1LjAuMTAvbm9kZV9tb2R1bGVzL0BnbW9kL3ZjZi9lc20vdmNmUmVzZXJ2ZWQuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIHZjZlJlc2VydmVkX2RlZmF1bHQgPSB7CiAgICBJbmZvRmllbGRzOiB7CiAgICAgIEFBOiB7IE51bWJlcjogMSwgVHlwZTogIlN0cmluZyIsIERlc2NyaXB0aW9uOiAiQW5jZXN0cmFsIGFsbGVsZSIgfSwKICAgICAgQUM6IHsKICAgICAgICBOdW1iZXI6ICJBIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJBbGxlbGUgY291bnQgaW4gZ2Vub3R5cGVzLCBmb3IgZWFjaCBBTFQgYWxsZWxlLCBpbiB0aGUgc2FtZSBvcmRlciBhcyBsaXN0ZWQiCiAgICAgIH0sCiAgICAgIEFEOiB7CiAgICAgICAgTnVtYmVyOiAiUiIsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiVG90YWwgcmVhZCBkZXB0aCBmb3IgZWFjaCBhbGxlbGUiCiAgICAgIH0sCiAgICAgIEFERjogewogICAgICAgIE51bWJlcjogIlIiLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJlYWQgZGVwdGggZm9yIGVhY2ggYWxsZWxlIG9uIHRoZSBmb3J3YXJkIHN0cmFuZCIKICAgICAgfSwKICAgICAgQURSOiB7CiAgICAgICAgTnVtYmVyOiAiUiIsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiUmVhZCBkZXB0aCBmb3IgZWFjaCBhbGxlbGUgb24gdGhlIHJldmVyc2Ugc3RyYW5kIgogICAgICB9LAogICAgICBBRjogewogICAgICAgIE51bWJlcjogIkEiLAogICAgICAgIFR5cGU6ICJGbG9hdCIsCiAgICAgICAgRGVzY3JpcHRpb246ICJBbGxlbGUgZnJlcXVlbmN5IGZvciBlYWNoIEFMVCBhbGxlbGUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgbGlzdGVkIChlc3RpbWF0ZWQgZnJvbSBwcmltYXJ5IGRhdGEsIG5vdCBjYWxsZWQgZ2Vub3R5cGVzKSIKICAgICAgfSwKICAgICAgQU46IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiVG90YWwgbnVtYmVyIG9mIGFsbGVsZXMgaW4gY2FsbGVkIGdlbm90eXBlcyIKICAgICAgfSwKICAgICAgQlE6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkZsb2F0IiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJNUyBiYXNlIHF1YWxpdHkiCiAgICAgIH0sCiAgICAgIENJR0FSOiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6ICJGbG9hdCIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDaWdhciBzdHJpbmcgZGVzY3JpYmluZyBob3cgdG8gYWxpZ24gYW4gYWx0ZXJuYXRlIGFsbGVsZSB0byB0aGUgcmVmZXJlbmNlIGFsbGVsZSIKICAgICAgfSwKICAgICAgREI6IHsKICAgICAgICBOdW1iZXI6IDAsCiAgICAgICAgVHlwZTogIkZsYWciLAogICAgICAgIERlc2NyaXB0aW9uOiAiZGJTTlAgbWVtYmVyc2hpcCIKICAgICAgfSwKICAgICAgRFA6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiY29tYmluZWQgZGVwdGggYWNyb3NzIHNhbXBsZXMiCiAgICAgIH0sCiAgICAgIEVORDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJFbmQgcG9zaXRpb24gKGZvciB1c2Ugd2l0aCBzeW1ib2xpYyBhbGxlbGVzKSIKICAgICAgfSwKICAgICAgSDI6IHsKICAgICAgICBOdW1iZXI6IDAsCiAgICAgICAgVHlwZTogIkZsYWciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSGFwTWFwMiBtZW1iZXJzaGlwIgogICAgICB9LAogICAgICBIMzogewogICAgICAgIE51bWJlcjogMCwKICAgICAgICBUeXBlOiAiRmxhZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJIYXBNYXAzIG1lbWJlcnNoaXAiCiAgICAgIH0sCiAgICAgIE1ROiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6IG51bGwsCiAgICAgICAgRGVzY3JpcHRpb246ICJSTVMgbWFwcGluZyBxdWFsaXR5IgogICAgICB9LAogICAgICBNUTA6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiTnVtYmVyIG9mIE1BUFEgPT0gMCByZWFkcyIKICAgICAgfSwKICAgICAgTlM6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiTnVtYmVyIG9mIHNhbXBsZXMgd2l0aCBkYXRhIgogICAgICB9LAogICAgICBTQjogewogICAgICAgIE51bWJlcjogNCwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJTdHJhbmQgYmlhcyIKICAgICAgfSwKICAgICAgU09NQVRJQzogewogICAgICAgIE51bWJlcjogMCwKICAgICAgICBUeXBlOiAiRmxhZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJTb21hdGljIG11dGF0aW9uIChmb3IgY2FuY2VyIGdlbm9taWNzKSIKICAgICAgfSwKICAgICAgVkFMSURBVEVEOiB7CiAgICAgICAgTnVtYmVyOiAwLAogICAgICAgIFR5cGU6ICJGbGFnIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlZhbGlkYXRlZCBieSBmb2xsb3ctdXAgZXhwZXJpbWVudCIKICAgICAgfSwKICAgICAgIjEwMDBHIjogewogICAgICAgIE51bWJlcjogMCwKICAgICAgICBUeXBlOiAiRmxhZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICIxMDAwIEdlbm9tZXMgbWVtYmVyc2hpcCIKICAgICAgfSwKICAgICAgSU1QUkVDSVNFOiB7CiAgICAgICAgTnVtYmVyOiAwLAogICAgICAgIFR5cGU6ICJGbGFnIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkltcHJlY2lzZSBzdHJ1Y3R1cmFsIHZhcmlhdGlvbiIKICAgICAgfSwKICAgICAgTk9WRUw6IHsKICAgICAgICBOdW1iZXI6IDAsCiAgICAgICAgVHlwZTogIkZsYWciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSW5kaWNhdGVzIGEgbm92ZWwgc3RydWN0dXJhbCB2YXJpYXRpb24iCiAgICAgIH0sCiAgICAgIFNWVFlQRTogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlR5cGUgb2Ygc3RydWN0dXJhbCB2YXJpYW50IgogICAgICB9LAogICAgICBTVkxFTjogewogICAgICAgIE51bWJlcjogbnVsbCwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJEaWZmZXJlbmNlIGluIGxlbmd0aCBiZXR3ZWVuIFJFRiBhbmQgQUxUIGFsbGVsZXMiCiAgICAgIH0sCiAgICAgIENJUE9TOiB7CiAgICAgICAgTnVtYmVyOiAyLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkNvbmZpZGVuY2UgaW50ZXJ2YWwgYXJvdW5kIFBPUyBmb3IgaW1wcmVjaXNlIHZhcmlhbnRzIgogICAgICB9LAogICAgICBDSUVORDogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25maWRlbmNlIGludGVydmFsIGFyb3VuZCBFTkQgZm9yIGltcHJlY2lzZSB2YXJpYW50cyIKICAgICAgfSwKICAgICAgSE9NTEVOOiB7CiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiTGVuZ3RoIG9mIGJhc2UgcGFpciBpZGVudGljYWwgbWljcm8taG9tb2xvZ3kgYXQgZXZlbnQgYnJlYWtwb2ludHMiCiAgICAgIH0sCiAgICAgIEhPTVNFUTogewogICAgICAgIFR5cGU6ICJTdHJpbmciLAogICAgICAgIERlc2NyaXB0aW9uOiAiU2VxdWVuY2Ugb2YgYmFzZSBwYWlyIGlkZW50aWNhbCBtaWNyby1ob21vbG9neSBhdCBldmVudCBicmVha3BvaW50cyIKICAgICAgfSwKICAgICAgQktQVElEOiB7CiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJJRCBvZiB0aGUgYXNzZW1ibGVkIGFsdGVybmF0ZSBhbGxlbGUgaW4gdGhlIGFzc2VtYmx5IGZpbGUiCiAgICAgIH0sCiAgICAgIE1FSU5GTzogewogICAgICAgIE51bWJlcjogNCwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIk1vYmlsZSBlbGVtZW50IGluZm8gb2YgdGhlIGZvcm0gTkFNRSxTVEFSVCxFTkQsUE9MQVJJVFkiCiAgICAgIH0sCiAgICAgIE1FVFJBTlM6IHsKICAgICAgICBOdW1iZXI6IDQsCiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJNb2JpbGUgZWxlbWVudCB0cmFuc2R1Y3Rpb24gaW5mbyBvZiB0aGUgZm9ybSBDSFIsU1RBUlQsRU5ELFBPTEFSSVRZIgogICAgICB9LAogICAgICBER1ZJRDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIklEIG9mIHRoaXMgZWxlbWVudCBpbiBEYXRhYmFzZSBvZiBHZW5vbWljIFZhcmlhdGlvbiIKICAgICAgfSwKICAgICAgREJWQVJJRDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIklEIG9mIHRoaXMgZWxlbWVudCBpbiBEQlZBUiIKICAgICAgfSwKICAgICAgREJSSVBJRDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIklEIG9mIHRoaXMgZWxlbWVudCBpbiBEQlJJUCIKICAgICAgfSwKICAgICAgTUFURUlEOiB7CiAgICAgICAgTnVtYmVyOiBudWxsLAogICAgICAgIFR5cGU6ICJTdHJpbmciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSUQgb2YgbWF0ZSBicmVha2VuZHMiCiAgICAgIH0sCiAgICAgIFBBUklEOiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6ICJTdHJpbmciLAogICAgICAgIERlc2NyaXB0aW9uOiAiSUQgb2YgcGFydG5lciBicmVha2VuZCIKICAgICAgfSwKICAgICAgRVZFTlQ6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICJJRCBvZiBldmVudCBhc3NvY2lhdGVkIHRvIGJyZWFrZW5kIgogICAgICB9LAogICAgICBDSUxFTjogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25maWRlbmNlIGludGVydmFsIGFyb3VuZCB0aGUgaW5zZXJ0ZWQgbWF0ZXJpYWwgYmV0d2VlbiBicmVha2VuZCIKICAgICAgfSwKICAgICAgRFBBREo6IHsgVHlwZTogIkludGVnZXIiLCBEZXNjcmlwdGlvbjogIlJlYWQgRGVwdGggb2YgYWRqYWNlbmN5IiB9LAogICAgICBDTjogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb3B5IG51bWJlciBvZiBzZWdtZW50IGNvbnRhaW5pbmcgYnJlYWtlbmQiCiAgICAgIH0sCiAgICAgIENOQURKOiB7CiAgICAgICAgTnVtYmVyOiBudWxsLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkNvcHkgbnVtYmVyIG9mIGFkamFjZW5jeSIKICAgICAgfSwKICAgICAgQ0lDTjogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25maWRlbmNlIGludGVydmFsIGFyb3VuZCBjb3B5IG51bWJlciBmb3IgdGhlIHNlZ21lbnQiCiAgICAgIH0sCiAgICAgIENJQ05BREo6IHsKICAgICAgICBOdW1iZXI6IG51bGwsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiQ29uZmlkZW5jZSBpbnRlcnZhbCBhcm91bmQgY29weSBudW1iZXIgZm9yIHRoZSBhZGphY2VuY3kiCiAgICAgIH0KICAgIH0sCiAgICBHZW5vdHlwZUZpZWxkczogewogICAgICBBRDogewogICAgICAgIE51bWJlcjogIlIiLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJlYWQgZGVwdGggZm9yIGVhY2ggYWxsZWxlIgogICAgICB9LAogICAgICBBREY6IHsKICAgICAgICBOdW1iZXI6ICJSIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJSZWFkIGRlcHRoIGZvciBlYWNoIGFsbGVsZSBvbiB0aGUgZm9yd2FyZCBzdHJhbmQiCiAgICAgIH0sCiAgICAgIEFEUjogewogICAgICAgIE51bWJlcjogIlIiLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlJlYWQgZGVwdGggZm9yIGVhY2ggYWxsZWxlIG9uIHRoZSByZXZlcnNlIHN0cmFuZCIKICAgICAgfSwKICAgICAgRFA6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiUmVhZCBkZXB0aCIKICAgICAgfSwKICAgICAgRUM6IHsKICAgICAgICBOdW1iZXI6ICJBIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJFeHBlY3RlZCBhbHRlcm5hdGUgYWxsZWxlIGNvdW50cyIKICAgICAgfSwKICAgICAgRlQ6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIlN0cmluZyIsCiAgICAgICAgRGVzY3JpcHRpb246ICdGaWx0ZXIgaW5kaWNhdGluZyBpZiB0aGlzIGdlbm90eXBlIHdhcyAiY2FsbGVkIicKICAgICAgfSwKICAgICAgR0w6IHsKICAgICAgICBOdW1iZXI6ICJHIiwKICAgICAgICBUeXBlOiAiRmxvYXQiLAogICAgICAgIERlc2NyaXB0aW9uOiAiR2Vub3R5cGUgbGlrZWxpaG9vZHMiCiAgICAgIH0sCiAgICAgIEdQOiB7CiAgICAgICAgTnVtYmVyOiAiRyIsCiAgICAgICAgVHlwZTogIkZsb2F0IiwKICAgICAgICBEZXNjcmlwdGlvbjogIkdlbm90eXBlIHBvc3RlcmlvciBwcm9iYWJpbGl0aWVzIgogICAgICB9LAogICAgICBHUTogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJDb25kaXRpb25hbCBnZW5vdHlwZSBxdWFsaXR5IgogICAgICB9LAogICAgICBHVDogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiU3RyaW5nIiwKICAgICAgICBEZXNjcmlwdGlvbjogIkdlbm90eXBlIgogICAgICB9LAogICAgICBIUTogewogICAgICAgIE51bWJlcjogMiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJIYXBsb3R5cGUgcXVhbGl0eSIKICAgICAgfSwKICAgICAgTVE6IHsKICAgICAgICBOdW1iZXI6IDEsCiAgICAgICAgVHlwZTogIkludGVnZXIiLAogICAgICAgIERlc2NyaXB0aW9uOiAiUk1TIG1hcHBpbmcgcXVhbGl0eSIKICAgICAgfSwKICAgICAgUEw6IHsKICAgICAgICBOdW1iZXI6ICJHIiwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJQaHJlZC1zY2FsZWQgZ2Vub3R5cGUgbGlrZWxpaG9vZHMgcm91bmRlZCB0byB0aGUgY2xvc2VzdCBpbnRlZ2VyIgogICAgICB9LAogICAgICBQUTogewogICAgICAgIE51bWJlcjogMSwKICAgICAgICBUeXBlOiAiSW50ZWdlciIsCiAgICAgICAgRGVzY3JpcHRpb246ICJQaGFzaW5nIHF1YWxpdHkiCiAgICAgIH0sCiAgICAgIFBTOiB7CiAgICAgICAgTnVtYmVyOiAxLAogICAgICAgIFR5cGU6ICJJbnRlZ2VyIiwKICAgICAgICBEZXNjcmlwdGlvbjogIlBoYXNlIHNldCIKICAgICAgfQogICAgfSwKICAgIEFsdFR5cGVzOiB7CiAgICAgIERFTDogewogICAgICAgIERlc2NyaXB0aW9uOiAiRGVsZXRpb24gcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgSU5TOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJJbnNlcnRpb24gb2Ygbm92ZWwgc2VxdWVuY2UgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgRFVQOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJSZWdpb24gb2YgZWxldmF0ZWQgY29weSBudW1iZXIgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgSU5WOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJJbnZlcnNpb24gb2YgcmVmZXJlbmNlIHNlcXVlbmNlIgogICAgICB9LAogICAgICBDTlY6IHsKICAgICAgICBEZXNjcmlwdGlvbjogIkNvcHkgbnVtYmVyIHZhcmlhYmxlIHJlZ2lvbiAobWF5IGJlIGJvdGggZGVsZXRpb24gYW5kIGR1cGxpY2F0aW9uKSIKICAgICAgfSwKICAgICAgIkRVUDpUQU5ERU0iOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJUYW5kZW0gZHVwbGljYXRpb24iCiAgICAgIH0sCiAgICAgICJERUw6TUUiOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJEZWxldGlvbiBvZiBtb2JpbGUgZWxlbWVudCByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIgogICAgICB9LAogICAgICAiSU5TOk1FIjogewogICAgICAgIERlc2NyaXB0aW9uOiAiSW5zZXJ0aW9uIG9mIGEgbW9iaWxlIGVsZW1lbnQgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSIKICAgICAgfSwKICAgICAgTk9OX1JFRjogewogICAgICAgIERlc2NyaXB0aW9uOiAiUmVwcmVzZW50cyBhbnkgcG9zc2libGUgYWx0ZXJuYXRpdmUgYWxsZWxlIGF0IHRoaXMgbG9jYXRpb24iCiAgICAgIH0sCiAgICAgICIqIjogewogICAgICAgIERlc2NyaXB0aW9uOiAiUmVwcmVzZW50cyBhbnkgcG9zc2libGUgYWx0ZXJuYXRpdmUgYWxsZWxlIGF0IHRoaXMgbG9jYXRpb24iCiAgICAgIH0KICAgIH0sCiAgICBGaWx0ZXJUeXBlczogewogICAgICBQQVNTOiB7CiAgICAgICAgRGVzY3JpcHRpb246ICJQYXNzZWQgYWxsIGZpbHRlcnMiCiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdmNmQDUuMC4xMC9ub2RlX21vZHVsZXMvQGdtb2QvdmNmL2VzbS9wYXJzZS5qcwogIGZ1bmN0aW9uIFZhcmlhbnQoc3R1ZmYpIHsKICAgIE9iamVjdC5hc3NpZ24odGhpcywgc3R1ZmYpOwogIH0KICBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnROb1Rocm93KHVyaSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1cmkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gdXJpOwogICAgfQogIH0KICB2YXIgVkNGID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoeyBoZWFkZXIgPSAiIiwgc3RyaWN0ID0gdHJ1ZSB9KSB7CiAgICAgIGlmICghaGVhZGVyIHx8ICFoZWFkZXIubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBoZWFkZXIgcmVjZWl2ZWQiKTsKICAgICAgfQogICAgICBjb25zdCBoZWFkZXJMaW5lcyA9IGhlYWRlci5zcGxpdCgvW1xyXG5dKy8pLmZpbHRlcigobGluZSkgPT4gbGluZSk7CiAgICAgIGlmICghaGVhZGVyTGluZXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJubyBub24tZW1wdHkgaGVhZGVyIGxpbmVzIHNwZWNpZmllZCIpOwogICAgICB9CiAgICAgIHRoaXMuc3RyaWN0ID0gc3RyaWN0OwogICAgICB0aGlzLm1ldGFkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgSU5GTzogdmNmUmVzZXJ2ZWRfZGVmYXVsdC5JbmZvRmllbGRzLAogICAgICAgIEZPUk1BVDogdmNmUmVzZXJ2ZWRfZGVmYXVsdC5HZW5vdHlwZUZpZWxkcywKICAgICAgICBBTFQ6IHZjZlJlc2VydmVkX2RlZmF1bHQuQWx0VHlwZXMsCiAgICAgICAgRklMVEVSOiB2Y2ZSZXNlcnZlZF9kZWZhdWx0LkZpbHRlclR5cGVzCiAgICAgIH0pKTsKICAgICAgbGV0IGxhc3RMaW5lOwogICAgICBoZWFkZXJMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7CiAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoIiMiKSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgbGluZSBpbiBoZWFkZXI6CiR7bGluZX1gKTsKICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiIyMiKSkgewogICAgICAgICAgdGhpcy5fcGFyc2VNZXRhZGF0YShsaW5lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGFzdExpbmUgPSBsaW5lOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICghbGFzdExpbmUpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIGZvcm1hdCBsaW5lIGZvdW5kIGluIGhlYWRlciIpOwogICAgICB9CiAgICAgIGNvbnN0IGZpZWxkcyA9IGxhc3RMaW5lLnRyaW0oKS5zcGxpdCgiCSIpOwogICAgICBjb25zdCB0aGlzSGVhZGVyID0gZmllbGRzLnNsaWNlKDAsIDgpOwogICAgICBjb25zdCBjb3JyZWN0SGVhZGVyID0gWwogICAgICAgICIjQ0hST00iLAogICAgICAgICJQT1MiLAogICAgICAgICJJRCIsCiAgICAgICAgIlJFRiIsCiAgICAgICAgIkFMVCIsCiAgICAgICAgIlFVQUwiLAogICAgICAgICJGSUxURVIiLAogICAgICAgICJJTkZPIgogICAgICBdOwogICAgICBpZiAoZmllbGRzLmxlbmd0aCA8IDgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZDRiBoZWFkZXIgbWlzc2luZyBjb2x1bW5zOgoke2xhc3RMaW5lfWApOwogICAgICB9IGVsc2UgaWYgKHRoaXNIZWFkZXIubGVuZ3RoICE9PSBjb3JyZWN0SGVhZGVyLmxlbmd0aCB8fCAhdGhpc0hlYWRlci5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gY29ycmVjdEhlYWRlcltpbmRleF0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWQ0YgY29sdW1uIGhlYWRlcnMgbm90IGNvcnJlY3Q6CiR7bGFzdExpbmV9YCk7CiAgICAgIH0KICAgICAgdGhpcy5zYW1wbGVzID0gZmllbGRzLnNsaWNlKDkpOwogICAgfQogICAgX3BhcnNlR2Vub3R5cGVzKGZvcm1hdCwgcHJlcmVzdCkgewogICAgICBjb25zdCByZXN0ID0gcHJlcmVzdC5zcGxpdCgiCSIpOwogICAgICBjb25zdCBnZW5vdHlwZXMgPSB7fTsKICAgICAgY29uc3QgZm9ybWF0S2V5cyA9IGZvcm1hdCA9PT0gbnVsbCB8fCBmb3JtYXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZvcm1hdC5zcGxpdCgiOiIpOwogICAgICBpZiAoZm9ybWF0S2V5cykgewogICAgICAgIHRoaXMuc2FtcGxlcy5mb3JFYWNoKChzYW1wbGUsIGluZGV4KSA9PiB7CiAgICAgICAgICBnZW5vdHlwZXNbc2FtcGxlXSA9IHt9OwogICAgICAgICAgZm9ybWF0S2V5cy5mb3JFYWNoKChrZXkpID0+IHsKICAgICAgICAgICAgZ2Vub3R5cGVzW3NhbXBsZV1ba2V5XSA9IG51bGw7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJlc3RbaW5kZXhdLnNwbGl0KCI6IikuZmlsdGVyKChmKSA9PiBmKS5mb3JFYWNoKCh2YWwsIGluZGV4MikgPT4gewogICAgICAgICAgICBsZXQgdGhpc1ZhbHVlOwogICAgICAgICAgICBpZiAodmFsID09PSAiIiB8fCB2YWwgPT09ICIuIiB8fCB2YWwgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IHZhbC5zcGxpdCgiLCIpLm1hcCgoZW50KSA9PiBlbnQgPT09ICIuIiA/IG51bGwgOiBlbnQpOwogICAgICAgICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0TWV0YWRhdGEoIkZPUk1BVCIsIGZvcm1hdEtleXNbaW5kZXgyXSwgIlR5cGUiKTsKICAgICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAiSW50ZWdlciIgfHwgdmFsdWVUeXBlID09PSAiRmxvYXQiKSB7CiAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSBlbnRyaWVzLm1hcCgodmFsMikgPT4gdmFsMiA/ICt2YWwyIDogdmFsMik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IGVudHJpZXM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGdlbm90eXBlc1tzYW1wbGVdW2Zvcm1hdEtleXNbaW5kZXgyXV0gPSB0aGlzVmFsdWU7CiAgICAgICAgICB9LCB7fSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGdlbm90eXBlczsKICAgIH0KICAgIF9wYXJzZU1ldGFkYXRhKGxpbmUpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLnRyaW0oKS5tYXRjaCgvXiMjKC4rPyk9KC4qKS8pOwogICAgICBpZiAoIW1hdGNoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lIGlzIG5vdCBhIHZhbGlkIG1ldGFkYXRhIGxpbmU6ICR7bGluZX1gKTsKICAgICAgfQogICAgICBjb25zdCBbbWV0YUtleSwgbWV0YVZhbF0gPSBtYXRjaC5zbGljZSgxLCAzKTsKICAgICAgaWYgKG1ldGFWYWwuc3RhcnRzV2l0aCgiPCIpKSB7CiAgICAgICAgaWYgKCEobWV0YUtleSBpbiB0aGlzLm1ldGFkYXRhKSkgewogICAgICAgICAgdGhpcy5tZXRhZGF0YVttZXRhS2V5XSA9IHt9OwogICAgICAgIH0KICAgICAgICBjb25zdCBbaWQsIGtleVZhbHNdID0gdGhpcy5fcGFyc2VTdHJ1Y3R1cmVkTWV0YVZhbChtZXRhVmFsKTsKICAgICAgICB0aGlzLm1ldGFkYXRhW21ldGFLZXldW2lkXSA9IGtleVZhbHM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5tZXRhZGF0YVttZXRhS2V5XSA9IG1ldGFWYWw7CiAgICAgIH0KICAgIH0KICAgIF9wYXJzZVN0cnVjdHVyZWRNZXRhVmFsKG1ldGFWYWwpIHsKICAgICAgY29uc3Qga2V5VmFscyA9IHRoaXMuX3BhcnNlS2V5VmFsdWUobWV0YVZhbC5yZXBsYWNlKC9ePHw+JC9nLCAiIiksICIsIik7CiAgICAgIGNvbnN0IGlkID0ga2V5VmFscy5JRDsKICAgICAgZGVsZXRlIGtleVZhbHMuSUQ7CiAgICAgIGlmICgiTnVtYmVyIiBpbiBrZXlWYWxzKSB7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyKGtleVZhbHMuTnVtYmVyKSkpIHsKICAgICAgICAgIGtleVZhbHMuTnVtYmVyID0gTnVtYmVyKGtleVZhbHMuTnVtYmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIFtpZCwga2V5VmFsc107CiAgICB9CiAgICBnZXRNZXRhZGF0YSguLi5hcmdzKSB7CiAgICAgIGxldCBmaWx0ZXJlZE1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgZmlsdGVyZWRNZXRhZGF0YSA9IGZpbHRlcmVkTWV0YWRhdGFbYXJnc1tpXV07CiAgICAgICAgaWYgKCFmaWx0ZXJlZE1ldGFkYXRhKSB7CiAgICAgICAgICByZXR1cm4gZmlsdGVyZWRNZXRhZGF0YTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZpbHRlcmVkTWV0YWRhdGE7CiAgICB9CiAgICBfcGFyc2VLZXlWYWx1ZShzdHIsIHBhaXJTZXBhcmF0b3IgPSAiOyIpIHsKICAgICAgY29uc3QgZGF0YSA9IHt9OwogICAgICBsZXQgY3VycktleSA9ICIiOwogICAgICBsZXQgY3VyclZhbHVlID0gIiI7CiAgICAgIGxldCBzdGF0ZSA9IDE7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKHN0YXRlID09PSAxKSB7CiAgICAgICAgICBpZiAoc3RyW2ldID09PSAiPSIpIHsKICAgICAgICAgICAgc3RhdGUgPSAyOwogICAgICAgICAgfSBlbHNlIGlmIChzdHJbaV0gIT09IHBhaXJTZXBhcmF0b3IpIHsKICAgICAgICAgICAgY3VycktleSArPSBzdHJbaV07CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJWYWx1ZSA9PT0gIiIpIHsKICAgICAgICAgICAgZGF0YVtjdXJyS2V5XSA9IG51bGw7CiAgICAgICAgICAgIGN1cnJLZXkgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyKSB7CiAgICAgICAgICBpZiAoc3RyW2ldID09PSBwYWlyU2VwYXJhdG9yKSB7CiAgICAgICAgICAgIGRhdGFbY3VycktleV0gPSBjdXJyVmFsdWU7CiAgICAgICAgICAgIGN1cnJLZXkgPSAiIjsKICAgICAgICAgICAgY3VyclZhbHVlID0gIiI7CiAgICAgICAgICAgIHN0YXRlID0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnIicpIHsKICAgICAgICAgICAgc3RhdGUgPSAzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY3VyclZhbHVlICs9IHN0cltpXTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAzKSB7CiAgICAgICAgICBpZiAoc3RyW2ldICE9PSAnIicpIHsKICAgICAgICAgICAgY3VyclZhbHVlICs9IHN0cltpXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlID0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0YXRlID09PSAyIHx8IHN0YXRlID09PSAzKSB7CiAgICAgICAgZGF0YVtjdXJyS2V5XSA9IGN1cnJWYWx1ZTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSkgewogICAgICAgIGRhdGFbY3VycktleV0gPSBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgcGFyc2VMaW5lKGxpbmUpIHsKICAgICAgbGluZSA9IGxpbmUudHJpbSgpOwogICAgICBpZiAoIWxpbmUubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdCBwYXJzZXIgPSB0aGlzOwogICAgICBsZXQgY3VyckNoYXIgPSAwOwogICAgICBmb3IgKGxldCBjdXJyRmllbGQgPSAwOyBjdXJyQ2hhciA8IGxpbmUubGVuZ3RoOyBjdXJyQ2hhciArPSAxKSB7CiAgICAgICAgaWYgKGxpbmVbY3VyckNoYXJdID09PSAiCSIpIHsKICAgICAgICAgIGN1cnJGaWVsZCArPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoY3VyckZpZWxkID09PSA5KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgZmllbGRzID0gbGluZS5zdWJzdHIoMCwgY3VyckNoYXIpLnNwbGl0KCIJIik7CiAgICAgIGNvbnN0IHJlc3QgPSBsaW5lLnN1YnN0cihjdXJyQ2hhciArIDEpOwogICAgICBjb25zdCBbQ0hST00sIFBPUywgSUQsIFJFRiwgQUxULCBRVUFMLCBGSUxURVJdID0gZmllbGRzOwogICAgICBjb25zdCBjaHJvbSA9IENIUk9NOwogICAgICBjb25zdCBwb3MgPSArUE9TOwogICAgICBjb25zdCBpZCA9IElEID09PSAiLiIgPyBudWxsIDogSUQuc3BsaXQoIjsiKTsKICAgICAgY29uc3QgcmVmID0gUkVGOwogICAgICBjb25zdCBhbHQgPSBBTFQgPT09ICIuIiA/IG51bGwgOiBBTFQuc3BsaXQoIiwiKTsKICAgICAgY29uc3QgcXVhbCA9IFFVQUwgPT09ICIuIiA/IG51bGwgOiArUVVBTDsKICAgICAgY29uc3QgZmlsdGVyID0gRklMVEVSID09PSAiLiIgPyBudWxsIDogRklMVEVSLnNwbGl0KCI7Iik7CiAgICAgIGlmICh0aGlzLnN0cmljdCAmJiBmaWVsZHNbN10gPT09IHZvaWQgMCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigibm8gSU5GTyBmaWVsZCBzcGVjaWZpZWQsIG11c3QgY29udGFpbiBhdCBsZWFzdCBhICcuJyAodHVybiBvZmYgc3RyaWN0IG1vZGUgdG8gYWxsb3cpIik7CiAgICAgIH0KICAgICAgY29uc3QgaW5mbyA9IGZpZWxkc1s3XSA9PT0gdm9pZCAwIHx8IGZpZWxkc1s3XSA9PT0gIi4iID8ge30gOiB0aGlzLl9wYXJzZUtleVZhbHVlKGZpZWxkc1s3XSk7CiAgICAgIE9iamVjdC5rZXlzKGluZm8pLmZvckVhY2goKGtleSkgPT4gewogICAgICAgIGxldCBpdGVtczsKICAgICAgICBpZiAoaW5mb1trZXldKSB7CiAgICAgICAgICBpdGVtcyA9IGluZm9ba2V5XS5zcGxpdCgiLCIpLm1hcCgodmFsKSA9PiB2YWwgPT09ICIuIiA/IG51bGwgOiB2YWwpLm1hcCgoZikgPT4gZiA/IGRlY29kZVVSSUNvbXBvbmVudE5vVGhyb3coZikgOiBmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlbXMgPSBpbmZvW2tleV07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5nZXRNZXRhZGF0YSgiSU5GTyIsIGtleSwgIlR5cGUiKTsKICAgICAgICBpZiAoaXRlbVR5cGUpIHsKICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gIkludGVnZXIiIHx8IGl0ZW1UeXBlID09PSAiRmxvYXQiKSB7CiAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMubWFwKCh2YWwpID0+IHsKICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgPT09ICJGbGFnIikgewogICAgICAgICAgICBpZiAoaW5mb1trZXldKSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbmZvIGZpZWxkICR7a2V5fSBpcyBhIEZsYWcgYW5kIHNob3VsZCBub3QgaGF2ZSBhIHZhbHVlIChnb3QgdmFsdWUgJHtpbmZvW2tleV19KWApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGl0ZW1zID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbmZvW2tleV0gPSBpdGVtczsKICAgICAgfSk7CiAgICAgIGNvbnN0IHZhcmlhbnQgPSBuZXcgVmFyaWFudCh7CiAgICAgICAgQ0hST006IGNocm9tLAogICAgICAgIFBPUzogcG9zLAogICAgICAgIEFMVDogYWx0LAogICAgICAgIElORk86IGluZm8sCiAgICAgICAgUkVGOiByZWYsCiAgICAgICAgRklMVEVSOiBmaWx0ZXIgJiYgZmlsdGVyLmxlbmd0aCA9PT0gMSAmJiBmaWx0ZXJbMF0gPT09ICJQQVNTIiA/ICJQQVNTIiA6IGZpbHRlciwKICAgICAgICBJRDogaWQsCiAgICAgICAgUVVBTDogcXVhbAogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhcmlhbnQsICJTQU1QTEVTIiwgewogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHNhbXBsZXMgPSBwYXJzZXIuX3BhcnNlR2Vub3R5cGVzKGZpZWxkc1s4XSwgcmVzdCk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIlNBTVBMRVMiLCB7CiAgICAgICAgICAgIHZhbHVlOiBzYW1wbGVzLAogICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBzYW1wbGVzOwogICAgICAgIH0sCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgIH0pOwogICAgICByZXR1cm4gdmFyaWFudDsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdmNmQDUuMC4xMC9ub2RlX21vZHVsZXMvQGdtb2QvdmNmL2VzbS9pbmRleC5qcwogIHZhciBlc21fZGVmYXVsdCA9IFZDRjsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvd29ya2VyLm1qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X3dvcmtlciA9IF9fdG9Nb2R1bGUocmVxdWlyZV93b3JrZXIoKSk7CiAgdmFyIGV4cG9zZSA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5leHBvc2U7CiAgdmFyIHJlZ2lzdGVyU2VyaWFsaXplciA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5yZWdpc3RlclNlcmlhbGl6ZXI7CiAgdmFyIFRyYW5zZmVyID0gaW1wb3J0X3dvcmtlci5kZWZhdWx0LlRyYW5zZmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sb2Rhc2guanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAib2JqZWN0IiAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDsKICB2YXIgZnJlZUdsb2JhbF9kZWZhdWx0ID0gZnJlZUdsb2JhbDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMKICB2YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAib2JqZWN0IiAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjsKICB2YXIgcm9vdCA9IGZyZWVHbG9iYWxfZGVmYXVsdCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogIHZhciByb290X2RlZmF1bHQgPSByb290OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzCiAgdmFyIFN5bWJvbDIgPSByb290X2RlZmF1bHQuU3ltYm9sOwogIHZhciBTeW1ib2xfZGVmYXVsdCA9IFN5bWJvbDI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsKICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZzsKICB2YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2xfZGVmYXVsdCA/IFN5bWJvbF9kZWZhdWx0LnRvU3RyaW5nVGFnIDogdm9pZCAwOwogIGZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkgewogICAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLCB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107CiAgICB0cnkgewogICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB2b2lkIDA7CiAgICAgIHZhciB1bm1hc2tlZCA9IHRydWU7CiAgICB9IGNhdGNoIChlKSB7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7CiAgICBpZiAodW5tYXNrZWQpIHsKICAgICAgaWYgKGlzT3duKSB7CiAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnOwogICAgICB9IGVsc2UgewogICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBnZXRSYXdUYWdfZGVmYXVsdCA9IGdldFJhd1RhZzsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBvYmplY3RQcm90bzIgPSBPYmplY3QucHJvdG90eXBlOwogIHZhciBuYXRpdmVPYmplY3RUb1N0cmluZzIgPSBvYmplY3RQcm90bzIudG9TdHJpbmc7CiAgZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHsKICAgIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZSk7CiAgfQogIHZhciBvYmplY3RUb1N0cmluZ19kZWZhdWx0ID0gb2JqZWN0VG9TdHJpbmc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzCiAgdmFyIG51bGxUYWcgPSAiW29iamVjdCBOdWxsXSI7CiAgdmFyIHVuZGVmaW5lZFRhZyA9ICJbb2JqZWN0IFVuZGVmaW5lZF0iOwogIHZhciBzeW1Ub1N0cmluZ1RhZzIgPSBTeW1ib2xfZGVmYXVsdCA/IFN5bWJvbF9kZWZhdWx0LnRvU3RyaW5nVGFnIDogdm9pZCAwOwogIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdm9pZCAwID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZzsKICAgIH0KICAgIHJldHVybiBzeW1Ub1N0cmluZ1RhZzIgJiYgc3ltVG9TdHJpbmdUYWcyIGluIE9iamVjdCh2YWx1ZSkgPyBnZXRSYXdUYWdfZGVmYXVsdCh2YWx1ZSkgOiBvYmplY3RUb1N0cmluZ19kZWZhdWx0KHZhbHVlKTsKICB9CiAgdmFyIGJhc2VHZXRUYWdfZGVmYXVsdCA9IGJhc2VHZXRUYWc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAib2JqZWN0IjsKICB9CiAgdmFyIGlzT2JqZWN0TGlrZV9kZWZhdWx0ID0gaXNPYmplY3RMaWtlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcwogIHZhciBzeW1ib2xUYWcgPSAiW29iamVjdCBTeW1ib2xdIjsKICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkgewogICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAic3ltYm9sIiB8fCBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKSA9PSBzeW1ib2xUYWc7CiAgfQogIHZhciBpc1N5bWJvbF9kZWZhdWx0ID0gaXNTeW1ib2w7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHsKICAgIHZhciBpbmRleCA9IC0xLCBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCwgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYXJyYXlNYXBfZGVmYXVsdCA9IGFycmF5TWFwOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB2YXIgaXNBcnJheV9kZWZhdWx0ID0gaXNBcnJheTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0Zpbml0ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9OdW1iZXIuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVHJpbS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RyaW1tZWRFbmRJbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgcmVXaGl0ZXNwYWNlID0gL1xzLzsKICBmdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7CiAgICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoOwogICAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7CiAgICB9CiAgICByZXR1cm4gaW5kZXg7CiAgfQogIHZhciB0cmltbWVkRW5kSW5kZXhfZGVmYXVsdCA9IHRyaW1tZWRFbmRJbmRleDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUcmltLmpzCiAgdmFyIHJlVHJpbVN0YXJ0ID0gL15ccysvOwogIGZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXhfZGVmYXVsdChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgIiIpIDogc3RyaW5nOwogIH0KICB2YXIgYmFzZVRyaW1fZGVmYXVsdCA9IGJhc2VUcmltOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAib2JqZWN0IiB8fCB0eXBlID09ICJmdW5jdGlvbiIpOwogIH0KICB2YXIgaXNPYmplY3RfZGVmYXVsdCA9IGlzT2JqZWN0OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b051bWJlci5qcwogIHZhciBOQU4gPSAwIC8gMDsKICB2YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pOwogIHZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pOwogIHZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pOwogIHZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDsKICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAibnVtYmVyIikgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICBpZiAoaXNTeW1ib2xfZGVmYXVsdCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIE5BTjsKICAgIH0KICAgIGlmIChpc09iamVjdF9kZWZhdWx0KHZhbHVlKSkgewogICAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAiZnVuY3Rpb24iID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7CiAgICAgIHZhbHVlID0gaXNPYmplY3RfZGVmYXVsdChvdGhlcikgPyBvdGhlciArICIiIDogb3RoZXI7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlICE9ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlOwogICAgfQogICAgdmFsdWUgPSBiYXNlVHJpbV9kZWZhdWx0KHZhbHVlKTsKICAgIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7CiAgICByZXR1cm4gaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KSA6IHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWU7CiAgfQogIHZhciB0b051bWJlcl9kZWZhdWx0ID0gdG9OdW1iZXI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvRmluaXRlLmpzCiAgdmFyIElORklOSVRZID0gMSAvIDA7CiAgdmFyIE1BWF9JTlRFR0VSID0gMTc5NzY5MzEzNDg2MjMxNTdlMjkyOwogIGZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDsKICAgIH0KICAgIHZhbHVlID0gdG9OdW1iZXJfZGVmYXVsdCh2YWx1ZSk7CiAgICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHsKICAgICAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyAtMSA6IDE7CiAgICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7CiAgICB9CiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwOwogIH0KICB2YXIgdG9GaW5pdGVfZGVmYXVsdCA9IHRvRmluaXRlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0ludGVnZXIuanMKICBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHsKICAgIHZhciByZXN1bHQgPSB0b0Zpbml0ZV9kZWZhdWx0KHZhbHVlKSwgcmVtYWluZGVyID0gcmVzdWx0ICUgMTsKICAgIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCA6IDA7CiAgfQogIHZhciB0b0ludGVnZXJfZGVmYXVsdCA9IHRvSW50ZWdlcjsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgYXN5bmNUYWcgPSAiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI7CiAgdmFyIGZ1bmNUYWcgPSAiW29iamVjdCBGdW5jdGlvbl0iOwogIHZhciBnZW5UYWcgPSAiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iOwogIHZhciBwcm94eVRhZyA9ICJbb2JqZWN0IFByb3h5XSI7CiAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkgewogICAgaWYgKCFpc09iamVjdF9kZWZhdWx0KHZhbHVlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB2YXIgdGFnID0gYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKTsKICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7CiAgfQogIHZhciBpc0Z1bmN0aW9uX2RlZmF1bHQgPSBpc0Z1bmN0aW9uOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weUFycmF5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7CiAgICB2YXIgaW5kZXggPSAtMSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpOwogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgdmFyIGNvcHlBcnJheV9kZWZhdWx0ID0gY29weUFycmF5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7CiAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXGQqKSQvOwogIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CiAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7CiAgICByZXR1cm4gISFsZW5ndGggJiYgKHR5cGUgPT0gIm51bWJlciIgfHwgdHlwZSAhPSAic3ltYm9sIiAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkgJiYgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpOwogIH0KICB2YXIgaXNJbmRleF9kZWZhdWx0ID0gaXNJbmRleDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7CiAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8IHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7CiAgfQogIHZhciBlcV9kZWZhdWx0ID0gZXE7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0l0ZXJhdGVlQ2FsbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBNQVhfU0FGRV9JTlRFR0VSMiA9IDkwMDcxOTkyNTQ3NDA5OTE7CiAgZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHsKICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gIm51bWJlciIgJiYgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSMjsKICB9CiAgdmFyIGlzTGVuZ3RoX2RlZmF1bHQgPSBpc0xlbmd0aDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMKICBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGhfZGVmYXVsdCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uX2RlZmF1bHQodmFsdWUpOwogIH0KICB2YXIgaXNBcnJheUxpa2VfZGVmYXVsdCA9IGlzQXJyYXlMaWtlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMKICBmdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkgewogICAgaWYgKCFpc09iamVjdF9kZWZhdWx0KG9iamVjdCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7CiAgICBpZiAodHlwZSA9PSAibnVtYmVyIiA/IGlzQXJyYXlMaWtlX2RlZmF1bHQob2JqZWN0KSAmJiBpc0luZGV4X2RlZmF1bHQoaW5kZXgsIG9iamVjdC5sZW5ndGgpIDogdHlwZSA9PSAic3RyaW5nIiAmJiBpbmRleCBpbiBvYmplY3QpIHsKICAgICAgcmV0dXJuIGVxX2RlZmF1bHQob2JqZWN0W2luZGV4XSwgdmFsdWUpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgaXNJdGVyYXRlZUNhbGxfZGVmYXVsdCA9IGlzSXRlcmF0ZWVDYWxsOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIG9iamVjdFByb3RvMyA9IE9iamVjdC5wcm90b3R5cGU7CiAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHsKICAgIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsIHByb3RvID0gdHlwZW9mIEN0b3IgPT0gImZ1bmN0aW9uIiAmJiBDdG9yLnByb3RvdHlwZSB8fCBvYmplY3RQcm90bzM7CiAgICByZXR1cm4gdmFsdWUgPT09IHByb3RvOwogIH0KICB2YXIgaXNQcm90b3R5cGVfZGVmYXVsdCA9IGlzUHJvdG90eXBlOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUaW1lcy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHsKICAgIHZhciBpbmRleCA9IC0xLCByZXN1bHQgPSBBcnJheShuKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbikgewogICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGJhc2VUaW1lc19kZWZhdWx0ID0gYmFzZVRpbWVzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgYXJnc1RhZyA9ICJbb2JqZWN0IEFyZ3VtZW50c10iOwogIGZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkgewogICAgcmV0dXJuIGlzT2JqZWN0TGlrZV9kZWZhdWx0KHZhbHVlKSAmJiBiYXNlR2V0VGFnX2RlZmF1bHQodmFsdWUpID09IGFyZ3NUYWc7CiAgfQogIHZhciBiYXNlSXNBcmd1bWVudHNfZGVmYXVsdCA9IGJhc2VJc0FyZ3VtZW50czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMKICB2YXIgb2JqZWN0UHJvdG80ID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgaGFzT3duUHJvcGVydHkyID0gb2JqZWN0UHJvdG80Lmhhc093blByb3BlcnR5OwogIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvNC5wcm9wZXJ0eUlzRW51bWVyYWJsZTsKICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHNfZGVmYXVsdChmdW5jdGlvbigpIHsKICAgIHJldHVybiBhcmd1bWVudHM7CiAgfSgpKSA/IGJhc2VJc0FyZ3VtZW50c19kZWZhdWx0IDogZnVuY3Rpb24odmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkyLmNhbGwodmFsdWUsICJjYWxsZWUiKSAmJiAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgImNhbGxlZSIpOwogIH07CiAgdmFyIGlzQXJndW1lbnRzX2RlZmF1bHQgPSBpc0FyZ3VtZW50czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBzdHViRmFsc2UoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHZhciBzdHViRmFsc2VfZGVmYXVsdCA9IHN0dWJGYWxzZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMKICB2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7CiAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0czsKICB2YXIgQnVmZmVyOSA9IG1vZHVsZUV4cG9ydHMgPyByb290X2RlZmF1bHQuQnVmZmVyIDogdm9pZCAwOwogIHZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlcjkgPyBCdWZmZXI5LmlzQnVmZmVyIDogdm9pZCAwOwogIHZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZV9kZWZhdWx0OwogIHZhciBpc0J1ZmZlcl9kZWZhdWx0ID0gaXNCdWZmZXI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGFyZ3NUYWcyID0gIltvYmplY3QgQXJndW1lbnRzXSI7CiAgdmFyIGFycmF5VGFnID0gIltvYmplY3QgQXJyYXldIjsKICB2YXIgYm9vbFRhZyA9ICJbb2JqZWN0IEJvb2xlYW5dIjsKICB2YXIgZGF0ZVRhZyA9ICJbb2JqZWN0IERhdGVdIjsKICB2YXIgZXJyb3JUYWcgPSAiW29iamVjdCBFcnJvcl0iOwogIHZhciBmdW5jVGFnMiA9ICJbb2JqZWN0IEZ1bmN0aW9uXSI7CiAgdmFyIG1hcFRhZyA9ICJbb2JqZWN0IE1hcF0iOwogIHZhciBudW1iZXJUYWcgPSAiW29iamVjdCBOdW1iZXJdIjsKICB2YXIgb2JqZWN0VGFnID0gIltvYmplY3QgT2JqZWN0XSI7CiAgdmFyIHJlZ2V4cFRhZyA9ICJbb2JqZWN0IFJlZ0V4cF0iOwogIHZhciBzZXRUYWcgPSAiW29iamVjdCBTZXRdIjsKICB2YXIgc3RyaW5nVGFnID0gIltvYmplY3QgU3RyaW5nXSI7CiAgdmFyIHdlYWtNYXBUYWcgPSAiW29iamVjdCBXZWFrTWFwXSI7CiAgdmFyIGFycmF5QnVmZmVyVGFnID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICB2YXIgZGF0YVZpZXdUYWcgPSAiW29iamVjdCBEYXRhVmlld10iOwogIHZhciBmbG9hdDMyVGFnID0gIltvYmplY3QgRmxvYXQzMkFycmF5XSI7CiAgdmFyIGZsb2F0NjRUYWcgPSAiW29iamVjdCBGbG9hdDY0QXJyYXldIjsKICB2YXIgaW50OFRhZyA9ICJbb2JqZWN0IEludDhBcnJheV0iOwogIHZhciBpbnQxNlRhZyA9ICJbb2JqZWN0IEludDE2QXJyYXldIjsKICB2YXIgaW50MzJUYWcgPSAiW29iamVjdCBJbnQzMkFycmF5XSI7CiAgdmFyIHVpbnQ4VGFnID0gIltvYmplY3QgVWludDhBcnJheV0iOwogIHZhciB1aW50OENsYW1wZWRUYWcgPSAiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOwogIHZhciB1aW50MTZUYWcgPSAiW29iamVjdCBVaW50MTZBcnJheV0iOwogIHZhciB1aW50MzJUYWcgPSAiW29iamVjdCBVaW50MzJBcnJheV0iOwogIHZhciB0eXBlZEFycmF5VGFncyA9IHt9OwogIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7CiAgdHlwZWRBcnJheVRhZ3NbYXJnc1RhZzJdID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWcyXSA9IHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID0gdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7CiAgZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIGlzT2JqZWN0TGlrZV9kZWZhdWx0KHZhbHVlKSAmJiBpc0xlbmd0aF9kZWZhdWx0KHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnX2RlZmF1bHQodmFsdWUpXTsKICB9CiAgdmFyIGJhc2VJc1R5cGVkQXJyYXlfZGVmYXVsdCA9IGJhc2VJc1R5cGVkQXJyYXk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHsKICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7CiAgICB9OwogIH0KICB2YXIgYmFzZVVuYXJ5X2RlZmF1bHQgPSBiYXNlVW5hcnk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgZnJlZUV4cG9ydHMyID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogIHZhciBmcmVlTW9kdWxlMiA9IGZyZWVFeHBvcnRzMiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICB2YXIgbW9kdWxlRXhwb3J0czIgPSBmcmVlTW9kdWxlMiAmJiBmcmVlTW9kdWxlMi5leHBvcnRzID09PSBmcmVlRXhwb3J0czI7CiAgdmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0czIgJiYgZnJlZUdsb2JhbF9kZWZhdWx0LnByb2Nlc3M7CiAgdmFyIG5vZGVVdGlsID0gZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlMiAmJiBmcmVlTW9kdWxlMi5yZXF1aXJlICYmIGZyZWVNb2R1bGUyLnJlcXVpcmUoInV0aWwiKS50eXBlczsKICAgICAgaWYgKHR5cGVzKSB7CiAgICAgICAgcmV0dXJuIHR5cGVzOwogICAgICB9CiAgICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoInV0aWwiKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgIH0KICB9KCk7CiAgdmFyIG5vZGVVdGlsX2RlZmF1bHQgPSBub2RlVXRpbDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzCiAgdmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbF9kZWZhdWx0ICYmIG5vZGVVdGlsX2RlZmF1bHQuaXNUeXBlZEFycmF5OwogIHZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5X2RlZmF1bHQobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5X2RlZmF1bHQ7CiAgdmFyIGlzVHlwZWRBcnJheV9kZWZhdWx0ID0gaXNUeXBlZEFycmF5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcwogIHZhciBvYmplY3RQcm90bzUgPSBPYmplY3QucHJvdG90eXBlOwogIHZhciBoYXNPd25Qcm9wZXJ0eTMgPSBvYmplY3RQcm90bzUuaGFzT3duUHJvcGVydHk7CiAgZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7CiAgICB2YXIgaXNBcnIgPSBpc0FycmF5X2RlZmF1bHQodmFsdWUpLCBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50c19kZWZhdWx0KHZhbHVlKSwgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcl9kZWZhdWx0KHZhbHVlKSwgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheV9kZWZhdWx0KHZhbHVlKSwgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLCByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lc19kZWZhdWx0KHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOwogICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7CiAgICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5My5jYWxsKHZhbHVlLCBrZXkpKSAmJiAhKHNraXBJbmRleGVzICYmIChrZXkgPT0gImxlbmd0aCIgfHwgaXNCdWZmICYmIChrZXkgPT0gIm9mZnNldCIgfHwga2V5ID09ICJwYXJlbnQiKSB8fCBpc1R5cGUgJiYgKGtleSA9PSAiYnVmZmVyIiB8fCBrZXkgPT0gImJ5dGVMZW5ndGgiIHx8IGtleSA9PSAiYnl0ZU9mZnNldCIpIHx8IGlzSW5kZXhfZGVmYXVsdChrZXksIGxlbmd0aCkpKSkgewogICAgICAgIHJlc3VsdC5wdXNoKGtleSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBhcnJheUxpa2VLZXlzX2RlZmF1bHQgPSBhcnJheUxpa2VLZXlzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykgewogICAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7CiAgICB9OwogIH0KICB2YXIgb3ZlckFyZ19kZWZhdWx0ID0gb3ZlckFyZzsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMKICB2YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmdfZGVmYXVsdChPYmplY3Qua2V5cywgT2JqZWN0KTsKICB2YXIgbmF0aXZlS2V5c19kZWZhdWx0ID0gbmF0aXZlS2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzCiAgdmFyIG9iamVjdFByb3RvNiA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIGhhc093blByb3BlcnR5NCA9IG9iamVjdFByb3RvNi5oYXNPd25Qcm9wZXJ0eTsKICBmdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHsKICAgIGlmICghaXNQcm90b3R5cGVfZGVmYXVsdChvYmplY3QpKSB7CiAgICAgIHJldHVybiBuYXRpdmVLZXlzX2RlZmF1bHQob2JqZWN0KTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBbXTsKICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkgewogICAgICBpZiAoaGFzT3duUHJvcGVydHk0LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAiY29uc3RydWN0b3IiKSB7CiAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGJhc2VLZXlzX2RlZmF1bHQgPSBiYXNlS2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcwogIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CiAgICByZXR1cm4gaXNBcnJheUxpa2VfZGVmYXVsdChvYmplY3QpID8gYXJyYXlMaWtlS2V5c19kZWZhdWx0KG9iamVjdCkgOiBiYXNlS2V5c19kZWZhdWx0KG9iamVjdCk7CiAgfQogIHZhciBrZXlzX2RlZmF1bHQgPSBrZXlzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNsYW1wLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikgewogICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7CiAgICAgIGlmICh1cHBlciAhPT0gdm9pZCAwKSB7CiAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7CiAgICAgIH0KICAgICAgaWYgKGxvd2VyICE9PSB2b2lkIDApIHsKICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bWJlcjsKICB9CiAgdmFyIGJhc2VDbGFtcF9kZWZhdWx0ID0gYmFzZUNsYW1wOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykgewogICAgcmV0dXJuIGFycmF5TWFwX2RlZmF1bHQocHJvcHMsIGZ1bmN0aW9uKGtleSkgewogICAgICByZXR1cm4gb2JqZWN0W2tleV07CiAgICB9KTsKICB9CiAgdmFyIGJhc2VWYWx1ZXNfZGVmYXVsdCA9IGJhc2VWYWx1ZXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3ZhbHVlcy5qcwogIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlc19kZWZhdWx0KG9iamVjdCwga2V5c19kZWZhdWx0KG9iamVjdCkpOwogIH0KICB2YXIgdmFsdWVzX2RlZmF1bHQgPSB2YWx1ZXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmFuZG9tLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3I7CiAgdmFyIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tOwogIGZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7CiAgICByZXR1cm4gbG93ZXIgKyBuYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSAqICh1cHBlciAtIGxvd2VyICsgMSkpOwogIH0KICB2YXIgYmFzZVJhbmRvbV9kZWZhdWx0ID0gYmFzZVJhbmRvbTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc2FtcGxlU2l6ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5U2FtcGxlU2l6ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NodWZmbGVTZWxmLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7CiAgICB2YXIgaW5kZXggPSAtMSwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLCBsYXN0SW5kZXggPSBsZW5ndGggLSAxOwogICAgc2l6ZSA9IHNpemUgPT09IHZvaWQgMCA/IGxlbmd0aCA6IHNpemU7CiAgICB3aGlsZSAoKytpbmRleCA8IHNpemUpIHsKICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tX2RlZmF1bHQoaW5kZXgsIGxhc3RJbmRleCksIHZhbHVlID0gYXJyYXlbcmFuZF07CiAgICAgIGFycmF5W3JhbmRdID0gYXJyYXlbaW5kZXhdOwogICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTsKICAgIH0KICAgIGFycmF5Lmxlbmd0aCA9IHNpemU7CiAgICByZXR1cm4gYXJyYXk7CiAgfQogIHZhciBzaHVmZmxlU2VsZl9kZWZhdWx0ID0gc2h1ZmZsZVNlbGY7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNhbXBsZVNpemUuanMKICBmdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksIG4pIHsKICAgIHJldHVybiBzaHVmZmxlU2VsZl9kZWZhdWx0KGNvcHlBcnJheV9kZWZhdWx0KGFycmF5KSwgYmFzZUNsYW1wX2RlZmF1bHQobiwgMCwgYXJyYXkubGVuZ3RoKSk7CiAgfQogIHZhciBhcnJheVNhbXBsZVNpemVfZGVmYXVsdCA9IGFycmF5U2FtcGxlU2l6ZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTYW1wbGVTaXplLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4pIHsKICAgIHZhciBhcnJheSA9IHZhbHVlc19kZWZhdWx0KGNvbGxlY3Rpb24pOwogICAgcmV0dXJuIHNodWZmbGVTZWxmX2RlZmF1bHQoYXJyYXksIGJhc2VDbGFtcF9kZWZhdWx0KG4sIDAsIGFycmF5Lmxlbmd0aCkpOwogIH0KICB2YXIgYmFzZVNhbXBsZVNpemVfZGVmYXVsdCA9IGJhc2VTYW1wbGVTaXplOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zYW1wbGVTaXplLmpzCiAgZnVuY3Rpb24gc2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuLCBndWFyZCkgewogICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGxfZGVmYXVsdChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB2b2lkIDApIHsKICAgICAgbiA9IDE7CiAgICB9IGVsc2UgewogICAgICBuID0gdG9JbnRlZ2VyX2RlZmF1bHQobik7CiAgICB9CiAgICB2YXIgZnVuYyA9IGlzQXJyYXlfZGVmYXVsdChjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlU2l6ZV9kZWZhdWx0IDogYmFzZVNhbXBsZVNpemVfZGVmYXVsdDsKICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG4pOwogIH0KICB2YXIgc2FtcGxlU2l6ZV9kZWZhdWx0ID0gc2FtcGxlU2l6ZTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kMy1hcnJheUAyLjEyLjEvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2QzLWFycmF5QDIuMTIuMS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhc2NlbmRpbmdfZGVmYXVsdChhLCBiKSB7CiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZDMtYXJyYXlAMi4xMi4xL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmlzZWN0b3JfZGVmYXVsdChmKSB7CiAgICBsZXQgZGVsdGEgPSBmOwogICAgbGV0IGNvbXBhcmUgPSBmOwogICAgaWYgKGYubGVuZ3RoID09PSAxKSB7CiAgICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4OwogICAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICBjb25zdCBtaWQgPSBsbyArIGhpID4+PiAxOwogICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKQogICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgIGhpID0gbWlkOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICAgIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkKICAgICAgICBsbyA9IDA7CiAgICAgIGlmIChoaSA9PSBudWxsKQogICAgICAgIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkKICAgICAgICAgIGhpID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgIGxvID0gbWlkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbG87CiAgICB9CiAgICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7CiAgICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpOwogICAgfQogICAgcmV0dXJuIHsgbGVmdCwgY2VudGVyLCByaWdodCB9OwogIH0KICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHsKICAgIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nX2RlZmF1bHQoZihkKSwgeCk7CiAgfQoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy91dGlscy50cwogIHZhciBEYXRhU291cmNlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZmlsZSwgY2hyb21TaXplcywgb3B0aW9ucykgewogICAgICB0aGlzLmZpbGUgPSBmaWxlOwogICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmNocm9tSW5mbyA9IHNpemVzVG9DaHJvbUluZm8oY2hyb21TaXplcyk7CiAgICAgIHRoaXMudGlsZXNldEluZm8gPSB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8odGhpcy5jaHJvbUluZm8pOwogICAgfQogICAgY2hyb21JbmZvOwogICAgdGlsZXNldEluZm87CiAgfTsKICB2YXIgY2hyb21JbmZvQmlzZWN0b3IgPSBiaXNlY3Rvcl9kZWZhdWx0KChkKSA9PiBkLnBvcykubGVmdDsKICB2YXIgY2hyVG9BYnMgPSAoY2hyb20sIGNocm9tUG9zLCBjaHJvbUluZm8pID0+IGNocm9tSW5mby5jaHJQb3NpdGlvbnNbY2hyb21dLnBvcyArIGNocm9tUG9zOwogIHZhciBhYnNUb0NociA9IChhYnNQb3NpdGlvbiwgY2hyb21JbmZvKSA9PiB7CiAgICBpZiAoIWNocm9tSW5mbyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgaW5zZXJ0UG9pbnQgPSBjaHJvbUluZm9CaXNlY3RvcihjaHJvbUluZm8uY3VtUG9zaXRpb25zLCBhYnNQb3NpdGlvbik7CiAgICBjb25zdCBsYXN0Q2hyID0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tjaHJvbUluZm8uY3VtUG9zaXRpb25zLmxlbmd0aCAtIDFdLmNocjsKICAgIGNvbnN0IGxhc3RMZW5ndGggPSBjaHJvbUluZm8uY2hyb21MZW5ndGhzW2xhc3RDaHJdOwogICAgaW5zZXJ0UG9pbnQgLT0gaW5zZXJ0UG9pbnQgPiAwICYmIDE7CiAgICBsZXQgY2hyUG9zaXRpb24gPSBNYXRoLmZsb29yKGFic1Bvc2l0aW9uIC0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0ucG9zKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaWYgKGNoclBvc2l0aW9uIDwgMCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIDE7CiAgICAgIGNoclBvc2l0aW9uID0gMTsKICAgIH0KICAgIGlmIChpbnNlcnRQb2ludCA9PT0gY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIGNoclBvc2l0aW9uID4gbGFzdExlbmd0aCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIGxhc3RMZW5ndGg7CiAgICAgIGNoclBvc2l0aW9uID0gbGFzdExlbmd0aDsKICAgIH0KICAgIHJldHVybiBbY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0uY2hyLCBjaHJQb3NpdGlvbiwgb2Zmc2V0LCBpbnNlcnRQb2ludF07CiAgfTsKICBmdW5jdGlvbiB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8oY2hyb21JbmZvLCB0aWxlU2l6ZSA9IDEwMjQpIHsKICAgIHJldHVybiB7CiAgICAgIHRpbGVfc2l6ZTogdGlsZVNpemUsCiAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbjogdGlsZVNpemUsCiAgICAgIG1heF96b29tOiBNYXRoLmNlaWwoTWF0aC5sb2coY2hyb21JbmZvLnRvdGFsTGVuZ3RoIC8gdGlsZVNpemUpIC8gTWF0aC5sb2coMikpLAogICAgICBtYXhfd2lkdGg6IGNocm9tSW5mby50b3RhbExlbmd0aCwKICAgICAgbWluX3BvczogWzBdLAogICAgICBtYXhfcG9zOiBbY2hyb21JbmZvLnRvdGFsTGVuZ3RoXQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2l6ZXNUb0Nocm9tSW5mbyhzaXplcykgewogICAgY29uc3QgaW5mbyA9IHsKICAgICAgY3VtUG9zaXRpb25zOiBbXSwKICAgICAgY2hyb21MZW5ndGhzOiB7fSwKICAgICAgY2hyUG9zaXRpb25zOiB7fSwKICAgICAgdG90YWxMZW5ndGg6IDAKICAgIH07CiAgICBzaXplcy5mb3JFYWNoKChbY2hyLCBsZW5ndGhdLCBpKSA9PiB7CiAgICAgIGNvbnN0IGNoclBvc2l0aW9uID0geyBpZDogaSwgY2hyLCBwb3M6IGluZm8udG90YWxMZW5ndGggfTsKICAgICAgaW5mby5jaHJQb3NpdGlvbnNbY2hyXSA9IGNoclBvc2l0aW9uOwogICAgICBpbmZvLmNocm9tTGVuZ3Roc1tjaHJdID0gbGVuZ3RoOwogICAgICBpbmZvLmN1bVBvc2l0aW9ucy5wdXNoKGNoclBvc2l0aW9uKTsKICAgICAgaW5mby50b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmluZm8sCiAgICAgIGFic1RvQ2hyOiAoYWJzUG9zKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGFic1RvQ2hyKGFic1BvcywgaW5mbykgOiBudWxsLAogICAgICBjaHJUb0FiczogKFtjaHJOYW1lLCBjaHJQb3NdKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGNoclRvQWJzKGNock5hbWUsIGNoclBvcywgaW5mbykgOiBudWxsCiAgICB9OwogIH0KICB2YXIgUmVtb3RlRmlsZTIgPSBjbGFzcyBleHRlbmRzIFJlbW90ZUZpbGUgewogICAgcmVhZCA9IGFzeW5jIChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pID0+IHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApOwogICAgfTsKICB9OwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy92Y2YvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGdldE11dGF0aW9uVHlwZSA9IChyZWYsIGFsdCkgPT4gewogICAgaWYgKCFhbHQpCiAgICAgIHJldHVybiAidW5rbm93biI7CiAgICBpZiAocmVmLmxlbmd0aCA9PT0gYWx0Lmxlbmd0aCkKICAgICAgcmV0dXJuICJzdWJzdGl0dXRpb24iOwogICAgaWYgKHJlZi5sZW5ndGggPiBhbHQubGVuZ3RoKQogICAgICByZXR1cm4gImRlbGV0aW9uIjsKICAgIGlmIChyZWYubGVuZ3RoIDwgYWx0Lmxlbmd0aCkKICAgICAgcmV0dXJuICJpbnNlcnRpb24iOwogICAgcmV0dXJuICJ1bmtub3duIjsKICB9OwogIHZhciBnZXRTdWJzdGl0dXRpb25UeXBlID0gKHJlZiwgYWx0KSA9PiB7CiAgICBzd2l0Y2ggKHJlZiArIGFsdCkgewogICAgICBjYXNlICJDQSI6CiAgICAgIGNhc2UgIkdUIjoKICAgICAgICByZXR1cm4gIkM+QSI7CiAgICAgIGNhc2UgIkNHIjoKICAgICAgY2FzZSAiR0MiOgogICAgICAgIHJldHVybiAiQz5HIjsKICAgICAgY2FzZSAiQ1QiOgogICAgICBjYXNlICJHQSI6CiAgICAgICAgcmV0dXJuICJDPlQiOwogICAgICBjYXNlICJUQSI6CiAgICAgIGNhc2UgIkFUIjoKICAgICAgICByZXR1cm4gIlQ+QSI7CiAgICAgIGNhc2UgIlRDIjoKICAgICAgY2FzZSAiQUciOgogICAgICAgIHJldHVybiAiVD5DIjsKICAgICAgY2FzZSAiVEciOgogICAgICBjYXNlICJBQyI6CiAgICAgICAgcmV0dXJuICJUPkciOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAidW5rbm93biI7CiAgICB9CiAgfTsKICBmdW5jdGlvbiByZWNvcmRUb1RpbGUodmNmUmVjb3JkLCBjaHJQb3MsIHByZXZBYnNQb3MpIHsKICAgIGNvbnN0IGFic1BvcyA9IGNoclBvcyArIHZjZlJlY29yZC5QT1MgKyAxOwogICAgbGV0IEFMVDsKICAgIGlmIChBcnJheS5pc0FycmF5KHZjZlJlY29yZC5BTFQpICYmIHZjZlJlY29yZC5BTFQubGVuZ3RoID4gMCkgewogICAgICBBTFQgPSB2Y2ZSZWNvcmQuQUxUWzBdOwogICAgfQogICAgY29uc3QgRElTVFBSRVYgPSAhcHJldkFic1BvcyA/IG51bGwgOiBhYnNQb3MgLSBwcmV2QWJzUG9zOwogICAgY29uc3QgRElTVFBSRVZMT0dFID0gIXByZXZBYnNQb3MgPyBudWxsIDogTWF0aC5sb2coYWJzUG9zIC0gcHJldkFic1Bvcyk7CiAgICBjb25zdCBNVVRUWVBFID0gZ2V0TXV0YXRpb25UeXBlKHZjZlJlY29yZC5SRUYsIEFMVCk7CiAgICBjb25zdCBTVUJUWVBFID0gZ2V0U3Vic3RpdHV0aW9uVHlwZSh2Y2ZSZWNvcmQuUkVGLCBBTFQpOwogICAgY29uc3QgUE9TRU5EID0gYWJzUG9zICsgdmNmUmVjb3JkLlJFRi5sZW5ndGg7CiAgICBjb25zdCBkYXRhID0gewogICAgICAuLi52Y2ZSZWNvcmQsCiAgICAgIEFMVCwKICAgICAgTVVUVFlQRSwKICAgICAgU1VCVFlQRSwKICAgICAgSU5GTzogSlNPTi5zdHJpbmdpZnkodmNmUmVjb3JkLklORk8pLAogICAgICBPUklHSU5BTFBPUzogdmNmUmVjb3JkLlBPUywKICAgICAgUE9TOiBhYnNQb3MsCiAgICAgIFBPU0VORCwKICAgICAgRElTVFBSRVYsCiAgICAgIERJU1RQUkVWTE9HRQogICAgfTsKICAgIE9iamVjdC5rZXlzKHZjZlJlY29yZC5JTkZPKS5mb3JFYWNoKChrZXkpID0+IHsKICAgICAgY29uc3QgdmFsID0gdmNmUmVjb3JkLklORk9ba2V5XTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICAgIGRhdGFba2V5XSA9IHZhbC5qb2luKCIsICIpOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGFba2V5XSA9IHZhbDsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIHNyYy9kYXRhLWZldGNoZXJzL3ZjZi92Y2Ytd29ya2VyLnRzP3dvcmtlciZpbmxpbmU/d29ya2VyX2ZpbGUKICB2YXIgdmNmRmlsZXMgPSBuZXcgTWFwKCk7CiAgdmFyIFZjZkZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0YmksIHVpZCkgewogICAgICB0aGlzLnRiaSA9IHRiaTsKICAgICAgdGhpcy4jdWlkID0gdWlkOwogICAgfQogICAgI3BhcnNlcjsKICAgICN1aWQ7CiAgICBzdGF0aWMgZnJvbVVybCh1cmwsIGluZGV4VXJsLCB1aWQsIHVybEZldGNoT3B0aW9ucywgaW5kZXhVcmxGZXRjaE9wdGlvbnMpIHsKICAgICAgY29uc3QgdGJpID0gbmV3IFRhYml4SW5kZXhlZEZpbGUoewogICAgICAgIGZpbGVoYW5kbGU6IG5ldyBSZW1vdGVGaWxlMih1cmwsIHsgb3ZlcnJpZGVzOiB1cmxGZXRjaE9wdGlvbnMgfSksCiAgICAgICAgdGJpRmlsZWhhbmRsZTogbmV3IFJlbW90ZUZpbGUyKGluZGV4VXJsLCB7IG92ZXJyaWRlczogaW5kZXhVcmxGZXRjaE9wdGlvbnMgfSkKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgVmNmRmlsZSh0YmksIHVpZCk7CiAgICB9CiAgICBhc3luYyBnZXRQYXJzZXIoKSB7CiAgICAgIGlmICghdGhpcy4jcGFyc2VyKSB7CiAgICAgICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy50YmkuZ2V0SGVhZGVyKCk7CiAgICAgICAgdGhpcy4jcGFyc2VyID0gbmV3IGVzbV9kZWZhdWx0KHsgaGVhZGVyIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLiNwYXJzZXI7CiAgICB9CiAgICBhc3luYyBnZXRUaWxlRGF0YShtaW5YLCBtYXhYKSB7CiAgICAgIGNvbnN0IHNvdXJjZSA9IGRhdGFTb3VyY2VzLmdldCh0aGlzLiN1aWQpOwogICAgICBjb25zdCBwYXJzZXIgPSBhd2FpdCB0aGlzLmdldFBhcnNlcigpOwogICAgICBsZXQgY3VyTWluWCA9IG1pblg7CiAgICAgIGNvbnN0IHsgY2hyb21MZW5ndGhzLCBjdW1Qb3NpdGlvbnMgfSA9IHNvdXJjZS5jaHJvbUluZm87CiAgICAgIGNvbnN0IHJlY29yZFByb21pc2VzID0gW107CiAgICAgIGZvciAoY29uc3QgY3VtUG9zIG9mIGN1bVBvc2l0aW9ucykgewogICAgICAgIGNvbnN0IGNocm9tTmFtZSA9IGN1bVBvcy5jaHI7CiAgICAgICAgY29uc3QgY2hyb21TdGFydCA9IGN1bVBvcy5wb3M7CiAgICAgICAgY29uc3QgY2hyb21FbmQgPSBjdW1Qb3MucG9zICsgY2hyb21MZW5ndGhzW2Nocm9tTmFtZV07CiAgICAgICAgbGV0IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgICAgaWYgKGNocm9tU3RhcnQgPiBjdXJNaW5YIHx8IGN1ck1pblggPj0gY2hyb21FbmQpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBsZXQgcHJldlBPUzsKICAgICAgICBjb25zdCB0aWxlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgICAgY29uc3QgdGlsZXMgPSBbXTsKICAgICAgICAgIGNvbnN0IGxpbmVDYWxsYmFjayA9IChsaW5lKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHZjZlJlY29yZCA9IHBhcnNlci5wYXJzZUxpbmUobGluZSk7CiAgICAgICAgICAgIGNvbnN0IHZjZlRpbGUgPSByZWNvcmRUb1RpbGUodmNmUmVjb3JkLCBjaHJvbVN0YXJ0LCBwcmV2UE9TKTsKICAgICAgICAgICAgcHJldlBPUyA9IHZjZlRpbGUuUE9TOwogICAgICAgICAgICB0aWxlcy5wdXNoKHZjZlRpbGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmIChtYXhYID4gY2hyb21FbmQpIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBjdXJNaW5YIC0gY2hyb21TdGFydDsKICAgICAgICAgICAgZW5kUG9zID0gY2hyb21FbmQgLSBjaHJvbVN0YXJ0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBNYXRoLmZsb29yKGN1ck1pblggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgICAgZW5kUG9zID0gTWF0aC5jZWlsKG1heFggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHNvdXJjZS5maWxlLnRiaS5nZXRMaW5lcyhjaHJvbU5hbWUsIHN0YXJ0UG9zLCBlbmRQb3MsIGxpbmVDYWxsYmFjaykudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHJlc29sdmUodGlsZXMpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgcmVjb3JkUHJvbWlzZXMucHVzaCh0aWxlc1Byb21pc2UpOwogICAgICAgIGlmIChtYXhYIDw9IGNocm9tRW5kKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY3VyTWluWCA9IGNocm9tRW5kOwogICAgICB9CiAgICAgIGNvbnN0IHRpbGVBcnJheXMgPSBhd2FpdCBQcm9taXNlLmFsbChyZWNvcmRQcm9taXNlcyk7CiAgICAgIHJldHVybiB0aWxlQXJyYXlzLmZsYXQoKTsKICAgIH0KICB9OwogIHZhciB0aWxlVmFsdWVzID0ge307CiAgdmFyIGRhdGFTb3VyY2VzID0gbmV3IE1hcCgpOwogIGZ1bmN0aW9uIGluaXQodWlkLCB2Y2YsIGNocm9tU2l6ZXMsIG9wdGlvbnMgPSB7fSkgewogICAgbGV0IHZjZkZpbGUgPSB2Y2ZGaWxlcy5nZXQodmNmLnVybCk7CiAgICBpZiAoIXZjZkZpbGUpIHsKICAgICAgdmNmRmlsZSA9IFZjZkZpbGUuZnJvbVVybCh2Y2YudXJsLCB2Y2YuaW5kZXhVcmwsIHVpZCwgb3B0aW9ucy51cmxGZXRjaE9wdGlvbnMsIG9wdGlvbnMuaW5kZXhVcmxGZXRjaE9wdGlvbnMpOwogICAgfQogICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBEYXRhU291cmNlKHZjZkZpbGUsIGNocm9tU2l6ZXMsIHsKICAgICAgc2FtcGxlTGVuZ3RoOiAxZTMsCiAgICAgIC4uLm9wdGlvbnMKICAgIH0pOwogICAgZGF0YVNvdXJjZXMuc2V0KHVpZCwgZGF0YVNvdXJjZSk7CiAgfQogIHZhciB0aWxlc2V0SW5mbyA9ICh1aWQpID0+IHsKICAgIHJldHVybiBkYXRhU291cmNlcy5nZXQodWlkKS50aWxlc2V0SW5mbzsKICB9OwogIHZhciB0aWxlID0gYXN5bmMgKHVpZCwgeiwgeCkgPT4gewogICAgY29uc3Qgc291cmNlID0gZGF0YVNvdXJjZXMuZ2V0KHVpZCk7CiAgICBjb25zdCBDQUNIRV9LRVkgPSBgJHt1aWR9LiR7en0uJHt4fWA7CiAgICB0aWxlVmFsdWVzW0NBQ0hFX0tFWV0gPSBbXTsKICAgIGNvbnN0IHRpbGVXaWR0aCA9ICtzb3VyY2UudGlsZXNldEluZm8ubWF4X3dpZHRoIC8gMiAqKiArejsKICAgIGNvbnN0IG1pblggPSBzb3VyY2UudGlsZXNldEluZm8ubWluX3Bvc1swXSArIHggKiB0aWxlV2lkdGg7CiAgICBjb25zdCBtYXhYID0gc291cmNlLnRpbGVzZXRJbmZvLm1pbl9wb3NbMF0gKyAoeCArIDEpICogdGlsZVdpZHRoOwogICAgdGlsZVZhbHVlc1tDQUNIRV9LRVldID0gYXdhaXQgc291cmNlLmZpbGUuZ2V0VGlsZURhdGEobWluWCwgbWF4WCk7CiAgICByZXR1cm4gdGlsZVZhbHVlc1tDQUNIRV9LRVldOwogIH07CiAgdmFyIGZldGNoVGlsZXNEZWJvdW5jZWQgPSBhc3luYyAodWlkLCB0aWxlSWRzKSA9PiB7CiAgICBjb25zdCB0aWxlcyA9IHt9OwogICAgY29uc3QgdmFsaWRUaWxlSWRzID0gW107CiAgICBjb25zdCB0aWxlUHJvbWlzZXMgPSBbXTsKICAgIGZvciAoY29uc3QgdGlsZUlkIG9mIHRpbGVJZHMpIHsKICAgICAgY29uc3QgcGFydHMgPSB0aWxlSWQuc3BsaXQoIi4iKTsKICAgICAgY29uc3QgeiA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7CiAgICAgIGNvbnN0IHggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApOwogICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpIHx8IE51bWJlci5pc05hTih6KSkgewogICAgICAgIGNvbnNvbGUud2FybigiSW52YWxpZCB0aWxlIHpvb20gb3IgcG9zaXRpb246IiwgeiwgeCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdmFsaWRUaWxlSWRzLnB1c2godGlsZUlkKTsKICAgICAgdGlsZVByb21pc2VzLnB1c2godGlsZSh1aWQsIHosIHgpKTsKICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbCh0aWxlUHJvbWlzZXMpLnRoZW4oKHZhbHVlczIpID0+IHsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgdmFsaWRUaWxlSWQgPSB2YWxpZFRpbGVJZHNbaV07CiAgICAgICAgdGlsZXNbdmFsaWRUaWxlSWRdID0gdmFsdWVzMltpXTsKICAgICAgICB0aWxlc1t2YWxpZFRpbGVJZF0udGlsZVBvc2l0aW9uSWQgPSB2YWxpZFRpbGVJZDsKICAgICAgfQogICAgICByZXR1cm4gdGlsZXM7CiAgICB9KTsKICB9OwogIHZhciBnZXRUYWJ1bGFyRGF0YSA9ICh1aWQsIHRpbGVJZHMpID0+IHsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIHRpbGVJZHMuZm9yRWFjaCgodGlsZUlkKSA9PiB7CiAgICAgIGNvbnN0IHBhcnRzID0gdGlsZUlkLnNwbGl0KCIuIik7CiAgICAgIGNvbnN0IHogPSBwYXJzZUludChwYXJ0c1swXSwgMTApOwogICAgICBjb25zdCB4ID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTsKICAgICAgY29uc3QgdGlsZVZhbHVlID0gdGlsZVZhbHVlc1tgJHt1aWR9LiR7en0uJHt4fWBdOwogICAgICBpZiAoIXRpbGVWYWx1ZSkgewogICAgICAgIGNvbnNvbGUud2FybihgTm8gdGlsZSBkYXRhIGNvbnN0cnVjdGVkICgke3RpbGVJZH0pYCk7CiAgICAgIH0KICAgICAgZGF0YS5wdXNoKHRpbGVWYWx1ZSk7CiAgICB9KTsKICAgIGxldCBvdXRwdXQgPSBPYmplY3QudmFsdWVzKGRhdGEpLmZsYXQoKTsKICAgIGNvbnN0IHNhbXBsZUxlbmd0aCA9IGRhdGFTb3VyY2VzLmdldCh1aWQpLm9wdGlvbnMuc2FtcGxlTGVuZ3RoOwogICAgaWYgKG91dHB1dC5sZW5ndGggPj0gc2FtcGxlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGhpZ2hQcmlvcml0eSA9IG91dHB1dC5zb3J0KChhLCBiKSA9PiAtKGEuRElTVFBSRVYgPz8gMCkgKyAoYi5ESVNUUFJFViA/PyAwKSkuc2xpY2UoMCwgc2FtcGxlTGVuZ3RoIC8gMik7CiAgICAgIG91dHB1dCA9IHNhbXBsZVNpemVfZGVmYXVsdChvdXRwdXQsIHNhbXBsZUxlbmd0aCAvIDIpLmNvbmNhdChoaWdoUHJpb3JpdHkpOwogICAgfQogICAgY29uc3QgYnVmZmVyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpLmJ1ZmZlcjsKICAgIHJldHVybiBUcmFuc2ZlcihidWZmZXIsIFtidWZmZXJdKTsKICB9OwogIHZhciB0aWxlRnVuY3Rpb25zID0gewogICAgaW5pdCwKICAgIHRpbGVzZXRJbmZvLAogICAgZmV0Y2hUaWxlc0RlYm91bmNlZCwKICAgIHRpbGUsCiAgICBnZXRUYWJ1bGFyRGF0YQogIH07CiAgZXhwb3NlKHRpbGVGdW5jdGlvbnMpOwp9KSgpOwovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCi8qKgogKiBAbGljZW5zZQogKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz0iZXMiIC1vIC4vYAogKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+CiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT4KICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCiAqLwo=",Vle=typeof window<"u"&&window.Blob&&new Blob([atob(N2e)],{type:"text/javascript;charset=utf-8"});function Mgg(){const e=Vle&&(window.URL||window.webkitURL).createObjectURL(Vle);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+N2e,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const zgg=200;class k2e{constructor(g,i){Ct(this,"dataConfig",{}),Ct(this,"uid"),Ct(this,"prevRequestTime"),Ct(this,"track"),Ct(this,"toFetch"),Ct(this,"fetchTimeout"),Ct(this,"worker"),this.uid=g.libraries.slugid.nice(),this.prevRequestTime=0,this.toFetch=new Set;const{url:I,indexUrl:n,assembly:r,...C}=i;this.worker=tN(new Mgg).then(async o=>{const a=Object.entries(yi(r).size);return await o.init(this.uid,{url:I,indexUrl:n},a,C),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,i){this.track.drawLoadingCue(),i.forEach(I=>this.toFetch.add(I)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},zgg)}async sendFetch(g,i){(await this.worker).fetchTilesDebounced(this.uid,i).then(g)}async getTabularData(g){const i=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(i))}}Ct(k2e,"config",{type:"vcf"});const rY=BigInt(32);function Pgg(e,g,i){const I=+!!i,n=+!i;return BigInt(e.getInt32(g,i)*n+e.getInt32(g+4,i)*I)<>rY),r=Number(i&BigInt(4294967295));I?(e.setInt32(g+4,n,I),e.setUint32(g,r,I)):(e.setInt32(g,n,I),e.setUint32(g+4,r,I))}function _gg(e,g,i,I){const n=Number(i>>rY),r=Number(i&BigInt(4294967295));I?(e.setUint32(g+4,n,I),e.setUint32(g,r,I)):(e.setUint32(g,n,I),e.setUint32(g+4,r,I))}"getBigInt64"in DataView||(DataView.prototype.getBigInt64=function(e,g){return Pgg(this,e,g)});"getBigUint64"in DataView||(DataView.prototype.getBigUint64=function(e,g){return Jgg(this,e,g)});"setBigInt64"in DataView||(DataView.prototype.setBigInt64=function(e,g,i){Ogg(this,e,g,i)});"setBigUint64"in DataView||(DataView.prototype.setBigUint64=function(e,g,i){_gg(this,e,g,i)});class Lgg{constructor(g,i){this.code="",this.scopes=[["vars"]],this.bitFields=[],this.tmpVariableCount=0,this.references=new Map,this.imports=[],this.reverseImports=new Map,this.useContextVariables=!1,this.importPath=g,this.useContextVariables=i}generateVariable(g){const i=[...this.scopes[this.scopes.length-1]];return g&&i.push(g),i.join(".")}generateOption(g){switch(typeof g){case"number":return g.toString();case"string":return this.generateVariable(g);case"function":return`${this.addImport(g)}.call(${this.generateVariable()}, vars)`}}generateError(g){this.pushCode(`throw new Error(${g});`)}generateTmpVariable(){return"$tmp"+this.tmpVariableCount++}pushCode(g){this.code+=g+` +`}pushPath(g){g&&this.scopes[this.scopes.length-1].push(g)}popPath(g){g&&this.scopes[this.scopes.length-1].pop()}pushScope(g){this.scopes.push([g])}popScope(){this.scopes.pop()}addImport(g){if(!this.importPath)return`(${g})`;let i=this.reverseImports.get(g);return i||(i=this.imports.push(g)-1,this.reverseImports.set(g,i)),`${this.importPath}[${i}]`}addReference(g){this.references.has(g)||this.references.set(g,{resolved:!1,requested:!1})}markResolved(g){const i=this.references.get(g);i&&(i.resolved=!0)}markRequested(g){g.forEach(i=>{const I=this.references.get(i);I&&(I.requested=!0)})}getUnresolvedReferences(){return Array.from(this.references).filter(([g,i])=>!i.resolved&&!i.requested).map(([g,i])=>g)}}const Ko=new Map,xu="___parser_",Fo={uint8:1,uint16le:2,uint16be:2,uint32le:4,uint32be:4,int8:1,int16le:2,int16be:2,int32le:4,int32be:4,int64be:8,int64le:8,uint64be:8,uint64le:8,floatle:4,floatbe:4,doublele:8,doublebe:8},I1={uint8:"Uint8",uint16le:"Uint16",uint16be:"Uint16",uint32le:"Uint32",uint32be:"Uint32",int8:"Int8",int16le:"Int16",int16be:"Int16",int32le:"Int32",int32be:"Int32",int64be:"BigInt64",int64le:"BigInt64",uint64be:"BigUint64",uint64le:"BigUint64",floatle:"Float32",floatbe:"Float32",doublele:"Float64",doublebe:"Float64"},n1={uint8:!1,uint16le:!0,uint16be:!1,uint32le:!0,uint32be:!1,int8:!1,int16le:!0,int16be:!1,int32le:!0,int32be:!1,int64be:!1,int64le:!0,uint64be:!1,uint64le:!0,floatle:!0,floatbe:!1,doublele:!0,doublebe:!1};class kg{constructor(){this.varName="",this.type="",this.options={},this.endian="be",this.useContextVariables=!1}static start(){return new kg}primitiveGenerateN(g,i){const I=I1[g],n=n1[g];i.pushCode(`${i.generateVariable(this.varName)} = dataView.get${I}(offset, ${n});`),i.pushCode(`offset += ${Fo[g]};`)}primitiveN(g,i,I){return this.setNextParser(g,i,I)}useThisEndian(g){return g+this.endian.toLowerCase()}uint8(g,i={}){return this.primitiveN("uint8",g,i)}uint16(g,i={}){return this.primitiveN(this.useThisEndian("uint16"),g,i)}uint16le(g,i={}){return this.primitiveN("uint16le",g,i)}uint16be(g,i={}){return this.primitiveN("uint16be",g,i)}uint32(g,i={}){return this.primitiveN(this.useThisEndian("uint32"),g,i)}uint32le(g,i={}){return this.primitiveN("uint32le",g,i)}uint32be(g,i={}){return this.primitiveN("uint32be",g,i)}int8(g,i={}){return this.primitiveN("int8",g,i)}int16(g,i={}){return this.primitiveN(this.useThisEndian("int16"),g,i)}int16le(g,i={}){return this.primitiveN("int16le",g,i)}int16be(g,i={}){return this.primitiveN("int16be",g,i)}int32(g,i={}){return this.primitiveN(this.useThisEndian("int32"),g,i)}int32le(g,i={}){return this.primitiveN("int32le",g,i)}int32be(g,i={}){return this.primitiveN("int32be",g,i)}bigIntVersionCheck(){if(!DataView.prototype.getBigInt64)throw new Error("BigInt64 is unsupported on this runtime")}int64(g,i={}){return this.bigIntVersionCheck(),this.primitiveN(this.useThisEndian("int64"),g,i)}int64be(g,i={}){return this.bigIntVersionCheck(),this.primitiveN("int64be",g,i)}int64le(g,i={}){return this.bigIntVersionCheck(),this.primitiveN("int64le",g,i)}uint64(g,i={}){return this.bigIntVersionCheck(),this.primitiveN(this.useThisEndian("uint64"),g,i)}uint64be(g,i={}){return this.bigIntVersionCheck(),this.primitiveN("uint64be",g,i)}uint64le(g,i={}){return this.bigIntVersionCheck(),this.primitiveN("uint64le",g,i)}floatle(g,i={}){return this.primitiveN("floatle",g,i)}floatbe(g,i={}){return this.primitiveN("floatbe",g,i)}doublele(g,i={}){return this.primitiveN("doublele",g,i)}doublebe(g,i={}){return this.primitiveN("doublebe",g,i)}bitN(g,i,I){return I.length=g,this.setNextParser("bit",i,I)}bit1(g,i={}){return this.bitN(1,g,i)}bit2(g,i={}){return this.bitN(2,g,i)}bit3(g,i={}){return this.bitN(3,g,i)}bit4(g,i={}){return this.bitN(4,g,i)}bit5(g,i={}){return this.bitN(5,g,i)}bit6(g,i={}){return this.bitN(6,g,i)}bit7(g,i={}){return this.bitN(7,g,i)}bit8(g,i={}){return this.bitN(8,g,i)}bit9(g,i={}){return this.bitN(9,g,i)}bit10(g,i={}){return this.bitN(10,g,i)}bit11(g,i={}){return this.bitN(11,g,i)}bit12(g,i={}){return this.bitN(12,g,i)}bit13(g,i={}){return this.bitN(13,g,i)}bit14(g,i={}){return this.bitN(14,g,i)}bit15(g,i={}){return this.bitN(15,g,i)}bit16(g,i={}){return this.bitN(16,g,i)}bit17(g,i={}){return this.bitN(17,g,i)}bit18(g,i={}){return this.bitN(18,g,i)}bit19(g,i={}){return this.bitN(19,g,i)}bit20(g,i={}){return this.bitN(20,g,i)}bit21(g,i={}){return this.bitN(21,g,i)}bit22(g,i={}){return this.bitN(22,g,i)}bit23(g,i={}){return this.bitN(23,g,i)}bit24(g,i={}){return this.bitN(24,g,i)}bit25(g,i={}){return this.bitN(25,g,i)}bit26(g,i={}){return this.bitN(26,g,i)}bit27(g,i={}){return this.bitN(27,g,i)}bit28(g,i={}){return this.bitN(28,g,i)}bit29(g,i={}){return this.bitN(29,g,i)}bit30(g,i={}){return this.bitN(30,g,i)}bit31(g,i={}){return this.bitN(31,g,i)}bit32(g,i={}){return this.bitN(32,g,i)}namely(g){return Ko.set(g,this),this.alias=g,this}skip(g,i={}){return this.seek(g,i)}seek(g,i={}){if(i.assert)throw new Error("assert option on seek is not allowed.");return this.setNextParser("seek","",{length:g})}string(g,i){if(!i.zeroTerminated&&!i.length&&!i.greedy)throw new Error("One of length, zeroTerminated, or greedy must be defined for string.");if((i.zeroTerminated||i.length)&&i.greedy)throw new Error("greedy is mutually exclusive with length and zeroTerminated for string.");if(i.stripNull&&!(i.length||i.greedy))throw new Error("length or greedy must be defined if stripNull is enabled.");return i.encoding=i.encoding||"utf8",this.setNextParser("string",g,i)}buffer(g,i){if(!i.length&&!i.readUntil)throw new Error("length or readUntil must be defined for buffer.");return this.setNextParser("buffer",g,i)}wrapped(g,i){if(typeof i!="object"&&typeof g=="object"&&(i=g,g=""),!i||!i.wrapper||!i.type)throw new Error("Both wrapper and type must be defined for wrapped.");if(!i.length&&!i.readUntil)throw new Error("length or readUntil must be defined for wrapped.");return this.setNextParser("wrapper",g,i)}array(g,i){if(!i.readUntil&&!i.length&&!i.lengthInBytes)throw new Error("One of readUntil, length and lengthInBytes must be defined for array.");if(!i.type)throw new Error("type is required for array.");if(typeof i.type=="string"&&!Ko.has(i.type)&&!(i.type in Fo))throw new Error(`Array element type "${i.type}" is unkown.`);return this.setNextParser("array",g,i)}choice(g,i){if(typeof i!="object"&&typeof g=="object"&&(i=g,g=""),!i)throw new Error("tag and choices are are required for choice.");if(!i.tag)throw new Error("tag is requird for choice.");if(!i.choices)throw new Error("choices is required for choice.");for(const I in i.choices){const n=parseInt(I,10),r=i.choices[n];if(isNaN(n))throw new Error(`Choice key "${I}" is not a number.`);if(typeof r=="string"&&!Ko.has(r)&&!(r in Fo))throw new Error(`Choice type "${r}" is unkown.`)}return this.setNextParser("choice",g,i)}nest(g,i){if(typeof i!="object"&&typeof g=="object"&&(i=g,g=""),!i||!i.type)throw new Error("type is required for nest.");if(!(i.type instanceof kg)&&!Ko.has(i.type))throw new Error("type must be a known parser name or a Parser object.");if(!(i.type instanceof kg)&&!g)throw new Error("type must be a Parser object if the variable name is omitted.");return this.setNextParser("nest",g,i)}pointer(g,i){if(!i.offset)throw new Error("offset is required for pointer.");if(!i.type)throw new Error("type is required for pointer.");if(typeof i.type=="string"&&!(i.type in Fo)&&!Ko.has(i.type))throw new Error(`Pointer type "${i.type}" is unkown.`);return this.setNextParser("pointer",g,i)}saveOffset(g,i={}){return this.setNextParser("saveOffset",g,i)}endianness(g){switch(g.toLowerCase()){case"little":this.endian="le";break;case"big":this.endian="be";break;default:throw new Error('endianness must be one of "little" or "big"')}return this}endianess(g){return this.endianness(g)}useContextVars(g=!0){return this.useContextVariables=g,this}create(g){if(!(g instanceof Function))throw new Error("Constructor must be a Function object.");return this.constructorFn=g,this}getContext(g){const i=new Lgg(g,this.useContextVariables);return i.pushCode("var dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);"),this.alias?(this.addAliasedCode(i),i.pushCode(`return ${xu+this.alias}(0).result;`)):this.addRawCode(i),i}getCode(){const g="imports";return this.getContext(g).code}addRawCode(g){g.pushCode("var offset = 0;"),g.pushCode(`var vars = ${this.constructorFn?"new constructorFn()":"{}"};`),g.pushCode("vars.$parent = null;"),g.pushCode("vars.$root = vars;"),this.generate(g),this.resolveReferences(g),g.pushCode("delete vars.$parent;"),g.pushCode("delete vars.$root;"),g.pushCode("return vars;")}addAliasedCode(g){return g.pushCode(`function ${xu+this.alias}(offset, context) {`),g.pushCode(`var vars = ${this.constructorFn?"new constructorFn()":"{}"};`),g.pushCode("var ctx = Object.assign({$parent: null, $root: vars}, context || {});"),g.pushCode("vars = Object.assign(vars, ctx);"),this.generate(g),g.markResolved(this.alias),this.resolveReferences(g),g.pushCode("Object.keys(ctx).forEach(function (item) { delete vars[item]; });"),g.pushCode("return { offset: offset, result: vars };"),g.pushCode("}"),g}resolveReferences(g){const i=g.getUnresolvedReferences();g.markRequested(i),i.forEach(I=>{var n;(n=Ko.get(I))===null||n===void 0||n.addAliasedCode(g)})}compile(){const g="imports",i=this.getContext(g);this.compiled=new Function(g,"TextDecoder",`return function (buffer, constructorFn) { ${i.code} };`)(i.imports,TextDecoder)}sizeOf(){let g=NaN;if(Object.keys(Fo).indexOf(this.type)>=0)g=Fo[this.type];else if(this.type==="string"&&typeof this.options.length=="number")g=this.options.length;else if(this.type==="buffer"&&typeof this.options.length=="number")g=this.options.length;else if(this.type==="array"&&typeof this.options.length=="number"){let i=NaN;typeof this.options.type=="string"?i=Fo[this.options.type]:this.options.type instanceof kg&&(i=this.options.type.sizeOf()),g=this.options.length*i}else this.type==="seek"?g=this.options.length:this.type==="nest"?g=this.options.type.sizeOf():this.type||(g=0);return this.next&&(g+=this.next.sizeOf()),g}parse(g){return this.compiled||this.compile(),this.compiled(g,this.constructorFn)}setNextParser(g,i,I){const n=new kg;return n.type=g,n.varName=i,n.options=I,n.endian=this.endian,this.head?this.head.next=n:this.next=n,this.head=n,this}generate(g){if(this.type){switch(this.type){case"uint8":case"uint16le":case"uint16be":case"uint32le":case"uint32be":case"int8":case"int16le":case"int16be":case"int32le":case"int32be":case"int64be":case"int64le":case"uint64be":case"uint64le":case"floatle":case"floatbe":case"doublele":case"doublebe":this.primitiveGenerateN(this.type,g);break;case"bit":this.generateBit(g);break;case"string":this.generateString(g);break;case"buffer":this.generateBuffer(g);break;case"seek":this.generateSeek(g);break;case"nest":this.generateNest(g);break;case"array":this.generateArray(g);break;case"choice":this.generateChoice(g);break;case"pointer":this.generatePointer(g);break;case"saveOffset":this.generateSaveOffset(g);break;case"wrapper":this.generateWrapper(g);break}this.type!=="bit"&&this.generateAssert(g)}const i=g.generateVariable(this.varName);return this.options.formatter&&this.type!=="bit"&&this.generateFormatter(g,i,this.options.formatter),this.generateNext(g)}generateAssert(g){if(!this.options.assert)return;const i=g.generateVariable(this.varName);switch(typeof this.options.assert){case"function":{const I=g.addImport(this.options.assert);g.pushCode(`if (!${I}.call(vars, ${i})) {`)}break;case"number":g.pushCode(`if (${this.options.assert} !== ${i}) {`);break;case"string":g.pushCode(`if (${JSON.stringify(this.options.assert)} !== ${i}) {`);break;default:throw new Error("assert option must be a string, number or a function.")}g.generateError(`"Assertion error: ${i} is " + ${JSON.stringify(this.options.assert.toString())}`),g.pushCode("}")}generateNext(g){return this.next&&(g=this.next.generate(g)),g}generateBit(g){const i=JSON.parse(JSON.stringify(this));if(i.options=this.options,i.generateAssert=this.generateAssert.bind(this),i.generateFormatter=this.generateFormatter.bind(this),i.varName=g.generateVariable(i.varName),g.bitFields.push(i),!this.next||this.next&&["bit","nest"].indexOf(this.next.type)<0){const I=g.generateTmpVariable();g.pushCode(`var ${I} = 0;`);const n=(A=0)=>{let l=0;for(let c=A;c32)break;l+=u}return l},r=A=>(A<=8?(g.pushCode(`${I} = dataView.getUint8(offset);`),A=8):A<=16?(g.pushCode(`${I} = dataView.getUint16(offset);`),A=16):A<=24?(g.pushCode(`${I} = (dataView.getUint16(offset) << 8) | dataView.getUint8(offset + 2);`),A=24):(g.pushCode(`${I} = dataView.getUint32(offset);`),A=32),g.pushCode(`offset += ${A/8};`),A);let C=0;const o=this.endian==="be";let a=0,s=0;g.bitFields.forEach((A,l)=>{let c=A.options.length;if(c>s){if(s){const h=-1>>>32-s;g.pushCode(`${A.varName} = (${I} & 0x${h.toString(16)}) << ${c-s};`),c-=s}C=0,s=a=r(n(l)-s)}const u=o?a-C-c:C,d=-1>>>32-c;g.pushCode(`${A.varName} ${c> ${u} & 0x${d.toString(16)};`),A.options.length===32&&g.pushCode(`${A.varName} >>>= 0`),A.options.assert&&A.generateAssert(g),A.options.formatter&&A.generateFormatter(g,A.varName,A.options.formatter),C+=c,s-=c}),g.bitFields=[]}}generateSeek(g){const i=g.generateOption(this.options.length);g.pushCode(`offset += ${i};`)}generateString(g){const i=g.generateVariable(this.varName),I=g.generateTmpVariable(),n=this.options.encoding,r=n.toLowerCase()==="hex",C='b => b.toString(16).padStart(2, "0")';if(this.options.length&&this.options.zeroTerminated){const o=this.options.length;g.pushCode(`var ${I} = offset;`),g.pushCode(`while(dataView.getUint8(offset++) !== 0 && offset - ${I} < ${o});`);const a=`offset - ${I} < ${o} ? offset - 1 : offset`;g.pushCode(r?`${i} = Array.from(buffer.subarray(${I}, ${a}), ${C}).join('');`:`${i} = new TextDecoder('${n}').decode(buffer.subarray(${I}, ${a}));`)}else if(this.options.length){const o=g.generateOption(this.options.length);g.pushCode(r?`${i} = Array.from(buffer.subarray(offset, offset + ${o}), ${C}).join('');`:`${i} = new TextDecoder('${n}').decode(buffer.subarray(offset, offset + ${o}));`),g.pushCode(`offset += ${o};`)}else this.options.zeroTerminated?(g.pushCode(`var ${I} = offset;`),g.pushCode("while(dataView.getUint8(offset++) !== 0);"),g.pushCode(r?`${i} = Array.from(buffer.subarray(${I}, offset - 1), ${C}).join('');`:`${i} = new TextDecoder('${n}').decode(buffer.subarray(${I}, offset - 1));`)):this.options.greedy&&(g.pushCode(`var ${I} = offset;`),g.pushCode("while(buffer.length > offset++);"),g.pushCode(r?`${i} = Array.from(buffer.subarray(${I}, offset), ${C}).join('');`:`${i} = new TextDecoder('${n}').decode(buffer.subarray(${I}, offset));`));this.options.stripNull&&g.pushCode(`${i} = ${i}.replace(/\\x00+$/g, '')`)}generateBuffer(g){const i=g.generateVariable(this.varName);if(typeof this.options.readUntil=="function"){const I=this.options.readUntil,n=g.generateTmpVariable(),r=g.generateTmpVariable();g.pushCode(`var ${n} = offset;`),g.pushCode(`var ${r} = 0;`),g.pushCode("while (offset < buffer.length) {"),g.pushCode(`${r} = dataView.getUint8(offset);`);const C=g.addImport(I);g.pushCode(`if (${C}.call(${g.generateVariable()}, ${r}, buffer.subarray(offset))) break;`),g.pushCode("offset += 1;"),g.pushCode("}"),g.pushCode(`${i} = buffer.subarray(${n}, offset);`)}else if(this.options.readUntil==="eof")g.pushCode(`${i} = buffer.subarray(offset);`);else{const I=g.generateOption(this.options.length);g.pushCode(`${i} = buffer.subarray(offset, offset + ${I});`),g.pushCode(`offset += ${I};`)}this.options.clone&&g.pushCode(`${i} = buffer.constructor.from(${i});`)}generateArray(g){const i=g.generateOption(this.options.length),I=g.generateOption(this.options.lengthInBytes),n=this.options.type,r=g.generateTmpVariable(),C=g.generateVariable(this.varName),o=g.generateTmpVariable(),a=this.options.key,s=typeof a=="string";if(s?g.pushCode(`${C} = {};`):g.pushCode(`${C} = [];`),typeof this.options.readUntil=="function"?g.pushCode("do {"):this.options.readUntil==="eof"?g.pushCode(`for (var ${r} = 0; offset < buffer.length; ${r}++) {`):I!==void 0?g.pushCode(`for (var ${r} = offset + ${I}; offset < ${r}; ) {`):g.pushCode(`for (var ${r} = ${i}; ${r} > 0; ${r}--) {`),typeof n=="string")if(Ko.get(n)){const A=g.generateTmpVariable();if(g.pushCode(`var ${A} = ${xu+n}(offset, {`),g.useContextVariables){const l=g.generateVariable();g.pushCode(`$parent: ${l},`),g.pushCode(`$root: ${l}.$root,`),!this.options.readUntil&&I===void 0&&g.pushCode(`$index: ${i} - ${r},`)}g.pushCode("});"),g.pushCode(`var ${o} = ${A}.result; offset = ${A}.offset;`),n!==this.alias&&g.addReference(n)}else{const A=I1[n],l=n1[n];g.pushCode(`var ${o} = dataView.get${A}(offset, ${l});`),g.pushCode(`offset += ${Fo[n]};`)}else if(n instanceof kg){g.pushCode(`var ${o} = {};`);const A=g.generateVariable();g.pushScope(o),g.useContextVariables&&(g.pushCode(`${o}.$parent = ${A};`),g.pushCode(`${o}.$root = ${A}.$root;`),!this.options.readUntil&&I===void 0&&g.pushCode(`${o}.$index = ${i} - ${r};`)),n.generate(g),g.useContextVariables&&(g.pushCode(`delete ${o}.$parent;`),g.pushCode(`delete ${o}.$root;`),g.pushCode(`delete ${o}.$index;`)),g.popScope()}if(s?g.pushCode(`${C}[${o}.${a}] = ${o};`):g.pushCode(`${C}.push(${o});`),g.pushCode("}"),typeof this.options.readUntil=="function"){const A=this.options.readUntil,l=g.addImport(A);g.pushCode(`while (!${l}.call(${g.generateVariable()}, ${o}, buffer.subarray(offset)));`)}}generateChoiceCase(g,i,I){if(typeof I=="string"){const n=g.generateVariable(this.varName);if(Ko.has(I)){const r=g.generateTmpVariable();g.pushCode(`var ${r} = ${xu+I}(offset, {`),g.useContextVariables&&(g.pushCode(`$parent: ${n}.$parent,`),g.pushCode(`$root: ${n}.$root,`)),g.pushCode("});"),g.pushCode(`${n} = ${r}.result; offset = ${r}.offset;`),I!==this.alias&&g.addReference(I)}else{const r=I1[I],C=n1[I];g.pushCode(`${n} = dataView.get${r}(offset, ${C});`),g.pushCode(`offset += ${Fo[I]}`)}}else I instanceof kg&&(g.pushPath(i),I.generate(g),g.popPath(i))}generateChoice(g){const i=g.generateOption(this.options.tag),I=g.generateVariable(this.varName);if(this.varName&&(g.pushCode(`${I} = {};`),g.useContextVariables)){const n=g.generateVariable();g.pushCode(`${I}.$parent = ${n};`),g.pushCode(`${I}.$root = ${n}.$root;`)}g.pushCode(`switch(${i}) {`);for(const n in this.options.choices){const r=parseInt(n,10),C=this.options.choices[r];g.pushCode(`case ${r}:`),this.generateChoiceCase(g,this.varName,C),g.pushCode("break;")}g.pushCode("default:"),this.options.defaultChoice?this.generateChoiceCase(g,this.varName,this.options.defaultChoice):g.generateError(`"Met undefined tag value " + ${i} + " at choice"`),g.pushCode("}"),this.varName&&g.useContextVariables&&(g.pushCode(`delete ${I}.$parent;`),g.pushCode(`delete ${I}.$root;`))}generateNest(g){const i=g.generateVariable(this.varName);if(this.options.type instanceof kg){if(this.varName&&(g.pushCode(`${i} = {};`),g.useContextVariables)){const I=g.generateVariable();g.pushCode(`${i}.$parent = ${I};`),g.pushCode(`${i}.$root = ${I}.$root;`)}g.pushPath(this.varName),this.options.type.generate(g),g.popPath(this.varName),this.varName&&g.useContextVariables&&g.useContextVariables&&(g.pushCode(`delete ${i}.$parent;`),g.pushCode(`delete ${i}.$root;`))}else if(Ko.has(this.options.type)){const I=g.generateTmpVariable();if(g.pushCode(`var ${I} = ${xu+this.options.type}(offset, {`),g.useContextVariables){const n=g.generateVariable();g.pushCode(`$parent: ${n},`),g.pushCode(`$root: ${n}.$root,`)}g.pushCode("});"),g.pushCode(`${i} = ${I}.result; offset = ${I}.offset;`),this.options.type!==this.alias&&g.addReference(this.options.type)}}generateWrapper(g){const i=g.generateVariable(this.varName),I=g.generateTmpVariable();if(typeof this.options.readUntil=="function"){const a=this.options.readUntil,s=g.generateTmpVariable(),A=g.generateTmpVariable();g.pushCode(`var ${s} = offset;`),g.pushCode(`var ${A} = 0;`),g.pushCode("while (offset < buffer.length) {"),g.pushCode(`${A} = dataView.getUint8(offset);`);const l=g.addImport(a);g.pushCode(`if (${l}.call(${g.generateVariable()}, ${A}, buffer.subarray(offset))) break;`),g.pushCode("offset += 1;"),g.pushCode("}"),g.pushCode(`${I} = buffer.subarray(${s}, offset);`)}else if(this.options.readUntil==="eof")g.pushCode(`${I} = buffer.subarray(offset);`);else{const a=g.generateOption(this.options.length);g.pushCode(`${I} = buffer.subarray(offset, offset + ${a});`),g.pushCode(`offset += ${a};`)}this.options.clone&&g.pushCode(`${I} = buffer.constructor.from(${I});`);const n=g.generateTmpVariable(),r=g.generateTmpVariable(),C=g.generateTmpVariable(),o=g.addImport(this.options.wrapper);if(g.pushCode(`${I} = ${o}.call(this, ${I}).subarray(0);`),g.pushCode(`var ${n} = buffer;`),g.pushCode(`var ${r} = offset;`),g.pushCode(`var ${C} = dataView;`),g.pushCode(`buffer = ${I};`),g.pushCode("offset = 0;"),g.pushCode("dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);"),this.options.type instanceof kg)this.varName&&g.pushCode(`${i} = {};`),g.pushPath(this.varName),this.options.type.generate(g),g.popPath(this.varName);else if(Ko.has(this.options.type)){const a=g.generateTmpVariable();g.pushCode(`var ${a} = ${xu+this.options.type}(0);`),g.pushCode(`${i} = ${a}.result;`),this.options.type!==this.alias&&g.addReference(this.options.type)}g.pushCode(`buffer = ${n};`),g.pushCode(`dataView = ${C};`),g.pushCode(`offset = ${r};`)}generateFormatter(g,i,I){if(typeof I=="function"){const n=g.addImport(I);g.pushCode(`${i} = ${n}.call(${g.generateVariable()}, ${i});`)}}generatePointer(g){const i=this.options.type,I=g.generateOption(this.options.offset),n=g.generateTmpVariable(),r=g.generateVariable(this.varName);if(g.pushCode(`var ${n} = offset;`),g.pushCode(`offset = ${I};`),this.options.type instanceof kg){if(g.pushCode(`${r} = {};`),g.useContextVariables){const C=g.generateVariable();g.pushCode(`${r}.$parent = ${C};`),g.pushCode(`${r}.$root = ${C}.$root;`)}g.pushPath(this.varName),this.options.type.generate(g),g.popPath(this.varName),g.useContextVariables&&(g.pushCode(`delete ${r}.$parent;`),g.pushCode(`delete ${r}.$root;`))}else if(Ko.has(this.options.type)){const C=g.generateTmpVariable();if(g.pushCode(`var ${C} = ${xu+this.options.type}(offset, {`),g.useContextVariables){const o=g.generateVariable();g.pushCode(`$parent: ${o},`),g.pushCode(`$root: ${o}.$root,`)}g.pushCode("});"),g.pushCode(`${r} = ${C}.result; offset = ${C}.offset;`),this.options.type!==this.alias&&g.addReference(this.options.type)}else if(Object.keys(Fo).indexOf(this.options.type)>=0){const C=I1[i],o=n1[i];g.pushCode(`${r} = dataView.get${C}(offset, ${o});`),g.pushCode(`offset += ${Fo[i]};`)}g.pushCode(`offset = ${n};`)}generateSaveOffset(g){const i=g.generateVariable(this.varName);g.pushCode(`${i} = offset`)}}var Y2e={},i8={},Fh={},Dw={};Object.defineProperty(Dw,"__esModule",{value:!0});function I8(e,g){if(!(e instanceof g))throw new TypeError("Cannot call a class as a function")}function Wle(e,g){for(var i=0;i"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function GG(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function jgg(e,g){if(g&&(typeof g=="object"||typeof g=="function"))return g;if(g!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return GG(e)}function $gg(e){var g=Qgg();return function(){var I=f0(e),n;if(g){var r=f0(this).constructor;n=Reflect.construct(I,arguments,r)}else n=I.apply(this,arguments);return jgg(this,n)}}function qgg(e,g){for(;!Object.prototype.hasOwnProperty.call(e,g)&&(e=f0(e),e!==null););return e}function zW(){return typeof Reflect<"u"&&Reflect.get?zW=Reflect.get.bind():zW=function(g,i,I){var n=qgg(g,i);if(n){var r=Object.getOwnPropertyDescriptor(n,i);return r.get?r.get.call(arguments.length<3?g:I):r.value}},zW.apply(this,arguments)}var Xle=function(){function e(){I8(this,e),Object.defineProperty(this,"listeners",{value:{},writable:!0,configurable:!0})}return n8(e,[{key:"addEventListener",value:function(i,I,n){i in this.listeners||(this.listeners[i]=[]),this.listeners[i].push({callback:I,options:n})}},{key:"removeEventListener",value:function(i,I){if(i in this.listeners){for(var n=this.listeners[i],r=0,C=n.length;r"u")n=new Error("This operation was aborted"),n.name="AbortError";else try{n=new DOMException("signal is aborted without reason")}catch{n=new Error("This operation was aborted"),n.name="AbortError"}this.signal.reason=n,this.signal.dispatchEvent(I)}},{key:"toString",value:function(){return"[object AbortController]"}}]),e}();typeof Symbol<"u"&&Symbol.toStringTag&&(K2e.prototype[Symbol.toStringTag]="AbortController",r8.prototype[Symbol.toStringTag]="AbortSignal");function eig(e){return e.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL?(console.log("__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill"),!0):typeof e.Request=="function"&&!e.Request.prototype.hasOwnProperty("signal")||!e.AbortController}function tig(e){typeof e=="function"&&(e={fetch:e});var g=e,i=g.fetch,I=g.Request,n=I===void 0?i.Request:I,r=g.AbortController,C=g.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,o=C===void 0?!1:C;if(!eig({fetch:i,Request:n,AbortController:r,__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL:o}))return{fetch:i,Request:a};var a=n;(a&&!a.prototype.hasOwnProperty("signal")||o)&&(a=function(c,u){var d;u&&u.signal&&(d=u.signal,delete u.signal);var h=new n(c,u);return d&&Object.defineProperty(h,"signal",{writable:!1,enumerable:!1,configurable:!0,value:d}),h},a.prototype=n.prototype);var s=i,A=function(c,u){var d=a&&a.prototype.isPrototypeOf(c)?c.signal:u?u.signal:void 0;if(d){var h;try{h=new DOMException("Aborted","AbortError")}catch{h=new Error("Aborted"),h.name="AbortError"}if(d.aborted)return Promise.reject(h);var m=new Promise(function(f,b){d.addEventListener("abort",function(){return b(h)},{once:!0})});return u&&u.signal&&delete u.signal,Promise.race([m,s(c,u)])}return s(c,u)};return{fetch:A,Request:a}}Dw.AbortController=K2e;Dw.AbortSignal=r8;Dw.abortableFetch=tig;Object.defineProperty(Fh,"__esModule",{value:!0});Fh.AbortSignal=Fh.AbortController=void 0;const F2e=Dw;var TH=function(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof ih<"u")return ih;throw new Error("unable to locate global object")};let gig=typeof TH().AbortController>"u"?F2e.AbortController:TH().AbortController;Fh.AbortController=gig;let iig=typeof TH().AbortController>"u"?F2e.AbortSignal:TH().AbortSignal;Fh.AbortSignal=iig;var C8={};Object.defineProperty(C8,"__esModule",{value:!0});const Iig=Fh;class nig{}class rig{constructor(){this.signals=new Set,this.abortController=new Iig.AbortController}addSignal(g=new nig){if(this.signal.aborted)throw new Error("cannot add a signal, already aborted!");this.signals.add(g),g.aborted?this.handleAborted(g):typeof g.addEventListener=="function"&&g.addEventListener("abort",()=>{this.handleAborted(g)})}handleAborted(g){this.signals.delete(g),this.signals.size===0&&this.abortController.abort()}get signal(){return this.abortController.signal}abort(){this.abortController.abort()}}C8.default=rig;var o8={};Object.defineProperty(o8,"__esModule",{value:!0});class Cig{constructor(){this.callbacks=new Set}addCallback(g=()=>{}){this.callbacks.add(g),g(this.currentMessage)}callback(g){this.currentMessage=g,this.callbacks.forEach(i=>{i(g)})}}o8.default=Cig;var D2e=ih&&ih.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i8,"__esModule",{value:!0});const oig=Fh,aig=D2e(C8),Aig=D2e(o8);class NH{constructor({fill:g,cache:i}){if(typeof g!="function")throw new TypeError("must pass a fill function");if(typeof i!="object")throw new TypeError("must pass a cache object");if(typeof i.get!="function"||typeof i.set!="function"||typeof i.delete!="function")throw new TypeError("cache must implement get(key), set(key, val), and and delete(key)");this.cache=i,this.fillCallback=g}static isAbortException(g){return g.name==="AbortError"||g.code==="ERR_ABORTED"||g.message==="AbortError: aborted"||g.message==="Error: aborted"}evict(g,i){this.cache.get(g)===i&&this.cache.delete(g)}fill(g,i,I,n){const r=new aig.default,C=new Aig.default;C.addCallback(n);const o={aborter:r,promise:this.fillCallback(i,r.signal,a=>{C.callback(a)}),settled:!1,statusReporter:C,get aborted(){return this.aborter.signal.aborted}};o.aborter.addSignal(I),o.aborter.signal.addEventListener("abort",()=>{o.settled||this.evict(g,o)}),o.promise.then(()=>{o.settled=!0},()=>{o.settled=!0,this.evict(g,o)}).catch(a=>{throw console.error(a),a}),this.cache.set(g,o)}static checkSinglePromise(g,i){function I(){if(i&&i.aborted)throw Object.assign(new Error("aborted"),{code:"ERR_ABORTED"})}return g.then(n=>(I(),n),n=>{throw I(),n})}has(g){return this.cache.has(g)}get(g,i,I,n){if(!I&&i instanceof oig.AbortSignal)throw new TypeError("second get argument appears to be an AbortSignal, perhaps you meant to pass `null` for the fill data?");const r=this.cache.get(g);return r?r.aborted&&!r.settled?(this.evict(g,r),this.get(g,i,I,n)):r.settled?r.promise:(r.aborter.addSignal(I),r.statusReporter.addCallback(n),NH.checkSinglePromise(r.promise,I)):(this.fill(g,i,I,n),NH.checkSinglePromise(this.cache.get(g).promise,I))}delete(g){const i=this.cache.get(g);i&&(i.settled||i.aborter.abort(),this.cache.delete(g))}clear(){const g=this.cache.keys();let i=0;for(let I=g.next();!I.done;I=g.next())this.delete(I.value),i+=1;return i}}i8.default=NH;var sig=ih&&ih.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Y2e,"__esModule",{value:!0});const lig=sig(i8);var cig=Y2e.default=lig.default;class rc{constructor(g,i){this.ranges=arguments.length===2?[{min:g,max:i}]:0 in g?Object.assign({},g):[g]}min(){return this.ranges[0].min}max(){return this.ranges[this.ranges.length-1].max}contains(g){for(let i=0;i=g)return!0}return!1}isContiguous(){return this.ranges.length>1}getRanges(){return this.ranges.map(g=>new rc(g.min,g.max))}toString(){return this.ranges.map(g=>`[${g.min}-${g.max}]`).join(",")}union(g){const i=this.getRanges().concat(g.getRanges()).sort(this.rangeOrder),I=[];let n=i[0];for(let r=1;rn.max()+1?(I.push(n),n=C):C.max()>n.max()&&(n=new rc(n.min(),C.max()))}return I.push(n),I.length===1?I[0]:new rc(I)}intersection(g){let i=this,I=g;const n=this.ranges(),r=I.ranges(),C=n.length,o=r.length;let a=0,s=0;const A=[];for(;a=l&&A.push(new rc(l,c)),i.max()>I.max()?s+=1:a+=1}if(A.length===0)throw new Error("found range of length 0");return A.length===1?A[0]:new rc(A)}coverage(){let g=0;const i=this.ranges();for(let I=0;In.min()?1:I.max()I.max()?1:0}}function fy(e){let g=e.length;for(;--g>=0;)e[g]=0}const uig=3,dig=258,x2e=29,hig=256,mig=hig+1+x2e,E2e=30,fig=512,pig=new Array((mig+2)*2);fy(pig);const big=new Array(E2e*2);fy(big);const yig=new Array(fig);fy(yig);const Zig=new Array(dig-uig+1);fy(Zig);const Gig=new Array(x2e);fy(Gig);const vig=new Array(E2e);fy(vig);const Big=(e,g,i,I)=>{let n=e&65535|0,r=e>>>16&65535|0,C=0;for(;i!==0;){C=i>2e3?2e3:i,i-=C;do n=n+g[I++]|0,r=r+n|0;while(--C);n%=65521,r%=65521}return n|r<<16|0};var d_=Big;const Sig=()=>{let e,g=[];for(var i=0;i<256;i++){e=i;for(var I=0;I<8;I++)e=e&1?3988292384^e>>>1:e>>>1;g[i]=e}return g},wig=new Uint32Array(Sig()),Rig=(e,g,i,I)=>{const n=wig,r=I+i;e^=-1;for(let C=I;C>>8^n[(e^g[C])&255];return e^-1};var Ka=Rig,h_={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},a8={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const Vig=(e,g)=>Object.prototype.hasOwnProperty.call(e,g);var Wig=function(e){const g=Array.prototype.slice.call(arguments,1);for(;g.length;){const i=g.shift();if(i){if(typeof i!="object")throw new TypeError(i+"must be non-object");for(const I in i)Vig(i,I)&&(e[I]=i[I])}}return e},Xig=e=>{let g=0;for(let I=0,n=e.length;I=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;uS[254]=uS[254]=1;var Hig=e=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let g,i,I,n,r,C=e.length,o=0;for(n=0;n>>6,g[r++]=128|i&63):i<65536?(g[r++]=224|i>>>12,g[r++]=128|i>>>6&63,g[r++]=128|i&63):(g[r++]=240|i>>>18,g[r++]=128|i>>>12&63,g[r++]=128|i>>>6&63,g[r++]=128|i&63);return g};const Tig=(e,g)=>{if(g<65534&&e.subarray&&z2e)return String.fromCharCode.apply(null,e.length===g?e:e.subarray(0,g));let i="";for(let I=0;I{const i=g||e.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,g));let I,n;const r=new Array(i*2);for(n=0,I=0;I4){r[n++]=65533,I+=o-1;continue}for(C&=o===2?31:o===3?15:7;o>1&&I1){r[n++]=65533;continue}C<65536?r[n++]=C:(C-=65536,r[n++]=55296|C>>10&1023,r[n++]=56320|C&1023)}return Tig(r,n)},kig=(e,g)=>{g=g||e.length,g>e.length&&(g=e.length);let i=g-1;for(;i>=0&&(e[i]&192)===128;)i--;return i<0||i===0?g:i+uS[e[i]]>g?i:g},m_={string2buf:Hig,buf2string:Nig,utf8border:kig};function Yig(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var Kig=Yig;const r1=16209,Fig=16191;var Dig=function(g,i){let I,n,r,C,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G,v,w,V;const S=g.state;I=g.next_in,w=g.input,n=I+(g.avail_in-5),r=g.next_out,V=g.output,C=r-(i-g.avail_out),o=r+(g.avail_out-257),a=S.dmax,s=S.wsize,A=S.whave,l=S.wnext,c=S.window,u=S.hold,d=S.bits,h=S.lencode,m=S.distcode,f=(1<>>24,u>>>=y,d-=y,y=p>>>16&255,y===0)V[r++]=p&65535;else if(y&16){Z=p&65535,y&=15,y&&(d>>=y,d-=y),d<15&&(u+=w[I++]<>>24,u>>>=y,d-=y,y=p>>>16&255,y&16){if(B=p&65535,y&=15,da){g.msg="invalid distance too far back",S.mode=r1;break e}if(u>>>=y,d-=y,y=r-C,B>y){if(y=B-y,y>A&&S.sane){g.msg="invalid distance too far back",S.mode=r1;break e}if(G=0,v=c,l===0){if(G+=s-y,y2;)V[r++]=v[G++],V[r++]=v[G++],V[r++]=v[G++],Z-=3;Z&&(V[r++]=v[G++],Z>1&&(V[r++]=v[G++]))}else{G=r-B;do V[r++]=V[G++],V[r++]=V[G++],V[r++]=V[G++],Z-=3;while(Z>2);Z&&(V[r++]=V[G++],Z>1&&(V[r++]=V[G++]))}}else if(y&64){g.msg="invalid distance code",S.mode=r1;break e}else{p=m[(p&65535)+(u&(1<>3,I-=Z,d-=Z<<3,u&=(1<{const a=o.bits;let s=0,A=0,l=0,c=0,u=0,d=0,h=0,m=0,f=0,b=0,p,y,Z,B,G,v=null,w;const V=new Uint16Array(of+1),S=new Uint16Array(of+1);let X=null,W,R,H;for(s=0;s<=of;s++)V[s]=0;for(A=0;A=1&&V[c]===0;c--);if(u>c&&(u=c),c===0)return n[r++]=1<<24|64<<16|0,n[r++]=1<<24|64<<16|0,o.bits=1,0;for(l=1;l0&&(e===Nle||c!==1))return-1;for(S[1]=0,s=1;sHle||e===kle&&f>Tle)return 1;for(;;){W=s-h,C[A]+1=w?(R=X[C[A]-w],H=v[C[A]-w]):(R=32+64,H=0),p=1<>h)+y]=W<<24|R<<16|H|0;while(y!==0);for(p=1<>=1;if(p!==0?(b&=p-1,b+=p):b=0,A++,--V[s]===0){if(s===c)break;s=g[i+C[A]]}if(s>u&&(b&B)!==Z){for(h===0&&(h=u),G+=l,d=s-h,m=1<Hle||e===kle&&f>Tle)return 1;Z=b&B,n[Z]=u<<24|d<<16|G-r|0}}return b!==0&&(n[G+b]=s-h<<24|64<<16|0),o.bits=u,0};var Kv=Pig;const Jig=0,P2e=1,J2e=2,{Z_FINISH:Yle,Z_BLOCK:Oig,Z_TREES:C1,Z_OK:Dh,Z_STREAM_END:_ig,Z_NEED_DICT:Lig,Z_STREAM_ERROR:so,Z_DATA_ERROR:O2e,Z_MEM_ERROR:_2e,Z_BUF_ERROR:Uig,Z_DEFLATED:Kle}=a8,CY=16180,Fle=16181,Dle=16182,xle=16183,Ele=16184,Mle=16185,zle=16186,Ple=16187,Jle=16188,Ole=16189,kH=16190,UA=16191,Nx=16192,_le=16193,kx=16194,Lle=16195,Ule=16196,Qle=16197,jle=16198,o1=16199,a1=16200,$le=16201,qle=16202,ece=16203,tce=16204,gce=16205,Yx=16206,ice=16207,Ice=16208,Si=16209,L2e=16210,U2e=16211,Qig=852,jig=592,$ig=15,qig=$ig,nce=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function eIg(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Gm=e=>{if(!e)return 1;const g=e.state;return!g||g.strm!==e||g.modeU2e?1:0},Q2e=e=>{if(Gm(e))return so;const g=e.state;return e.total_in=e.total_out=g.total=0,e.msg="",g.wrap&&(e.adler=g.wrap&1),g.mode=CY,g.last=0,g.havedict=0,g.flags=-1,g.dmax=32768,g.head=null,g.hold=0,g.bits=0,g.lencode=g.lendyn=new Int32Array(Qig),g.distcode=g.distdyn=new Int32Array(jig),g.sane=1,g.back=-1,Dh},j2e=e=>{if(Gm(e))return so;const g=e.state;return g.wsize=0,g.whave=0,g.wnext=0,Q2e(e)},$2e=(e,g)=>{let i;if(Gm(e))return so;const I=e.state;return g<0?(i=0,g=-g):(i=(g>>4)+5,g<48&&(g&=15)),g&&(g<8||g>15)?so:(I.window!==null&&I.wbits!==g&&(I.window=null),I.wrap=i,I.wbits=g,j2e(e))},q2e=(e,g)=>{if(!e)return so;const i=new eIg;e.state=i,i.strm=e,i.window=null,i.mode=CY;const I=$2e(e,g);return I!==Dh&&(e.state=null),I},tIg=e=>q2e(e,qig);let rce=!0,Kx,Fx;const gIg=e=>{if(rce){Kx=new Int32Array(512),Fx=new Int32Array(32);let g=0;for(;g<144;)e.lens[g++]=8;for(;g<256;)e.lens[g++]=9;for(;g<280;)e.lens[g++]=7;for(;g<288;)e.lens[g++]=8;for(Kv(P2e,e.lens,0,288,Kx,0,e.work,{bits:9}),g=0;g<32;)e.lens[g++]=5;Kv(J2e,e.lens,0,32,Fx,0,e.work,{bits:5}),rce=!1}e.lencode=Kx,e.lenbits=9,e.distcode=Fx,e.distbits=5},eHe=(e,g,i,I)=>{let n;const r=e.state;return r.window===null&&(r.wsize=1<=r.wsize?(r.window.set(g.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>I&&(n=I),r.window.set(g.subarray(i-I,i-I+n),r.wnext),I-=n,I?(r.window.set(g.subarray(i-I,i),0),r.wnext=I,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave{let i,I,n,r,C,o,a,s,A,l,c,u,d,h,m=0,f,b,p,y,Z,B,G,v;const w=new Uint8Array(4);let V,S;const X=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Gm(e)||!e.output||!e.input&&e.avail_in!==0)return so;i=e.state,i.mode===UA&&(i.mode=Nx),C=e.next_out,n=e.output,a=e.avail_out,r=e.next_in,I=e.input,o=e.avail_in,s=i.hold,A=i.bits,l=o,c=a,v=Dh;e:for(;;)switch(i.mode){case CY:if(i.wrap===0){i.mode=Nx;break}for(;A<16;){if(o===0)break e;o--,s+=I[r++]<>>8&255,i.check=Ka(i.check,w,2,0),s=0,A=0,i.mode=Fle;break}if(i.head&&(i.head.done=!1),!(i.wrap&1)||(((s&255)<<8)+(s>>8))%31){e.msg="incorrect header check",i.mode=Si;break}if((s&15)!==Kle){e.msg="unknown compression method",i.mode=Si;break}if(s>>>=4,A-=4,G=(s&15)+8,i.wbits===0&&(i.wbits=G),G>15||G>i.wbits){e.msg="invalid window size",i.mode=Si;break}i.dmax=1<>8&1),i.flags&512&&i.wrap&4&&(w[0]=s&255,w[1]=s>>>8&255,i.check=Ka(i.check,w,2,0)),s=0,A=0,i.mode=Dle;case Dle:for(;A<32;){if(o===0)break e;o--,s+=I[r++]<>>8&255,w[2]=s>>>16&255,w[3]=s>>>24&255,i.check=Ka(i.check,w,4,0)),s=0,A=0,i.mode=xle;case xle:for(;A<16;){if(o===0)break e;o--,s+=I[r++]<>8),i.flags&512&&i.wrap&4&&(w[0]=s&255,w[1]=s>>>8&255,i.check=Ka(i.check,w,2,0)),s=0,A=0,i.mode=Ele;case Ele:if(i.flags&1024){for(;A<16;){if(o===0)break e;o--,s+=I[r++]<>>8&255,i.check=Ka(i.check,w,2,0)),s=0,A=0}else i.head&&(i.head.extra=null);i.mode=Mle;case Mle:if(i.flags&1024&&(u=i.length,u>o&&(u=o),u&&(i.head&&(G=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(I.subarray(r,r+u),G)),i.flags&512&&i.wrap&4&&(i.check=Ka(i.check,I,u,r)),o-=u,r+=u,i.length-=u),i.length))break e;i.length=0,i.mode=zle;case zle:if(i.flags&2048){if(o===0)break e;u=0;do G=I[r+u++],i.head&&G&&i.length<65536&&(i.head.name+=String.fromCharCode(G));while(G&&u>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=UA;break;case Ole:for(;A<32;){if(o===0)break e;o--,s+=I[r++]<>>=A&7,A-=A&7,i.mode=Yx;break}for(;A<3;){if(o===0)break e;o--,s+=I[r++]<>>=1,A-=1,s&3){case 0:i.mode=_le;break;case 1:if(gIg(i),i.mode=o1,g===C1){s>>>=2,A-=2;break e}break;case 2:i.mode=Ule;break;case 3:e.msg="invalid block type",i.mode=Si}s>>>=2,A-=2;break;case _le:for(s>>>=A&7,A-=A&7;A<32;){if(o===0)break e;o--,s+=I[r++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=Si;break}if(i.length=s&65535,s=0,A=0,i.mode=kx,g===C1)break e;case kx:i.mode=Lle;case Lle:if(u=i.length,u){if(u>o&&(u=o),u>a&&(u=a),u===0)break e;n.set(I.subarray(r,r+u),C),o-=u,r+=u,a-=u,C+=u,i.length-=u;break}i.mode=UA;break;case Ule:for(;A<14;){if(o===0)break e;o--,s+=I[r++]<>>=5,A-=5,i.ndist=(s&31)+1,s>>>=5,A-=5,i.ncode=(s&15)+4,s>>>=4,A-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=Si;break}i.have=0,i.mode=Qle;case Qle:for(;i.have>>=3,A-=3}for(;i.have<19;)i.lens[X[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,V={bits:i.lenbits},v=Kv(Jig,i.lens,0,19,i.lencode,0,i.work,V),i.lenbits=V.bits,v){e.msg="invalid code lengths set",i.mode=Si;break}i.have=0,i.mode=jle;case jle:for(;i.have>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=I[r++]<>>=f,A-=f,i.lens[i.have++]=p;else{if(p===16){for(S=f+2;A>>=f,A-=f,i.have===0){e.msg="invalid bit length repeat",i.mode=Si;break}G=i.lens[i.have-1],u=3+(s&3),s>>>=2,A-=2}else if(p===17){for(S=f+3;A>>=f,A-=f,G=0,u=3+(s&7),s>>>=3,A-=3}else{for(S=f+7;A>>=f,A-=f,G=0,u=11+(s&127),s>>>=7,A-=7}if(i.have+u>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=Si;break}for(;u--;)i.lens[i.have++]=G}}if(i.mode===Si)break;if(i.lens[256]===0){e.msg="invalid code -- missing end-of-block",i.mode=Si;break}if(i.lenbits=9,V={bits:i.lenbits},v=Kv(P2e,i.lens,0,i.nlen,i.lencode,0,i.work,V),i.lenbits=V.bits,v){e.msg="invalid literal/lengths set",i.mode=Si;break}if(i.distbits=6,i.distcode=i.distdyn,V={bits:i.distbits},v=Kv(J2e,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,V),i.distbits=V.bits,v){e.msg="invalid distances set",i.mode=Si;break}if(i.mode=o1,g===C1)break e;case o1:i.mode=a1;case a1:if(o>=6&&a>=258){e.next_out=C,e.avail_out=a,e.next_in=r,e.avail_in=o,i.hold=s,i.bits=A,Dig(e,c),C=e.next_out,n=e.output,a=e.avail_out,r=e.next_in,I=e.input,o=e.avail_in,s=i.hold,A=i.bits,i.mode===UA&&(i.back=-1);break}for(i.back=0;m=i.lencode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=I[r++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=I[r++]<>>=y,A-=y,i.back+=y}if(s>>>=f,A-=f,i.back+=f,i.length=p,b===0){i.mode=gce;break}if(b&32){i.back=-1,i.mode=UA;break}if(b&64){e.msg="invalid literal/length code",i.mode=Si;break}i.extra=b&15,i.mode=$le;case $le:if(i.extra){for(S=i.extra;A>>=i.extra,A-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=qle;case qle:for(;m=i.distcode[s&(1<>>24,b=m>>>16&255,p=m&65535,!(f<=A);){if(o===0)break e;o--,s+=I[r++]<>y)],f=m>>>24,b=m>>>16&255,p=m&65535,!(y+f<=A);){if(o===0)break e;o--,s+=I[r++]<>>=y,A-=y,i.back+=y}if(s>>>=f,A-=f,i.back+=f,b&64){e.msg="invalid distance code",i.mode=Si;break}i.offset=p,i.extra=b&15,i.mode=ece;case ece:if(i.extra){for(S=i.extra;A>>=i.extra,A-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=Si;break}i.mode=tce;case tce:if(a===0)break e;if(u=c-a,i.offset>u){if(u=i.offset-u,u>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=Si;break}u>i.wnext?(u-=i.wnext,d=i.wsize-u):d=i.wnext-u,u>i.length&&(u=i.length),h=i.window}else h=n,d=C-i.offset,u=i.length;u>a&&(u=a),a-=u,i.length-=u;do n[C++]=h[d++];while(--u);i.length===0&&(i.mode=a1);break;case gce:if(a===0)break e;n[C++]=i.length,a--,i.mode=a1;break;case Yx:if(i.wrap){for(;A<32;){if(o===0)break e;o--,s|=I[r++]<{if(Gm(e))return so;let g=e.state;return g.window&&(g.window=null),e.state=null,Dh},nIg=(e,g)=>{if(Gm(e))return so;const i=e.state;return i.wrap&2?(i.head=g,g.done=!1,Dh):so},rIg=(e,g)=>{const i=g.length;let I,n,r;return Gm(e)||(I=e.state,I.wrap!==0&&I.mode!==kH)?so:I.mode===kH&&(n=1,n=d_(n,g,i,0),n!==I.check)?O2e:(r=eHe(e,g,i,i),r?(I.mode=L2e,_2e):(I.havedict=1,Dh))};var CIg=j2e,oIg=$2e,aIg=Q2e,AIg=tIg,sIg=q2e,lIg=iIg,cIg=IIg,uIg=nIg,dIg=rIg,hIg="pako inflate (from Nodeca project)",as={inflateReset:CIg,inflateReset2:oIg,inflateResetKeep:aIg,inflateInit:AIg,inflateInit2:sIg,inflate:lIg,inflateEnd:cIg,inflateGetHeader:uIg,inflateSetDictionary:dIg,inflateInfo:hIg};function mIg(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var fIg=mIg;const tHe=Object.prototype.toString,{Z_NO_FLUSH:pIg,Z_FINISH:bIg,Z_OK:dS,Z_STREAM_END:Dx,Z_NEED_DICT:xx,Z_STREAM_ERROR:yIg,Z_DATA_ERROR:Cce,Z_MEM_ERROR:ZIg}=a8;function xw(e){this.options=M2e.assign({chunkSize:1024*64,windowBits:15,to:""},e||{});const g=this.options;g.raw&&g.windowBits>=0&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),g.windowBits>=0&&g.windowBits<16&&!(e&&e.windowBits)&&(g.windowBits+=32),g.windowBits>15&&g.windowBits<48&&(g.windowBits&15||(g.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Kig,this.strm.avail_out=0;let i=as.inflateInit2(this.strm,g.windowBits);if(i!==dS)throw new Error(h_[i]);if(this.header=new fIg,as.inflateGetHeader(this.strm,this.header),g.dictionary&&(typeof g.dictionary=="string"?g.dictionary=m_.string2buf(g.dictionary):tHe.call(g.dictionary)==="[object ArrayBuffer]"&&(g.dictionary=new Uint8Array(g.dictionary)),g.raw&&(i=as.inflateSetDictionary(this.strm,g.dictionary),i!==dS)))throw new Error(h_[i])}xw.prototype.push=function(e,g){const i=this.strm,I=this.options.chunkSize,n=this.options.dictionary;let r,C,o;if(this.ended)return!1;for(g===~~g?C=g:C=g===!0?bIg:pIg,tHe.call(e)==="[object ArrayBuffer]"?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(i.avail_out===0&&(i.output=new Uint8Array(I),i.next_out=0,i.avail_out=I),r=as.inflate(i,C),r===xx&&n&&(r=as.inflateSetDictionary(i,n),r===dS?r=as.inflate(i,C):r===Cce&&(r=xx));i.avail_in>0&&r===Dx&&i.state.wrap>0&&e[i.next_in]!==0;)as.inflateReset(i),r=as.inflate(i,C);switch(r){case yIg:case Cce:case xx:case ZIg:return this.onEnd(r),this.ended=!0,!1}if(o=i.avail_out,i.next_out&&(i.avail_out===0||r===Dx))if(this.options.to==="string"){let a=m_.utf8border(i.output,i.next_out),s=i.next_out-a,A=m_.buf2string(i.output,a);i.next_out=s,i.avail_out=I-s,s&&i.output.set(i.output.subarray(a,a+s),0),this.onData(A)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(!(r===dS&&o===0)){if(r===Dx)return r=as.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(i.avail_in===0)break}}return!0};xw.prototype.onData=function(e){this.chunks.push(e)};xw.prototype.onEnd=function(e){e===dS&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=M2e.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function A8(e,g){const i=new xw(g);if(i.push(e),i.err)throw i.msg||h_[i.err];return i.result}function GIg(e,g){return g=g||{},g.raw=!0,A8(e,g)}var vIg=xw,BIg=A8,SIg=GIg,wIg=A8,RIg=a8,VIg={Inflate:vIg,inflate:BIg,inflateRaw:SIg,ungzip:wIg,constants:RIg};const{Inflate:Kpg,inflate:Fpg,inflateRaw:WIg,ungzip:Dpg}=VIg;var XIg=WIg;function HIg(e){return XIg(e.subarray(2))}class TIg extends Error{constructor(g){super(g),this.code="ERR_ABORTED"}}function NIg(e){e.sort((n,r)=>Number(n.offset)-Number(r.offset));const g=[];let i,I;for(let n=0;n=i}function FIg(e){const g=e?"big":"little",i=new kg().endianess(g).uint32("chromId").uint32("start").uint32("end").uint32("validCnt").floatle("minScore").floatle("maxScore").floatle("sumData").floatle("sumSqData").saveOffset("offset"),I=new kg().endianess(g).uint8("isLeaf").skip(1).uint16("cnt").choice({tag:"isLeaf",choices:{1:new kg().endianess(g).array("blocksToFetch",{length:"cnt",type:new kg().endianess(g).uint32("startChrom").uint32("startBase").uint32("endChrom").uint32("endBase").uint64("blockOffset").uint64("blockSize").saveOffset("offset")}),0:new kg().array("recurOffsets",{length:"cnt",type:new kg().endianess(g).uint32("startChrom").uint32("startBase").uint32("endChrom").uint32("endBase").uint64("blockOffset").saveOffset("offset")})}}),n=new kg().endianess(g).uint32("chromId").int32("start").int32("end").string("rest",{zeroTerminated:!0}).saveOffset("offset");return{bigWigParser:new kg().endianess(g).skip(4).int32("blockStart").skip(4).uint32("itemStep").uint32("itemSpan").uint8("blockType").skip(1).uint16("itemCount").choice({tag:"blockType",choices:{[KIg]:new kg().array("items",{length:"itemCount",type:new kg().floatle("score")}),[YIg]:new kg().array("items",{length:"itemCount",type:new kg().endianess(g).int32("start").floatle("score")}),[kIg]:new kg().array("items",{length:"itemCount",type:new kg().endianess(g).int32("start").int32("end").floatle("score")})}}),bigBedParser:n,summaryParser:i,leafParser:I}}class gHe{constructor(g,i,I,n,r,C){if(this.bbi=g,this.refsByName=i,this.cirTreeOffset=I,this.isBigEndian=n,this.isCompressed=r,this.blockType=C,this.featureCache=new cig({cache:new $et({maxSize:1e3}),fill:async(a,s)=>{const A=Number(a.length),l=Number(a.offset),{buffer:c}=await this.bbi.read(gh.Buffer.alloc(A),0,A,l,{signal:s});return c}}),!(I>=0))throw new Error("invalid cirTreeOffset!");const o=FIg(n);this.leafParser=o.leafParser,this.bigBedParser=o.bigBedParser}async readWigData(g,i,I,n,r){try{const{refsByName:C,bbi:o,cirTreeOffset:a,isBigEndian:s}=this,A=C[g];A===void 0&&n.complete();const l={chrId:A,start:i,end:I};this.cirTreePromise||(this.cirTreePromise=o.read(gh.Buffer.alloc(48),0,48,Number(a),r));const{buffer:c}=await this.cirTreePromise,u=s?c.readUInt32BE(4):c.readUInt32LE(4);let d=[],h=0;const m=(y,Z,B)=>{try{const G=y.subarray(Z),v=this.leafParser.parse(G);if(v.blocksToFetch&&(d=d.concat(v.blocksToFetch.filter(f).map(w=>({offset:w.blockOffset,length:w.blockSize})))),v.recurOffsets){const w=v.recurOffsets.filter(f).map(V=>Number(V.blockOffset));w.length>0&&p(w,B+1)}}catch(G){n.error(G)}},f=y=>{const{startChrom:Z,startBase:B,endChrom:G,endBase:v}=y;return(ZA||G===A&&v>=i)},b=async(y,Z,B)=>{try{const G=Z.max()-Z.min(),v=Z.min(),w=await this.featureCache.get(`${G}_${v}`,{length:G,offset:v},r.signal);for(let V=0;V{try{h+=y.length;const B=4+Number(u)*32;let G=new rc(y[0],y[0]+B);for(let v=1;vb(y,v,Z))}catch(B){n.error(B)}};return p([Number(a)+48],1)}catch(C){n.error(C)}}parseSummaryBlock(g,i,I){const n=[];let r=i;const C=new DataView(g.buffer,g.byteOffset,g.length);for(;rEx(o.start,o.end,n.start,n.end)):r}parseBigWigBlock(g,i,I){const n=g.subarray(i),r=new DataView(n.buffer,n.byteOffset,n.length);let C=0;C+=4;const o=r.getInt32(C,!0);C+=8;const a=r.getUint32(C,!0);C+=4;const s=r.getUint32(C,!0);C+=4;const A=r.getUint8(C);C+=2;const l=r.getUint16(C,!0);C+=2;const c=new Array(l);switch(A){case 1:for(let u=0;uEx(u.start,u.end,I.start,I.end)):c}async readFeatures(g,i,I={}){try{const{blockType:n,isCompressed:r}=this,{signal:C,request:o}=I,a=NIg(i);A1(C),await Promise.all(a.map(async s=>{A1(C);const{length:A,offset:l}=s,c=await this.featureCache.get(`${A}_${l}`,s,C);s.blocks.forEach(u=>{A1(C);let d=Number(u.offset)-Number(s.offset),h=c;switch(r&&(h=HIg(c.subarray(d)),d=0),A1(C),n){case"summary":g.next(this.parseSummaryBlock(h,d,o));break;case"bigwig":g.next(this.parseBigWigBlock(h,d,o));break;case"bigbed":g.next(this.parseBigBedBlock(h,d,Number(u.offset)*256,o));break;default:console.warn(`Don't know what to do with ${n}`)}})})),g.complete()}catch(n){g.error(n)}}}var f_=function(e,g){return f_=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,I){i.__proto__=I}||function(i,I){for(var n in I)Object.prototype.hasOwnProperty.call(I,n)&&(i[n]=I[n])},f_(e,g)};function s8(e,g){if(typeof g!="function"&&g!==null)throw new TypeError("Class extends value "+String(g)+" is not a constructor or null");f_(e,g);function i(){this.constructor=e}e.prototype=g===null?Object.create(g):(i.prototype=g.prototype,new i)}function oce(e){var g=typeof Symbol=="function"&&Symbol.iterator,i=g&&e[g],I=0;if(i)return i.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&I>=e.length&&(e=void 0),{value:e&&e[I++],done:!e}}};throw new TypeError(g?"Object is not iterable.":"Symbol.iterator is not defined.")}function p_(e,g){var i=typeof Symbol=="function"&&e[Symbol.iterator];if(!i)return e;var I=i.call(e),n,r=[],C;try{for(;(g===void 0||g-- >0)&&!(n=I.next()).done;)r.push(n.value)}catch(o){C={error:o}}finally{try{n&&!n.done&&(i=I.return)&&i.call(I)}finally{if(C)throw C.error}}return r}function b_(e,g,i){if(i||arguments.length===2)for(var I=0,n=g.length,r;I=2,!1,!0))}var nng=function(e,g){return e.push(g),e};function rng(){return rHe(function(e,g){Ing(nng,[])(e).subscribe(g)})}const cce=-2003829722,Px=-2021002517;function Cng(e){return new TextDecoder().decode(e)}function uce(e){const g=e?"big":"little",i=new kg().endianess(g).int32("magic").uint16("version").uint16("numZoomLevels").uint64("chromTreeOffset").uint64("unzoomedDataOffset").uint64("unzoomedIndexOffset").uint16("fieldCount").uint16("definedFieldCount").uint64("asOffset").uint64("totalSummaryOffset").uint32("uncompressBufSize").uint64("extHeaderOffset").array("zoomLevels",{length:"numZoomLevels",type:new kg().endianess(g).uint32("reductionLevel").uint32("reserved").uint64("dataOffset").uint64("indexOffset")}),I=new kg().endianess(g).uint64("basesCovered").doublele("scoreMin").doublele("scoreMax").doublele("scoreSum").doublele("scoreSumSquares"),n=new kg().endianess(g).uint32("magic").uint32("blockSize").uint32("keySize").uint32("valSize").uint64("itemCount"),r=new kg().endianess(g).uint8("isLeafNode").skip(1).uint16("cnt").saveOffset("offset");return{chromTreeParser:n,totalSummaryParser:I,headerParser:i,isLeafNode:r}}class ong{getHeader(g={}){const i="aborted"in g?{signal:g}:g;return this.headerP||(this.headerP=this._getHeader(i).catch(I=>{throw this.headerP=void 0,I})),this.headerP}constructor(g={}){const{filehandle:i,renameRefSeqs:I=C=>C,path:n,url:r}=g;if(this.renameRefSeqs=I,i)this.bbi=i;else if(r)this.bbi=new Kbe(r);else if(n)this.bbi=new Eme(n);else throw new Error("no file given")}async _getHeader(g){const i=await this._getMainHeader(g),I=await this._readChromTree(i,g);return{...i,...I}}async _getMainHeader(g,i=2e3){const{buffer:I}=await this.bbi.read(gh.Buffer.alloc(i),0,i,0,g),n=this._isBigEndian(I),r=uce(n),C=r.headerParser.parse(I),{magic:o,asOffset:a,totalSummaryOffset:s}=C;if(C.fileType=o===Px?"bigbed":"bigwig",a>i||s>i)return this._getMainHeader(g,i*2);if(a){const A=Number(C.asOffset);C.autoSql=Cng(I.subarray(A,I.indexOf(0,A)))}if(C.totalSummaryOffset>i)return this._getMainHeader(g,i*2);if(C.totalSummaryOffset){const A=I.subarray(Number(C.totalSummaryOffset)),l=r.totalSummaryParser.parse(A);C.totalSummary={...l,basesCovered:Number(l.basesCovered)}}return{...C,isBigEndian:n}}_isBigEndian(g){let i=g.readInt32LE(0);if(i===cce||i===Px)return!1;if(i=g.readInt32BE(0),i===cce||i===Px)return!0;throw new Error("not a BigWig/BigBed file")}async _readChromTree(g,i){const I=g.isBigEndian,n=I?"big":"little",r=[],C={};let o=Number(g.unzoomedDataOffset);const a=Number(g.chromTreeOffset);for(;o%4!==0;)o+=1;const s=o-a,{buffer:A}=await this.bbi.read(gh.Buffer.alloc(s),0,s,Number(a),i),l=uce(I),{keySize:c}=l.chromTreeParser.parse(A),u=new kg().endianess(n).string("key",{stripNull:!0,length:c}).uint32("refId").uint32("refSize").saveOffset("offset"),d=new kg().endianess(n).skip(c).uint64("childOffset").saveOffset("offset"),h=32,m=async f=>{let b=f;if(b>=A.length)throw new Error("reading beyond end of buffer");const p=l.isLeafNode.parse(A.subarray(b)),{isLeafNode:y,cnt:Z}=p;if(b+=p.offset,y)for(let B=0;B0,C)}async getFeatureStream(g,i,I,n={scale:1}){await this.getHeader(n);const r=this.renameRefSeqs(g);let C;if(n.basesPerSpan?C=await this.getView(1/n.basesPerSpan,n):n.scale?C=await this.getView(n.scale,n):C=await this.getView(1,n),!C)throw new Error("unable to get block view for data");return new UIg(o=>{C.readWigData(r,i,I,o,n)})}async getFeatures(g,i,I,n={scale:1}){const r=await this.getFeatureStream(g,i,I,n);return(await gng(r.pipe(rng()))).flat()}}class ang extends ong{async getView(g,i){const{zoomLevels:I,refsByName:n,fileSize:r,isBigEndian:C,uncompressBufSize:o}=await this.getHeader(i),a=1/g;let s=I.length;r||(s-=1);for(let A=s;A>=0;A-=1){const l=I[A];if(l&&l.reductionLevel<=2*a){const c=Number(l.indexOffset);return new gHe(this.bbi,n,c,C,o>0,"summary")}}return this.getUnzoomedView(i)}}function CHe(e,g){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');const i=class{constructor(){Ct(this,"dataConfig"),Ct(this,"bwFileHeader"),Ct(this,"bwFile"),Ct(this,"TILE_SIZE"),Ct(this,"errorTxt"),Ct(this,"dataPromises"),Ct(this,"chromSizes"),Ct(this,"assembly"),Ct(this,"tilesetInfoLoading"),this.dataConfig=g,this.assembly=this.dataConfig.assembly,this.bwFileHeader=null,this.bwFile=null,this.TILE_SIZE=1024,this.errorTxt="",this.dataPromises=[];const n=yi(this.assembly).size,r=[],C={};let o=0;Object.keys(yi(this.assembly).size).forEach((a,s)=>{const A={id:s,chr:a,pos:o};r.push(A),C[a]=A,o+=yi(this.assembly).size[a]}),this.chromSizes={chrToAbs:(a,s)=>this.chromSizes.chrPositions[a].pos+s,cumPositions:r,chrPositions:C,totalLength:o,chromLengths:n},this.dataPromises.push(this.loadBBI(g))}async loadBBI(n){return n.url?(this.bwFile=new ang({filehandle:new Z0e(n.url,{overrides:n.urlFetchOptions})}),this.bwFile.getHeader().then(r=>{this.bwFileHeader=r})):(console.error('Please enter a "url" field to the data config'),null)}tilesetInfo(n){return this.tilesetInfoLoading=!0,Promise.all(this.dataPromises).then(()=>{this.tilesetInfoLoading=!1;const r=this.chromSizes.totalLength,C={tile_size:this.TILE_SIZE,max_zoom:Math.ceil(Math.log(r/this.TILE_SIZE)/Math.log(2)),max_width:2**Math.ceil(Math.log(r)/Math.log(2)),min_pos:[0],max_pos:[r]};return n&&n(C),C}).catch(r=>(this.tilesetInfoLoading=!1,console.error(r),n&&n({error:`Error parsing bigwig: ${r}`}),null))}fetchTilesDebounced(n,r){const C={},o=[],a=[];for(const s of r){const A=s.split("."),l=parseInt(A[0],10),c=parseInt(A[1],10);if(Number.isNaN(c)||Number.isNaN(l)){console.warn("Invalid tile zoom or position:",l,c);continue}o.push(s),a.push(this.tile(l,c))}return Promise.all(a).then(s=>{for(let A=0;A{const p=b.chr,y=b.pos,Z=b.pos+m[p];let B,G;if(y<=l&&lZ)B=l-y,G=Z-y,a.push(this.bwFile.getFeatures(p,B,G,{scale:1/u}).then(v=>(v.forEach(w=>{w.startAbs=e.utils.chrToAbs(p,w.start,this.chromSizes),w.endAbs=e.utils.chrToAbs(p,w.end,this.chromSizes)}),v))),l=Z;else{if(B=Math.floor(l-y),G=Math.ceil(c-y),!this.bwFile)return;a.push(this.bwFile.getFeatures(p,B,G,{scale:1/u}).then(v=>(v.forEach(w=>{w.startAbs=e.utils.chrToAbs(p,w.start,this.chromSizes),w.endAbs=e.utils.chrToAbs(p,w.end,this.chromSizes)}),v)));return}}),Promise.all(a).then(b=>{const p=b.flat(),y=[];for(let B=0;B{if(Bc)return;const v=p.filter(w=>B>=w.startAbs&&Bw.score);y[G]=v.length>0?v[0]:null});const Z=new e.utils.DenseDataExtrema1D(y);return s.min_value=Math.min(...y),s.max_value=Math.max(...y),s.dense=y,s.denseDataExtrema=Z,s.minNonZero=Z.minNonZeroInTile,s.maxNonZero=Z.maxNonZeroInTile,s})}determineScale(n,r){const C=[1],o=r-n;if(!this.bwFileHeader)throw Error("no bigwig header");this.bwFileHeader.zoomLevels.forEach(s=>{C.push(s.reductionLevel)});let a;return C.forEach(s=>{if(a)return;o/s<=this.TILE_SIZE*20&&(a=s)}),a||C.slice(-1)[0]}};return new i}CHe.config={type:"bigwig"};function oHe(e,g){const{field:i,not:I}=e;let n=Array.from(g);if(Oje(e)){const{oneOf:r}=e;n=n.filter(C=>I?r.indexOf(C[i])===-1:r.indexOf(C[i])!==-1)}else if(_je(e)){const{inRange:r}=e;n=n.filter(C=>{const o=+C[i];return I?!(r[0]<=o&&o<=r[1]):r[0]<=o&&o<=r[1]})}else if(Lje(e)){const{include:r}=e;n=n.filter(C=>I?`${C[i]}`.includes(r):!`${C[i]}`.includes(r))}return n}function Ang(e,g){const{fields:i,separator:I,newField:n}=e;let r=Array.from(g);return r=r.map(C=>{const o=i.map(a=>C[a]);return C[n]=o.join(I),C}),r}function sng(e,g){const{field:i,replace:I,newField:n}=e;let r=Array.from(g);return r=r.map(C=>(C[n]=C[i],I.forEach(o=>{const{from:a,to:s}=o;C[n]=C[n].toString().replaceAll(a,s)}),C)),r}function lng(e,g){const{field:i,base:I,newField:n}=e;let r=Array.from(g);return r=r.map(C=>(+C[i]&&(I==="e"?C[n??i]=Math.log(+C[i]):C[n??i]=Math.log(+C[i])/Math.log(I??10)),C)),r}function cng(e,g){const{startField:i,endField:I,newField:n}=e,r=Array.from(g);return r.forEach(C=>{const o=C[i],a=C[I];!o||!a||(C[n]=Math.abs(+a-+o))}),r}function ung(e,g){const{firstBp:i,secondBp:I,newField:n}=e,r=Array.from(g),[C,o,a,s,A]=["DUP","TRA","DEL","t2tINV","h2hINV"];return r.forEach(l=>{const c=l[i.chrField],u=l[I.chrField];if(c!==u){l[n]=o;return}let d=l[i.posField],h=l[I.posField],m=l[i.strandField],f=l[I.strandField];if(d>h){const b=d,p=m;d=h,m=f,h=b,f=p}switch(`${m}${f}`){case"+-":l[n]=a;break;case"--":l[n]=s;break;case"++":l[n]=A;break;case"-+":l[n]=C;break;default:l[n]="unknown"}}),r}function dng(e,g,i){const{startField:I,endField:n,newField:r,groupField:C}=e,o={},a=1;return g.forEach(A=>{const l=i(A[I]),c=i(A[n]),u=C?A[C]:"__NO_GROUP__",d=Math.floor(l);for(let h=d;h{const[l,c]=A;return Object.entries(c).map(u=>{const[d,h]=u;return{[I]:i.invert(+d),[n]:i.invert(+d+a),[r??"coverage"]:h,[C??"group"]:l}})})}function hng(e,g,i){const{boundingBox:I,method:n,newField:r}=e,{startField:C,endField:o,groupField:a}=I;let s=0;I.padding&&i&&!I.isPaddingBP?s=Math.abs(i.invert(I.padding)-i.invert(0)):I.padding&&I.isPaddingBP&&(s=I.padding);const A=Array.from(g);if(A&&A.length>0&&(!Object.keys(A[0]).find(l=>l===C)||!Object.keys(A[0]).find(l=>l===o)))return A;if(n==="pile"){const{maxRows:l}=e,c={};A.sort((d,h)=>d[C]-h[C]).forEach(d=>{const h=+d[C]-s,m=+d[o]+s,f=a?d[a]:"__NO_GROUP__";c[f]||(c[f]=[]);let b=c[f].findIndex(p=>mc[C]-u[C]).forEach(c=>{let u=c[C]-s,d=c[o]+s,h=l.filter(m=>m.start===u&&d===m.end||m.start0){let m=0;do h=l.filter(f=>f.start===u&&d===f.end||f.start0&&(m%2===0?(u+=s*m,d+=s*m):(u-=s*m,d-=s*m)),m++;while(h.length>0&&m<1e3)}c[`${r}Start`]=`${u+s}`,c[`${r}Etart`]=`${d-s}`,l.push({start:u,end:d})})}return A}function mng(e,g,i="hg38"){const{separator:I,fields:n,flag:r}=e;let C=Array.from(g);return C=C.map(o=>{const a=[];return n.forEach(s=>{const{field:A,type:l,newField:c,chrField:u}=s;o[A].toString().split(I).forEach((h,m)=>{let f=h;l==="genomic"&&(f=yi(i).interval[o[u]][0]+ +h),a[m]?a[m][c]=f:a[m]=Object.assign(JSON.parse(JSON.stringify(o)),{[c]:f,[r.field]:r.value})})}),[o,...a]}).reduce((o,a)=>o.concat(a),[]),C}function fng(e,g){const{field:i,genomicField:I,baseGenomicField:n,genomicLengthField:r}=e;let C=Array.from(g);return C=C.map(o=>{let a=JSON.parse(o[i]);return a=a.map(s=>{var A,l;return s[I]&&o[n]&&(s[`${I}_start`]=+s[I]+ +o[n],s[`${I}_end`]=+s[I]+ +o[n]+ +s[r]),Object.assign(JSON.parse(JSON.stringify(o)),{...s,[`${I}_start`]:s[`${I}_start`],[`${I}_end`]:s[`${I}_end`],type:(l=(A=s.type)!=null?A:s.variant)!=null?l:null,isParsedRow:"yes"})}),[o,...a]}).reduce((o,a)=>o.concat(a),[]),C}function png(e,g){if(jje(e).length===0)return g;const i=b5(e,"nominal");if(i.length!==1)return console.warn("Currently, we only support aggregating datasets with single nominal field."),g;const I=e[i[0]];if(!ut(I))return g;const n=I.field;if(!n)return g;const r=[...b5(e,"quantitative"),...b5(e,"genomic")],C=[],o=Array.from(new Set(g.map(s=>s[n])));let a=!1;return o.forEach(s=>{const A={};A[n]=s,r.forEach(l=>{const c=e[l];if(!ut(c)){a=!0;return}const{field:u}=c;if(!u||!("aggregate"in c)){a=!0;return}A[u]=c.aggregate==="max"?Math.max(...g.filter(d=>d[n]===s).map(d=>+d[u])):Math.min(...g.filter(d=>d[n]===s).map(d=>+d[u]))}),C.push(A)}),a?g:C}class bng{constructor(g){pg(this,n_),pg(this,e8),pg(this,XH),pg(this,C_),pg(this,o_),pg(this,a_),Ct(this,"dataConfig"),Ct(this,"tilesetInfoLoading"),pg(this,yG,void 0),pg(this,lS,void 0),pg(this,cS,void 0),pg(this,Md,void 0),pg(this,VH,void 0),pg(this,WH,void 0),this.dataConfig=g,this.tilesetInfoLoading=!1,Wr(this,Md,this.dataConfig.assembly),Wr(this,VH,this.dataConfig.filter),g.url||console.error("Please provide the `url` of the data");const{urlFetchOptions:i,url:I}=g;Wr(this,WH,new Z0e(I,{overrides:i})),Wr(this,lS,Ri(this,a_,R2e).call(this)),Wr(this,yG,Ri(this,n_,v2e).call(this))}tilesetInfo(g){if(Dt(this,yG))return this.tilesetInfoLoading=!0,Dt(this,yG).then(()=>Ri(this,C_,S2e).call(this,g)).catch(i=>{this.tilesetInfoLoading=!1,console.error("[Gosling Data Fetcher] Error parsing data:",i)})}fetchTilesDebounced(g,i){const I={},n=[],r=[];for(const C of i){const o=C.split("."),a=parseInt(o[0],10),s=parseInt(o[1],10),A=parseInt(o[2],10);if(Number.isNaN(s)||Number.isNaN(a)){console.warn("[Gosling Data Fetcher] Invalid tile zoom or position:",a,s,A);continue}n.push(C),r.push(Ri(this,o_,w2e).call(this,a,s,A))}Promise.all(r).then(C=>{C.forEach((o,a)=>{if(o){const s=n[a];I[s]=o,I[s].tilePositionId=s}}),g(I)})}}yG=new WeakMap;lS=new WeakMap;cS=new WeakMap;Md=new WeakMap;VH=new WeakMap;WH=new WeakMap;n_=new WeakSet;v2e=async function(){var e,g;const{chromosomeField:i,genomicFields:I,headerNames:n,longToWideId:r,genomicFieldsToConvert:C}=this.dataConfig,o=(e=this.dataConfig.separator)!=null?e:",";try{const s=(await Dt(this,WH).readFile()).toString(),A=n?`${n.join(o)} +${s}`:s,l=gtt(o).parse(A,c=>Ri(this,e8,B2e).call(this,c,C,i,I));if(r&&((g=l[0])!=null&&g[r])){const c=Object.keys(l[0]),u={};l.forEach(d=>{u[d[r]]?c.forEach(h=>{u[d[r]][`${h}_2`]=d[h]}):u[d[r]]=JSON.parse(JSON.stringify(d))}),Wr(this,cS,Object.keys(u).map(d=>u[d]))}else Wr(this,cS,l)}catch(a){console.error("[Gosling Data Fetcher] Error fetching data",a)}};e8=new WeakSet;B2e=function(e,g,i,I){try{return g?g.forEach(n=>{const r=n.genomicFields,C=e[n.chromosomeField];r.forEach(o=>{const a=e[o];e[o]=String(Ri(this,XH,r_).call(this,C,a))})}):i&&I&&I.forEach(n=>{const r=e[n],C=e[i];e[n]=String(Ri(this,XH,r_).call(this,C,r))}),e}catch{return}};XH=new WeakSet;r_=function(e,g){if(Dt(this,Md)!=="unknown"){const i=V3(e,Dt(this,Md),this.dataConfig.chromosomePrefix);return yi(Dt(this,Md)).interval[i][0]+ +g}else return g};C_=new WeakSet;S2e=function(e){this.tilesetInfoLoading=!1;const g=1024,i=Dt(this,lS).totalLength,I={tile_size:g,max_zoom:Math.ceil(Math.log(i/g)/Math.log(2)),max_width:i,min_pos:[0,0],max_pos:[i,i]};return e&&e(I),I};o_=new WeakSet;w2e=async function(e,g,i){var I,n;const r=await this.tilesetInfo();if(!r)return;const C=+r.max_width/2**+e,o=r.min_pos[0]+g*C,a=r.min_pos[0]+(g+1)*C;let s=y0e(Dt(this,cS),[o,a],this.dataConfig);(I=Dt(this,VH))==null||I.forEach(l=>{s=oHe(l,s)});const A=(n=this.dataConfig.sampleLength)!=null?n:1e3;return{tabularData:s.length>A?d7(s,A):s,server:null,tilePos:[g,i],zoomLevel:e}};a_=new WeakSet;R2e=function(){const e=yi(Dt(this,Md)).size,g=[],i={};let I=0;return Object.keys(e).forEach((n,r)=>{const C={id:r,chr:n,pos:I};g.push(C),i[n]=C,I+=e[n]}),{chrToAbs:(n,r)=>Dt(this,lS).chrPositions[n].pos+r,cumPositions:g,chrPositions:i,totalLength:I,chromLengths:e}};function aHe(e,g,i){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');return new bng(g)}aHe.config={type:"csv"};function AHe(e,...g){if(!new.target)throw new Error('Uncaught TypeError: Class constructor cannot be invoked without "new"');class i{constructor(n){Ct(this,"dataConfig"),Ct(this,"tilesetInfoLoading"),Ct(this,"chromSizes"),Ct(this,"values"),Ct(this,"assembly");const[r]=n;if(this.dataConfig=r,this.tilesetInfoLoading=!1,this.assembly=this.dataConfig.assembly,!r.values){console.error("Please provide `values` of the JSON data");return}const C=yi(this.assembly).size,o=[],a={};let s=0;Object.keys(yi(this.assembly).size).forEach((u,d)=>{const h={id:d,chr:u,pos:s};o.push(h),a[u]=h,s+=yi(this.assembly).size[u]}),this.chromSizes={chrToAbs:(u,d)=>this.chromSizes.chrPositions[u].pos+d,cumPositions:o,chrPositions:a,totalLength:s,chromLengths:C};const{chromosomeField:A,genomicFields:l,genomicFieldsToConvert:c}=this.dataConfig;this.values=r.values.map(u=>{try{return c?c.forEach(d=>{const h=d.genomicFields,m=V3(u[d.chromosomeField],this.assembly);h.forEach(f=>{const b=u[f];u[f]=String(this.chromSizes.chrToAbs(m,b))})}):A&&l&&l.forEach(d=>{const h=u[d],m=V3(u[A],this.assembly);u[d]=String(this.chromSizes.chrToAbs(m,h))}),u}catch{return}})}tilesetInfo(n){this.tilesetInfoLoading=!1;const r=1024,C=this.chromSizes.totalLength,o={tile_size:r,max_zoom:Math.ceil(Math.log(C/r)/Math.log(2)),max_width:C,min_pos:[0,0],max_pos:[C,C]};return n&&n(o),o}fetchTilesDebounced(n,r){const C={},o=[],a=[];for(const s of r){const A=s.split("."),l=parseInt(A[0],10),c=parseInt(A[1],10),u=parseInt(A[2],10);if(Number.isNaN(c)||Number.isNaN(l)){console.warn("[Gosling Data Fetcher] Invalid tile zoom or position:",l,c,u);continue}o.push(s),a.push(this.tile(l,c,u))}return Promise.all(a).then(s=>{s.forEach((A,l)=>{const c=o[l];C[c]=A,C[c].tilePositionId=c}),n(C)}),C}tile(n,r,C){var o;const a=this.tilesetInfo(),s=+a.max_width/2**+n,A=a.min_pos[0]+r*s,l=a.min_pos[0]+(r+1)*s;let c=y0e(this.values,[A,l],this.dataConfig);const u=(o=this.dataConfig.sampleLength)!=null?o:1e3;return u{const a=Object.entries(yi(r).size);return await o.init(this.uid,{url:I,indexUrl:n},a,C),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,i){this.track.drawLoadingCue(),i.forEach(I=>this.toFetch.add(I)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},Zng)}async sendFetch(g,i){(await this.worker).fetchTilesDebounced(this.uid,i).then(g)}async getTabularData(g){const i=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(i))}}Ct(lHe,"config",{type:"gff"});const cHe="KCgpID0+IHsKICB2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIF9fbWFya0FzTW9kdWxlID0gKHRhcmdldCkgPT4gX19kZWZQcm9wKHRhcmdldCwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7CiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltPYmplY3Qua2V5cyhmbilbMF1dKShmbiA9IDApKSwgcmVzOwogIH07CiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkgewogICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbT2JqZWN0LmtleXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIF9fbWFya0FzTW9kdWxlKHRhcmdldCk7CiAgICBmb3IgKHZhciBuYW1lIGluIGFsbCkKICAgICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKICB9OwogIHZhciBfX3JlRXhwb3J0ID0gKHRhcmdldCwgbW9kdWxlMiwgZGVzYykgPT4gewogICAgaWYgKG1vZHVsZTIgJiYgdHlwZW9mIG1vZHVsZTIgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBtb2R1bGUyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhtb2R1bGUyKSkKICAgICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRhcmdldCwga2V5KSAmJiBrZXkgIT09ICJkZWZhdWx0IikKICAgICAgICAgIF9fZGVmUHJvcCh0YXJnZXQsIGtleSwgeyBnZXQ6ICgpID0+IG1vZHVsZTJba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhtb2R1bGUyLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0OwogIH07CiAgdmFyIF9fdG9Nb2R1bGUgPSAobW9kdWxlMikgPT4gewogICAgcmV0dXJuIF9fcmVFeHBvcnQoX19tYXJrQXNNb2R1bGUoX19kZWZQcm9wKG1vZHVsZTIgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2R1bGUyKSkgOiB7fSwgImRlZmF1bHQiLCBtb2R1bGUyICYmIG1vZHVsZTIuX19lc01vZHVsZSAmJiAiZGVmYXVsdCIgaW4gbW9kdWxlMiA/IHsgZ2V0OiAoKSA9PiBtb2R1bGUyLmRlZmF1bHQsIGVudW1lcmFibGU6IHRydWUgfSA6IHsgdmFsdWU6IG1vZHVsZTIsIGVudW1lcmFibGU6IHRydWUgfSkpLCBtb2R1bGUyKTsKICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMKICB2YXIgcmVxdWlyZV9iYXNlNjRfanMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBleHBvcnRzMi5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDsKICAgICAgZXhwb3J0czIudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheTsKICAgICAgZXhwb3J0czIuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXk7CiAgICAgIHZhciBsb29rdXAgPSBbXTsKICAgICAgdmFyIHJldkxvb2t1cCA9IFtdOwogICAgICB2YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICJ1bmRlZmluZWQiID8gVWludDhBcnJheSA6IEFycmF5OwogICAgICB2YXIgY29kZSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKICAgICAgZm9yIChpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgewogICAgICAgIGxvb2t1cFtpXSA9IGNvZGVbaV07CiAgICAgICAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpOwogICAgICB9CiAgICAgIHZhciBpOwogICAgICB2YXIgbGVuOwogICAgICByZXZMb29rdXBbIi0iLmNoYXJDb2RlQXQoMCldID0gNjI7CiAgICAgIHJldkxvb2t1cFsiXyIuY2hhckNvZGVBdCgwKV0gPSA2MzsKICAgICAgZnVuY3Rpb24gZ2V0TGVucyhiNjQpIHsKICAgICAgICB2YXIgbGVuMiA9IGI2NC5sZW5ndGg7CiAgICAgICAgaWYgKGxlbjIgJSA0ID4gMCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7CiAgICAgICAgfQogICAgICAgIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCI9Iik7CiAgICAgICAgaWYgKHZhbGlkTGVuID09PSAtMSkKICAgICAgICAgIHZhbGlkTGVuID0gbGVuMjsKICAgICAgICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlbjIgPyAwIDogNCAtIHZhbGlkTGVuICUgNDsKICAgICAgICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJ5dGVMZW5ndGgoYjY0KSB7CiAgICAgICAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NCk7CiAgICAgICAgdmFyIHZhbGlkTGVuID0gbGVuc1swXTsKICAgICAgICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXTsKICAgICAgICByZXR1cm4gKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzTGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikgewogICAgICAgIHJldHVybiAodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQgLSBwbGFjZUhvbGRlcnNMZW47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdG9CeXRlQXJyYXkoYjY0KSB7CiAgICAgICAgdmFyIHRtcDsKICAgICAgICB2YXIgbGVucyA9IGdldExlbnMoYjY0KTsKICAgICAgICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdOwogICAgICAgIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdOwogICAgICAgIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpOwogICAgICAgIHZhciBjdXJCeXRlID0gMDsKICAgICAgICB2YXIgbGVuMiA9IHBsYWNlSG9sZGVyc0xlbiA+IDAgPyB2YWxpZExlbiAtIDQgOiB2YWxpZExlbjsKICAgICAgICB2YXIgaTI7CiAgICAgICAgZm9yIChpMiA9IDA7IGkyIDwgbGVuMjsgaTIgKz0gNCkgewogICAgICAgICAgdG1wID0gcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyKV0gPDwgMTggfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAxKV0gPDwgMTIgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAyKV0gPDwgNiB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDMpXTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wID4+IDE2ICYgMjU1OwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgPj4gOCAmIDI1NTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMjU1OwogICAgICAgIH0KICAgICAgICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7CiAgICAgICAgICB0bXAgPSByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIpXSA8PCAyIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyICsgMSldID4+IDQ7CiAgICAgICAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDI1NTsKICAgICAgICB9CiAgICAgICAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkgewogICAgICAgICAgdG1wID0gcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkyKV0gPDwgMTAgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaTIgKyAxKV0gPDwgNCB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpMiArIDIpXSA+PiAyOwogICAgICAgICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgPj4gOCAmIDI1NTsKICAgICAgICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NChudW0pIHsKICAgICAgICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDYzXSArIGxvb2t1cFtudW0gPj4gMTIgJiA2M10gKyBsb29rdXBbbnVtID4+IDYgJiA2M10gKyBsb29rdXBbbnVtICYgNjNdOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGVuY29kZUNodW5rKHVpbnQ4LCBzdGFydCwgZW5kKSB7CiAgICAgICAgdmFyIHRtcDsKICAgICAgICB2YXIgb3V0cHV0ID0gW107CiAgICAgICAgZm9yICh2YXIgaTIgPSBzdGFydDsgaTIgPCBlbmQ7IGkyICs9IDMpIHsKICAgICAgICAgIHRtcCA9ICh1aW50OFtpMl0gPDwgMTYgJiAxNjcxMTY4MCkgKyAodWludDhbaTIgKyAxXSA8PCA4ICYgNjUyODApICsgKHVpbnQ4W2kyICsgMl0gJiAyNTUpOwogICAgICAgICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oIiIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21CeXRlQXJyYXkodWludDgpIHsKICAgICAgICB2YXIgdG1wOwogICAgICAgIHZhciBsZW4yID0gdWludDgubGVuZ3RoOwogICAgICAgIHZhciBleHRyYUJ5dGVzID0gbGVuMiAlIDM7CiAgICAgICAgdmFyIHBhcnRzID0gW107CiAgICAgICAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODM7CiAgICAgICAgZm9yICh2YXIgaTIgPSAwLCBsZW4yMiA9IGxlbjIgLSBleHRyYUJ5dGVzOyBpMiA8IGxlbjIyOyBpMiArPSBtYXhDaHVua0xlbmd0aCkgewogICAgICAgICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaTIsIGkyICsgbWF4Q2h1bmtMZW5ndGggPiBsZW4yMiA/IGxlbjIyIDogaTIgKyBtYXhDaHVua0xlbmd0aCkpOwogICAgICAgIH0KICAgICAgICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkgewogICAgICAgICAgdG1wID0gdWludDhbbGVuMiAtIDFdOwogICAgICAgICAgcGFydHMucHVzaChsb29rdXBbdG1wID4+IDJdICsgbG9va3VwW3RtcCA8PCA0ICYgNjNdICsgIj09Iik7CiAgICAgICAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7CiAgICAgICAgICB0bXAgPSAodWludDhbbGVuMiAtIDJdIDw8IDgpICsgdWludDhbbGVuMiAtIDFdOwogICAgICAgICAgcGFydHMucHVzaChsb29rdXBbdG1wID4+IDEwXSArIGxvb2t1cFt0bXAgPj4gNCAmIDYzXSArIGxvb2t1cFt0bXAgPDwgMiAmIDYzXSArICI9Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCIiKTsKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vaWVlZTc1NEAxLjIuMS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcwogIHZhciByZXF1aXJlX2llZWU3NTQgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vaWVlZTc1NEAxLjIuMS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICBleHBvcnRzMi5yZWFkID0gZnVuY3Rpb24oYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykgewogICAgICAgIHZhciBlLCBtOwogICAgICAgIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxOwogICAgICAgIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxOwogICAgICAgIHZhciBlQmlhcyA9IGVNYXggPj4gMTsKICAgICAgICB2YXIgbkJpdHMgPSAtNzsKICAgICAgICB2YXIgaSA9IGlzTEUgPyBuQnl0ZXMgLSAxIDogMDsKICAgICAgICB2YXIgZCA9IGlzTEUgPyAtMSA6IDE7CiAgICAgICAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV07CiAgICAgICAgaSArPSBkOwogICAgICAgIGUgPSBzICYgKDEgPDwgLW5CaXRzKSAtIDE7CiAgICAgICAgcyA+Pj0gLW5CaXRzOwogICAgICAgIG5CaXRzICs9IGVMZW47CiAgICAgICAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkgewogICAgICAgIH0KICAgICAgICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxOwogICAgICAgIGUgPj49IC1uQml0czsKICAgICAgICBuQml0cyArPSBtTGVuOwogICAgICAgIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHsKICAgICAgICB9CiAgICAgICAgaWYgKGUgPT09IDApIHsKICAgICAgICAgIGUgPSAxIC0gZUJpYXM7CiAgICAgICAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7CiAgICAgICAgICByZXR1cm4gbSA/IE5hTiA6IChzID8gLTEgOiAxKSAqIEluZmluaXR5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgZSA9IGUgLSBlQmlhczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbik7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLndyaXRlID0gZnVuY3Rpb24oYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHsKICAgICAgICB2YXIgZSwgbSwgYzsKICAgICAgICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTsKICAgICAgICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTsKICAgICAgICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7CiAgICAgICAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDA7CiAgICAgICAgdmFyIGkgPSBpc0xFID8gMCA6IG5CeXRlcyAtIDE7CiAgICAgICAgdmFyIGQgPSBpc0xFID8gMSA6IC0xOwogICAgICAgIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDsKICAgICAgICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkgewogICAgICAgICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwOwogICAgICAgICAgZSA9IGVNYXg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKTsKICAgICAgICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHsKICAgICAgICAgICAgZS0tOwogICAgICAgICAgICBjICo9IDI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZSArIGVCaWFzID49IDEpIHsKICAgICAgICAgICAgdmFsdWUgKz0gcnQgLyBjOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHZhbHVlICogYyA+PSAyKSB7CiAgICAgICAgICAgIGUrKzsKICAgICAgICAgICAgYyAvPSAyOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7CiAgICAgICAgICAgIG0gPSAwOwogICAgICAgICAgICBlID0gZU1heDsKICAgICAgICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHsKICAgICAgICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgICBlID0gZSArIGVCaWFzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pOwogICAgICAgICAgICBlID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDI1NSwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7CiAgICAgICAgfQogICAgICAgIGUgPSBlIDw8IG1MZW4gfCBtOwogICAgICAgIGVMZW4gKz0gbUxlbjsKICAgICAgICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAyNTUsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkgewogICAgICAgIH0KICAgICAgICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjg7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXJANi4wLjMvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcwogIHZhciByZXF1aXJlX2J1ZmZlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXJANi4wLjMvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBiYXNlNjQgPSByZXF1aXJlX2Jhc2U2NF9qcygpOwogICAgICB2YXIgaWVlZTc1NCA9IHJlcXVpcmVfaWVlZTc1NCgpOwogICAgICB2YXIgY3VzdG9tSW5zcGVjdFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbFsiZm9yIl0gPT09ICJmdW5jdGlvbiIgPyBTeW1ib2xbImZvciJdKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpIDogbnVsbDsKICAgICAgZXhwb3J0czIuQnVmZmVyID0gQnVmZmVyMTA7CiAgICAgIGV4cG9ydHMyLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyOwogICAgICBleHBvcnRzMi5JTlNQRUNUX01BWF9CWVRFUyA9IDUwOwogICAgICB2YXIgS19NQVhfTEVOR1RIID0gMjE0NzQ4MzY0NzsKICAgICAgZXhwb3J0czIua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSDsKICAgICAgQnVmZmVyMTAuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KCk7CiAgICAgIGlmICghQnVmZmVyMTAuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICAgICAgICBjb25zdCBwcm90byA9IHsgZm9vOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIDQyOwogICAgICAgICAgfSB9OwogICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSk7CiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90byk7CiAgICAgICAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MjsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIxMC5wcm90b3R5cGUsICJwYXJlbnQiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcih0aGlzKSkKICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcjsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyMTAucHJvdG90eXBlLCAib2Zmc2V0IiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGhpcykpCiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0OwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcihsZW5ndGgpIHsKICAgICAgICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInICsgbGVuZ3RoICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpOwogICAgICAgIH0KICAgICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlcjEwLnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBCdWZmZXIxMChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAibnVtYmVyIikgewogICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucG9vbFNpemUgPSA4MTkyOwogICAgICBmdW5jdGlvbiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHwgdmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gInVuZGVmaW5lZCIgJiYgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fCB2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKCk7CiAgICAgICAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlcjEwLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpOwogICAgICAgIGlmIChiKQogICAgICAgICAgcmV0dXJuIGI7CiAgICAgICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyMTAuZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAuZnJvbSA9IGZ1bmN0aW9uKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjEwLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpOwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyMTAsIFVpbnQ4QXJyYXkpOwogICAgICBmdW5jdGlvbiBhc3NlcnRTaXplKHNpemUpIHsKICAgICAgICBpZiAodHlwZW9mIHNpemUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpOwogICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicgKyBzaXplICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykgewogICAgICAgIGFzc2VydFNpemUoc2l6ZSk7CiAgICAgICAgaWYgKHNpemUgPD0gMCkgewogICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZykgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTsKICAgICAgfQogICAgICBCdWZmZXIxMC5hbGxvYyA9IGZ1bmN0aW9uKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYWxsb2NVbnNhZmUoc2l6ZSkgewogICAgICAgIGFzc2VydFNpemUoc2l6ZSk7CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMCk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpOwogICAgICB9OwogICAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZywgZW5jb2RpbmcpIHsKICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIiB8fCBlbmNvZGluZyA9PT0gIiIpIHsKICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgIH0KICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMDsKICAgICAgICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aCk7CiAgICAgICAgY29uc3QgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpOwogICAgICAgIGlmIChhY3R1YWwgIT09IGxlbmd0aCkgewogICAgICAgICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWY7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkgewogICAgICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMDsKICAgICAgICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBmcm9tQXJyYXlWaWV3KGFycmF5VmlldykgewogICAgICAgIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHsKICAgICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpOwogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlcihhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7CiAgICAgICAgfQogICAgICAgIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTsKICAgICAgICB9CiAgICAgICAgbGV0IGJ1ZjsKICAgICAgICBpZiAoYnl0ZU9mZnNldCA9PT0gdm9pZCAwICYmIGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSk7CiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyMTAucHJvdG90eXBlKTsKICAgICAgICByZXR1cm4gYnVmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqKSB7CiAgICAgICAgaWYgKEJ1ZmZlcjEwLmlzQnVmZmVyKG9iaikpIHsKICAgICAgICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwOwogICAgICAgICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbik7CiAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgICAgfQogICAgICAgICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pOwogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai5sZW5ndGggIT09IHZvaWQgMCkgewogICAgICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAibnVtYmVyIiB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkgewogICAgICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9iai50eXBlID09PSAiQnVmZmVyIiAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkgewogICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgIiBieXRlcyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVuZ3RoIHwgMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCkgewogICAgICAgIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgewogICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJ1ZmZlcjEwLmFsbG9jKCtsZW5ndGgpOwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIyKGIpIHsKICAgICAgICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmIGIgIT09IEJ1ZmZlcjEwLnByb3RvdHlwZTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikgewogICAgICAgIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKQogICAgICAgICAgYSA9IEJ1ZmZlcjEwLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aCk7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpCiAgICAgICAgICBiID0gQnVmZmVyMTAuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKTsKICAgICAgICBpZiAoIUJ1ZmZlcjEwLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIxMC5pc0J1ZmZlcihiKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7CiAgICAgICAgfQogICAgICAgIGlmIChhID09PSBiKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbGV0IHggPSBhLmxlbmd0aDsKICAgICAgICBsZXQgeSA9IGIubGVuZ3RoOwogICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkgewogICAgICAgICAgICB4ID0gYVtpXTsKICAgICAgICAgICAgeSA9IGJbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeCA8IHkpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nKGVuY29kaW5nKSB7CiAgICAgICAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgIGNhc2UgInV0Zi04IjoKICAgICAgICAgIGNhc2UgImFzY2lpIjoKICAgICAgICAgIGNhc2UgImxhdGluMSI6CiAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgY2FzZSAidWNzLTIiOgogICAgICAgICAgY2FzZSAidXRmMTZsZSI6CiAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQnVmZmVyMTAuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KGxpc3QsIGxlbmd0aCkgewogICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBCdWZmZXIxMC5hbGxvYygwKTsKICAgICAgICB9CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIxMC5hbGxvY1Vuc2FmZShsZW5ndGgpOwogICAgICAgIGxldCBwb3MgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBsZXQgYnVmID0gbGlzdFtpXTsKICAgICAgICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHsKICAgICAgICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcihidWYpKQogICAgICAgICAgICAgICAgYnVmID0gQnVmZmVyMTAuZnJvbShidWYpOwogICAgICAgICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChidWZmZXIsIGJ1ZiwgcG9zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYnVmKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWYuY29weShidWZmZXIsIHBvcyk7CiAgICAgICAgICB9CiAgICAgICAgICBwb3MgKz0gYnVmLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB7CiAgICAgICAgaWYgKEJ1ZmZlcjEwLmlzQnVmZmVyKHN0cmluZykpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmcubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkgewogICAgICAgICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHN0cmluZyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGg7CiAgICAgICAgY29uc3QgbXVzdE1hdGNoID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlOwogICAgICAgIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlOwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgc3dpdGNoIChlbmNvZGluZykgewogICAgICAgICAgICBjYXNlICJhc2NpaSI6CiAgICAgICAgICAgIGNhc2UgImxhdGluMSI6CiAgICAgICAgICAgIGNhc2UgImJpbmFyeSI6CiAgICAgICAgICAgICAgcmV0dXJuIGxlbjsKICAgICAgICAgICAgY2FzZSAidXRmOCI6CiAgICAgICAgICAgIGNhc2UgInV0Zi04IjoKICAgICAgICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIGxlbiAqIDI7CiAgICAgICAgICAgIGNhc2UgImhleCI6CiAgICAgICAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbmNvZGluZyA9ICgiIiArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgQnVmZmVyMTAuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgIGZ1bmN0aW9uIHNsb3dUb1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkgewogICAgICAgIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlOwogICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwIHx8IHN0YXJ0IDwgMCkgewogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kID09PSB2b2lkIDAgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDw9IDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgZW5kID4+Pj0gMDsKICAgICAgICBzdGFydCA+Pj49IDA7CiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIGNhc2UgInVjczIiOgogICAgICAgICAgICBjYXNlICJ1Y3MtMiI6CiAgICAgICAgICAgIGNhc2UgInV0ZjE2bGUiOgogICAgICAgICAgICBjYXNlICJ1dGYtMTZsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAobG93ZXJlZENhc2UpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZTsKICAgICAgZnVuY3Rpb24gc3dhcChiLCBuLCBtKSB7CiAgICAgICAgY29uc3QgaSA9IGJbbl07CiAgICAgICAgYltuXSA9IGJbbV07CiAgICAgICAgYlttXSA9IGk7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNigpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgMiAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMigpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgNCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDMpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCgpIHsKICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgICBpZiAobGVuICUgOCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHsKICAgICAgICAgIHN3YXAodGhpcywgaSwgaSArIDcpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpOwogICAgICAgICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKICAgICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKTsKICAgICAgICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlcjEwLnByb3RvdHlwZS50b1N0cmluZzsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhiKSB7CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcihiKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTsKICAgICAgICBpZiAodGhpcyA9PT0gYikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBCdWZmZXIxMC5jb21wYXJlKHRoaXMsIGIpID09PSAwOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7CiAgICAgICAgbGV0IHN0ciA9ICIiOwogICAgICAgIGNvbnN0IG1heCA9IGV4cG9ydHMyLklOU1BFQ1RfTUFYX0JZVEVTOwogICAgICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoImhleCIsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICIkMSAiKS50cmltKCk7CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KQogICAgICAgICAgc3RyICs9ICIgLi4uICI7CiAgICAgICAgcmV0dXJuICI8QnVmZmVyICIgKyBzdHIgKyAiPiI7CiAgICAgIH07CiAgICAgIGlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7CiAgICAgICAgQnVmZmVyMTAucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyMTAucHJvdG90eXBlLmluc3BlY3Q7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7CiAgICAgICAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkgewogICAgICAgICAgdGFyZ2V0ID0gQnVmZmVyMTAuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFCdWZmZXIxMC5pc0J1ZmZlcih0YXJnZXQpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChlbmQgPT09IHZvaWQgMCkgewogICAgICAgICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPT09IHZvaWQgMCkgewogICAgICAgICAgdGhpc1N0YXJ0ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXNFbmQgPT09IHZvaWQgMCkgewogICAgICAgICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkgewogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPj0gZW5kKSB7CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgc3RhcnQgPj4+PSAwOwogICAgICAgIGVuZCA+Pj49IDA7CiAgICAgICAgdGhpc1N0YXJ0ID4+Pj0gMDsKICAgICAgICB0aGlzRW5kID4+Pj0gMDsKICAgICAgICBpZiAodGhpcyA9PT0gdGFyZ2V0KQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbGV0IHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0OwogICAgICAgIGxldCB5ID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgY29uc3QgbGVuID0gTWF0aC5taW4oeCwgeSk7CiAgICAgICAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZCk7CiAgICAgICAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHsKICAgICAgICAgICAgeCA9IHRoaXNDb3B5W2ldOwogICAgICAgICAgICB5ID0gdGFyZ2V0Q29weVtpXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh4IDwgeSkKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAoeSA8IHgpCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHsKICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXQ7CiAgICAgICAgICBieXRlT2Zmc2V0ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAyMTQ3NDgzNjQ3KSB7CiAgICAgICAgICBieXRlT2Zmc2V0ID0gMjE0NzQ4MzY0NzsKICAgICAgICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMjE0NzQ4MzY0OCkgewogICAgICAgICAgYnl0ZU9mZnNldCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgIH0KICAgICAgICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQ7CiAgICAgICAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7CiAgICAgICAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IGJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICBpZiAoYnl0ZU9mZnNldCA8IDApCiAgICAgICAgICBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXQ7CiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgaWYgKGRpcikKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDE7CiAgICAgICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkgewogICAgICAgICAgaWYgKGRpcikKICAgICAgICAgICAgYnl0ZU9mZnNldCA9IDA7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICB2YWwgPSBCdWZmZXIxMC5mcm9tKHZhbCwgZW5jb2RpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoQnVmZmVyMTAuaXNCdWZmZXIodmFsKSkgewogICAgICAgICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAibnVtYmVyIikgewogICAgICAgICAgdmFsID0gdmFsICYgMjU1OwogICAgICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcik7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFycmF5SW5kZXhPZihhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikgewogICAgICAgIGxldCBpbmRleFNpemUgPSAxOwogICAgICAgIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoOwogICAgICAgIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoOwogICAgICAgIGlmIChlbmNvZGluZyAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gInVjczIiIHx8IGVuY29kaW5nID09PSAidWNzLTIiIHx8IGVuY29kaW5nID09PSAidXRmMTZsZSIgfHwgZW5jb2RpbmcgPT09ICJ1dGYtMTZsZSIpIHsKICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGluZGV4U2l6ZSA9IDI7CiAgICAgICAgICAgIGFyckxlbmd0aCAvPSAyOwogICAgICAgICAgICB2YWxMZW5ndGggLz0gMjsKICAgICAgICAgICAgYnl0ZU9mZnNldCAvPSAyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiByZWFkKGJ1ZiwgaTIpIHsKICAgICAgICAgIGlmIChpbmRleFNpemUgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGJ1ZltpMl07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpMiAqIGluZGV4U2l6ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxldCBpOwogICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgIGxldCBmb3VuZEluZGV4ID0gLTE7CiAgICAgICAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkgewogICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgIGZvdW5kSW5kZXggPSBpOwogICAgICAgICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkKICAgICAgICAgICAgICAgIGkgLT0gaSAtIGZvdW5kSW5kZXg7CiAgICAgICAgICAgICAgZm91bmRJbmRleCA9IC0xOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKQogICAgICAgICAgICBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoOwogICAgICAgICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgbGV0IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykgewogICAgICAgICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHsKICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGhleFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDA7CiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldDsKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTsKICAgICAgICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHsKICAgICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7CiAgICAgICAgICBsZW5ndGggPSBzdHJMZW4gLyAyOwogICAgICAgIH0KICAgICAgICBsZXQgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNik7CiAgICAgICAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjhXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgICAgIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBiYXNlNjRXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHVjczJXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykgewogICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgewogICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCI7CiAgICAgICAgICBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IHZvaWQgMCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgZW5jb2RpbmcgPSBvZmZzZXQ7CiAgICAgICAgICBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7CiAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkgewogICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDA7CiAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gdm9pZCAwKQogICAgICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBsZW5ndGg7CiAgICAgICAgICAgIGxlbmd0aCA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpOwogICAgICAgIH0KICAgICAgICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldDsKICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDAgfHwgbGVuZ3RoID4gcmVtYWluaW5nKQogICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nOwogICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7CiAgICAgICAgfQogICAgICAgIGlmICghZW5jb2RpbmcpCiAgICAgICAgICBlbmNvZGluZyA9ICJ1dGY4IjsKICAgICAgICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2FzZSAiaGV4IjoKICAgICAgICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgIGNhc2UgInV0ZjgiOgogICAgICAgICAgICBjYXNlICJ1dGYtOCI6CiAgICAgICAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAiYXNjaWkiOgogICAgICAgICAgICBjYXNlICJsYXRpbjEiOgogICAgICAgICAgICBjYXNlICJiaW5hcnkiOgogICAgICAgICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBjYXNlICJiYXNlNjQiOgogICAgICAgICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAgY2FzZSAidWNzMiI6CiAgICAgICAgICAgIGNhc2UgInVjcy0yIjoKICAgICAgICAgICAgY2FzZSAidXRmMTZsZSI6CiAgICAgICAgICAgIGNhc2UgInV0Zi0xNmxlIjoKICAgICAgICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIGlmIChsb3dlcmVkQ2FzZSkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIgKyBlbmNvZGluZyk7CiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoIiIgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAiQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGJhc2U2NFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXRmOFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgICAgIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7CiAgICAgICAgY29uc3QgcmVzID0gW107CiAgICAgICAgbGV0IGkgPSBzdGFydDsKICAgICAgICB3aGlsZSAoaSA8IGVuZCkgewogICAgICAgICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldOwogICAgICAgICAgbGV0IGNvZGVQb2ludCA9IG51bGw7CiAgICAgICAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IGZpcnN0Qnl0ZSA+IDIzOSA/IDQgOiBmaXJzdEJ5dGUgPiAyMjMgPyAzIDogZmlyc3RCeXRlID4gMTkxID8gMiA6IDE7CiAgICAgICAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7CiAgICAgICAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkgewogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAxMjgpIHsKICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAzMSkgPDwgNiB8IHNlY29uZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAxMjcpIHsKICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTsKICAgICAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07CiAgICAgICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKHRoaXJkQnl0ZSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDE1KSA8PCAxMiB8IChzZWNvbmRCeXRlICYgNjMpIDw8IDYgfCB0aGlyZEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAyMDQ3ICYmICh0ZW1wQ29kZVBvaW50IDwgNTUyOTYgfHwgdGVtcENvZGVQb2ludCA+IDU3MzQzKSkgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdOwogICAgICAgICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXTsKICAgICAgICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdOwogICAgICAgICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKGZvdXJ0aEJ5dGUgJiAxOTIpID09PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTggfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCAxMiB8ICh0aGlyZEJ5dGUgJiA2MykgPDwgNiB8IGZvdXJ0aEJ5dGUgJiA2MzsKICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiA2NTUzNSAmJiB0ZW1wQ29kZVBvaW50IDwgMTExNDExMikgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkgewogICAgICAgICAgICBjb2RlUG9pbnQgPSA2NTUzMzsKICAgICAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDY1NTM1KSB7CiAgICAgICAgICAgIGNvZGVQb2ludCAtPSA2NTUzNjsKICAgICAgICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDEwMjMgfCA1NTI5Nik7CiAgICAgICAgICAgIGNvZGVQb2ludCA9IDU2MzIwIHwgY29kZVBvaW50ICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgICAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKTsKICAgICAgfQogICAgICB2YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSA0MDk2OwogICAgICBmdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkoY29kZVBvaW50cykgewogICAgICAgIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoOwogICAgICAgIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHsKICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cyk7CiAgICAgICAgfQogICAgICAgIGxldCByZXMgPSAiIjsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYXNjaWlTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMTI3KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBsYXRpbjFTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBsZXQgcmV0ID0gIiI7CiAgICAgICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQogICAgICBmdW5jdGlvbiBoZXhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHsKICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoOwogICAgICAgIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKQogICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKQogICAgICAgICAgZW5kID0gbGVuOwogICAgICAgIGxldCBvdXQgPSAiIjsKICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGYxNmxlU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICAgICAgY29uc3QgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7CiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1Nik7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkgewogICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICAgIHN0YXJ0ID0gfn5zdGFydDsKICAgICAgICBlbmQgPSBlbmQgPT09IHZvaWQgMCA/IGxlbiA6IH5+ZW5kOwogICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgIHN0YXJ0ICs9IGxlbjsKICAgICAgICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7CiAgICAgICAgICBzdGFydCA9IGxlbjsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8IDApIHsKICAgICAgICAgIGVuZCArPSBsZW47CiAgICAgICAgICBpZiAoZW5kIDwgMCkKICAgICAgICAgICAgZW5kID0gMDsKICAgICAgICB9IGVsc2UgaWYgKGVuZCA+IGxlbikgewogICAgICAgICAgZW5kID0gbGVuOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kIDwgc3RhcnQpCiAgICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpOwogICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlcjEwLnByb3RvdHlwZSk7CiAgICAgICAgcmV0dXJuIG5ld0J1ZjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2hlY2tPZmZzZXQob2Zmc2V0LCBleHQsIGxlbmd0aCkgewogICAgICAgIGlmIChvZmZzZXQgJSAxICE9PSAwIHx8IG9mZnNldCA8IDApCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7CiAgICAgICAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIik7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVaW50TEUgPSBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCB2YWwgPSB0aGlzW29mZnNldF07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnRCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoMl07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgd2hpbGUgKGJ5dGVMZW5ndGgyID4gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aDJdICogbXVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQ4ID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQxNkxFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgdGhpc1tvZmZzZXQgKyAxXSA8PCA4OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQxNkJFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDggfCB0aGlzW29mZnNldCArIDFdOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQzMkxFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gKHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpICsgdGhpc1tvZmZzZXQgKyAzXSAqIDE2Nzc3MjE2OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZFVpbnQzMkJFID0gQnVmZmVyMTAucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdICogMTY3NzcyMTYgKyAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNiB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgM10pOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRMRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxvID0gZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNDsKICAgICAgICBjb25zdCBoaSA9IHRoaXNbKytvZmZzZXRdICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyBsYXN0ICogMiAqKiAyNDsKICAgICAgICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpOwogICAgICB9KTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUob2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF07CiAgICAgICAgY29uc3QgbG8gPSB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7CiAgICAgICAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUob2Zmc2V0LCBieXRlTGVuZ3RoMiwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgYnl0ZUxlbmd0aDIgPSBieXRlTGVuZ3RoMiA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGxldCB2YWwgPSB0aGlzW29mZnNldF07CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IGkgPSAwOwogICAgICAgIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoMiAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsOwogICAgICAgIH0KICAgICAgICBtdWwgKj0gMTI4OwogICAgICAgIGlmICh2YWwgPj0gbXVsKQogICAgICAgICAgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMik7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBieXRlTGVuZ3RoMiA9IGJ5dGVMZW5ndGgyID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgbGV0IGkgPSBieXRlTGVuZ3RoMjsKICAgICAgICBsZXQgbXVsID0gMTsKICAgICAgICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldOwogICAgICAgIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWw7CiAgICAgICAgfQogICAgICAgIG11bCAqPSAxMjg7CiAgICAgICAgaWYgKHZhbCA+PSBtdWwpCiAgICAgICAgICB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyKTsKICAgICAgICByZXR1cm4gdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKTsKICAgICAgICBpZiAoISh0aGlzW29mZnNldF0gJiAxMjgpKQogICAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XTsKICAgICAgICByZXR1cm4gKDI1NSAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTE7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpOwogICAgICAgIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgODsKICAgICAgICByZXR1cm4gdmFsICYgMzI3NjggPyB2YWwgfCA0Mjk0OTAxNzYwIDogdmFsOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgdGhpc1tvZmZzZXRdIDw8IDg7CiAgICAgICAgcmV0dXJuIHZhbCAmIDMyNzY4ID8gdmFsIHwgNDI5NDkwMTc2MCA6IHZhbDsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYgfCB0aGlzW29mZnNldCArIDNdIDw8IDI0OwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRShvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDI0IHwgdGhpc1tvZmZzZXQgKyAxXSA8PCAxNiB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgM107CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gKyB0aGlzW29mZnNldCArIDVdICogMiAqKiA4ICsgdGhpc1tvZmZzZXQgKyA2XSAqIDIgKiogMTYgKyAobGFzdCA8PCAyNCk7CiAgICAgICAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChmaXJzdCArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDI0KTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRShvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdOwogICAgICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQodGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0KTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFKG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUob2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOCk7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIGNoZWNrSW50KGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikgewogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIoYnVmKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTsKICAgICAgICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7CiAgICAgICAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgIH0KICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludExFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpIC0gMTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBtYXhCeXRlcywgMCk7CiAgICAgICAgfQogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIGxldCBpID0gMDsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aDIgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludEJFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGJ5dGVMZW5ndGgyID0gYnl0ZUxlbmd0aDIgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aDIpIC0gMTsKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBtYXhCeXRlcywgMCk7CiAgICAgICAgfQogICAgICAgIGxldCBpID0gYnl0ZUxlbmd0aDIgLSAxOwogICAgICAgIGxldCBtdWwgPSAxOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAyNTYpKSB7CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludDggPSBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDI1NSwgMCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCA2NTUzNSwgMCk7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAyOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9IEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgNjU1MzUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVWludDMyTEUgPSBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDQyOTQ5NjcyOTUsIDApOwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID0gQnVmZmVyMTAucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCA0Mjk0OTY3Mjk1LCAwKTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiAxNjsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9OwogICAgICBmdW5jdGlvbiB3cnRCaWdVSW50NjRMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7CiAgICAgICAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KTsKICAgICAgICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoNDI5NDk2NzI5NSkpOwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgICAgICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0KytdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQrK10gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldCsrXSA9IGhpOwogICAgICAgIHJldHVybiBvZmZzZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gd3J0QmlnVUludDY0QkUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkgewogICAgICAgIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNyk7CiAgICAgICAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgICAgICBidWZbb2Zmc2V0ICsgN10gPSBsbzsKICAgICAgICBsbyA9IGxvID4+IDg7CiAgICAgICAgYnVmW29mZnNldCArIDZdID0gbG87CiAgICAgICAgbG8gPSBsbyA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyA1XSA9IGxvOwogICAgICAgIGxvID0gbG8gPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgNF0gPSBsbzsKICAgICAgICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICAgICAgYnVmW29mZnNldCArIDNdID0gaGk7CiAgICAgICAgaGkgPSBoaSA+PiA4OwogICAgICAgIGJ1ZltvZmZzZXQgKyAyXSA9IGhpOwogICAgICAgIGhpID0gaGkgPj4gODsKICAgICAgICBidWZbb2Zmc2V0ICsgMV0gPSBoaTsKICAgICAgICBoaSA9IGhpID4+IDg7CiAgICAgICAgYnVmW29mZnNldF0gPSBoaTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgODsKICAgICAgfQogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NExFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSk7CiAgICAgIH0pOwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpIHsKICAgICAgICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgyIC0gMSk7CiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoMiwgbGltaXQgLSAxLCAtbGltaXQpOwogICAgICAgIH0KICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHN1YiA9IDA7CiAgICAgICAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGgyICYmIChtdWwgKj0gMjU2KSkgewogICAgICAgICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHsKICAgICAgICAgICAgc3ViID0gMTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwgPj4gMCkgLSBzdWIgJiAyNTU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoMiAtIDEpOwogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIsIGxpbWl0IC0gMSwgLWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgbGV0IGkgPSBieXRlTGVuZ3RoMiAtIDE7CiAgICAgICAgbGV0IG11bCA9IDE7CiAgICAgICAgbGV0IHN1YiA9IDA7CiAgICAgICAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMjU1OwogICAgICAgIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDI1NikpIHsKICAgICAgICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7CiAgICAgICAgICAgIHN1YiA9IDE7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsID4+IDApIC0gc3ViICYgMjU1OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDEyNywgLTEyOCk7CiAgICAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgIHZhbHVlID0gMjU1ICsgdmFsdWUgKyAxOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7CiAgICAgICAgdmFsdWUgPSArdmFsdWU7CiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICAgIGlmICghbm9Bc3NlcnQpCiAgICAgICAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAzMjc2NywgLTMyNzY4KTsKICAgICAgICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDg7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDI7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDMyNzY3LCAtMzI3NjgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiA4OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMjsKICAgICAgfTsKICAgICAgQnVmZmVyMTAucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KQogICAgICAgICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDgpOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMjU1OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSA+Pj4gMjQ7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkKICAgICAgICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDIxNDc0ODM2NDcsIC0yMTQ3NDgzNjQ4KTsKICAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICAgdmFsdWUgPSA0Mjk0OTY3Mjk1ICsgdmFsdWUgKyAxOwogICAgICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlID4+PiAyNDsKICAgICAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDE2OwogICAgICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gODsKICAgICAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgJiAyNTU7CiAgICAgICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLCBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKICAgICAgfSk7CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLCBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKICAgICAgfSk7CiAgICAgIGZ1bmN0aW9uIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHsKICAgICAgICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkgewogICAgICAgIHZhbHVlID0gK3ZhbHVlOwogICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgICBpZiAoIW5vQXNzZXJ0KSB7CiAgICAgICAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzNDAyODIzNDY2Mzg1Mjg4NmUyMiwgLTM0MDI4MjM0NjYzODUyODg2ZTIyKTsKICAgICAgICB9CiAgICAgICAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA0OwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHsKICAgICAgICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHsKICAgICAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgICAgaWYgKCFub0Fzc2VydCkgewogICAgICAgICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMTc5NzY5MzEzNDg2MjMxNTdlMjkyLCAtMTc5NzY5MzEzNDg2MjMxNTdlMjkyKTsKICAgICAgICB9CiAgICAgICAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpOwogICAgICAgIHJldHVybiBvZmZzZXQgKyA4OwogICAgICB9CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkgewogICAgICAgIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpOwogICAgICB9OwogICAgICBCdWZmZXIxMC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmICghQnVmZmVyMTAuaXNCdWZmZXIodGFyZ2V0KSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpOwogICAgICAgIGlmICghc3RhcnQpCiAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpCiAgICAgICAgICB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGg7CiAgICAgICAgaWYgKCF0YXJnZXRTdGFydCkKICAgICAgICAgIHRhcmdldFN0YXJ0ID0gMDsKICAgICAgICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkKICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgIGlmIChlbmQgPT09IHN0YXJ0KQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgIGlmIChlbmQgPCAwKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKQogICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7CiAgICAgICAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydDsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodGFyZ2V0LCB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLCB0YXJnZXRTdGFydCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsZW47CiAgICAgIH07CiAgICAgIEJ1ZmZlcjEwLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBlbmNvZGluZyA9IHN0YXJ0OwogICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAic3RyaW5nIikgewogICAgICAgICAgICBlbmNvZGluZyA9IGVuZDsKICAgICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW5jb2RpbmcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICJzdHJpbmciICYmICFCdWZmZXIxMC5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgY29uc3QgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IiAmJiBjb2RlIDwgMTI4IHx8IGVuY29kaW5nID09PSAibGF0aW4xIikgewogICAgICAgICAgICAgIHZhbCA9IGNvZGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB2YWwgPSB2YWwgJiAyNTU7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgIHZhbCA9IE51bWJlcih2YWwpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXJ0ID0gc3RhcnQgPj4+IDA7CiAgICAgICAgZW5kID0gZW5kID09PSB2b2lkIDAgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMDsKICAgICAgICBpZiAoIXZhbCkKICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgbGV0IGk7CiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICAgIHRoaXNbaV0gPSB2YWw7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyMTAuaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlcjEwLmZyb20odmFsLCBlbmNvZGluZyk7CiAgICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7CiAgICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJyArIHZhbCArICciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7CiAgICAgICAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgdmFyIGVycm9ycyA9IHt9OwogICAgICBmdW5jdGlvbiBFKHN5bSwgZ2V0TWVzc2FnZSwgQmFzZSkgewogICAgICAgIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7CiAgICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXNzYWdlIiwgewogICAgICAgICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksCiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IFske3N5bX1dYDsKICAgICAgICAgICAgdGhpcy5zdGFjazsKICAgICAgICAgICAgZGVsZXRlIHRoaXMubmFtZTsKICAgICAgICAgIH0KICAgICAgICAgIGdldCBjb2RlKCkgewogICAgICAgICAgICByZXR1cm4gc3ltOwogICAgICAgICAgfQogICAgICAgICAgc2V0IGNvZGUodmFsdWUpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgRSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIiwgZnVuY3Rpb24obmFtZSkgewogICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIjsKICAgICAgfSwgUmFuZ2VFcnJvcik7CiAgICAgIEUoIkVSUl9JTlZBTElEX0FSR19UWVBFIiwgZnVuY3Rpb24obmFtZSwgYWN0dWFsKSB7CiAgICAgICAgcmV0dXJuIGBUaGUgIiR7bmFtZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgYWN0dWFsfWA7CiAgICAgIH0sIFR5cGVFcnJvcik7CiAgICAgIEUoIkVSUl9PVVRfT0ZfUkFOR0UiLCBmdW5jdGlvbihzdHIsIHJhbmdlLCBpbnB1dCkgewogICAgICAgIGxldCBtc2cgPSBgVGhlIHZhbHVlIG9mICIke3N0cn0iIGlzIG91dCBvZiByYW5nZS5gOwogICAgICAgIGxldCByZWNlaXZlZCA9IGlucHV0OwogICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7CiAgICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIHJlY2VpdmVkID0gU3RyaW5nKGlucHV0KTsKICAgICAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHsKICAgICAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpOwogICAgICAgICAgfQogICAgICAgICAgcmVjZWl2ZWQgKz0gIm4iOwogICAgICAgIH0KICAgICAgICBtc2cgKz0gYCBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWA7CiAgICAgICAgcmV0dXJuIG1zZzsKICAgICAgfSwgUmFuZ2VFcnJvcik7CiAgICAgIGZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvcih2YWwpIHsKICAgICAgICBsZXQgcmVzID0gIiI7CiAgICAgICAgbGV0IGkgPSB2YWwubGVuZ3RoOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAiLSIgPyAxIDogMDsKICAgICAgICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykgewogICAgICAgICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGAke3ZhbC5zbGljZSgwLCBpKX0ke3Jlc31gOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMikgewogICAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICAgIGlmIChidWZbb2Zmc2V0XSA9PT0gdm9pZCAwIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoMl0gPT09IHZvaWQgMCkgewogICAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGgyICsgMSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICAgICAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7CiAgICAgICAgICBjb25zdCBuID0gdHlwZW9mIG1pbiA9PT0gImJpZ2ludCIgPyAibiIgOiAiIjsKICAgICAgICAgIGxldCByYW5nZTsKICAgICAgICAgIGlmIChieXRlTGVuZ3RoMiA+IDMpIHsKICAgICAgICAgICAgaWYgKG1pbiA9PT0gMCB8fCBtaW4gPT09IEJpZ0ludCgwKSkgewogICAgICAgICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4fSR7bn1gOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDggLSAxfSR7bn0pIGFuZCA8IDIgKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDggLSAxfSR7bn1gOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByYW5nZSA9IGA+PSAke21pbn0ke259IGFuZCA8PSAke21heH0ke259YDsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLCByYW5nZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCBuYW1lKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gIm51bWJlciIpIHsKICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgIm51bWJlciIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYm91bmRzRXJyb3IodmFsdWUsIGxlbmd0aCwgdHlwZSkgewogICAgICAgIGlmIChNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpIHsKICAgICAgICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKTsKICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICJvZmZzZXQiLCAiYW4gaW50ZWdlciIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKCk7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICJvZmZzZXQiLCBgPj0gJHt0eXBlID8gMSA6IDB9IGFuZCA8PSAke2xlbmd0aH1gLCB2YWx1ZSk7CiAgICAgIH0KICAgICAgdmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZzsKICAgICAgZnVuY3Rpb24gYmFzZTY0Y2xlYW4oc3RyKSB7CiAgICAgICAgc3RyID0gc3RyLnNwbGl0KCI9IilbMF07CiAgICAgICAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAiIik7CiAgICAgICAgaWYgKHN0ci5sZW5ndGggPCAyKQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkgewogICAgICAgICAgc3RyID0gc3RyICsgIj0iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cmluZywgdW5pdHMpIHsKICAgICAgICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5OwogICAgICAgIGxldCBjb2RlUG9pbnQ7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgICAgICBsZXQgbGVhZFN1cnJvZ2F0ZSA9IG51bGw7CiAgICAgICAgY29uc3QgYnl0ZXMgPSBbXTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKTsKICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiA1NTI5NSAmJiBjb2RlUG9pbnQgPCA1NzM0NCkgewogICAgICAgICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHsKICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID4gNTYzMTkpIHsKICAgICAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkKICAgICAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDIzOSwgMTkxLCAxODkpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8IDU2MzIwKSB7CiAgICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKQogICAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50OwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gNTUyOTYgPDwgMTAgfCBjb2RlUG9pbnQgLSA1NjMyMCkgKyA2NTUzNjsKICAgICAgICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgIH0KICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsOwogICAgICAgICAgaWYgKGNvZGVQb2ludCA8IDEyOCkgewogICAgICAgICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAyMDQ4KSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiA2IHwgMTkyLCBjb2RlUG9pbnQgJiA2MyB8IDEyOCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDY1NTM2KSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAxMiB8IDIyNCwgY29kZVBvaW50ID4+IDYgJiA2MyB8IDEyOCwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAxMTE0MTEyKSB7CiAgICAgICAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAxOCB8IDI0MCwgY29kZVBvaW50ID4+IDEyICYgNjMgfCAxMjgsIGNvZGVQb2ludCA+PiA2ICYgNjMgfCAxMjgsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBieXRlczsKICAgICAgfQogICAgICBmdW5jdGlvbiBhc2NpaVRvQnl0ZXMoc3RyKSB7CiAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyhzdHIsIHVuaXRzKSB7CiAgICAgICAgbGV0IGMsIGhpLCBsbzsKICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgaGkgPSBjID4+IDg7CiAgICAgICAgICBsbyA9IGMgJSAyNTY7CiAgICAgICAgICBieXRlQXJyYXkucHVzaChsbyk7CiAgICAgICAgICBieXRlQXJyYXkucHVzaChoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyhzdHIpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJsaXRCdWZmZXIoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICAgICAgbGV0IGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoIHx8IGkgPj0gc3JjLmxlbmd0aCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGlzSW5zdGFuY2Uob2JqLCB0eXBlKSB7CiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHwgb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIG51bWJlcklzTmFOKG9iaikgewogICAgICAgIHJldHVybiBvYmogIT09IG9iajsKICAgICAgfQogICAgICB2YXIgaGV4U2xpY2VMb29rdXBUYWJsZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGNvbnN0IGFscGhhYmV0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IEFycmF5KDI1Nik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7CiAgICAgICAgICBjb25zdCBpMTYgPSBpICogMTY7CiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHsKICAgICAgICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFibGU7CiAgICAgIH0oKTsKICAgICAgZnVuY3Rpb24gZGVmaW5lQmlnSW50TWV0aG9kKGZuKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICJ1bmRlZmluZWQiID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEJ1ZmZlckJpZ0ludE5vdERlZmluZWQoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpOwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIHNyYy9hbGlhcy9idWZmZXItc2hpbS5qcwogIHZhciBpbXBvcnRfYnVmZmVyOwogIHZhciBpbml0X2J1ZmZlcl9zaGltID0gX19lc20oewogICAgInNyYy9hbGlhcy9idWZmZXItc2hpbS5qcyIoKSB7CiAgICAgIGltcG9ydF9idWZmZXIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsQDEuNy41L25vZGVfbW9kdWxlcy9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9janMtcG9ueWZpbGwuanMKICB2YXIgcmVxdWlyZV9janNfcG9ueWZpbGwgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsQDEuNy41L25vZGVfbW9kdWxlcy9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9janMtcG9ueWZpbGwuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKQogICAgICAgICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgewogICAgICAgIGlmIChwcm90b1Byb3BzKQogICAgICAgICAgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgICAgICBpZiAoc3RhdGljUHJvcHMpCiAgICAgICAgICBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsKICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgICAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7CiAgICAgICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsICJwcm90b3R5cGUiLCB7CiAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgICBpZiAoc3VwZXJDbGFzcykKICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKICAgICAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mMihvMikgewogICAgICAgICAgcmV0dXJuIG8yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YobzIpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgewogICAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YyKG8yLCBwMikgewogICAgICAgICAgbzIuX19wcm90b19fID0gcDI7CiAgICAgICAgICByZXR1cm4gbzI7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkgewogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYyKSB7CiAgICAgICAgaWYgKHNlbGYyID09PSB2b2lkIDApIHsKICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmMjsKICAgICAgfQogICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmMiwgY2FsbCkgewogICAgICAgIGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpKSB7CiAgICAgICAgICByZXR1cm4gY2FsbDsKICAgICAgICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZjIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7CiAgICAgICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgewogICAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7CiAgICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgewogICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOwogICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7CiAgICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIF9nZXQoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSAidW5kZWZpbmVkIiAmJiBSZWZsZWN0LmdldCkgewogICAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0LmJpbmQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQyKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7CiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmICghYmFzZSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmIChkZXNjLmdldCkgewogICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9nZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfQogICAgICB2YXIgRW1pdHRlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBFbWl0dGVyMigpIHsKICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbWl0dGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImxpc3RlbmVycyIsIHsKICAgICAgICAgICAgdmFsdWU6IHt9LAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEVtaXR0ZXIyLCBbewogICAgICAgICAga2V5OiAiYWRkRXZlbnRMaXN0ZW5lciIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoISh0eXBlIGluIHRoaXMubGlzdGVuZXJzKSkgewogICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdID0gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0ucHVzaCh7CiAgICAgICAgICAgICAgY2FsbGJhY2ssCiAgICAgICAgICAgICAgb3B0aW9ucwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJyZW1vdmVFdmVudExpc3RlbmVyIiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgIGlmICghKHR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW3R5cGVdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIGlmIChzdGFja1tpXS5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBrZXk6ICJkaXNwYXRjaEV2ZW50IiwKICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7CiAgICAgICAgICAgIGlmICghKGV2ZW50LnR5cGUgaW4gdGhpcy5saXN0ZW5lcnMpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMubGlzdGVuZXJzW2V2ZW50LnR5cGVdOwogICAgICAgICAgICB2YXIgc3RhY2tUb0NhbGwgPSBzdGFjay5zbGljZSgpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YWNrVG9DYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHN0YWNrVG9DYWxsW2ldOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsaXN0ZW5lci5vcHRpb25zICYmIGxpc3RlbmVyLm9wdGlvbnMub25jZSkgewogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUsIGxpc3RlbmVyLmNhbGxiYWNrKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gRW1pdHRlcjI7CiAgICAgIH0oKTsKICAgICAgdmFyIEFib3J0U2lnbmFsID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKF9FbWl0dGVyKSB7CiAgICAgICAgX2luaGVyaXRzKEFib3J0U2lnbmFsMiwgX0VtaXR0ZXIpOwogICAgICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQWJvcnRTaWduYWwyKTsKICAgICAgICBmdW5jdGlvbiBBYm9ydFNpZ25hbDIoKSB7CiAgICAgICAgICB2YXIgX3RoaXM7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRTaWduYWwyKTsKICAgICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7CiAgICAgICAgICBpZiAoIV90aGlzLmxpc3RlbmVycykgewogICAgICAgICAgICBFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOwogICAgICAgICAgfQogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCAiYWJvcnRlZCIsIHsKICAgICAgICAgICAgdmFsdWU6IGZhbHNlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgIm9uYWJvcnQiLCB7CiAgICAgICAgICAgIHZhbHVlOiBudWxsLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgInJlYXNvbiIsIHsKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgICAgfQogICAgICAgIF9jcmVhdGVDbGFzcyhBYm9ydFNpZ25hbDIsIFt7CiAgICAgICAgICBrZXk6ICJ0b1N0cmluZyIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiAiW29iamVjdCBBYm9ydFNpZ25hbF0iOwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGtleTogImRpc3BhdGNoRXZlbnQiLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsKICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJhYm9ydCIpIHsKICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbmFib3J0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uYWJvcnQuY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9nZXQoX2dldFByb3RvdHlwZU9mKEFib3J0U2lnbmFsMi5wcm90b3R5cGUpLCAiZGlzcGF0Y2hFdmVudCIsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgfQogICAgICAgIH1dKTsKICAgICAgICByZXR1cm4gQWJvcnRTaWduYWwyOwogICAgICB9KEVtaXR0ZXIpOwogICAgICB2YXIgQWJvcnRDb250cm9sbGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIEFib3J0Q29udHJvbGxlcjIoKSB7CiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWJvcnRDb250cm9sbGVyMik7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNpZ25hbCIsIHsKICAgICAgICAgICAgdmFsdWU6IG5ldyBBYm9ydFNpZ25hbCgpLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX2NyZWF0ZUNsYXNzKEFib3J0Q29udHJvbGxlcjIsIFt7CiAgICAgICAgICBrZXk6ICJhYm9ydCIsCiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7CiAgICAgICAgICAgIHZhciBldmVudDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudCgiYWJvcnQiKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7CiAgICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9ICJhYm9ydCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICAgICAgICAgICAgICBldmVudC5pbml0RXZlbnQoImFib3J0IiwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhYm9ydCIsCiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLAogICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNpZ25hbFJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgICAgaWYgKHNpZ25hbFJlYXNvbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbi5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBzaWduYWxSZWFzb24gPSBuZXcgRE9NRXhjZXB0aW9uKCJzaWduYWwgaXMgYWJvcnRlZCB3aXRob3V0IHJlYXNvbiIpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgIHNpZ25hbFJlYXNvbiA9IG5ldyBFcnJvcigiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgICAgICAgICAgICAgc2lnbmFsUmVhc29uLm5hbWUgPSAiQWJvcnRFcnJvciI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHNpZ25hbFJlYXNvbjsKICAgICAgICAgICAgdGhpcy5zaWduYWwuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAga2V5OiAidG9TdHJpbmciLAogICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gIltvYmplY3QgQWJvcnRDb250cm9sbGVyXSI7CiAgICAgICAgICB9CiAgICAgICAgfV0pOwogICAgICAgIHJldHVybiBBYm9ydENvbnRyb2xsZXIyOwogICAgICB9KCk7CiAgICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHsKICAgICAgICBBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiQWJvcnRDb250cm9sbGVyIjsKICAgICAgICBBYm9ydFNpZ25hbC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICJBYm9ydFNpZ25hbCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9seWZpbGxOZWVkZWQoc2VsZjIpIHsKICAgICAgICBpZiAoc2VsZjIuX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgY29uc29sZS5sb2coIl9fRk9SQ0VfSU5TVEFMTF9BQk9SVENPTlRST0xMRVJfUE9MWUZJTEw9dHJ1ZSBpcyBzZXQsIHdpbGwgZm9yY2UgaW5zdGFsbCBwb2x5ZmlsbCIpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0eXBlb2Ygc2VsZjIuUmVxdWVzdCA9PT0gImZ1bmN0aW9uIiAmJiAhc2VsZjIuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpIHx8ICFzZWxmMi5BYm9ydENvbnRyb2xsZXI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWJvcnRhYmxlRmV0Y2hEZWNvcmF0b3IocGF0Y2hUYXJnZXRzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBwYXRjaFRhcmdldHMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBhdGNoVGFyZ2V0cyA9IHsKICAgICAgICAgICAgZmV0Y2g6IHBhdGNoVGFyZ2V0cwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIF9wYXRjaFRhcmdldHMgPSBwYXRjaFRhcmdldHMsIGZldGNoID0gX3BhdGNoVGFyZ2V0cy5mZXRjaCwgX3BhdGNoVGFyZ2V0cyRSZXF1ZXN0ID0gX3BhdGNoVGFyZ2V0cy5SZXF1ZXN0LCBOYXRpdmVSZXF1ZXN0ID0gX3BhdGNoVGFyZ2V0cyRSZXF1ZXN0ID09PSB2b2lkIDAgPyBmZXRjaC5SZXF1ZXN0IDogX3BhdGNoVGFyZ2V0cyRSZXF1ZXN0LCBOYXRpdmVBYm9ydENvbnRyb2xsZXIgPSBfcGF0Y2hUYXJnZXRzLkFib3J0Q29udHJvbGxlciwgX3BhdGNoVGFyZ2V0cyRfX0ZPUkNFID0gX3BhdGNoVGFyZ2V0cy5fX0ZPUkNFX0lOU1RBTExfQUJPUlRDT05UUk9MTEVSX1BPTFlGSUxMLCBfX0ZPUkNFX0lOU1RBTExfQUJPUlRDT05UUk9MTEVSX1BPTFlGSUxMID0gX3BhdGNoVGFyZ2V0cyRfX0ZPUkNFID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXRjaFRhcmdldHMkX19GT1JDRTsKICAgICAgICBpZiAoIXBvbHlmaWxsTmVlZGVkKHsKICAgICAgICAgIGZldGNoLAogICAgICAgICAgUmVxdWVzdDogTmF0aXZlUmVxdWVzdCwKICAgICAgICAgIEFib3J0Q29udHJvbGxlcjogTmF0aXZlQWJvcnRDb250cm9sbGVyLAogICAgICAgICAgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTAogICAgICAgIH0pKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBmZXRjaCwKICAgICAgICAgICAgUmVxdWVzdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIFJlcXVlc3QgPSBOYXRpdmVSZXF1ZXN0OwogICAgICAgIGlmIChSZXF1ZXN0ICYmICFSZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic2lnbmFsIikgfHwgX19GT1JDRV9JTlNUQUxMX0FCT1JUQ09OVFJPTExFUl9QT0xZRklMTCkgewogICAgICAgICAgUmVxdWVzdCA9IGZ1bmN0aW9uIFJlcXVlc3QyKGlucHV0LCBpbml0MikgewogICAgICAgICAgICB2YXIgc2lnbmFsOwogICAgICAgICAgICBpZiAoaW5pdDIgJiYgaW5pdDIuc2lnbmFsKSB7CiAgICAgICAgICAgICAgc2lnbmFsID0gaW5pdDIuc2lnbmFsOwogICAgICAgICAgICAgIGRlbGV0ZSBpbml0Mi5zaWduYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgaW5pdDIpOwogICAgICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVlc3QsICJzaWduYWwiLCB7CiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIHZhbHVlOiBzaWduYWwKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgICAgIH07CiAgICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QucHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICB2YXIgcmVhbEZldGNoID0gZmV0Y2g7CiAgICAgICAgdmFyIGFib3J0YWJsZUZldGNoID0gZnVuY3Rpb24gYWJvcnRhYmxlRmV0Y2gyKGlucHV0LCBpbml0MikgewogICAgICAgICAgdmFyIHNpZ25hbCA9IFJlcXVlc3QgJiYgUmVxdWVzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihpbnB1dCkgPyBpbnB1dC5zaWduYWwgOiBpbml0MiA/IGluaXQyLnNpZ25hbCA6IHZvaWQgMDsKICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgdmFyIGFib3J0RXJyb3I7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYWJvcnRFcnJvciA9IG5ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCAiQWJvcnRFcnJvciIpOwogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBhYm9ydEVycm9yID0gbmV3IEVycm9yKCJBYm9ydGVkIik7CiAgICAgICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gIkFib3J0RXJyb3IiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChhYm9ydEVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgY2FuY2VsbGF0aW9uID0gbmV3IFByb21pc2UoZnVuY3Rpb24oXywgcmVqZWN0KSB7CiAgICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGFib3J0RXJyb3IpOwogICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIG9uY2U6IHRydWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChpbml0MiAmJiBpbml0Mi5zaWduYWwpIHsKICAgICAgICAgICAgICBkZWxldGUgaW5pdDIuc2lnbmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW2NhbmNlbGxhdGlvbiwgcmVhbEZldGNoKGlucHV0LCBpbml0MildKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZWFsRmV0Y2goaW5wdXQsIGluaXQyKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBmZXRjaDogYWJvcnRhYmxlRmV0Y2gsCiAgICAgICAgICBSZXF1ZXN0CiAgICAgICAgfTsKICAgICAgfQogICAgICBleHBvcnRzMi5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7CiAgICAgIGV4cG9ydHMyLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7CiAgICAgIGV4cG9ydHMyLmFib3J0YWJsZUZldGNoID0gYWJvcnRhYmxlRmV0Y2hEZWNvcmF0b3I7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2Fib3J0Y29udHJvbGxlci1wb255ZmlsbC5qcwogIHZhciByZXF1aXJlX2Fib3J0Y29udHJvbGxlcl9wb255ZmlsbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL2Fib3J0Y29udHJvbGxlci1wb255ZmlsbC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5BYm9ydFNpZ25hbCA9IGV4cG9ydHMyLkFib3J0Q29udHJvbGxlciA9IHZvaWQgMDsKICAgICAgdmFyIGNqc19wb255ZmlsbF8xID0gcmVxdWlyZV9janNfcG9ueWZpbGwoKTsKICAgICAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBzZWxmOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIGdsb2JhbDsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QiKTsKICAgICAgfTsKICAgICAgdmFyIEFib3J0Q29udHJvbGxlciA9IHR5cGVvZiBnZXRHbG9iYWwoKS5BYm9ydENvbnRyb2xsZXIgPT09ICJ1bmRlZmluZWQiID8gY2pzX3BvbnlmaWxsXzEuQWJvcnRDb250cm9sbGVyIDogZ2V0R2xvYmFsKCkuQWJvcnRDb250cm9sbGVyOwogICAgICBleHBvcnRzMi5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7CiAgICAgIHZhciBBYm9ydFNpZ25hbCA9IHR5cGVvZiBnZXRHbG9iYWwoKS5BYm9ydENvbnRyb2xsZXIgPT09ICJ1bmRlZmluZWQiID8gY2pzX3BvbnlmaWxsXzEuQWJvcnRTaWduYWwgOiBnZXRHbG9iYWwoKS5BYm9ydFNpZ25hbDsKICAgICAgZXhwb3J0czIuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlQWJvcnRDb250cm9sbGVyLmpzCiAgdmFyIHJlcXVpcmVfQWdncmVnYXRlQWJvcnRDb250cm9sbGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWdncmVnYXRlQWJvcnRDb250cm9sbGVyLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBhYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGxfMSA9IHJlcXVpcmVfYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsKCk7CiAgICAgIHZhciBOdWxsU2lnbmFsID0gY2xhc3MgewogICAgICB9OwogICAgICB2YXIgQWdncmVnYXRlQWJvcnRDb250cm9sbGVyID0gY2xhc3MgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgdGhpcy5zaWduYWxzID0gbmV3IFNldCgpOwogICAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgYWJvcnRjb250cm9sbGVyX3BvbnlmaWxsXzEuQWJvcnRDb250cm9sbGVyKCk7CiAgICAgICAgfQogICAgICAgIGFkZFNpZ25hbChzaWduYWwgPSBuZXcgTnVsbFNpZ25hbCgpKSB7CiAgICAgICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBhZGQgYSBzaWduYWwsIGFscmVhZHkgYWJvcnRlZCEiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc2lnbmFscy5hZGQoc2lnbmFsKTsKICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICB0aGlzLmhhbmRsZUFib3J0ZWQoc2lnbmFsKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsICgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFib3J0ZWQoc2lnbmFsKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUFib3J0ZWQoc2lnbmFsKSB7CiAgICAgICAgICB0aGlzLnNpZ25hbHMuZGVsZXRlKHNpZ25hbCk7CiAgICAgICAgICBpZiAodGhpcy5zaWduYWxzLnNpemUgPT09IDApIHsKICAgICAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0IHNpZ25hbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWw7CiAgICAgICAgfQogICAgICAgIGFib3J0KCkgewogICAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZUAxLjUuMC9ub2RlX21vZHVsZXMvYWJvcnRhYmxlLXByb21pc2UtY2FjaGUvZXNtL0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyLmpzCiAgdmFyIHJlcXVpcmVfQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9BZ2dyZWdhdGVTdGF0dXNSZXBvcnRlci5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICB2YXIgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXIgPSBjbGFzcyB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IG5ldyBTZXQoKTsKICAgICAgICB9CiAgICAgICAgYWRkQ2FsbGJhY2soY2FsbGJhY2sgPSAoKSA9PiB7CiAgICAgICAgfSkgewogICAgICAgICAgdGhpcy5jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTsKICAgICAgICAgIGNhbGxiYWNrKHRoaXMuY3VycmVudE1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgICBjYWxsYmFjayhtZXNzYWdlKSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlID0gbWVzc2FnZTsKICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmZvckVhY2goKGVsdCkgPT4gewogICAgICAgICAgICBlbHQobWVzc2FnZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWJvcnRhYmxlUHJvbWlzZUNhY2hlLmpzCiAgdmFyIHJlcXVpcmVfQWJvcnRhYmxlUHJvbWlzZUNhY2hlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vQWJvcnRhYmxlUHJvbWlzZUNhY2hlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9faW1wb3J0RGVmYXVsdCA9IGV4cG9ydHMyICYmIGV4cG9ydHMyLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyAiZGVmYXVsdCI6IG1vZCB9OwogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgdmFyIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xID0gcmVxdWlyZV9hYm9ydGNvbnRyb2xsZXJfcG9ueWZpbGwoKTsKICAgICAgdmFyIEFnZ3JlZ2F0ZUFib3J0Q29udHJvbGxlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmVfQWdncmVnYXRlQWJvcnRDb250cm9sbGVyKCkpOwogICAgICB2YXIgQWdncmVnYXRlU3RhdHVzUmVwb3J0ZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0FnZ3JlZ2F0ZVN0YXR1c1JlcG9ydGVyKCkpOwogICAgICB2YXIgQWJvcnRhYmxlUHJvbWlzZUNhY2hlMiA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZpbGwsIGNhY2hlIH0pIHsKICAgICAgICAgIGlmICh0eXBlb2YgZmlsbCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBmaWxsIGZ1bmN0aW9uIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHBhc3MgYSBjYWNoZSBvYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2YgY2FjaGUuZ2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBjYWNoZS5zZXQgIT09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIGNhY2hlLmRlbGV0ZSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWNoZSBtdXN0IGltcGxlbWVudCBnZXQoa2V5KSwgc2V0KGtleSwgdmFsKSwgYW5kIGFuZCBkZWxldGUoa2V5KSIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlOwogICAgICAgICAgdGhpcy5maWxsQ2FsbGJhY2sgPSBmaWxsOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaXNBYm9ydEV4Y2VwdGlvbihleGNlcHRpb24pIHsKICAgICAgICAgIHJldHVybiBleGNlcHRpb24ubmFtZSA9PT0gIkFib3J0RXJyb3IiIHx8IGV4Y2VwdGlvbi5jb2RlID09PSAiRVJSX0FCT1JURUQiIHx8IGV4Y2VwdGlvbi5tZXNzYWdlID09PSAiQWJvcnRFcnJvcjogYWJvcnRlZCIgfHwgZXhjZXB0aW9uLm1lc3NhZ2UgPT09ICJFcnJvcjogYWJvcnRlZCI7CiAgICAgICAgfQogICAgICAgIGV2aWN0KGtleSwgZW50cnkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmdldChrZXkpID09PSBlbnRyeSkgewogICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgY29uc3QgYWJvcnRlciA9IG5ldyBBZ2dyZWdhdGVBYm9ydENvbnRyb2xsZXJfMS5kZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBzdGF0dXNSZXBvcnRlciA9IG5ldyBBZ2dyZWdhdGVTdGF0dXNSZXBvcnRlcl8xLmRlZmF1bHQoKTsKICAgICAgICAgIHN0YXR1c1JlcG9ydGVyLmFkZENhbGxiYWNrKHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgIGNvbnN0IG5ld0VudHJ5ID0gewogICAgICAgICAgICBhYm9ydGVyLAogICAgICAgICAgICBwcm9taXNlOiB0aGlzLmZpbGxDYWxsYmFjayhkYXRhLCBhYm9ydGVyLnNpZ25hbCwgKG1lc3NhZ2UpID0+IHsKICAgICAgICAgICAgICBzdGF0dXNSZXBvcnRlci5jYWxsYmFjayhtZXNzYWdlKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHNldHRsZWQ6IGZhbHNlLAogICAgICAgICAgICBzdGF0dXNSZXBvcnRlciwKICAgICAgICAgICAgZ2V0IGFib3J0ZWQoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRlci5zaWduYWwuYWJvcnRlZDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIG5ld0VudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICBuZXdFbnRyeS5hYm9ydGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsICgpID0+IHsKICAgICAgICAgICAgaWYgKCFuZXdFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5ldmljdChrZXksIG5ld0VudHJ5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBuZXdFbnRyeS5wcm9taXNlLnRoZW4oKCkgPT4gewogICAgICAgICAgICBuZXdFbnRyeS5zZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0sICgpID0+IHsKICAgICAgICAgICAgbmV3RW50cnkuc2V0dGxlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBuZXdFbnRyeSk7CiAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIG5ld0VudHJ5KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGNoZWNrU2luZ2xlUHJvbWlzZShwcm9taXNlLCBzaWduYWwpIHsKICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2luZ2xlQWJvcnQoKSB7CiAgICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiYWJvcnRlZCIpLCB7IGNvZGU6ICJFUlJfQUJPUlRFRCIgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4gewogICAgICAgICAgICBjaGVja0ZvclNpbmdsZUFib3J0KCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9LCAoZXJyb3IpID0+IHsKICAgICAgICAgICAgY2hlY2tGb3JTaW5nbGVBYm9ydCgpOwogICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBoYXMoa2V5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgZ2V0KGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjaykgewogICAgICAgICAgaWYgKCFzaWduYWwgJiYgZGF0YSBpbnN0YW5jZW9mIGFib3J0Y29udHJvbGxlcl9wb255ZmlsbF8xLkFib3J0U2lnbmFsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInNlY29uZCBnZXQgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhbiBBYm9ydFNpZ25hbCwgcGVyaGFwcyB5b3UgbWVhbnQgdG8gcGFzcyBgbnVsbGAgZm9yIHRoZSBmaWxsIGRhdGE/Iik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjYWNoZUVudHJ5ID0gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIGlmIChjYWNoZUVudHJ5KSB7CiAgICAgICAgICAgIGlmIChjYWNoZUVudHJ5LmFib3J0ZWQgJiYgIWNhY2hlRW50cnkuc2V0dGxlZCkgewogICAgICAgICAgICAgIHRoaXMuZXZpY3Qoa2V5LCBjYWNoZUVudHJ5KTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoa2V5LCBkYXRhLCBzaWduYWwsIHN0YXR1c0NhbGxiYWNrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlRW50cnkucHJvbWlzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYWNoZUVudHJ5LmFib3J0ZXIuYWRkU2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICAgIGNhY2hlRW50cnkuc3RhdHVzUmVwb3J0ZXIuYWRkQ2FsbGJhY2soc3RhdHVzQ2FsbGJhY2spOwogICAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UoY2FjaGVFbnRyeS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maWxsKGtleSwgZGF0YSwgc2lnbmFsLCBzdGF0dXNDYWxsYmFjayk7CiAgICAgICAgICByZXR1cm4gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMi5jaGVja1NpbmdsZVByb21pc2UodGhpcy5jYWNoZS5nZXQoa2V5KS5wcm9taXNlLCBzaWduYWwpOwogICAgICAgIH0KICAgICAgICBkZWxldGUoa2V5KSB7CiAgICAgICAgICBjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7CiAgICAgICAgICBpZiAoY2FjaGVkRW50cnkpIHsKICAgICAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS5zZXR0bGVkKSB7CiAgICAgICAgICAgICAgY2FjaGVkRW50cnkuYWJvcnRlci5hYm9ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgY29uc3Qga2V5SXRlciA9IHRoaXMuY2FjaGUua2V5cygpOwogICAgICAgICAgbGV0IGRlbGV0ZUNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpOyAhcmVzdWx0LmRvbmU7IHJlc3VsdCA9IGtleUl0ZXIubmV4dCgpKSB7CiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHJlc3VsdC52YWx1ZSk7CiAgICAgICAgICAgIGRlbGV0ZUNvdW50ICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZGVsZXRlQ291bnQ7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5kZWZhdWx0ID0gQWJvcnRhYmxlUHJvbWlzZUNhY2hlMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlQDEuNS4wL25vZGVfbW9kdWxlcy9hYm9ydGFibGUtcHJvbWlzZS1jYWNoZS9lc20vaW5kZXguanMKICB2YXIgcmVxdWlyZV9lc20gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vYWJvcnRhYmxlLXByb21pc2UtY2FjaGVAMS41LjAvbm9kZV9tb2R1bGVzL2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlL2VzbS9pbmRleC5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2ltcG9ydERlZmF1bHQgPSBleHBvcnRzMiAmJiBleHBvcnRzMi5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgICAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHsgImRlZmF1bHQiOiBtb2QgfTsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBBYm9ydGFibGVQcm9taXNlQ2FjaGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX0Fib3J0YWJsZVByb21pc2VDYWNoZSgpKTsKICAgICAgZXhwb3J0czIuZGVmYXVsdCA9IEFib3J0YWJsZVByb21pc2VDYWNoZV8xLmRlZmF1bHQ7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVANC4wLjEvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcwogIHZhciByZXF1aXJlX3F1aWNrX2xydSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9xdWljay1scnVANC4wLjEvbm9kZV9tb2R1bGVzL3F1aWNrLWxydS9pbmRleC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBRdWlja0xSVSA9IGNsYXNzIHsKICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHsKICAgICAgICAgIGlmICghKG9wdGlvbnMubWF4U2l6ZSAmJiBvcHRpb25zLm1heFNpemUgPiAwKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4U2l6ZWAgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5tYXhTaXplID0gb3B0aW9ucy5tYXhTaXplOwogICAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICAgIHRoaXMub2xkQ2FjaGUgPSBuZXcgTWFwKCk7CiAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICB9CiAgICAgICAgX3NldChrZXksIHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTsKICAgICAgICAgIHRoaXMuX3NpemUrKzsKICAgICAgICAgIGlmICh0aGlzLl9zaXplID49IHRoaXMubWF4U2l6ZSkgewogICAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICAgICAgdGhpcy5vbGRDYWNoZSA9IHRoaXMuY2FjaGU7CiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTWFwKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldChrZXkpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMub2xkQ2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm9sZENhY2hlLmdldChrZXkpOwogICAgICAgICAgICB0aGlzLm9sZENhY2hlLmRlbGV0ZShrZXkpOwogICAgICAgICAgICB0aGlzLl9zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHsKICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGhhcyhrZXkpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmhhcyhrZXkpIHx8IHRoaXMub2xkQ2FjaGUuaGFzKGtleSk7CiAgICAgICAgfQogICAgICAgIHBlZWsoa2V5KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoa2V5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLm9sZENhY2hlLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9sZENhY2hlLmdldChrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxldGUoa2V5KSB7CiAgICAgICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTsKICAgICAgICAgIGlmIChkZWxldGVkKSB7CiAgICAgICAgICAgIHRoaXMuX3NpemUtLTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLm9sZENhY2hlLmRlbGV0ZShrZXkpIHx8IGRlbGV0ZWQ7CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpOwogICAgICAgICAgdGhpcy5vbGRDYWNoZS5jbGVhcigpOwogICAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CiAgICAgICAgfQogICAgICAgICprZXlzKCkgewogICAgICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB0aGlzKSB7CiAgICAgICAgICAgIHlpZWxkIGtleTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKnZhbHVlcygpIHsKICAgICAgICAgIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIHRoaXMpIHsKICAgICAgICAgICAgeWllbGQgdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNhY2hlKSB7CiAgICAgICAgICAgIHlpZWxkIGl0ZW07CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5vbGRDYWNoZSkgewogICAgICAgICAgICBjb25zdCBba2V5XSA9IGl0ZW07CiAgICAgICAgICAgIGlmICghdGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICAgIHlpZWxkIGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0IHNpemUoKSB7CiAgICAgICAgICBsZXQgb2xkQ2FjaGVTaXplID0gMDsKICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMub2xkQ2FjaGUua2V5cygpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5jYWNoZS5oYXMoa2V5KSkgewogICAgICAgICAgICAgIG9sZENhY2hlU2l6ZSsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSArIG9sZENhY2hlU2l6ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IFF1aWNrTFJVOwogICAgfQogIH0pOwoKICAvLyAoZGlzYWJsZWQpOm5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vbG9jYWxGaWxlCiAgdmFyIHJlcXVpcmVfbG9jYWxGaWxlID0gX19jb21tb25KUyh7CiAgICAiKGRpc2FibGVkKTpub2RlX21vZHVsZXMvLnBucG0vZ2VuZXJpYy1maWxlaGFuZGxlQDMuMS4xL25vZGVfbW9kdWxlcy9nZW5lcmljLWZpbGVoYW5kbGUvZXNtL2xvY2FsRmlsZSIoKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMKICB2YXIgcmVxdWlyZV9jb21tb24gPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL2NvbW1vbi5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBUWVBFRF9PSyA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgVWludDE2QXJyYXkgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAidW5kZWZpbmVkIjsKICAgICAgZnVuY3Rpb24gX2hhcyhvYmosIGtleSkgewogICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmFzc2lnbiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7CiAgICAgICAgICBpZiAoIXNvdXJjZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNvdXJjZSArICJtdXN0IGJlIG5vbi1vYmplY3QiKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7CiAgICAgICAgICAgIGlmIChfaGFzKHNvdXJjZSwgcCkpIHsKICAgICAgICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfTsKICAgICAgZXhwb3J0czIuc2hyaW5rQnVmID0gZnVuY3Rpb24oYnVmLCBzaXplKSB7CiAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPT09IHNpemUpIHsKICAgICAgICAgIHJldHVybiBidWY7CiAgICAgICAgfQogICAgICAgIGlmIChidWYuc3ViYXJyYXkpIHsKICAgICAgICAgIHJldHVybiBidWYuc3ViYXJyYXkoMCwgc2l6ZSk7CiAgICAgICAgfQogICAgICAgIGJ1Zi5sZW5ndGggPSBzaXplOwogICAgICAgIHJldHVybiBidWY7CiAgICAgIH07CiAgICAgIHZhciBmblR5cGVkID0gewogICAgICAgIGFycmF5U2V0OiBmdW5jdGlvbihkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2ZmcykgewogICAgICAgICAgaWYgKHNyYy5zdWJhcnJheSAmJiBkZXN0LnN1YmFycmF5KSB7CiAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNfb2Zmcywgc3JjX29mZnMgKyBsZW4pLCBkZXN0X29mZnMpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uKGNodW5rcykgewogICAgICAgICAgdmFyIGksIGwsIGxlbiwgcG9zLCBjaHVuaywgcmVzdWx0OwogICAgICAgICAgbGVuID0gMDsKICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGxlbiArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBjaHVuayA9IGNodW5rc1tpXTsKICAgICAgICAgICAgcmVzdWx0LnNldChjaHVuaywgcG9zKTsKICAgICAgICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgZm5VbnR5cGVkID0gewogICAgICAgIGFycmF5U2V0OiBmdW5jdGlvbihkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2ZmcykgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbihjaHVua3MpIHsKICAgICAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGNodW5rcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHBvcnRzMi5zZXRUeXBlZCA9IGZ1bmN0aW9uKG9uKSB7CiAgICAgICAgaWYgKG9uKSB7CiAgICAgICAgICBleHBvcnRzMi5CdWY4ID0gVWludDhBcnJheTsKICAgICAgICAgIGV4cG9ydHMyLkJ1ZjE2ID0gVWludDE2QXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5CdWYzMiA9IEludDMyQXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5hc3NpZ24oZXhwb3J0czIsIGZuVHlwZWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHBvcnRzMi5CdWY4ID0gQXJyYXk7CiAgICAgICAgICBleHBvcnRzMi5CdWYxNiA9IEFycmF5OwogICAgICAgICAgZXhwb3J0czIuQnVmMzIgPSBBcnJheTsKICAgICAgICAgIGV4cG9ydHMyLmFzc2lnbihleHBvcnRzMiwgZm5VbnR5cGVkKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLnNldFR5cGVkKFRZUEVEX09LKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3RyZWVzLmpzCiAgdmFyIHJlcXVpcmVfdHJlZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvdHJlZXMuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgWl9GSVhFRCA9IDQ7CiAgICAgIHZhciBaX0JJTkFSWSA9IDA7CiAgICAgIHZhciBaX1RFWFQgPSAxOwogICAgICB2YXIgWl9VTktOT1dOID0gMjsKICAgICAgZnVuY3Rpb24gemVybyhidWYpIHsKICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1sZW4gPj0gMCkgewogICAgICAgICAgYnVmW2xlbl0gPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgU1RPUkVEX0JMT0NLID0gMDsKICAgICAgdmFyIFNUQVRJQ19UUkVFUyA9IDE7CiAgICAgIHZhciBEWU5fVFJFRVMgPSAyOwogICAgICB2YXIgTUlOX01BVENIID0gMzsKICAgICAgdmFyIE1BWF9NQVRDSCA9IDI1ODsKICAgICAgdmFyIExFTkdUSF9DT0RFUyA9IDI5OwogICAgICB2YXIgTElURVJBTFMgPSAyNTY7CiAgICAgIHZhciBMX0NPREVTID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTOwogICAgICB2YXIgRF9DT0RFUyA9IDMwOwogICAgICB2YXIgQkxfQ09ERVMgPSAxOTsKICAgICAgdmFyIEhFQVBfU0laRSA9IDIgKiBMX0NPREVTICsgMTsKICAgICAgdmFyIE1BWF9CSVRTID0gMTU7CiAgICAgIHZhciBCdWZfc2l6ZSA9IDE2OwogICAgICB2YXIgTUFYX0JMX0JJVFMgPSA3OwogICAgICB2YXIgRU5EX0JMT0NLID0gMjU2OwogICAgICB2YXIgUkVQXzNfNiA9IDE2OwogICAgICB2YXIgUkVQWl8zXzEwID0gMTc7CiAgICAgIHZhciBSRVBaXzExXzEzOCA9IDE4OwogICAgICB2YXIgZXh0cmFfbGJpdHMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMF07CiAgICAgIHZhciBleHRyYV9kYml0cyA9IFswLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMywgMTNdOwogICAgICB2YXIgZXh0cmFfYmxiaXRzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDddOwogICAgICB2YXIgYmxfb3JkZXIgPSBbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV07CiAgICAgIHZhciBESVNUX0NPREVfTEVOID0gNTEyOwogICAgICB2YXIgc3RhdGljX2x0cmVlID0gbmV3IEFycmF5KChMX0NPREVTICsgMikgKiAyKTsKICAgICAgemVybyhzdGF0aWNfbHRyZWUpOwogICAgICB2YXIgc3RhdGljX2R0cmVlID0gbmV3IEFycmF5KERfQ09ERVMgKiAyKTsKICAgICAgemVybyhzdGF0aWNfZHRyZWUpOwogICAgICB2YXIgX2Rpc3RfY29kZSA9IG5ldyBBcnJheShESVNUX0NPREVfTEVOKTsKICAgICAgemVybyhfZGlzdF9jb2RlKTsKICAgICAgdmFyIF9sZW5ndGhfY29kZSA9IG5ldyBBcnJheShNQVhfTUFUQ0ggLSBNSU5fTUFUQ0ggKyAxKTsKICAgICAgemVybyhfbGVuZ3RoX2NvZGUpOwogICAgICB2YXIgYmFzZV9sZW5ndGggPSBuZXcgQXJyYXkoTEVOR1RIX0NPREVTKTsKICAgICAgemVybyhiYXNlX2xlbmd0aCk7CiAgICAgIHZhciBiYXNlX2Rpc3QgPSBuZXcgQXJyYXkoRF9DT0RFUyk7CiAgICAgIHplcm8oYmFzZV9kaXN0KTsKICAgICAgZnVuY3Rpb24gU3RhdGljVHJlZURlc2Moc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7CiAgICAgICAgdGhpcy5zdGF0aWNfdHJlZSA9IHN0YXRpY190cmVlOwogICAgICAgIHRoaXMuZXh0cmFfYml0cyA9IGV4dHJhX2JpdHM7CiAgICAgICAgdGhpcy5leHRyYV9iYXNlID0gZXh0cmFfYmFzZTsKICAgICAgICB0aGlzLmVsZW1zID0gZWxlbXM7CiAgICAgICAgdGhpcy5tYXhfbGVuZ3RoID0gbWF4X2xlbmd0aDsKICAgICAgICB0aGlzLmhhc19zdHJlZSA9IHN0YXRpY190cmVlICYmIHN0YXRpY190cmVlLmxlbmd0aDsKICAgICAgfQogICAgICB2YXIgc3RhdGljX2xfZGVzYzsKICAgICAgdmFyIHN0YXRpY19kX2Rlc2M7CiAgICAgIHZhciBzdGF0aWNfYmxfZGVzYzsKICAgICAgZnVuY3Rpb24gVHJlZURlc2MoZHluX3RyZWUsIHN0YXRfZGVzYykgewogICAgICAgIHRoaXMuZHluX3RyZWUgPSBkeW5fdHJlZTsKICAgICAgICB0aGlzLm1heF9jb2RlID0gMDsKICAgICAgICB0aGlzLnN0YXRfZGVzYyA9IHN0YXRfZGVzYzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkX2NvZGUoZGlzdCkgewogICAgICAgIHJldHVybiBkaXN0IDwgMjU2ID8gX2Rpc3RfY29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2ICsgKGRpc3QgPj4+IDcpXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwdXRfc2hvcnQocywgdykgewogICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gdyAmIDI1NTsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHcgPj4+IDggJiAyNTU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHsKICAgICAgICBpZiAocy5iaV92YWxpZCA+IEJ1Zl9zaXplIC0gbGVuZ3RoKSB7CiAgICAgICAgICBzLmJpX2J1ZiB8PSB2YWx1ZSA8PCBzLmJpX3ZhbGlkICYgNjU1MzU7CiAgICAgICAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgICAgICAgcy5iaV9idWYgPSB2YWx1ZSA+PiBCdWZfc2l6ZSAtIHMuYmlfdmFsaWQ7CiAgICAgICAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzLmJpX2J1ZiB8PSB2YWx1ZSA8PCBzLmJpX3ZhbGlkICYgNjU1MzU7CiAgICAgICAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF9jb2RlKHMsIGMsIHRyZWUpIHsKICAgICAgICBzZW5kX2JpdHMocywgdHJlZVtjICogMl0sIHRyZWVbYyAqIDIgKyAxXSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmlfcmV2ZXJzZShjb2RlLCBsZW4pIHsKICAgICAgICB2YXIgcmVzID0gMDsKICAgICAgICBkbyB7CiAgICAgICAgICByZXMgfD0gY29kZSAmIDE7CiAgICAgICAgICBjb2RlID4+Pj0gMTsKICAgICAgICAgIHJlcyA8PD0gMTsKICAgICAgICB9IHdoaWxlICgtLWxlbiA+IDApOwogICAgICAgIHJldHVybiByZXMgPj4+IDE7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYmlfZmx1c2gocykgewogICAgICAgIGlmIChzLmJpX3ZhbGlkID09PSAxNikgewogICAgICAgICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgICAgICAgIHMuYmlfYnVmID0gMDsKICAgICAgICAgIHMuYmlfdmFsaWQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAocy5iaV92YWxpZCA+PSA4KSB7CiAgICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmICYgMjU1OwogICAgICAgICAgcy5iaV9idWYgPj49IDg7CiAgICAgICAgICBzLmJpX3ZhbGlkIC09IDg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdlbl9iaXRsZW4ocywgZGVzYykgewogICAgICAgIHZhciB0cmVlID0gZGVzYy5keW5fdHJlZTsKICAgICAgICB2YXIgbWF4X2NvZGUgPSBkZXNjLm1heF9jb2RlOwogICAgICAgIHZhciBzdHJlZSA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogICAgICAgIHZhciBoYXNfc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgICAgICAgdmFyIGV4dHJhID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYml0czsKICAgICAgICB2YXIgYmFzZSA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2Jhc2U7CiAgICAgICAgdmFyIG1heF9sZW5ndGggPSBkZXNjLnN0YXRfZGVzYy5tYXhfbGVuZ3RoOwogICAgICAgIHZhciBoOwogICAgICAgIHZhciBuLCBtOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciB4Yml0czsKICAgICAgICB2YXIgZjsKICAgICAgICB2YXIgb3ZlcmZsb3cgPSAwOwogICAgICAgIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgICAgICAgcy5ibF9jb3VudFtiaXRzXSA9IDA7CiAgICAgICAgfQogICAgICAgIHRyZWVbcy5oZWFwW3MuaGVhcF9tYXhdICogMiArIDFdID0gMDsKICAgICAgICBmb3IgKGggPSBzLmhlYXBfbWF4ICsgMTsgaCA8IEhFQVBfU0laRTsgaCsrKSB7CiAgICAgICAgICBuID0gcy5oZWFwW2hdOwogICAgICAgICAgYml0cyA9IHRyZWVbdHJlZVtuICogMiArIDFdICogMiArIDFdICsgMTsKICAgICAgICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkgewogICAgICAgICAgICBiaXRzID0gbWF4X2xlbmd0aDsKICAgICAgICAgICAgb3ZlcmZsb3crKzsKICAgICAgICAgIH0KICAgICAgICAgIHRyZWVbbiAqIDIgKyAxXSA9IGJpdHM7CiAgICAgICAgICBpZiAobiA+IG1heF9jb2RlKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgcy5ibF9jb3VudFtiaXRzXSsrOwogICAgICAgICAgeGJpdHMgPSAwOwogICAgICAgICAgaWYgKG4gPj0gYmFzZSkgewogICAgICAgICAgICB4Yml0cyA9IGV4dHJhW24gLSBiYXNlXTsKICAgICAgICAgIH0KICAgICAgICAgIGYgPSB0cmVlW24gKiAyXTsKICAgICAgICAgIHMub3B0X2xlbiArPSBmICogKGJpdHMgKyB4Yml0cyk7CiAgICAgICAgICBpZiAoaGFzX3N0cmVlKSB7CiAgICAgICAgICAgIHMuc3RhdGljX2xlbiArPSBmICogKHN0cmVlW24gKiAyICsgMV0gKyB4Yml0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvdmVyZmxvdyA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBkbyB7CiAgICAgICAgICBiaXRzID0gbWF4X2xlbmd0aCAtIDE7CiAgICAgICAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgewogICAgICAgICAgICBiaXRzLS07CiAgICAgICAgICB9CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHNdLS07CiAgICAgICAgICBzLmJsX2NvdW50W2JpdHMgKyAxXSArPSAyOwogICAgICAgICAgcy5ibF9jb3VudFttYXhfbGVuZ3RoXS0tOwogICAgICAgICAgb3ZlcmZsb3cgLT0gMjsKICAgICAgICB9IHdoaWxlIChvdmVyZmxvdyA+IDApOwogICAgICAgIGZvciAoYml0cyA9IG1heF9sZW5ndGg7IGJpdHMgIT09IDA7IGJpdHMtLSkgewogICAgICAgICAgbiA9IHMuYmxfY291bnRbYml0c107CiAgICAgICAgICB3aGlsZSAobiAhPT0gMCkgewogICAgICAgICAgICBtID0gcy5oZWFwWy0taF07CiAgICAgICAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHJlZVttICogMiArIDFdICE9PSBiaXRzKSB7CiAgICAgICAgICAgICAgcy5vcHRfbGVuICs9IChiaXRzIC0gdHJlZVttICogMiArIDFdKSAqIHRyZWVbbSAqIDJdOwogICAgICAgICAgICAgIHRyZWVbbSAqIDIgKyAxXSA9IGJpdHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbi0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KSB7CiAgICAgICAgdmFyIG5leHRfY29kZSA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOwogICAgICAgIHZhciBjb2RlID0gMDsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgbjsKICAgICAgICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgICAgICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSBjb2RlICsgYmxfY291bnRbYml0cyAtIDFdIDw8IDE7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgICAgICAgdmFyIGxlbiA9IHRyZWVbbiAqIDIgKyAxXTsKICAgICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB0cmVlW24gKiAyXSA9IGJpX3JldmVyc2UobmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdHJfc3RhdGljX2luaXQoKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIGJpdHM7CiAgICAgICAgdmFyIGxlbmd0aDsKICAgICAgICB2YXIgY29kZTsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTsKICAgICAgICBsZW5ndGggPSAwOwogICAgICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHsKICAgICAgICAgIGJhc2VfbGVuZ3RoW2NvZGVdID0gbGVuZ3RoOwogICAgICAgICAgZm9yIChuID0gMDsgbiA8IDEgPDwgZXh0cmFfbGJpdHNbY29kZV07IG4rKykgewogICAgICAgICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoKytdID0gY29kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX2xlbmd0aF9jb2RlW2xlbmd0aCAtIDFdID0gY29kZTsKICAgICAgICBkaXN0ID0gMDsKICAgICAgICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgMTY7IGNvZGUrKykgewogICAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDsKICAgICAgICAgIGZvciAobiA9IDA7IG4gPCAxIDw8IGV4dHJhX2RiaXRzW2NvZGVdOyBuKyspIHsKICAgICAgICAgICAgX2Rpc3RfY29kZVtkaXN0KytdID0gY29kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGlzdCA+Pj0gNzsKICAgICAgICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykgewogICAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdCA8PCA3OwogICAgICAgICAgZm9yIChuID0gMDsgbiA8IDEgPDwgZXh0cmFfZGJpdHNbY29kZV0gLSA3OyBuKyspIHsKICAgICAgICAgICAgX2Rpc3RfY29kZVsyNTYgKyBkaXN0KytdID0gY29kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICAgICAgICBibF9jb3VudFtiaXRzXSA9IDA7CiAgICAgICAgfQogICAgICAgIG4gPSAwOwogICAgICAgIHdoaWxlIChuIDw9IDE0MykgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA4OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbOF0rKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4gPD0gMjU1KSB7CiAgICAgICAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXSA9IDk7CiAgICAgICAgICBuKys7CiAgICAgICAgICBibF9jb3VudFs5XSsrOwogICAgICAgIH0KICAgICAgICB3aGlsZSAobiA8PSAyNzkpIHsKICAgICAgICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdID0gNzsKICAgICAgICAgIG4rKzsKICAgICAgICAgIGJsX2NvdW50WzddKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChuIDw9IDI4NykgewogICAgICAgICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0gPSA4OwogICAgICAgICAgbisrOwogICAgICAgICAgYmxfY291bnRbOF0rKzsKICAgICAgICB9CiAgICAgICAgZ2VuX2NvZGVzKHN0YXRpY19sdHJlZSwgTF9DT0RFUyArIDEsIGJsX2NvdW50KTsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzdGF0aWNfZHRyZWVbbiAqIDIgKyAxXSA9IDU7CiAgICAgICAgICBzdGF0aWNfZHRyZWVbbiAqIDJdID0gYmlfcmV2ZXJzZShuLCA1KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljX2xfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfbHRyZWUsIGV4dHJhX2xiaXRzLCBMSVRFUkFMUyArIDEsIExfQ09ERVMsIE1BWF9CSVRTKTsKICAgICAgICBzdGF0aWNfZF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMsIDAsIERfQ09ERVMsIE1BWF9CSVRTKTsKICAgICAgICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgQkxfQ09ERVMsIE1BWF9CTF9CSVRTKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbml0X2Jsb2NrKHMpIHsKICAgICAgICB2YXIgbjsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzLmR5bl9sdHJlZVtuICogMl0gPSAwOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7CiAgICAgICAgICBzLmR5bl9kdHJlZVtuICogMl0gPSAwOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDwgQkxfQ09ERVM7IG4rKykgewogICAgICAgICAgcy5ibF90cmVlW24gKiAyXSA9IDA7CiAgICAgICAgfQogICAgICAgIHMuZHluX2x0cmVlW0VORF9CTE9DSyAqIDJdID0gMTsKICAgICAgICBzLm9wdF9sZW4gPSBzLnN0YXRpY19sZW4gPSAwOwogICAgICAgIHMubGFzdF9saXQgPSBzLm1hdGNoZXMgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGJpX3dpbmR1cChzKSB7CiAgICAgICAgaWYgKHMuYmlfdmFsaWQgPiA4KSB7CiAgICAgICAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgICAgIH0gZWxzZSBpZiAocy5iaV92YWxpZCA+IDApIHsKICAgICAgICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWY7CiAgICAgICAgfQogICAgICAgIHMuYmlfYnVmID0gMDsKICAgICAgICBzLmJpX3ZhbGlkID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBjb3B5X2Jsb2NrKHMsIGJ1ZiwgbGVuLCBoZWFkZXIpIHsKICAgICAgICBiaV93aW5kdXAocyk7CiAgICAgICAgaWYgKGhlYWRlcikgewogICAgICAgICAgcHV0X3Nob3J0KHMsIGxlbik7CiAgICAgICAgICBwdXRfc2hvcnQocywgfmxlbik7CiAgICAgICAgfQogICAgICAgIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTsKICAgICAgICBzLnBlbmRpbmcgKz0gbGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIHsKICAgICAgICB2YXIgX24yID0gbiAqIDI7CiAgICAgICAgdmFyIF9tMiA9IG0gKiAyOwogICAgICAgIHJldHVybiB0cmVlW19uMl0gPCB0cmVlW19tMl0gfHwgdHJlZVtfbjJdID09PSB0cmVlW19tMl0gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcHFkb3duaGVhcChzLCB0cmVlLCBrKSB7CiAgICAgICAgdmFyIHYgPSBzLmhlYXBba107CiAgICAgICAgdmFyIGogPSBrIDw8IDE7CiAgICAgICAgd2hpbGUgKGogPD0gcy5oZWFwX2xlbikgewogICAgICAgICAgaWYgKGogPCBzLmhlYXBfbGVuICYmIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkgewogICAgICAgICAgICBqKys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdOwogICAgICAgICAgayA9IGo7CiAgICAgICAgICBqIDw8PSAxOwogICAgICAgIH0KICAgICAgICBzLmhlYXBba10gPSB2OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNvbXByZXNzX2Jsb2NrKHMsIGx0cmVlLCBkdHJlZSkgewogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBsYzsKICAgICAgICB2YXIgbHggPSAwOwogICAgICAgIHZhciBjb2RlOwogICAgICAgIHZhciBleHRyYTsKICAgICAgICBpZiAocy5sYXN0X2xpdCAhPT0gMCkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBkaXN0ID0gcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgbHggKiAyXSA8PCA4IHwgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgbHggKiAyICsgMV07CiAgICAgICAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdOwogICAgICAgICAgICBseCsrOwogICAgICAgICAgICBpZiAoZGlzdCA9PT0gMCkgewogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBsYywgbHRyZWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdOwogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjb2RlICsgTElURVJBTFMgKyAxLCBsdHJlZSk7CiAgICAgICAgICAgICAgZXh0cmEgPSBleHRyYV9sYml0c1tjb2RlXTsKICAgICAgICAgICAgICBpZiAoZXh0cmEgIT09IDApIHsKICAgICAgICAgICAgICAgIGxjIC09IGJhc2VfbGVuZ3RoW2NvZGVdOwogICAgICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGxjLCBleHRyYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRpc3QtLTsKICAgICAgICAgICAgICBjb2RlID0gZF9jb2RlKGRpc3QpOwogICAgICAgICAgICAgIHNlbmRfY29kZShzLCBjb2RlLCBkdHJlZSk7CiAgICAgICAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTsKICAgICAgICAgICAgICBpZiAoZXh0cmEgIT09IDApIHsKICAgICAgICAgICAgICAgIGRpc3QgLT0gYmFzZV9kaXN0W2NvZGVdOwogICAgICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGRpc3QsIGV4dHJhKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gd2hpbGUgKGx4IDwgcy5sYXN0X2xpdCk7CiAgICAgICAgfQogICAgICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBidWlsZF90cmVlKHMsIGRlc2MpIHsKICAgICAgICB2YXIgdHJlZSA9IGRlc2MuZHluX3RyZWU7CiAgICAgICAgdmFyIHN0cmVlID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7CiAgICAgICAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTsKICAgICAgICB2YXIgZWxlbXMgPSBkZXNjLnN0YXRfZGVzYy5lbGVtczsKICAgICAgICB2YXIgbiwgbTsKICAgICAgICB2YXIgbWF4X2NvZGUgPSAtMTsKICAgICAgICB2YXIgbm9kZTsKICAgICAgICBzLmhlYXBfbGVuID0gMDsKICAgICAgICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFOwogICAgICAgIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7CiAgICAgICAgICBpZiAodHJlZVtuICogMl0gIT09IDApIHsKICAgICAgICAgICAgcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA9IG47CiAgICAgICAgICAgIHMuZGVwdGhbbl0gPSAwOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJlZVtuICogMiArIDFdID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2hpbGUgKHMuaGVhcF9sZW4gPCAyKSB7CiAgICAgICAgICBub2RlID0gcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMDsKICAgICAgICAgIHRyZWVbbm9kZSAqIDJdID0gMTsKICAgICAgICAgIHMuZGVwdGhbbm9kZV0gPSAwOwogICAgICAgICAgcy5vcHRfbGVuLS07CiAgICAgICAgICBpZiAoaGFzX3N0cmVlKSB7CiAgICAgICAgICAgIHMuc3RhdGljX2xlbiAtPSBzdHJlZVtub2RlICogMiArIDFdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZXNjLm1heF9jb2RlID0gbWF4X2NvZGU7CiAgICAgICAgZm9yIChuID0gcy5oZWFwX2xlbiA+PiAxOyBuID49IDE7IG4tLSkgewogICAgICAgICAgcHFkb3duaGVhcChzLCB0cmVlLCBuKTsKICAgICAgICB9CiAgICAgICAgbm9kZSA9IGVsZW1zOwogICAgICAgIGRvIHsKICAgICAgICAgIG4gPSBzLmhlYXBbMV07CiAgICAgICAgICBzLmhlYXBbMV0gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTsKICAgICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwgMSk7CiAgICAgICAgICBtID0gcy5oZWFwWzFdOwogICAgICAgICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOwogICAgICAgICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBtOwogICAgICAgICAgdHJlZVtub2RlICogMl0gPSB0cmVlW24gKiAyXSArIHRyZWVbbSAqIDJdOwogICAgICAgICAgcy5kZXB0aFtub2RlXSA9IChzLmRlcHRoW25dID49IHMuZGVwdGhbbV0gPyBzLmRlcHRoW25dIDogcy5kZXB0aFttXSkgKyAxOwogICAgICAgICAgdHJlZVtuICogMiArIDFdID0gdHJlZVttICogMiArIDFdID0gbm9kZTsKICAgICAgICAgIHMuaGVhcFsxXSA9IG5vZGUrKzsKICAgICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwgMSk7CiAgICAgICAgfSB3aGlsZSAocy5oZWFwX2xlbiA+PSAyKTsKICAgICAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IHMuaGVhcFsxXTsKICAgICAgICBnZW5fYml0bGVuKHMsIGRlc2MpOwogICAgICAgIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgcy5ibF9jb3VudCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2Nhbl90cmVlKHMsIHRyZWUsIG1heF9jb2RlKSB7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIHByZXZsZW4gPSAtMTsKICAgICAgICB2YXIgY3VybGVuOwogICAgICAgIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdOwogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgdmFyIG1heF9jb3VudCA9IDc7CiAgICAgICAgdmFyIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgIG1heF9jb3VudCA9IDEzODsKICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgfQogICAgICAgIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0gPSA2NTUzNTsKICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICAgIGN1cmxlbiA9IG5leHRsZW47CiAgICAgICAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdOwogICAgICAgICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkgewogICAgICAgICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0gKz0gY291bnQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkgewogICAgICAgICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7CiAgICAgICAgICAgICAgcy5ibF90cmVlW2N1cmxlbiAqIDJdKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcy5ibF90cmVlW1JFUF8zXzYgKiAyXSsrOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkgewogICAgICAgICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuYmxfdHJlZVtSRVBaXzExXzEzOCAqIDJdKys7CiAgICAgICAgICB9CiAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgICBwcmV2bGVuID0gY3VybGVuOwogICAgICAgICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNjsKICAgICAgICAgICAgbWluX2NvdW50ID0gMzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1heF9jb3VudCA9IDc7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHNlbmRfdHJlZShzLCB0cmVlLCBtYXhfY29kZSkgewogICAgICAgIHZhciBuOwogICAgICAgIHZhciBwcmV2bGVuID0gLTE7CiAgICAgICAgdmFyIGN1cmxlbjsKICAgICAgICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXTsKICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgIHZhciBtYXhfY291bnQgPSA3OwogICAgICAgIHZhciBtaW5fY291bnQgPSA0OwogICAgICAgIGlmIChuZXh0bGVuID09PSAwKSB7CiAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgIH0KICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKICAgICAgICAgIGN1cmxlbiA9IG5leHRsZW47CiAgICAgICAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdOwogICAgICAgICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsKICAgICAgICAgICAgfSB3aGlsZSAoLS1jb3VudCAhPT0gMCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkgewogICAgICAgICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7CiAgICAgICAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsKICAgICAgICAgICAgICBjb3VudC0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpOwogICAgICAgICAgICBzZW5kX2JpdHMocywgY291bnQgLSAzLCAyKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHsKICAgICAgICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfM18xMCwgcy5ibF90cmVlKTsKICAgICAgICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kX2NvZGUocywgUkVQWl8xMV8xMzgsIHMuYmxfdHJlZSk7CiAgICAgICAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDExLCA3KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgIHByZXZsZW4gPSBjdXJsZW47CiAgICAgICAgICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgICAgICAgICBtYXhfY291bnQgPSAxMzg7CiAgICAgICAgICAgIG1pbl9jb3VudCA9IDM7CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICAgICAgICBtYXhfY291bnQgPSA2OwogICAgICAgICAgICBtaW5fY291bnQgPSAzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWF4X2NvdW50ID0gNzsKICAgICAgICAgICAgbWluX2NvdW50ID0gNDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYnVpbGRfYmxfdHJlZShzKSB7CiAgICAgICAgdmFyIG1heF9ibGluZGV4OwogICAgICAgIHNjYW5fdHJlZShzLCBzLmR5bl9sdHJlZSwgcy5sX2Rlc2MubWF4X2NvZGUpOwogICAgICAgIHNjYW5fdHJlZShzLCBzLmR5bl9kdHJlZSwgcy5kX2Rlc2MubWF4X2NvZGUpOwogICAgICAgIGJ1aWxkX3RyZWUocywgcy5ibF9kZXNjKTsKICAgICAgICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7CiAgICAgICAgICBpZiAocy5ibF90cmVlW2JsX29yZGVyW21heF9ibGluZGV4XSAqIDIgKyAxXSAhPT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5vcHRfbGVuICs9IDMgKiAobWF4X2JsaW5kZXggKyAxKSArIDUgKyA1ICsgNDsKICAgICAgICByZXR1cm4gbWF4X2JsaW5kZXg7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2VuZF9hbGxfdHJlZXMocywgbGNvZGVzLCBkY29kZXMsIGJsY29kZXMpIHsKICAgICAgICB2YXIgcmFuazsKICAgICAgICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsKICAgICAgICBzZW5kX2JpdHMocywgZGNvZGVzIC0gMSwgNSk7CiAgICAgICAgc2VuZF9iaXRzKHMsIGJsY29kZXMgLSA0LCA0KTsKICAgICAgICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7CiAgICAgICAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLCAzKTsKICAgICAgICB9CiAgICAgICAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsKICAgICAgICBzZW5kX3RyZWUocywgcy5keW5fZHRyZWUsIGRjb2RlcyAtIDEpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRldGVjdF9kYXRhX3R5cGUocykgewogICAgICAgIHZhciBibGFja19tYXNrID0gNDA5MzYyNDQ0NzsKICAgICAgICB2YXIgbjsKICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyssIGJsYWNrX21hc2sgPj4+PSAxKSB7CiAgICAgICAgICBpZiAoYmxhY2tfbWFzayAmIDEgJiYgcy5keW5fbHRyZWVbbiAqIDJdICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBaX0JJTkFSWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXSAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdICE9PSAwIHx8IHMuZHluX2x0cmVlWzEzICogMl0gIT09IDApIHsKICAgICAgICAgIHJldHVybiBaX1RFWFQ7CiAgICAgICAgfQogICAgICAgIGZvciAobiA9IDMyOyBuIDwgTElURVJBTFM7IG4rKykgewogICAgICAgICAgaWYgKHMuZHluX2x0cmVlW24gKiAyXSAhPT0gMCkgewogICAgICAgICAgICByZXR1cm4gWl9URVhUOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gWl9CSU5BUlk7CiAgICAgIH0KICAgICAgdmFyIHN0YXRpY19pbml0X2RvbmUgPSBmYWxzZTsKICAgICAgZnVuY3Rpb24gX3RyX2luaXQocykgewogICAgICAgIGlmICghc3RhdGljX2luaXRfZG9uZSkgewogICAgICAgICAgdHJfc3RhdGljX2luaXQoKTsKICAgICAgICAgIHN0YXRpY19pbml0X2RvbmUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBzLmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7CiAgICAgICAgcy5kX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5keW5fZHRyZWUsIHN0YXRpY19kX2Rlc2MpOwogICAgICAgIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTsKICAgICAgICBzLmJpX2J1ZiA9IDA7CiAgICAgICAgcy5iaV92YWxpZCA9IDA7CiAgICAgICAgaW5pdF9ibG9jayhzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkgewogICAgICAgIHNlbmRfYml0cyhzLCAoU1RPUkVEX0JMT0NLIDw8IDEpICsgKGxhc3QgPyAxIDogMCksIDMpOwogICAgICAgIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfYWxpZ24ocykgewogICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVMgPDwgMSwgMyk7CiAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTsKICAgICAgICBiaV9mbHVzaChzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KSB7CiAgICAgICAgdmFyIG9wdF9sZW5iLCBzdGF0aWNfbGVuYjsKICAgICAgICB2YXIgbWF4X2JsaW5kZXggPSAwOwogICAgICAgIGlmIChzLmxldmVsID4gMCkgewogICAgICAgICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikgewogICAgICAgICAgICBzLnN0cm0uZGF0YV90eXBlID0gZGV0ZWN0X2RhdGFfdHlwZShzKTsKICAgICAgICAgIH0KICAgICAgICAgIGJ1aWxkX3RyZWUocywgcy5sX2Rlc2MpOwogICAgICAgICAgYnVpbGRfdHJlZShzLCBzLmRfZGVzYyk7CiAgICAgICAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7CiAgICAgICAgICBvcHRfbGVuYiA9IHMub3B0X2xlbiArIDMgKyA3ID4+PiAzOwogICAgICAgICAgc3RhdGljX2xlbmIgPSBzLnN0YXRpY19sZW4gKyAzICsgNyA+Pj4gMzsKICAgICAgICAgIGlmIChzdGF0aWNfbGVuYiA8PSBvcHRfbGVuYikgewogICAgICAgICAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iID0gc3RvcmVkX2xlbiArIDU7CiAgICAgICAgfQogICAgICAgIGlmIChzdG9yZWRfbGVuICsgNCA8PSBvcHRfbGVuYiAmJiBidWYgIT09IC0xKSB7CiAgICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCk7CiAgICAgICAgfSBlbHNlIGlmIChzLnN0cmF0ZWd5ID09PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09PSBvcHRfbGVuYikgewogICAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVMgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7CiAgICAgICAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRfYml0cyhzLCAoRFlOX1RSRUVTIDw8IDEpICsgKGxhc3QgPyAxIDogMCksIDMpOwogICAgICAgICAgc2VuZF9hbGxfdHJlZXMocywgcy5sX2Rlc2MubWF4X2NvZGUgKyAxLCBzLmRfZGVzYy5tYXhfY29kZSArIDEsIG1heF9ibGluZGV4ICsgMSk7CiAgICAgICAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpOwogICAgICAgIH0KICAgICAgICBpbml0X2Jsb2NrKHMpOwogICAgICAgIGlmIChsYXN0KSB7CiAgICAgICAgICBiaV93aW5kdXAocyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIF90cl90YWxseShzLCBkaXN0LCBsYykgewogICAgICAgIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSA9IGRpc3QgPj4+IDggJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgcy5sYXN0X2xpdCAqIDIgKyAxXSA9IGRpc3QgJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDI1NTsKICAgICAgICBzLmxhc3RfbGl0Kys7CiAgICAgICAgaWYgKGRpc3QgPT09IDApIHsKICAgICAgICAgIHMuZHluX2x0cmVlW2xjICogMl0rKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcy5tYXRjaGVzKys7CiAgICAgICAgICBkaXN0LS07CiAgICAgICAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXSArIExJVEVSQUxTICsgMSkgKiAyXSsrOwogICAgICAgICAgcy5keW5fZHRyZWVbZF9jb2RlKGRpc3QpICogMl0rKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMubGFzdF9saXQgPT09IHMubGl0X2J1ZnNpemUgLSAxOwogICAgICB9CiAgICAgIGV4cG9ydHMyLl90cl9pbml0ID0gX3RyX2luaXQ7CiAgICAgIGV4cG9ydHMyLl90cl9zdG9yZWRfYmxvY2sgPSBfdHJfc3RvcmVkX2Jsb2NrOwogICAgICBleHBvcnRzMi5fdHJfZmx1c2hfYmxvY2sgPSBfdHJfZmx1c2hfYmxvY2s7CiAgICAgIGV4cG9ydHMyLl90cl90YWxseSA9IF90cl90YWxseTsKICAgICAgZXhwb3J0czIuX3RyX2FsaWduID0gX3RyX2FsaWduOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcwogIHZhciByZXF1aXJlX2FkbGVyMzIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIGFkbGVyMzIoYWRsZXIsIGJ1ZiwgbGVuLCBwb3MpIHsKICAgICAgICB2YXIgczEgPSBhZGxlciAmIDY1NTM1IHwgMCwgczIgPSBhZGxlciA+Pj4gMTYgJiA2NTUzNSB8IDAsIG4gPSAwOwogICAgICAgIHdoaWxlIChsZW4gIT09IDApIHsKICAgICAgICAgIG4gPSBsZW4gPiAyZTMgPyAyZTMgOiBsZW47CiAgICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgczEgPSBzMSArIGJ1Zltwb3MrK10gfCAwOwogICAgICAgICAgICBzMiA9IHMyICsgczEgfCAwOwogICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgIHMxICU9IDY1NTIxOwogICAgICAgICAgczIgJT0gNjU1MjE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzMSB8IHMyIDw8IDE2IHwgMDsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBhZGxlcjMyOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY3JjMzIuanMKICB2YXIgcmVxdWlyZV9jcmMzMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIG1ha2VUYWJsZSgpIHsKICAgICAgICB2YXIgYywgdGFibGUgPSBbXTsKICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICBjID0gbjsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgODsgaysrKSB7CiAgICAgICAgICAgIGMgPSBjICYgMSA/IDM5ODgyOTIzODQgXiBjID4+PiAxIDogYyA+Pj4gMTsKICAgICAgICAgIH0KICAgICAgICAgIHRhYmxlW25dID0gYzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgICB9CiAgICAgIHZhciBjcmNUYWJsZSA9IG1ha2VUYWJsZSgpOwogICAgICBmdW5jdGlvbiBjcmMzMihjcmMsIGJ1ZiwgbGVuLCBwb3MpIHsKICAgICAgICB2YXIgdCA9IGNyY1RhYmxlLCBlbmQgPSBwb3MgKyBsZW47CiAgICAgICAgY3JjIF49IC0xOwogICAgICAgIGZvciAodmFyIGkgPSBwb3M7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgY3JjID0gY3JjID4+PiA4IF4gdFsoY3JjIF4gYnVmW2ldKSAmIDI1NV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjcmMgXiAtMTsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBjcmMzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzCiAgdmFyIHJlcXVpcmVfbWVzc2FnZXMgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSB7CiAgICAgICAgMjogIm5lZWQgZGljdGlvbmFyeSIsCiAgICAgICAgMTogInN0cmVhbSBlbmQiLAogICAgICAgIDA6ICIiLAogICAgICAgICItMSI6ICJmaWxlIGVycm9yIiwKICAgICAgICAiLTIiOiAic3RyZWFtIGVycm9yIiwKICAgICAgICAiLTMiOiAiZGF0YSBlcnJvciIsCiAgICAgICAgIi00IjogImluc3VmZmljaWVudCBtZW1vcnkiLAogICAgICAgICItNSI6ICJidWZmZXIgZXJyb3IiLAogICAgICAgICItNiI6ICJpbmNvbXBhdGlibGUgdmVyc2lvbiIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMKICB2YXIgcmVxdWlyZV9kZWZsYXRlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgdHJlZXMgPSByZXF1aXJlX3RyZWVzKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMiA9IHJlcXVpcmVfY3JjMzIoKTsKICAgICAgdmFyIG1zZyA9IHJlcXVpcmVfbWVzc2FnZXMoKTsKICAgICAgdmFyIFpfTk9fRkxVU0ggPSAwOwogICAgICB2YXIgWl9QQVJUSUFMX0ZMVVNIID0gMTsKICAgICAgdmFyIFpfRlVMTF9GTFVTSCA9IDM7CiAgICAgIHZhciBaX0ZJTklTSCA9IDQ7CiAgICAgIHZhciBaX0JMT0NLID0gNTsKICAgICAgdmFyIFpfT0sgPSAwOwogICAgICB2YXIgWl9TVFJFQU1fRU5EID0gMTsKICAgICAgdmFyIFpfU1RSRUFNX0VSUk9SID0gLTI7CiAgICAgIHZhciBaX0RBVEFfRVJST1IgPSAtMzsKICAgICAgdmFyIFpfQlVGX0VSUk9SID0gLTU7CiAgICAgIHZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTsKICAgICAgdmFyIFpfRklMVEVSRUQgPSAxOwogICAgICB2YXIgWl9IVUZGTUFOX09OTFkgPSAyOwogICAgICB2YXIgWl9STEUgPSAzOwogICAgICB2YXIgWl9GSVhFRCA9IDQ7CiAgICAgIHZhciBaX0RFRkFVTFRfU1RSQVRFR1kgPSAwOwogICAgICB2YXIgWl9VTktOT1dOID0gMjsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICB2YXIgTUFYX01FTV9MRVZFTCA9IDk7CiAgICAgIHZhciBNQVhfV0JJVFMgPSAxNTsKICAgICAgdmFyIERFRl9NRU1fTEVWRUwgPSA4OwogICAgICB2YXIgTEVOR1RIX0NPREVTID0gMjk7CiAgICAgIHZhciBMSVRFUkFMUyA9IDI1NjsKICAgICAgdmFyIExfQ09ERVMgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7CiAgICAgIHZhciBEX0NPREVTID0gMzA7CiAgICAgIHZhciBCTF9DT0RFUyA9IDE5OwogICAgICB2YXIgSEVBUF9TSVpFID0gMiAqIExfQ09ERVMgKyAxOwogICAgICB2YXIgTUFYX0JJVFMgPSAxNTsKICAgICAgdmFyIE1JTl9NQVRDSCA9IDM7CiAgICAgIHZhciBNQVhfTUFUQ0ggPSAyNTg7CiAgICAgIHZhciBNSU5fTE9PS0FIRUFEID0gTUFYX01BVENIICsgTUlOX01BVENIICsgMTsKICAgICAgdmFyIFBSRVNFVF9ESUNUID0gMzI7CiAgICAgIHZhciBJTklUX1NUQVRFID0gNDI7CiAgICAgIHZhciBFWFRSQV9TVEFURSA9IDY5OwogICAgICB2YXIgTkFNRV9TVEFURSA9IDczOwogICAgICB2YXIgQ09NTUVOVF9TVEFURSA9IDkxOwogICAgICB2YXIgSENSQ19TVEFURSA9IDEwMzsKICAgICAgdmFyIEJVU1lfU1RBVEUgPSAxMTM7CiAgICAgIHZhciBGSU5JU0hfU1RBVEUgPSA2NjY7CiAgICAgIHZhciBCU19ORUVEX01PUkUgPSAxOwogICAgICB2YXIgQlNfQkxPQ0tfRE9ORSA9IDI7CiAgICAgIHZhciBCU19GSU5JU0hfU1RBUlRFRCA9IDM7CiAgICAgIHZhciBCU19GSU5JU0hfRE9ORSA9IDQ7CiAgICAgIHZhciBPU19DT0RFID0gMzsKICAgICAgZnVuY3Rpb24gZXJyKHN0cm0sIGVycm9yQ29kZSkgewogICAgICAgIHN0cm0ubXNnID0gbXNnW2Vycm9yQ29kZV07CiAgICAgICAgcmV0dXJuIGVycm9yQ29kZTsKICAgICAgfQogICAgICBmdW5jdGlvbiByYW5rKGYpIHsKICAgICAgICByZXR1cm4gKGYgPDwgMSkgLSAoZiA+IDQgPyA5IDogMCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gemVybyhidWYpIHsKICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1sZW4gPj0gMCkgewogICAgICAgICAgYnVmW2xlbl0gPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBmbHVzaF9wZW5kaW5nKHN0cm0pIHsKICAgICAgICB2YXIgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgdmFyIGxlbiA9IHMucGVuZGluZzsKICAgICAgICBpZiAobGVuID4gc3RybS5hdmFpbF9vdXQpIHsKICAgICAgICAgIGxlbiA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIH0KICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmdfb3V0LCBsZW4sIHN0cm0ubmV4dF9vdXQpOwogICAgICAgIHN0cm0ubmV4dF9vdXQgKz0gbGVuOwogICAgICAgIHMucGVuZGluZ19vdXQgKz0gbGVuOwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IGxlbjsKICAgICAgICBzdHJtLmF2YWlsX291dCAtPSBsZW47CiAgICAgICAgcy5wZW5kaW5nIC09IGxlbjsKICAgICAgICBpZiAocy5wZW5kaW5nID09PSAwKSB7CiAgICAgICAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmx1c2hfYmxvY2tfb25seShzLCBsYXN0KSB7CiAgICAgICAgdHJlZXMuX3RyX2ZsdXNoX2Jsb2NrKHMsIHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSwgcy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQsIGxhc3QpOwogICAgICAgIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0OwogICAgICAgIGZsdXNoX3BlbmRpbmcocy5zdHJtKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwdXRfYnl0ZShzLCBiKSB7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHB1dFNob3J0TVNCKHMsIGIpIHsKICAgICAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGIgPj4+IDggJiAyNTU7CiAgICAgICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiICYgMjU1OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJlYWRfYnVmKHN0cm0sIGJ1Ziwgc3RhcnQsIHNpemUpIHsKICAgICAgICB2YXIgbGVuID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBpZiAobGVuID4gc2l6ZSkgewogICAgICAgICAgbGVuID0gc2l6ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIHN0cm0uYXZhaWxfaW4gLT0gbGVuOwogICAgICAgIHV0aWxzLmFycmF5U2V0KGJ1Ziwgc3RybS5pbnB1dCwgc3RybS5uZXh0X2luLCBsZW4sIHN0YXJ0KTsKICAgICAgICBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAxKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpOwogICAgICAgIH0gZWxzZSBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAyKSB7CiAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X2luICs9IGxlbjsKICAgICAgICBzdHJtLnRvdGFsX2luICs9IGxlbjsKICAgICAgICByZXR1cm4gbGVuOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKSB7CiAgICAgICAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsKICAgICAgICB2YXIgc2NhbiA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgdmFyIG1hdGNoOwogICAgICAgIHZhciBsZW47CiAgICAgICAgdmFyIGJlc3RfbGVuID0gcy5wcmV2X2xlbmd0aDsKICAgICAgICB2YXIgbmljZV9tYXRjaCA9IHMubmljZV9tYXRjaDsKICAgICAgICB2YXIgbGltaXQgPSBzLnN0cnN0YXJ0ID4gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEID8gcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIHZhciB3bWFzayA9IHMud19tYXNrOwogICAgICAgIHZhciBwcmV2ID0gcy5wcmV2OwogICAgICAgIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIOwogICAgICAgIHZhciBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgIHZhciBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBzLmdvb2RfbWF0Y2gpIHsKICAgICAgICAgIGNoYWluX2xlbmd0aCA+Pj0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgbmljZV9tYXRjaCA9IHMubG9va2FoZWFkOwogICAgICAgIH0KICAgICAgICBkbyB7CiAgICAgICAgICBtYXRjaCA9IGN1cl9tYXRjaDsKICAgICAgICAgIGlmIChfd2luW21hdGNoICsgYmVzdF9sZW5dICE9PSBzY2FuX2VuZCB8fCBfd2luW21hdGNoICsgYmVzdF9sZW4gLSAxXSAhPT0gc2Nhbl9lbmQxIHx8IF93aW5bbWF0Y2hdICE9PSBfd2luW3NjYW5dIHx8IF93aW5bKyttYXRjaF0gIT09IF93aW5bc2NhbiArIDFdKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc2NhbiArPSAyOwogICAgICAgICAgbWF0Y2grKzsKICAgICAgICAgIGRvIHsKICAgICAgICAgIH0gd2hpbGUgKF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgc2NhbiA8IHN0cmVuZCk7CiAgICAgICAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7CiAgICAgICAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIOwogICAgICAgICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CiAgICAgICAgICAgIGJlc3RfbGVuID0gbGVuOwogICAgICAgICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FuX2VuZDEgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogICAgICAgICAgICBzY2FuX2VuZCA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApOwogICAgICAgIGlmIChiZXN0X2xlbiA8PSBzLmxvb2thaGVhZCkgewogICAgICAgICAgcmV0dXJuIGJlc3RfbGVuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5sb29rYWhlYWQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmlsbF93aW5kb3cocykgewogICAgICAgIHZhciBfd19zaXplID0gcy53X3NpemU7CiAgICAgICAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjsKICAgICAgICBkbyB7CiAgICAgICAgICBtb3JlID0gcy53aW5kb3dfc2l6ZSAtIHMubG9va2FoZWFkIC0gcy5zdHJzdGFydDsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHMud2luZG93LCBzLndpbmRvdywgX3dfc2l6ZSwgX3dfc2l6ZSwgMCk7CiAgICAgICAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7CiAgICAgICAgICAgIG4gPSBzLmhhc2hfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5oZWFkWy0tcF07CiAgICAgICAgICAgICAgcy5oZWFkW3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBuID0gX3dfc2l6ZTsKICAgICAgICAgICAgcCA9IG47CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBtID0gcy5wcmV2Wy0tcF07CiAgICAgICAgICAgICAgcy5wcmV2W3BdID0gbSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwOwogICAgICAgICAgICB9IHdoaWxlICgtLW4pOwogICAgICAgICAgICBtb3JlICs9IF93X3NpemU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX2luID09PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbiA9IHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCwgbW9yZSk7CiAgICAgICAgICBzLmxvb2thaGVhZCArPSBuOwogICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDsKICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3N0cl07CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICAgICAgICAgIHN0cisrOwogICAgICAgICAgICAgIHMuaW5zZXJ0LS07CiAgICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIG1heF9ibG9ja19zaXplID0gNjU1MzU7CiAgICAgICAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewogICAgICAgICAgbWF4X2Jsb2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1OwogICAgICAgIH0KICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDAgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTsKICAgICAgICAgIGlmIChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7CiAgICAgICAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDsKICAgICAgICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHsKICAgICAgICB2YXIgaGFzaF9oZWFkOwogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaGFzaF9oZWFkID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaGFzaF9oZWFkICE9PSAwICYmIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gcy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSBzLm1heF9sYXp5X21hdGNoICYmIHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoLS07CiAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgcy5zdHJzdGFydCsrOwogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdOwogICAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGhhc2hfaGVhZDsKICAgICAgICB2YXIgYmZsdXNoOwogICAgICAgIHZhciBtYXhfaW5zZXJ0OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2hfaGVhZCA9IDA7CiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7CiAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgfQogICAgICAgICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoOwogICAgICAgICAgcy5wcmV2X21hdGNoID0gcy5tYXRjaF9zdGFydDsKICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgIGlmIChoYXNoX2hlYWQgIT09IDAgJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiYgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSBzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7CiAgICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmIChzLnN0cmF0ZWd5ID09PSBaX0ZJTFRFUkVEIHx8IHMubWF0Y2hfbGVuZ3RoID09PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2KSkgewogICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHsKICAgICAgICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5wcmV2X2xlbmd0aCAtIDE7CiAgICAgICAgICAgIHMucHJldl9sZW5ndGggLT0gMjsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkgewogICAgICAgICAgICAgICAgcy5pbnNfaCA9IChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdOwogICAgICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAxOwogICAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7CiAgICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTsKICAgICAgICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogICAgICAgIH0KICAgICAgICBpZiAocy5sYXN0X2xpdCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkgewogICAgICAgIHZhciBiZmx1c2g7CiAgICAgICAgdmFyIHByZXY7CiAgICAgICAgdmFyIHNjYW4sIHN0cmVuZDsKICAgICAgICB2YXIgX3dpbiA9IHMud2luZG93OwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHsKICAgICAgICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxOwogICAgICAgICAgICBwcmV2ID0gX3dpbltzY2FuXTsKICAgICAgICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7CiAgICAgICAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDsKICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBzY2FuIDwgc3RyZW5kKTsKICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgICAgICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7CiAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7CiAgICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzLmluc2VydCA9IDA7CiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICAgICAgICB9CiAgICAgICAgaWYgKHMubGFzdF9saXQpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSB7CiAgICAgICAgdmFyIGJmbHVzaDsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTsKICAgICAgICAgIHMubG9va2FoZWFkLS07CiAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICBpZiAoYmZsdXNoKSB7CiAgICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgICAgICAgfQogICAgICAgIGlmIChzLmxhc3RfbGl0KSB7CiAgICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBCU19CTE9DS19ET05FOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHsKICAgICAgICB0aGlzLmdvb2RfbGVuZ3RoID0gZ29vZF9sZW5ndGg7CiAgICAgICAgdGhpcy5tYXhfbGF6eSA9IG1heF9sYXp5OwogICAgICAgIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDsKICAgICAgICB0aGlzLm1heF9jaGFpbiA9IG1heF9jaGFpbjsKICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jOwogICAgICB9CiAgICAgIHZhciBjb25maWd1cmF0aW9uX3RhYmxlOwogICAgICBjb25maWd1cmF0aW9uX3RhYmxlID0gWwogICAgICAgIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwKICAgICAgICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNiwgMzIsIDMyLCBkZWZsYXRlX2Zhc3QpLAogICAgICAgIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLAogICAgICAgIG5ldyBDb25maWcoOCwgMTYsIDMyLCAzMiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwKICAgICAgICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KQogICAgICBdOwogICAgICBmdW5jdGlvbiBsbV9pbml0KHMpIHsKICAgICAgICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplOwogICAgICAgIHplcm8ocy5oZWFkKTsKICAgICAgICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTsKICAgICAgICBzLmdvb2RfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmdvb2RfbGVuZ3RoOwogICAgICAgIHMubmljZV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGg7CiAgICAgICAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47CiAgICAgICAgcy5zdHJzdGFydCA9IDA7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7CiAgICAgICAgcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHMuaW5zZXJ0ID0gMDsKICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgICBzLmluc19oID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBEZWZsYXRlU3RhdGUoKSB7CiAgICAgICAgdGhpcy5zdHJtID0gbnVsbDsKICAgICAgICB0aGlzLnN0YXR1cyA9IDA7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGw7CiAgICAgICAgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICB0aGlzLnBlbmRpbmcgPSAwOwogICAgICAgIHRoaXMud3JhcCA9IDA7CiAgICAgICAgdGhpcy5nemhlYWQgPSBudWxsOwogICAgICAgIHRoaXMuZ3ppbmRleCA9IDA7CiAgICAgICAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOwogICAgICAgIHRoaXMubGFzdF9mbHVzaCA9IC0xOwogICAgICAgIHRoaXMud19zaXplID0gMDsKICAgICAgICB0aGlzLndfYml0cyA9IDA7CiAgICAgICAgdGhpcy53X21hc2sgPSAwOwogICAgICAgIHRoaXMud2luZG93ID0gbnVsbDsKICAgICAgICB0aGlzLndpbmRvd19zaXplID0gMDsKICAgICAgICB0aGlzLnByZXYgPSBudWxsOwogICAgICAgIHRoaXMuaGVhZCA9IG51bGw7CiAgICAgICAgdGhpcy5pbnNfaCA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NpemUgPSAwOwogICAgICAgIHRoaXMuaGFzaF9iaXRzID0gMDsKICAgICAgICB0aGlzLmhhc2hfbWFzayA9IDA7CiAgICAgICAgdGhpcy5oYXNoX3NoaWZ0ID0gMDsKICAgICAgICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5wcmV2X21hdGNoID0gMDsKICAgICAgICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgdGhpcy5zdHJzdGFydCA9IDA7CiAgICAgICAgdGhpcy5tYXRjaF9zdGFydCA9IDA7CiAgICAgICAgdGhpcy5sb29rYWhlYWQgPSAwOwogICAgICAgIHRoaXMucHJldl9sZW5ndGggPSAwOwogICAgICAgIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7CiAgICAgICAgdGhpcy5sZXZlbCA9IDA7CiAgICAgICAgdGhpcy5zdHJhdGVneSA9IDA7CiAgICAgICAgdGhpcy5nb29kX21hdGNoID0gMDsKICAgICAgICB0aGlzLm5pY2VfbWF0Y2ggPSAwOwogICAgICAgIHRoaXMuZHluX2x0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KEhFQVBfU0laRSAqIDIpOwogICAgICAgIHRoaXMuZHluX2R0cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogRF9DT0RFUyArIDEpICogMik7CiAgICAgICAgdGhpcy5ibF90cmVlID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpOwogICAgICAgIHplcm8odGhpcy5keW5fbHRyZWUpOwogICAgICAgIHplcm8odGhpcy5keW5fZHRyZWUpOwogICAgICAgIHplcm8odGhpcy5ibF90cmVlKTsKICAgICAgICB0aGlzLmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5kX2Rlc2MgPSBudWxsOwogICAgICAgIHRoaXMuYmxfZGVzYyA9IG51bGw7CiAgICAgICAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUyArIDEpOwogICAgICAgIHRoaXMuaGVhcCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOwogICAgICAgIHplcm8odGhpcy5oZWFwKTsKICAgICAgICB0aGlzLmhlYXBfbGVuID0gMDsKICAgICAgICB0aGlzLmhlYXBfbWF4ID0gMDsKICAgICAgICB0aGlzLmRlcHRoID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7CiAgICAgICAgemVybyh0aGlzLmRlcHRoKTsKICAgICAgICB0aGlzLmxfYnVmID0gMDsKICAgICAgICB0aGlzLmxpdF9idWZzaXplID0gMDsKICAgICAgICB0aGlzLmxhc3RfbGl0ID0gMDsKICAgICAgICB0aGlzLmRfYnVmID0gMDsKICAgICAgICB0aGlzLm9wdF9sZW4gPSAwOwogICAgICAgIHRoaXMuc3RhdGljX2xlbiA9IDA7CiAgICAgICAgdGhpcy5tYXRjaGVzID0gMDsKICAgICAgICB0aGlzLmluc2VydCA9IDA7CiAgICAgICAgdGhpcy5iaV9idWYgPSAwOwogICAgICAgIHRoaXMuYmlfdmFsaWQgPSAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkgewogICAgICAgIHZhciBzOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgICAgfQogICAgICAgIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IDA7CiAgICAgICAgc3RybS5kYXRhX3R5cGUgPSBaX1VOS05PV047CiAgICAgICAgcyA9IHN0cm0uc3RhdGU7CiAgICAgICAgcy5wZW5kaW5nID0gMDsKICAgICAgICBzLnBlbmRpbmdfb3V0ID0gMDsKICAgICAgICBpZiAocy53cmFwIDwgMCkgewogICAgICAgICAgcy53cmFwID0gLXMud3JhcDsKICAgICAgICB9CiAgICAgICAgcy5zdGF0dXMgPSBzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURTsKICAgICAgICBzdHJtLmFkbGVyID0gcy53cmFwID09PSAyID8gMCA6IDE7CiAgICAgICAgcy5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKICAgICAgICB0cmVlcy5fdHJfaW5pdChzKTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkgewogICAgICAgIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOwogICAgICAgIGlmIChyZXQgPT09IFpfT0spIHsKICAgICAgICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIHsKICAgICAgICBpZiAoIXN0cm0pIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgdmFyIHdyYXAgPSAxOwogICAgICAgIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7CiAgICAgICAgICBsZXZlbCA9IDY7CiAgICAgICAgfQogICAgICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewogICAgICAgICAgd3JhcCA9IDA7CiAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHsKICAgICAgICAgIHdyYXAgPSAyOwogICAgICAgICAgd2luZG93Qml0cyAtPSAxNjsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9PSBaX0RFRkxBVEVEIHx8IHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBpZiAod2luZG93Qml0cyA9PT0gOCkgewogICAgICAgICAgd2luZG93Qml0cyA9IDk7CiAgICAgICAgfQogICAgICAgIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpOwogICAgICAgIHN0cm0uc3RhdGUgPSBzOwogICAgICAgIHMuc3RybSA9IHN0cm07CiAgICAgICAgcy53cmFwID0gd3JhcDsKICAgICAgICBzLmd6aGVhZCA9IG51bGw7CiAgICAgICAgcy53X2JpdHMgPSB3aW5kb3dCaXRzOwogICAgICAgIHMud19zaXplID0gMSA8PCBzLndfYml0czsKICAgICAgICBzLndfbWFzayA9IHMud19zaXplIC0gMTsKICAgICAgICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNzsKICAgICAgICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7CiAgICAgICAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7CiAgICAgICAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBNSU5fTUFUQ0gpOwogICAgICAgIHMud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUgKiAyKTsKICAgICAgICBzLmhlYWQgPSBuZXcgdXRpbHMuQnVmMTYocy5oYXNoX3NpemUpOwogICAgICAgIHMucHJldiA9IG5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSk7CiAgICAgICAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgbWVtTGV2ZWwgKyA2OwogICAgICAgIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0OwogICAgICAgIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpOwogICAgICAgIHMuZF9idWYgPSAxICogcy5saXRfYnVmc2l6ZTsKICAgICAgICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7CiAgICAgICAgcy5sZXZlbCA9IGxldmVsOwogICAgICAgIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTsKICAgICAgICBzLm1ldGhvZCA9IG1ldGhvZDsKICAgICAgICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7CiAgICAgICAgcmV0dXJuIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHsKICAgICAgICB2YXIgb2xkX2ZsdXNoLCBzOwogICAgICAgIHZhciBiZWcsIHZhbDsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHwgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkgewogICAgICAgICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHMgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICghc3RybS5vdXRwdXQgfHwgIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCB8fCBzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBzdHJtLmF2YWlsX291dCA9PT0gMCA/IFpfQlVGX0VSUk9SIDogWl9TVFJFQU1fRVJST1IpOwogICAgICAgIH0KICAgICAgICBzLnN0cm0gPSBzdHJtOwogICAgICAgIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDsKICAgICAgICBzLmxhc3RfZmx1c2ggPSBmbHVzaDsKICAgICAgICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHsKICAgICAgICAgIGlmIChzLndyYXAgPT09IDIpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IDA7CiAgICAgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKICAgICAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKICAgICAgICAgICAgcHV0X2J5dGUocywgOCk7CiAgICAgICAgICAgIGlmICghcy5nemhlYWQpIHsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50ZXh0ID8gMSA6IDApICsgKHMuZ3poZWFkLmhjcmMgPyAyIDogMCkgKyAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICsgKCFzLmd6aGVhZC5uYW1lID8gMCA6IDgpICsgKCFzLmd6aGVhZC5jb21tZW50ID8gMCA6IDE2KSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSA+PiA4ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDE2ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KTsKICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6IHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgPyA0IDogMCk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAyNTUpOwogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5leHRyYSAmJiBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDI1NSk7CiAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCAmIDI1NSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nLCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcy5nemluZGV4ID0gMDsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IEVYVFJBX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgaGVhZGVyID0gWl9ERUZMQVRFRCArIChzLndfYml0cyAtIDggPDwgNCkgPDwgODsKICAgICAgICAgICAgdmFyIGxldmVsX2ZsYWdzID0gLTE7CiAgICAgICAgICAgIGlmIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyKSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPCA2KSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxOwogICAgICAgICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHsKICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhlYWRlciB8PSBsZXZlbF9mbGFncyA8PCA2OwogICAgICAgICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgewogICAgICAgICAgICAgIGhlYWRlciB8PSBQUkVTRVRfRElDVDsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIgKz0gMzEgLSBoZWFkZXIgJSAzMTsKICAgICAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBoZWFkZXIpOwogICAgICAgICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgewogICAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyICYgNjU1MzUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IEVYVFJBX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuZXh0cmEpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICB3aGlsZSAocy5nemluZGV4IDwgKHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDY1NTM1KSkgewogICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYVtzLmd6aW5kZXhdICYgMjU1KTsKICAgICAgICAgICAgICBzLmd6aW5kZXgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkgewogICAgICAgICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzLnN0YXR1cyA9PT0gTkFNRV9TVEFURSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLm5hbWUpIHsKICAgICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5uYW1lLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDI1NTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKICAgICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsID09PSAwKSB7CiAgICAgICAgICAgICAgcy5nemluZGV4ID0gMDsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBDT01NRU5UX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuY29tbWVudCkgewogICAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgICAgICAgIGJlZyA9IHMucGVuZGluZzsKICAgICAgICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgICAgICB2YWwgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMjU1OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YWwgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOwogICAgICAgICAgICB9IHdoaWxlICh2YWwgIT09IDApOwogICAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWwgPT09IDApIHsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAgICAgICAgICBpZiAocy5wZW5kaW5nICsgMiA+IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMucGVuZGluZyArIDIgPD0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDI1NSk7CiAgICAgICAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciA+PiA4ICYgMjU1KTsKICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gMDsKICAgICAgICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMucGVuZGluZyAhPT0gMCkgewogICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHJhbmsoZmx1c2gpIDw9IHJhbmsob2xkX2ZsdXNoKSAmJiBmbHVzaCAhPT0gWl9GSU5JU0gpIHsKICAgICAgICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpOwogICAgICAgIH0KICAgICAgICBpZiAocy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSB7CiAgICAgICAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cm0uYXZhaWxfaW4gIT09IDAgfHwgcy5sb29rYWhlYWQgIT09IDAgfHwgZmx1c2ggIT09IFpfTk9fRkxVU0ggJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkgewogICAgICAgICAgdmFyIGJzdGF0ZSA9IHMuc3RyYXRlZ3kgPT09IFpfSFVGRk1BTl9PTkxZID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6IHMuc3RyYXRlZ3kgPT09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDogY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKTsKICAgICAgICAgIGlmIChic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX0RPTkUpIHsKICAgICAgICAgICAgcy5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnN0YXRlID09PSBCU19ORUVEX01PUkUgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCkgewogICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChic3RhdGUgPT09IEJTX0JMT0NLX0RPTkUpIHsKICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHsKICAgICAgICAgICAgICB0cmVlcy5fdHJfYWxpZ24ocyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsKICAgICAgICAgICAgICB0cmVlcy5fdHJfc3RvcmVkX2Jsb2NrKHMsIDAsIDAsIGZhbHNlKTsKICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkgewogICAgICAgICAgICAgICAgemVybyhzLmhlYWQpOwogICAgICAgICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsKICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZmx1c2ggIT09IFpfRklOSVNIKSB7CiAgICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKHMud3JhcCA8PSAwKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRU5EOwogICAgICAgIH0KICAgICAgICBpZiAocy53cmFwID09PSAyKSB7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gOCAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyID4+IDE2ICYgMjU1KTsKICAgICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgPj4gMjQgJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luID4+IDggJiAyNTUpOwogICAgICAgICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiA+PiAxNiAmIDI1NSk7CiAgICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luID4+IDI0ICYgMjU1KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciA+Pj4gMTYpOwogICAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDY1NTM1KTsKICAgICAgICB9CiAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAgICAgICBpZiAocy53cmFwID4gMCkgewogICAgICAgICAgcy53cmFwID0gLXMud3JhcDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMucGVuZGluZyAhPT0gMCA/IFpfT0sgOiBaX1NUUkVBTV9FTkQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKSB7CiAgICAgICAgdmFyIHN0YXR1czsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdHVzID0gc3RybS5zdGF0ZS5zdGF0dXM7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gSU5JVF9TVEFURSAmJiBzdGF0dXMgIT09IEVYVFJBX1NUQVRFICYmIHN0YXR1cyAhPT0gTkFNRV9TVEFURSAmJiBzdGF0dXMgIT09IENPTU1FTlRfU1RBVEUgJiYgc3RhdHVzICE9PSBIQ1JDX1NUQVRFICYmIHN0YXR1cyAhPT0gQlVTWV9TVEFURSAmJiBzdGF0dXMgIT09IEZJTklTSF9TVEFURSkgewogICAgICAgICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7CiAgICAgICAgfQogICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SKSA6IFpfT0s7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVmbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkgewogICAgICAgIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7CiAgICAgICAgdmFyIHM7CiAgICAgICAgdmFyIHN0ciwgbjsKICAgICAgICB2YXIgd3JhcDsKICAgICAgICB2YXIgYXZhaWw7CiAgICAgICAgdmFyIG5leHQ7CiAgICAgICAgdmFyIGlucHV0OwogICAgICAgIHZhciB0bXBEaWN0OwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzID0gc3RybS5zdGF0ZTsKICAgICAgICB3cmFwID0gcy53cmFwOwogICAgICAgIGlmICh3cmFwID09PSAyIHx8IHdyYXAgPT09IDEgJiYgcy5zdGF0dXMgIT09IElOSVRfU1RBVEUgfHwgcy5sb29rYWhlYWQpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgaWYgKHdyYXAgPT09IDEpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApOwogICAgICAgIH0KICAgICAgICBzLndyYXAgPSAwOwogICAgICAgIGlmIChkaWN0TGVuZ3RoID49IHMud19zaXplKSB7CiAgICAgICAgICBpZiAod3JhcCA9PT0gMCkgewogICAgICAgICAgICB6ZXJvKHMuaGVhZCk7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgICAgfQogICAgICAgICAgdG1wRGljdCA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplKTsKICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHRtcERpY3QsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGggLSBzLndfc2l6ZSwgcy53X3NpemUsIDApOwogICAgICAgICAgZGljdGlvbmFyeSA9IHRtcERpY3Q7CiAgICAgICAgICBkaWN0TGVuZ3RoID0gcy53X3NpemU7CiAgICAgICAgfQogICAgICAgIGF2YWlsID0gc3RybS5hdmFpbF9pbjsKICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luOwogICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gZGljdExlbmd0aDsKICAgICAgICBzdHJtLm5leHRfaW4gPSAwOwogICAgICAgIHN0cm0uaW5wdXQgPSBkaWN0aW9uYXJ5OwogICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICAgIHdoaWxlIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgIHN0ciA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgICBuID0gcy5sb29rYWhlYWQgLSAoTUlOX01BVENIIC0gMSk7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHMuaW5zX2ggPSAocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQgXiBzLndpbmRvd1tzdHIgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgICAgICAgcy5wcmV2W3N0ciAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyOwogICAgICAgICAgICBzdHIrKzsKICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgICBzLnN0cnN0YXJ0ID0gc3RyOwogICAgICAgICAgcy5sb29rYWhlYWQgPSBNSU5fTUFUQ0ggLSAxOwogICAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgICAgfQogICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7CiAgICAgICAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7CiAgICAgICAgcy5pbnNlcnQgPSBzLmxvb2thaGVhZDsKICAgICAgICBzLmxvb2thaGVhZCA9IDA7CiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTsKICAgICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmlucHV0ID0gaW5wdXQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGF2YWlsOwogICAgICAgIHMud3JhcCA9IHdyYXA7CiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgICAgZXhwb3J0czIuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDsKICAgICAgZXhwb3J0czIuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyOwogICAgICBleHBvcnRzMi5kZWZsYXRlUmVzZXQgPSBkZWZsYXRlUmVzZXQ7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwOwogICAgICBleHBvcnRzMi5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjsKICAgICAgZXhwb3J0czIuZGVmbGF0ZSA9IGRlZmxhdGU7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kOwogICAgICBleHBvcnRzMi5kZWZsYXRlU2V0RGljdGlvbmFyeSA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5OwogICAgICBleHBvcnRzMi5kZWZsYXRlSW5mbyA9ICJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9zdHJpbmdzLmpzCiAgdmFyIHJlcXVpcmVfc3RyaW5ncyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvc3RyaW5ncy5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBTVFJfQVBQTFlfT0sgPSB0cnVlOwogICAgICB2YXIgU1RSX0FQUExZX1VJQV9PSyA9IHRydWU7CiAgICAgIHRyeSB7CiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBbMF0pOwogICAgICB9IGNhdGNoIChfXykgewogICAgICAgIFNUUl9BUFBMWV9PSyA9IGZhbHNlOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSgxKSk7CiAgICAgIH0gY2F0Y2ggKF9fKSB7CiAgICAgICAgU1RSX0FQUExZX1VJQV9PSyA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBfdXRmOGxlbiA9IG5ldyB1dGlscy5CdWY4KDI1Nik7CiAgICAgIGZvciAocSA9IDA7IHEgPCAyNTY7IHErKykgewogICAgICAgIF91dGY4bGVuW3FdID0gcSA+PSAyNTIgPyA2IDogcSA+PSAyNDggPyA1IDogcSA+PSAyNDAgPyA0IDogcSA+PSAyMjQgPyAzIDogcSA+PSAxOTIgPyAyIDogMTsKICAgICAgfQogICAgICB2YXIgcTsKICAgICAgX3V0ZjhsZW5bMjU0XSA9IF91dGY4bGVuWzI1NF0gPSAxOwogICAgICBleHBvcnRzMi5zdHJpbmcyYnVmID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7CiAgICAgICAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykgewogICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgICAgICAgIGlmICgoYyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgbV9wb3MgKyAxIDwgc3RyX2xlbikgewogICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiA2NDUxMikgPT09IDU2MzIwKSB7CiAgICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgLSA1NTI5NiA8PCAxMCkgKyAoYzIgLSA1NjMyMCk7CiAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnVmX2xlbiArPSBjIDwgMTI4ID8gMSA6IGMgPCAyMDQ4ID8gMiA6IGMgPCA2NTUzNiA/IDMgOiA0OwogICAgICAgIH0KICAgICAgICBidWYgPSBuZXcgdXRpbHMuQnVmOChidWZfbGVuKTsKICAgICAgICBmb3IgKGkgPSAwLCBtX3BvcyA9IDA7IGkgPCBidWZfbGVuOyBtX3BvcysrKSB7CiAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpOwogICAgICAgICAgaWYgKChjICYgNjQ1MTIpID09PSA1NTI5NiAmJiBtX3BvcyArIDEgPCBzdHJfbGVuKSB7CiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MgKyAxKTsKICAgICAgICAgICAgaWYgKChjMiAmIDY0NTEyKSA9PT0gNTYzMjApIHsKICAgICAgICAgICAgICBjID0gNjU1MzYgKyAoYyAtIDU1Mjk2IDw8IDEwKSArIChjMiAtIDU2MzIwKTsKICAgICAgICAgICAgICBtX3BvcysrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDEyOCkgewogICAgICAgICAgICBidWZbaSsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTkyIHwgYyA+Pj4gNjsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPCA2NTUzNikgewogICAgICAgICAgICBidWZbaSsrXSA9IDIyNCB8IGMgPj4+IDEyOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDYgJiA2MzsKICAgICAgICAgICAgYnVmW2krK10gPSAxMjggfCBjICYgNjM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWZbaSsrXSA9IDI0MCB8IGMgPj4+IDE4OwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgPj4+IDEyICYgNjM7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMTI4IHwgYyA+Pj4gNiAmIDYzOwogICAgICAgICAgICBidWZbaSsrXSA9IDEyOCB8IGMgJiA2MzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gYnVmMmJpbnN0cmluZyhidWYsIGxlbikgewogICAgICAgIGlmIChsZW4gPCA2NTUzNCkgewogICAgICAgICAgaWYgKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LIHx8ICFidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX09LKSB7CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0aWxzLnNocmlua0J1ZihidWYsIGxlbikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBleHBvcnRzMi5idWYyYmluc3RyaW5nID0gZnVuY3Rpb24oYnVmKSB7CiAgICAgICAgcmV0dXJuIGJ1ZjJiaW5zdHJpbmcoYnVmLCBidWYubGVuZ3RoKTsKICAgICAgfTsKICAgICAgZXhwb3J0czIuYmluc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHZhciBidWYgPSBuZXcgdXRpbHMuQnVmOChzdHIubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBidWZbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgfTsKICAgICAgZXhwb3J0czIuYnVmMnN0cmluZyA9IGZ1bmN0aW9uKGJ1ZiwgbWF4KSB7CiAgICAgICAgdmFyIGksIG91dCwgYywgY19sZW47CiAgICAgICAgdmFyIGxlbiA9IG1heCB8fCBidWYubGVuZ3RoOwogICAgICAgIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTsKICAgICAgICBmb3IgKG91dCA9IDAsIGkgPSAwOyBpIDwgbGVuOyApIHsKICAgICAgICAgIGMgPSBidWZbaSsrXTsKICAgICAgICAgIGlmIChjIDwgMTI4KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY19sZW4gPSBfdXRmOGxlbltjXTsKICAgICAgICAgIGlmIChjX2xlbiA+IDQpIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gNjU1MzM7CiAgICAgICAgICAgIGkgKz0gY19sZW4gLSAxOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGMgJj0gY19sZW4gPT09IDIgPyAzMSA6IGNfbGVuID09PSAzID8gMTUgOiA3OwogICAgICAgICAgd2hpbGUgKGNfbGVuID4gMSAmJiBpIDwgbGVuKSB7CiAgICAgICAgICAgIGMgPSBjIDw8IDYgfCBidWZbaSsrXSAmIDYzOwogICAgICAgICAgICBjX2xlbi0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNfbGVuID4gMSkgewogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA2NTUzMzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYyA8IDY1NTM2KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjIC09IDY1NTM2OwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NTI5NiB8IGMgPj4gMTAgJiAxMDIzOwogICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSA1NjMyMCB8IGMgJiAxMDIzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTsKICAgICAgfTsKICAgICAgZXhwb3J0czIudXRmOGJvcmRlciA9IGZ1bmN0aW9uKGJ1ZiwgbWF4KSB7CiAgICAgICAgdmFyIHBvczsKICAgICAgICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDsKICAgICAgICBpZiAobWF4ID4gYnVmLmxlbmd0aCkgewogICAgICAgICAgbWF4ID0gYnVmLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgcG9zID0gbWF4IC0gMTsKICAgICAgICB3aGlsZSAocG9zID49IDAgJiYgKGJ1Zltwb3NdICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICBwb3MtLTsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcyA8IDApIHsKICAgICAgICAgIHJldHVybiBtYXg7CiAgICAgICAgfQogICAgICAgIGlmIChwb3MgPT09IDApIHsKICAgICAgICAgIHJldHVybiBtYXg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3MgKyBfdXRmOGxlbltidWZbcG9zXV0gPiBtYXggPyBwb3MgOiBtYXg7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi96c3RyZWFtLmpzCiAgdmFyIHJlcXVpcmVfenN0cmVhbSA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi96c3RyZWFtLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZnVuY3Rpb24gWlN0cmVhbSgpIHsKICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfaW4gPSAwOwogICAgICAgIHRoaXMuYXZhaWxfaW4gPSAwOwogICAgICAgIHRoaXMudG90YWxfaW4gPSAwOwogICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRfb3V0ID0gMDsKICAgICAgICB0aGlzLmF2YWlsX291dCA9IDA7CiAgICAgICAgdGhpcy50b3RhbF9vdXQgPSAwOwogICAgICAgIHRoaXMubXNnID0gIiI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5kYXRhX3R5cGUgPSAyOwogICAgICAgIHRoaXMuYWRsZXIgPSAwOwogICAgICB9CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IFpTdHJlYW07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvZGVmbGF0ZS5qcwogIHZhciByZXF1aXJlX2RlZmxhdGUyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9kZWZsYXRlLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHpsaWJfZGVmbGF0ZSA9IHJlcXVpcmVfZGVmbGF0ZSgpOwogICAgICB2YXIgdXRpbHMgPSByZXF1aXJlX2NvbW1vbigpOwogICAgICB2YXIgc3RyaW5ncyA9IHJlcXVpcmVfc3RyaW5ncygpOwogICAgICB2YXIgbXNnID0gcmVxdWlyZV9tZXNzYWdlcygpOwogICAgICB2YXIgWlN0cmVhbSA9IHJlcXVpcmVfenN0cmVhbSgpOwogICAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICB2YXIgWl9OT19GTFVTSCA9IDA7CiAgICAgIHZhciBaX0ZJTklTSCA9IDQ7CiAgICAgIHZhciBaX09LID0gMDsKICAgICAgdmFyIFpfU1RSRUFNX0VORCA9IDE7CiAgICAgIHZhciBaX1NZTkNfRkxVU0gyID0gMjsKICAgICAgdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwogICAgICB2YXIgWl9ERUZBVUxUX1NUUkFURUdZID0gMDsKICAgICAgdmFyIFpfREVGTEFURUQgPSA4OwogICAgICBmdW5jdGlvbiBEZWZsYXRlKG9wdGlvbnMpIHsKICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpCiAgICAgICAgICByZXR1cm4gbmV3IERlZmxhdGUob3B0aW9ucyk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgICAgICAgIGxldmVsOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCiAgICAgICAgICBtZXRob2Q6IFpfREVGTEFURUQsCiAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgICAgICAgd2luZG93Qml0czogMTUsCiAgICAgICAgICBtZW1MZXZlbDogOCwKICAgICAgICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksCiAgICAgICAgICB0bzogIiIKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTsKICAgICAgICB2YXIgb3B0ID0gdGhpcy5vcHRpb25zOwogICAgICAgIGlmIChvcHQucmF3ICYmIG9wdC53aW5kb3dCaXRzID4gMCkgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgPSAtb3B0LndpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIGlmIChvcHQuZ3ppcCAmJiBvcHQud2luZG93Qml0cyA+IDAgJiYgb3B0LndpbmRvd0JpdHMgPCAxNikgewogICAgICAgICAgb3B0LndpbmRvd0JpdHMgKz0gMTY7CiAgICAgICAgfQogICAgICAgIHRoaXMuZXJyID0gMDsKICAgICAgICB0aGlzLm1zZyA9ICIiOwogICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuc3RybSA9IG5ldyBaU3RyZWFtKCk7CiAgICAgICAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CiAgICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLCBvcHQubGV2ZWwsIG9wdC5tZXRob2QsIG9wdC53aW5kb3dCaXRzLCBvcHQubWVtTGV2ZWwsIG9wdC5zdHJhdGVneSk7CiAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdC5oZWFkZXIpIHsKICAgICAgICAgIHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSwgb3B0LmhlYWRlcik7CiAgICAgICAgfQogICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkgewogICAgICAgICAgdmFyIGRpY3Q7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBkaWN0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgICAgZGljdCA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3QpOwogICAgICAgICAgaWYgKHN0YXR1cyAhPT0gWl9PSykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogICAgICAgIHZhciBzdHJtID0gdGhpcy5zdHJtOwogICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogICAgICAgIHZhciBzdGF0dXMsIF9tb2RlOwogICAgICAgIGlmICh0aGlzLmVuZGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9tb2RlID0gbW9kZSA9PT0gfn5tb2RlID8gbW9kZSA6IG1vZGUgPT09IHRydWUgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihkYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIpIHsKICAgICAgICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgICAgICAgfQogICAgICAgIHN0cm0ubmV4dF9pbiA9IDA7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHN0cm0sIF9tb2RlKTsKICAgICAgICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHsKICAgICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBaX0ZJTklTSCB8fCBfbW9kZSA9PT0gWl9TWU5DX0ZMVVNIMikpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IFpfU1RSRUFNX0VORCk7CiAgICAgICAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkgewogICAgICAgICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gWl9PSzsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBaX1NZTkNfRkxVU0gyKSB7CiAgICAgICAgICB0aGlzLm9uRW5kKFpfT0spOwogICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwogICAgICB9OwogICAgICBEZWZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogICAgICAgIGlmIChzdGF0dXMgPT09IFpfT0spIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbigiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNodW5rcyA9IFtdOwogICAgICAgIHRoaXMuZXJyID0gc3RhdHVzOwogICAgICAgIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpOwogICAgICAgIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwogICAgICAgIGlmIChkZWZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IGRlZmxhdG9yLm1zZyB8fCBtc2dbZGVmbGF0b3IuZXJyXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5yYXcgPSB0cnVlOwogICAgICAgIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBnemlwKGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5nemlwID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuRGVmbGF0ZSA9IERlZmxhdGU7CiAgICAgIGV4cG9ydHMyLmRlZmxhdGUgPSBkZWZsYXRlOwogICAgICBleHBvcnRzMi5kZWZsYXRlUmF3ID0gZGVmbGF0ZVJhdzsKICAgICAgZXhwb3J0czIuZ3ppcCA9IGd6aXA7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZmYXN0LmpzCiAgdmFyIHJlcXVpcmVfaW5mZmFzdCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZmYXN0LmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIEJBRCA9IDMwOwogICAgICB2YXIgVFlQRSA9IDEyOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX2Zhc3Qoc3RybSwgc3RhcnQpIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgdmFyIF9pbjsKICAgICAgICB2YXIgbGFzdDsKICAgICAgICB2YXIgX291dDsKICAgICAgICB2YXIgYmVnOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgdmFyIGRtYXg7CiAgICAgICAgdmFyIHdzaXplOwogICAgICAgIHZhciB3aGF2ZTsKICAgICAgICB2YXIgd25leHQ7CiAgICAgICAgdmFyIHNfd2luZG93OwogICAgICAgIHZhciBob2xkOwogICAgICAgIHZhciBiaXRzOwogICAgICAgIHZhciBsY29kZTsKICAgICAgICB2YXIgZGNvZGU7CiAgICAgICAgdmFyIGxtYXNrOwogICAgICAgIHZhciBkbWFzazsKICAgICAgICB2YXIgaGVyZTsKICAgICAgICB2YXIgb3A7CiAgICAgICAgdmFyIGxlbjsKICAgICAgICB2YXIgZGlzdDsKICAgICAgICB2YXIgZnJvbTsKICAgICAgICB2YXIgZnJvbV9zb3VyY2U7CiAgICAgICAgdmFyIGlucHV0LCBvdXRwdXQ7CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIF9pbiA9IHN0cm0ubmV4dF9pbjsKICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgICAgICAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7CiAgICAgICAgX291dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgICAgICAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTsKICAgICAgICBlbmQgPSBfb3V0ICsgKHN0cm0uYXZhaWxfb3V0IC0gMjU3KTsKICAgICAgICBkbWF4ID0gc3RhdGUuZG1heDsKICAgICAgICB3c2l6ZSA9IHN0YXRlLndzaXplOwogICAgICAgIHdoYXZlID0gc3RhdGUud2hhdmU7CiAgICAgICAgd25leHQgPSBzdGF0ZS53bmV4dDsKICAgICAgICBzX3dpbmRvdyA9IHN0YXRlLndpbmRvdzsKICAgICAgICBob2xkID0gc3RhdGUuaG9sZDsKICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICBsY29kZSA9IHN0YXRlLmxlbmNvZGU7CiAgICAgICAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTsKICAgICAgICBsbWFzayA9ICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMTsKICAgICAgICBkbWFzayA9ICgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDE7CiAgICAgICAgdG9wOgogICAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoYml0cyA8IDE1KSB7CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVyZSA9IGxjb2RlW2hvbGQgJiBsbWFza107CiAgICAgICAgICAgIGRvbGVuOgogICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAyNDsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICAgICAgICBvcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgaWYgKG9wID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCAmIDE2KSB7CiAgICAgICAgICAgICAgICAgIGxlbiA9IGhlcmUgJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgb3AgJj0gMTU7CiAgICAgICAgICAgICAgICAgIGlmIChvcCkgewogICAgICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGxlbiArPSBob2xkICYgKDEgPDwgb3ApIC0gMTsKICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IDE1KSB7CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaGVyZSA9IGRjb2RlW2hvbGQgJiBkbWFza107CiAgICAgICAgICAgICAgICAgIGRvZGlzdDoKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCAmIDE2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wICY9IDE1OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKDEgPDwgb3ApIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBkbWF4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBfb3V0IC0gYmVnOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA+IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IHNfd2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3bmV4dCA8IG9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplICsgd25leHQgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wIC09IHduZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IHduZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd25leHQgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiA+IDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSA9IGRjb2RlWyhoZXJlICYgNjU1MzUpICsgKGhvbGQgJiAoMSA8PCBvcCkgLSAxKV07CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGRvZGlzdDsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBsY29kZVsoaGVyZSAmIDY1NTM1KSArIChob2xkICYgKDEgPDwgb3ApIC0gMSldOwogICAgICAgICAgICAgICAgICBjb250aW51ZSBkb2xlbjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgJiAzMikgewogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWsgdG9wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAoX2luIDwgbGFzdCAmJiBfb3V0IDwgZW5kKTsKICAgICAgICBsZW4gPSBiaXRzID4+IDM7CiAgICAgICAgX2luIC09IGxlbjsKICAgICAgICBiaXRzIC09IGxlbiA8PCAzOwogICAgICAgIGhvbGQgJj0gKDEgPDwgYml0cykgLSAxOwogICAgICAgIHN0cm0ubmV4dF9pbiA9IF9pbjsKICAgICAgICBzdHJtLm5leHRfb3V0ID0gX291dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gX2luIDwgbGFzdCA/IDUgKyAobGFzdCAtIF9pbikgOiA1IC0gKF9pbiAtIGxhc3QpOwogICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gX291dCA8IGVuZCA/IDI1NyArIChlbmQgLSBfb3V0KSA6IDI1NyAtIChfb3V0IC0gZW5kKTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICByZXR1cm47CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZ0cmVlcy5qcwogIHZhciByZXF1aXJlX2luZnRyZWVzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIHV0aWxzID0gcmVxdWlyZV9jb21tb24oKTsKICAgICAgdmFyIE1BWEJJVFMgPSAxNTsKICAgICAgdmFyIEVOT1VHSF9MRU5TID0gODUyOwogICAgICB2YXIgRU5PVUdIX0RJU1RTID0gNTkyOwogICAgICB2YXIgQ09ERVMgPSAwOwogICAgICB2YXIgTEVOUyA9IDE7CiAgICAgIHZhciBESVNUUyA9IDI7CiAgICAgIHZhciBsYmFzZSA9IFsKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA2LAogICAgICAgIDcsCiAgICAgICAgOCwKICAgICAgICA5LAogICAgICAgIDEwLAogICAgICAgIDExLAogICAgICAgIDEzLAogICAgICAgIDE1LAogICAgICAgIDE3LAogICAgICAgIDE5LAogICAgICAgIDIzLAogICAgICAgIDI3LAogICAgICAgIDMxLAogICAgICAgIDM1LAogICAgICAgIDQzLAogICAgICAgIDUxLAogICAgICAgIDU5LAogICAgICAgIDY3LAogICAgICAgIDgzLAogICAgICAgIDk5LAogICAgICAgIDExNSwKICAgICAgICAxMzEsCiAgICAgICAgMTYzLAogICAgICAgIDE5NSwKICAgICAgICAyMjcsCiAgICAgICAgMjU4LAogICAgICAgIDAsCiAgICAgICAgMAogICAgICBdOwogICAgICB2YXIgbGV4dCA9IFsKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAxNiwKICAgICAgICA3MiwKICAgICAgICA3OAogICAgICBdOwogICAgICB2YXIgZGJhc2UgPSBbCiAgICAgICAgMSwKICAgICAgICAyLAogICAgICAgIDMsCiAgICAgICAgNCwKICAgICAgICA1LAogICAgICAgIDcsCiAgICAgICAgOSwKICAgICAgICAxMywKICAgICAgICAxNywKICAgICAgICAyNSwKICAgICAgICAzMywKICAgICAgICA0OSwKICAgICAgICA2NSwKICAgICAgICA5NywKICAgICAgICAxMjksCiAgICAgICAgMTkzLAogICAgICAgIDI1NywKICAgICAgICAzODUsCiAgICAgICAgNTEzLAogICAgICAgIDc2OSwKICAgICAgICAxMDI1LAogICAgICAgIDE1MzcsCiAgICAgICAgMjA0OSwKICAgICAgICAzMDczLAogICAgICAgIDQwOTcsCiAgICAgICAgNjE0NSwKICAgICAgICA4MTkzLAogICAgICAgIDEyMjg5LAogICAgICAgIDE2Mzg1LAogICAgICAgIDI0NTc3LAogICAgICAgIDAsCiAgICAgICAgMAogICAgICBdOwogICAgICB2YXIgZGV4dCA9IFsKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNiwKICAgICAgICAxNywKICAgICAgICAxNywKICAgICAgICAxOCwKICAgICAgICAxOCwKICAgICAgICAxOSwKICAgICAgICAxOSwKICAgICAgICAyMCwKICAgICAgICAyMCwKICAgICAgICAyMSwKICAgICAgICAyMSwKICAgICAgICAyMiwKICAgICAgICAyMiwKICAgICAgICAyMywKICAgICAgICAyMywKICAgICAgICAyNCwKICAgICAgICAyNCwKICAgICAgICAyNSwKICAgICAgICAyNSwKICAgICAgICAyNiwKICAgICAgICAyNiwKICAgICAgICAyNywKICAgICAgICAyNywKICAgICAgICAyOCwKICAgICAgICAyOCwKICAgICAgICAyOSwKICAgICAgICAyOSwKICAgICAgICA2NCwKICAgICAgICA2NAogICAgICBdOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpIHsKICAgICAgICB2YXIgYml0cyA9IG9wdHMuYml0czsKICAgICAgICB2YXIgbGVuID0gMDsKICAgICAgICB2YXIgc3ltID0gMDsKICAgICAgICB2YXIgbWluID0gMCwgbWF4ID0gMDsKICAgICAgICB2YXIgcm9vdDIgPSAwOwogICAgICAgIHZhciBjdXJyID0gMDsKICAgICAgICB2YXIgZHJvcCA9IDA7CiAgICAgICAgdmFyIGxlZnQgPSAwOwogICAgICAgIHZhciB1c2VkID0gMDsKICAgICAgICB2YXIgaHVmZiA9IDA7CiAgICAgICAgdmFyIGluY3I7CiAgICAgICAgdmFyIGZpbGw7CiAgICAgICAgdmFyIGxvdzsKICAgICAgICB2YXIgbWFzazsKICAgICAgICB2YXIgbmV4dDsKICAgICAgICB2YXIgYmFzZSA9IG51bGw7CiAgICAgICAgdmFyIGJhc2VfaW5kZXggPSAwOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgdmFyIGNvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsKICAgICAgICB2YXIgb2ZmcyA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7CiAgICAgICAgdmFyIGV4dHJhID0gbnVsbDsKICAgICAgICB2YXIgZXh0cmFfaW5kZXggPSAwOwogICAgICAgIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsOwogICAgICAgIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CiAgICAgICAgICBjb3VudFtsZW5dID0gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChzeW0gPSAwOyBzeW0gPCBjb2Rlczsgc3ltKyspIHsKICAgICAgICAgIGNvdW50W2xlbnNbbGVuc19pbmRleCArIHN5bV1dKys7CiAgICAgICAgfQogICAgICAgIHJvb3QyID0gYml0czsKICAgICAgICBmb3IgKG1heCA9IE1BWEJJVFM7IG1heCA+PSAxOyBtYXgtLSkgewogICAgICAgICAgaWYgKGNvdW50W21heF0gIT09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChyb290MiA+IG1heCkgewogICAgICAgICAgcm9vdDIgPSBtYXg7CiAgICAgICAgfQogICAgICAgIGlmIChtYXggPT09IDApIHsKICAgICAgICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gMSA8PCAyNCB8IDY0IDw8IDE2IHwgMDsKICAgICAgICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gMSA8PCAyNCB8IDY0IDw8IDE2IHwgMDsKICAgICAgICAgIG9wdHMuYml0cyA9IDE7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKSB7CiAgICAgICAgICBpZiAoY291bnRbbWluXSAhPT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHJvb3QyIDwgbWluKSB7CiAgICAgICAgICByb290MiA9IG1pbjsKICAgICAgICB9CiAgICAgICAgbGVmdCA9IDE7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKICAgICAgICAgIGxlZnQgPDw9IDE7CiAgICAgICAgICBsZWZ0IC09IGNvdW50W2xlbl07CiAgICAgICAgICBpZiAobGVmdCA8IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgb2Zmc1sxXSA9IDA7CiAgICAgICAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykgewogICAgICAgICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07CiAgICAgICAgfQogICAgICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICAgICAgICBpZiAobGVuc1tsZW5zX2luZGV4ICsgc3ltXSAhPT0gMCkgewogICAgICAgICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSBDT0RFUykgewogICAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsKICAgICAgICAgIGVuZCA9IDE5OwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykgewogICAgICAgICAgYmFzZSA9IGxiYXNlOwogICAgICAgICAgYmFzZV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBleHRyYSA9IGxleHQ7CiAgICAgICAgICBleHRyYV9pbmRleCAtPSAyNTc7CiAgICAgICAgICBlbmQgPSAyNTY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJhc2UgPSBkYmFzZTsKICAgICAgICAgIGV4dHJhID0gZGV4dDsKICAgICAgICAgIGVuZCA9IC0xOwogICAgICAgIH0KICAgICAgICBodWZmID0gMDsKICAgICAgICBzeW0gPSAwOwogICAgICAgIGxlbiA9IG1pbjsKICAgICAgICBuZXh0ID0gdGFibGVfaW5kZXg7CiAgICAgICAgY3VyciA9IHJvb3QyOwogICAgICAgIGRyb3AgPSAwOwogICAgICAgIGxvdyA9IC0xOwogICAgICAgIHVzZWQgPSAxIDw8IHJvb3QyOwogICAgICAgIG1hc2sgPSB1c2VkIC0gMTsKICAgICAgICBpZiAodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMgfHwgdHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaGVyZV9iaXRzID0gbGVuIC0gZHJvcDsKICAgICAgICAgIGlmICh3b3JrW3N5bV0gPCBlbmQpIHsKICAgICAgICAgICAgaGVyZV9vcCA9IDA7CiAgICAgICAgICAgIGhlcmVfdmFsID0gd29ya1tzeW1dOwogICAgICAgICAgfSBlbHNlIGlmICh3b3JrW3N5bV0gPiBlbmQpIHsKICAgICAgICAgICAgaGVyZV9vcCA9IGV4dHJhW2V4dHJhX2luZGV4ICsgd29ya1tzeW1dXTsKICAgICAgICAgICAgaGVyZV92YWwgPSBiYXNlW2Jhc2VfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGVyZV9vcCA9IDMyICsgNjQ7CiAgICAgICAgICAgIGhlcmVfdmFsID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGluY3IgPSAxIDw8IGxlbiAtIGRyb3A7CiAgICAgICAgICBmaWxsID0gMSA8PCBjdXJyOwogICAgICAgICAgbWluID0gZmlsbDsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgZmlsbCAtPSBpbmNyOwogICAgICAgICAgICB0YWJsZVtuZXh0ICsgKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IGhlcmVfYml0cyA8PCAyNCB8IGhlcmVfb3AgPDwgMTYgfCBoZXJlX3ZhbCB8IDA7CiAgICAgICAgICB9IHdoaWxlIChmaWxsICE9PSAwKTsKICAgICAgICAgIGluY3IgPSAxIDw8IGxlbiAtIDE7CiAgICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpIHsKICAgICAgICAgICAgaW5jciA+Pj0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbmNyICE9PSAwKSB7CiAgICAgICAgICAgIGh1ZmYgJj0gaW5jciAtIDE7CiAgICAgICAgICAgIGh1ZmYgKz0gaW5jcjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGh1ZmYgPSAwOwogICAgICAgICAgfQogICAgICAgICAgc3ltKys7CiAgICAgICAgICBpZiAoLS1jb3VudFtsZW5dID09PSAwKSB7CiAgICAgICAgICAgIGlmIChsZW4gPT09IG1heCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlbiA9IGxlbnNbbGVuc19pbmRleCArIHdvcmtbc3ltXV07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobGVuID4gcm9vdDIgJiYgKGh1ZmYgJiBtYXNrKSAhPT0gbG93KSB7CiAgICAgICAgICAgIGlmIChkcm9wID09PSAwKSB7CiAgICAgICAgICAgICAgZHJvcCA9IHJvb3QyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgKz0gbWluOwogICAgICAgICAgICBjdXJyID0gbGVuIC0gZHJvcDsKICAgICAgICAgICAgbGVmdCA9IDEgPDwgY3VycjsKICAgICAgICAgICAgd2hpbGUgKGN1cnIgKyBkcm9wIDwgbWF4KSB7CiAgICAgICAgICAgICAgbGVmdCAtPSBjb3VudFtjdXJyICsgZHJvcF07CiAgICAgICAgICAgICAgaWYgKGxlZnQgPD0gMCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN1cnIrKzsKICAgICAgICAgICAgICBsZWZ0IDw8PSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVzZWQgKz0gMSA8PCBjdXJyOwogICAgICAgICAgICBpZiAodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMgfHwgdHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykgewogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvdyA9IGh1ZmYgJiBtYXNrOwogICAgICAgICAgICB0YWJsZVtsb3ddID0gcm9vdDIgPDwgMjQgfCBjdXJyIDw8IDE2IHwgbmV4dCAtIHRhYmxlX2luZGV4IHwgMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGh1ZmYgIT09IDApIHsKICAgICAgICAgIHRhYmxlW25leHQgKyBodWZmXSA9IGxlbiAtIGRyb3AgPDwgMjQgfCA2NCA8PCAxNiB8IDA7CiAgICAgICAgfQogICAgICAgIG9wdHMuYml0cyA9IHJvb3QyOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcwogIHZhciByZXF1aXJlX2luZmxhdGUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBhZGxlcjMyID0gcmVxdWlyZV9hZGxlcjMyKCk7CiAgICAgIHZhciBjcmMzMiA9IHJlcXVpcmVfY3JjMzIoKTsKICAgICAgdmFyIGluZmxhdGVfZmFzdCA9IHJlcXVpcmVfaW5mZmFzdCgpOwogICAgICB2YXIgaW5mbGF0ZV90YWJsZSA9IHJlcXVpcmVfaW5mdHJlZXMoKTsKICAgICAgdmFyIENPREVTID0gMDsKICAgICAgdmFyIExFTlMgPSAxOwogICAgICB2YXIgRElTVFMgPSAyOwogICAgICB2YXIgWl9GSU5JU0ggPSA0OwogICAgICB2YXIgWl9CTE9DSyA9IDU7CiAgICAgIHZhciBaX1RSRUVTID0gNjsKICAgICAgdmFyIFpfT0sgPSAwOwogICAgICB2YXIgWl9TVFJFQU1fRU5EID0gMTsKICAgICAgdmFyIFpfTkVFRF9ESUNUID0gMjsKICAgICAgdmFyIFpfU1RSRUFNX0VSUk9SID0gLTI7CiAgICAgIHZhciBaX0RBVEFfRVJST1IgPSAtMzsKICAgICAgdmFyIFpfTUVNX0VSUk9SID0gLTQ7CiAgICAgIHZhciBaX0JVRl9FUlJPUiA9IC01OwogICAgICB2YXIgWl9ERUZMQVRFRCA9IDg7CiAgICAgIHZhciBIRUFEID0gMTsKICAgICAgdmFyIEZMQUdTID0gMjsKICAgICAgdmFyIFRJTUUgPSAzOwogICAgICB2YXIgT1MgPSA0OwogICAgICB2YXIgRVhMRU4gPSA1OwogICAgICB2YXIgRVhUUkEgPSA2OwogICAgICB2YXIgTkFNRSA9IDc7CiAgICAgIHZhciBDT01NRU5UID0gODsKICAgICAgdmFyIEhDUkMgPSA5OwogICAgICB2YXIgRElDVElEID0gMTA7CiAgICAgIHZhciBESUNUID0gMTE7CiAgICAgIHZhciBUWVBFID0gMTI7CiAgICAgIHZhciBUWVBFRE8gPSAxMzsKICAgICAgdmFyIFNUT1JFRCA9IDE0OwogICAgICB2YXIgQ09QWV8gPSAxNTsKICAgICAgdmFyIENPUFkgPSAxNjsKICAgICAgdmFyIFRBQkxFID0gMTc7CiAgICAgIHZhciBMRU5MRU5TID0gMTg7CiAgICAgIHZhciBDT0RFTEVOUyA9IDE5OwogICAgICB2YXIgTEVOXyA9IDIwOwogICAgICB2YXIgTEVOID0gMjE7CiAgICAgIHZhciBMRU5FWFQgPSAyMjsKICAgICAgdmFyIERJU1QgPSAyMzsKICAgICAgdmFyIERJU1RFWFQgPSAyNDsKICAgICAgdmFyIE1BVENIID0gMjU7CiAgICAgIHZhciBMSVQgPSAyNjsKICAgICAgdmFyIENIRUNLID0gMjc7CiAgICAgIHZhciBMRU5HVEggPSAyODsKICAgICAgdmFyIERPTkUgPSAyOTsKICAgICAgdmFyIEJBRCA9IDMwOwogICAgICB2YXIgTUVNID0gMzE7CiAgICAgIHZhciBTWU5DID0gMzI7CiAgICAgIHZhciBFTk9VR0hfTEVOUyA9IDg1MjsKICAgICAgdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKICAgICAgdmFyIE1BWF9XQklUUyA9IDE1OwogICAgICB2YXIgREVGX1dCSVRTID0gTUFYX1dCSVRTOwogICAgICBmdW5jdGlvbiB6c3dhcDMyKHEpIHsKICAgICAgICByZXR1cm4gKHEgPj4+IDI0ICYgMjU1KSArIChxID4+PiA4ICYgNjUyODApICsgKChxICYgNjUyODApIDw8IDgpICsgKChxICYgMjU1KSA8PCAyNCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gSW5mbGF0ZVN0YXRlKCkgewogICAgICAgIHRoaXMubW9kZSA9IDA7CiAgICAgICAgdGhpcy5sYXN0ID0gZmFsc2U7CiAgICAgICAgdGhpcy53cmFwID0gMDsKICAgICAgICB0aGlzLmhhdmVkaWN0ID0gZmFsc2U7CiAgICAgICAgdGhpcy5mbGFncyA9IDA7CiAgICAgICAgdGhpcy5kbWF4ID0gMDsKICAgICAgICB0aGlzLmNoZWNrID0gMDsKICAgICAgICB0aGlzLnRvdGFsID0gMDsKICAgICAgICB0aGlzLmhlYWQgPSBudWxsOwogICAgICAgIHRoaXMud2JpdHMgPSAwOwogICAgICAgIHRoaXMud3NpemUgPSAwOwogICAgICAgIHRoaXMud2hhdmUgPSAwOwogICAgICAgIHRoaXMud25leHQgPSAwOwogICAgICAgIHRoaXMud2luZG93ID0gbnVsbDsKICAgICAgICB0aGlzLmhvbGQgPSAwOwogICAgICAgIHRoaXMuYml0cyA9IDA7CiAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgIHRoaXMub2Zmc2V0ID0gMDsKICAgICAgICB0aGlzLmV4dHJhID0gMDsKICAgICAgICB0aGlzLmxlbmNvZGUgPSBudWxsOwogICAgICAgIHRoaXMuZGlzdGNvZGUgPSBudWxsOwogICAgICAgIHRoaXMubGVuYml0cyA9IDA7CiAgICAgICAgdGhpcy5kaXN0Yml0cyA9IDA7CiAgICAgICAgdGhpcy5uY29kZSA9IDA7CiAgICAgICAgdGhpcy5ubGVuID0gMDsKICAgICAgICB0aGlzLm5kaXN0ID0gMDsKICAgICAgICB0aGlzLmhhdmUgPSAwOwogICAgICAgIHRoaXMubmV4dCA9IG51bGw7CiAgICAgICAgdGhpcy5sZW5zID0gbmV3IHV0aWxzLkJ1ZjE2KDMyMCk7CiAgICAgICAgdGhpcy53b3JrID0gbmV3IHV0aWxzLkJ1ZjE2KDI4OCk7CiAgICAgICAgdGhpcy5sZW5keW4gPSBudWxsOwogICAgICAgIHRoaXMuZGlzdGR5biA9IG51bGw7CiAgICAgICAgdGhpcy5zYW5lID0gMDsKICAgICAgICB0aGlzLmJhY2sgPSAwOwogICAgICAgIHRoaXMud2FzID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSBzdGF0ZS50b3RhbCA9IDA7CiAgICAgICAgc3RybS5tc2cgPSAiIjsKICAgICAgICBpZiAoc3RhdGUud3JhcCkgewogICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5tb2RlID0gSEVBRDsKICAgICAgICBzdGF0ZS5sYXN0ID0gMDsKICAgICAgICBzdGF0ZS5oYXZlZGljdCA9IDA7CiAgICAgICAgc3RhdGUuZG1heCA9IDMyNzY4OwogICAgICAgIHN0YXRlLmhlYWQgPSBudWxsOwogICAgICAgIHN0YXRlLmhvbGQgPSAwOwogICAgICAgIHN0YXRlLmJpdHMgPSAwOwogICAgICAgIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5sZW5keW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0xFTlMpOwogICAgICAgIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfRElTVFMpOwogICAgICAgIHN0YXRlLnNhbmUgPSAxOwogICAgICAgIHN0YXRlLmJhY2sgPSAtMTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmVzZXQoc3RybSkgewogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIHN0YXRlLndzaXplID0gMDsKICAgICAgICBzdGF0ZS53aGF2ZSA9IDA7CiAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykgewogICAgICAgIHZhciB3cmFwOwogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewogICAgICAgICAgd3JhcCA9IDA7CiAgICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7CiAgICAgICAgICBpZiAod2luZG93Qml0cyA8IDQ4KSB7CiAgICAgICAgICAgIHdpbmRvd0JpdHMgJj0gMTU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh3aW5kb3dCaXRzICYmICh3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUpKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS53aW5kb3cgIT09IG51bGwgJiYgc3RhdGUud2JpdHMgIT09IHdpbmRvd0JpdHMpIHsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN0YXRlLndyYXAgPSB3cmFwOwogICAgICAgIHN0YXRlLndiaXRzID0gd2luZG93Qml0czsKICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc2V0KHN0cm0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSB7CiAgICAgICAgdmFyIHJldDsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgaWYgKCFzdHJtKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gbmV3IEluZmxhdGVTdGF0ZSgpOwogICAgICAgIHN0cm0uc3RhdGUgPSBzdGF0ZTsKICAgICAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogICAgICAgIHJldCA9IGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cyk7CiAgICAgICAgaWYgKHJldCAhPT0gWl9PSykgewogICAgICAgICAgc3RybS5zdGF0ZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaW5mbGF0ZUluaXQoc3RybSkgewogICAgICAgIHJldHVybiBpbmZsYXRlSW5pdDIoc3RybSwgREVGX1dCSVRTKTsKICAgICAgfQogICAgICB2YXIgdmlyZ2luID0gdHJ1ZTsKICAgICAgdmFyIGxlbmZpeDsKICAgICAgdmFyIGRpc3RmaXg7CiAgICAgIGZ1bmN0aW9uIGZpeGVkdGFibGVzKHN0YXRlKSB7CiAgICAgICAgaWYgKHZpcmdpbikgewogICAgICAgICAgdmFyIHN5bTsKICAgICAgICAgIGxlbmZpeCA9IG5ldyB1dGlscy5CdWYzMig1MTIpOwogICAgICAgICAgZGlzdGZpeCA9IG5ldyB1dGlscy5CdWYzMigzMik7CiAgICAgICAgICBzeW0gPSAwOwogICAgICAgICAgd2hpbGUgKHN5bSA8IDE0NCkgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3ltIDwgMjU2KSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gOTsKICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzeW0gPCAyODApIHsKICAgICAgICAgICAgc3RhdGUubGVuc1tzeW0rK10gPSA3OwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN5bSA8IDI4OCkgewogICAgICAgICAgICBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLmxlbnMsIDAsIDI4OCwgbGVuZml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDkgfSk7CiAgICAgICAgICBzeW0gPSAwOwogICAgICAgICAgd2hpbGUgKHN5bSA8IDMyKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3ltKytdID0gNTsKICAgICAgICAgIH0KICAgICAgICAgIGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIDAsIDMyLCBkaXN0Zml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDUgfSk7CiAgICAgICAgICB2aXJnaW4gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgc3RhdGUubGVuY29kZSA9IGxlbmZpeDsKICAgICAgICBzdGF0ZS5sZW5iaXRzID0gOTsKICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IGRpc3RmaXg7CiAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA1OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHVwZGF0ZXdpbmRvdyhzdHJtLCBzcmMsIGVuZCwgY29weSkgewogICAgICAgIHZhciBkaXN0OwogICAgICAgIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLndpbmRvdyA9PT0gbnVsbCkgewogICAgICAgICAgc3RhdGUud3NpemUgPSAxIDw8IHN0YXRlLndiaXRzOwogICAgICAgICAgc3RhdGUud25leHQgPSAwOwogICAgICAgICAgc3RhdGUud2hhdmUgPSAwOwogICAgICAgICAgc3RhdGUud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgoc3RhdGUud3NpemUpOwogICAgICAgIH0KICAgICAgICBpZiAoY29weSA+PSBzdGF0ZS53c2l6ZSkgewogICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIHN0YXRlLndzaXplLCBzdGF0ZS53c2l6ZSwgMCk7CiAgICAgICAgICBzdGF0ZS53bmV4dCA9IDA7CiAgICAgICAgICBzdGF0ZS53aGF2ZSA9IHN0YXRlLndzaXplOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXN0ID0gc3RhdGUud3NpemUgLSBzdGF0ZS53bmV4dDsKICAgICAgICAgIGlmIChkaXN0ID4gY29weSkgewogICAgICAgICAgICBkaXN0ID0gY29weTsKICAgICAgICAgIH0KICAgICAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBjb3B5LCBkaXN0LCBzdGF0ZS53bmV4dCk7CiAgICAgICAgICBjb3B5IC09IGRpc3Q7CiAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgY29weSwgMCk7CiAgICAgICAgICAgIHN0YXRlLnduZXh0ID0gY29weTsKICAgICAgICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnduZXh0ICs9IGRpc3Q7CiAgICAgICAgICAgIGlmIChzdGF0ZS53bmV4dCA9PT0gc3RhdGUud3NpemUpIHsKICAgICAgICAgICAgICBzdGF0ZS53bmV4dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXRlLndoYXZlIDwgc3RhdGUud3NpemUpIHsKICAgICAgICAgICAgICBzdGF0ZS53aGF2ZSArPSBkaXN0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGUoc3RybSwgZmx1c2gpIHsKICAgICAgICB2YXIgc3RhdGU7CiAgICAgICAgdmFyIGlucHV0LCBvdXRwdXQ7CiAgICAgICAgdmFyIG5leHQ7CiAgICAgICAgdmFyIHB1dDsKICAgICAgICB2YXIgaGF2ZSwgbGVmdDsKICAgICAgICB2YXIgaG9sZDsKICAgICAgICB2YXIgYml0czsKICAgICAgICB2YXIgX2luLCBfb3V0OwogICAgICAgIHZhciBjb3B5OwogICAgICAgIHZhciBmcm9tOwogICAgICAgIHZhciBmcm9tX3NvdXJjZTsKICAgICAgICB2YXIgaGVyZSA9IDA7CiAgICAgICAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7CiAgICAgICAgdmFyIGxhc3RfYml0cywgbGFzdF9vcCwgbGFzdF92YWw7CiAgICAgICAgdmFyIGxlbjsKICAgICAgICB2YXIgcmV0OwogICAgICAgIHZhciBoYnVmID0gbmV3IHV0aWxzLkJ1ZjgoNCk7CiAgICAgICAgdmFyIG9wdHM7CiAgICAgICAgdmFyIG47CiAgICAgICAgdmFyIG9yZGVyID0gWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdOwogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fCAhc3RybS5vdXRwdXQgfHwgIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsKICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87CiAgICAgICAgfQogICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0OwogICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzOwogICAgICAgIF9pbiA9IGhhdmU7CiAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgcmV0ID0gWl9PSzsKICAgICAgICBpbmZfbGVhdmU6CiAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5tb2RlKSB7CiAgICAgICAgICAgICAgY2FzZSBIRUFEOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLndyYXAgPT09IDApIHsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEVETzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwICYgMiAmJiBob2xkID09PSAzNTYxNSkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IDA7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEZMQUdTOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzID0gMDsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCEoc3RhdGUud3JhcCAmIDEpIHx8ICgoKGhvbGQgJiAyNTUpIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGhlYWRlciBjaGVjayI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKChob2xkICYgMTUpICE9PSBaX0RFRkxBVEVEKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNDsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNDsKICAgICAgICAgICAgICAgIGxlbiA9IChob2xkICYgMTUpICsgODsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS53Yml0cyA9IGxlbjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuID4gc3RhdGUud2JpdHMpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCB3aW5kb3cgc2l6ZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZG1heCA9IDEgPDwgbGVuOwogICAgICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBob2xkICYgNTEyID8gRElDVElEIDogVFlQRTsKICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIEZMQUdTOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncyA9IGhvbGQ7CiAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLmZsYWdzICYgMjU1KSAhPT0gWl9ERUZMQVRFRCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTczNDQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnRleHQgPSBob2xkID4+IDggJiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRJTUU7CiAgICAgICAgICAgICAgY2FzZSBUSU1FOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnRpbWUgPSBob2xkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzFdID0gaG9sZCA+Pj4gOCAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGJ1ZlsyXSA9IGhvbGQgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICBoYnVmWzNdID0gaG9sZCA+Pj4gMjQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDQsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBPUzsKICAgICAgICAgICAgICBjYXNlIE9TOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLnhmbGFncyA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQub3MgPSBob2xkID4+IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhidWZbMV0gPSBob2xkID4+PiA4ICYgMjU1OwogICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPSAwOwogICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRVhMRU47CiAgICAgICAgICAgICAgY2FzZSBFWExFTjoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDEwMjQpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZDsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhX2xlbiA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgaGJ1ZlsxXSA9IGhvbGQgPj4+IDggJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEVYVFJBOwogICAgICAgICAgICAgIGNhc2UgRVhUUkE6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAxMDI0KSB7CiAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBuZXcgQXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUuaGVhZC5leHRyYSwgaW5wdXQsIG5leHQsIGNvcHksIGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTkFNRTsKICAgICAgICAgICAgICBjYXNlIE5BTUU6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAyMDQ4KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNvcHkgPSAwOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmIHN0YXRlLmxlbmd0aCA8IDY1NTM2KSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ09NTUVOVDsKICAgICAgICAgICAgICBjYXNlIENPTU1FTlQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiA0MDk2KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNvcHkgPSAwOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmIHN0YXRlLmxlbmd0aCA8IDY1NTM2KSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgNTEyKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDOwogICAgICAgICAgICAgIGNhc2UgSENSQzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDUxMikgewogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaG9sZCAhPT0gKHN0YXRlLmNoZWNrICYgNjU1MzUpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaGVhZGVyIGNyYyBtaXNtYXRjaCI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmhjcmMgPSBzdGF0ZS5mbGFncyA+PiA5ICYgMTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgRElDVElEOgogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSB6c3dhcDMyKGhvbGQpOwogICAgICAgICAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgICAgICAgICBiaXRzID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESUNUOwogICAgICAgICAgICAgIGNhc2UgRElDVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogICAgICAgICAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICAgICAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgICAgICAgICAgIHJldHVybiBaX05FRURfRElDVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDE7CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICBjYXNlIFRZUEU6CiAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfQkxPQ0sgfHwgZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgVFlQRURPOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxhc3QpIHsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxhc3QgPSBob2xkICYgMTsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAxOwogICAgICAgICAgICAgICAgYml0cyAtPSAxOwogICAgICAgICAgICAgICAgc3dpdGNoIChob2xkICYgMykgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFNUT1JFRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUQUJMRTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYmxvY2sgdHlwZSI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAyOwogICAgICAgICAgICAgICAgYml0cyAtPSAyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBTVE9SRUQ6CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7CiAgICAgICAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhvbGQgJiA2NTUzNSkgIT09IChob2xkID4+PiAxNiBeIDY1NTM1KSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgNjU1MzU7CiAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFlfOwogICAgICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIENPUFlfOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IENPUFk7CiAgICAgICAgICAgICAgY2FzZSBDT1BZOgogICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBsZWZ0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KG91dHB1dCwgaW5wdXQsIG5leHQsIGNvcHksIHB1dCk7CiAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CiAgICAgICAgICAgICAgICAgIHB1dCArPSBjb3B5OwogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgVEFCTEU6CiAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IDE0KSB7CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDMxKSArIDI1NzsKICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA1OwogICAgICAgICAgICAgICAgYml0cyAtPSA1OwogICAgICAgICAgICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDMxKSArIDE7CiAgICAgICAgICAgICAgICBob2xkID4+Pj0gNTsKICAgICAgICAgICAgICAgIGJpdHMgLT0gNTsKICAgICAgICAgICAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAxNSkgKyA0OwogICAgICAgICAgICAgICAgaG9sZCA+Pj49IDQ7CiAgICAgICAgICAgICAgICBiaXRzIC09IDQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5MRU5TOwogICAgICAgICAgICAgIGNhc2UgTEVOTEVOUzoKICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmNvZGUpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gaG9sZCAmIDc7CiAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSAzOwogICAgICAgICAgICAgICAgICBiaXRzIC09IDM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5bjsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUubGVucywgMCwgMTksIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpOwogICAgICAgICAgICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBDT0RFTEVOUzsKICAgICAgICAgICAgICBjYXNlIENPREVMRU5TOgogICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhlcmVfdmFsIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChoZXJlX3ZhbCA9PT0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAyOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdOwogICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDMpOwogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZXJlX3ZhbCA9PT0gMTcpIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgNyk7CiAgICAgICAgICAgICAgICAgICAgICBob2xkID4+Pj0gMzsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gMzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDc7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAxMSArIChob2xkICYgMTI3KTsKICAgICAgICAgICAgICAgICAgICAgIGhvbGQgPj4+PSA3OwogICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSArIGNvcHkgPiBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29weS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBsZW47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gQkFEKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siOwogICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSA5OwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9OwogICAgICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2OwogICAgICAgICAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluOwogICAgICAgICAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUuZGlzdGJpdHMgfTsKICAgICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIHN0YXRlLm5sZW4sIHN0YXRlLm5kaXN0LCBzdGF0ZS5kaXN0Y29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7CiAgICAgICAgICAgICAgICBzdGF0ZS5kaXN0Yml0cyA9IG9wdHMuYml0czsKICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZXMgc2V0IjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSBMRU5fOgogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTjsKICAgICAgICAgICAgICBjYXNlIExFTjoKICAgICAgICAgICAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHsKICAgICAgICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgICAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICAgICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgICAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7CiAgICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0OwogICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgICAgICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgICAgICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDsKICAgICAgICAgICAgICAgICAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47CiAgICAgICAgICAgICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGUuYml0czsKICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gMDsKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKDEgPDwgc3RhdGUubGVuYml0cykgLSAxXTsKICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgIGhlcmVfb3AgPSBoZXJlID4+PiAxNiAmIDI1NTsKICAgICAgICAgICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgNjU1MzU7CiAgICAgICAgICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYmIChoZXJlX29wICYgMjQwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgICAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDsKICAgICAgICAgICAgICAgIGlmIChoZXJlX29wID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGhlcmVfb3AgJiAzMikgewogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoZXJlX29wICYgNjQpIHsKICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5FWFQ7CiAgICAgICAgICAgICAgY2FzZSBMRU5FWFQ6CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAgICAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKDEgPDwgc3RhdGUuZXh0cmEpIC0gMTsKICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUud2FzID0gc3RhdGUubGVuZ3RoOwogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IERJU1Q7CiAgICAgICAgICAgICAgY2FzZSBESVNUOgogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMV07CiAgICAgICAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgICAgICAgICBoZXJlX29wID0gaGVyZSA+Pj4gMTYgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGhlcmVfb3AgJiAyNDApID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0czsKICAgICAgICAgICAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7CiAgICAgICAgICAgICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArICgoaG9sZCAmICgxIDw8IGxhc3RfYml0cyArIGxhc3Rfb3ApIC0gMSkgPj4gbGFzdF9iaXRzKV07CiAgICAgICAgICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICAgICAgICAgICAgaGVyZV9vcCA9IGhlcmUgPj4+IDE2ICYgMjU1OwogICAgICAgICAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDY1NTM1OwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X2JpdHMgKyBoZXJlX2JpdHMgPD0gYml0cykgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0czsKICAgICAgICAgICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7CiAgICAgICAgICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ID0gaGVyZV92YWw7CiAgICAgICAgICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTsKICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBESVNURVhUOwogICAgICAgICAgICAgIGNhc2UgRElTVEVYVDoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5leHRyYSkgewogICAgICAgICAgICAgICAgICBuID0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc3RhdGUub2Zmc2V0ICs9IGhvbGQgJiAoMSA8PCBzdGF0ZS5leHRyYSkgLSAxOwogICAgICAgICAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gc3RhdGUuZG1heCkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IE1BVENIOwogICAgICAgICAgICAgIGNhc2UgTUFUQ0g6CiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gMCkgewogICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3B5ID0gX291dCAtIGxlZnQ7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTsKICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53aGF2ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHsKICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLnduZXh0OwogICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBzdGF0ZS53aW5kb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDsKICAgICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgewogICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKICAgICAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIExJVDoKICAgICAgICAgICAgICAgIGlmIChsZWZ0ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG91dHB1dFtwdXQrK10gPSBzdGF0ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBsZWZ0LS07CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBDSEVDSzoKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS53cmFwKSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAgICAgICAgICAgaG9sZCB8PSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9vdXQgLT0gbGVmdDsKICAgICAgICAgICAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICAgICAgICAgICAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICAgICAgICAgICAgaWYgKF9vdXQpIHsKICAgICAgICAgICAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSBzdGF0ZS5mbGFncyA/IGNyYzMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfb3V0ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS5mbGFncyA/IGhvbGQgOiB6c3dhcDMyKGhvbGQpKSAhPT0gc3RhdGUuY2hlY2spIHsKICAgICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOR1RIOwogICAgICAgICAgICAgIGNhc2UgTEVOR1RIOgogICAgICAgICAgICAgICAgaWYgKHN0YXRlLndyYXAgJiYgc3RhdGUuZmxhZ3MpIHsKICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS50b3RhbCAmIDQyOTQ5NjcyOTUpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAiaW5jb3JyZWN0IGxlbmd0aCBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBob2xkID0gMDsKICAgICAgICAgICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gRE9ORTsKICAgICAgICAgICAgICBjYXNlIERPTkU6CiAgICAgICAgICAgICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7CiAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgY2FzZSBCQUQ6CiAgICAgICAgICAgICAgICByZXQgPSBaX0RBVEFfRVJST1I7CiAgICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7CiAgICAgICAgICAgICAgY2FzZSBNRU06CiAgICAgICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgICAgICAgY2FzZSBTWU5DOgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0OwogICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDsKICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0OwogICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogICAgICAgIHN0YXRlLmhvbGQgPSBob2xkOwogICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzOwogICAgICAgIGlmIChzdGF0ZS53c2l6ZSB8fCBfb3V0ICE9PSBzdHJtLmF2YWlsX291dCAmJiBzdGF0ZS5tb2RlIDwgQkFEICYmIChzdGF0ZS5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT09IFpfRklOSVNIKSkgewogICAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCwgX291dCAtIHN0cm0uYXZhaWxfb3V0KSkgewogICAgICAgICAgICBzdGF0ZS5tb2RlID0gTUVNOwogICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9pbiAtPSBzdHJtLmF2YWlsX2luOwogICAgICAgIF9vdXQgLT0gc3RybS5hdmFpbF9vdXQ7CiAgICAgICAgc3RybS50b3RhbF9pbiArPSBfaW47CiAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICAgICAgICBzdGF0ZS50b3RhbCArPSBfb3V0OwogICAgICAgIGlmIChzdGF0ZS53cmFwICYmIF9vdXQpIHsKICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCk7CiAgICAgICAgfQogICAgICAgIHN0cm0uZGF0YV90eXBlID0gc3RhdGUuYml0cyArIChzdGF0ZS5sYXN0ID8gNjQgOiAwKSArIChzdGF0ZS5tb2RlID09PSBUWVBFID8gMTI4IDogMCkgKyAoc3RhdGUubW9kZSA9PT0gTEVOXyB8fCBzdGF0ZS5tb2RlID09PSBDT1BZXyA/IDI1NiA6IDApOwogICAgICAgIGlmICgoX2luID09PSAwICYmIF9vdXQgPT09IDAgfHwgZmx1c2ggPT09IFpfRklOSVNIKSAmJiByZXQgPT09IFpfT0spIHsKICAgICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVFbmQoc3RybSkgewogICAgICAgIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgewogICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgICAgIH0KICAgICAgICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmIChzdGF0ZS53aW5kb3cpIHsKICAgICAgICAgIHN0YXRlLndpbmRvdyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN0cm0uc3RhdGUgPSBudWxsOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVHZXRIZWFkZXIoc3RybSwgaGVhZCkgewogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICAgICB9CiAgICAgICAgc3RhdGUgPSBzdHJtLnN0YXRlOwogICAgICAgIGlmICgoc3RhdGUud3JhcCAmIDIpID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmhlYWQgPSBoZWFkOwogICAgICAgIGhlYWQuZG9uZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBaX09LOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHsKICAgICAgICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoOwogICAgICAgIHZhciBzdGF0ZTsKICAgICAgICB2YXIgZGljdGlkOwogICAgICAgIHZhciByZXQ7CiAgICAgICAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlID0gc3RybS5zdGF0ZTsKICAgICAgICBpZiAoc3RhdGUud3JhcCAhPT0gMCAmJiBzdGF0ZS5tb2RlICE9PSBESUNUKSB7CiAgICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBESUNUKSB7CiAgICAgICAgICBkaWN0aWQgPSAxOwogICAgICAgICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApOwogICAgICAgICAgaWYgKGRpY3RpZCAhPT0gc3RhdGUuY2hlY2spIHsKICAgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0ID0gdXBkYXRld2luZG93KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOwogICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgIHN0YXRlLm1vZGUgPSBNRU07CiAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmhhdmVkaWN0ID0gMTsKICAgICAgICByZXR1cm4gWl9PSzsKICAgICAgfQogICAgICBleHBvcnRzMi5pbmZsYXRlUmVzZXQgPSBpbmZsYXRlUmVzZXQ7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyOwogICAgICBleHBvcnRzMi5pbmZsYXRlUmVzZXRLZWVwID0gaW5mbGF0ZVJlc2V0S2VlcDsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUluaXQgPSBpbmZsYXRlSW5pdDsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyOwogICAgICBleHBvcnRzMi5pbmZsYXRlID0gaW5mbGF0ZTsKICAgICAgZXhwb3J0czIuaW5mbGF0ZUVuZCA9IGluZmxhdGVFbmQ7CiAgICAgIGV4cG9ydHMyLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyOwogICAgICBleHBvcnRzMi5pbmZsYXRlU2V0RGljdGlvbmFyeSA9IGluZmxhdGVTZXREaWN0aW9uYXJ5OwogICAgICBleHBvcnRzMi5pbmZsYXRlSW5mbyA9ICJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NvbnN0YW50cy5qcwogIHZhciByZXF1aXJlX2NvbnN0YW50cyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSB7CiAgICAgICAgWl9OT19GTFVTSDogMCwKICAgICAgICBaX1BBUlRJQUxfRkxVU0g6IDEsCiAgICAgICAgWl9TWU5DX0ZMVVNIOiAyLAogICAgICAgIFpfRlVMTF9GTFVTSDogMywKICAgICAgICBaX0ZJTklTSDogNCwKICAgICAgICBaX0JMT0NLOiA1LAogICAgICAgIFpfVFJFRVM6IDYsCiAgICAgICAgWl9PSzogMCwKICAgICAgICBaX1NUUkVBTV9FTkQ6IDEsCiAgICAgICAgWl9ORUVEX0RJQ1Q6IDIsCiAgICAgICAgWl9FUlJOTzogLTEsCiAgICAgICAgWl9TVFJFQU1fRVJST1I6IC0yLAogICAgICAgIFpfREFUQV9FUlJPUjogLTMsCiAgICAgICAgWl9CVUZfRVJST1I6IC01LAogICAgICAgIFpfTk9fQ09NUFJFU1NJT046IDAsCiAgICAgICAgWl9CRVNUX1NQRUVEOiAxLAogICAgICAgIFpfQkVTVF9DT01QUkVTU0lPTjogOSwKICAgICAgICBaX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLAogICAgICAgIFpfRklMVEVSRUQ6IDEsCiAgICAgICAgWl9IVUZGTUFOX09OTFk6IDIsCiAgICAgICAgWl9STEU6IDMsCiAgICAgICAgWl9GSVhFRDogNCwKICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1k6IDAsCiAgICAgICAgWl9CSU5BUlk6IDAsCiAgICAgICAgWl9URVhUOiAxLAogICAgICAgIFpfVU5LTk9XTjogMiwKICAgICAgICBaX0RFRkxBVEVEOiA4CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9nemhlYWRlci5qcwogIHZhciByZXF1aXJlX2d6aGVhZGVyID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2d6aGVhZGVyLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgZnVuY3Rpb24gR1poZWFkZXIoKSB7CiAgICAgICAgdGhpcy50ZXh0ID0gMDsKICAgICAgICB0aGlzLnRpbWUgPSAwOwogICAgICAgIHRoaXMueGZsYWdzID0gMDsKICAgICAgICB0aGlzLm9zID0gMDsKICAgICAgICB0aGlzLmV4dHJhID0gbnVsbDsKICAgICAgICB0aGlzLmV4dHJhX2xlbiA9IDA7CiAgICAgICAgdGhpcy5uYW1lID0gIiI7CiAgICAgICAgdGhpcy5jb21tZW50ID0gIiI7CiAgICAgICAgdGhpcy5oY3JjID0gMDsKICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTsKICAgICAgfQogICAgICBtb2R1bGUyLmV4cG9ydHMgPSBHWmhlYWRlcjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9pbmZsYXRlLmpzCiAgdmFyIHJlcXVpcmVfaW5mbGF0ZTIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vcGFrb0AxLjAuMTEvbm9kZV9tb2R1bGVzL3Bha28vbGliL2luZmxhdGUuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgemxpYl9pbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlKCk7CiAgICAgIHZhciB1dGlscyA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICAgIHZhciBzdHJpbmdzID0gcmVxdWlyZV9zdHJpbmdzKCk7CiAgICAgIHZhciBjID0gcmVxdWlyZV9jb25zdGFudHMoKTsKICAgICAgdmFyIG1zZyA9IHJlcXVpcmVfbWVzc2FnZXMoKTsKICAgICAgdmFyIFpTdHJlYW0gPSByZXF1aXJlX3pzdHJlYW0oKTsKICAgICAgdmFyIEdaaGVhZGVyID0gcmVxdWlyZV9nemhlYWRlcigpOwogICAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgICBmdW5jdGlvbiBJbmZsYXRlMihvcHRpb25zKSB7CiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGUyKSkKICAgICAgICAgIHJldHVybiBuZXcgSW5mbGF0ZTIob3B0aW9ucyk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgICAgICAgIGNodW5rU2l6ZTogMTYzODQsCiAgICAgICAgICB3aW5kb3dCaXRzOiAwLAogICAgICAgICAgdG86ICIiCiAgICAgICAgfSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgdmFyIG9wdCA9IHRoaXMub3B0aW9uczsKICAgICAgICBpZiAob3B0LnJhdyAmJiBvcHQud2luZG93Qml0cyA+PSAwICYmIG9wdC53aW5kb3dCaXRzIDwgMTYpIHsKICAgICAgICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzOwogICAgICAgICAgaWYgKG9wdC53aW5kb3dCaXRzID09PSAwKSB7CiAgICAgICAgICAgIG9wdC53aW5kb3dCaXRzID0gLTE1OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3B0LndpbmRvd0JpdHMgPj0gMCAmJiBvcHQud2luZG93Qml0cyA8IDE2ICYmICEob3B0aW9ucyAmJiBvcHRpb25zLndpbmRvd0JpdHMpKSB7CiAgICAgICAgICBvcHQud2luZG93Qml0cyArPSAzMjsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdC53aW5kb3dCaXRzID4gMTUgJiYgb3B0LndpbmRvd0JpdHMgPCA0OCkgewogICAgICAgICAgaWYgKChvcHQud2luZG93Qml0cyAmIDE1KSA9PT0gMCkgewogICAgICAgICAgICBvcHQud2luZG93Qml0cyB8PSAxNTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5lcnIgPSAwOwogICAgICAgIHRoaXMubXNnID0gIiI7CiAgICAgICAgdGhpcy5lbmRlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY2h1bmtzID0gW107CiAgICAgICAgdGhpcy5zdHJtID0gbmV3IFpTdHJlYW0oKTsKICAgICAgICB0aGlzLnN0cm0uYXZhaWxfb3V0ID0gMDsKICAgICAgICB2YXIgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sIG9wdC53aW5kb3dCaXRzKTsKICAgICAgICBpZiAoc3RhdHVzICE9PSBjLlpfT0spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGVhZGVyID0gbmV3IEdaaGVhZGVyKCk7CiAgICAgICAgemxpYl9pbmZsYXRlLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLCB0aGlzLmhlYWRlcik7CiAgICAgICAgaWYgKG9wdC5kaWN0aW9uYXJ5KSB7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBvcHQuZGljdGlvbmFyeSA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihvcHQuZGljdGlvbmFyeSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwob3B0LmRpY3Rpb25hcnkpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iKSB7CiAgICAgICAgICAgIG9wdC5kaWN0aW9uYXJ5ID0gbmV3IFVpbnQ4QXJyYXkob3B0LmRpY3Rpb25hcnkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wdC5yYXcpIHsKICAgICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgb3B0LmRpY3Rpb25hcnkpOwogICAgICAgICAgICBpZiAoc3RhdHVzICE9PSBjLlpfT0spIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEluZmxhdGUyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogICAgICAgIHZhciBzdHJtID0gdGhpcy5zdHJtOwogICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogICAgICAgIHZhciBkaWN0aW9uYXJ5ID0gdGhpcy5vcHRpb25zLmRpY3Rpb25hcnk7CiAgICAgICAgdmFyIHN0YXR1cywgX21vZGU7CiAgICAgICAgdmFyIG5leHRfb3V0X3V0ZjgsIHRhaWwsIHV0ZjhzdHI7CiAgICAgICAgdmFyIGFsbG93QnVmRXJyb3IgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy5lbmRlZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBfbW9kZSA9IG1vZGUgPT09IH5+bW9kZSA/IG1vZGUgOiBtb2RlID09PSB0cnVlID8gYy5aX0ZJTklTSCA6IGMuWl9OT19GTFVTSDsKICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5iaW5zdHJpbmcyYnVmKGRhdGEpOwogICAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIikgewogICAgICAgICAgc3RybS5pbnB1dCA9IG5ldyBVaW50OEFycmF5KGRhdGEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdHJtLmlucHV0ID0gZGF0YTsKICAgICAgICB9CiAgICAgICAgc3RybS5uZXh0X2luID0gMDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIHN0cm0ub3V0cHV0ID0gbmV3IHV0aWxzLkJ1ZjgoY2h1bmtTaXplKTsKICAgICAgICAgICAgc3RybS5uZXh0X291dCA9IDA7CiAgICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplOwogICAgICAgICAgfQogICAgICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGUoc3RybSwgYy5aX05PX0ZMVVNIKTsKICAgICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9ORUVEX0RJQ1QgJiYgZGljdGlvbmFyeSkgewogICAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBkaWN0aW9uYXJ5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9CVUZfRVJST1IgJiYgYWxsb3dCdWZFcnJvciA9PT0gdHJ1ZSkgewogICAgICAgICAgICBzdGF0dXMgPSBjLlpfT0s7CiAgICAgICAgICAgIGFsbG93QnVmRXJyb3IgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0dXMgIT09IGMuWl9TVFJFQU1fRU5EICYmIHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICAgICAgICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJtLm5leHRfb3V0KSB7CiAgICAgICAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCB8fCBzdGF0dXMgPT09IGMuWl9TVFJFQU1fRU5EIHx8IHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgKF9tb2RlID09PSBjLlpfRklOSVNIIHx8IF9tb2RlID09PSBjLlpfU1lOQ19GTFVTSCkpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgbmV4dF9vdXRfdXRmOCA9IHN0cmluZ3MudXRmOGJvcmRlcihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCk7CiAgICAgICAgICAgICAgICB0YWlsID0gc3RybS5uZXh0X291dCAtIG5leHRfb3V0X3V0Zjg7CiAgICAgICAgICAgICAgICB1dGY4c3RyID0gc3RyaW5ncy5idWYyc3RyaW5nKHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4KTsKICAgICAgICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSB0YWlsOwogICAgICAgICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemUgLSB0YWlsOwogICAgICAgICAgICAgICAgaWYgKHRhaWwpIHsKICAgICAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4LCB0YWlsLCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMub25EYXRhKHV0ZjhzdHIpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YSh1dGlscy5zaHJpbmtCdWYoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgICAgIGFsbG93QnVmRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChzdHJtLmF2YWlsX2luID4gMCB8fCBzdHJtLmF2YWlsX291dCA9PT0gMCkgJiYgc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCk7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQpIHsKICAgICAgICAgIF9tb2RlID0gYy5aX0ZJTklTSDsKICAgICAgICB9CiAgICAgICAgaWYgKF9tb2RlID09PSBjLlpfRklOSVNIKSB7CiAgICAgICAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pOwogICAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7CiAgICAgICAgICByZXR1cm4gc3RhdHVzID09PSBjLlpfT0s7CiAgICAgICAgfQogICAgICAgIGlmIChfbW9kZSA9PT0gYy5aX1NZTkNfRkxVU0gpIHsKICAgICAgICAgIHRoaXMub25FbmQoYy5aX09LKTsKICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gMDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfTsKICAgICAgSW5mbGF0ZTIucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uKGNodW5rKSB7CiAgICAgICAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7CiAgICAgIH07CiAgICAgIEluZmxhdGUyLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogICAgICAgIGlmIChzdGF0dXMgPT09IGMuWl9PSykgewogICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLmNodW5rcy5qb2luKCIiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gdXRpbHMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY2h1bmtzID0gW107CiAgICAgICAgdGhpcy5lcnIgPSBzdGF0dXM7CiAgICAgICAgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnOwogICAgICB9OwogICAgICBmdW5jdGlvbiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGluZmxhdG9yID0gbmV3IEluZmxhdGUyKG9wdGlvbnMpOwogICAgICAgIGluZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpOwogICAgICAgIGlmIChpbmZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IGluZmxhdG9yLm1zZyB8fCBtc2dbaW5mbGF0b3IuZXJyXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGluZmxhdG9yLnJlc3VsdDsKICAgICAgfQogICAgICBmdW5jdGlvbiBpbmZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5yYXcgPSB0cnVlOwogICAgICAgIHJldHVybiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgfQogICAgICBleHBvcnRzMi5JbmZsYXRlID0gSW5mbGF0ZTI7CiAgICAgIGV4cG9ydHMyLmluZmxhdGUgPSBpbmZsYXRlOwogICAgICBleHBvcnRzMi5pbmZsYXRlUmF3ID0gaW5mbGF0ZVJhdzsKICAgICAgZXhwb3J0czIudW5nemlwID0gaW5mbGF0ZTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Bha29AMS4wLjExL25vZGVfbW9kdWxlcy9wYWtvL2luZGV4LmpzCiAgdmFyIHJlcXVpcmVfcGFrbyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYWtvQDEuMC4xMS9ub2RlX21vZHVsZXMvcGFrby9pbmRleC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBhc3NpZ24gPSByZXF1aXJlX2NvbW1vbigpLmFzc2lnbjsKICAgICAgdmFyIGRlZmxhdGUgPSByZXF1aXJlX2RlZmxhdGUyKCk7CiAgICAgIHZhciBpbmZsYXRlID0gcmVxdWlyZV9pbmZsYXRlMigpOwogICAgICB2YXIgY29uc3RhbnRzID0gcmVxdWlyZV9jb25zdGFudHMoKTsKICAgICAgdmFyIHBha28gPSB7fTsKICAgICAgYXNzaWduKHBha28sIGRlZmxhdGUsIGluZmxhdGUsIGNvbnN0YW50cyk7CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IHBha287CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb25nQDQuMC4wL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzCiAgdmFyIHJlcXVpcmVfbG9uZyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sb25nQDQuMC4wL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIihleHBvcnRzMiwgbW9kdWxlMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IExvbmc0OwogICAgICB2YXIgd2FzbSA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgd2FzbSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG5ldyBVaW50OEFycmF5KFsKICAgICAgICAgIDAsCiAgICAgICAgICA5NywKICAgICAgICAgIDExNSwKICAgICAgICAgIDEwOSwKICAgICAgICAgIDEsCiAgICAgICAgICAwLAogICAgICAgICAgMCwKICAgICAgICAgIDAsCiAgICAgICAgICAxLAogICAgICAgICAgMTMsCiAgICAgICAgICAyLAogICAgICAgICAgOTYsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNywKICAgICAgICAgIDk2LAogICAgICAgICAgNCwKICAgICAgICAgIDEyNywKICAgICAgICAgIDEyNywKICAgICAgICAgIDEyNywKICAgICAgICAgIDEyNywKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAzLAogICAgICAgICAgNywKICAgICAgICAgIDYsCiAgICAgICAgICAwLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEsCiAgICAgICAgICA2LAogICAgICAgICAgNiwKICAgICAgICAgIDEsCiAgICAgICAgICAxMjcsCiAgICAgICAgICAxLAogICAgICAgICAgNjUsCiAgICAgICAgICAwLAogICAgICAgICAgMTEsCiAgICAgICAgICA3LAogICAgICAgICAgNTAsCiAgICAgICAgICA2LAogICAgICAgICAgMywKICAgICAgICAgIDEwOSwKICAgICAgICAgIDExNywKICAgICAgICAgIDEwOCwKICAgICAgICAgIDAsCiAgICAgICAgICAxLAogICAgICAgICAgNSwKICAgICAgICAgIDEwMCwKICAgICAgICAgIDEwNSwKICAgICAgICAgIDExOCwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE1LAogICAgICAgICAgMCwKICAgICAgICAgIDIsCiAgICAgICAgICA1LAogICAgICAgICAgMTAwLAogICAgICAgICAgMTA1LAogICAgICAgICAgMTE4LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMTcsCiAgICAgICAgICAwLAogICAgICAgICAgMywKICAgICAgICAgIDUsCiAgICAgICAgICAxMTQsCiAgICAgICAgICAxMDEsCiAgICAgICAgICAxMDksCiAgICAgICAgICA5NSwKICAgICAgICAgIDExNSwKICAgICAgICAgIDAsCiAgICAgICAgICA0LAogICAgICAgICAgNSwKICAgICAgICAgIDExNCwKICAgICAgICAgIDEwMSwKICAgICAgICAgIDEwOSwKICAgICAgICAgIDk1LAogICAgICAgICAgMTE3LAogICAgICAgICAgMCwKICAgICAgICAgIDUsCiAgICAgICAgICA4LAogICAgICAgICAgMTAzLAogICAgICAgICAgMTAxLAogICAgICAgICAgMTE2LAogICAgICAgICAgOTUsCiAgICAgICAgICAxMDQsCiAgICAgICAgICAxMDUsCiAgICAgICAgICAxMDMsCiAgICAgICAgICAxMDQsCiAgICAgICAgICAwLAogICAgICAgICAgMCwKICAgICAgICAgIDEwLAogICAgICAgICAgMTkxLAogICAgICAgICAgMSwKICAgICAgICAgIDYsCiAgICAgICAgICA0LAogICAgICAgICAgMCwKICAgICAgICAgIDM1LAogICAgICAgICAgMCwKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI2LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI3LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI4LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTI5LAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExLAogICAgICAgICAgMzYsCiAgICAgICAgICAxLAogICAgICAgICAgMSwKICAgICAgICAgIDEyNiwKICAgICAgICAgIDMyLAogICAgICAgICAgMCwKICAgICAgICAgIDE3MywKICAgICAgICAgIDMyLAogICAgICAgICAgMSwKICAgICAgICAgIDE3MywKICAgICAgICAgIDY2LAogICAgICAgICAgMzIsCiAgICAgICAgICAxMzQsCiAgICAgICAgICAxMzIsCiAgICAgICAgICAzMiwKICAgICAgICAgIDIsCiAgICAgICAgICAxNzMsCiAgICAgICAgICAzMiwKICAgICAgICAgIDMsCiAgICAgICAgICAxNzMsCiAgICAgICAgICA2NiwKICAgICAgICAgIDMyLAogICAgICAgICAgMTM0LAogICAgICAgICAgMTMyLAogICAgICAgICAgMTMwLAogICAgICAgICAgMzQsCiAgICAgICAgICA0LAogICAgICAgICAgNjYsCiAgICAgICAgICAzMiwKICAgICAgICAgIDEzNSwKICAgICAgICAgIDE2NywKICAgICAgICAgIDM2LAogICAgICAgICAgMCwKICAgICAgICAgIDMyLAogICAgICAgICAgNCwKICAgICAgICAgIDE2NywKICAgICAgICAgIDExCiAgICAgICAgXSkpLCB7fSkuZXhwb3J0czsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICB9CiAgICAgIGZ1bmN0aW9uIExvbmc0KGxvdywgaGlnaCwgdW5zaWduZWQpIHsKICAgICAgICB0aGlzLmxvdyA9IGxvdyB8IDA7CiAgICAgICAgdGhpcy5oaWdoID0gaGlnaCB8IDA7CiAgICAgICAgdGhpcy51bnNpZ25lZCA9ICEhdW5zaWduZWQ7CiAgICAgIH0KICAgICAgTG9uZzQucHJvdG90eXBlLl9faXNMb25nX187CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nNC5wcm90b3R5cGUsICJfX2lzTG9uZ19fIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZnVuY3Rpb24gaXNMb25nKG9iaikgewogICAgICAgIHJldHVybiAob2JqICYmIG9ialsiX19pc0xvbmdfXyJdKSA9PT0gdHJ1ZTsKICAgICAgfQogICAgICBMb25nNC5pc0xvbmcgPSBpc0xvbmc7CiAgICAgIHZhciBJTlRfQ0FDSEUgPSB7fTsKICAgICAgdmFyIFVJTlRfQ0FDSEUgPSB7fTsKICAgICAgZnVuY3Rpb24gZnJvbUludCh2YWx1ZSwgdW5zaWduZWQpIHsKICAgICAgICB2YXIgb2JqLCBjYWNoZWRPYmosIGNhY2hlOwogICAgICAgIGlmICh1bnNpZ25lZCkgewogICAgICAgICAgdmFsdWUgPj4+PSAwOwogICAgICAgICAgaWYgKGNhY2hlID0gMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikgewogICAgICAgICAgICBjYWNoZWRPYmogPSBVSU5UX0NBQ0hFW3ZhbHVlXTsKICAgICAgICAgICAgaWYgKGNhY2hlZE9iaikKICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqOwogICAgICAgICAgfQogICAgICAgICAgb2JqID0gZnJvbUJpdHModmFsdWUsICh2YWx1ZSB8IDApIDwgMCA/IC0xIDogMCwgdHJ1ZSk7CiAgICAgICAgICBpZiAoY2FjaGUpCiAgICAgICAgICAgIFVJTlRfQ0FDSEVbdmFsdWVdID0gb2JqOwogICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFsdWUgfD0gMDsKICAgICAgICAgIGlmIChjYWNoZSA9IC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpIHsKICAgICAgICAgICAgY2FjaGVkT2JqID0gSU5UX0NBQ0hFW3ZhbHVlXTsKICAgICAgICAgICAgaWYgKGNhY2hlZE9iaikKICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqOwogICAgICAgICAgfQogICAgICAgICAgb2JqID0gZnJvbUJpdHModmFsdWUsIHZhbHVlIDwgMCA/IC0xIDogMCwgZmFsc2UpOwogICAgICAgICAgaWYgKGNhY2hlKQogICAgICAgICAgICBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqOwogICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbUludCA9IGZyb21JbnQ7CiAgICAgIGZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7CiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkKICAgICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICBpZiAodW5zaWduZWQpIHsKICAgICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICAgIHJldHVybiBVWkVSTzsKICAgICAgICAgIGlmICh2YWx1ZSA+PSBUV09fUFdSXzY0X0RCTCkKICAgICAgICAgICAgcmV0dXJuIE1BWF9VTlNJR05FRF9WQUxVRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHZhbHVlIDw9IC1UV09fUFdSXzYzX0RCTCkKICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsKICAgICAgICAgIGlmICh2YWx1ZSArIDEgPj0gVFdPX1BXUl82M19EQkwpCiAgICAgICAgICAgIHJldHVybiBNQVhfVkFMVUU7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgICByZXR1cm4gZnJvbU51bWJlcigtdmFsdWUsIHVuc2lnbmVkKS5uZWcoKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModmFsdWUgJSBUV09fUFdSXzMyX0RCTCB8IDAsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwgfCAwLCB1bnNpZ25lZCk7CiAgICAgIH0KICAgICAgTG9uZzQuZnJvbU51bWJlciA9IGZyb21OdW1iZXI7CiAgICAgIGZ1bmN0aW9uIGZyb21CaXRzKGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCkgewogICAgICAgIHJldHVybiBuZXcgTG9uZzQobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTsKICAgICAgfQogICAgICBMb25nNC5mcm9tQml0cyA9IGZyb21CaXRzOwogICAgICB2YXIgcG93X2RibCA9IE1hdGgucG93OwogICAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0ciwgdW5zaWduZWQsIHJhZGl4KSB7CiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDApCiAgICAgICAgICB0aHJvdyBFcnJvcigiZW1wdHkgc3RyaW5nIik7CiAgICAgICAgaWYgKHN0ciA9PT0gIk5hTiIgfHwgc3RyID09PSAiSW5maW5pdHkiIHx8IHN0ciA9PT0gIitJbmZpbml0eSIgfHwgc3RyID09PSAiLUluZmluaXR5IikKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICh0eXBlb2YgdW5zaWduZWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICByYWRpeCA9IHVuc2lnbmVkLCB1bnNpZ25lZCA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1bnNpZ25lZCA9ICEhdW5zaWduZWQ7CiAgICAgICAgfQogICAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7CiAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KQogICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigicmFkaXgiKTsKICAgICAgICB2YXIgcDsKICAgICAgICBpZiAoKHAgPSBzdHIuaW5kZXhPZigiLSIpKSA+IDApCiAgICAgICAgICB0aHJvdyBFcnJvcigiaW50ZXJpb3IgaHlwaGVuIik7CiAgICAgICAgZWxzZSBpZiAocCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgdW5zaWduZWQsIHJhZGl4KS5uZWcoKTsKICAgICAgICB9CiAgICAgICAgdmFyIHJhZGl4VG9Qb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgOCkpOwogICAgICAgIHZhciByZXN1bHQgPSBaRVJPOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSA4KSB7CiAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKDgsIHN0ci5sZW5ndGggLSBpKSwgdmFsdWUgPSBwYXJzZUludChzdHIuc3Vic3RyaW5nKGksIGkgKyBzaXplKSwgcmFkaXgpOwogICAgICAgICAgaWYgKHNpemUgPCA4KSB7CiAgICAgICAgICAgIHZhciBwb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgc2l6ZSkpOwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubXVsKHBvd2VyKS5hZGQoZnJvbU51bWJlcih2YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChyYWRpeFRvUG93ZXIpOwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVzdWx0LnVuc2lnbmVkID0gdW5zaWduZWQ7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBMb25nNC5mcm9tU3RyaW5nID0gZnJvbVN0cmluZzsKICAgICAgZnVuY3Rpb24gZnJvbVZhbHVlKHZhbCwgdW5zaWduZWQpIHsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gIm51bWJlciIpCiAgICAgICAgICByZXR1cm4gZnJvbU51bWJlcih2YWwsIHVuc2lnbmVkKTsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gInN0cmluZyIpCiAgICAgICAgICByZXR1cm4gZnJvbVN0cmluZyh2YWwsIHVuc2lnbmVkKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModmFsLmxvdywgdmFsLmhpZ2gsIHR5cGVvZiB1bnNpZ25lZCA9PT0gImJvb2xlYW4iID8gdW5zaWduZWQgOiB2YWwudW5zaWduZWQpOwogICAgICB9CiAgICAgIExvbmc0LmZyb21WYWx1ZSA9IGZyb21WYWx1ZTsKICAgICAgdmFyIFRXT19QV1JfMTZfREJMID0gMSA8PCAxNjsKICAgICAgdmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDsKICAgICAgdmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDsKICAgICAgdmFyIFRXT19QV1JfNjRfREJMID0gVFdPX1BXUl8zMl9EQkwgKiBUV09fUFdSXzMyX0RCTDsKICAgICAgdmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyOwogICAgICB2YXIgVFdPX1BXUl8yNCA9IGZyb21JbnQoVFdPX1BXUl8yNF9EQkwpOwogICAgICB2YXIgWkVSTyA9IGZyb21JbnQoMCk7CiAgICAgIExvbmc0LlpFUk8gPSBaRVJPOwogICAgICB2YXIgVVpFUk8gPSBmcm9tSW50KDAsIHRydWUpOwogICAgICBMb25nNC5VWkVSTyA9IFVaRVJPOwogICAgICB2YXIgT05FID0gZnJvbUludCgxKTsKICAgICAgTG9uZzQuT05FID0gT05FOwogICAgICB2YXIgVU9ORSA9IGZyb21JbnQoMSwgdHJ1ZSk7CiAgICAgIExvbmc0LlVPTkUgPSBVT05FOwogICAgICB2YXIgTkVHX09ORSA9IGZyb21JbnQoLTEpOwogICAgICBMb25nNC5ORUdfT05FID0gTkVHX09ORTsKICAgICAgdmFyIE1BWF9WQUxVRSA9IGZyb21CaXRzKDQyOTQ5NjcyOTUgfCAwLCAyMTQ3NDgzNjQ3IHwgMCwgZmFsc2UpOwogICAgICBMb25nNC5NQVhfVkFMVUUgPSBNQVhfVkFMVUU7CiAgICAgIHZhciBNQVhfVU5TSUdORURfVkFMVUUgPSBmcm9tQml0cyg0Mjk0OTY3Mjk1IHwgMCwgNDI5NDk2NzI5NSB8IDAsIHRydWUpOwogICAgICBMb25nNC5NQVhfVU5TSUdORURfVkFMVUUgPSBNQVhfVU5TSUdORURfVkFMVUU7CiAgICAgIHZhciBNSU5fVkFMVUUgPSBmcm9tQml0cygwLCAyMTQ3NDgzNjQ4IHwgMCwgZmFsc2UpOwogICAgICBMb25nNC5NSU5fVkFMVUUgPSBNSU5fVkFMVUU7CiAgICAgIHZhciBMb25nUHJvdG90eXBlID0gTG9uZzQucHJvdG90eXBlOwogICAgICBMb25nUHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gdG9JbnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyB0aGlzLmxvdyA+Pj4gMCA6IHRoaXMubG93OwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIyKCkgewogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkKQogICAgICAgICAgcmV0dXJuICh0aGlzLmhpZ2ggPj4+IDApICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkgewogICAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7CiAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KQogICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigicmFkaXgiKTsKICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiAiMCI7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7CiAgICAgICAgICAgIHZhciByYWRpeExvbmcgPSBmcm9tTnVtYmVyKHJhZGl4KSwgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSwgcmVtMSA9IGRpdi5tdWwocmFkaXhMb25nKS5zdWIodGhpcyk7CiAgICAgICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtMS50b0ludCgpLnRvU3RyaW5nKHJhZGl4KTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gIi0iICsgdGhpcy5uZWcoKS50b1N0cmluZyhyYWRpeCk7CiAgICAgICAgfQogICAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSwgcmVtID0gdGhpczsKICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksIGludHZhbCA9IHJlbS5zdWIocmVtRGl2Lm11bChyYWRpeFRvUG93ZXIpKS50b0ludCgpID4+PiAwLCBkaWdpdHMgPSBpbnR2YWwudG9TdHJpbmcocmFkaXgpOwogICAgICAgICAgcmVtID0gcmVtRGl2OwogICAgICAgICAgaWYgKHJlbS5pc1plcm8oKSkKICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDYpCiAgICAgICAgICAgICAgZGlnaXRzID0gIjAiICsgZGlnaXRzOwogICAgICAgICAgICByZXN1bHQgPSAiIiArIGRpZ2l0cyArIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRIaWdoQml0c1Vuc2lnbmVkKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TG93Qml0cyA9IGZ1bmN0aW9uIGdldExvd0JpdHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubG93OwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5sb3cgPj4+IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZ2V0TnVtQml0c0FicyA9IGZ1bmN0aW9uIGdldE51bUJpdHNBYnMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgcmV0dXJuIHRoaXMuZXEoTUlOX1ZBTFVFKSA/IDY0IDogdGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7CiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaGlnaCAhPSAwID8gdGhpcy5oaWdoIDogdGhpcy5sb3c7CiAgICAgICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKQogICAgICAgICAgaWYgKCh2YWwgJiAxIDw8IGJpdCkgIT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybygpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmVxeiA9IExvbmdQcm90b3R5cGUuaXNaZXJvOwogICAgICBMb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkgewogICAgICAgIHJldHVybiAhdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiBpc1Bvc2l0aXZlKCkgewogICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAxOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLnVuc2lnbmVkICE9PSBvdGhlci51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPj4+IDMxID09PSAxICYmIG90aGVyLmhpZ2ggPj4+IDMxID09PSAxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdzsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5lcSA9IExvbmdQcm90b3R5cGUuZXF1YWxzOwogICAgICBMb25nUHJvdG90eXBlLm5vdEVxdWFscyA9IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikgewogICAgICAgIHJldHVybiAhdGhpcy5lcShvdGhlcik7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVxID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7CiAgICAgIExvbmdQcm90b3R5cGUubmUgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFsczsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbiA9IGZ1bmN0aW9uIGxlc3NUaGFuKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPCAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbjsKICAgICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBsZXNzVGhhbk9yRXF1YWwob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wKG90aGVyKSA8PSAwOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmx0ZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmxlID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWw7CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbihvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXAob3RoZXIpID4gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47CiAgICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcChvdGhlcikgPj0gMDsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDsKICAgICAgTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsOwogICAgICBMb25nUHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKG90aGVyKSB7CiAgICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKQogICAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpOwogICAgICAgIGlmICh0aGlzLmVxKG90aGVyKSkKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksIG90aGVyTmVnID0gb3RoZXIuaXNOZWdhdGl2ZSgpOwogICAgICAgIGlmICh0aGlzTmVnICYmICFvdGhlck5lZykKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBpZiAoIXRoaXNOZWcgJiYgb3RoZXJOZWcpCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpcy5zdWIob3RoZXIpLmlzTmVnYXRpdmUoKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gb3RoZXIuaGlnaCA+Pj4gMCA+IHRoaXMuaGlnaCA+Pj4gMCB8fCBvdGhlci5oaWdoID09PSB0aGlzLmhpZ2ggJiYgb3RoZXIubG93ID4+PiAwID4gdGhpcy5sb3cgPj4+IDAgPyAtMSA6IDE7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuZXEoTUlOX1ZBTFVFKSkKICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7CiAgICAgICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKE9ORSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubmVnID0gTG9uZ1Byb3RvdHlwZS5uZWdhdGU7CiAgICAgIExvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkgewogICAgICAgIGlmICghaXNMb25nKGFkZGVuZCkpCiAgICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTsKICAgICAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjsKICAgICAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgNjU1MzU7CiAgICAgICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjsKICAgICAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiA2NTUzNTsKICAgICAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2OwogICAgICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBhZGRlbmQubG93ID4+PiAxNjsKICAgICAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDY1NTM1OwogICAgICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwOwogICAgICAgIGMwMCArPSBhMDAgKyBiMDA7CiAgICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7CiAgICAgICAgYzAwICY9IDY1NTM1OwogICAgICAgIGMxNiArPSBhMTYgKyBiMTY7CiAgICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7CiAgICAgICAgYzE2ICY9IDY1NTM1OwogICAgICAgIGMzMiArPSBhMzIgKyBiMzI7CiAgICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7CiAgICAgICAgYzMyICY9IDY1NTM1OwogICAgICAgIGM0OCArPSBhNDggKyBiNDg7CiAgICAgICAgYzQ4ICY9IDY1NTM1OwogICAgICAgIHJldHVybiBmcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMiwgdGhpcy51bnNpZ25lZCk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChzdWJ0cmFoZW5kKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoc3VidHJhaGVuZCkpCiAgICAgICAgICBzdWJ0cmFoZW5kID0gZnJvbVZhbHVlKHN1YnRyYWhlbmQpOwogICAgICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZygpKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zdWIgPSBMb25nUHJvdG90eXBlLnN1YnRyYWN0OwogICAgICBMb25nUHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gbXVsdGlwbHkobXVsdGlwbGllcikgewogICAgICAgIGlmICh0aGlzLmlzWmVybygpKQogICAgICAgICAgcmV0dXJuIFpFUk87CiAgICAgICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpCiAgICAgICAgICBtdWx0aXBsaWVyID0gZnJvbVZhbHVlKG11bHRpcGxpZXIpOwogICAgICAgIGlmICh3YXNtKSB7CiAgICAgICAgICB2YXIgbG93ID0gd2FzbS5tdWwodGhpcy5sb3csIHRoaXMuaGlnaCwgbXVsdGlwbGllci5sb3csIG11bHRpcGxpZXIuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiBaRVJPOwogICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpCiAgICAgICAgICByZXR1cm4gbXVsdGlwbGllci5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTzsKICAgICAgICBpZiAobXVsdGlwbGllci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87CiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkubXVsKG11bHRpcGxpZXIpLm5lZygpOwogICAgICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICByZXR1cm4gdGhpcy5tdWwobXVsdGlwbGllci5uZWcoKSkubmVnKCk7CiAgICAgICAgaWYgKHRoaXMubHQoVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sdChUV09fUFdSXzI0KSkKICAgICAgICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMudG9OdW1iZXIoKSAqIG11bHRpcGxpZXIudG9OdW1iZXIoKSwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7CiAgICAgICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDY1NTM1OwogICAgICAgIHZhciBiMTYgPSBtdWx0aXBsaWVyLmxvdyA+Pj4gMTY7CiAgICAgICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgNjU1MzU7CiAgICAgICAgdmFyIGM0OCA9IDAsIGMzMiA9IDAsIGMxNiA9IDAsIGMwMCA9IDA7CiAgICAgICAgYzAwICs9IGEwMCAqIGIwMDsKICAgICAgICBjMTYgKz0gYzAwID4+PiAxNjsKICAgICAgICBjMDAgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGExNiAqIGIwMDsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzE2ICs9IGEwMCAqIGIxNjsKICAgICAgICBjMzIgKz0gYzE2ID4+PiAxNjsKICAgICAgICBjMTYgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEzMiAqIGIwMDsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGExNiAqIGIxNjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzMyICs9IGEwMCAqIGIzMjsKICAgICAgICBjNDggKz0gYzMyID4+PiAxNjsKICAgICAgICBjMzIgJj0gNjU1MzU7CiAgICAgICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODsKICAgICAgICBjNDggJj0gNjU1MzU7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGMxNiA8PCAxNiB8IGMwMCwgYzQ4IDw8IDE2IHwgYzMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tdWwgPSBMb25nUHJvdG90eXBlLm11bHRpcGx5OwogICAgICBMb25nUHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShkaXZpc29yKSB7CiAgICAgICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpCiAgICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpOwogICAgICAgIGlmIChkaXZpc29yLmlzWmVybygpKQogICAgICAgICAgdGhyb3cgRXJyb3IoImRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA9PT0gLTIxNDc0ODM2NDggJiYgZGl2aXNvci5sb3cgPT09IC0xICYmIGRpdmlzb3IuaGlnaCA9PT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLmRpdl91IDogd2FzbS5kaXZfcykodGhpcy5sb3csIHRoaXMuaGlnaCwgZGl2aXNvci5sb3csIGRpdmlzb3IuaGlnaCk7CiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc1plcm8oKSkKICAgICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPOwogICAgICAgIHZhciBhcHByb3gsIHJlbSwgcmVzOwogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkgewogICAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5lcShPTkUpIHx8IGRpdmlzb3IuZXEoTkVHX09ORSkpCiAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsKICAgICAgICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICAgIHJldHVybiBPTkU7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciBoYWxmVGhpcyA9IHRoaXMuc2hyKDEpOwogICAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGwoMSk7CiAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IuaXNOZWdhdGl2ZSgpID8gT05FIDogTkVHX09ORTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVtID0gdGhpcy5zdWIoZGl2aXNvci5tdWwoYXBwcm94KSk7CiAgICAgICAgICAgICAgICByZXMgPSBhcHByb3guYWRkKHJlbS5kaXYoZGl2aXNvcikpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTzsKICAgICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgICBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWcoKSkubmVnKCk7CiAgICAgICAgICByZXMgPSBaRVJPOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpCiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTsKICAgICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMpKQogICAgICAgICAgICByZXR1cm4gVVpFUk87CiAgICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzLnNocnUoMSkpKQogICAgICAgICAgICByZXR1cm4gVU9ORTsKICAgICAgICAgIHJlcyA9IFVaRVJPOwogICAgICAgIH0KICAgICAgICByZW0gPSB0aGlzOwogICAgICAgIHdoaWxlIChyZW0uZ3RlKGRpdmlzb3IpKSB7CiAgICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7CiAgICAgICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLCBkZWx0YSA9IGxvZzIgPD0gNDggPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLCBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCksIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7CiAgICAgICAgICB3aGlsZSAoYXBwcm94UmVtLmlzTmVnYXRpdmUoKSB8fCBhcHByb3hSZW0uZ3QocmVtKSkgewogICAgICAgICAgICBhcHByb3ggLT0gZGVsdGE7CiAgICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94LCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpCiAgICAgICAgICAgIGFwcHJveFJlcyA9IE9ORTsKICAgICAgICAgIHJlcyA9IHJlcy5hZGQoYXBwcm94UmVzKTsKICAgICAgICAgIHJlbSA9IHJlbS5zdWIoYXBwcm94UmVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5kaXYgPSBMb25nUHJvdG90eXBlLmRpdmlkZTsKICAgICAgTG9uZ1Byb3RvdHlwZS5tb2R1bG8gPSBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikgewogICAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKQogICAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTsKICAgICAgICBpZiAod2FzbSkgewogICAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5yZW1fdSA6IHdhc20ucmVtX3MpKHRoaXMubG93LCB0aGlzLmhpZ2gsIGRpdmlzb3IubG93LCBkaXZpc29yLmhpZ2gpOwogICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUubW9kID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUucmVtID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87CiAgICAgIExvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkgewogICAgICAgIHJldHVybiBmcm9tQml0cyh+dGhpcy5sb3csIH50aGlzLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZChvdGhlcikgewogICAgICAgIGlmICghaXNMb25nKG90aGVyKSkKICAgICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3Iob3RoZXIpIHsKICAgICAgICBpZiAoIWlzTG9uZyhvdGhlcikpCiAgICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7CiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IF4gb3RoZXIubG93LCB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQgPSBmdW5jdGlvbiBzaGlmdExlZnQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgdGhpcy5oaWdoIDw8IG51bUJpdHMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoMCwgdGhpcy5sb3cgPDwgbnVtQml0cyAtIDMyLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gc2hpZnRSaWdodChudW1CaXRzKSB7CiAgICAgICAgaWYgKGlzTG9uZyhudW1CaXRzKSkKICAgICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7CiAgICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMikKICAgICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyA+Pj4gbnVtQml0cyB8IHRoaXMuaGlnaCA8PCAzMiAtIG51bUJpdHMsIHRoaXMuaGlnaCA+PiBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoID4+IG51bUJpdHMgLSAzMiwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpOwogICAgICB9OwogICAgICBMb25nUHJvdG90eXBlLnNociA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodDsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQgPSBmdW5jdGlvbiBzaGlmdFJpZ2h0VW5zaWduZWQobnVtQml0cykgewogICAgICAgIGlmIChpc0xvbmcobnVtQml0cykpCiAgICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpOwogICAgICAgIG51bUJpdHMgJj0gNjM7CiAgICAgICAgaWYgKG51bUJpdHMgPT09IDApCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIHsKICAgICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoOwogICAgICAgICAgaWYgKG51bUJpdHMgPCAzMikgewogICAgICAgICAgICB2YXIgbG93ID0gdGhpcy5sb3c7CiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhsb3cgPj4+IG51bUJpdHMgfCBoaWdoIDw8IDMyIC0gbnVtQml0cywgaGlnaCA+Pj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG51bUJpdHMgPT09IDMyKQogICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCwgMCwgdGhpcy51bnNpZ25lZCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiBudW1CaXRzIC0gMzIsIDAsIHRoaXMudW5zaWduZWQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7CiAgICAgIExvbmdQcm90b3R5cGUuc2hyX3UgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDsKICAgICAgTG9uZ1Byb3RvdHlwZS50b1NpZ25lZCA9IGZ1bmN0aW9uIHRvU2lnbmVkKCkgewogICAgICAgIGlmICghdGhpcy51bnNpZ25lZCkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7CiAgICAgICAgaWYgKHRoaXMudW5zaWduZWQpCiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgdHJ1ZSk7CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlcyA9IGZ1bmN0aW9uIHRvQnl0ZXMobGUpIHsKICAgICAgICByZXR1cm4gbGUgPyB0aGlzLnRvQnl0ZXNMRSgpIDogdGhpcy50b0J5dGVzQkUoKTsKICAgICAgfTsKICAgICAgTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7CiAgICAgICAgdmFyIGhpID0gdGhpcy5oaWdoLCBsbyA9IHRoaXMubG93OwogICAgICAgIHJldHVybiBbCiAgICAgICAgICBsbyAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDE2ICYgMjU1LAogICAgICAgICAgbG8gPj4+IDI0LAogICAgICAgICAgaGkgJiAyNTUsCiAgICAgICAgICBoaSA+Pj4gOCAmIDI1NSwKICAgICAgICAgIGhpID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGhpID4+PiAyNAogICAgICAgIF07CiAgICAgIH07CiAgICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0JFID0gZnVuY3Rpb24gdG9CeXRlc0JFKCkgewogICAgICAgIHZhciBoaSA9IHRoaXMuaGlnaCwgbG8gPSB0aGlzLmxvdzsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgaGkgPj4+IDI0LAogICAgICAgICAgaGkgPj4+IDE2ICYgMjU1LAogICAgICAgICAgaGkgPj4+IDggJiAyNTUsCiAgICAgICAgICBoaSAmIDI1NSwKICAgICAgICAgIGxvID4+PiAyNCwKICAgICAgICAgIGxvID4+PiAxNiAmIDI1NSwKICAgICAgICAgIGxvID4+PiA4ICYgMjU1LAogICAgICAgICAgbG8gJiAyNTUKICAgICAgICBdOwogICAgICB9OwogICAgICBMb25nNC5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMyKGJ5dGVzLCB1bnNpZ25lZCwgbGUpIHsKICAgICAgICByZXR1cm4gbGUgPyBMb25nNC5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZzQuZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzTEUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzBdIHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbM10gPDwgMjQsIGJ5dGVzWzRdIHwgYnl0ZXNbNV0gPDwgOCB8IGJ5dGVzWzZdIDw8IDE2IHwgYnl0ZXNbN10gPDwgMjQsIHVuc2lnbmVkKTsKICAgICAgfTsKICAgICAgTG9uZzQuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHsKICAgICAgICByZXR1cm4gbmV3IExvbmc0KGJ5dGVzWzRdIDw8IDI0IHwgYnl0ZXNbNV0gPDwgMTYgfCBieXRlc1s2XSA8PCA4IHwgYnl0ZXNbN10sIGJ5dGVzWzBdIDw8IDI0IHwgYnl0ZXNbMV0gPDwgMTYgfCBieXRlc1syXSA8PCA4IHwgYnl0ZXNbM10sIHVuc2lnbmVkKTsKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2lzLW9ic2VydmFibGVAMi4xLjAvbm9kZV9tb2R1bGVzL2lzLW9ic2VydmFibGUvaW5kZXguanMKICB2YXIgcmVxdWlyZV9pc19vYnNlcnZhYmxlID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL2lzLW9ic2VydmFibGVAMi4xLjAvbm9kZV9tb2R1bGVzL2lzLW9ic2VydmFibGUvaW5kZXguanMiKGV4cG9ydHMyLCBtb2R1bGUyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBtb2R1bGUyLmV4cG9ydHMgPSAodmFsdWUpID0+IHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgU3ltYm9sLm9ic2VydmFibGUgPT09ICJzeW1ib2wiICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wub2JzZXJ2YWJsZV0gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVbU3ltYm9sLm9ic2VydmFibGVdKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdmFsdWVbIkBAb2JzZXJ2YWJsZSJdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlWyJAQG9ic2VydmFibGUiXSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc2VyaWFsaXplcnMuanMKICB2YXIgcmVxdWlyZV9zZXJpYWxpemVycyA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvc2VyaWFsaXplcnMuanMiKGV4cG9ydHMyKSB7CiAgICAgIGluaXRfYnVmZmVyX3NoaW0oKTsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAgZXhwb3J0czIuRGVmYXVsdFNlcmlhbGl6ZXIgPSBleHBvcnRzMi5leHRlbmRTZXJpYWxpemVyID0gdm9pZCAwOwogICAgICBmdW5jdGlvbiBleHRlbmRTZXJpYWxpemVyKGV4dGVuZCwgaW1wbGVtZW50YXRpb24pIHsKICAgICAgICBjb25zdCBmYWxsYmFja0Rlc2VyaWFsaXplciA9IGV4dGVuZC5kZXNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgY29uc3QgZmFsbGJhY2tTZXJpYWxpemVyID0gZXh0ZW5kLnNlcmlhbGl6ZS5iaW5kKGV4dGVuZCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmRlc2VyaWFsaXplKG1lc3NhZ2UsIGZhbGxiYWNrRGVzZXJpYWxpemVyKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZXJpYWxpemUoaW5wdXQpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLnNlcmlhbGl6ZShpbnB1dCwgZmFsbGJhY2tTZXJpYWxpemVyKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIGV4cG9ydHMyLmV4dGVuZFNlcmlhbGl6ZXIgPSBleHRlbmRTZXJpYWxpemVyOwogICAgICB2YXIgRGVmYXVsdEVycm9yU2VyaWFsaXplciA9IHsKICAgICAgICBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihFcnJvcihtZXNzYWdlLm1lc3NhZ2UpLCB7CiAgICAgICAgICAgIG5hbWU6IG1lc3NhZ2UubmFtZSwKICAgICAgICAgICAgc3RhY2s6IG1lc3NhZ2Uuc3RhY2sKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplKGVycm9yKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBfX2Vycm9yX21hcmtlcjogIiQkZXJyb3IiLAogICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLAogICAgICAgICAgICBuYW1lOiBlcnJvci5uYW1lLAogICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2sKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgaXNTZXJpYWxpemVkRXJyb3IgPSAodGhpbmcpID0+IHRoaW5nICYmIHR5cGVvZiB0aGluZyA9PT0gIm9iamVjdCIgJiYgIl9fZXJyb3JfbWFya2VyIiBpbiB0aGluZyAmJiB0aGluZy5fX2Vycm9yX21hcmtlciA9PT0gIiQkZXJyb3IiOwogICAgICBleHBvcnRzMi5EZWZhdWx0U2VyaWFsaXplciA9IHsKICAgICAgICBkZXNlcmlhbGl6ZShtZXNzYWdlKSB7CiAgICAgICAgICBpZiAoaXNTZXJpYWxpemVkRXJyb3IobWVzc2FnZSkpIHsKICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFcnJvclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobWVzc2FnZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZShpbnB1dCkgewogICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFcnJvclNlcmlhbGl6ZXIuc2VyaWFsaXplKGlucHV0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBpbnB1dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvY29tbW9uLmpzCiAgdmFyIHJlcXVpcmVfY29tbW9uMiA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvY29tbW9uLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLnNlcmlhbGl6ZSA9IGV4cG9ydHMyLmRlc2VyaWFsaXplID0gZXhwb3J0czIucmVnaXN0ZXJTZXJpYWxpemVyID0gdm9pZCAwOwogICAgICB2YXIgc2VyaWFsaXplcnNfMSA9IHJlcXVpcmVfc2VyaWFsaXplcnMoKTsKICAgICAgdmFyIHJlZ2lzdGVyZWRTZXJpYWxpemVyID0gc2VyaWFsaXplcnNfMS5EZWZhdWx0U2VyaWFsaXplcjsKICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJTZXJpYWxpemVyMihzZXJpYWxpemVyKSB7CiAgICAgICAgcmVnaXN0ZXJlZFNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyc18xLmV4dGVuZFNlcmlhbGl6ZXIocmVnaXN0ZXJlZFNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIpOwogICAgICB9CiAgICAgIGV4cG9ydHMyLnJlZ2lzdGVyU2VyaWFsaXplciA9IHJlZ2lzdGVyU2VyaWFsaXplcjI7CiAgICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobWVzc2FnZSk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuZGVzZXJpYWxpemUgPSBkZXNlcmlhbGl6ZTsKICAgICAgZnVuY3Rpb24gc2VyaWFsaXplKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRTZXJpYWxpemVyLnNlcmlhbGl6ZShpbnB1dCk7CiAgICAgIH0KICAgICAgZXhwb3J0czIuc2VyaWFsaXplID0gc2VyaWFsaXplOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3N5bWJvbHMuanMKICB2YXIgcmVxdWlyZV9zeW1ib2xzID0gX19jb21tb25KUyh7CiAgICAibm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC9zeW1ib2xzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLiR3b3JrZXIgPSBleHBvcnRzMi4kdHJhbnNmZXJhYmxlID0gZXhwb3J0czIuJHRlcm1pbmF0ZSA9IGV4cG9ydHMyLiRldmVudHMgPSBleHBvcnRzMi4kZXJyb3JzID0gdm9pZCAwOwogICAgICBleHBvcnRzMi4kZXJyb3JzID0gU3ltYm9sKCJ0aHJlYWQuZXJyb3JzIik7CiAgICAgIGV4cG9ydHMyLiRldmVudHMgPSBTeW1ib2woInRocmVhZC5ldmVudHMiKTsKICAgICAgZXhwb3J0czIuJHRlcm1pbmF0ZSA9IFN5bWJvbCgidGhyZWFkLnRlcm1pbmF0ZSIpOwogICAgICBleHBvcnRzMi4kdHJhbnNmZXJhYmxlID0gU3ltYm9sKCJ0aHJlYWQudHJhbnNmZXJhYmxlIik7CiAgICAgIGV4cG9ydHMyLiR3b3JrZXIgPSBTeW1ib2woInRocmVhZC53b3JrZXIiKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC90cmFuc2ZlcmFibGUuanMKICB2YXIgcmVxdWlyZV90cmFuc2ZlcmFibGUgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3RyYW5zZmVyYWJsZS5qcyIoZXhwb3J0czIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5UcmFuc2ZlciA9IGV4cG9ydHMyLmlzVHJhbnNmZXJEZXNjcmlwdG9yID0gdm9pZCAwOwogICAgICB2YXIgc3ltYm9sc18xID0gcmVxdWlyZV9zeW1ib2xzKCk7CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJhYmxlKHRoaW5nKSB7CiAgICAgICAgaWYgKCF0aGluZyB8fCB0eXBlb2YgdGhpbmcgIT09ICJvYmplY3QiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGlzVHJhbnNmZXJEZXNjcmlwdG9yKHRoaW5nKSB7CiAgICAgICAgcmV0dXJuIHRoaW5nICYmIHR5cGVvZiB0aGluZyA9PT0gIm9iamVjdCIgJiYgdGhpbmdbc3ltYm9sc18xLiR0cmFuc2ZlcmFibGVdOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmlzVHJhbnNmZXJEZXNjcmlwdG9yID0gaXNUcmFuc2ZlckRlc2NyaXB0b3I7CiAgICAgIGZ1bmN0aW9uIFRyYW5zZmVyMihwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKSB7CiAgICAgICAgaWYgKCF0cmFuc2ZlcmFibGVzKSB7CiAgICAgICAgICBpZiAoIWlzVHJhbnNmZXJhYmxlKHBheWxvYWQpKQogICAgICAgICAgICB0aHJvdyBFcnJvcigpOwogICAgICAgICAgdHJhbnNmZXJhYmxlcyA9IFtwYXlsb2FkXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIFtzeW1ib2xzXzEuJHRyYW5zZmVyYWJsZV06IHRydWUsCiAgICAgICAgICBzZW5kOiBwYXlsb2FkLAogICAgICAgICAgdHJhbnNmZXJhYmxlcwogICAgICAgIH07CiAgICAgIH0KICAgICAgZXhwb3J0czIuVHJhbnNmZXIgPSBUcmFuc2ZlcjI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3QvdHlwZXMvbWVzc2FnZXMuanMKICB2YXIgcmVxdWlyZV9tZXNzYWdlczIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3R5cGVzL21lc3NhZ2VzLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIGV4cG9ydHMyLldvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0czIuTWFzdGVyTWVzc2FnZVR5cGUgPSB2b2lkIDA7CiAgICAgIHZhciBNYXN0ZXJNZXNzYWdlVHlwZTsKICAgICAgKGZ1bmN0aW9uKE1hc3Rlck1lc3NhZ2VUeXBlMikgewogICAgICAgIE1hc3Rlck1lc3NhZ2VUeXBlMlsiY2FuY2VsIl0gPSAiY2FuY2VsIjsKICAgICAgICBNYXN0ZXJNZXNzYWdlVHlwZTJbInJ1biJdID0gInJ1biI7CiAgICAgIH0pKE1hc3Rlck1lc3NhZ2VUeXBlID0gZXhwb3J0czIuTWFzdGVyTWVzc2FnZVR5cGUgfHwgKGV4cG9ydHMyLk1hc3Rlck1lc3NhZ2VUeXBlID0ge30pKTsKICAgICAgdmFyIFdvcmtlck1lc3NhZ2VUeXBlOwogICAgICAoZnVuY3Rpb24oV29ya2VyTWVzc2FnZVR5cGUyKSB7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJlcnJvciJdID0gImVycm9yIjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbImluaXQiXSA9ICJpbml0IjsKICAgICAgICBXb3JrZXJNZXNzYWdlVHlwZTJbInJlc3VsdCJdID0gInJlc3VsdCI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJydW5uaW5nIl0gPSAicnVubmluZyI7CiAgICAgICAgV29ya2VyTWVzc2FnZVR5cGUyWyJ1bmNhdWdodEVycm9yIl0gPSAidW5jYXVnaHRFcnJvciI7CiAgICAgIH0pKFdvcmtlck1lc3NhZ2VUeXBlID0gZXhwb3J0czIuV29ya2VyTWVzc2FnZVR5cGUgfHwgKGV4cG9ydHMyLldvcmtlck1lc3NhZ2VUeXBlID0ge30pKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RocmVhZHNAMS43LjAvbm9kZV9tb2R1bGVzL3RocmVhZHMvZGlzdC93b3JrZXIvaW1wbGVtZW50YXRpb24uYnJvd3Nlci5qcwogIHZhciByZXF1aXJlX2ltcGxlbWVudGF0aW9uX2Jyb3dzZXIgPSBfX2NvbW1vbkpTKHsKICAgICJub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbXBsZW1lbnRhdGlvbi5icm93c2VyLmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMyLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICAgIHZhciBpc1dvcmtlclJ1bnRpbWUgPSBmdW5jdGlvbiBpc1dvcmtlclJ1bnRpbWUyKCkgewogICAgICAgIGNvbnN0IGlzV2luZG93Q29udGV4dCA9IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgV2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiBzZWxmIGluc3RhbmNlb2YgV2luZG93OwogICAgICAgIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgc2VsZi5wb3N0TWVzc2FnZSAmJiAhaXNXaW5kb3dDb250ZXh0ID8gdHJ1ZSA6IGZhbHNlOwogICAgICB9OwogICAgICB2YXIgcG9zdE1lc3NhZ2VUb01hc3RlciA9IGZ1bmN0aW9uIHBvc3RNZXNzYWdlVG9NYXN0ZXIyKGRhdGEsIHRyYW5zZmVyTGlzdCkgewogICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJMaXN0KTsKICAgICAgfTsKICAgICAgdmFyIHN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMgPSBmdW5jdGlvbiBzdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzMihvbk1lc3NhZ2UpIHsKICAgICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IChtZXNzYWdlRXZlbnQpID0+IHsKICAgICAgICAgIG9uTWVzc2FnZShtZXNzYWdlRXZlbnQuZGF0YSk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHsKICAgICAgICAgIHNlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG1lc3NhZ2VIYW5kbGVyKTsKICAgICAgICB9OwogICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG1lc3NhZ2VIYW5kbGVyKTsKICAgICAgICByZXR1cm4gdW5zdWJzY3JpYmU7CiAgICAgIH07CiAgICAgIGV4cG9ydHMyLmRlZmF1bHQgPSB7CiAgICAgICAgaXNXb3JrZXJSdW50aW1lLAogICAgICAgIHBvc3RNZXNzYWdlVG9NYXN0ZXIsCiAgICAgICAgc3Vic2NyaWJlVG9NYXN0ZXJNZXNzYWdlcwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vdGhyZWFkc0AxLjcuMC9ub2RlX21vZHVsZXMvdGhyZWFkcy9kaXN0L3dvcmtlci9pbmRleC5qcwogIHZhciByZXF1aXJlX3dvcmtlciA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL2Rpc3Qvd29ya2VyL2luZGV4LmpzIihleHBvcnRzMikgewogICAgICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9fYXdhaXRlciA9IGV4cG9ydHMyICYmIGV4cG9ydHMyLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHsKICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkgewogICAgICAgICAgICByZXNvbHZlKHZhbHVlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yWyJ0aHJvdyJdKHZhbHVlKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgICAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOwogICAgICAgICAgfQogICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICB2YXIgX19pbXBvcnREZWZhdWx0ID0gZXhwb3J0czIgJiYgZXhwb3J0czIuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uKG1vZCkgewogICAgICAgIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7ICJkZWZhdWx0IjogbW9kIH07CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgICBleHBvcnRzMi5leHBvc2UgPSBleHBvcnRzMi5pc1dvcmtlclJ1bnRpbWUgPSBleHBvcnRzMi5UcmFuc2ZlciA9IGV4cG9ydHMyLnJlZ2lzdGVyU2VyaWFsaXplciA9IHZvaWQgMDsKICAgICAgdmFyIGlzX29ic2VydmFibGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlX2lzX29ic2VydmFibGUoKSk7CiAgICAgIHZhciBjb21tb25fMSA9IHJlcXVpcmVfY29tbW9uMigpOwogICAgICB2YXIgdHJhbnNmZXJhYmxlXzEgPSByZXF1aXJlX3RyYW5zZmVyYWJsZSgpOwogICAgICB2YXIgbWVzc2FnZXNfMSA9IHJlcXVpcmVfbWVzc2FnZXMyKCk7CiAgICAgIHZhciBpbXBsZW1lbnRhdGlvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmVfaW1wbGVtZW50YXRpb25fYnJvd3NlcigpKTsKICAgICAgdmFyIGNvbW1vbl8yID0gcmVxdWlyZV9jb21tb24yKCk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzMiwgInJlZ2lzdGVyU2VyaWFsaXplciIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gY29tbW9uXzIucmVnaXN0ZXJTZXJpYWxpemVyOwogICAgICB9IH0pOwogICAgICB2YXIgdHJhbnNmZXJhYmxlXzIgPSByZXF1aXJlX3RyYW5zZmVyYWJsZSgpOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0czIsICJUcmFuc2ZlciIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlXzIuVHJhbnNmZXI7CiAgICAgIH0gfSk7CiAgICAgIGV4cG9ydHMyLmlzV29ya2VyUnVudGltZSA9IGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5pc1dvcmtlclJ1bnRpbWU7CiAgICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTsKICAgICAgdmFyIGFjdGl2ZVN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7CiAgICAgIHZhciBpc01hc3RlckpvYkNhbmNlbE1lc3NhZ2UgPSAodGhpbmcpID0+IHRoaW5nICYmIHRoaW5nLnR5cGUgPT09IG1lc3NhZ2VzXzEuTWFzdGVyTWVzc2FnZVR5cGUuY2FuY2VsOwogICAgICB2YXIgaXNNYXN0ZXJKb2JSdW5NZXNzYWdlID0gKHRoaW5nKSA9PiB0aGluZyAmJiB0aGluZy50eXBlID09PSBtZXNzYWdlc18xLk1hc3Rlck1lc3NhZ2VUeXBlLnJ1bjsKICAgICAgdmFyIGlzT2JzZXJ2YWJsZSA9ICh0aGluZykgPT4gaXNfb2JzZXJ2YWJsZV8xLmRlZmF1bHQodGhpbmcpIHx8IGlzWmVuT2JzZXJ2YWJsZSh0aGluZyk7CiAgICAgIGZ1bmN0aW9uIGlzWmVuT2JzZXJ2YWJsZSh0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiICYmIHR5cGVvZiB0aGluZy5zdWJzY3JpYmUgPT09ICJmdW5jdGlvbiI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZGVjb25zdHJ1Y3RUcmFuc2Zlcih0aGluZykgewogICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVfMS5pc1RyYW5zZmVyRGVzY3JpcHRvcih0aGluZykgPyB7IHBheWxvYWQ6IHRoaW5nLnNlbmQsIHRyYW5zZmVyYWJsZXM6IHRoaW5nLnRyYW5zZmVyYWJsZXMgfSA6IHsgcGF5bG9hZDogdGhpbmcsIHRyYW5zZmVyYWJsZXM6IHZvaWQgMCB9OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCkgewogICAgICAgIGNvbnN0IGluaXRNZXNzYWdlID0gewogICAgICAgICAgdHlwZTogbWVzc2FnZXNfMS5Xb3JrZXJNZXNzYWdlVHlwZS5pbml0LAogICAgICAgICAgZXhwb3NlZDogewogICAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3Rlcihpbml0TWVzc2FnZSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKSB7CiAgICAgICAgY29uc3QgaW5pdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLmluaXQsCiAgICAgICAgICBleHBvc2VkOiB7CiAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICBtZXRob2RzOiBtZXRob2ROYW1lcwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoaW5pdE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RKb2JFcnJvck1lc3NhZ2UodWlkLCByYXdFcnJvcikgewogICAgICAgIGNvbnN0IHsgcGF5bG9hZDogZXJyb3IsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmF3RXJyb3IpOwogICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHsKICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUuZXJyb3IsCiAgICAgICAgICB1aWQsCiAgICAgICAgICBlcnJvcjogY29tbW9uXzEuc2VyaWFsaXplKGVycm9yKQogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIoZXJyb3JNZXNzYWdlLCB0cmFuc2ZlcmFibGVzKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwb3N0Sm9iUmVzdWx0TWVzc2FnZSh1aWQsIGNvbXBsZXRlZCwgcmVzdWx0VmFsdWUpIHsKICAgICAgICBjb25zdCB7IHBheWxvYWQsIHRyYW5zZmVyYWJsZXMgfSA9IGRlY29uc3RydWN0VHJhbnNmZXIocmVzdWx0VmFsdWUpOwogICAgICAgIGNvbnN0IHJlc3VsdE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJlc3VsdCwKICAgICAgICAgIHVpZCwKICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZWQgPyB0cnVlIDogdm9pZCAwLAogICAgICAgICAgcGF5bG9hZAogICAgICAgIH07CiAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnBvc3RNZXNzYWdlVG9NYXN0ZXIocmVzdWx0TWVzc2FnZSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcG9zdEpvYlN0YXJ0TWVzc2FnZSh1aWQsIHJlc3VsdFR5cGUpIHsKICAgICAgICBjb25zdCBzdGFydE1lc3NhZ2UgPSB7CiAgICAgICAgICB0eXBlOiBtZXNzYWdlc18xLldvcmtlck1lc3NhZ2VUeXBlLnJ1bm5pbmcsCiAgICAgICAgICB1aWQsCiAgICAgICAgICByZXN1bHRUeXBlCiAgICAgICAgfTsKICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihzdGFydE1lc3NhZ2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7CiAgICAgICAgICAgIHR5cGU6IG1lc3NhZ2VzXzEuV29ya2VyTWVzc2FnZVR5cGUudW5jYXVnaHRFcnJvciwKICAgICAgICAgICAgZXJyb3I6IGNvbW1vbl8xLnNlcmlhbGl6ZShlcnJvcikKICAgICAgICAgIH07CiAgICAgICAgICBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQucG9zdE1lc3NhZ2VUb01hc3RlcihlcnJvck1lc3NhZ2UpOwogICAgICAgIH0gY2F0Y2ggKHN1YkVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJOb3QgcmVwb3J0aW5nIHVuY2F1Z2h0IGVycm9yIGJhY2sgdG8gbWFzdGVyIHRocmVhZCBhcyBpdCBvY2N1cmVkIHdoaWxlIHJlcG9ydGluZyBhbiB1bmNhdWdodCBlcnJvciBhbHJlYWR5LlxuTGF0ZXN0IGVycm9yOiIsIHN1YkVycm9yLCAiXG5PcmlnaW5hbCBlcnJvcjoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJ1bkZ1bmN0aW9uKGpvYlVJRCwgZm4sIGFyZ3MpIHsKICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgICAgbGV0IHN5bmNSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBzeW5jUmVzdWx0ID0gZm4oLi4uYXJncyk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICByZXR1cm4gcG9zdEpvYkVycm9yTWVzc2FnZShqb2JVSUQsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlc3VsdFR5cGUgPSBpc09ic2VydmFibGUoc3luY1Jlc3VsdCkgPyAib2JzZXJ2YWJsZSIgOiAicHJvbWlzZSI7CiAgICAgICAgICBwb3N0Sm9iU3RhcnRNZXNzYWdlKGpvYlVJRCwgcmVzdWx0VHlwZSk7CiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHN5bmNSZXN1bHQpKSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN5bmNSZXN1bHQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCBmYWxzZSwgY29tbW9uXzEuc2VyaWFsaXplKHZhbHVlKSksIChlcnJvcikgPT4gewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICAgICAgcG9zdEpvYlJlc3VsdE1lc3NhZ2Uoam9iVUlELCB0cnVlKTsKICAgICAgICAgICAgICBhY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZShqb2JVSUQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5zZXQoam9iVUlELCBzdWJzY3JpcHRpb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBzeW5jUmVzdWx0OwogICAgICAgICAgICAgIHBvc3RKb2JSZXN1bHRNZXNzYWdlKGpvYlVJRCwgdHJ1ZSwgY29tbW9uXzEuc2VyaWFsaXplKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgIHBvc3RKb2JFcnJvck1lc3NhZ2Uoam9iVUlELCBjb21tb25fMS5zZXJpYWxpemUoZXJyb3IpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGV4cG9zZTIoZXhwb3NlZCkgewogICAgICAgIGlmICghaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LmlzV29ya2VyUnVudGltZSgpKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIGluIHRoZSBtYXN0ZXIgdGhyZWFkLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoZXhwb3NlQ2FsbGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiZXhwb3NlKCkgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGlzIG5vdCBwb3NzaWJsZS4gUGFzcyBhbiBvYmplY3QgdG8gZXhwb3NlKCkgaWYgeW91IHdhbnQgdG8gZXhwb3NlIG11bHRpcGxlIGZ1bmN0aW9ucy4iKTsKICAgICAgICB9CiAgICAgICAgZXhwb3NlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBpZiAodHlwZW9mIGV4cG9zZWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgICBpZiAoaXNNYXN0ZXJKb2JSdW5NZXNzYWdlKG1lc3NhZ2VEYXRhKSAmJiAhbWVzc2FnZURhdGEubWV0aG9kKSB7CiAgICAgICAgICAgICAgcnVuRnVuY3Rpb24obWVzc2FnZURhdGEudWlkLCBleHBvc2VkLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHBvc3RGdW5jdGlvbkluaXRNZXNzYWdlKCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3NlZCA9PT0gIm9iamVjdCIgJiYgZXhwb3NlZCkgewogICAgICAgICAgaW1wbGVtZW50YXRpb25fMS5kZWZhdWx0LnN1YnNjcmliZVRvTWFzdGVyTWVzc2FnZXMoKG1lc3NhZ2VEYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChpc01hc3RlckpvYlJ1bk1lc3NhZ2UobWVzc2FnZURhdGEpICYmIG1lc3NhZ2VEYXRhLm1ldGhvZCkgewogICAgICAgICAgICAgIHJ1bkZ1bmN0aW9uKG1lc3NhZ2VEYXRhLnVpZCwgZXhwb3NlZFttZXNzYWdlRGF0YS5tZXRob2RdLCBtZXNzYWdlRGF0YS5hcmdzLm1hcChjb21tb25fMS5kZXNlcmlhbGl6ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3NlZCkuZmlsdGVyKChrZXkpID0+IHR5cGVvZiBleHBvc2VkW2tleV0gPT09ICJmdW5jdGlvbiIpOwogICAgICAgICAgcG9zdE1vZHVsZUluaXRNZXNzYWdlKG1ldGhvZE5hbWVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4cG9zZSgpLiBFeHBlY3RlZCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCwgZ290OiAke2V4cG9zZWR9YCk7CiAgICAgICAgfQogICAgICAgIGltcGxlbWVudGF0aW9uXzEuZGVmYXVsdC5zdWJzY3JpYmVUb01hc3Rlck1lc3NhZ2VzKChtZXNzYWdlRGF0YSkgPT4gewogICAgICAgICAgaWYgKGlzTWFzdGVySm9iQ2FuY2VsTWVzc2FnZShtZXNzYWdlRGF0YSkpIHsKICAgICAgICAgICAgY29uc3Qgam9iVUlEID0gbWVzc2FnZURhdGEudWlkOwogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhY3RpdmVTdWJzY3JpcHRpb25zLmdldChqb2JVSUQpOwogICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoam9iVUlEKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGV4cG9ydHMyLmV4cG9zZSA9IGV4cG9zZTI7CiAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHNlbGYuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIiAmJiBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuaXNXb3JrZXJSdW50aW1lKCkpIHsKICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShldmVudC5lcnJvciB8fCBldmVudCksIDI1MCk7CiAgICAgICAgfSk7CiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJ1bmhhbmRsZWRyZWplY3Rpb24iLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IGVycm9yID0gZXZlbnQucmVhc29uOwogICAgICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAic3RyaW5nIikgewogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvciksIDI1MCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gImZ1bmN0aW9uIiAmJiBpbXBsZW1lbnRhdGlvbl8xLmRlZmF1bHQuaXNXb3JrZXJSdW50aW1lKCkpIHsKICAgICAgICBwcm9jZXNzLm9uKCJ1bmNhdWdodEV4Y2VwdGlvbiIsIChlcnJvcikgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3N0VW5jYXVnaHRFcnJvck1lc3NhZ2UoZXJyb3IpLCAyNTApOwogICAgICAgIH0pOwogICAgICAgIHByb2Nlc3Mub24oInVuaGFuZGxlZFJlamVjdGlvbiIsIChlcnJvcikgPT4gewogICAgICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAic3RyaW5nIikgewogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RVbmNhdWdodEVycm9yTWVzc2FnZShlcnJvciksIDI1MCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9hdXRvU3FsLmpzCiAgdmFyIHJlcXVpcmVfYXV0b1NxbCA9IF9fY29tbW9uSlMoewogICAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiZWRAMi4xLjIvbm9kZV9tb2R1bGVzL0BnbW9kL2JlZC9lc20vYXV0b1NxbC5qcyIoZXhwb3J0czIsIG1vZHVsZTIpIHsKICAgICAgaW5pdF9idWZmZXJfc2hpbSgpOwogICAgICAidXNlIHN0cmljdCI7CiAgICAgIGZ1bmN0aW9uIHBlZyRzdWJjbGFzcyhjaGlsZCwgcGFyZW50KSB7CiAgICAgICAgZnVuY3Rpb24gY3RvcigpIHsKICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsKICAgICAgICB9CiAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOwogICAgICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIGV4cGVjdGVkLCBmb3VuZCwgbG9jYXRpb24pIHsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDsKICAgICAgICB0aGlzLmZvdW5kID0gZm91bmQ7CiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgIHRoaXMubmFtZSA9ICJTeW50YXhFcnJvciI7CiAgICAgICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgcGVnJFN5bnRheEVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGVnJHN1YmNsYXNzKHBlZyRTeW50YXhFcnJvciwgRXJyb3IpOwogICAgICBwZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlID0gZnVuY3Rpb24oZXhwZWN0ZWQsIGZvdW5kKSB7CiAgICAgICAgdmFyIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyA9IHsKICAgICAgICAgIGxpdGVyYWw6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAnIicgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgJyInOwogICAgICAgICAgfSwKICAgICAgICAgICJjbGFzcyI6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHZhciBlc2NhcGVkUGFydHMgPSAiIiwgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGF0aW9uLnBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgZXNjYXBlZFBhcnRzICs9IGV4cGVjdGF0aW9uLnBhcnRzW2ldIGluc3RhbmNlb2YgQXJyYXkgPyBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXVswXSkgKyAiLSIgKyBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXVsxXSkgOiBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICJbIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/ICJeIiA6ICIiKSArIGVzY2FwZWRQYXJ0cyArICJdIjsKICAgICAgICAgIH0sCiAgICAgICAgICBhbnk6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAiYW55IGNoYXJhY3RlciI7CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiBmdW5jdGlvbihleHBlY3RhdGlvbikgewogICAgICAgICAgICByZXR1cm4gImVuZCBvZiBpbnB1dCI7CiAgICAgICAgICB9LAogICAgICAgICAgb3RoZXI6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGZ1bmN0aW9uIGhleChjaCkgewogICAgICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGxpdGVyYWxFc2NhcGUocykgewogICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFwvZywgIlxcXFwiKS5yZXBsYWNlKC8iL2csICdcXCInKS5yZXBsYWNlKC9cMC9nLCAiXFwwIikucmVwbGFjZSgvXHQvZywgIlxcdCIpLnJlcGxhY2UoL1xuL2csICJcXG4iKS5yZXBsYWNlKC9cci9nLCAiXFxyIikucmVwbGFjZSgvW1x4MDAtXHgwRl0vZywgZnVuY3Rpb24oY2gpIHsKICAgICAgICAgICAgcmV0dXJuICJcXHgwIiArIGhleChjaCk7CiAgICAgICAgICB9KS5yZXBsYWNlKC9bXHgxMC1ceDFGXHg3Ri1ceDlGXS9nLCBmdW5jdGlvbihjaCkgewogICAgICAgICAgICByZXR1cm4gIlxceCIgKyBoZXgoY2gpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHsKICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1xcL2csICJcXFxcIikucmVwbGFjZSgvXF0vZywgIlxcXSIpLnJlcGxhY2UoL1xeL2csICJcXF4iKS5yZXBsYWNlKC8tL2csICJcXC0iKS5yZXBsYWNlKC9cMC9nLCAiXFwwIikucmVwbGFjZSgvXHQvZywgIlxcdCIpLnJlcGxhY2UoL1xuL2csICJcXG4iKS5yZXBsYWNlKC9cci9nLCAiXFxyIikucmVwbGFjZSgvW1x4MDAtXHgwRl0vZywgZnVuY3Rpb24oY2gpIHsKICAgICAgICAgICAgcmV0dXJuICJcXHgwIiArIGhleChjaCk7CiAgICAgICAgICB9KS5yZXBsYWNlKC9bXHgxMC1ceDFGXHg3Ri1ceDlGXS9nLCBmdW5jdGlvbihjaCkgewogICAgICAgICAgICByZXR1cm4gIlxceCIgKyBoZXgoY2gpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb24pIHsKICAgICAgICAgIHJldHVybiBERVNDUklCRV9FWFBFQ1RBVElPTl9GTlNbZXhwZWN0YXRpb24udHlwZV0oZXhwZWN0YXRpb24pOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMikgewogICAgICAgICAgdmFyIGRlc2NyaXB0aW9ucyA9IG5ldyBBcnJheShleHBlY3RlZDIubGVuZ3RoKSwgaSwgajsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHBlY3RlZDIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZGVzY3JpcHRpb25zW2ldID0gZGVzY3JpYmVFeHBlY3RhdGlvbihleHBlY3RlZDJbaV0pOwogICAgICAgICAgfQogICAgICAgICAgZGVzY3JpcHRpb25zLnNvcnQoKTsKICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaSAtIDFdICE9PSBkZXNjcmlwdGlvbnNbaV0pIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tqXSA9IGRlc2NyaXB0aW9uc1tpXTsKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb25zLmxlbmd0aCA9IGo7CiAgICAgICAgICB9CiAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdICsgIiBvciAiICsgZGVzY3JpcHRpb25zWzFdOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oIiwgIikgKyAiLCBvciAiICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZGVzY3JpYmVGb3VuZChmb3VuZDIpIHsKICAgICAgICAgIHJldHVybiBmb3VuZDIgPyAnIicgKyBsaXRlcmFsRXNjYXBlKGZvdW5kMikgKyAnIicgOiAiZW5kIG9mIGlucHV0IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJFeHBlY3RlZCAiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyAiIGJ1dCAiICsgZGVzY3JpYmVGb3VuZChmb3VuZCkgKyAiIGZvdW5kLiI7CiAgICAgIH07CiAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307CiAgICAgICAgdmFyIHBlZyRGQUlMRUQgPSB7fSwgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyA9IHsgZGVjbGFyYXRpb246IHBlZyRwYXJzZWRlY2xhcmF0aW9uIH0sIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiA9IHBlZyRwYXJzZWRlY2xhcmF0aW9uLCBwZWckYzAgPSAiKCIsIHBlZyRjMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oIigiLCBmYWxzZSksIHBlZyRjMiA9ICIpIiwgcGVnJGMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiKSIsIGZhbHNlKSwgcGVnJGM0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgY29tbWVudCwgZmllbGRzKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBjb21tZW50LCBmaWVsZHMgfTsKICAgICAgICB9LCBwZWckYzUgPSAic2ltcGxlIiwgcGVnJGM2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigic2ltcGxlIiwgZmFsc2UpLCBwZWckYzcgPSAib2JqZWN0IiwgcGVnJGM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigib2JqZWN0IiwgZmFsc2UpLCBwZWckYzkgPSAidGFibGUiLCBwZWckYzEwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidGFibGUiLCBmYWxzZSksIHBlZyRjMTEgPSAiYXV0byIsIHBlZyRjMTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJhdXRvIiwgZmFsc2UpLCBwZWckYzEzID0gInByaW1hcnkiLCBwZWckYzE0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigicHJpbWFyeSIsIGZhbHNlKSwgcGVnJGMxNSA9ICJpbmRleCIsIHBlZyRjMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJpbmRleCIsIGZhbHNlKSwgcGVnJGMxNyA9ICJ1bmlxdWUiLCBwZWckYzE4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidW5pcXVlIiwgZmFsc2UpLCBwZWckYzE5ID0gZnVuY3Rpb24oZjEsIHcpIHsKICAgICAgICAgIHJldHVybiB3OwogICAgICAgIH0sIHBlZyRjMjAgPSBmdW5jdGlvbihmMSwgZmRzKSB7CiAgICAgICAgICBpZiAoZjEubmFtZSkgewogICAgICAgICAgICBmZHMudW5zaGlmdChmMSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZmRzOwogICAgICAgIH0sIHBlZyRjMjEgPSAiIyIsIHBlZyRjMjIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCIjIiwgZmFsc2UpLCBwZWckYzIzID0gIjsiLCBwZWckYzI0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiOyIsIGZhbHNlKSwgcGVnJGMyNSA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIGNvbW1lbnQpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGUsIG5hbWUsIGNvbW1lbnQgfTsKICAgICAgICB9LCBwZWckYzI2ID0gIlsiLCBwZWckYzI3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiWyIsIGZhbHNlKSwgcGVnJGMyOCA9ICJdIiwgcGVnJGMyOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oIl0iLCBmYWxzZSksIHBlZyRjMzAgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBuYW1lLCBjb21tZW50KSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlLCBzaXplLCBuYW1lLCBjb21tZW50IH07CiAgICAgICAgfSwgcGVnJGMzMSA9IGZ1bmN0aW9uKHR5cGUsIHZhbHMsIG5hbWUsIGNvbW1lbnQpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGUsIHZhbHMsIG5hbWUsIGNvbW1lbnQgfTsKICAgICAgICB9LCBwZWckYzMyID0gIiwiLCBwZWckYzMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiLCIsIGZhbHNlKSwgcGVnJGMzNCA9IGZ1bmN0aW9uKGYxLCBmZHMpIHsKICAgICAgICAgIGZkcy51bnNoaWZ0KGYxKTsKICAgICAgICAgIHJldHVybiBmZHM7CiAgICAgICAgfSwgcGVnJGMzNSA9ICJpbnQiLCBwZWckYzM2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiaW50IiwgZmFsc2UpLCBwZWckYzM3ID0gInVpbnQiLCBwZWckYzM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidWludCIsIGZhbHNlKSwgcGVnJGMzOSA9ICJzaG9ydCIsIHBlZyRjNDAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJzaG9ydCIsIGZhbHNlKSwgcGVnJGM0MSA9ICJ1c2hvcnQiLCBwZWckYzQyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigidXNob3J0IiwgZmFsc2UpLCBwZWckYzQzID0gImJ5dGUiLCBwZWckYzQ0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigiYnl0ZSIsIGZhbHNlKSwgcGVnJGM0NSA9ICJ1Ynl0ZSIsIHBlZyRjNDYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJ1Ynl0ZSIsIGZhbHNlKSwgcGVnJGM0NyA9ICJmbG9hdCIsIHBlZyRjNDggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJmbG9hdCIsIGZhbHNlKSwgcGVnJGM0OSA9ICJjaGFyIiwgcGVnJGM1MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oImNoYXIiLCBmYWxzZSksIHBlZyRjNTEgPSAic3RyaW5nIiwgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oInN0cmluZyIsIGZhbHNlKSwgcGVnJGM1MyA9ICJsc3RyaW5nIiwgcGVnJGM1NCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oImxzdHJpbmciLCBmYWxzZSksIHBlZyRjNTUgPSAiZW51bSIsIHBlZyRjNTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJlbnVtIiwgZmFsc2UpLCBwZWckYzU3ID0gImRvdWJsZSIsIHBlZyRjNTggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKCJkb3VibGUiLCBmYWxzZSksIHBlZyRjNTkgPSAiYmlnaW50IiwgcGVnJGM2MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oImJpZ2ludCIsIGZhbHNlKSwgcGVnJGM2MSA9ICJzZXQiLCBwZWckYzYyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbigic2V0IiwgZmFsc2UpLCBwZWckYzYzID0gZnVuY3Rpb24odCwgbikgewogICAgICAgICAgcmV0dXJuIHQgKyAiICIgKyBuOwogICAgICAgIH0sIHBlZyRjNjQgPSAvXlthLXpBLVpfXS8sIHBlZyRjNjUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbWyJhIiwgInoiXSwgWyJBIiwgIloiXSwgIl8iXSwgZmFsc2UsIGZhbHNlKSwgcGVnJGM2NiA9IC9eW2EtekEtWjAtOV9dLywgcGVnJGM2NyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbImEiLCAieiJdLCBbIkEiLCAiWiJdLCBbIjAiLCAiOSJdLCAiXyJdLCBmYWxzZSwgZmFsc2UpLCBwZWckYzY4ID0gZnVuY3Rpb24odCkgewogICAgICAgICAgcmV0dXJuIHRleHQoKTsKICAgICAgICB9LCBwZWckYzY5ID0gJyInLCBwZWckYzcwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbignIicsIGZhbHNlKSwgcGVnJGM3MSA9IC9eW14iXS8sIHBlZyRjNzIgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbJyInXSwgdHJ1ZSwgZmFsc2UpLCBwZWckYzczID0gZnVuY3Rpb24odCkgewogICAgICAgICAgcmV0dXJuIHQuam9pbigiIik7CiAgICAgICAgfSwgcGVnJGM3NCA9IC9eW15cblxyXS8sIHBlZyRjNzUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbIlxuIiwgIlxyIl0sIHRydWUsIGZhbHNlKSwgcGVnJGM3NiA9IGZ1bmN0aW9uKHQpIHsKICAgICAgICAgIHJldHVybiB0LmpvaW4oIiIpLnJlcGxhY2UoL14iLywgIiIpLnJlcGxhY2UoLyIkLywgIiIpOwogICAgICAgIH0sIHBlZyRjNzcgPSBwZWckb3RoZXJFeHBlY3RhdGlvbigiaW50ZWdlciIpLCBwZWckYzc4ID0gL15bMC05XS8sIHBlZyRjNzkgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbWyIwIiwgIjkiXV0sIGZhbHNlLCBmYWxzZSksIHBlZyRjODAgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUludCh0ZXh0KCksIDEwKTsKICAgICAgICB9LCBwZWckYzgxID0gcGVnJG90aGVyRXhwZWN0YXRpb24oIndoaXRlc3BhY2UiKSwgcGVnJGM4MiA9IC9eWyBcdFxuXHJdLywgcGVnJGM4MyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFsiICIsICIJIiwgIlxuIiwgIlxyIl0sIGZhbHNlLCBmYWxzZSksIHBlZyRjdXJyUG9zID0gMCwgcGVnJHNhdmVkUG9zID0gMCwgcGVnJHBvc0RldGFpbHNDYWNoZSA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XSwgcGVnJG1heEZhaWxQb3MgPSAwLCBwZWckbWF4RmFpbEV4cGVjdGVkID0gW10sIHBlZyRzaWxlbnRGYWlscyA9IDAsIHBlZyRyZXN1bHQ7CiAgICAgICAgaWYgKCJzdGFydFJ1bGUiIGluIG9wdGlvbnMpIHsKICAgICAgICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgImAgKyBvcHRpb25zLnN0YXJ0UnVsZSArICciLicpOwogICAgICAgICAgfQogICAgICAgICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHRleHQoKSB7CiAgICAgICAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBsb2NhdGlvbigpIHsKICAgICAgICAgIHJldHVybiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbiwgbG9jYXRpb24yKSB7CiAgICAgICAgICBsb2NhdGlvbjIgPSBsb2NhdGlvbjIgIT09IHZvaWQgMCA/IGxvY2F0aW9uMiA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7CiAgICAgICAgICB0aHJvdyBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKSwgbG9jYXRpb24yKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgbG9jYXRpb24yKSB7CiAgICAgICAgICBsb2NhdGlvbjIgPSBsb2NhdGlvbjIgIT09IHZvaWQgMCA/IGxvY2F0aW9uMiA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7CiAgICAgICAgICB0aHJvdyBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKHRleHQyLCBpZ25vcmVDYXNlKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAibGl0ZXJhbCIsIHRleHQ6IHRleHQyLCBpZ25vcmVDYXNlIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImNsYXNzIiwgcGFydHMsIGludmVydGVkLCBpZ25vcmVDYXNlIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJhbnkiIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRlbmRFeHBlY3RhdGlvbigpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJlbmQiIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAib3RoZXIiLCBkZXNjcmlwdGlvbiB9OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckY29tcHV0ZVBvc0RldGFpbHMocG9zKSB7CiAgICAgICAgICB2YXIgZGV0YWlscyA9IHBlZyRwb3NEZXRhaWxzQ2FjaGVbcG9zXSwgcDsKICAgICAgICAgIGlmIChkZXRhaWxzKSB7CiAgICAgICAgICAgIHJldHVybiBkZXRhaWxzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHBvcyAtIDE7CiAgICAgICAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkgewogICAgICAgICAgICAgIHAtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwXTsKICAgICAgICAgICAgZGV0YWlscyA9IHsKICAgICAgICAgICAgICBsaW5lOiBkZXRhaWxzLmxpbmUsCiAgICAgICAgICAgICAgY29sdW1uOiBkZXRhaWxzLmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICB3aGlsZSAocCA8IHBvcykgewogICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkgewogICAgICAgICAgICAgICAgZGV0YWlscy5saW5lKys7CiAgICAgICAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRldGFpbHMuY29sdW1uKys7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzOwogICAgICAgICAgICByZXR1cm4gZGV0YWlsczsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7CiAgICAgICAgICB2YXIgc3RhcnRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHN0YXJ0UG9zKSwgZW5kUG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0UG9zLAogICAgICAgICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLAogICAgICAgICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtbgogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgICBvZmZzZXQ6IGVuZFBvcywKICAgICAgICAgICAgICBsaW5lOiBlbmRQb3NEZXRhaWxzLmxpbmUsCiAgICAgICAgICAgICAgY29sdW1uOiBlbmRQb3NEZXRhaWxzLmNvbHVtbgogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckZmFpbChleHBlY3RlZDIpIHsKICAgICAgICAgIGlmIChwZWckY3VyclBvcyA8IHBlZyRtYXhGYWlsUG9zKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7CiAgICAgICAgICAgIHBlZyRtYXhGYWlsUG9zID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZDIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjIpIHsKICAgICAgICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIG51bGwsIG51bGwsIGxvY2F0aW9uMik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZDIsIGZvdW5kLCBsb2NhdGlvbjIpIHsKICAgICAgICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKHBlZyRTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UoZXhwZWN0ZWQyLCBmb3VuZCksIGV4cGVjdGVkMiwgZm91bmQsIGxvY2F0aW9uMik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWRlY2xhcmF0aW9uKCkgewogICAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczgsIHM5LCBzMTAsIHMxMSwgczEyLCBzMTM7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBwZWckcGFyc2VkZWNsYXJlVHlwZSgpOwogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlZGVjbGFyZU5hbWUoKTsKICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2Vjb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckYzA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VmaWVsZExpc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJGMyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEzID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzQoczIsIHM0LCBzNiwgczEwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlZGVjbGFyZVR5cGUoKSB7CiAgICAgICAgICB2YXIgczA7CiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KSA9PT0gcGVnJGM1KSB7CiAgICAgICAgICAgIHMwID0gcGVnJGM1OwogICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM2KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzcpIHsKICAgICAgICAgICAgICBzMCA9IHBlZyRjNzsKICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGM5KSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjOTsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWRlY2xhcmVOYW1lKCkgewogICAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzOwogICAgICAgICAgczAgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgczEgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlaW5kZXhUeXBlKCk7CiAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzMSA9IFtzMSwgczJdOwogICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgICBzMSA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpID09PSBwZWckYzExKSB7CiAgICAgICAgICAgICAgICAgIHMyID0gcGVnJGMxMTsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgczEgPSBbczEsIHMyXTsKICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgICAgICAgczEgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VpbmRleFR5cGUoKTsKICAgICAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMTEpIHsKICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTsKICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMik7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgczEgPSBbczEsIHMyLCBzM107CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2VpbmRleFR5cGUoKSB7CiAgICAgICAgICB2YXIgczA7CiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KSA9PT0gcGVnJGMxMykgewogICAgICAgICAgICBzMCA9IHBlZyRjMTM7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzE1KSB7CiAgICAgICAgICAgICAgczAgPSBwZWckYzE1OwogICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTYpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KSA9PT0gcGVnJGMxNykgewogICAgICAgICAgICAgICAgczAgPSBwZWckYzE3OwogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlY29tbWVudCgpIHsKICAgICAgICAgIHZhciBzMDsKICAgICAgICAgIHMwID0gcGVnJHBhcnNlbm9uUXVvdGVkU3RyaW5nKCk7CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczAgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWZpZWxkTGlzdCgpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNjsKICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMzID0gW107CiAgICAgICAgICAgICAgczQgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlZmllbGQoKTsKICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzNDsKICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzE5KHMxLCBzNik7CiAgICAgICAgICAgICAgICAgIHM0ID0gczU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0OwogICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7CiAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczMucHVzaChzNCk7CiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VmaWVsZCgpOwogICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzNDsKICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRjMTkoczEsIHM2KTsKICAgICAgICAgICAgICAgICAgICBzNCA9IHM1OwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7CiAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0OwogICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMyMChzMSwgczMpOwogICAgICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2Vjb21tZW50U3RhcnQoKSB7CiAgICAgICAgICB2YXIgczA7CiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM1KSB7CiAgICAgICAgICAgIHMwID0gcGVnJGMyMTsKICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWludGVybmFsQ29tbWVudCgpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQ7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBwZWckcGFyc2Vjb21tZW50U3RhcnQoKTsKICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2Vub25RdW90ZWRTdHJpbmcoKTsKICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgIHMxID0gW3MxLCBzMiwgczMsIHM0XTsKICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlZmllbGQoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMCwgczExLCBzMTIsIHMxMzsKICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkVHlwZSgpOwogICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNTkpIHsKICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRjMjM7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyNCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2Vjb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMyNShzMSwgczMsIHM3KTsKICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkVHlwZSgpOwogICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHsKICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzI2OwogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyNyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VmaWVsZFNpemUoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyOSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA1OSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gcGVnJGMyMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEyICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMyA9IHBlZyRwYXJzZWNvbW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzMChzMSwgczUsIHM5LCBzMTMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgICBzMSA9IHBlZyRwYXJzZWZpZWxkVHlwZSgpOwogICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkgewogICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMwOwogICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VmaWVsZFZhbHVlcygpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNTkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gcGVnJGMyMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTMgPSBwZWckcGFyc2Vjb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzEoczEsIHM1LCBzOSwgczEzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczAgPSBwZWckcGFyc2VpbnRlcm5hbENvbW1lbnQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlZmllbGRWYWx1ZXMoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczIgPSBbXTsKICAgICAgICAgICAgczMgPSBwZWckY3VyclBvczsKICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkgewogICAgICAgICAgICAgIHM0ID0gcGVnJGMzMjsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzMzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMzsKICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzE5KHMxLCBzNik7CiAgICAgICAgICAgICAgICAgIHMzID0gczQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzOwogICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7CiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7CiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMyLnB1c2goczMpOwogICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkgewogICAgICAgICAgICAgICAgczQgPSBwZWckYzMyOwogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzMzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTsKICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZW5hbWUoKTsKICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczM7CiAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzE5KHMxLCBzNik7CiAgICAgICAgICAgICAgICAgICAgczMgPSBzNDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzOwogICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMzsKICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzOwogICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICBzMSA9IHBlZyRjMzQoczEsIHMyKTsKICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWZpZWxkVHlwZSgpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMzsKICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpID09PSBwZWckYzM1KSB7CiAgICAgICAgICAgIHMwID0gcGVnJGMzNTsKICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMzYpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMzcpIHsKICAgICAgICAgICAgICBzMCA9IHBlZyRjMzc7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzOCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzM5KSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjMzk7CiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzQxKSB7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM0MTsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNDMpIHsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNDM7CiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM0NCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzQ1KSB7CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNDU7CiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDYpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzQ3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM0NzsKICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNDkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNDk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM1MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzUxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpID09PSBwZWckYzUzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM1MzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM1Nik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzU3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNTc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzU5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGM1OTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjNjEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjNjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM2Mik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckcGFyc2VkZWNsYXJlVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VkZWNsYXJlTmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNjMoczEsIHMzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZWZpZWxkU2l6ZSgpIHsKICAgICAgICAgIHZhciBzMDsKICAgICAgICAgIHMwID0gcGVnJHBhcnNlbnVtYmVyKCk7CiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczAgPSBwZWckcGFyc2VuYW1lKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZW5hbWUoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0OwogICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgIHMxID0gcGVnJGN1cnJQb3M7CiAgICAgICAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7CiAgICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgczMgPSBbXTsKICAgICAgICAgICAgaWYgKHBlZyRjNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzY3KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczMucHVzaChzNCk7CiAgICAgICAgICAgICAgaWYgKHBlZyRjNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpOwogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEOwogICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzY3KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgICAgczIgPSBbczIsIHMzXTsKICAgICAgICAgICAgICBzMSA9IHMyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczE7CiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZWckY3VyclBvcyA9IHMxOwogICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgIHMxID0gcGVnJGM2OChzMSk7CiAgICAgICAgICB9CiAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2VxdW90ZWRTdHJpbmcoKSB7CiAgICAgICAgICB2YXIgczAsIHMxLCBzMiwgczM7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkgewogICAgICAgICAgICBzMSA9IHBlZyRjNjk7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzcwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMyID0gW107CiAgICAgICAgICAgIGlmIChwZWckYzcxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3Mik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHMyLnB1c2goczMpOwogICAgICAgICAgICAgIGlmIChwZWckYzcxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3Mik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHsKICAgICAgICAgICAgICAgIHMzID0gcGVnJGM2OTsKICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7CiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNzMoczIpOwogICAgICAgICAgICAgICAgczAgPSBzMTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDsKICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzMDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGVnJHBhcnNlbm9uUXVvdGVkU3RyaW5nKCkgewogICAgICAgICAgdmFyIHMwLCBzMSwgczI7CiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zOwogICAgICAgICAgczEgPSBbXTsKICAgICAgICAgIGlmIChwZWckYzc0LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpOwogICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEOwogICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3NSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzMiAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMS5wdXNoKHMyKTsKICAgICAgICAgICAgaWYgKHBlZyRjNzQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzc1KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgczEgPSBwZWckYzc2KHMxKTsKICAgICAgICAgIH0KICAgICAgICAgIHMwID0gczE7CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBlZyRwYXJzZW51bWJlcigpIHsKICAgICAgICAgIHZhciBzMCwgczEsIHMyLCBzMzsKICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrOwogICAgICAgICAgczAgPSBwZWckY3VyclBvczsKICAgICAgICAgIHMxID0gcGVnJHBhcnNlXygpOwogICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMyID0gW107CiAgICAgICAgICAgIGlmIChwZWckYzc4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7CiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3OSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICAgICAgczIucHVzaChzMyk7CiAgICAgICAgICAgICAgICBpZiAocGVnJGM3OC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7CiAgICAgICAgICAgICAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNzkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHsKICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDsKICAgICAgICAgICAgICBzMSA9IHBlZyRjODAoKTsKICAgICAgICAgICAgICBzMCA9IHMxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7CiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwOwogICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICB9CiAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTsKICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7CiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsKICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzc3KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHMwOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwZWckcGFyc2VfKCkgewogICAgICAgICAgdmFyIHMwLCBzMTsKICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrOwogICAgICAgICAgczAgPSBbXTsKICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHsKICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpOwogICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEOwogICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM4Myk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkgewogICAgICAgICAgICBzMC5wdXNoKHMxKTsKICAgICAgICAgICAgaWYgKHBlZyRjODIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkgewogICAgICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTsKICAgICAgICAgICAgICBwZWckY3VyclBvcysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzgzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tOwogICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7CiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDsKICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgewogICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjODEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gczA7CiAgICAgICAgfQogICAgICAgIHBlZyRyZXN1bHQgPSBwZWckc3RhcnRSdWxlRnVuY3Rpb24oKTsKICAgICAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA9PT0gaW5wdXQubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gcGVnJHJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPCBpbnB1dC5sZW5ndGgpIHsKICAgICAgICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKHBlZyRtYXhGYWlsRXhwZWN0ZWQsIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckF0KHBlZyRtYXhGYWlsUG9zKSA6IG51bGwsIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MgKyAxKSA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1vZHVsZTIuZXhwb3J0cyA9IHsKICAgICAgICBTeW50YXhFcnJvcjogcGVnJFN5bnRheEVycm9yLAogICAgICAgIHBhcnNlOiBwZWckcGFyc2UKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvYmVkL2JlZC13b3JrZXIudHM/d29ya2VyJmlubGluZT93b3JrZXJfZmlsZQogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL2luZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGFiaXhJbmRleGVkRmlsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2Fib3J0YWJsZV9wcm9taXNlX2NhY2hlID0gX190b01vZHVsZShyZXF1aXJlX2VzbSgpKTsKICB2YXIgaW1wb3J0X3F1aWNrX2xydSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9xdWlja19scnUoKSk7CiAgdmFyIGltcG9ydF9idWZmZXI3ID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2xvY2FsRmlsZSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb2NhbEZpbGUoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vcmVtb3RlRmlsZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2J1ZmZlcjIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYnVmZmVyKCkpOwogIHZhciBSZW1vdGVGaWxlID0gY2xhc3MgewogICAgYXN5bmMgZ2V0QnVmZmVyRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSB7CiAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuYnVmZmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJ1ZmZlcigpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZS5hcnJheUJ1ZmZlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpOwogICAgICAgIHJldHVybiBpbXBvcnRfYnVmZmVyMi5CdWZmZXIuZnJvbShyZXNwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIEhUVFAgcmVzcG9uc2Ugb2JqZWN0LCBoYXMgbm8gYnVmZmVyIG1ldGhvZCwgYW5kIG5vIGFycmF5QnVmZmVyIG1ldGhvZCIpOwogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UsIG9wdHMgPSB7fSkgewogICAgICB0aGlzLmJhc2VPdmVycmlkZXMgPSB7fTsKICAgICAgdGhpcy51cmwgPSBzb3VyY2U7CiAgICAgIGNvbnN0IGZldGNoID0gb3B0cy5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoLmJpbmQoZ2xvYmFsVGhpcyk7CiAgICAgIGlmICghZmV0Y2gpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBubyBmZXRjaCBmdW5jdGlvbiBzdXBwbGllZCwgYW5kIG5vbmUgZm91bmQgaW4gZ2xvYmFsIGVudmlyb25tZW50YCk7CiAgICAgIH0KICAgICAgaWYgKG9wdHMub3ZlcnJpZGVzKSB7CiAgICAgICAgdGhpcy5iYXNlT3ZlcnJpZGVzID0gb3B0cy5vdmVycmlkZXM7CiAgICAgIH0KICAgICAgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uID0gZmV0Y2g7CiAgICB9CiAgICBhc3luYyBmZXRjaChpbnB1dCwgaW5pdDIpIHsKICAgICAgbGV0IHJlc3BvbnNlOwogICAgICB0cnkgewogICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uKGlucHV0LCBpbml0Mik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBpZiAoYCR7ZX1gLmluY2x1ZGVzKCJGYWlsZWQgdG8gZmV0Y2giKSkgewogICAgICAgICAgY29uc29sZS53YXJuKGBnZW5lcmljLWZpbGVoYW5kbGU6IHJlZmV0Y2hpbmcgJHtpbnB1dH0gdG8gYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBjaHJvbWUgQ09SUyBoZWFkZXIgY2FjaGluZyBidWdgKTsKICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGxlbWVudGF0aW9uKGlucHV0LCB7CiAgICAgICAgICAgIC4uLmluaXQyLAogICAgICAgICAgICBjYWNoZTogInJlbG9hZCIKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9CiAgICBhc3luYyByZWFkKGJ1ZmZlciwgb2Zmc2V0ID0gMCwgbGVuZ3RoLCBwb3NpdGlvbiA9IDAsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCB7IGhlYWRlcnMgPSB7fSwgc2lnbmFsLCBvdmVycmlkZXMgPSB7fSB9ID0gb3B0czsKICAgICAgaWYgKGxlbmd0aCA8IEluZmluaXR5KSB7CiAgICAgICAgaGVhZGVycy5yYW5nZSA9IGBieXRlcz0ke3Bvc2l0aW9ufS0ke3Bvc2l0aW9uICsgbGVuZ3RofWA7CiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSBJbmZpbml0eSAmJiBwb3NpdGlvbiAhPT0gMCkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tYDsKICAgICAgfQogICAgICBjb25zdCBhcmdzID0gewogICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcywKICAgICAgICAuLi5vdmVycmlkZXMsCiAgICAgICAgaGVhZGVyczogewogICAgICAgICAgLi4uaGVhZGVycywKICAgICAgICAgIC4uLm92ZXJyaWRlcy5oZWFkZXJzLAogICAgICAgICAgLi4udGhpcy5iYXNlT3ZlcnJpZGVzLmhlYWRlcnMKICAgICAgICB9LAogICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgcmVkaXJlY3Q6ICJmb2xsb3ciLAogICAgICAgIG1vZGU6ICJjb3JzIiwKICAgICAgICBzaWduYWwKICAgICAgfTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoKHRoaXMudXJsLCBhcmdzKTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fSAke3RoaXMudXJsfWApOwogICAgICB9CiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCAmJiBwb3NpdGlvbiA9PT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNikgewogICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0QnVmZmVyRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTsKICAgICAgICBjb25zdCBieXRlc0NvcGllZCA9IHJlc3BvbnNlRGF0YS5jb3B5KGJ1ZmZlciwgb2Zmc2V0LCAwLCBNYXRoLm1pbihsZW5ndGgsIHJlc3BvbnNlRGF0YS5sZW5ndGgpKTsKICAgICAgICBjb25zdCByZXMgPSByZXNwb25zZS5oZWFkZXJzLmdldCgiY29udGVudC1yYW5nZSIpOwogICAgICAgIGNvbnN0IHNpemVNYXRjaCA9IC9cLyhcZCspJC8uZXhlYyhyZXMgfHwgIiIpOwogICAgICAgIGlmIChzaXplTWF0Y2ggJiYgc2l6ZU1hdGNoWzFdKSB7CiAgICAgICAgICB0aGlzLl9zdGF0ID0geyBzaXplOiBwYXJzZUludChzaXplTWF0Y2hbMV0sIDEwKSB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBieXRlc1JlYWQ6IGJ5dGVzQ29waWVkLCBidWZmZXIgfTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIiR7dGhpcy51cmx9IGZldGNoIHJldHVybmVkIHN0YXR1cyAyMDAsIGV4cGVjdGVkIDIwNiIpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZmV0Y2hpbmcgJHt0aGlzLnVybH1gKTsKICAgIH0KICAgIGFzeW5jIHJlYWRGaWxlKG9wdGlvbnMgPSB7fSkgewogICAgICBsZXQgZW5jb2Rpbmc7CiAgICAgIGxldCBvcHRzOwogICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZW5jb2RpbmcgPSBvcHRpb25zOwogICAgICAgIG9wdHMgPSB7fTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7CiAgICAgICAgb3B0cyA9IG9wdGlvbnM7CiAgICAgICAgZGVsZXRlIG9wdHMuZW5jb2Rpbmc7CiAgICAgIH0KICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGNvbnN0IGFyZ3MgPSB7CiAgICAgICAgaGVhZGVycywKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsLAogICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcywKICAgICAgICAuLi5vdmVycmlkZXMKICAgICAgfTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoKHRoaXMudXJsLCBhcmdzKTsKICAgICAgaWYgKCFyZXNwb25zZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiZ2VuZXJpYy1maWxlaGFuZGxlIGZhaWxlZCB0byBmZXRjaCIpOwogICAgICB9CiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkgewogICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApLCB7CiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChlbmNvZGluZyA9PT0gInV0ZjgiKSB7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsKICAgICAgfQogICAgICBpZiAoZW5jb2RpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGVuY29kaW5nOiAke2VuY29kaW5nfWApOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICB9CiAgICBhc3luYyBzdGF0KCkgewogICAgICBpZiAoIXRoaXMuX3N0YXQpIHsKICAgICAgICBjb25zdCBidWYgPSBpbXBvcnRfYnVmZmVyMi5CdWZmZXIuYWxsb2NVbnNhZmUoMTApOwogICAgICAgIGF3YWl0IHRoaXMucmVhZChidWYsIDAsIDEwLCAwKTsKICAgICAgICBpZiAoIXRoaXMuX3N0YXQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGRldGVybWluZSBzaXplIG9mIGZpbGUgYXQgJHt0aGlzLnVybH1gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuX3N0YXQ7CiAgICB9CiAgICBhc3luYyBjbG9zZSgpIHsKICAgICAgcmV0dXJuOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9nZW5lcmljLWZpbGVoYW5kbGVAMy4xLjEvbm9kZV9tb2R1bGVzL2dlbmVyaWMtZmlsZWhhbmRsZS9lc20vYmxvYkZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXIzID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2dlbmVyaWMtZmlsZWhhbmRsZUAzLjEuMS9ub2RlX21vZHVsZXMvZ2VuZXJpYy1maWxlaGFuZGxlL2VzbS9maWxlaGFuZGxlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2luZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2JnekZpbGVoYW5kbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9idWZmZXI2ID0gX190b01vZHVsZShyZXF1aXJlX2J1ZmZlcigpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JnemYtZmlsZWhhbmRsZUAxLjQuNy9ub2RlX21vZHVsZXMvQGdtb2QvYmd6Zi1maWxlaGFuZGxlL2VzbS91bnppcC1wYWtvLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfYnVmZmVyNCA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CiAgdmFyIGltcG9ydF9wYWtvID0gX190b01vZHVsZShyZXF1aXJlX3Bha28oKSk7CiAgYXN5bmMgZnVuY3Rpb24gdW56aXAoaW5wdXREYXRhKSB7CiAgICB0cnkgewogICAgICBsZXQgc3RybTsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGxldCBpID0gMDsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGxldCB0b3RhbFNpemUgPSAwOwogICAgICBsZXQgaW5mbGF0b3I7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCByZW1haW5pbmdJbnB1dCA9IGlucHV0RGF0YS5zdWJhcnJheShwb3MpOwogICAgICAgIGluZmxhdG9yID0gbmV3IGltcG9ydF9wYWtvLkluZmxhdGUoKTsKICAgICAgICAoeyBzdHJtIH0gPSBpbmZsYXRvcik7CiAgICAgICAgaW5mbGF0b3IucHVzaChyZW1haW5pbmdJbnB1dCwgaW1wb3J0X3Bha28uWl9TWU5DX0ZMVVNIKTsKICAgICAgICBpZiAoaW5mbGF0b3IuZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKTsKICAgICAgICB9CiAgICAgICAgcG9zICs9IHN0cm0ubmV4dF9pbjsKICAgICAgICBjaHVua3NbaV0gPSBpbmZsYXRvci5yZXN1bHQ7CiAgICAgICAgdG90YWxTaXplICs9IGNodW5rc1tpXS5sZW5ndGg7CiAgICAgICAgaSArPSAxOwogICAgICB9IHdoaWxlIChzdHJtLmF2YWlsX2luKTsKICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxTaXplKTsKICAgICAgZm9yIChsZXQgaTIgPSAwLCBvZmZzZXQgPSAwOyBpMiA8IGNodW5rcy5sZW5ndGg7IGkyKyspIHsKICAgICAgICByZXN1bHQuc2V0KGNodW5rc1tpMl0sIG9mZnNldCk7CiAgICAgICAgb2Zmc2V0ICs9IGNodW5rc1tpMl0ubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAoYCR7ZX1gLm1hdGNoKC9pbmNvcnJlY3QgaGVhZGVyIGNoZWNrLykpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2JsZW0gZGVjb21wcmVzc2luZyBibG9jazogaW5jb3JyZWN0IGd6aXAgaGVhZGVyIGNoZWNrIik7CiAgICAgIH0KICAgICAgdGhyb3cgZTsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gdW56aXBDaHVua1NsaWNlKGlucHV0RGF0YSwgY2h1bmspIHsKICAgIHRyeSB7CiAgICAgIGxldCBzdHJtOwogICAgICBjb25zdCB7IG1pbnYsIG1heHYgfSA9IGNodW5rOwogICAgICBsZXQgY3BvcyA9IG1pbnYuYmxvY2tQb3NpdGlvbjsKICAgICAgbGV0IGRwb3MgPSBtaW52LmRhdGFQb3NpdGlvbjsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGNvbnN0IGNwb3NpdGlvbnMgPSBbXTsKICAgICAgY29uc3QgZHBvc2l0aW9ucyA9IFtdOwogICAgICBsZXQgdG90YWxTaXplID0gMDsKICAgICAgbGV0IGkgPSAwOwogICAgICBkbyB7CiAgICAgICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc3ViYXJyYXkoY3BvcyAtIG1pbnYuYmxvY2tQb3NpdGlvbik7CiAgICAgICAgY29uc3QgaW5mbGF0b3IgPSBuZXcgaW1wb3J0X3Bha28uSW5mbGF0ZSgpOwogICAgICAgICh7IHN0cm0gfSA9IGluZmxhdG9yKTsKICAgICAgICBpbmZsYXRvci5wdXNoKHJlbWFpbmluZ0lucHV0LCBpbXBvcnRfcGFrby5aX1NZTkNfRkxVU0gpOwogICAgICAgIGlmIChpbmZsYXRvci5lcnIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZsYXRvci5tc2cpOwogICAgICAgIH0KICAgICAgICBjb25zdCBidWZmZXIyID0gaW5mbGF0b3IucmVzdWx0OwogICAgICAgIGNodW5rcy5wdXNoKGJ1ZmZlcjIpOwogICAgICAgIGxldCBsZW4gPSBidWZmZXIyLmxlbmd0aDsKICAgICAgICBjcG9zaXRpb25zLnB1c2goY3Bvcyk7CiAgICAgICAgZHBvc2l0aW9ucy5wdXNoKGRwb3MpOwogICAgICAgIGlmIChjaHVua3MubGVuZ3RoID09PSAxICYmIG1pbnYuZGF0YVBvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3NbMF0gPSBjaHVua3NbMF0uc3ViYXJyYXkobWludi5kYXRhUG9zaXRpb24pOwogICAgICAgICAgbGVuID0gY2h1bmtzWzBdLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3JpZ0Nwb3MgPSBjcG9zOwogICAgICAgIGNwb3MgKz0gc3RybS5uZXh0X2luOwogICAgICAgIGRwb3MgKz0gbGVuOwogICAgICAgIGlmIChvcmlnQ3BvcyA+PSBtYXh2LmJsb2NrUG9zaXRpb24pIHsKICAgICAgICAgIGNodW5rc1tpXSA9IGNodW5rc1tpXS5zdWJhcnJheSgwLCBtYXh2LmJsb2NrUG9zaXRpb24gPT09IG1pbnYuYmxvY2tQb3NpdGlvbiA/IG1heHYuZGF0YVBvc2l0aW9uIC0gbWludi5kYXRhUG9zaXRpb24gKyAxIDogbWF4di5kYXRhUG9zaXRpb24gKyAxKTsKICAgICAgICAgIGNwb3NpdGlvbnMucHVzaChjcG9zKTsKICAgICAgICAgIGRwb3NpdGlvbnMucHVzaChkcG9zKTsKICAgICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRvdGFsU2l6ZSArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgfSB3aGlsZSAoc3RybS5hdmFpbF9pbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsU2l6ZSk7CiAgICAgIGZvciAobGV0IGkyID0gMCwgb2Zmc2V0ID0gMDsgaTIgPCBjaHVua3MubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgcmVzdWx0LnNldChjaHVua3NbaTJdLCBvZmZzZXQpOwogICAgICAgIG9mZnNldCArPSBjaHVua3NbaTJdLmxlbmd0aDsKICAgICAgfQogICAgICBjb25zdCBidWZmZXIgPSBpbXBvcnRfYnVmZmVyNC5CdWZmZXIuZnJvbShyZXN1bHQpOwogICAgICByZXR1cm4geyBidWZmZXIsIGNwb3NpdGlvbnMsIGRwb3NpdGlvbnMgfTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGAke2V9YC5tYXRjaCgvaW5jb3JyZWN0IGhlYWRlciBjaGVjay8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJwcm9ibGVtIGRlY29tcHJlc3NpbmcgYmxvY2s6IGluY29ycmVjdCBnemlwIGhlYWRlciBjaGVjayIpOwogICAgICB9CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmd6Zi1maWxlaGFuZGxlQDEuNC43L25vZGVfbW9kdWxlcy9AZ21vZC9iZ3pmLWZpbGVoYW5kbGUvZXNtL2d6aUluZGV4LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb25nKCkpOwogIHZhciBpbXBvcnRfYnVmZmVyNSA9IF9fdG9Nb2R1bGUocmVxdWlyZV9idWZmZXIoKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS91dGlsLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nKSB7CiAgICBpZiAobG9uZy5ncmVhdGVyVGhhbihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgfHwgbG9uZy5sZXNzVGhhbihOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICB9CiAgICByZXR1cm4gbG9uZy50b051bWJlcigpOwogIH0KICB2YXIgQWJvcnRFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogIH07CiAgZnVuY3Rpb24gY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpIHsKICAgIGlmICghc2lnbmFsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICBpZiAodHlwZW9mIERPTUV4Y2VwdGlvbiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJhYm9ydGVkIiwgIkFib3J0RXJyb3IiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBlID0gbmV3IEFib3J0RXJyb3IoImFib3J0ZWQiKTsKICAgICAgICBlLmNvZGUgPSAiRVJSX0FCT1JURUQiOwogICAgICAgIHRocm93IGU7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gY2FuTWVyZ2VCbG9ja3MoY2h1bmsxLCBjaHVuazIpIHsKICAgIHJldHVybiBjaHVuazIubWludi5ibG9ja1Bvc2l0aW9uIC0gY2h1bmsxLm1heHYuYmxvY2tQb3NpdGlvbiA8IDY1ZTMgJiYgY2h1bmsyLm1heHYuYmxvY2tQb3NpdGlvbiAtIGNodW5rMS5taW52LmJsb2NrUG9zaXRpb24gPCA1ZTY7CiAgfQogIGZ1bmN0aW9uIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KSB7CiAgICBjb25zdCBtZXJnZWRDaHVua3MgPSBbXTsKICAgIGxldCBsYXN0Q2h1bmsgPSBudWxsOwogICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGNodW5rczsKICAgIH0KICAgIGNodW5rcy5zb3J0KGZ1bmN0aW9uKGMwLCBjMSkgewogICAgICBjb25zdCBkaWYgPSBjMC5taW52LmJsb2NrUG9zaXRpb24gLSBjMS5taW52LmJsb2NrUG9zaXRpb247CiAgICAgIGlmIChkaWYgIT09IDApIHsKICAgICAgICByZXR1cm4gZGlmOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjMC5taW52LmRhdGFQb3NpdGlvbiAtIGMxLm1pbnYuZGF0YVBvc2l0aW9uOwogICAgICB9CiAgICB9KTsKICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4gewogICAgICBpZiAoIWxvd2VzdCB8fCBjaHVuay5tYXh2LmNvbXBhcmVUbyhsb3dlc3QpID4gMCkgewogICAgICAgIGlmIChsYXN0Q2h1bmsgPT09IG51bGwpIHsKICAgICAgICAgIG1lcmdlZENodW5rcy5wdXNoKGNodW5rKTsKICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoY2FuTWVyZ2VCbG9ja3MobGFzdENodW5rLCBjaHVuaykpIHsKICAgICAgICAgICAgaWYgKGNodW5rLm1heHYuY29tcGFyZVRvKGxhc3RDaHVuay5tYXh2KSA+IDApIHsKICAgICAgICAgICAgICBsYXN0Q2h1bmsubWF4diA9IGNodW5rLm1heHY7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lcmdlZENodW5rcy5wdXNoKGNodW5rKTsKICAgICAgICAgICAgbGFzdENodW5rID0gY2h1bms7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBtZXJnZWRDaHVua3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGJpLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBpbXBvcnRfbG9uZzIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfbG9uZygpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK3RhYml4QDEuNS4xMS9ub2RlX21vZHVsZXMvQGdtb2QvdGFiaXgvZXNtL3ZpcnR1YWxPZmZzZXQuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIFZpcnR1YWxPZmZzZXQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihibG9ja1Bvc2l0aW9uLCBkYXRhUG9zaXRpb24pIHsKICAgICAgdGhpcy5ibG9ja1Bvc2l0aW9uID0gYmxvY2tQb3NpdGlvbjsKICAgICAgdGhpcy5kYXRhUG9zaXRpb24gPSBkYXRhUG9zaXRpb247CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIGAke3RoaXMuYmxvY2tQb3NpdGlvbn06JHt0aGlzLmRhdGFQb3NpdGlvbn1gOwogICAgfQogICAgY29tcGFyZVRvKGIpIHsKICAgICAgcmV0dXJuIHRoaXMuYmxvY2tQb3NpdGlvbiAtIGIuYmxvY2tQb3NpdGlvbiB8fCB0aGlzLmRhdGFQb3NpdGlvbiAtIGIuZGF0YVBvc2l0aW9uOwogICAgfQogICAgc3RhdGljIG1pbiguLi5hcmdzKSB7CiAgICAgIGxldCBtaW47CiAgICAgIGxldCBpID0gMDsKICAgICAgZm9yICg7ICFtaW47IGkgKz0gMSkgewogICAgICAgIG1pbiA9IGFyZ3NbaV07CiAgICAgIH0KICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgaWYgKG1pbi5jb21wYXJlVG8oYXJnc1tpXSkgPiAwKSB7CiAgICAgICAgICBtaW4gPSBhcmdzW2ldOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbWluOwogICAgfQogIH07CiAgZnVuY3Rpb24gZnJvbUJ5dGVzKGJ5dGVzLCBvZmZzZXQgPSAwLCBiaWdlbmRpYW4gPSBmYWxzZSkgewogICAgaWYgKGJpZ2VuZGlhbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoImJpZy1lbmRpYW4gdmlydHVhbCBmaWxlIG9mZnNldHMgbm90IGltcGxlbWVudGVkIik7CiAgICB9CiAgICByZXR1cm4gbmV3IFZpcnR1YWxPZmZzZXQoYnl0ZXNbb2Zmc2V0ICsgN10gKiAxMDk5NTExNjI3Nzc2ICsgYnl0ZXNbb2Zmc2V0ICsgNl0gKiA0Mjk0OTY3Mjk2ICsgYnl0ZXNbb2Zmc2V0ICsgNV0gKiAxNjc3NzIxNiArIGJ5dGVzW29mZnNldCArIDRdICogNjU1MzYgKyBieXRlc1tvZmZzZXQgKyAzXSAqIDI1NiArIGJ5dGVzW29mZnNldCArIDJdLCBieXRlc1tvZmZzZXQgKyAxXSA8PCA4IHwgYnl0ZXNbb2Zmc2V0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vY2h1bmsuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIENodW5rID0gY2xhc3MgewogICAgY29uc3RydWN0b3IobWludiwgbWF4diwgYmluLCBmZXRjaGVkU2l6ZSA9IHZvaWQgMCkgewogICAgICB0aGlzLm1pbnYgPSBtaW52OwogICAgICB0aGlzLm1heHYgPSBtYXh2OwogICAgICB0aGlzLmJpbiA9IGJpbjsKICAgICAgdGhpcy5fZmV0Y2hlZFNpemUgPSBmZXRjaGVkU2l6ZTsKICAgIH0KICAgIHRvVW5pcXVlU3RyaW5nKCkgewogICAgICByZXR1cm4gYCR7dGhpcy5taW52fS4uJHt0aGlzLm1heHZ9IChiaW4gJHt0aGlzLmJpbn0sIGZldGNoZWRTaXplICR7dGhpcy5mZXRjaGVkU2l6ZSgpfSlgOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvVW5pcXVlU3RyaW5nKCk7CiAgICB9CiAgICBjb21wYXJlVG8oYikgewogICAgICByZXR1cm4gdGhpcy5taW52LmNvbXBhcmVUbyhiLm1pbnYpIHx8IHRoaXMubWF4di5jb21wYXJlVG8oYi5tYXh2KSB8fCB0aGlzLmJpbiAtIGIuYmluOwogICAgfQogICAgZmV0Y2hlZFNpemUoKSB7CiAgICAgIGlmICh0aGlzLl9mZXRjaGVkU2l6ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoZWRTaXplOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1heHYuYmxvY2tQb3NpdGlvbiArICgxIDw8IDE2KSAtIHRoaXMubWludi5ibG9ja1Bvc2l0aW9uOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS9pbmRleEZpbGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIEluZGV4RmlsZSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHsgZmlsZWhhbmRsZSwgcmVuYW1lUmVmU2VxcyA9IChuKSA9PiBuIH0pIHsKICAgICAgdGhpcy5maWxlaGFuZGxlID0gZmlsZWhhbmRsZTsKICAgICAgdGhpcy5yZW5hbWVSZWZTZXEgPSByZW5hbWVSZWZTZXFzOwogICAgfQogICAgYXN5bmMgZ2V0TWV0YWRhdGEob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgaW5kaWNlcywgLi4ucmVzdCB9ID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgcmV0dXJuIHJlc3Q7CiAgICB9CiAgICBfZmluZEZpcnN0RGF0YShjdXJyZW50RmRsLCB2aXJ0dWFsT2Zmc2V0KSB7CiAgICAgIGlmIChjdXJyZW50RmRsKSB7CiAgICAgICAgcmV0dXJuIGN1cnJlbnRGZGwuY29tcGFyZVRvKHZpcnR1YWxPZmZzZXQpID4gMCA/IHZpcnR1YWxPZmZzZXQgOiBjdXJyZW50RmRsOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB2aXJ0dWFsT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICBhc3luYyBwYXJzZShvcHRzID0ge30pIHsKICAgICAgaWYgKCF0aGlzLnBhcnNlUCkgewogICAgICAgIHRoaXMucGFyc2VQID0gdGhpcy5fcGFyc2Uob3B0cykuY2F0Y2goKGUpID0+IHsKICAgICAgICAgIHRoaXMucGFyc2VQID0gdm9pZCAwOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5wYXJzZVA7CiAgICB9CiAgICBhc3luYyBoYXNSZWZTZXEoc2VxSWQsIG9wdHMgPSB7fSkgewogICAgICByZXR1cm4gISEoKGF3YWl0IHRoaXMucGFyc2Uob3B0cykpLmluZGljZXNbc2VxSWRdIHx8IHt9KS5iaW5JbmRleDsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrdGFiaXhAMS41LjExL25vZGVfbW9kdWxlcy9AZ21vZC90YWJpeC9lc20vdGJpLmpzCiAgdmFyIFRCSV9NQUdJQyA9IDIxNTc4MzI0OwogIHZhciBUQURfTElEWF9TSElGVCA9IDE0OwogIGZ1bmN0aW9uIHJlZzJiaW5zKGJlZywgZW5kKSB7CiAgICBiZWcgKz0gMTsKICAgIGVuZCAtPSAxOwogICAgcmV0dXJuIFsKICAgICAgWzAsIDBdLAogICAgICBbMSArIChiZWcgPj4gMjYpLCAxICsgKGVuZCA+PiAyNildLAogICAgICBbOSArIChiZWcgPj4gMjMpLCA5ICsgKGVuZCA+PiAyMyldLAogICAgICBbNzMgKyAoYmVnID4+IDIwKSwgNzMgKyAoZW5kID4+IDIwKV0sCiAgICAgIFs1ODUgKyAoYmVnID4+IDE3KSwgNTg1ICsgKGVuZCA+PiAxNyldLAogICAgICBbNDY4MSArIChiZWcgPj4gMTQpLCA0NjgxICsgKGVuZCA+PiAxNCldCiAgICBdOwogIH0KICB2YXIgVGFiaXhJbmRleCA9IGNsYXNzIGV4dGVuZHMgSW5kZXhGaWxlIHsKICAgIGFzeW5jIGxpbmVDb3VudChyZWZOYW1lLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKTsKICAgICAgaWYgKCFpbmRleERhdGEpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgcmVmSWQgPSBpbmRleERhdGEucmVmTmFtZVRvSWRbcmVmTmFtZV07CiAgICAgIGNvbnN0IGlkeCA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFpZHgpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgeyBzdGF0cyB9ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdOwogICAgICBpZiAoc3RhdHMpIHsKICAgICAgICByZXR1cm4gc3RhdHMubGluZUNvdW50OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGFzeW5jIF9wYXJzZShvcHRzID0ge30pIHsKICAgICAgY29uc3QgYnVmID0gYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWRGaWxlKG9wdHMpOwogICAgICBjb25zdCBieXRlcyA9IGF3YWl0IHVuemlwKGJ1Zik7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwob3B0cy5zaWduYWwpOwogICAgICBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApICE9PSBUQklfTUFHSUMpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIFRCSSBmaWxlIik7CiAgICAgIH0KICAgICAgY29uc3QgcmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KTsKICAgICAgY29uc3QgZm9ybWF0RmxhZ3MgPSBieXRlcy5yZWFkSW50MzJMRSg4KTsKICAgICAgY29uc3QgY29vcmRpbmF0ZVR5cGUgPSBmb3JtYXRGbGFncyAmIDY1NTM2ID8gInplcm8tYmFzZWQtaGFsZi1vcGVuIiA6ICIxLWJhc2VkLWNsb3NlZCI7CiAgICAgIGNvbnN0IGZvcm1hdE9wdHMgPSB7CiAgICAgICAgMDogImdlbmVyaWMiLAogICAgICAgIDE6ICJTQU0iLAogICAgICAgIDI6ICJWQ0YiCiAgICAgIH07CiAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdE9wdHNbZm9ybWF0RmxhZ3MgJiAxNV07CiAgICAgIGlmICghZm9ybWF0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIFRhYml4IHByZXNldCBmb3JtYXQgZmxhZ3MgJHtmb3JtYXRGbGFnc31gKTsKICAgICAgfQogICAgICBjb25zdCBjb2x1bW5OdW1iZXJzID0gewogICAgICAgIHJlZjogYnl0ZXMucmVhZEludDMyTEUoMTIpLAogICAgICAgIHN0YXJ0OiBieXRlcy5yZWFkSW50MzJMRSgxNiksCiAgICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRSgyMCkKICAgICAgfTsKICAgICAgY29uc3QgbWV0YVZhbHVlID0gYnl0ZXMucmVhZEludDMyTEUoMjQpOwogICAgICBjb25zdCBkZXB0aCA9IDU7CiAgICAgIGNvbnN0IG1heEJpbk51bWJlciA9ICgoMSA8PCAoZGVwdGggKyAxKSAqIDMpIC0gMSkgLyA3OwogICAgICBjb25zdCBtYXhSZWZMZW5ndGggPSAyICoqICgxNCArIGRlcHRoICogMyk7CiAgICAgIGNvbnN0IG1ldGFDaGFyID0gbWV0YVZhbHVlID8gU3RyaW5nLmZyb21DaGFyQ29kZShtZXRhVmFsdWUpIDogbnVsbDsKICAgICAgY29uc3Qgc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUoMjgpOwogICAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDMyKTsKICAgICAgY29uc3QgeyByZWZOYW1lVG9JZCwgcmVmSWRUb05hbWUgfSA9IHRoaXMuX3BhcnNlTmFtZUJ5dGVzKGJ5dGVzLnNsaWNlKDM2LCAzNiArIG5hbWVTZWN0aW9uTGVuZ3RoKSk7CiAgICAgIGxldCBjdXJyT2Zmc2V0ID0gMzYgKyBuYW1lU2VjdGlvbkxlbmd0aDsKICAgICAgbGV0IGZpcnN0RGF0YUxpbmU7CiAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgQXJyYXkocmVmQ291bnQpLmZpbGwoMCkubWFwKCgpID0+IHsKICAgICAgICBjb25zdCBiaW5Db3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICBjb25zdCBiaW5JbmRleCA9IHt9OwogICAgICAgIGxldCBzdGF0czsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHsKICAgICAgICAgIGNvbnN0IGJpbiA9IGJ5dGVzLnJlYWRVSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNDsKICAgICAgICAgIGlmIChiaW4gPiBtYXhCaW5OdW1iZXIgKyAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGFiaXggaW5kZXggY29udGFpbnMgdG9vIG1hbnkgYmlucywgcGxlYXNlIHVzZSBhIENTSSBpbmRleCIpOwogICAgICAgICAgfSBlbHNlIGlmIChiaW4gPT09IG1heEJpbk51bWJlciArIDEpIHsKICAgICAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgICAgIGlmIChjaHVua0NvdW50ID09PSAyKSB7CiAgICAgICAgICAgICAgc3RhdHMgPSB0aGlzLnBhcnNlUHNldWRvQmluKGJ5dGVzLCBjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2ICogY2h1bmtDb3VudDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGNodW5rQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgICAgICBjb25zdCBjaHVua3MgPSBuZXcgQXJyYXkoY2h1bmtDb3VudCk7CiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2h1bmtDb3VudDsgayArPSAxKSB7CiAgICAgICAgICAgICAgY29uc3QgdSA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCk7CiAgICAgICAgICAgICAgY29uc3QgdiA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDgpOwogICAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMTY7CiAgICAgICAgICAgICAgZmlyc3REYXRhTGluZSA9IHRoaXMuX2ZpbmRGaXJzdERhdGEoZmlyc3REYXRhTGluZSwgdSk7CiAgICAgICAgICAgICAgY2h1bmtzW2tdID0gbmV3IENodW5rKHUsIHYsIGJpbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmluSW5kZXhbYmluXSA9IGNodW5rczsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgbGluZWFyQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KTsKICAgICAgICBjdXJyT2Zmc2V0ICs9IDQ7CiAgICAgICAgY29uc3QgbGluZWFySW5kZXggPSBuZXcgQXJyYXkobGluZWFyQ291bnQpOwogICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZWFyQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgbGluZWFySW5kZXhba10gPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgY3Vyck9mZnNldCArPSA4OwogICAgICAgICAgZmlyc3REYXRhTGluZSA9IHRoaXMuX2ZpbmRGaXJzdERhdGEoZmlyc3REYXRhTGluZSwgbGluZWFySW5kZXhba10pOwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBiaW5JbmRleCwgbGluZWFySW5kZXgsIHN0YXRzIH07CiAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGluZGljZXMsCiAgICAgICAgbWV0YUNoYXIsCiAgICAgICAgbWF4QmluTnVtYmVyLAogICAgICAgIG1heFJlZkxlbmd0aCwKICAgICAgICBza2lwTGluZXMsCiAgICAgICAgZmlyc3REYXRhTGluZSwKICAgICAgICBjb2x1bW5OdW1iZXJzLAogICAgICAgIGNvb3JkaW5hdGVUeXBlLAogICAgICAgIGZvcm1hdCwKICAgICAgICByZWZJZFRvTmFtZSwKICAgICAgICByZWZOYW1lVG9JZCwKICAgICAgICBtYXhCbG9ja1NpemU6IDEgPDwgMTYKICAgICAgfTsKICAgIH0KICAgIHBhcnNlUHNldWRvQmluKGJ5dGVzLCBvZmZzZXQpIHsKICAgICAgY29uc3QgbGluZUNvdW50ID0gbG9uZ1RvTnVtYmVyKGltcG9ydF9sb25nMi5kZWZhdWx0LmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDE2LCBvZmZzZXQgKyAyNCksIHRydWUpKTsKICAgICAgcmV0dXJuIHsgbGluZUNvdW50IH07CiAgICB9CiAgICBfcGFyc2VOYW1lQnl0ZXMobmFtZXNCeXRlcykgewogICAgICBsZXQgY3VyclJlZklkID0gMDsKICAgICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwOwogICAgICBjb25zdCByZWZJZFRvTmFtZSA9IFtdOwogICAgICBjb25zdCByZWZOYW1lVG9JZCA9IHt9OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBpZiAoIW5hbWVzQnl0ZXNbaV0pIHsKICAgICAgICAgIGlmIChjdXJyTmFtZVN0YXJ0IDwgaSkgewogICAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoInV0ZjgiLCBjdXJyTmFtZVN0YXJ0LCBpKTsKICAgICAgICAgICAgcmVmTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxKHJlZk5hbWUpOwogICAgICAgICAgICByZWZJZFRvTmFtZVtjdXJyUmVmSWRdID0gcmVmTmFtZTsKICAgICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjdXJyUmVmSWQgKz0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH07CiAgICB9CiAgICBhc3luYyBibG9ja3NGb3JSYW5nZShyZWZOYW1lLCBtaW4sIG1heCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChtaW4gPCAwKSB7CiAgICAgICAgbWluID0gMDsKICAgICAgfQogICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpOwogICAgICBpZiAoIWluZGV4RGF0YSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCByZWZJZCA9IGluZGV4RGF0YS5yZWZOYW1lVG9JZFtyZWZOYW1lXTsKICAgICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghYmEpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgbWluT2Zmc2V0ID0gYmEubGluZWFySW5kZXgubGVuZ3RoID8gYmEubGluZWFySW5kZXhbbWluID4+IFRBRF9MSURYX1NISUZUID49IGJhLmxpbmVhckluZGV4Lmxlbmd0aCA/IGJhLmxpbmVhckluZGV4Lmxlbmd0aCAtIDEgOiBtaW4gPj4gVEFEX0xJRFhfU0hJRlRdIDogbmV3IFZpcnR1YWxPZmZzZXQoMCwgMCk7CiAgICAgIGlmICghbWluT2Zmc2V0KSB7CiAgICAgICAgY29uc29sZS53YXJuKCJxdWVyeWluZyBvdXRzaWRlIG9mIHBvc3NpYmxlIHRhYml4IHJhbmdlIik7CiAgICAgIH0KICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdCaW5zID0gcmVnMmJpbnMobWluLCBtYXgpOwogICAgICBjb25zdCBjaHVua3MgPSBbXTsKICAgICAgZm9yIChjb25zdCBbc3RhcnQsIGVuZF0gb2Ygb3ZlcmxhcHBpbmdCaW5zKSB7CiAgICAgICAgZm9yIChsZXQgYmluID0gc3RhcnQ7IGJpbiA8PSBlbmQ7IGJpbisrKSB7CiAgICAgICAgICBpZiAoYmEuYmluSW5kZXhbYmluXSkgewogICAgICAgICAgICBjb25zdCBiaW5DaHVua3MgPSBiYS5iaW5JbmRleFtiaW5dOwogICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGJpbkNodW5rcy5sZW5ndGg7ICsrYykgewogICAgICAgICAgICAgIGNodW5rcy5wdXNoKG5ldyBDaHVuayhiaW5DaHVua3NbY10ubWludiwgYmluQ2h1bmtzW2NdLm1heHYsIGJpbikpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IG5pbnR2ID0gYmEubGluZWFySW5kZXgubGVuZ3RoOwogICAgICBsZXQgbG93ZXN0ID0gbnVsbDsKICAgICAgY29uc3QgbWluTGluID0gTWF0aC5taW4obWluID4+IDE0LCBuaW50diAtIDEpOwogICAgICBjb25zdCBtYXhMaW4gPSBNYXRoLm1pbihtYXggPj4gMTQsIG5pbnR2IC0gMSk7CiAgICAgIGZvciAobGV0IGkgPSBtaW5MaW47IGkgPD0gbWF4TGluOyArK2kpIHsKICAgICAgICBjb25zdCB2cCA9IGJhLmxpbmVhckluZGV4W2ldOwogICAgICAgIGlmICh2cCkgewogICAgICAgICAgaWYgKCFsb3dlc3QgfHwgdnAuY29tcGFyZVRvKGxvd2VzdCkgPCAwKSB7CiAgICAgICAgICAgIGxvd2VzdCA9IHZwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3B0aW1pemVDaHVua3MoY2h1bmtzLCBsb3dlc3QpOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS9jc2kuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9sb25nMyA9IF9fdG9Nb2R1bGUocmVxdWlyZV9sb25nKCkpOwogIHZhciBDU0kxX01BR0lDID0gMjE1ODI2NTk7CiAgdmFyIENTSTJfTUFHSUMgPSAzODM1OTg3NTsKICBmdW5jdGlvbiBsc2hpZnQobnVtLCBiaXRzKSB7CiAgICByZXR1cm4gbnVtICogMiAqKiBiaXRzOwogIH0KICBmdW5jdGlvbiByc2hpZnQobnVtLCBiaXRzKSB7CiAgICByZXR1cm4gTWF0aC5mbG9vcihudW0gLyAyICoqIGJpdHMpOwogIH0KICB2YXIgQ1NJID0gY2xhc3MgZXh0ZW5kcyBJbmRleEZpbGUgewogICAgY29uc3RydWN0b3IoYXJncykgewogICAgICBzdXBlcihhcmdzKTsKICAgICAgdGhpcy5tYXhCaW5OdW1iZXIgPSAwOwogICAgICB0aGlzLmRlcHRoID0gMDsKICAgICAgdGhpcy5taW5TaGlmdCA9IDA7CiAgICB9CiAgICBhc3luYyBsaW5lQ291bnQocmVmTmFtZSwgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGlmICghaW5kZXhEYXRhKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHJlZklkID0gaW5kZXhEYXRhLnJlZk5hbWVUb0lkW3JlZk5hbWVdOwogICAgICBjb25zdCBpZHggPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF07CiAgICAgIGlmICghaWR4KSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IHsgc3RhdHMgfSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKHN0YXRzKSB7CiAgICAgICAgcmV0dXJuIHN0YXRzLmxpbmVDb3VudDsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBhc3luYyBpbmRleENvdigpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDU0kgaW5kZXhlcyBkbyBub3Qgc3VwcG9ydCBpbmRleGNvdiIpOwogICAgfQogICAgcGFyc2VBdXhEYXRhKGJ5dGVzLCBvZmZzZXQpIHsKICAgICAgY29uc3QgZm9ybWF0RmxhZ3MgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQpOwogICAgICBjb25zdCBjb29yZGluYXRlVHlwZSA9IGZvcm1hdEZsYWdzICYgNjU1MzYgPyAiemVyby1iYXNlZC1oYWxmLW9wZW4iIDogIjEtYmFzZWQtY2xvc2VkIjsKICAgICAgY29uc3QgZm9ybWF0ID0geyAwOiAiZ2VuZXJpYyIsIDE6ICJTQU0iLCAyOiAiVkNGIiB9W2Zvcm1hdEZsYWdzICYgMTVdOwogICAgICBpZiAoIWZvcm1hdCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBUYWJpeCBwcmVzZXQgZm9ybWF0IGZsYWdzICR7Zm9ybWF0RmxhZ3N9YCk7CiAgICAgIH0KICAgICAgY29uc3QgY29sdW1uTnVtYmVycyA9IHsKICAgICAgICByZWY6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDQpLAogICAgICAgIHN0YXJ0OiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyA4KSwKICAgICAgICBlbmQ6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDEyKQogICAgICB9OwogICAgICBjb25zdCBtZXRhVmFsdWUgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxNik7CiAgICAgIGNvbnN0IG1ldGFDaGFyID0gbWV0YVZhbHVlID8gU3RyaW5nLmZyb21DaGFyQ29kZShtZXRhVmFsdWUpIDogbnVsbDsKICAgICAgY29uc3Qgc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMjApOwogICAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDI0KTsKICAgICAgY29uc3QgeyByZWZJZFRvTmFtZSwgcmVmTmFtZVRvSWQgfSA9IHRoaXMuX3BhcnNlTmFtZUJ5dGVzKGJ5dGVzLnNsaWNlKG9mZnNldCArIDI4LCBvZmZzZXQgKyAyOCArIG5hbWVTZWN0aW9uTGVuZ3RoKSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgcmVmSWRUb05hbWUsCiAgICAgICAgcmVmTmFtZVRvSWQsCiAgICAgICAgc2tpcExpbmVzLAogICAgICAgIG1ldGFDaGFyLAogICAgICAgIGNvbHVtbk51bWJlcnMsCiAgICAgICAgZm9ybWF0LAogICAgICAgIGNvb3JkaW5hdGVUeXBlCiAgICAgIH07CiAgICB9CiAgICBfcGFyc2VOYW1lQnl0ZXMobmFtZXNCeXRlcykgewogICAgICBsZXQgY3VyclJlZklkID0gMDsKICAgICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwOwogICAgICBjb25zdCByZWZJZFRvTmFtZSA9IFtdOwogICAgICBjb25zdCByZWZOYW1lVG9JZCA9IHt9OwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBpZiAoIW5hbWVzQnl0ZXNbaV0pIHsKICAgICAgICAgIGlmIChjdXJyTmFtZVN0YXJ0IDwgaSkgewogICAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoInV0ZjgiLCBjdXJyTmFtZVN0YXJ0LCBpKTsKICAgICAgICAgICAgcmVmTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxKHJlZk5hbWUpOwogICAgICAgICAgICByZWZJZFRvTmFtZVtjdXJyUmVmSWRdID0gcmVmTmFtZTsKICAgICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjdXJyUmVmSWQgKz0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH07CiAgICB9CiAgICBhc3luYyBfcGFyc2Uob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgdW56aXAoYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWRGaWxlKG9wdHMpKTsKICAgICAgbGV0IGNzaVZlcnNpb247CiAgICAgIGlmIChieXRlcy5yZWFkVUludDMyTEUoMCkgPT09IENTSTFfTUFHSUMpIHsKICAgICAgICBjc2lWZXJzaW9uID0gMTsKICAgICAgfSBlbHNlIGlmIChieXRlcy5yZWFkVUludDMyTEUoMCkgPT09IENTSTJfTUFHSUMpIHsKICAgICAgICBjc2lWZXJzaW9uID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIENTSSBmaWxlIik7CiAgICAgIH0KICAgICAgdGhpcy5taW5TaGlmdCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDQpOwogICAgICB0aGlzLmRlcHRoID0gYnl0ZXMucmVhZEludDMyTEUoOCk7CiAgICAgIHRoaXMubWF4QmluTnVtYmVyID0gKCgxIDw8ICh0aGlzLmRlcHRoICsgMSkgKiAzKSAtIDEpIC8gNzsKICAgICAgY29uc3QgbWF4UmVmTGVuZ3RoID0gMiAqKiAodGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzKTsKICAgICAgY29uc3QgYXV4TGVuZ3RoID0gYnl0ZXMucmVhZEludDMyTEUoMTIpOwogICAgICBjb25zdCBhdXggPSBhdXhMZW5ndGggJiYgYXV4TGVuZ3RoID49IDMwID8gdGhpcy5wYXJzZUF1eERhdGEoYnl0ZXMsIDE2KSA6IHsKICAgICAgICByZWZJZFRvTmFtZTogW10sCiAgICAgICAgcmVmTmFtZVRvSWQ6IHt9LAogICAgICAgIG1ldGFDaGFyOiBudWxsLAogICAgICAgIGNvbHVtbk51bWJlcnM6IHsgcmVmOiAwLCBzdGFydDogMSwgZW5kOiAyIH0sCiAgICAgICAgY29vcmRpbmF0ZVR5cGU6ICJ6ZXJvLWJhc2VkLWhhbGYtb3BlbiIsCiAgICAgICAgZm9ybWF0OiAiZ2VuZXJpYyIKICAgICAgfTsKICAgICAgY29uc3QgcmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSgxNiArIGF1eExlbmd0aCk7CiAgICAgIGxldCBmaXJzdERhdGFMaW5lOwogICAgICBsZXQgY3Vyck9mZnNldCA9IDE2ICsgYXV4TGVuZ3RoICsgNDsKICAgICAgY29uc3QgaW5kaWNlcyA9IG5ldyBBcnJheShyZWZDb3VudCkuZmlsbCgwKS5tYXAoKCkgPT4gewogICAgICAgIGNvbnN0IGJpbkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCk7CiAgICAgICAgY3Vyck9mZnNldCArPSA0OwogICAgICAgIGNvbnN0IGJpbkluZGV4ID0ge307CiAgICAgICAgbGV0IHN0YXRzOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmluQ291bnQ7IGogKz0gMSkgewogICAgICAgICAgY29uc3QgYmluID0gYnl0ZXMucmVhZFVJbnQzMkxFKGN1cnJPZmZzZXQpOwogICAgICAgICAgaWYgKGJpbiA+IHRoaXMubWF4QmluTnVtYmVyKSB7CiAgICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCArIDQpOwogICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDQgKyA4ICsgNCArIDE2ICsgMTY7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBsb2Zmc2V0ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0ICsgNCk7CiAgICAgICAgICAgIGZpcnN0RGF0YUxpbmUgPSB0aGlzLl9maW5kRmlyc3REYXRhKGZpcnN0RGF0YUxpbmUsIGxvZmZzZXQpOwogICAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCArIDEyKTsKICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNjsKICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gbmV3IEFycmF5KGNodW5rQ291bnQpOwogICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkgewogICAgICAgICAgICAgIGNvbnN0IHUgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQpOwogICAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KTsKICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2OwogICAgICAgICAgICAgIGNodW5rc1trXSA9IG5ldyBDaHVuayh1LCB2LCBiaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJpbkluZGV4W2Jpbl0gPSBjaHVua3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IGJpbkluZGV4LCBzdGF0cyB9OwogICAgICB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICAuLi5hdXgsCiAgICAgICAgY3NpOiB0cnVlLAogICAgICAgIHJlZkNvdW50LAogICAgICAgIG1heEJsb2NrU2l6ZTogMSA8PCAxNiwKICAgICAgICBmaXJzdERhdGFMaW5lLAogICAgICAgIGNzaVZlcnNpb24sCiAgICAgICAgaW5kaWNlcywKICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCwKICAgICAgICBtYXhCaW5OdW1iZXI6IHRoaXMubWF4QmluTnVtYmVyLAogICAgICAgIG1heFJlZkxlbmd0aAogICAgICB9OwogICAgfQogICAgcGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIG9mZnNldCkgewogICAgICBjb25zdCBsaW5lQ291bnQgPSBsb25nVG9OdW1iZXIoaW1wb3J0X2xvbmczLmRlZmF1bHQuZnJvbUJ5dGVzTEUoYnl0ZXMuc2xpY2Uob2Zmc2V0ICsgMjgsIG9mZnNldCArIDM2KSwgdHJ1ZSkpOwogICAgICByZXR1cm4geyBsaW5lQ291bnQgfTsKICAgIH0KICAgIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZk5hbWUsIG1pbiwgbWF4LCBvcHRzID0ge30pIHsKICAgICAgaWYgKG1pbiA8IDApIHsKICAgICAgICBtaW4gPSAwOwogICAgICB9CiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cyk7CiAgICAgIGlmICghaW5kZXhEYXRhKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGNvbnN0IHJlZklkID0gaW5kZXhEYXRhLnJlZk5hbWVUb0lkW3JlZk5hbWVdOwogICAgICBjb25zdCBiYSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXTsKICAgICAgaWYgKCFiYSkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBjb25zdCBvdmVybGFwcGluZ0JpbnMgPSB0aGlzLnJlZzJiaW5zKG1pbiwgbWF4KTsKICAgICAgY29uc3QgY2h1bmtzID0gW107CiAgICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykgewogICAgICAgIGZvciAobGV0IGJpbiA9IHN0YXJ0OyBiaW4gPD0gZW5kOyBiaW4rKykgewogICAgICAgICAgaWYgKGJhLmJpbkluZGV4W2Jpbl0pIHsKICAgICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXTsKICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBiaW5DaHVua3MubGVuZ3RoOyArK2MpIHsKICAgICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3B0aW1pemVDaHVua3MoY2h1bmtzLCBuZXcgVmlydHVhbE9mZnNldCgwLCAwKSk7CiAgICB9CiAgICByZWcyYmlucyhiZWcsIGVuZCkgewogICAgICBiZWcgLT0gMTsKICAgICAgaWYgKGJlZyA8IDEpIHsKICAgICAgICBiZWcgPSAxOwogICAgICB9CiAgICAgIGlmIChlbmQgPiAyICoqIDUwKSB7CiAgICAgICAgZW5kID0gMiAqKiAzNDsKICAgICAgfQogICAgICBlbmQgLT0gMTsKICAgICAgbGV0IGwgPSAwOwogICAgICBsZXQgdCA9IDA7CiAgICAgIGxldCBzID0gdGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzOwogICAgICBjb25zdCBiaW5zID0gW107CiAgICAgIGZvciAoOyBsIDw9IHRoaXMuZGVwdGg7IHMgLT0gMywgdCArPSBsc2hpZnQoMSwgbCAqIDMpLCBsICs9IDEpIHsKICAgICAgICBjb25zdCBiID0gdCArIHJzaGlmdChiZWcsIHMpOwogICAgICAgIGNvbnN0IGUgPSB0ICsgcnNoaWZ0KGVuZCwgcyk7CiAgICAgICAgaWYgKGUgLSBiICsgYmlucy5sZW5ndGggPiB0aGlzLm1heEJpbk51bWJlcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdWVyeSAke2JlZ30tJHtlbmR9IGlzIHRvbyBsYXJnZSBmb3IgY3VycmVudCBiaW5uaW5nIHNjaGVtZSAoc2hpZnQgJHt0aGlzLm1pblNoaWZ0fSwgZGVwdGggJHt0aGlzLmRlcHRofSksIHRyeSBhIHNtYWxsZXIgcXVlcnkgb3IgYSBjb2Fyc2VyIGluZGV4IGJpbm5pbmcgc2NoZW1lYCk7CiAgICAgICAgfQogICAgICAgIGJpbnMucHVzaChbYiwgZV0pOwogICAgICB9CiAgICAgIHJldHVybiBiaW5zOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCt0YWJpeEAxLjUuMTEvbm9kZV9tb2R1bGVzL0BnbW9kL3RhYml4L2VzbS90YWJpeEluZGV4ZWRGaWxlLmpzCiAgdmFyIGRlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT09ICJ1bmRlZmluZWQiID8gbmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpIDogdm9pZCAwOwogIGZ1bmN0aW9uIHRpbWVvdXQodGltZSkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpKTsKICB9CiAgdmFyIFRhYml4SW5kZXhlZEZpbGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih7IHBhdGgsIGZpbGVoYW5kbGUsIHRiaVBhdGgsIHRiaUZpbGVoYW5kbGUsIGNzaVBhdGgsIGNzaUZpbGVoYW5kbGUsIHlpZWxkVGltZSA9IDUwMCwgY2h1bmtTaXplTGltaXQgPSA1ZTcsIHJlbmFtZVJlZlNlcXMgPSAobikgPT4gbiwgY2h1bmtDYWNoZVNpemUgPSA1ICogMiAqKiAyMCB9KSB7CiAgICAgIGlmIChmaWxlaGFuZGxlKSB7CiAgICAgICAgdGhpcy5maWxlaGFuZGxlID0gZmlsZWhhbmRsZTsKICAgICAgfSBlbHNlIGlmIChwYXRoKSB7CiAgICAgICAgdGhpcy5maWxlaGFuZGxlID0gbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChwYXRoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHByb3ZpZGUgZWl0aGVyIGZpbGVoYW5kbGUgb3IgcGF0aCIpOwogICAgICB9CiAgICAgIGlmICh0YmlGaWxlaGFuZGxlKSB7CiAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBUYWJpeEluZGV4KHsKICAgICAgICAgIGZpbGVoYW5kbGU6IHRiaUZpbGVoYW5kbGUsCiAgICAgICAgICByZW5hbWVSZWZTZXFzCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoY3NpRmlsZWhhbmRsZSkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgQ1NJKHsKICAgICAgICAgIGZpbGVoYW5kbGU6IGNzaUZpbGVoYW5kbGUsCiAgICAgICAgICByZW5hbWVSZWZTZXFzCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAodGJpUGF0aCkgewogICAgICAgIHRoaXMuaW5kZXggPSBuZXcgVGFiaXhJbmRleCh7CiAgICAgICAgICBmaWxlaGFuZGxlOiBuZXcgaW1wb3J0X2xvY2FsRmlsZS5kZWZhdWx0KHRiaVBhdGgpLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGNzaVBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IENTSSh7CiAgICAgICAgICBmaWxlaGFuZGxlOiBuZXcgaW1wb3J0X2xvY2FsRmlsZS5kZWZhdWx0KGNzaVBhdGgpLAogICAgICAgICAgcmVuYW1lUmVmU2VxcwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHBhdGgpIHsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3IFRhYml4SW5kZXgoewogICAgICAgICAgZmlsZWhhbmRsZTogbmV3IGltcG9ydF9sb2NhbEZpbGUuZGVmYXVsdChgJHtwYXRofS50YmlgKSwKICAgICAgICAgIHJlbmFtZVJlZlNlcXMKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHByb3ZpZGUgb25lIG9mIHRiaUZpbGVoYW5kbGUsIHRiaVBhdGgsIGNzaUZpbGVoYW5kbGUsIG9yIGNzaVBhdGgiKTsKICAgICAgfQogICAgICB0aGlzLmNodW5rU2l6ZUxpbWl0ID0gY2h1bmtTaXplTGltaXQ7CiAgICAgIHRoaXMucmVuYW1lUmVmU2VxID0gcmVuYW1lUmVmU2VxczsKICAgICAgdGhpcy55aWVsZFRpbWUgPSB5aWVsZFRpbWU7CiAgICAgIHRoaXMuY2h1bmtDYWNoZSA9IG5ldyBpbXBvcnRfYWJvcnRhYmxlX3Byb21pc2VfY2FjaGUuZGVmYXVsdCh7CiAgICAgICAgY2FjaGU6IG5ldyBpbXBvcnRfcXVpY2tfbHJ1LmRlZmF1bHQoeyBtYXhTaXplOiBNYXRoLmZsb29yKGNodW5rQ2FjaGVTaXplIC8gKDEgPDwgMTYpKSB9KSwKICAgICAgICBmaWxsOiAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnJlYWRDaHVuayhhcmdzLCB7IHNpZ25hbCB9KQogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGdldExpbmVzKHJlZk5hbWUsIHN0YXJ0LCBlbmQsIG9wdHMpIHsKICAgICAgbGV0IHNpZ25hbDsKICAgICAgbGV0IG9wdGlvbnMgPSB7fTsKICAgICAgbGV0IGNhbGxiYWNrOwogICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigibGluZSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIik7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY2FsbGJhY2sgPSBvcHRzOwogICAgICB9IGVsc2UgewogICAgICAgIG9wdGlvbnMgPSBvcHRzOwogICAgICAgIGNhbGxiYWNrID0gb3B0cy5saW5lQ2FsbGJhY2s7CiAgICAgIH0KICAgICAgaWYgKHJlZk5hbWUgPT09IHZvaWQgMCkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIm11c3QgcHJvdmlkZSBhIHJlZmVyZW5jZSBzZXF1ZW5jZSBuYW1lIik7CiAgICAgIH0KICAgICAgaWYgKCFjYWxsYmFjaykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImxpbmUgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCIpOwogICAgICB9CiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy5pbmRleC5nZXRNZXRhZGF0YShvcHRpb25zKTsKICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpOwogICAgICBpZiAoIXN0YXJ0KSB7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICB9CiAgICAgIGlmICghZW5kKSB7CiAgICAgICAgZW5kID0gbWV0YWRhdGEubWF4UmVmTGVuZ3RoOwogICAgICB9CiAgICAgIGlmICghKHN0YXJ0IDw9IGVuZCkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN0YXJ0IGFuZCBlbmQgY29vcmRpbmF0ZXMuIHN0YXJ0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGVuZCIpOwogICAgICB9CiAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGNodW5rcyA9IGF3YWl0IHRoaXMuaW5kZXguYmxvY2tzRm9yUmFuZ2UocmVmTmFtZSwgc3RhcnQsIGVuZCwgb3B0aW9ucyk7CiAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBjb25zdCBzaXplID0gY2h1bmtzW2ldLmZldGNoZWRTaXplKCk7CiAgICAgICAgaWYgKHNpemUgPiB0aGlzLmNodW5rU2l6ZUxpbWl0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvbyBtdWNoIGRhdGEuIENodW5rIHNpemUgJHtzaXplLnRvTG9jYWxlU3RyaW5nKCl9IGJ5dGVzIGV4Y2VlZHMgY2h1bmtTaXplTGltaXQgb2YgJHt0aGlzLmNodW5rU2l6ZUxpbWl0LnRvTG9jYWxlU3RyaW5nKCl9LmApOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgbGFzdCA9IERhdGUubm93KCk7CiAgICAgIGZvciAobGV0IGNodW5rTnVtID0gMDsgY2h1bmtOdW0gPCBjaHVua3MubGVuZ3RoOyBjaHVua051bSArPSAxKSB7CiAgICAgICAgbGV0IHByZXZpb3VzU3RhcnRDb29yZGluYXRlOwogICAgICAgIGNvbnN0IGMgPSBjaHVua3NbY2h1bmtOdW1dOwogICAgICAgIGNvbnN0IHsgYnVmZmVyLCBjcG9zaXRpb25zLCBkcG9zaXRpb25zIH0gPSBhd2FpdCB0aGlzLmNodW5rQ2FjaGUuZ2V0KGMudG9TdHJpbmcoKSwgYyk7CiAgICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpOwogICAgICAgIGxldCBibG9ja1N0YXJ0ID0gMDsKICAgICAgICBsZXQgcG9zID0gMDsKICAgICAgICB3aGlsZSAoYmxvY2tTdGFydCA8IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IG4gPSBidWZmZXIuaW5kZXhPZigiXG4iLCBibG9ja1N0YXJ0KTsKICAgICAgICAgIGlmIChuID09PSAtMSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGIgPSBidWZmZXIuc2xpY2UoYmxvY2tTdGFydCwgbik7CiAgICAgICAgICBjb25zdCBsaW5lID0gKGRlY29kZXIgPT09IG51bGwgfHwgZGVjb2RlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVjb2Rlci5kZWNvZGUoYikpIHx8IGIudG9TdHJpbmcoKTsKICAgICAgICAgIGlmIChkcG9zaXRpb25zKSB7CiAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YXJ0ICsgYy5taW52LmRhdGFQb3NpdGlvbiA+PSBkcG9zaXRpb25zW3BvcysrXSkgewogICAgICAgICAgICB9CiAgICAgICAgICAgIHBvcy0tOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgeyBzdGFydENvb3JkaW5hdGUsIG92ZXJsYXBzIH0gPSB0aGlzLmNoZWNrTGluZShtZXRhZGF0YSwgcmVmTmFtZSwgc3RhcnQsIGVuZCwgbGluZSk7CiAgICAgICAgICBpZiAocHJldmlvdXNTdGFydENvb3JkaW5hdGUgIT09IHZvaWQgMCAmJiBzdGFydENvb3JkaW5hdGUgIT09IHZvaWQgMCAmJiBwcmV2aW91c1N0YXJ0Q29vcmRpbmF0ZSA+IHN0YXJ0Q29vcmRpbmF0ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExpbmVzIG5vdCBzb3J0ZWQgYnkgc3RhcnQgY29vcmRpbmF0ZSAoJHtwcmV2aW91c1N0YXJ0Q29vcmRpbmF0ZX0gPiAke3N0YXJ0Q29vcmRpbmF0ZX0pLCB0aGlzIGZpbGUgaXMgbm90IHVzYWJsZSB3aXRoIFRhYml4LmApOwogICAgICAgICAgfQogICAgICAgICAgcHJldmlvdXNTdGFydENvb3JkaW5hdGUgPSBzdGFydENvb3JkaW5hdGU7CiAgICAgICAgICBpZiAob3ZlcmxhcHMpIHsKICAgICAgICAgICAgY2FsbGJhY2sobGluZS50cmltKCksIGNwb3NpdGlvbnNbcG9zXSAqICgxIDw8IDgpICsgKGJsb2NrU3RhcnQgLSBkcG9zaXRpb25zW3Bvc10pICsgYy5taW52LmRhdGFQb3NpdGlvbiArIDEpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGFydENvb3JkaW5hdGUgIT09IHZvaWQgMCAmJiBzdGFydENvb3JkaW5hdGUgPj0gZW5kKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnlpZWxkVGltZSAmJiBsYXN0IC0gRGF0ZS5ub3coKSA+IHRoaXMueWllbGRUaW1lKSB7CiAgICAgICAgICAgIGxhc3QgPSBEYXRlLm5vdygpOwogICAgICAgICAgICBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbCk7CiAgICAgICAgICAgIGF3YWl0IHRpbWVvdXQoMSk7CiAgICAgICAgICB9CiAgICAgICAgICBibG9ja1N0YXJ0ID0gbiArIDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3luYyBnZXRNZXRhZGF0YShvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0TWV0YWRhdGEob3B0cyk7CiAgICB9CiAgICBhc3luYyBnZXRIZWFkZXJCdWZmZXIob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZmlyc3REYXRhTGluZSwgbWV0YUNoYXIsIG1heEJsb2NrU2l6ZSB9ID0gYXdhaXQgdGhpcy5nZXRNZXRhZGF0YShvcHRzKTsKICAgICAgY2hlY2tBYm9ydFNpZ25hbChvcHRzLnNpZ25hbCk7CiAgICAgIGNvbnN0IG1heEZldGNoID0gKChmaXJzdERhdGFMaW5lID09PSBudWxsIHx8IGZpcnN0RGF0YUxpbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RGF0YUxpbmUuYmxvY2tQb3NpdGlvbikgfHwgMCkgKyBtYXhCbG9ja1NpemU7CiAgICAgIGxldCBieXRlcyA9IGF3YWl0IHRoaXMuX3JlYWRSZWdpb24oMCwgbWF4RmV0Y2gsIG9wdHMpOwogICAgICBjaGVja0Fib3J0U2lnbmFsKG9wdHMuc2lnbmFsKTsKICAgICAgdHJ5IHsKICAgICAgICBieXRlcyA9IGF3YWl0IHVuemlwKGJ5dGVzKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBkZWNvbXByZXNzaW5nIGJsb2NrICR7ZS5jb2RlfSBhdCAwIChsZW5ndGggJHttYXhGZXRjaH0pICR7ZX1gKTsKICAgICAgfQogICAgICBpZiAobWV0YUNoYXIpIHsKICAgICAgICBsZXQgbGFzdE5ld2xpbmUgPSAtMTsKICAgICAgICBjb25zdCBuZXdsaW5lQnl0ZSA9ICJcbiIuY2hhckNvZGVBdCgwKTsKICAgICAgICBjb25zdCBtZXRhQnl0ZSA9IG1ldGFDaGFyLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKGkgPT09IGxhc3ROZXdsaW5lICsgMSAmJiBieXRlc1tpXSAhPT0gbWV0YUJ5dGUpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYnl0ZXNbaV0gPT09IG5ld2xpbmVCeXRlKSB7CiAgICAgICAgICAgIGxhc3ROZXdsaW5lID0gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnl0ZXMgPSBieXRlcy5zbGljZSgwLCBsYXN0TmV3bGluZSArIDEpOwogICAgICB9CiAgICAgIHJldHVybiBieXRlczsKICAgIH0KICAgIGFzeW5jIGdldEhlYWRlcihvcHRzID0ge30pIHsKICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCB0aGlzLmdldEhlYWRlckJ1ZmZlcihvcHRzKTsKICAgICAgcmV0dXJuIGJ5dGVzLnRvU3RyaW5nKCJ1dGY4Iik7CiAgICB9CiAgICBhc3luYyBnZXRSZWZlcmVuY2VTZXF1ZW5jZU5hbWVzKG9wdHMgPSB7fSkgewogICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuZ2V0TWV0YWRhdGEob3B0cyk7CiAgICAgIHJldHVybiBtZXRhZGF0YS5yZWZJZFRvTmFtZTsKICAgIH0KICAgIGNoZWNrTGluZShtZXRhZGF0YSwgcmVnaW9uUmVmTmFtZSwgcmVnaW9uU3RhcnQsIHJlZ2lvbkVuZCwgbGluZSkgewogICAgICBjb25zdCB7IGNvbHVtbk51bWJlcnMsIG1ldGFDaGFyLCBjb29yZGluYXRlVHlwZSwgZm9ybWF0IH0gPSBtZXRhZGF0YTsKICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBtZXRhQ2hhcikgewogICAgICAgIHJldHVybiB7IG92ZXJsYXBzOiBmYWxzZSB9OwogICAgICB9CiAgICAgIGxldCB7IHJlZiwgc3RhcnQsIGVuZCB9ID0gY29sdW1uTnVtYmVyczsKICAgICAgaWYgKCFyZWYpIHsKICAgICAgICByZWYgPSAwOwogICAgICB9CiAgICAgIGlmICghc3RhcnQpIHsKICAgICAgICBzdGFydCA9IDA7CiAgICAgIH0KICAgICAgaWYgKCFlbmQpIHsKICAgICAgICBlbmQgPSAwOwogICAgICB9CiAgICAgIGlmIChmb3JtYXQgPT09ICJWQ0YiKSB7CiAgICAgICAgZW5kID0gODsKICAgICAgfQogICAgICBjb25zdCBtYXhDb2x1bW4gPSBNYXRoLm1heChyZWYsIHN0YXJ0LCBlbmQpOwogICAgICBsZXQgY3VycmVudENvbHVtbk51bWJlciA9IDE7CiAgICAgIGxldCBjdXJyZW50Q29sdW1uU3RhcnQgPSAwOwogICAgICBsZXQgcmVmU2VxID0gIiI7CiAgICAgIGxldCBzdGFydENvb3JkaW5hdGUgPSAtSW5maW5pdHk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggKyAxOyBpICs9IDEpIHsKICAgICAgICBpZiAobGluZVtpXSA9PT0gIgkiIHx8IGkgPT09IGxpbmUubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoY3VycmVudENvbHVtbk51bWJlciA9PT0gcmVmKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlbmFtZVJlZlNlcShsaW5lLnNsaWNlKGN1cnJlbnRDb2x1bW5TdGFydCwgaSkpICE9PSByZWdpb25SZWZOYW1lKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENvbHVtbk51bWJlciA9PT0gc3RhcnQpIHsKICAgICAgICAgICAgc3RhcnRDb29yZGluYXRlID0gcGFyc2VJbnQobGluZS5zbGljZShjdXJyZW50Q29sdW1uU3RhcnQsIGkpLCAxMCk7CiAgICAgICAgICAgIGlmIChjb29yZGluYXRlVHlwZSA9PT0gIjEtYmFzZWQtY2xvc2VkIikgewogICAgICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZSAtPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGFydENvb3JkaW5hdGUgPj0gcmVnaW9uRW5kKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRDb29yZGluYXRlLCBvdmVybGFwczogZmFsc2UgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kID09PSAwIHx8IGVuZCA9PT0gc3RhcnQpIHsKICAgICAgICAgICAgICBpZiAoc3RhcnRDb29yZGluYXRlICsgMSA8PSByZWdpb25TdGFydCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRDb29yZGluYXRlLCBvdmVybGFwczogZmFsc2UgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAiVkNGIiAmJiBjdXJyZW50Q29sdW1uTnVtYmVyID09PSA0KSB7CiAgICAgICAgICAgIHJlZlNlcSA9IGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENvbHVtbk51bWJlciA9PT0gZW5kKSB7CiAgICAgICAgICAgIGxldCBlbmRDb29yZGluYXRlOwogICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAiVkNGIikgewogICAgICAgICAgICAgIGVuZENvb3JkaW5hdGUgPSB0aGlzLl9nZXRWY2ZFbmQoc3RhcnRDb29yZGluYXRlLCByZWZTZXEsIGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZW5kQ29vcmRpbmF0ZSA9IHBhcnNlSW50KGxpbmUuc2xpY2UoY3VycmVudENvbHVtblN0YXJ0LCBpKSwgMTApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChlbmRDb29yZGluYXRlIDw9IHJlZ2lvblN0YXJ0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgb3ZlcmxhcHM6IGZhbHNlIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGN1cnJlbnRDb2x1bW5TdGFydCA9IGkgKyAxOwogICAgICAgICAgY3VycmVudENvbHVtbk51bWJlciArPSAxOwogICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW5OdW1iZXIgPiBtYXhDb2x1bW4pIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHN0YXJ0Q29vcmRpbmF0ZSwgb3ZlcmxhcHM6IHRydWUgfTsKICAgIH0KICAgIF9nZXRWY2ZFbmQoc3RhcnRDb29yZGluYXRlLCByZWZTZXEsIGluZm8pIHsKICAgICAgbGV0IGVuZENvb3JkaW5hdGUgPSBzdGFydENvb3JkaW5hdGUgKyByZWZTZXEubGVuZ3RoOwogICAgICBjb25zdCBpc1RSQSA9IGluZm8uaW5kZXhPZigiU1ZUWVBFPVRSQSIpICE9PSAtMTsKICAgICAgaWYgKGluZm9bMF0gIT09ICIuIiAmJiAhaXNUUkEpIHsKICAgICAgICBsZXQgcHJldkNoYXIgPSAiOyI7CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmZvLmxlbmd0aDsgaiArPSAxKSB7CiAgICAgICAgICBpZiAocHJldkNoYXIgPT09ICI7IiAmJiBpbmZvLnNsaWNlKGosIGogKyA0KSA9PT0gIkVORD0iKSB7CiAgICAgICAgICAgIGxldCB2YWx1ZUVuZCA9IGluZm8uaW5kZXhPZigiOyIsIGopOwogICAgICAgICAgICBpZiAodmFsdWVFbmQgPT09IC0xKSB7CiAgICAgICAgICAgICAgdmFsdWVFbmQgPSBpbmZvLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRDb29yZGluYXRlID0gcGFyc2VJbnQoaW5mby5zbGljZShqICsgNCwgdmFsdWVFbmQpLCAxMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgcHJldkNoYXIgPSBpbmZvW2pdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc1RSQSkgewogICAgICAgIHJldHVybiBzdGFydENvb3JkaW5hdGUgKyAxOwogICAgICB9CiAgICAgIHJldHVybiBlbmRDb29yZGluYXRlOwogICAgfQogICAgYXN5bmMgbGluZUNvdW50KHJlZk5hbWUsIG9wdHMgPSB7fSkgewogICAgICByZXR1cm4gdGhpcy5pbmRleC5saW5lQ291bnQocmVmTmFtZSwgb3B0cyk7CiAgICB9CiAgICBhc3luYyBfcmVhZFJlZ2lvbihwb3MsIHNpemUsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBiID0gaW1wb3J0X2J1ZmZlcjcuQnVmZmVyLmFsbG9jKHNpemUpOwogICAgICBjb25zdCB7IGJ5dGVzUmVhZCwgYnVmZmVyIH0gPSBhd2FpdCB0aGlzLmZpbGVoYW5kbGUucmVhZChiLCAwLCBzaXplLCBwb3MsIG9wdHMpOwogICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKDAsIGJ5dGVzUmVhZCk7CiAgICB9CiAgICBhc3luYyByZWFkQ2h1bmsoYywgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9yZWFkUmVnaW9uKGMubWludi5ibG9ja1Bvc2l0aW9uLCBjLmZldGNoZWRTaXplKCksIG9wdHMpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bnppcENodW5rU2xpY2UoZGF0YSwgYyk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVycm9yIGRlY29tcHJlc3NpbmcgYyAke2MudG9TdHJpbmcoKX0gJHtlfWApOwogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbG9kYXNoLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gIm9iamVjdCIgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7CiAgdmFyIGZyZWVHbG9iYWxfZGVmYXVsdCA9IGZyZWVHbG9iYWw7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzCiAgdmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gIm9iamVjdCIgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7CiAgdmFyIHJvb3QgPSBmcmVlR2xvYmFsX2RlZmF1bHQgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsKICB2YXIgcm9vdF9kZWZhdWx0ID0gcm9vdDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcwogIHZhciBTeW1ib2wyID0gcm9vdF9kZWZhdWx0LlN5bWJvbDsKICB2YXIgU3ltYm9sX2RlZmF1bHQgPSBTeW1ib2wyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7CiAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7CiAgdmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sX2RlZmF1bHQgPyBTeW1ib2xfZGVmYXVsdC50b1N0cmluZ1RhZyA6IHZvaWQgMDsKICBmdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHsKICAgIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSwgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddOwogICAgdHJ5IHsKICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdm9pZCAwOwogICAgICB2YXIgdW5tYXNrZWQgPSB0cnVlOwogICAgfSBjYXRjaCAoZSkgewogICAgfQogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpOwogICAgaWYgKHVubWFza2VkKSB7CiAgICAgIGlmIChpc093bikgewogICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZzsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgZ2V0UmF3VGFnX2RlZmF1bHQgPSBnZXRSYXdUYWc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgb2JqZWN0UHJvdG8yID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcyID0gb2JqZWN0UHJvdG8yLnRvU3RyaW5nOwogIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7CiAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUpOwogIH0KICB2YXIgb2JqZWN0VG9TdHJpbmdfZGVmYXVsdCA9IG9iamVjdFRvU3RyaW5nOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcwogIHZhciBudWxsVGFnID0gIltvYmplY3QgTnVsbF0iOwogIHZhciB1bmRlZmluZWRUYWcgPSAiW29iamVjdCBVbmRlZmluZWRdIjsKICB2YXIgc3ltVG9TdHJpbmdUYWcyID0gU3ltYm9sX2RlZmF1bHQgPyBTeW1ib2xfZGVmYXVsdC50b1N0cmluZ1RhZyA6IHZvaWQgMDsKICBmdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gdmFsdWUgPT09IHZvaWQgMCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7CiAgICB9CiAgICByZXR1cm4gc3ltVG9TdHJpbmdUYWcyICYmIHN5bVRvU3RyaW5nVGFnMiBpbiBPYmplY3QodmFsdWUpID8gZ2V0UmF3VGFnX2RlZmF1bHQodmFsdWUpIDogb2JqZWN0VG9TdHJpbmdfZGVmYXVsdCh2YWx1ZSk7CiAgfQogIHZhciBiYXNlR2V0VGFnX2RlZmF1bHQgPSBiYXNlR2V0VGFnOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gIm9iamVjdCI7CiAgfQogIHZhciBpc09iamVjdExpa2VfZGVmYXVsdCA9IGlzT2JqZWN0TGlrZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMKICB2YXIgc3ltYm9sVGFnID0gIltvYmplY3QgU3ltYm9sXSI7CiAgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHsKICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gInN5bWJvbCIgfHwgaXNPYmplY3RMaWtlX2RlZmF1bHQodmFsdWUpICYmIGJhc2VHZXRUYWdfZGVmYXVsdCh2YWx1ZSkgPT0gc3ltYm9sVGFnOwogIH0KICB2YXIgaXNTeW1ib2xfZGVmYXVsdCA9IGlzU3ltYm9sOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7CiAgICB2YXIgaW5kZXggPSAtMSwgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGFycmF5TWFwX2RlZmF1bHQgPSBhcnJheU1hcDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CiAgdmFyIGlzQXJyYXlfZGVmYXVsdCA9IGlzQXJyYXk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvSW50ZWdlci5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9GaW5pdGUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvTnVtYmVyLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRyaW0uanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190cmltbWVkRW5kSW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9ccy87CiAgZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykgewogICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDsKICAgIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkgewogICAgfQogICAgcmV0dXJuIGluZGV4OwogIH0KICB2YXIgdHJpbW1lZEVuZEluZGV4X2RlZmF1bHQgPSB0cmltbWVkRW5kSW5kZXg7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVHJpbS5qcwogIHZhciByZVRyaW1TdGFydCA9IC9eXHMrLzsKICBmdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4X2RlZmF1bHQoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICIiKSA6IHN0cmluZzsKICB9CiAgdmFyIGJhc2VUcmltX2RlZmF1bHQgPSBiYXNlVHJpbTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gIm9iamVjdCIgfHwgdHlwZSA9PSAiZnVuY3Rpb24iKTsKICB9CiAgdmFyIGlzT2JqZWN0X2RlZmF1bHQgPSBpc09iamVjdDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9OdW1iZXIuanMKICB2YXIgTkFOID0gMCAvIDA7CiAgdmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTsKICB2YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTsKICB2YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTsKICB2YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7CiAgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gIm51bWJlciIpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgaWYgKGlzU3ltYm9sX2RlZmF1bHQodmFsdWUpKSB7CiAgICAgIHJldHVybiBOQU47CiAgICB9CiAgICBpZiAoaXNPYmplY3RfZGVmYXVsdCh2YWx1ZSkpIHsKICAgICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gImZ1bmN0aW9uIiA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlOwogICAgICB2YWx1ZSA9IGlzT2JqZWN0X2RlZmF1bHQob3RoZXIpID8gb3RoZXIgKyAiIiA6IG90aGVyOwogICAgfQogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAic3RyaW5nIikgewogICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTsKICAgIH0KICAgIHZhbHVlID0gYmFzZVRyaW1fZGVmYXVsdCh2YWx1ZSk7CiAgICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpOwogICAgcmV0dXJuIGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOCkgOiByZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlOwogIH0KICB2YXIgdG9OdW1iZXJfZGVmYXVsdCA9IHRvTnVtYmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0Zpbml0ZS5qcwogIHZhciBJTkZJTklUWSA9IDEgLyAwOwogIHZhciBNQVhfSU5URUdFUiA9IDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjsKICBmdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkgewogICAgaWYgKCF2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7CiAgICB9CiAgICB2YWx1ZSA9IHRvTnVtYmVyX2RlZmF1bHQodmFsdWUpOwogICAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7CiAgICAgIHZhciBzaWduID0gdmFsdWUgPCAwID8gLTEgOiAxOwogICAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSOwogICAgfQogICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDsKICB9CiAgdmFyIHRvRmluaXRlX2RlZmF1bHQgPSB0b0Zpbml0ZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzCiAgZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7CiAgICB2YXIgcmVzdWx0ID0gdG9GaW5pdGVfZGVmYXVsdCh2YWx1ZSksIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7CiAgICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyByZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQgOiAwOwogIH0KICB2YXIgdG9JbnRlZ2VyX2RlZmF1bHQgPSB0b0ludGVnZXI7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGFzeW5jVGFnID0gIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iOwogIHZhciBmdW5jVGFnID0gIltvYmplY3QgRnVuY3Rpb25dIjsKICB2YXIgZ2VuVGFnID0gIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIjsKICB2YXIgcHJveHlUYWcgPSAiW29iamVjdCBQcm94eV0iOwogIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHsKICAgIGlmICghaXNPYmplY3RfZGVmYXVsdCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHRhZyA9IGJhc2VHZXRUYWdfZGVmYXVsdCh2YWx1ZSk7CiAgICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnOwogIH0KICB2YXIgaXNGdW5jdGlvbl9kZWZhdWx0ID0gaXNGdW5jdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlBcnJheS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkgewogICAgdmFyIGluZGV4ID0gLTEsIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CiAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07CiAgICB9CiAgICByZXR1cm4gYXJyYXk7CiAgfQogIHZhciBjb3B5QXJyYXlfZGVmYXVsdCA9IGNvcHlBcnJheTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSW5kZXguanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxOwogIHZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxkKikkLzsKICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoOwogICAgcmV0dXJuICEhbGVuZ3RoICYmICh0eXBlID09ICJudW1iZXIiIHx8IHR5cGUgIT0gInN5bWJvbCIgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpICYmICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTsKICB9CiAgdmFyIGlzSW5kZXhfZGVmYXVsdCA9IGlzSW5kZXg7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikgewogICAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyOwogIH0KICB2YXIgZXFfZGVmYXVsdCA9IGVxOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgTUFYX1NBRkVfSU5URUdFUjIgPSA5MDA3MTk5MjU0NzQwOTkxOwogIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7CiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICJudW1iZXIiICYmIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjI7CiAgfQogIHZhciBpc0xlbmd0aF9kZWZhdWx0ID0gaXNMZW5ndGg7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzCiAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoX2RlZmF1bHQodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbl9kZWZhdWx0KHZhbHVlKTsKICB9CiAgdmFyIGlzQXJyYXlMaWtlX2RlZmF1bHQgPSBpc0FycmF5TGlrZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzCiAgZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHsKICAgIGlmICghaXNPYmplY3RfZGVmYXVsdChvYmplY3QpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciB0eXBlID0gdHlwZW9mIGluZGV4OwogICAgaWYgKHR5cGUgPT0gIm51bWJlciIgPyBpc0FycmF5TGlrZV9kZWZhdWx0KG9iamVjdCkgJiYgaXNJbmRleF9kZWZhdWx0KGluZGV4LCBvYmplY3QubGVuZ3RoKSA6IHR5cGUgPT0gInN0cmluZyIgJiYgaW5kZXggaW4gb2JqZWN0KSB7CiAgICAgIHJldHVybiBlcV9kZWZhdWx0KG9iamVjdFtpbmRleF0sIHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIGlzSXRlcmF0ZWVDYWxsX2RlZmF1bHQgPSBpc0l0ZXJhdGVlQ2FsbDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBvYmplY3RQcm90bzMgPSBPYmplY3QucHJvdG90eXBlOwogIGZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7CiAgICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLCBwcm90byA9IHR5cGVvZiBDdG9yID09ICJmdW5jdGlvbiIgJiYgQ3Rvci5wcm90b3R5cGUgfHwgb2JqZWN0UHJvdG8zOwogICAgcmV0dXJuIHZhbHVlID09PSBwcm90bzsKICB9CiAgdmFyIGlzUHJvdG90eXBlX2RlZmF1bHQgPSBpc1Byb3RvdHlwZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7CiAgICB2YXIgaW5kZXggPSAtMSwgcmVzdWx0ID0gQXJyYXkobik7CiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHsKICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBiYXNlVGltZXNfZGVmYXVsdCA9IGJhc2VUaW1lczsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGFyZ3NUYWcgPSAiW29iamVjdCBBcmd1bWVudHNdIjsKICBmdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKSA9PSBhcmdzVGFnOwogIH0KICB2YXIgYmFzZUlzQXJndW1lbnRzX2RlZmF1bHQgPSBiYXNlSXNBcmd1bWVudHM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzCiAgdmFyIG9iamVjdFByb3RvNCA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIGhhc093blByb3BlcnR5MiA9IG9iamVjdFByb3RvNC5oYXNPd25Qcm9wZXJ0eTsKICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90bzQucHJvcGVydHlJc0VudW1lcmFibGU7CiAgdmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzX2RlZmF1bHQoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gYXJndW1lbnRzOwogIH0oKSkgPyBiYXNlSXNBcmd1bWVudHNfZGVmYXVsdCA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gaXNPYmplY3RMaWtlX2RlZmF1bHQodmFsdWUpICYmIGhhc093blByb3BlcnR5Mi5jYWxsKHZhbHVlLCAiY2FsbGVlIikgJiYgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICJjYWxsZWUiKTsKICB9OwogIHZhciBpc0FyZ3VtZW50c19kZWZhdWx0ID0gaXNBcmd1bWVudHM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gc3R1YkZhbHNlKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc3R1YkZhbHNlX2RlZmF1bHQgPSBzdHViRmFsc2U7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzCiAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogIHZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CiAgdmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7CiAgdmFyIEJ1ZmZlcjkgPSBtb2R1bGVFeHBvcnRzID8gcm9vdF9kZWZhdWx0LkJ1ZmZlciA6IHZvaWQgMDsKICB2YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXI5ID8gQnVmZmVyOS5pc0J1ZmZlciA6IHZvaWQgMDsKICB2YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2VfZGVmYXVsdDsKICB2YXIgaXNCdWZmZXJfZGVmYXVsdCA9IGlzQnVmZmVyOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIHZhciBhcmdzVGFnMiA9ICJbb2JqZWN0IEFyZ3VtZW50c10iOwogIHZhciBhcnJheVRhZyA9ICJbb2JqZWN0IEFycmF5XSI7CiAgdmFyIGJvb2xUYWcgPSAiW29iamVjdCBCb29sZWFuXSI7CiAgdmFyIGRhdGVUYWcgPSAiW29iamVjdCBEYXRlXSI7CiAgdmFyIGVycm9yVGFnID0gIltvYmplY3QgRXJyb3JdIjsKICB2YXIgZnVuY1RhZzIgPSAiW29iamVjdCBGdW5jdGlvbl0iOwogIHZhciBtYXBUYWcgPSAiW29iamVjdCBNYXBdIjsKICB2YXIgbnVtYmVyVGFnID0gIltvYmplY3QgTnVtYmVyXSI7CiAgdmFyIG9iamVjdFRhZyA9ICJbb2JqZWN0IE9iamVjdF0iOwogIHZhciByZWdleHBUYWcgPSAiW29iamVjdCBSZWdFeHBdIjsKICB2YXIgc2V0VGFnID0gIltvYmplY3QgU2V0XSI7CiAgdmFyIHN0cmluZ1RhZyA9ICJbb2JqZWN0IFN0cmluZ10iOwogIHZhciB3ZWFrTWFwVGFnID0gIltvYmplY3QgV2Vha01hcF0iOwogIHZhciBhcnJheUJ1ZmZlclRhZyA9ICJbb2JqZWN0IEFycmF5QnVmZmVyXSI7CiAgdmFyIGRhdGFWaWV3VGFnID0gIltvYmplY3QgRGF0YVZpZXddIjsKICB2YXIgZmxvYXQzMlRhZyA9ICJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOwogIHZhciBmbG9hdDY0VGFnID0gIltvYmplY3QgRmxvYXQ2NEFycmF5XSI7CiAgdmFyIGludDhUYWcgPSAiW29iamVjdCBJbnQ4QXJyYXldIjsKICB2YXIgaW50MTZUYWcgPSAiW29iamVjdCBJbnQxNkFycmF5XSI7CiAgdmFyIGludDMyVGFnID0gIltvYmplY3QgSW50MzJBcnJheV0iOwogIHZhciB1aW50OFRhZyA9ICJbb2JqZWN0IFVpbnQ4QXJyYXldIjsKICB2YXIgdWludDhDbGFtcGVkVGFnID0gIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjsKICB2YXIgdWludDE2VGFnID0gIltvYmplY3QgVWludDE2QXJyYXldIjsKICB2YXIgdWludDMyVGFnID0gIltvYmplY3QgVWludDMyQXJyYXldIjsKICB2YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTsKICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlOwogIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWcyXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPSB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnMl0gPSB0eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID0gdHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPSB0eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlOwogIGZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdExpa2VfZGVmYXVsdCh2YWx1ZSkgJiYgaXNMZW5ndGhfZGVmYXVsdCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZ19kZWZhdWx0KHZhbHVlKV07CiAgfQogIHZhciBiYXNlSXNUeXBlZEFycmF5X2RlZmF1bHQgPSBiYXNlSXNUeXBlZEFycmF5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwogIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIGZ1bmModmFsdWUpOwogICAgfTsKICB9CiAgdmFyIGJhc2VVbmFyeV9kZWZhdWx0ID0gYmFzZVVuYXJ5OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGZyZWVFeHBvcnRzMiA9IHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0czsKICB2YXIgZnJlZU1vZHVsZTIgPSBmcmVlRXhwb3J0czIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CiAgdmFyIG1vZHVsZUV4cG9ydHMyID0gZnJlZU1vZHVsZTIgJiYgZnJlZU1vZHVsZTIuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHMyOwogIHZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMyICYmIGZyZWVHbG9iYWxfZGVmYXVsdC5wcm9jZXNzOwogIHZhciBub2RlVXRpbCA9IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZTIgJiYgZnJlZU1vZHVsZTIucmVxdWlyZSAmJiBmcmVlTW9kdWxlMi5yZXF1aXJlKCJ1dGlsIikudHlwZXM7CiAgICAgIGlmICh0eXBlcykgewogICAgICAgIHJldHVybiB0eXBlczsKICAgICAgfQogICAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCJ1dGlsIik7CiAgICB9IGNhdGNoIChlKSB7CiAgICB9CiAgfSgpOwogIHZhciBub2RlVXRpbF9kZWZhdWx0ID0gbm9kZVV0aWw7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcwogIHZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWxfZGVmYXVsdCAmJiBub2RlVXRpbF9kZWZhdWx0LmlzVHlwZWRBcnJheTsKICB2YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeV9kZWZhdWx0KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheV9kZWZhdWx0OwogIHZhciBpc1R5cGVkQXJyYXlfZGVmYXVsdCA9IGlzVHlwZWRBcnJheTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMKICB2YXIgb2JqZWN0UHJvdG81ID0gT2JqZWN0LnByb3RvdHlwZTsKICB2YXIgaGFzT3duUHJvcGVydHkzID0gb2JqZWN0UHJvdG81Lmhhc093blByb3BlcnR5OwogIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkgewogICAgdmFyIGlzQXJyID0gaXNBcnJheV9kZWZhdWx0KHZhbHVlKSwgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHNfZGVmYXVsdCh2YWx1ZSksIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXJfZGVmYXVsdCh2YWx1ZSksIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXlfZGVmYXVsdCh2YWx1ZSksIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSwgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXNfZGVmYXVsdCh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsKICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkgewogICAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eTMuY2FsbCh2YWx1ZSwga2V5KSkgJiYgIShza2lwSW5kZXhlcyAmJiAoa2V5ID09ICJsZW5ndGgiIHx8IGlzQnVmZiAmJiAoa2V5ID09ICJvZmZzZXQiIHx8IGtleSA9PSAicGFyZW50IikgfHwgaXNUeXBlICYmIChrZXkgPT0gImJ1ZmZlciIgfHwga2V5ID09ICJieXRlTGVuZ3RoIiB8fCBrZXkgPT0gImJ5dGVPZmZzZXQiKSB8fCBpc0luZGV4X2RlZmF1bHQoa2V5LCBsZW5ndGgpKSkpIHsKICAgICAgICByZXN1bHQucHVzaChrZXkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYXJyYXlMaWtlS2V5c19kZWZhdWx0ID0gYXJyYXlMaWtlS2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHsKICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHsKICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpOwogICAgfTsKICB9CiAgdmFyIG92ZXJBcmdfZGVmYXVsdCA9IG92ZXJBcmc7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzCiAgdmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnX2RlZmF1bHQoT2JqZWN0LmtleXMsIE9iamVjdCk7CiAgdmFyIG5hdGl2ZUtleXNfZGVmYXVsdCA9IG5hdGl2ZUtleXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5cy5qcwogIHZhciBvYmplY3RQcm90bzYgPSBPYmplY3QucHJvdG90eXBlOwogIHZhciBoYXNPd25Qcm9wZXJ0eTQgPSBvYmplY3RQcm90bzYuaGFzT3duUHJvcGVydHk7CiAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7CiAgICBpZiAoIWlzUHJvdG90eXBlX2RlZmF1bHQob2JqZWN0KSkgewogICAgICByZXR1cm4gbmF0aXZlS2V5c19kZWZhdWx0KG9iamVjdCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gW107CiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHsKICAgICAgaWYgKGhhc093blByb3BlcnR5NC5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gImNvbnN0cnVjdG9yIikgewogICAgICAgIHJlc3VsdC5wdXNoKGtleSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZhciBiYXNlS2V5c19kZWZhdWx0ID0gYmFzZUtleXM7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMKICBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewogICAgcmV0dXJuIGlzQXJyYXlMaWtlX2RlZmF1bHQob2JqZWN0KSA/IGFycmF5TGlrZUtleXNfZGVmYXVsdChvYmplY3QpIDogYmFzZUtleXNfZGVmYXVsdChvYmplY3QpOwogIH0KICB2YXIga2V5c19kZWZhdWx0ID0ga2V5czsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VDbGFtcC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlQ2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHsKICAgIGlmIChudW1iZXIgPT09IG51bWJlcikgewogICAgICBpZiAodXBwZXIgIT09IHZvaWQgMCkgewogICAgICAgIG51bWJlciA9IG51bWJlciA8PSB1cHBlciA/IG51bWJlciA6IHVwcGVyOwogICAgICB9CiAgICAgIGlmIChsb3dlciAhPT0gdm9pZCAwKSB7CiAgICAgICAgbnVtYmVyID0gbnVtYmVyID49IGxvd2VyID8gbnVtYmVyIDogbG93ZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudW1iZXI7CiAgfQogIHZhciBiYXNlQ2xhbXBfZGVmYXVsdCA9IGJhc2VDbGFtcDsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdmFsdWVzLmpzCiAgaW5pdF9idWZmZXJfc2hpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHsKICAgIHJldHVybiBhcnJheU1hcF9kZWZhdWx0KHByb3BzLCBmdW5jdGlvbihrZXkpIHsKICAgICAgcmV0dXJuIG9iamVjdFtrZXldOwogICAgfSk7CiAgfQogIHZhciBiYXNlVmFsdWVzX2RlZmF1bHQgPSBiYXNlVmFsdWVzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanMKICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXNfZGVmYXVsdChvYmplY3QsIGtleXNfZGVmYXVsdChvYmplY3QpKTsKICB9CiAgdmFyIHZhbHVlc19kZWZhdWx0ID0gdmFsdWVzOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJhbmRvbS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgbmF0aXZlRmxvb3IgPSBNYXRoLmZsb29yOwogIHZhciBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbTsKICBmdW5jdGlvbiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcikgewogICAgcmV0dXJuIGxvd2VyICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAodXBwZXIgLSBsb3dlciArIDEpKTsKICB9CiAgdmFyIGJhc2VSYW5kb21fZGVmYXVsdCA9IGJhc2VSYW5kb207CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3NhbXBsZVNpemUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNhbXBsZVNpemUuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaHVmZmxlU2VsZi5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBzaHVmZmxlU2VsZihhcnJheSwgc2l6ZSkgewogICAgdmFyIGluZGV4ID0gLTEsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTsKICAgIHNpemUgPSBzaXplID09PSB2b2lkIDAgPyBsZW5ndGggOiBzaXplOwogICAgd2hpbGUgKCsraW5kZXggPCBzaXplKSB7CiAgICAgIHZhciByYW5kID0gYmFzZVJhbmRvbV9kZWZhdWx0KGluZGV4LCBsYXN0SW5kZXgpLCB2YWx1ZSA9IGFycmF5W3JhbmRdOwogICAgICBhcnJheVtyYW5kXSA9IGFycmF5W2luZGV4XTsKICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7CiAgICB9CiAgICBhcnJheS5sZW5ndGggPSBzaXplOwogICAgcmV0dXJuIGFycmF5OwogIH0KICB2YXIgc2h1ZmZsZVNlbGZfZGVmYXVsdCA9IHNodWZmbGVTZWxmOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLWVzQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTYW1wbGVTaXplLmpzCiAgZnVuY3Rpb24gYXJyYXlTYW1wbGVTaXplKGFycmF5LCBuKSB7CiAgICByZXR1cm4gc2h1ZmZsZVNlbGZfZGVmYXVsdChjb3B5QXJyYXlfZGVmYXVsdChhcnJheSksIGJhc2VDbGFtcF9kZWZhdWx0KG4sIDAsIGFycmF5Lmxlbmd0aCkpOwogIH0KICB2YXIgYXJyYXlTYW1wbGVTaXplX2RlZmF1bHQgPSBhcnJheVNhbXBsZVNpemU7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2gtZXNANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2FtcGxlU2l6ZS5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuKSB7CiAgICB2YXIgYXJyYXkgPSB2YWx1ZXNfZGVmYXVsdChjb2xsZWN0aW9uKTsKICAgIHJldHVybiBzaHVmZmxlU2VsZl9kZWZhdWx0KGFycmF5LCBiYXNlQ2xhbXBfZGVmYXVsdChuLCAwLCBhcnJheS5sZW5ndGgpKTsKICB9CiAgdmFyIGJhc2VTYW1wbGVTaXplX2RlZmF1bHQgPSBiYXNlU2FtcGxlU2l6ZTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC1lc0A0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc2FtcGxlU2l6ZS5qcwogIGZ1bmN0aW9uIHNhbXBsZVNpemUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHsKICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsX2RlZmF1bHQoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PT0gdm9pZCAwKSB7CiAgICAgIG4gPSAxOwogICAgfSBlbHNlIHsKICAgICAgbiA9IHRvSW50ZWdlcl9kZWZhdWx0KG4pOwogICAgfQogICAgdmFyIGZ1bmMgPSBpc0FycmF5X2RlZmF1bHQoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemVfZGVmYXVsdCA6IGJhc2VTYW1wbGVTaXplX2RlZmF1bHQ7CiAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBuKTsKICB9CiAgdmFyIHNhbXBsZVNpemVfZGVmYXVsdCA9IHNhbXBsZVNpemU7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS90aHJlYWRzQDEuNy4wL25vZGVfbW9kdWxlcy90aHJlYWRzL3dvcmtlci5tanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF93b3JrZXIgPSBfX3RvTW9kdWxlKHJlcXVpcmVfd29ya2VyKCkpOwogIHZhciBleHBvc2UgPSBpbXBvcnRfd29ya2VyLmRlZmF1bHQuZXhwb3NlOwogIHZhciByZWdpc3RlclNlcmlhbGl6ZXIgPSBpbXBvcnRfd29ya2VyLmRlZmF1bHQucmVnaXN0ZXJTZXJpYWxpemVyOwogIHZhciBUcmFuc2ZlciA9IGltcG9ydF93b3JrZXIuZGVmYXVsdC5UcmFuc2ZlcjsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvdXRpbHMudHMKICBpbml0X2J1ZmZlcl9zaGltKCk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kMy1hcnJheUAyLjEyLjEvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2QzLWFycmF5QDIuMTIuMS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBhc2NlbmRpbmdfZGVmYXVsdChhLCBiKSB7CiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vZDMtYXJyYXlAMi4xMi4xL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgZnVuY3Rpb24gYmlzZWN0b3JfZGVmYXVsdChmKSB7CiAgICBsZXQgZGVsdGEgPSBmOwogICAgbGV0IGNvbXBhcmUgPSBmOwogICAgaWYgKGYubGVuZ3RoID09PSAxKSB7CiAgICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4OwogICAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgd2hpbGUgKGxvIDwgaGkpIHsKICAgICAgICBjb25zdCBtaWQgPSBsbyArIGhpID4+PiAxOwogICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKQogICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgIGhpID0gbWlkOwogICAgICB9CiAgICAgIHJldHVybiBsbzsKICAgIH0KICAgIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkgewogICAgICBpZiAobG8gPT0gbnVsbCkKICAgICAgICBsbyA9IDA7CiAgICAgIGlmIChoaSA9PSBudWxsKQogICAgICAgIGhpID0gYS5sZW5ndGg7CiAgICAgIHdoaWxlIChsbyA8IGhpKSB7CiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBoaSA+Pj4gMTsKICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkKICAgICAgICAgIGhpID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgIGxvID0gbWlkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbG87CiAgICB9CiAgICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7CiAgICAgIGlmIChsbyA9PSBudWxsKQogICAgICAgIGxvID0gMDsKICAgICAgaWYgKGhpID09IG51bGwpCiAgICAgICAgaGkgPSBhLmxlbmd0aDsKICAgICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7CiAgICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpOwogICAgfQogICAgcmV0dXJuIHsgbGVmdCwgY2VudGVyLCByaWdodCB9OwogIH0KICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHsKICAgIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nX2RlZmF1bHQoZihkKSwgeCk7CiAgfQoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy91dGlscy50cwogIHZhciBEYXRhU291cmNlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZmlsZSwgY2hyb21TaXplcywgb3B0aW9ucykgewogICAgICB0aGlzLmZpbGUgPSBmaWxlOwogICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmNocm9tSW5mbyA9IHNpemVzVG9DaHJvbUluZm8oY2hyb21TaXplcyk7CiAgICAgIHRoaXMudGlsZXNldEluZm8gPSB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8odGhpcy5jaHJvbUluZm8pOwogICAgfQogICAgY2hyb21JbmZvOwogICAgdGlsZXNldEluZm87CiAgfTsKICB2YXIgY2hyb21JbmZvQmlzZWN0b3IgPSBiaXNlY3Rvcl9kZWZhdWx0KChkKSA9PiBkLnBvcykubGVmdDsKICB2YXIgY2hyVG9BYnMgPSAoY2hyb20sIGNocm9tUG9zLCBjaHJvbUluZm8pID0+IGNocm9tSW5mby5jaHJQb3NpdGlvbnNbY2hyb21dLnBvcyArIGNocm9tUG9zOwogIHZhciBhYnNUb0NociA9IChhYnNQb3NpdGlvbiwgY2hyb21JbmZvKSA9PiB7CiAgICBpZiAoIWNocm9tSW5mbyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucyB8fCAhY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgaW5zZXJ0UG9pbnQgPSBjaHJvbUluZm9CaXNlY3RvcihjaHJvbUluZm8uY3VtUG9zaXRpb25zLCBhYnNQb3NpdGlvbik7CiAgICBjb25zdCBsYXN0Q2hyID0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tjaHJvbUluZm8uY3VtUG9zaXRpb25zLmxlbmd0aCAtIDFdLmNocjsKICAgIGNvbnN0IGxhc3RMZW5ndGggPSBjaHJvbUluZm8uY2hyb21MZW5ndGhzW2xhc3RDaHJdOwogICAgaW5zZXJ0UG9pbnQgLT0gaW5zZXJ0UG9pbnQgPiAwICYmIDE7CiAgICBsZXQgY2hyUG9zaXRpb24gPSBNYXRoLmZsb29yKGFic1Bvc2l0aW9uIC0gY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0ucG9zKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaWYgKGNoclBvc2l0aW9uIDwgMCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIDE7CiAgICAgIGNoclBvc2l0aW9uID0gMTsKICAgIH0KICAgIGlmIChpbnNlcnRQb2ludCA9PT0gY2hyb21JbmZvLmN1bVBvc2l0aW9ucy5sZW5ndGggLSAxICYmIGNoclBvc2l0aW9uID4gbGFzdExlbmd0aCkgewogICAgICBvZmZzZXQgPSBjaHJQb3NpdGlvbiAtIGxhc3RMZW5ndGg7CiAgICAgIGNoclBvc2l0aW9uID0gbGFzdExlbmd0aDsKICAgIH0KICAgIHJldHVybiBbY2hyb21JbmZvLmN1bVBvc2l0aW9uc1tpbnNlcnRQb2ludF0uY2hyLCBjaHJQb3NpdGlvbiwgb2Zmc2V0LCBpbnNlcnRQb2ludF07CiAgfTsKICBmdW5jdGlvbiB0aWxlc2V0SW5mb0Zyb21DaHJvbUluZm8oY2hyb21JbmZvLCB0aWxlU2l6ZSA9IDEwMjQpIHsKICAgIHJldHVybiB7CiAgICAgIHRpbGVfc2l6ZTogdGlsZVNpemUsCiAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbjogdGlsZVNpemUsCiAgICAgIG1heF96b29tOiBNYXRoLmNlaWwoTWF0aC5sb2coY2hyb21JbmZvLnRvdGFsTGVuZ3RoIC8gdGlsZVNpemUpIC8gTWF0aC5sb2coMikpLAogICAgICBtYXhfd2lkdGg6IGNocm9tSW5mby50b3RhbExlbmd0aCwKICAgICAgbWluX3BvczogWzBdLAogICAgICBtYXhfcG9zOiBbY2hyb21JbmZvLnRvdGFsTGVuZ3RoXQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2l6ZXNUb0Nocm9tSW5mbyhzaXplcykgewogICAgY29uc3QgaW5mbyA9IHsKICAgICAgY3VtUG9zaXRpb25zOiBbXSwKICAgICAgY2hyb21MZW5ndGhzOiB7fSwKICAgICAgY2hyUG9zaXRpb25zOiB7fSwKICAgICAgdG90YWxMZW5ndGg6IDAKICAgIH07CiAgICBzaXplcy5mb3JFYWNoKChbY2hyLCBsZW5ndGhdLCBpKSA9PiB7CiAgICAgIGNvbnN0IGNoclBvc2l0aW9uID0geyBpZDogaSwgY2hyLCBwb3M6IGluZm8udG90YWxMZW5ndGggfTsKICAgICAgaW5mby5jaHJQb3NpdGlvbnNbY2hyXSA9IGNoclBvc2l0aW9uOwogICAgICBpbmZvLmNocm9tTGVuZ3Roc1tjaHJdID0gbGVuZ3RoOwogICAgICBpbmZvLmN1bVBvc2l0aW9ucy5wdXNoKGNoclBvc2l0aW9uKTsKICAgICAgaW5mby50b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmluZm8sCiAgICAgIGFic1RvQ2hyOiAoYWJzUG9zKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGFic1RvQ2hyKGFic1BvcywgaW5mbykgOiBudWxsLAogICAgICBjaHJUb0FiczogKFtjaHJOYW1lLCBjaHJQb3NdKSA9PiBpbmZvLmNoclBvc2l0aW9ucyA/IGNoclRvQWJzKGNock5hbWUsIGNoclBvcywgaW5mbykgOiBudWxsCiAgICB9OwogIH0KICB2YXIgUmVtb3RlRmlsZTIgPSBjbGFzcyBleHRlbmRzIFJlbW90ZUZpbGUgewogICAgcmVhZCA9IGFzeW5jIChidWZmZXIsIG9mZnNldCA9IDAsIGxlbmd0aCwgcG9zaXRpb24gPSAwLCBvcHRzID0ge30pID0+IHsKICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30sIHNpZ25hbCwgb3ZlcnJpZGVzID0ge30gfSA9IG9wdHM7CiAgICAgIGlmIChsZW5ndGggPCBJbmZpbml0eSkgewogICAgICAgIGhlYWRlcnMucmFuZ2UgPSBgYnl0ZXM9JHtwb3NpdGlvbn0tJHtwb3NpdGlvbiArIGxlbmd0aH1gOwogICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gSW5maW5pdHkgJiYgcG9zaXRpb24gIT09IDApIHsKICAgICAgICBoZWFkZXJzLnJhbmdlID0gYGJ5dGVzPSR7cG9zaXRpb259LWA7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IHsKICAgICAgICAuLi50aGlzLmJhc2VPdmVycmlkZXMsCiAgICAgICAgLi4ub3ZlcnJpZGVzLAogICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgIC4uLmhlYWRlcnMsCiAgICAgICAgICAuLi5vdmVycmlkZXMuaGVhZGVycywKICAgICAgICAgIC4uLnRoaXMuYmFzZU92ZXJyaWRlcy5oZWFkZXJzCiAgICAgICAgfSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHJlZGlyZWN0OiAiZm9sbG93IiwKICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgc2lnbmFsCiAgICAgIH07CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnVybCwgYXJncyk7CiAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0gJHt0aGlzLnVybH1gKTsKICAgICAgfQogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHsKICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmdldEJ1ZmZlckZyb21SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgY29uc3QgYnl0ZXNDb3BpZWQgPSByZXNwb25zZURhdGEuY29weShidWZmZXIsIG9mZnNldCwgMCwgTWF0aC5taW4obGVuZ3RoLCByZXNwb25zZURhdGEubGVuZ3RoKSk7CiAgICAgICAgY29uc3QgcmVzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoImNvbnRlbnQtcmFuZ2UiKTsKICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSAvXC8oXGQrKSQvLmV4ZWMocmVzIHx8ICIiKTsKICAgICAgICBpZiAoc2l6ZU1hdGNoICYmIHNpemVNYXRjaFsxXSkgewogICAgICAgICAgdGhpcy5fc3RhdCA9IHsgc2l6ZTogcGFyc2VJbnQoc2l6ZU1hdGNoWzFdLCAxMCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgYnl0ZXNSZWFkOiBieXRlc0NvcGllZCwgYnVmZmVyIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmZXRjaGluZyAke3RoaXMudXJsfWApOwogICAgfTsKICB9OwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy9iZWQvYmVkLXBhcnNlci50cwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9pbmRleC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9wYXJzZXIuanMKICBpbml0X2J1ZmZlcl9zaGltKCk7CiAgdmFyIGltcG9ydF9hdXRvU3FsMiA9IF9fdG9Nb2R1bGUocmVxdWlyZV9hdXRvU3FsKCkpOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL2RlZmF1bHRUeXBlcy5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgaW1wb3J0X2F1dG9TcWwgPSBfX3RvTW9kdWxlKHJlcXVpcmVfYXV0b1NxbCgpKTsKCiAgLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BnbW9kK2JlZEAyLjEuMi9ub2RlX21vZHVsZXMvQGdtb2QvYmVkL2VzbS9hcy9hdXRvU3FsU2NoZW1hcy5qcwogIHZhciBhdXRvU3FsU2NoZW1hc19leHBvcnRzID0ge307CiAgX19leHBvcnQoYXV0b1NxbFNjaGVtYXNfZXhwb3J0cywgewogICAgYmlnQ2hhaW46ICgpID0+IGJpZ0NoYWluLAogICAgYmlnR2VuZVByZWQ6ICgpID0+IGJpZ0dlbmVQcmVkLAogICAgYmlnSW50ZXJhY3Q6ICgpID0+IGJpZ0ludGVyYWN0LAogICAgYmlnTGluazogKCkgPT4gYmlnTGluaywKICAgIGJpZ01hZjogKCkgPT4gYmlnTWFmLAogICAgYmlnTmFycm93UGVhazogKCkgPT4gYmlnTmFycm93UGVhaywKICAgIGJpZ1BzbDogKCkgPT4gYmlnUHNsLAogICAgZGVmYXVsdEJlZFNjaGVtYTogKCkgPT4gZGVmYXVsdEJlZFNjaGVtYSwKICAgIG1hZkZyYW1lczogKCkgPT4gbWFmRnJhbWVzLAogICAgbWFmU3VtbWFyeTogKCkgPT4gbWFmU3VtbWFyeQogIH0pOwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICB2YXIgYmlnQ2hhaW4gPSBgdGFibGUgYmlnQ2hhaW4KImJpZ0NoYWluIHBhaXJ3aXNlIGFsaWdubWVudCIKICAgICgKICAgIHN0cmluZyBjaHJvbTsgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICAiU3RhcnQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgIHVpbnQgICBjaHJvbUVuZDsgICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICAiTmFtZSBvciBJRCBvZiBpdGVtLCBpZGVhbGx5IGJvdGggaHVtYW4gcmVhZGFibGUgYW5kIHVuaXF1ZSIKICAgIHVpbnQgc2NvcmU7ICAgICAgICAgIlNjb3JlICgwLTEwMDApIgogICAgY2hhclsxXSBzdHJhbmQ7ICAgICAiKyBvciAtIGZvciBzdHJhbmQiCiAgICB1aW50IHRTaXplOyAgICAgICAgICJzaXplIG9mIHRhcmdldCBzZXF1ZW5jZSIKICAgIHN0cmluZyBxTmFtZTsgICAgICAgIm5hbWUgb2YgcXVlcnkgc2VxdWVuY2UiCiAgICB1aW50IHFTaXplOyAgICAgICAgICJzaXplIG9mIHF1ZXJ5IHNlcXVlbmNlIgogICAgdWludCBxU3RhcnQ7ICAgICAgICAic3RhcnQgb2YgYWxpZ25tZW50IG9uIHF1ZXJ5IHNlcXVlbmNlIgogICAgdWludCBxRW5kOyAgICAgICAgICAiZW5kIG9mIGFsaWdubWVudCBvbiBxdWVyeSBzZXF1ZW5jZSIKICAgIHVpbnQgY2hhaW5TY29yZTsgICAgInNjb3JlIGZyb20gY2hhaW4iCiAgICApYDsKICB2YXIgYmlnR2VuZVByZWQgPSBgdGFibGUgYmlnR2VuZVByZWQKImJpZ0dlbmVQcmVkIGdlbmUgbW9kZWxzIgogICAoCiAgIHN0cmluZyBjaHJvbTsgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICB1aW50ICAgY2hyb21TdGFydDsgICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICB1aW50ICAgY2hyb21FbmQ7ICAgICJFbmQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgc3RyaW5nIG5hbWU7ICAgICAgICAiTmFtZSBvciBJRCBvZiBpdGVtLCBpZGVhbGx5IGJvdGggaHVtYW4gcmVhZGFibGUgYW5kIHVuaXF1ZSIKICAgdWludCBzY29yZTsgICAgICAgICAiU2NvcmUgKDAtMTAwMCkiCiAgIGNoYXJbMV0gc3RyYW5kOyAgICAgIisgb3IgLSBmb3Igc3RyYW5kIgogICB1aW50IHRoaWNrU3RhcnQ7ICAgICJTdGFydCBvZiB3aGVyZSBkaXNwbGF5IHNob3VsZCBiZSB0aGljayAoc3RhcnQgY29kb24pIgogICB1aW50IHRoaWNrRW5kOyAgICAgICJFbmQgb2Ygd2hlcmUgZGlzcGxheSBzaG91bGQgYmUgdGhpY2sgKHN0b3AgY29kb24pIgogICB1aW50IHJlc2VydmVkOyAgICAgICAiUkdCIHZhbHVlICh1c2UgUixHLEIgc3RyaW5nIGluIGlucHV0IGZpbGUpIgogICBpbnQgYmxvY2tDb3VudDsgICAgICJOdW1iZXIgb2YgYmxvY2tzIgogICBpbnRbYmxvY2tDb3VudF0gYmxvY2tTaXplczsgIkNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrIHNpemVzIgogICBpbnRbYmxvY2tDb3VudF0gY2hyb21TdGFydHM7ICJTdGFydCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gY2hyb21TdGFydCIKICAgc3RyaW5nIG5hbWUyOyAgICAgICAiQWx0ZXJuYXRpdmUvaHVtYW4gcmVhZGFibGUgbmFtZSIKICAgc3RyaW5nIGNkc1N0YXJ0U3RhdDsgIlN0YXR1cyBvZiBDRFMgc3RhcnQgYW5ub3RhdGlvbiAobm9uZSwgdW5rbm93biwgaW5jb21wbGV0ZSwgb3IgY29tcGxldGUpIgogICBzdHJpbmcgY2RzRW5kU3RhdDsgICAiU3RhdHVzIG9mIENEUyBlbmQgYW5ub3RhdGlvbiAobm9uZSwgdW5rbm93biwgaW5jb21wbGV0ZSwgb3IgY29tcGxldGUpIgogICBpbnRbYmxvY2tDb3VudF0gZXhvbkZyYW1lczsgIkV4b24gZnJhbWUgezAsMSwyfSwgb3IgLTEgaWYgbm8gZnJhbWUgZm9yIGV4b24iCiAgIHN0cmluZyB0eXBlOyAgICAgICAgIlRyYW5zY3JpcHQgdHlwZSIKICAgc3RyaW5nIGdlbmVOYW1lOyAgICAiUHJpbWFyeSBpZGVudGlmaWVyIGZvciBnZW5lIgogICBzdHJpbmcgZ2VuZU5hbWUyOyAgICJBbHRlcm5hdGl2ZS9odW1hbiByZWFkYWJsZSBnZW5lIG5hbWUiCiAgIHN0cmluZyBnZW5lVHlwZTsgICAgIkdlbmUgdHlwZSIKICAgKWA7CiAgdmFyIGJpZ0ludGVyYWN0ID0gYHRhYmxlIGludGVyYWN0CiJpbnRlcmFjdGlvbiBiZXR3ZWVuIHR3byByZWdpb25zIgogICAgKAogICAgc3RyaW5nIGNocm9tOyAgICAgICAgIkNocm9tb3NvbWUgKG9yIGNvbnRpZywgc2NhZmZvbGQsIGV0Yy4pLiBGb3IgaW50ZXJjaHJvbW9zb21hbCwgdXNlIDIgcmVjb3JkcyIKICAgIHVpbnQgY2hyb21TdGFydDsgICAgICJTdGFydCBwb3NpdGlvbiBvZiBsb3dlciByZWdpb24uIEZvciBpbnRlcmNocm9tb3NvbWFsLCBzZXQgdG8gY2hyb21TdGFydCBvZiB0aGlzIHJlZ2lvbiIKICAgIHVpbnQgY2hyb21FbmQ7ICAgICAgICJFbmQgcG9zaXRpb24gb2YgdXBwZXIgcmVnaW9uLiBGb3IgaW50ZXJjaHJvbW9zb21hbCwgc2V0IHRvIGNocm9tRW5kIG9mIHRoaXMgcmVnaW9uIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICAgIk5hbWUgb2YgaXRlbSwgZm9yIGRpc3BsYXkuICBVc3VhbGx5ICdzb3VyY2VOYW1lL3RhcmdldE5hbWUvZXhwJyBvciBlbXB0eSIKICAgIHVpbnQgc2NvcmU7ICAgICAgICAgICJTY29yZSAoMC0xMDAwKSIKICAgIGRvdWJsZSB2YWx1ZTsgICAgICAgICJTdHJlbmd0aCBvZiBpbnRlcmFjdGlvbiBvciBvdGhlciBkYXRhIHZhbHVlLiBUeXBpY2FsbHkgYmFzaXMgZm9yIHNjb3JlIgogICAgc3RyaW5nIGV4cDsgICAgICAgICAgIkV4cGVyaW1lbnQgbmFtZSAobWV0YWRhdGEgZm9yIGZpbHRlcmluZykuIFVzZSAuIGlmIG5vdCBhcHBsaWNhYmxlIgogICAgc3RyaW5nIGNvbG9yOyAgICAgICAgIkl0ZW0gY29sb3IuICBTcGVjaWZpZWQgYXMgcixnLGIgb3IgaGV4YWRlY2ltYWwgI1JSR0dCQiBvciBodG1sIGNvbG9yIG5hbWUsIGFzIGluIC8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNodG1sNC4gVXNlIDAgYW5kIHNwZWN0cnVtIHNldHRpbmcgdG8gc2hhZGUgYnkgc2NvcmUiCiAgICBzdHJpbmcgc291cmNlQ2hyb207ICAiQ2hyb21vc29tZSBvZiBzb3VyY2UgcmVnaW9uIChkaXJlY3Rpb25hbCkgb3IgbG93ZXIgcmVnaW9uLiBGb3Igbm9uLWRpcmVjdGlvbmFsIGludGVyY2hyb21vc29tYWwsIGNocm9tIG9mIHRoaXMgcmVnaW9uLiIKICAgIHVpbnQgc291cmNlU3RhcnQ7ICAgICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIG9mIHNvdXJjZS9sb3dlci90aGlzIHJlZ2lvbiIKICAgIHVpbnQgc291cmNlRW5kOyAgICAgICJFbmQgcG9zaXRpb24gaW4gY2hyb21vc29tZSBvZiBzb3VyY2UvbG93ZXIvdGhpcyByZWdpb24iCiAgICBzdHJpbmcgc291cmNlTmFtZTsgICAiSWRlbnRpZmllciBvZiBzb3VyY2UvbG93ZXIvdGhpcyByZWdpb24iCiAgICBzdHJpbmcgc291cmNlU3RyYW5kOyAiT3JpZW50YXRpb24gb2Ygc291cmNlL2xvd2VyL3RoaXMgcmVnaW9uOiArIG9yIC0uICBVc2UgLiBpZiBub3QgYXBwbGljYWJsZSIKICAgIHN0cmluZyB0YXJnZXRDaHJvbTsgICJDaHJvbW9zb21lIG9mIHRhcmdldCByZWdpb24gKGRpcmVjdGlvbmFsKSBvciB1cHBlciByZWdpb24uIEZvciBub24tZGlyZWN0aW9uYWwgaW50ZXJjaHJvbW9zb21hbCwgY2hyb20gb2Ygb3RoZXIgcmVnaW9uIgogICAgdWludCB0YXJnZXRTdGFydDsgICAgIlN0YXJ0IHBvc2l0aW9uIGluIGNocm9tb3NvbWUgb2YgdGFyZ2V0L3VwcGVyL3RoaXMgcmVnaW9uIgogICAgdWludCB0YXJnZXRFbmQ7ICAgICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIG9mIHRhcmdldC91cHBlci90aGlzIHJlZ2lvbiIKICAgIHN0cmluZyB0YXJnZXROYW1lOyAgICJJZGVudGlmaWVyIG9mIHRhcmdldC91cHBlci90aGlzIHJlZ2lvbiIKICAgIHN0cmluZyB0YXJnZXRTdHJhbmQ7ICJPcmllbnRhdGlvbiBvZiB0YXJnZXQvdXBwZXIvdGhpcyByZWdpb246ICsgb3IgLS4gIFVzZSAuIGlmIG5vdCBhcHBsaWNhYmxlIgoKICAgIClgOwogIHZhciBiaWdMaW5rID0gYHRhYmxlIGJpZ0xpbmsKImJpZ0xpbmsgcGFpcndpc2UgYWxpZ25tZW50IgogICAgKAogICAgc3RyaW5nIGNocm9tOyAgICAgICAiUmVmZXJlbmNlIHNlcXVlbmNlIGNocm9tb3NvbWUgb3Igc2NhZmZvbGQiCiAgICB1aW50ICAgY2hyb21TdGFydDsgICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgdWludCAgIGNocm9tRW5kOyAgICAiRW5kIHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICBzdHJpbmcgbmFtZTsgICAgICAgICJOYW1lIG9yIElEIG9mIGl0ZW0sIGlkZWFsbHkgYm90aCBodW1hbiByZWFkYWJsZSBhbmQgdW5pcXVlIgogICAgdWludCBxU3RhcnQ7ICAgICAgICAic3RhcnQgb2YgYWxpZ25tZW50IG9uIHF1ZXJ5IHNlcXVlbmNlIgogICAgKWA7CiAgdmFyIGJpZ01hZiA9IGB0YWJsZSBiZWRNYWYKIkJlZDMgd2l0aCBNQUYgYmxvY2siCiAgICAoCiAgICBzdHJpbmcgY2hyb207ICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICJTdGFydCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgdWludCAgIGNocm9tRW5kOyAgICJFbmQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgIGxzdHJpbmcgbWFmQmxvY2s7ICAgIk1BRiBibG9jayIKICAgIClgOwogIHZhciBiaWdOYXJyb3dQZWFrID0gYHRhYmxlIGJpZ05hcnJvd1BlYWsKIkJFRDYrNCBQZWFrcyBvZiBzaWduYWwgZW5yaWNobWVudCBiYXNlZCBvbiBwb29sZWQsIG5vcm1hbGl6ZWQgKGludGVycHJldGVkKSBkYXRhLiIKKAogICAgc3RyaW5nIGNocm9tOyAgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICAgIlN0YXJ0IHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICB1aW50ICAgY2hyb21FbmQ7ICAgICAiRW5kIHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICBzdHJpbmcgbmFtZTsJICJOYW1lIGdpdmVuIHRvIGEgcmVnaW9uIChwcmVmZXJhYmx5IHVuaXF1ZSkuIFVzZSAuIGlmIG5vIG5hbWUgaXMgYXNzaWduZWQiCiAgICB1aW50ICAgc2NvcmU7ICAgICAgICAiSW5kaWNhdGVzIGhvdyBkYXJrIHRoZSBwZWFrIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBicm93c2VyICgwLTEwMDApICIKICAgIGNoYXJbMV0gIHN0cmFuZDsgICAgICIrIG9yIC0gb3IgLiBmb3IgdW5rbm93biIKICAgIGZsb2F0ICBzaWduYWxWYWx1ZTsgICJNZWFzdXJlbWVudCBvZiBhdmVyYWdlIGVucmljaG1lbnQgZm9yIHRoZSByZWdpb24iCiAgICBmbG9hdCAgcFZhbHVlOyAgICAgICAiU3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlIG9mIHNpZ25hbCB2YWx1ZSAoLWxvZzEwKS4gU2V0IHRvIC0xIGlmIG5vdCB1c2VkLiIKICAgIGZsb2F0ICBxVmFsdWU7ICAgICAgICJTdGF0aXN0aWNhbCBzaWduaWZpY2FuY2Ugd2l0aCBtdWx0aXBsZS10ZXN0IGNvcnJlY3Rpb24gYXBwbGllZCAoRkRSIC1sb2cxMCkuIFNldCB0byAtMSBpZiBub3QgdXNlZC4iCiAgICBpbnQgICBwZWFrOyAgICAgICAgICJQb2ludC1zb3VyY2UgY2FsbGVkIGZvciB0aGlzIHBlYWs7IDAtYmFzZWQgb2Zmc2V0IGZyb20gY2hyb21TdGFydC4gU2V0IHRvIC0xIGlmIG5vIHBvaW50LXNvdXJjZSBjYWxsZWQuIgopYDsKICB2YXIgYmlnUHNsID0gYHRhYmxlIGJpZ1BzbAoiYmlnUHNsIHBhaXJ3aXNlIGFsaWdubWVudCIKICAgICgKICAgIHN0cmluZyBjaHJvbTsgICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICAiU3RhcnQgcG9zaXRpb24gaW4gY2hyb21vc29tZSIKICAgIHVpbnQgICBjaHJvbUVuZDsgICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICAiTmFtZSBvciBJRCBvZiBpdGVtLCBpZGVhbGx5IGJvdGggaHVtYW4gcmVhZGFibGUgYW5kIHVuaXF1ZSIKICAgIHVpbnQgc2NvcmU7ICAgICAgICAgIlNjb3JlICgwLTEwMDApIgogICAgY2hhclsxXSBzdHJhbmQ7ICAgICAiKyBvciAtIGluZGljYXRlcyB3aGV0aGVyIHRoZSBxdWVyeSBhbGlnbnMgdG8gdGhlICsgb3IgLSBzdHJhbmQgb24gdGhlIHJlZmVyZW5jZSIKICAgIHVpbnQgdGhpY2tTdGFydDsgICAgIlN0YXJ0IG9mIHdoZXJlIGRpc3BsYXkgc2hvdWxkIGJlIHRoaWNrIChzdGFydCBjb2RvbikiCiAgICB1aW50IHRoaWNrRW5kOyAgICAgICJFbmQgb2Ygd2hlcmUgZGlzcGxheSBzaG91bGQgYmUgdGhpY2sgKHN0b3AgY29kb24pIgogICAgdWludCByZXNlcnZlZDsgICAgICAgIlJHQiB2YWx1ZSAodXNlIFIsRyxCIHN0cmluZyBpbiBpbnB1dCBmaWxlKSIKICAgIGludCBibG9ja0NvdW50OyAgICAgIk51bWJlciBvZiBibG9ja3MiCiAgICBpbnRbYmxvY2tDb3VudF0gYmxvY2tTaXplczsgIkNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrIHNpemVzIgogICAgaW50W2Jsb2NrQ291bnRdIGNocm9tU3RhcnRzOyAiU3RhcnQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGNocm9tU3RhcnQiCgogICAgdWludCAgICBvQ2hyb21TdGFydDsiU3RhcnQgcG9zaXRpb24gaW4gb3RoZXIgY2hyb21vc29tZSIKICAgIHVpbnQgICAgb0Nocm9tRW5kOyAgIkVuZCBwb3NpdGlvbiBpbiBvdGhlciBjaHJvbW9zb21lIgogICAgY2hhclsxXSBvU3RyYW5kOyAgICAiKyBvciAtLCAtIG1lYW5zIHRoYXQgcHNsIHdhcyByZXZlcnNlZCBpbnRvIEJFRC1jb21wYXRpYmxlIGNvb3JkaW5hdGVzIgogICAgdWludCAgICBvQ2hyb21TaXplOyAiU2l6ZSBvZiBvdGhlciBjaHJvbW9zb21lLiIKICAgIGludFtibG9ja0NvdW50XSBvQ2hyb21TdGFydHM7ICJTdGFydCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gb0Nocm9tU3RhcnQgb3IgZnJvbSBvQ2hyb21TdGFydCtvQ2hyb21TaXplIGRlcGVuZGluZyBvbiBzdHJhbmQiCgogICAgbHN0cmluZyAgb1NlcXVlbmNlOyAgIlNlcXVlbmNlIG9uIG90aGVyIGNocm9tIChvciBlbXB0eSkiCiAgICBzdHJpbmcgICBvQ0RTOyAgICAgICAiQ0RTIGluIE5DQkkgZm9ybWF0IgoKICAgIHVpbnQgICAgY2hyb21TaXplOyJTaXplIG9mIHRhcmdldCBjaHJvbW9zb21lIgoKICAgIHVpbnQgbWF0Y2g7ICAgICAgICAiTnVtYmVyIG9mIGJhc2VzIG1hdGNoZWQuIgogICAgdWludCBtaXNNYXRjaDsgIiBOdW1iZXIgb2YgYmFzZXMgdGhhdCBkb24ndCBtYXRjaCAiCiAgICB1aW50IHJlcE1hdGNoOyAiIE51bWJlciBvZiBiYXNlcyB0aGF0IG1hdGNoIGJ1dCBhcmUgcGFydCBvZiByZXBlYXRzICIKICAgIHVpbnQgbkNvdW50OyAgICIgTnVtYmVyIG9mICdOJyBiYXNlcyAiCiAgICB1aW50IHNlcVR5cGU7ICAgICIwPWVtcHR5LCAxPW51Y2xlb3RpZGUsIDI9YW1pbm9fYWNpZCIKICAgIClgOwogIHZhciBkZWZhdWx0QmVkU2NoZW1hID0gYHRhYmxlIGRlZmF1bHRCZWRTY2hlbWEKIkJFRDEyIgogICAgKAogICAgc3RyaW5nIGNocm9tOyAgICAgICJUaGUgbmFtZSBvZiB0aGUgY2hyb21vc29tZSAoZS5nLiBjaHIzLCBjaHJZLCBjaHIyX3JhbmRvbSkgb3Igc2NhZmZvbGQgKGUuZy4gc2NhZmZvbGQxMDY3MSkuIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICJUaGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZlYXR1cmUgaW4gdGhlIGNocm9tb3NvbWUgb3Igc2NhZmZvbGQuIFRoZSBmaXJzdCBiYXNlIGluIGEgY2hyb21vc29tZSBpcyBudW1iZXJlZCAwLiIKICAgIHVpbnQgICBjaHJvbUVuZDsgICAiVGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgY2hyb21vc29tZSBvciBzY2FmZm9sZC4gVGhlIGNocm9tRW5kIGJhc2UgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkaXNwbGF5IG9mIHRoZSBmZWF0dXJlLiBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IDEwMCBiYXNlcyBvZiBhIGNocm9tb3NvbWUgYXJlIGRlZmluZWQgYXMgY2hyb21TdGFydD0wLCBjaHJvbUVuZD0xMDAsIGFuZCBzcGFuIHRoZSBiYXNlcyBudW1iZXJlZCAwLTk5LiIKICAgIHN0cmluZyAgIG5hbWU7ICAgIkRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIEJFRCBsaW5lLiIKICAgIGZsb2F0ICAgc2NvcmU7ICAgIkZlYXR1cmUgc2NvcmUsIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgMC0xMDAwIGxpbWl0IGFzIGluIGJlZCIKICAgIGNoYXIgICBzdHJhbmQ7ICAgIkRlZmluZXMgdGhlIHN0cmFuZC4gRWl0aGVyICcuJyAoPW5vIHN0cmFuZCkgb3IgJysnIG9yICctJyIKICAgIHVpbnQgdGhpY2tTdGFydDsgIlRoZSBzdGFydGluZyBwb3NpdGlvbiBhdCB3aGljaCB0aGUgZmVhdHVyZSBpcyBkcmF3biB0aGlja2x5IChmb3IgZXhhbXBsZSwgdGhlIHN0YXJ0IGNvZG9uIGluIGdlbmUgZGlzcGxheXMpLiBXaGVuIHRoZXJlIGlzIG5vIHRoaWNrIHBhcnQsIHRoaWNrU3RhcnQgYW5kIHRoaWNrRW5kIGFyZSB1c3VhbGx5IHNldCB0byB0aGUgY2hyb21TdGFydCBwb3NpdGlvbi4iCiAgICB1aW50IHRoaWNrRW5kOyAiVGhlIGVuZGluZyBwb3NpdGlvbiBhdCB3aGljaCB0aGUgZmVhdHVyZSBpcyBkcmF3biB0aGlja2x5IChmb3IgZXhhbXBsZSB0aGUgc3RvcCBjb2RvbiBpbiBnZW5lIGRpc3BsYXlzKS4iCiAgICBzdHJpbmcgaXRlbVJnYjsgIkFuIFJHQiB2YWx1ZSBvZiB0aGUgZm9ybSBSLEcsQiAoZS5nLiAyNTUsMCwwKS4gIgogICAgdWludCBibG9ja0NvdW50OyAiIFRoZSBudW1iZXIgb2YgYmxvY2tzIChleG9ucykgaW4gdGhlIEJFRCBsaW5lLiIKICAgIHVpbnRbYmxvY2tDb3VudF0gYmxvY2tTaXplczsgIiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBibG9jayBzaXplcy4gVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIGxpc3Qgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYmxvY2tDb3VudC4iCiAgICB1aW50W2Jsb2NrQ291bnRdIGJsb2NrU3RhcnRzOyAiQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBibG9jayBzdGFydHMuIEFsbCBvZiB0aGUgYmxvY2tTdGFydCBwb3NpdGlvbnMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gY2hyb21TdGFydC4gVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIGxpc3Qgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYmxvY2tDb3VudC4iCiAgICApYDsKICB2YXIgbWFmRnJhbWVzID0gYHRhYmxlIG1hZkZyYW1lcwoiY29kb24gZnJhbWUgYXNzaWdubWVudCBmb3IgTUFGIGNvbXBvbmVudHMiCiAgICAoCiAgICBzdHJpbmcgY2hyb207ICAgICAgIlJlZmVyZW5jZSBzZXF1ZW5jZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkIgogICAgdWludCAgIGNocm9tU3RhcnQ7ICJTdGFydCByYW5nZSBpbiBjaHJvbW9zb21lIgogICAgdWludCAgIGNocm9tRW5kOyAgICJFbmQgcmFuZ2UgaW4gY2hyb21vc29tZSIKICAgIHN0cmluZyBzcmM7ICAgICAgICAiTmFtZSBvZiBzZXF1ZW5jZSBzb3VyY2UgaW4gTUFGIgogICAgdWJ5dGUgZnJhbWU7ICAgICAgICJmcmFtZSAoMCwxLDIpIGZvciBmaXJzdCBiYXNlKCspIG9yIGxhc3QgYmFzdCgtKSIKICAgIGNoYXJbMV0gc3RyYW5kOyAgICAiKyBvciAtIgogICAgc3RyaW5nIG5hbWU7ICAgICAgICJOYW1lIG9mIGdlbmUgdXNlZCB0byBkZWZpbmUgZnJhbWUiCiAgICBpbnQgICAgcHJldkZyYW1lUG9zOyAgInRhcmdldCBwb3NpdGlvbiBvZiB0aGUgcHJldmlvdXMgYmFzZSAoaW4gdHJhbnNjcmlwdGlvbiBkaXJlY3Rpb24pIHRoYXQgY29udGludWVzIHRoaXMgZnJhbWUsIG9yIC0xIGlmIG5vbmUsIG9yIGZyYW1lIG5vdCBjb250aWd1b3VzIgogICAgaW50ICAgIG5leHRGcmFtZVBvczsgICJ0YXJnZXQgcG9zaXRpb24gb2YgdGhlIG5leHQgYmFzZSAoaW4gdHJhbnNjcmlwdGlvbiBkaXJlY3Rpb24pIHRoYXQgY29udGludWVzIHRoaXMgZnJhbWUsIG9yIC0xIGlmIG5vbmUsIG9yIGZyYW1lIG5vdCBjb250aWd1b3VzIgogICAgdWJ5dGUgIGlzRXhvblN0YXJ0OyAgImRvZXMgdGhpcyBzdGFydCB0aGUgQ0RTIHBvcnRpb24gb2YgYW4gZXhvbj8iCiAgICB1Ynl0ZSAgaXNFeG9uRW5kOyAgICAiZG9lcyB0aGlzIGVuZCB0aGUgQ0RTIHBvcnRpb24gb2YgYW4gZXhvbj8iCiAgICApYDsKICB2YXIgbWFmU3VtbWFyeSA9IGB0YWJsZSBtYWZTdW1tYXJ5CiJQb3NpdGlvbnMgYW5kIHNjb3JlcyBmb3IgYWxpZ25tZW50IGJsb2NrcyIKICAgICgKICAgIHN0cmluZyBjaHJvbTsgICAgICAiUmVmZXJlbmNlIHNlcXVlbmNlIGNocm9tb3NvbWUgb3Igc2NhZmZvbGQiCiAgICB1aW50ICAgY2hyb21TdGFydDsgIlN0YXJ0IHBvc2l0aW9uIGluIGNocm9tb3NvbWUiCiAgICB1aW50ICAgY2hyb21FbmQ7ICAgIkVuZCBwb3NpdGlvbiBpbiBjaHJvbW9zb21lIgogICAgc3RyaW5nIHNyYzsgICAgICAgICJTZXF1ZW5jZSBuYW1lIG9yIGRhdGFiYXNlIG9mIGFsaWdubWVudCIKICAgIGZsb2F0ICBzY29yZTsgICAgICAiRmxvYXRpbmcgcG9pbnQgc2NvcmUuIgogICAgY2hhclsxXSBsZWZ0U3RhdHVzOyAgIkdhcC9icmVhayBhbm5vdGF0aW9uIGZvciBwcmVjZWRpbmcgYmxvY2siCiAgICBjaGFyWzFdIHJpZ2h0U3RhdHVzOyAiR2FwL2JyZWFrIGFubm90YXRpb24gZm9yIGZvbGxvd2luZyBibG9jayIKICAgIClgOwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL2RlZmF1bHRUeXBlcy5qcwogIHZhciBkZWZhdWx0VHlwZXNfZGVmYXVsdCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdXRvU3FsU2NoZW1hc19leHBvcnRzKS5tYXAoKFtrZXksIHZhbF0pID0+IFsKICAgIGtleSwKICAgICgwLCBpbXBvcnRfYXV0b1NxbC5wYXJzZSkodmFsLnRyaW0oKSkKICBdKSk7CgogIC8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZ21vZCtiZWRAMi4xLjIvbm9kZV9tb2R1bGVzL0BnbW9kL2JlZC9lc20vdXRpbC5qcwogIGluaXRfYnVmZmVyX3NoaW0oKTsKICBmdW5jdGlvbiBkZXRlY3RUeXBlcyhhdXRvU3FsKSB7CiAgICBjb25zdCBudW1lcmljVHlwZXMgPSBbInVpbnQiLCAiaW50IiwgImZsb2F0IiwgImxvbmciXTsKICAgIHJldHVybiB7CiAgICAgIC4uLmF1dG9TcWwsCiAgICAgIGZpZWxkczogYXV0b1NxbC5maWVsZHMubWFwKChhdXRvRmllbGQpID0+ICh7CiAgICAgICAgLi4uYXV0b0ZpZWxkLAogICAgICAgIGlzQXJyYXk6IGF1dG9GaWVsZC5zaXplICYmIGF1dG9GaWVsZC50eXBlICE9PSAiY2hhciIsCiAgICAgICAgYXJyYXlJc051bWVyaWM6IGF1dG9GaWVsZC5zaXplICYmIG51bWVyaWNUeXBlcy5pbmNsdWRlcyhhdXRvRmllbGQudHlwZSksCiAgICAgICAgaXNOdW1lcmljOiAhYXV0b0ZpZWxkLnNpemUgJiYgbnVtZXJpY1R5cGVzLmluY2x1ZGVzKGF1dG9GaWVsZC50eXBlKQogICAgICB9KSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL3BhcnNlci5qcwogIHZhciBzdHJhbmRNYXAgPSB7ICIuIjogMCwgIi0iOiAtMSwgIisiOiAxIH07CiAgZnVuY3Rpb24gaXNCZWQxMkxpa2UoZmllbGRzKSB7CiAgICB2YXIgX2E7CiAgICByZXR1cm4gZmllbGRzLmxlbmd0aCA+PSAxMiAmJiAhTnVtYmVyLmlzTmFOKHBhcnNlSW50KGZpZWxkc1s5XSwgMTApKSAmJiAoKF9hID0gZmllbGRzWzEwXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwbGl0KCIsIikuZmlsdGVyKChmKSA9PiAhIWYpLmxlbmd0aCkgPT09IHBhcnNlSW50KGZpZWxkc1s5XSwgMTApOwogIH0KICB2YXIgQkVEID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoYXJncyA9IHt9KSB7CiAgICAgIGlmIChhcmdzLmF1dG9TcWwpIHsKICAgICAgICB0aGlzLmF1dG9TcWwgPSBkZXRlY3RUeXBlcyhpbXBvcnRfYXV0b1NxbDIuZGVmYXVsdC5wYXJzZShhcmdzLmF1dG9TcWwpKTsKICAgICAgfSBlbHNlIGlmIChhcmdzLnR5cGUpIHsKICAgICAgICBpZiAoIWRlZmF1bHRUeXBlc19kZWZhdWx0W2FyZ3MudHlwZV0pIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHlwZSBub3QgZm91bmQiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5hdXRvU3FsID0gZGV0ZWN0VHlwZXMoZGVmYXVsdFR5cGVzX2RlZmF1bHRbYXJncy50eXBlXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hdXRvU3FsID0gZGV0ZWN0VHlwZXMoZGVmYXVsdFR5cGVzX2RlZmF1bHQuZGVmYXVsdEJlZFNjaGVtYSk7CiAgICAgICAgdGhpcy5hdHRlbXB0RGVmYXVsdEJlZCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHBhcnNlTGluZShsaW5lLCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgeyBhdXRvU3FsIH0gPSB0aGlzOwogICAgICBjb25zdCB7IHVuaXF1ZUlkIH0gPSBvcHRzOwogICAgICBjb25zdCBmaWVsZHMgPSBBcnJheS5pc0FycmF5KGxpbmUpID8gbGluZSA6IGxpbmUuc3BsaXQoIgkiKTsKICAgICAgbGV0IGZlYXR1cmUgPSB7fTsKICAgICAgaWYgKCF0aGlzLmF0dGVtcHREZWZhdWx0QmVkIHx8IHRoaXMuYXR0ZW1wdERlZmF1bHRCZWQgJiYgaXNCZWQxMkxpa2UoZmllbGRzKSkgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXV0b1NxbC5maWVsZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IGF1dG9GaWVsZCA9IGF1dG9TcWwuZmllbGRzW2ldOwogICAgICAgICAgbGV0IGNvbHVtblZhbCA9IGZpZWxkc1tpXTsKICAgICAgICAgIGNvbnN0IHsgaXNOdW1lcmljLCBpc0FycmF5OiBpc0FycmF5MiwgYXJyYXlJc051bWVyaWMsIG5hbWUgfSA9IGF1dG9GaWVsZDsKICAgICAgICAgIGlmIChjb2x1bW5WYWwgPT09IG51bGwgfHwgY29sdW1uVmFsID09PSB2b2lkIDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29sdW1uVmFsICE9PSAiLiIpIHsKICAgICAgICAgICAgaWYgKGlzTnVtZXJpYykgewogICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcihjb2x1bW5WYWwpOwogICAgICAgICAgICAgIGNvbHVtblZhbCA9IE51bWJlci5pc05hTihudW0pID8gY29sdW1uVmFsIDogbnVtOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkyKSB7CiAgICAgICAgICAgICAgY29sdW1uVmFsID0gY29sdW1uVmFsLnNwbGl0KCIsIik7CiAgICAgICAgICAgICAgaWYgKGNvbHVtblZhbFtjb2x1bW5WYWwubGVuZ3RoIC0gMV0gPT09ICIiKSB7CiAgICAgICAgICAgICAgICBjb2x1bW5WYWwucG9wKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhcnJheUlzTnVtZXJpYykgewogICAgICAgICAgICAgICAgY29sdW1uVmFsID0gY29sdW1uVmFsLm1hcCgoc3RyKSA9PiBOdW1iZXIoc3RyKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZlYXR1cmVbbmFtZV0gPSBjb2x1bW5WYWw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBbImNocm9tIiwgImNocm9tU3RhcnQiLCAiY2hyb21FbmQiLCAibmFtZSJdOwogICAgICAgIGZlYXR1cmUgPSBPYmplY3QuZnJvbUVudHJpZXMoZmllbGRzLm1hcCgoZiwgaSkgPT4gW2ZpZWxkTmFtZXNbaV0gfHwgImZpZWxkIiArIGksIGZdKSk7CiAgICAgICAgZmVhdHVyZS5jaHJvbVN0YXJ0ID0gK2ZlYXR1cmUuY2hyb21TdGFydDsKICAgICAgICBmZWF0dXJlLmNocm9tRW5kID0gK2ZlYXR1cmUuY2hyb21FbmQ7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoZmVhdHVyZS5maWVsZDQpKSkgewogICAgICAgICAgZmVhdHVyZS5zY29yZSA9ICtmZWF0dXJlLmZpZWxkNDsKICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLmZpZWxkNDsKICAgICAgICB9CiAgICAgICAgaWYgKGZlYXR1cmUuZmllbGQ1ID09PSAiKyIgfHwgZmVhdHVyZS5maWVsZDUgPT09ICItIikgewogICAgICAgICAgZmVhdHVyZS5zdHJhbmQgPSBmZWF0dXJlLmZpZWxkNTsKICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLmZpZWxkNTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHVuaXF1ZUlkKSB7CiAgICAgICAgZmVhdHVyZS51bmlxdWVJZCA9IHVuaXF1ZUlkOwogICAgICB9CiAgICAgIGZlYXR1cmUuc3RyYW5kID0gc3RyYW5kTWFwW2ZlYXR1cmUuc3RyYW5kXSB8fCAwOwogICAgICBmZWF0dXJlLmNocm9tID0gZGVjb2RlVVJJQ29tcG9uZW50KGZlYXR1cmUuY2hyb20pOwogICAgICByZXR1cm4gZmVhdHVyZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvLnBucG0vQGdtb2QrYmVkQDIuMS4yL25vZGVfbW9kdWxlcy9AZ21vZC9iZWQvZXNtL2luZGV4LmpzCiAgdmFyIGVzbV9kZWZhdWx0ID0gQkVEOwoKICAvLyBzcmMvZGF0YS1mZXRjaGVycy9iZWQvYmVkLXBhcnNlci50cwogIHZhciBERUZBVUxUX0JFRF9TQ0hFTUEgPSBgdGFibGUgZGVmYXVsdEJlZFNjaGVtYQoiQkVEMTIiCiAgICAoCiAgICBzdHJpbmcgY2hyb207ICAgICAgIlRoZSBuYW1lIG9mIHRoZSBjaHJvbW9zb21lIChlLmcuIGNocjMsIGNoclksIGNocjJfcmFuZG9tKSBvciBzY2FmZm9sZCAoZS5nLiBzY2FmZm9sZDEwNjcxKS4iCiAgICB1aW50ICAgY2hyb21TdGFydDsgIlRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgY2hyb21vc29tZSBvciBzY2FmZm9sZC4gVGhlIGZpcnN0IGJhc2UgaW4gYSBjaHJvbW9zb21lIGlzIG51bWJlcmVkIDAuIgogICAgdWludCAgIGNocm9tRW5kOyAgICJUaGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBmZWF0dXJlIGluIHRoZSBjaHJvbW9zb21lIG9yIHNjYWZmb2xkLiBUaGUgY2hyb21FbmQgYmFzZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRpc3BsYXkgb2YgdGhlIGZlYXR1cmUuIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgMTAwIGJhc2VzIG9mIGEgY2hyb21vc29tZSBhcmUgZGVmaW5lZCBhcyBjaHJvbVN0YXJ0PTAsIGNocm9tRW5kPTEwMCwgYW5kIHNwYW4gdGhlIGJhc2VzIG51bWJlcmVkIDAtOTkuIgogICAgc3RyaW5nICAgbmFtZTsgICAiRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgQkVEIGxpbmUuIgogICAgZmxvYXQgICBzY29yZTsgICAiRmVhdHVyZSBzY29yZSwgZG9lc24ndCBjYXJlIGFib3V0IHRoZSAwLTEwMDAgbGltaXQgYXMgaW4gYmVkIgogICAgY2hhciAgIHN0cmFuZDsgICAiRGVmaW5lcyB0aGUgc3RyYW5kLiBFaXRoZXIgJy4nICg9bm8gc3RyYW5kKSBvciAnKycgb3IgJy0nIgogICAgdWludCB0aGlja1N0YXJ0OyAiVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBmZWF0dXJlIGlzIGRyYXduIHRoaWNrbHkgKGZvciBleGFtcGxlLCB0aGUgc3RhcnQgY29kb24gaW4gZ2VuZSBkaXNwbGF5cykuIFdoZW4gdGhlcmUgaXMgbm8gdGhpY2sgcGFydCwgdGhpY2tTdGFydCBhbmQgdGhpY2tFbmQgYXJlIHVzdWFsbHkgc2V0IHRvIHRoZSBjaHJvbVN0YXJ0IHBvc2l0aW9uLiIKICAgIHVpbnQgdGhpY2tFbmQ7ICJUaGUgZW5kaW5nIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBmZWF0dXJlIGlzIGRyYXduIHRoaWNrbHkgKGZvciBleGFtcGxlIHRoZSBzdG9wIGNvZG9uIGluIGdlbmUgZGlzcGxheXMpLiIKICAgIHN0cmluZyBpdGVtUmdiOyAiQW4gUkdCIHZhbHVlIG9mIHRoZSBmb3JtIFIsRyxCIChlLmcuIDI1NSwwLDApLiAiCiAgICB1aW50IGJsb2NrQ291bnQ7ICIgVGhlIG51bWJlciBvZiBibG9ja3MgKGV4b25zKSBpbiB0aGUgQkVEIGxpbmUuIgogICAgdWludFtibG9ja0NvdW50XSBibG9ja1NpemVzOyAiIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGJsb2NrIHNpemVzLiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgbGlzdCBzaG91bGQgY29ycmVzcG9uZCB0byBibG9ja0NvdW50LiIKICAgIHVpbnRbYmxvY2tDb3VudF0gYmxvY2tTdGFydHM7ICJBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrIHN0YXJ0cy4gQWxsIG9mIHRoZSBibG9ja1N0YXJ0IHBvc2l0aW9ucyBzaG91bGQgYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBjaHJvbVN0YXJ0LiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgbGlzdCBzaG91bGQgY29ycmVzcG9uZCB0byBibG9ja0NvdW50LiIKICAgIClgOwogIHZhciBCZWRQYXJzZXIgPSBjbGFzcyB7CiAgICAjY3VzdG9tRmllbGRzOwogICAgI25fY29sdW1uczsKICAgICNwYXJzZXI7CiAgICBjb25zdHJ1Y3RvcihvcHQpIHsKICAgICAgdGhpcy4jY3VzdG9tRmllbGRzID0gb3B0Py5jdXN0b21GaWVsZHM7CiAgICAgIHRoaXMuI25fY29sdW1ucyA9IG9wdD8ubl9jb2x1bW5zOwogICAgICBpZiAodGhpcy4jY3VzdG9tRmllbGRzKSB7CiAgICAgICAgY29uc3QgY3VzdG9tQXV0b1NxbFNjaGVtYSA9IHRoaXMuY29uc3RydWN0QmVkQXV0b1NxbCgpOwogICAgICAgIHRoaXMuI3BhcnNlciA9IG5ldyBlc21fZGVmYXVsdCh7IGF1dG9TcWw6IGN1c3RvbUF1dG9TcWxTY2hlbWEgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4jcGFyc2VyID0gbmV3IGVzbV9kZWZhdWx0KHsgYXV0b1NxbDogREVGQVVMVF9CRURfU0NIRU1BIH0pOwogICAgICB9CiAgICB9CiAgICBwYXJzZUxpbmUobGluZSwgY2hyb21TdGFydCkgewogICAgICBmdW5jdGlvbiByZWxhdGl2ZVRvQ3VtdWxhdGl2ZShwb3MsIGNocm9tU3RhcnQyKSB7CiAgICAgICAgcmV0dXJuIGNocm9tU3RhcnQyICsgcG9zICsgMTsKICAgICAgfQogICAgICBjb25zdCBiZWRSZWNvcmQgPSB0aGlzLiNwYXJzZXIucGFyc2VMaW5lKGxpbmUpOwogICAgICBjb25zdCBmaWVsZHNUb0NvbnZlcnQgPSBbImNocm9tU3RhcnQiLCAiY2hyb21FbmQiLCAidGhpY2tFbmQiLCAidGhpY2tTdGFydCJdOwogICAgICBmaWVsZHNUb0NvbnZlcnQuZm9yRWFjaCgoZmllbGQpID0+IHsKICAgICAgICBpZiAoYmVkUmVjb3JkW2ZpZWxkXSkKICAgICAgICAgIGJlZFJlY29yZFtmaWVsZF0gPSByZWxhdGl2ZVRvQ3VtdWxhdGl2ZShiZWRSZWNvcmRbZmllbGRdLCBjaHJvbVN0YXJ0KTsKICAgICAgfSk7CiAgICAgIHJldHVybiBiZWRSZWNvcmQ7CiAgICB9CiAgICBjb25zdHJ1Y3RCZWRBdXRvU3FsKCkgewogICAgICBjb25zdCBBVVRPX1NRTF9IRUFERVIgPSBgdGFibGUgY3VzdG9tQmVkU2NoZW1hCiJCRUQxMiIKICAgICgKYDsKICAgICAgY29uc3QgQVVUT19TUUxfRk9PVEVSID0gIlxuICAgICkiOwogICAgICBjb25zdCBhdXRvU3FsRmllbGRzID0gdGhpcy4jZ2VuZXJhdGVBdXRvU1FMRmllbGRzKCk7CiAgICAgIHJldHVybiBTdHJpbmcucHJvdG90eXBlLmNvbmNhdChBVVRPX1NRTF9IRUFERVIsIGF1dG9TcWxGaWVsZHMsIEFVVE9fU1FMX0ZPT1RFUik7CiAgICB9CiAgICAjZ2VuZXJhdGVBdXRvU1FMRmllbGRzKCkgewogICAgICBjb25zdCBCRUQxMkZpZWxkcyA9IFsKICAgICAgICBbInN0cmluZyIsICJjaHJvbSJdLAogICAgICAgIFsidWludCIsICJjaHJvbVN0YXJ0Il0sCiAgICAgICAgWyJ1aW50IiwgImNocm9tRW5kIl0sCiAgICAgICAgWyJzdHJpbmciLCAibmFtZSJdLAogICAgICAgIFsiZmxvYXQiLCAic2NvcmUiXSwKICAgICAgICBbImNoYXIiLCAic3RyYW5kIl0sCiAgICAgICAgWyJ1aW50IiwgInRoaWNrU3RhcnQiXSwKICAgICAgICBbInVpbnQiLCAidGhpY2tFbmQiXSwKICAgICAgICBbInN0cmluZyIsICJpdGVtUmdiIl0sCiAgICAgICAgWyJ1aW50IiwgImJsb2NrQ291bnQiXSwKICAgICAgICBbInVpbnRbYmxvY2tDb3VudF0iLCAiYmxvY2tTaXplcyJdLAogICAgICAgIFsidWludFtibG9ja0NvdW50XSIsICJibG9ja1N0YXJ0cyJdCiAgICAgIF07CiAgICAgIGlmICghdGhpcy4jbl9jb2x1bW5zKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVtYmVyIG9mIGNvbHVtbnMgd2FzIG5vdCBhYmxlIHRvIGJlIGRldGVybWluZWQiKTsKICAgICAgaWYgKCF0aGlzLiNjdXN0b21GaWVsZHMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBjb25zdCBjdXN0b21GaWVsZFR5cGUgPSAic3RyaW5nIjsKICAgICAgY29uc3QgY3VzdG9tRmllbGRzV2l0aFR5cGVzID0gdGhpcy4jY3VzdG9tRmllbGRzLm1hcCgoY29sdW1uKSA9PiBbY3VzdG9tRmllbGRUeXBlLCBjb2x1bW5dKTsKICAgICAgbGV0IGFsbEZpZWxkczsKICAgICAgY29uc3QgUkVRVUlSRURfQ09MUyA9IDM7CiAgICAgIGlmICh0aGlzLiNuX2NvbHVtbnMgPiBCRUQxMkZpZWxkcy5sZW5ndGgpIHsKICAgICAgICBpZiAodGhpcy4jbl9jb2x1bW5zICE9PSBCRUQxMkZpZWxkcy5sZW5ndGggKyB0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJFRCBmaWxlIGVycm9yOiB1bmV4cGVjdGVkIG51bWJlciBvZiBjdXN0b20gZmllbGRzLiBGb3VuZCAke3RoaXMuI25fY29sdW1uc30gY29sdW1ucyAKICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZXhwZWN0ZWQgJHtCRUQxMkZpZWxkcy5sZW5ndGggKyB0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RofWApOwogICAgICAgIH0KICAgICAgICBhbGxGaWVsZHMgPSBCRUQxMkZpZWxkcy5jb25jYXQoY3VzdG9tRmllbGRzV2l0aFR5cGVzKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLiNuX2NvbHVtbnMgPj0gUkVRVUlSRURfQ09MUyArIHRoaXMuI2N1c3RvbUZpZWxkcy5sZW5ndGgpIHsKICAgICAgICBhbGxGaWVsZHMgPSBCRUQxMkZpZWxkcy5zbGljZSgwLCB0aGlzLiNuX2NvbHVtbnMgLSB0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RoKS5jb25jYXQoY3VzdG9tRmllbGRzV2l0aFR5cGVzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7UkVRVUlSRURfQ09MUyArIHRoaXMuI2N1c3RvbUZpZWxkcy5sZW5ndGh9IGNvbHVtbnMgKCR7UkVRVUlSRURfQ09MU30gcmVxdWlyZWQgY29sdW1ucyBhbmQgJHt0aGlzLiNjdXN0b21GaWVsZHMubGVuZ3RofSBjdXN0b20gY29sdW1ucykgYnV0IGZvdW5kICR7dGhpcy4jbl9jb2x1bW5zfSBjb2x1bW5zYCk7CiAgICAgIH0KICAgICAgY29uc3QgZmllbGREZXNjcmlwdGlvbiA9ICJjdXN0b20gaW5wdXQiOwogICAgICBjb25zdCBhdXRvU3FsRmllbGRzID0gYWxsRmllbGRzLm1hcCgoZmllbGRJbmZvKSA9PiBgICAgICR7ZmllbGRJbmZvWzBdfSAke2ZpZWxkSW5mb1sxXX07ICIke2ZpZWxkRGVzY3JpcHRpb259ImApLmpvaW4oIlxuIik7CiAgICAgIHJldHVybiBhdXRvU3FsRmllbGRzOwogICAgfQogIH07CiAgdmFyIGJlZF9wYXJzZXJfZGVmYXVsdCA9IEJlZFBhcnNlcjsKCiAgLy8gc3JjL2RhdGEtZmV0Y2hlcnMvYmVkL2JlZC13b3JrZXIudHM/d29ya2VyJmlubGluZT93b3JrZXJfZmlsZQogIHZhciBCZWRGaWxlID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodGJpLCB1aWQpIHsKICAgICAgdGhpcy50YmkgPSB0Ymk7CiAgICAgIHRoaXMuI3VpZCA9IHVpZDsKICAgIH0KICAgICNwYXJzZXI7CiAgICAjY3VzdG9tRmllbGRzOwogICAgI3VpZDsKICAgIHN0YXRpYyBmcm9tVXJsKHVybCwgaW5kZXhVcmwsIHVpZCwgdXJsRmV0Y2hPcHRpb25zLCBpbmRleFVybEZldGNoT3B0aW9ucykgewogICAgICBjb25zdCB0YmkgPSBuZXcgVGFiaXhJbmRleGVkRmlsZSh7CiAgICAgICAgZmlsZWhhbmRsZTogbmV3IFJlbW90ZUZpbGUyKHVybCwgeyBvdmVycmlkZXM6IHVybEZldGNoT3B0aW9ucyB9KSwKICAgICAgICB0YmlGaWxlaGFuZGxlOiBuZXcgUmVtb3RlRmlsZTIoaW5kZXhVcmwsIHsgb3ZlcnJpZGVzOiBpbmRleFVybEZldGNoT3B0aW9ucyB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBCZWRGaWxlKHRiaSwgdWlkKTsKICAgIH0KICAgIHNldCBjdXN0b21GaWVsZHMoY3VzdG9tKSB7CiAgICAgIHRoaXMuI2N1c3RvbUZpZWxkcyA9IGN1c3RvbTsKICAgIH0KICAgIGFzeW5jIGdldFBhcnNlcigpIHsKICAgICAgaWYgKCF0aGlzLiNwYXJzZXIpIHsKICAgICAgICBjb25zdCBvcHQgPSB0aGlzLiNjdXN0b21GaWVsZHMgPyB7IGN1c3RvbUZpZWxkczogdGhpcy4jY3VzdG9tRmllbGRzLCBuX2NvbHVtbnM6IGF3YWl0IHRoaXMuI2NhbGNOQ29sdW1ucygpIH0gOiB2b2lkIDA7CiAgICAgICAgdGhpcy4jcGFyc2VyID0gbmV3IGJlZF9wYXJzZXJfZGVmYXVsdChvcHQpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLiNwYXJzZXI7CiAgICB9CiAgICBhc3luYyAjY2FsY05Db2x1bW5zKCkgewogICAgICBjb25zdCBzb3VyY2UgPSBkYXRhU291cmNlcy5nZXQodGhpcy4jdWlkKTsKICAgICAgY29uc3QgeyBjaHJvbUxlbmd0aHMsIGN1bVBvc2l0aW9ucyB9ID0gc291cmNlLmNocm9tSW5mbzsKICAgICAgbGV0IG5fY29scyA9IDA7CiAgICAgIGZvciAoY29uc3QgY3VtUG9zIG9mIGN1bVBvc2l0aW9ucykgewogICAgICAgIGNvbnN0IGNocm9tTmFtZSA9IGN1bVBvcy5jaHI7CiAgICAgICAgY29uc3QgY2hyb21TdGFydCA9IGN1bVBvcy5wb3M7CiAgICAgICAgY29uc3QgY2hyb21FbmQgPSBjdW1Qb3MucG9zICsgY2hyb21MZW5ndGhzW2Nocm9tTmFtZV07CiAgICAgICAgbl9jb2xzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgICAgIHNvdXJjZS5maWxlLnRiaS5nZXRMaW5lcyhjaHJvbU5hbWUsIGNocm9tU3RhcnQsIGNocm9tRW5kLCAobGluZSkgPT4gewogICAgICAgICAgICByZXNvbHZlKGxpbmUuc3BsaXQoIgkiKS5sZW5ndGgpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKG5fY29scyA+IDApCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICByZXR1cm4gbl9jb2xzOwogICAgfQogICAgYXN5bmMgZ2V0VGlsZURhdGEobWluWCwgbWF4WCkgewogICAgICBjb25zdCBzb3VyY2UgPSBkYXRhU291cmNlcy5nZXQodGhpcy4jdWlkKTsKICAgICAgY29uc3QgcGFyc2VyMiA9IGF3YWl0IHRoaXMuZ2V0UGFyc2VyKCk7CiAgICAgIGxldCBjdXJNaW5YID0gbWluWDsKICAgICAgY29uc3QgeyBjaHJvbUxlbmd0aHMsIGN1bVBvc2l0aW9ucyB9ID0gc291cmNlLmNocm9tSW5mbzsKICAgICAgY29uc3QgYWxsVGlsZXMgPSBbXTsKICAgICAgZm9yIChjb25zdCBjdW1Qb3Mgb2YgY3VtUG9zaXRpb25zKSB7CiAgICAgICAgY29uc3QgY2hyb21OYW1lID0gY3VtUG9zLmNocjsKICAgICAgICBjb25zdCBjaHJvbVN0YXJ0ID0gY3VtUG9zLnBvczsKICAgICAgICBjb25zdCBjaHJvbUVuZCA9IGN1bVBvcy5wb3MgKyBjaHJvbUxlbmd0aHNbY2hyb21OYW1lXTsKICAgICAgICBsZXQgc3RhcnRQb3MsIGVuZFBvczsKICAgICAgICBpZiAoY2hyb21TdGFydCA+IGN1ck1pblggfHwgY3VyTWluWCA+PSBjaHJvbUVuZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRpbGVzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgICAgICBjb25zdCB0aWxlcyA9IFtdOwogICAgICAgICAgY29uc3QgbGluZUNhbGxiYWNrID0gKGxpbmUpID0+IHsKICAgICAgICAgICAgY29uc3QgYmVkVGlsZSA9IHBhcnNlcjIucGFyc2VMaW5lKGxpbmUsIGNocm9tU3RhcnQpOwogICAgICAgICAgICB0aWxlcy5wdXNoKGJlZFRpbGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmIChtYXhYID4gY2hyb21FbmQpIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBjdXJNaW5YIC0gY2hyb21TdGFydDsKICAgICAgICAgICAgZW5kUG9zID0gY2hyb21FbmQgLSBjaHJvbVN0YXJ0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhcnRQb3MgPSBNYXRoLmZsb29yKGN1ck1pblggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgICAgZW5kUG9zID0gTWF0aC5jZWlsKG1heFggLSBjaHJvbVN0YXJ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHNvdXJjZS5maWxlLnRiaS5nZXRMaW5lcyhjaHJvbU5hbWUsIHN0YXJ0UG9zLCBlbmRQb3MsIGxpbmVDYWxsYmFjaykudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHJlc29sdmUodGlsZXMpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgYWxsVGlsZXMucHVzaCh0aWxlc1Byb21pc2UpOwogICAgICAgIGlmIChtYXhYIDw9IGNocm9tRW5kKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY3VyTWluWCA9IGNocm9tRW5kOwogICAgICB9CiAgICAgIGNvbnN0IHRpbGVBcnJheXMgPSBhd2FpdCBQcm9taXNlLmFsbChhbGxUaWxlcyk7CiAgICAgIHJldHVybiB0aWxlQXJyYXlzLmZsYXQoKTsKICAgIH0KICB9OwogIHZhciBiZWRGaWxlcyA9IG5ldyBNYXAoKTsKICB2YXIgdGlsZVZhbHVlcyA9IHt9OwogIHZhciBkYXRhU291cmNlcyA9IG5ldyBNYXAoKTsKICBmdW5jdGlvbiBpbml0KHVpZCwgYmVkLCBjaHJvbVNpemVzLCBvcHRpb25zID0ge30pIHsKICAgIGxldCBiZWRGaWxlID0gYmVkRmlsZXMuZ2V0KGJlZC51cmwpOwogICAgaWYgKCFiZWRGaWxlKSB7CiAgICAgIGJlZEZpbGUgPSBCZWRGaWxlLmZyb21VcmwoYmVkLnVybCwgYmVkLmluZGV4VXJsLCB1aWQsIG9wdGlvbnMudXJsRmV0Y2hPcHRpb25zLCBvcHRpb25zLmluZGV4VXJsRmV0Y2hPcHRpb25zKTsKICAgICAgaWYgKG9wdGlvbnMuY3VzdG9tRmllbGRzKQogICAgICAgIGJlZEZpbGUuY3VzdG9tRmllbGRzID0gb3B0aW9ucy5jdXN0b21GaWVsZHM7CiAgICB9CiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IERhdGFTb3VyY2UoYmVkRmlsZSwgY2hyb21TaXplcywgewogICAgICBzYW1wbGVMZW5ndGg6IDFlMywKICAgICAgLi4ub3B0aW9ucwogICAgfSk7CiAgICBkYXRhU291cmNlcy5zZXQodWlkLCBkYXRhU291cmNlKTsKICB9CiAgdmFyIHRpbGVzZXRJbmZvID0gKHVpZCkgPT4gewogICAgcmV0dXJuIGRhdGFTb3VyY2VzLmdldCh1aWQpLnRpbGVzZXRJbmZvOwogIH07CiAgdmFyIHRpbGUgPSBhc3luYyAodWlkLCB6LCB4KSA9PiB7CiAgICBjb25zdCBzb3VyY2UgPSBkYXRhU291cmNlcy5nZXQodWlkKTsKICAgIGNvbnN0IENBQ0hFX0tFWSA9IGAke3VpZH0uJHt6fS4ke3h9YDsKICAgIHRpbGVWYWx1ZXNbQ0FDSEVfS0VZXSA9IFtdOwogICAgY29uc3QgdGlsZVdpZHRoID0gK3NvdXJjZS50aWxlc2V0SW5mby5tYXhfd2lkdGggLyAyICoqICt6OwogICAgY29uc3QgbWluWCA9IHNvdXJjZS50aWxlc2V0SW5mby5taW5fcG9zWzBdICsgeCAqIHRpbGVXaWR0aDsKICAgIGNvbnN0IG1heFggPSBzb3VyY2UudGlsZXNldEluZm8ubWluX3Bvc1swXSArICh4ICsgMSkgKiB0aWxlV2lkdGg7CiAgICB0aWxlVmFsdWVzW0NBQ0hFX0tFWV0gPSBhd2FpdCBzb3VyY2UuZmlsZS5nZXRUaWxlRGF0YShtaW5YLCBtYXhYKTsKICAgIHJldHVybiB0aWxlVmFsdWVzW0NBQ0hFX0tFWV07CiAgfTsKICB2YXIgZmV0Y2hUaWxlc0RlYm91bmNlZCA9IGFzeW5jICh1aWQsIHRpbGVJZHMpID0+IHsKICAgIGNvbnN0IHRpbGVzID0ge307CiAgICBjb25zdCB2YWxpZFRpbGVJZHMgPSBbXTsKICAgIGNvbnN0IHRpbGVQcm9taXNlcyA9IFtdOwogICAgZm9yIChjb25zdCB0aWxlSWQgb2YgdGlsZUlkcykgewogICAgICBjb25zdCBwYXJ0cyA9IHRpbGVJZC5zcGxpdCgiLiIpOwogICAgICBjb25zdCB6ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTsKICAgICAgY29uc3QgeCA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7CiAgICAgIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHopKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJJbnZhbGlkIHRpbGUgem9vbSBvciBwb3NpdGlvbjoiLCB6LCB4KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YWxpZFRpbGVJZHMucHVzaCh0aWxlSWQpOwogICAgICB0aWxlUHJvbWlzZXMucHVzaCh0aWxlKHVpZCwgeiwgeCkpOwogICAgfQogICAgcmV0dXJuIFByb21pc2UuYWxsKHRpbGVQcm9taXNlcykudGhlbigodmFsdWVzMikgPT4gewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlczIubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB2YWxpZFRpbGVJZCA9IHZhbGlkVGlsZUlkc1tpXTsKICAgICAgICB0aWxlc1t2YWxpZFRpbGVJZF0gPSB7IHRpbGVQb3NpdGlvbklkOiB2YWxpZFRpbGVJZCB9OwogICAgICB9CiAgICAgIHJldHVybiB0aWxlczsKICAgIH0pOwogIH07CiAgdmFyIGdldFRhYnVsYXJEYXRhID0gKHVpZCwgdGlsZUlkcykgPT4gewogICAgY29uc3QgZGF0YSA9IFtdOwogICAgdGlsZUlkcy5mb3JFYWNoKCh0aWxlSWQpID0+IHsKICAgICAgY29uc3QgcGFydHMgPSB0aWxlSWQuc3BsaXQoIi4iKTsKICAgICAgY29uc3QgeiA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7CiAgICAgIGNvbnN0IHggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApOwogICAgICBjb25zdCB0aWxlVmFsdWUgPSB0aWxlVmFsdWVzW2Ake3VpZH0uJHt6fS4ke3h9YF07CiAgICAgIGlmICghdGlsZVZhbHVlKSB7CiAgICAgICAgY29uc29sZS53YXJuKGBObyB0aWxlIGRhdGEgY29uc3RydWN0ZWQgKCR7dGlsZUlkfSlgKTsKICAgICAgfQogICAgICBkYXRhLnB1c2godGlsZVZhbHVlKTsKICAgIH0pOwogICAgbGV0IG91dHB1dCA9IE9iamVjdC52YWx1ZXMoZGF0YSkuZmxhdCgpOwogICAgY29uc3Qgc2FtcGxlTGVuZ3RoID0gZGF0YVNvdXJjZXMuZ2V0KHVpZCkub3B0aW9ucy5zYW1wbGVMZW5ndGg7CiAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBzYW1wbGVMZW5ndGgpIHsKICAgICAgb3V0cHV0ID0gc2FtcGxlU2l6ZV9kZWZhdWx0KG91dHB1dCwgc2FtcGxlTGVuZ3RoIC8gMik7CiAgICB9CiAgICBjb25zdCBidWZmZXIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkob3V0cHV0KSkuYnVmZmVyOwogICAgcmV0dXJuIFRyYW5zZmVyKGJ1ZmZlciwgW2J1ZmZlcl0pOwogIH07CiAgdmFyIHRpbGVGdW5jdGlvbnMgPSB7CiAgICBpbml0LAogICAgdGlsZXNldEluZm8sCiAgICBmZXRjaFRpbGVzRGVib3VuY2VkLAogICAgdGlsZSwKICAgIGdldFRhYnVsYXJEYXRhCiAgfTsKICBleHBvc2UodGlsZUZ1bmN0aW9ucyk7Cn0pKCk7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPSJlcyIgLW8gLi9gCiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPgogKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKICovCg==",hce=typeof window<"u"&&window.Blob&&new Blob([atob(cHe)],{type:"text/javascript;charset=utf-8"});function Gng(){const e=hce&&(window.URL||window.webkitURL).createObjectURL(hce);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+cHe,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const vng=200;class uHe{constructor(g,i){Ct(this,"dataConfig",{}),Ct(this,"uid"),Ct(this,"prevRequestTime"),Ct(this,"track"),Ct(this,"toFetch"),Ct(this,"fetchTimeout"),Ct(this,"worker"),this.uid=g.libraries.slugid.nice(),this.prevRequestTime=0,this.toFetch=new Set;const{url:I,indexUrl:n,assembly:r,...C}=i;this.worker=tN(new Gng).then(async o=>{const a=Object.entries(yi(r).size);return await o.init(this.uid,{url:I,indexUrl:n},a,C),o})}async tilesetInfo(g){(await this.worker).tilesetInfo(this.uid).then(g)}fetchTilesDebounced(g,i){this.track.drawLoadingCue(),i.forEach(I=>this.toFetch.add(I)),this.fetchTimeout&&clearTimeout(this.fetchTimeout),this.fetchTimeout=setTimeout(()=>{this.sendFetch(g,[...this.toFetch]),this.toFetch.clear()},vng)}async sendFetch(g,i){(await this.worker).fetchTilesDebounced(this.uid,i).then(g)}async getTabularData(g){const i=await(await this.worker).getTabularData(this.uid,g);return JSON.parse(new TextDecoder().decode(i))}}Ct(uHe,"config",{type:"bed"});const Bng=Object.freeze(Object.defineProperty({__proto__:null,BamDataFetcher:HH,BedDataFetcher:uHe,BigWigDataFetcher:CHe,CsvDataFetcher:aHe,GffDataFetcher:lHe,JsonDataFetcher:AHe,VcfDataFetcher:k2e},Symbol.toStringTag,{value:"Module"})),Sng="gosling-data-row-uid";function wng(e,g){var i,I,n,r,C,o,a,s,A,l,c,u,d,h,m,f;const b=[];if(!p7(e.data)){console.warn("No data is specified");return}if(e.data.type==="vector"||e.data.type==="bigwig"){if(!("dense"in g))return;const p=(i=e.data.binSize)!=null?i:1,y=g.dense,Z=g.tileSize,B=g.tileWidth/g.tileSize,G=(I=e.data.value)!=null?I:"value",v=(n=e.data.column)!=null?n:"position",w=(r=e.data.start)!=null?r:"start",V=(C=e.data.end)!=null?C:"end",S=`${G}_min`,X=`${G}_max`,W=(o=e.data.aggregation)!=null?o:"mean";let R=0,H=Number.MAX_SAFE_INTEGER,k=Number.MIN_SAFE_INTEGER,K=Number.MIN_SAFE_INTEGER,D=Number.MAX_SAFE_INTEGER;Array.from(Array(Z).keys()).forEach((J,P)=>{if(p===1){const te=y[P]/(W==="mean"?B:1);b.push({[G]:te,[v]:g.tileX+(P+.5)*B,[w]:g.tileX+P*B,[V]:g.tileX+(P+1)*B,[S]:te,[X]:te})}else if(P%p===0)R=H=k=y[P],K=P,D=P+p;else if(P%p===p-1)b.push({[G]:R/p/(W==="mean"?B:1),[v]:g.tileX+(K+p/2)*B,[w]:g.tileX+K*B,[V]:g.tileX+D*B,[S]:H,[X]:k});else if(P===Z-1){const te=Z%p,q=K+te;b.push({[G]:R/te/(W==="mean"?B:1),[v]:g.tileX+(K+te/2)*B,[w]:g.tileX+K*B,[V]:g.tileX+q*B,[S]:H,[X]:k})}else R+=y[P],H>y[P]&&(H=y[P]),k{let J=0,P=Number.MIN_SAFE_INTEGER,te=Number.MAX_SAFE_INTEGER,q=Number.MAX_SAFE_INTEGER,$=Number.MIN_SAFE_INTEGER;Array.from(Array(G).keys()).forEach((j,ge)=>{if(p===1){const Q=B[G*D+ge]/(k==="mean"?v:1);b.push({[w]:K,[V]:Q,[S]:g.tileX+(ge+.5)*v,[X]:g.tileX+ge*v,[W]:g.tileX+(ge+1)*v,[R]:Q,[H]:Q})}else if(ge%p===0)J=q=$=B[G*D+ge],P=ge,te=ge+p;else if(ge%p===p-1)b.push({[w]:K,[V]:k==="mean"?J/p/v:J,[S]:g.tileX+(P+p/2)*v,[X]:g.tileX+P*v,[W]:g.tileX+te*v,[R]:q,[H]:$});else if(ge===G-1){const Q=G%p,Ie=P+Q;b.push({[w]:K,[V]:k==="mean"?J/Q/v:J,[S]:g.tileX+(P+Q/2)*v,[X]:g.tileX+P*v,[W]:g.tileX+Ie*v,[R]:q,[H]:$})}else{const Q=B[G*D+ge];J+=Q,q>Q&&(q=Q),$"u"||typeof g.tileHeight>"u")return;const p=Math.sqrt(g.dense.length),{tileX:y,tileY:Z,tileWidth:B,tileHeight:G}=g,v=g.dense,w=B/p,V=G/p,S=(m=e.data.column)!=null?m:"x",X=(f=e.data.row)!=null?f:"y",W=16;for(let R=0;R{const{chrOffset:v,fields:w}=B,V={};if(V[Sng]=`${G}`,p.forEach(S=>{V[S.name]=+w[S.index]+v}),Z==null||Z.forEach(S=>{V[S.name]=S.type==="quantitative"?+w[S.index]:w[S.index]}),b.push({...V,type:"gene"}),y){const[S,X]=y,W=w[S.index].split(","),R=w[X.index].split(",");W.forEach((H,k)=>{const K=R[k];if(b.push({...V,[S.name]:+H+v,[X.name]:+K+v,type:"exon"}),k+1n===e.chromosome))){if(xje(e))return[i[e.chromosome][0]+1,i[e.chromosome][1]];if(Eje(e))return e.interval;if(Mje(e)){const I=i[e.chromosome][0],[n,r]=e.interval;return[I+n,I+r]}}}function Hng(e,g){const i={},I=Hd;e.forEach(n=>{I.forEach(r=>{const C=n.spec()[r];if(!ut(C)||C.domain===void 0)return;const{domain:o,type:a}=C;if(a==="quantitative"){const s=Array.from(o);if(!i[r])i[r]=s;else{const A=i[r];A[0]>s[0]&&(A[0]=s[0]),A[1]{I.forEach(r=>{const C=n.spec()[r];ut(C)&&C.type==="genomic"||(n.setChannelDomain(r,i[r],g),n.generateScales())}),n.updateChannelValue()})}const Tng={compactLayout:!1,trackSourceServers:["https://server.gosling-lang.org/api/v1/"],views:[{genomePositionSearchBoxVisible:!1,genomePositionSearchBox:{autocompleteServer:"https://higlass.io/api/v1",autocompleteId:"P0PLbQMwTYGy-5uPIQid7A",chromInfoServer:"https://higlass.io/api/v1",chromInfoId:"hg38"},layout:{x:0,y:0,w:6.4,h:600},tracks:{top:[],left:[{type:"combined",width:130,height:600,contents:[{type:"gosling-track",server:"https://server.gosling-lang.org/api/v1/",tilesetUid:"cistrome-multivec",width:130,height:600,options:{showMousePosition:!0,mousePositionColor:"#000000",fontSize:24,labelPosition:"none",labelShowResolution:!1,labelColor:"black",labelBackgroundColor:"white",labelTextOpacity:1,labelLeftMargin:1,labelTopMargin:1,labelRightMargin:0,labelBottomMargin:0,backgroundColor:"transparent",spec:{spacing:10,orientation:"vertical",assembly:"hg38",layout:"linear",static:!1,xDomain:{interval:[0,1e9]},centerRadius:.3,xOffset:0,yOffset:0,style:{outlineWidth:.5},data:{url:"https://server.gosling-lang.org/api/v1/tileset_info/?d=cistrome-multivec",type:"multivec",row:"sample",column:"position",value:"peak",categories:["sample 1","sample 2","sample 3","sample 4"],binSize:4},mark:"rect",x:{field:"start",type:"genomic",axis:"left",domain:{interval:[0,1e9]},linkingId:"7f94b74e-25ec-4e67-8c75-3dc0f1b0d6bd"},xe:{field:"end",type:"genomic"},row:{field:"sample",type:"nominal",legend:!0},color:{field:"peak",type:"quantitative",legend:!0},tooltip:[{field:"start",type:"genomic",alt:"Start Position"},{field:"end",type:"genomic",alt:"End Position"},{field:"peak",type:"quantitative",alt:"Value",format:".2"},{field:"sample",type:"nominal",alt:"Sample"}],width:160,height:600,overlayOnPreviousTrack:!1},theme:{base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},point:{color:"#E79F00",size:3,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rect:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},triangle:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},area:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},line:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},bar:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rule:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},link:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},text:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6],textAnchor:"middle",textFontWeight:"normal"},brush:{color:"gray",size:1,stroke:"black",strokeWidth:1,opacity:.3,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]}}}}]},{uid:"15483511-f6fb-11eb-914b-976b6ecda162",type:"axis-track",chromInfoPath:"https://s3.amazonaws.com/gosling-lang.org/data/hg38.chrom.sizes",options:{layout:"linear",outerRadius:null,width:160,height:600,theme:{base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},point:{color:"#E79F00",size:3,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rect:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},triangle:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},area:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},line:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},bar:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rule:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},link:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},text:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6],textAnchor:"middle",textFontWeight:"normal"},brush:{color:"gray",size:1,stroke:"black",strokeWidth:1,opacity:.3,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]}},assembly:"hg38",stroke:"transparent",color:"black",fontSize:12,fontFamily:"Arial",fontWeight:"normal",tickColor:"black",tickFormat:"plain",tickPositions:"even",reverseOrientation:!1},width:30}],center:[],right:[],bottom:[],gallery:[],whole:[]},initialXDomain:[0,1e9],initialYDomain:[0,1e9],zoomFixed:!1,zoomLimits:[1,null],uid:"15483510-f6fb-11eb-914b-976b6ecda162",chromInfoPath:"https://s3.amazonaws.com/gosling-lang.org/data/hg38.chrom.sizes"},{genomePositionSearchBoxVisible:!1,genomePositionSearchBox:{autocompleteServer:"https://higlass.io/api/v1",autocompleteId:"P0PLbQMwTYGy-5uPIQid7A",chromInfoServer:"https://higlass.io/api/v1",chromInfoId:"hg38"},layout:{x:6.8,y:0,w:5.2,h:600},tracks:{top:[],left:[{type:"combined",width:130,height:600,contents:[{type:"gosling-track",server:"https://server.gosling-lang.org/api/v1/",tilesetUid:"cistrome-multivec",width:130,height:600,options:{showMousePosition:!0,mousePositionColor:"#000000",fontSize:24,labelPosition:"none",labelShowResolution:!1,labelColor:"black",labelBackgroundColor:"white",labelTextOpacity:1,labelLeftMargin:1,labelTopMargin:1,labelRightMargin:0,labelBottomMargin:0,backgroundColor:"transparent",spec:{spacing:10,orientation:"vertical",assembly:"hg38",layout:"linear",static:!1,xDomain:{interval:[0,1e9]},centerRadius:.3,xOffset:0,yOffset:0,style:{outlineWidth:.5},data:{url:"https://server.gosling-lang.org/api/v1/tileset_info/?d=cistrome-multivec",type:"multivec",row:"sample",column:"position",value:"peak",categories:["sample 1","sample 2","sample 3","sample 4"],binSize:4},mark:"rect",x:{field:"start",type:"genomic",domain:{interval:[0,1e9]},linkingId:"7f94b74e-25ec-4e67-8c75-3dc0f1b0d6bd"},xe:{field:"end",type:"genomic"},row:{field:"sample",type:"nominal",legend:!0},color:{field:"peak",type:"quantitative",legend:!0},tooltip:[{field:"start",type:"genomic",alt:"Start Position"},{field:"end",type:"genomic",alt:"End Position"},{field:"peak",type:"quantitative",alt:"Value",format:".2"},{field:"sample",type:"nominal",alt:"Sample"}],width:130,height:600},theme:{base:"light",root:{background:"white",titleColor:"black",titleBackgroundColor:"transparent",titleFontSize:18,titleFontFamily:"Arial",titleAlign:"left",titleFontWeight:"bold",subtitleColor:"gray",subtitleBackgroundColor:"transparent",subtitleFontSize:16,subtitleFontFamily:"Arial",subtitleFontWeight:"normal",subtitleAlign:"left",mousePositionColor:"#000000"},track:{background:"transparent",alternatingBackground:"transparent",titleColor:"black",titleBackground:"white",titleFontSize:24,titleAlign:"left",outline:"black",outlineWidth:1},legend:{position:"top",background:"white",backgroundOpacity:.7,labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",backgroundStroke:"#DBDBDB",tickColor:"black"},axis:{tickColor:"black",labelColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontFamily:"Arial",baselineColor:"black",gridColor:"#E3E3E3",gridStrokeWidth:1,gridStrokeType:"solid",gridStrokeDash:[4,4]},markCommon:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},point:{color:"#E79F00",size:3,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rect:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},triangle:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},area:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},line:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},bar:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},rule:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},link:{color:"#E79F00",size:1,stroke:"black",strokeWidth:1,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]},text:{color:"#E79F00",size:1,stroke:"black",strokeWidth:0,opacity:1,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6],textAnchor:"middle",textFontWeight:"normal"},brush:{color:"gray",size:1,stroke:"black",strokeWidth:1,opacity:.3,nominalColorRange:["#E79F00","#029F73","#0072B2","#CB7AA7","#D45E00","#57B4E9","#EFE441"],quantitativeSizeRange:[2,6]}}}}]}],center:[],right:[],bottom:[],gallery:[],whole:[]},initialXDomain:[0,1e9],initialYDomain:[0,1e9],zoomFixed:!1,zoomLimits:[1,null],uid:"154b1b40-f6fb-11eb-914b-976b6ecda162"}],zoomLocks:{locksByViewUid:{},locksDict:{}},locationLocks:{locksByViewUid:{},locksDict:{}},editable:!1,chromInfoPath:"https://s3.amazonaws.com/gosling-lang.org/data/hg38.chrom.sizes"},qC=30,Nng=e=>({genomePositionSearchBoxVisible:!1,genomePositionSearchBox:{autocompleteServer:"https://higlass.io/api/v1",autocompleteId:V6e(e),chromInfoServer:"https://higlass.io/api/v1",chromInfoId:e??"hg38"},layout:{w:12,h:12,x:0,y:0},tracks:{top:[],left:[],center:[],right:[],bottom:[],gallery:[],whole:[]},initialXDomain:[0,yi(e).total],initialYDomain:[0,yi(e).total],zoomFixed:!1});class kng{constructor(){Ct(this,"assembly"),Ct(this,"orientation"),Ct(this,"hg"),this.assembly="hg38",this.hg={compactLayout:!1,trackSourceServers:[],views:[],zoomLocks:{locksByViewUid:{},locksDict:{}},locationLocks:{locksByViewUid:{},locksDict:{}}},this.setEditable(!1)}spec(){return this.hg}setViewOrientation(g){return this.orientation=g,this}addDefaultView(g,i){return this.hg.views.push(JSON.parse(JSON.stringify({...Nng(i),uid:g}))),this}setAssembly(g){return this.assembly=g,this.setChromInfoPath(yi(this.assembly).path),this}getAssembly(){return this.assembly}setTextTrack(g,i,I,n="black",r=14,C="normal",o="left",a="transparent",s="Arial"){var A;return this.getLastView()&&((A=this.getLastView().tracks.top)==null||A.push({type:"text",width:g,height:i,options:{backgroundColor:a,textColor:n,fontSize:r,fontWeight:C,fontFamily:s,offsetY:0,align:o,text:I}})),this}setDummyTrack(g){var i;return this.getLastView()&&((i=this.getLastView().tracks.top)==null||i.push({type:"dummy-track",width:g.width,height:g.height,options:{width:g.width,height:g.height,title:g.title,...g.style}})),this}addBrush(g,i,I,n,r){var C,o,a,s,A,l;if(n)return(l=this.getView(i))==null||l.tracks.whole.push({type:g==="circular"?"brush-track":"viewport-projection-horizontal",uid:ln(),fromViewUid:n,options:{projectionFillColor:(C=r==null?void 0:r.color)!=null?C:I.brush.color,projectionStrokeColor:(o=r==null?void 0:r.stroke)!=null?o:I.brush.stroke,projectionFillOpacity:(a=r==null?void 0:r.opacity)!=null?a:I.brush.opacity,projectionStrokeOpacity:(s=r==null?void 0:r.opacity)!=null?s:I.brush.opacity,strokeWidth:(A=r==null?void 0:r.strokeWidth)!=null?A:I.brush.strokeWidth,startAngle:r==null?void 0:r.startAngle,endAngle:r==null?void 0:r.endAngle,innerRadius:r==null?void 0:r.innerRadius,outerRadius:r==null?void 0:r.outerRadius}}),this}getLastView(){return this.hg.views[this.hg.views.length-1]}getMainTrackPosition(){return this.orientation==="vertical"?"left":"center"}getLastVisView(){const g=this.hg.views.filter(i=>{var I,n;return((n=(I=i.tracks[this.getMainTrackPosition()])==null?void 0:I[0])==null?void 0:n.type)==="combined"});return g[g.length-1]}getView(g){return this.hg.views.find(i=>i.uid===g)}validateSpec(g=!1){return V2e(Xng,this.spec(),g).state==="success"}setDomain(g,i){return g&&(this.getLastView().initialXDomain=y_(g,this.getAssembly())),i&&(this.getLastView().initialYDomain=y_(i,this.getAssembly())),this}adjustDomain(g="horizontal",i,I){if(g!=="vertical")return this;const n=this.getLastView().initialXDomain;if(!n)return this;const[r,C]=n,o=C-r,a=(r+C)/2;return this.getLastView().initialXDomain=[a-o/i/2/I*i,a+o/i/2/I*i],this}setZoomFixed(g){return this.getLastView().zoomFixed=g,this}setZoomLimits(g){return this.getLastView().zoomLimits=g,this}setLayout(g){return this.getLastView().layout=g,this}setEditable(g){return this.hg.editable=g,this}setChromInfoPath(g){return this.getLastView()&&(this.getLastView().chromInfoPath=g),this.hg.chromInfoPath=g,this}addTrackSourceServers(g){var i,I;return g&&((i=this.hg.trackSourceServers)==null?void 0:i.indexOf(g))===-1&&((I=this.hg.trackSourceServers)==null||I.push(g)),this}setMainTrack(g){var i;return this.getLastView()?(this.getLastView().tracks[this.getMainTrackPosition()]=[{type:"combined",uid:`${(i=g.uid)!=null?i:ln()}-${this.getMainTrackPosition()}-combined`,width:g.width-1,height:g.height,contents:[g]}],this):this}addTrackToCombined(g){var i;return this.getLastVisView()?((i=this.getLastVisView().tracks[this.getMainTrackPosition()][0])==null||i.contents.push(g),this):this}setAxisTrack(g,i="regular",I){if(!this.hg.views)return this;const n=g==="left"||g==="right"?"width":"height",r={type:"axis-track",chromInfoPath:this.hg.chromInfoPath,options:{...I,assembly:this.getAssembly(),stroke:"transparent",color:I.theme.axis.labelColor,labelMargin:I.theme.axis.labelMargin,excludeChrPrefix:I.theme.axis.labelExcludeChrPrefix,fontSize:I.theme.axis.labelFontSize,fontFamily:I.theme.axis.labelFontFamily,fontWeight:I.theme.axis.labelFontWeight,tickColor:I.theme.axis.tickColor,tickFormat:i==="narrower"?"si":"plain",tickPositions:i==="regular"?"even":"ends",reverseOrientation:g==="bottom"||g==="right"}};if(I.layout==="circular")this.addTrackToCombined({...r,options:{...r.options,layout:"circular"}});else{const C={...r,[n]:qC};if(g==="left"){if(this.getLastView().tracks.left.filter(o=>o.type==="axis-track").length!==0)return this;this.getLastView().tracks.left=mje(this.getLastView().tracks.left,0,C)}else if(g==="right"){if(this.getLastView().tracks.right.filter(o=>o.type==="axis-track").length!==0)return this;this.getLastView().tracks.right.push(C)}else{if(this.getLastView().tracks[g].filter(o=>o.type==="axis-track").length!==0)return this;this.getLastView().tracks[g].push(C)}}return this}setExampleHiglassViewConfig(){this.hg=Tng}}function vG(e,g,i,I){const n=I&&I!==0?I:void 0;let r=0;switch(g){case"less-than":case"LT":case"lt":r=i>e?n?(i-e)/n:1:0;break;case"less-than-or-equal-to":case"LTET":case"ltet":r=i>=e?n?(i-e)/n:1:0;break;case"greater-than":case"GT":case"gt":r=i{e[i]&&i!=="base"&&(g[i]=Object.assign(JSON.parse(JSON.stringify(g[i])),JSON.parse(JSON.stringify(e[i]))))}),g}}class Kng{constructor(g,i,I){Ct(this,"id"),Ct(this,"theme"),Ct(this,"specOriginal"),Ct(this,"specComplete"),Ct(this,"dataAggregated"),Ct(this,"channelScales"),Ct(this,"mouseEventModel"),this.id=ln(),this.theme=I??dHe(),this.dataAggregated=i,this.specOriginal=g,this.specComplete=structuredClone(g),this.channelScales={},this.mouseEventModel=new Dgg;const n=this.validateSpec();if(!n.valid){console.warn("Gosling specification is not valid!",n.errorMessages);return}this.generateCompleteSpec(this.specComplete),this.flipRanges(this.specComplete),this.generateScales(),this.dataAggregated=png(this.spec(),this.dataAggregated)}getId(){return this.id}originalSpec(){return this.specOriginal}spec(){return this.specComplete}data(){return this.dataAggregated}getMouseEventModel(){return this.mouseEventModel}generateCompleteSpec(g){if(!g.width||!g.height){console.warn("Size of track is not determined yet.");return}if(g.orientation==="vertical"){const n=g.width;g.width=g.height,g.height=n}const i=this.getGenomicChannelKey();let I=!1;i==="x"&&(I=ut(g.x)&&g.x.axis!==void 0&&g.x.axis!=="none"),i==="y"&&(I=ut(g.y)&&g.y.axis!==void 0&&g.y.axis!=="none"),g.layout!=="circular"?ut(g.x)&&g.x.axis!==void 0&&g.x.axis!=="none"&&(g.height-=qC):i==="x"&&I&&ut(g.x)&&g.x.axis==="top"?g.outerRadius=g.outerRadius-qC:i==="x"&&I&&ut(g.x)&&g.x.axis==="bottom"&&(g.innerRadius=g.innerRadius+qC),Hd.forEach(n=>{const r=g[n];ut(r)&&!("zeroBaseline"in r)&&r.type==="quantitative"&&(r.zeroBaseline=!0)}),this.addScaleMaterials(g)}flipRanges(g){ut(g.y)&&g.y.flip&&Array.isArray(g.y.range)&&(g.y.range=g.y.range.reverse())}getGenomicChannelKey(){return X2e(this.spec())}getGenomicChannel(){return t8(this.spec())}setChannelDomain(g,i,I){const n=this.originalSpec()[g];if(!I&&ut(n)&&n.domain!==void 0)return;const r=this.specComplete[g];ut(r)&&(r.domain=i)}updateChannelValue(){if(this.originalSpec().y===void 0){const g=this.spec().y,i=this.getChannelDomainArray("row");g&&E1(g)&&i&&this.spec().mark!=="withinLink"&&(g.value=this.spec().height/i.length/2)}}encodedValue(g,i){var I;if(g==="text"&&i!==void 0)return`${+i?~~i:i}`;const n=this.spec()[g],r=ut(n)?n.type:E1(n)?"constant":void 0;if(r){if(r==="constant")return this.channelScales[g]();if(i!==void 0&&(i===null&&(r==="quantitative"?i=0:r==="nominal"&&(i="null")),typeof this.channelScales[g]=="function"))switch(g){case"x":case"y":case"x1":case"y1":case"xe":case"ye":case"x1e":if(r==="quantitative"||r==="genomic")return this.channelScales[g](i);if(r==="nominal")return this.channelScales[g](i);break;case"stroke":case"color":if(r==="quantitative"){const C=this.channelScales[g].copy(),o=C.domain(),a=o[1]-o[0],s=Array.from((I=n.scaleOffset)!=null?I:[0,1]);return C.domain([o[0]+a*s.sort()[0],o[0]+a*s.sort()[1]])(i)}if(r==="nominal")return this.channelScales[g](i);break;case"size":if(r==="quantitative")return this.channelScales[g](i);if(r==="nominal")return this.channelScales[g](i);break;case"row":if(r==="nominal")return this.channelScales[g](i);break;case"strokeWidth":case"opacity":if(r==="quantitative")return this.channelScales[g](i);break;default:console.warn(`${g} is not supported for encoding values, so returning a undefined value`);return}}}trackVisibility(g){const i=this.spec();if(!i.visibility||i.visibility.length===0||i.visibility.filter(n=>n.target==="track").length===0)return!0;let I=!0;return i.visibility.filter(n=>n.target==="track").forEach(n=>{const{operation:r,measure:C,threshold:o}=n;let a;C==="zoomLevel"?a=g[C]:a=i[C],a!==void 0&&(I=I&&vG(a,r,o)===1)}),I}markVisibility(g,i){const I=this.spec();if(!I.visibility||I.visibility.length===0||I.visibility.filter(r=>r.target==="mark").length===0)return 1;let n=1;return I.visibility.filter(r=>r.target==="mark").forEach(r=>{const{operation:C,threshold:o,conditionPadding:a,transitionPadding:s,measure:A}=r,l=a??0,c=I.mark;let u=1;if(c==="text"&&o==="|xe-x|"&&A==="width"){const d=this.encodedPIXIProperty("xe",g),h=this.encodedPIXIProperty("x",g);d!==void 0&&(i!=null&&i.width)&&(u=vG(i.width+l,C,Math.abs(d-h),s))}else A==="width"&&typeof o=="number"&&(i!=null&&i.width)?u=vG(i.width+l,C,o,s):A==="zoomLevel"&&typeof o=="number"&&(i!=null&&i.zoomLevel)&&(u=vG(i.zoomLevel,C,o,s));n>u&&(n=u)}),n}visualPropertyByChannel(g,i){const I=i!==void 0?bi(i,this.spec()[g]):void 0;return this.encodedValue(g,I)}encodedPIXIProperty(g,i,I){const n=this.spec().mark;if(["text","color","row","stroke","opacity","strokeWidth","x","y","xe","x1","x1e","ye","size"].includes(g))return this.visualPropertyByChannel(g,i);switch(n){case"bar":return aje(this,g,i,I);case"point":case"text":return rje(this,g,i);case"rect":return lje(this,g,i,I);default:return}}addScaleMaterials(g){const i=this.data(),I=this.getGenomicChannel();if(!I||!I.field){console.warn("Genomic field is not provided in the specification");return}if(typeof g.width>"u"||typeof g.height>"u"){console.warn("Track size is not determined yet");return}Hd.forEach(n=>{var r,C,o,a;const s=g[n];if(Qje(g,n)&&ut(s)){const A=XT(i,c=>c[I.field]),l=[...A.keys()];if(!s.domain){const c="zeroBaseline"in s&&s.zeroBaseline?0:F1(l.map(d=>ate(A.get(d).map(h=>s.field?h[s.field]:void 0)))),u=PG(l.map(d=>ate(A.get(d).map(h=>s.field?h[s.field]:void 0))));s.domain=[c,u]}if(!s.range){const c=g.row,u=ut(c)?c.field:void 0,d=(r=this.getChannelDomainArray("row"))!=null?r:u?Array.from(new Set(i.map(m=>m[u]))):[1],h=g.height/d.length;switch(n){case"x":s.range=[0,g.width];break;case"y":s.range=[0,h];break}}}else{const A=g.row,l=ut(A)?A.field:void 0,c=(C=this.getChannelDomainArray("row"))!=null?C:l?Array.from(new Set(i.map(d=>d[l]))):[1],u=g.height/c.length;if(s){if(ut(s)&&(s.type==="quantitative"||s.type==="genomic")){if(s.domain===void 0){const d="zeroBaseline"in s&&s.zeroBaseline?0:(o=F1(i.map(m=>+m[s.field])))!=null?o:0,h=(a=PG(i.map(m=>+m[s.field])))!=null?a:0;s.domain=[d,h]}else s.type==="genomic"&&!ege(s.domain)&&(s.domain=y_(s.domain));if((n==="color"||n==="stroke")&&s.type==="quantitative"&&!s.scaleOffset&&(s.scaleOffset=[0,1]),!s.range){let d;switch(n){case"x":case"xe":case"x1":case"x1e":d=[0,g.width];break;case"y":case"ye":d=[0,u];break;case"color":case"stroke":d=Yng.QUANTITATIVE_COLOR;break;case"size":d=this.theme.markCommon.quantitativeSizeRange;break;case"strokeWidth":d=[1,3];break;case"opacity":d=[0,1];break}d&&(s.range=d)}}else if(ut(s)&&s.type==="nominal"&&(s.domain===void 0&&(s.domain=Array.from(new Set(i.map(d=>{var h;return(h=d[s.field])!=null?h:"null"})))),!s.range)){let d=2,h;switch(n){case"x":case"xe":h=[0,g.width];break;case"y":case"ye":h=[u,0];break;case"color":case"stroke":h=this.theme.markCommon.nominalColorRange;break;case"row":h=[0,g.height];break;case"size":h=s.domain.map(()=>d++);break}h&&(s.range=h)}}else{let d;switch(n){case"x":d=g.width/2;break;case"y":g.mark==="withinLink"?d=u:d=u/2;break;case"size":g.mark==="line"?d=this.theme.line.size:g.mark==="bar"||g.mark==="rect"||g.mark==="triangleRight"||g.mark==="triangleLeft"||g.mark==="triangleBottom"||g.stretch&&g.mark==="point"&&ut(g.x)&&ut(g.xe)?d=void 0:g.mark==="text"?d=12:d=this.theme.point.size;break;case"color":d=this.theme.markCommon.color;break;case"row":d=0;break;case"stroke":g.mark==="text"?d=this.theme.text.stroke:d=this.theme.markCommon.stroke;break;case"strokeWidth":g.mark==="rule"?d=this.theme.rule.strokeWidth:g.mark==="withinLink"||g.mark==="betweenLink"?d=this.theme.link.strokeWidth:g.mark==="text"?d=this.theme.text.strokeWidth:d=this.theme.markCommon.strokeWidth;break;case"opacity":d=this.theme.markCommon.opacity;break;case"text":d="";break}typeof d<"u"&&(g[n]={value:d})}}}),[["x","xe"],["y","ye"]].forEach(n=>{const[r,C]=n,o=g[r],a=g[C];if(ut(o)&&ut(a)&&o.type===a.type&&o.domain&&a.domain&&Array.isArray(o.domain)&&Array.isArray(a.domain)){if(o.type==="genomic"||o.type==="quantitative"){const s=F1([o.domain[0],a.domain[0]]),A=PG([o.domain[1],a.domain[1]]);o.domain=a.domain=[s,A]}else if(o.type==="nominal"){const s=Array.from(new Set([...o.domain,...a.domain]));o.range=a.range=s}}})}generateScales(){const g=this.spec();Hd.forEach(i=>{const I=g[i];if(E1(I))this.channelScales[i]=()=>I.value;else if(ut(I)){if(i==="text")return;const n=I.domain,r=I.range;if(n===void 0||r===void 0)return;if(I.type==="quantitative"||I.type==="genomic")switch(i){case"x":case"x1":case"xe":case"x1e":case"y":case"ye":case"size":case"opacity":case"strokeWidth":this.channelScales[i]=eh().domain(n).range(r);break;case"color":case"stroke":let C=kbe;Object.keys(E9).includes(r)&&(C=E9[r]),this.channelScales[i]=tbe(C).domain(n);break}else if(I.type==="nominal")switch(i){case"x":case"xe":case"y":case"ye":case"row":this.channelScales[i]=Ope().domain(n).range(r);break;case"size":this.channelScales[i]=N9().domain(n).range(r);break;case"color":case"stroke":this.channelScales[i]=N9(r).domain(n);break}}})}getChannelScale(g){return this.channelScales[g]}setChannelScale(g,i){this.channelScales[g]=i}isShowYAxis(){const g=this.spec(),i=this.getChannelDomainArray("y"),I=this.getChannelRangeArray("y");return ut(g.y)&&g.y.axis!=="none"&&g.y.type==="quantitative"&&!!i&&!!I}getChannelDomainArray(g){const i=this.spec()[g];return ut(i)&&ege(i.domain)?i.domain:void 0}getChannelRangeArray(g){const i=this.spec()[g];return ut(i)&&Uje(i.range)?i.range:void 0}validateSpec(){return W2e(this.originalSpec())}}function kC(e,g){F7.publish(e,g)}function Fng(e,g){F7.subscribe(e,g)}function Dng(e){F7.unsubscribe(e)}const mce={stroke:"black",strokeWidth:1,strokeOpacity:1,color:"none",opacity:1,arrange:"front"};function xng(){return{goslingModels:[],tabularData:[],skipRendering:!1}}const Eng={type:"gosling-track",datatype:["multivec","epilogos"],orientation:"1d-horizontal",defaultOptions:{theme:ZG("light")}},Mng=(e,g,i)=>{var I,n,r,C,o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z,B,G,v,w,V,S,X,W,R,H,k,K,D,J;const{tileProxy:P}=e.services,{BarTrack:te}=e.tracks,q=Ds({color:"black",size:12}),$=class Z_ extends te{constructor(){var Q,Ie,he,ne,be,pe;super(g,i),pg(this,d),pg(this,m),pg(this,b),pg(this,y),pg(this,B),pg(this,v),pg(this,V),pg(this,X),pg(this,R),pg(this,k),pg(this,D),Ct(this,"tileSize"),Ct(this,"mRangeBrush"),pg(this,I,void 0),pg(this,n,void 0),Ct(this,"firstDraw",!0),Ct(this,"gLegend",e.libraries.d3Selection.select(g.svgElement).append("g")),Ct(this,"displayedLegends",[]),Ct(this,"textGraphics",[]),Ct(this,"textsBeingUsed",0),Ct(this,"pMouseHover",new e.libraries.PIXI.Graphics),Ct(this,"pMouseSelection",new e.libraries.PIXI.Graphics),pg(this,r,0),pg(this,C,0),pg(this,o,!1),pg(this,a,e.libraries.d3Selection.select(g.svgElement).append("g")),pg(this,s,new e.libraries.PIXI.TextStyle(q)),pg(this,A,new e.libraries.PIXI.Graphics),pg(this,l,new e.libraries.PIXI.Text("",q)),Ct(this,"prevVisibleAndFetchedTiles"),Ct(this,"resolvedTracks"),Ct(this,"hideMousePosition"),g.dataFetcher.track=this,Wr(this,n,{}),Wr(this,I,this.options.spec.assembly),"overlay"in this.options.spec?this.options.spec.overlay=this.options.spec._overlay.map(Be=>({...Be,_renderingId:ln()})):this.options.spec._renderingId=ln(),this.fetchedTiles={},this.tileSize=(Ie=(Q=this.tilesetInfo)==null?void 0:Q.tile_size)!=null?Ie:1024;const{valid:ve,errorMessages:We}=W2e(this.options.spec);ve||console.warn("The specification of the following track is invalid",We,this.options.spec),this.pMain.addChild(this.pMouseHover),this.pMain.addChild(this.pMouseSelection),this.pMask.interactive=!0,this.mRangeBrush=new Hgg(Dt(this,a),e.libraries,(he=this.options.spec.style)==null?void 0:he.brush),this.mRangeBrush.on("brush",Ri(this,R,H).bind(this)),this.pMask.on("mousedown",Be=>{const{x:Je,y:Pe}=Be.data.getLocalPosition(this.pMain);Ri(this,b,p).call(this,Je,Pe,Be.data.originalEvent.altKey)}),this.pMask.on("mouseup",Be=>{const{x:Je,y:Pe}=Be.data.getLocalPosition(this.pMain);Ri(this,B,G).call(this,Je,Pe)}),this.pMask.on("mousemove",Be=>{const{x:Je}=Be.data.getLocalPosition(this.pMain);Ri(this,y,Z).call(this,Je)}),this.pMask.on("mouseout",Ri(this,v,w).bind(this)),this.flipText=this.options.spec.orientation==="vertical",this.hideMousePosition&&(this.hideMousePosition(),this.hideMousePosition=void 0),(ne=this.options)!=null&&ne.showMousePosition&&!this.hideMousePosition&&(this.hideMousePosition=e.utils.showMousePosition(this,Ir(this.getResolvedTracks()[0]),this.isShowGlobalMousePosition())),this.pLabel.removeChild(this.trackNotFoundText),Dt(this,l).anchor.x=1,Dt(this,l).anchor.y=1,this.pLabel.addChild(Dt(this,A)),this.pLabel.addChild(Dt(this,l)),e.libraries.PIXI.GRAPHICS_CURVES.adaptive=(pe=(be=this.options.spec.style)==null?void 0:be.enableSmoothPath)!=null?pe:!1,e.libraries.PIXI.GRAPHICS_CURVES.adaptive&&(e.libraries.PIXI.GRAPHICS_CURVES.maxLength=1,e.libraries.PIXI.GRAPHICS_CURVES.maxSegments=2048*10)}draw(){var Q,Ie;this.clearMouseEventData(),this.textsBeingUsed=0,(Q=this.pMouseHover)==null||Q.clear();const he=()=>{const ne=this.dataFetcher instanceof HH;this.processAllTiles(ne),super.draw(),this.prevVisibleAndFetchedTiles=this.visibleAndFetchedTiles()};QR(this.dataFetcher)&&!Tbe(this.visibleAndFetchedTiles(),this.prevVisibleAndFetchedTiles)?this.updateTileAsync(this.dataFetcher,he):he(),(Ie=this.mRangeBrush)==null||Ie.drawBrush(!0),this.firstDraw&&(Ri(this,D,J).call(this),this.firstDraw=!1)}initTile(Q){this.drawTile(Q)}updateTile(){}renderTile(){}drawTile(Q){var Ie,he;Q.drawnAtScale=this._xScale.copy();const ne=Dt(this,n)[Q.tileId];ne&&((Ie=Q.graphics)==null||Ie.clear(),(he=Q.graphics)==null||he.removeChildren(),this.pBackground.clear(),this.pBackground.removeChildren(),this.pBorder.clear(),this.pBorder.removeChildren(),this.displayedLegends=[],ne.goslingModels.forEach(be=>{const pe=this.dimensions[0],ve=this._xScale.invert(pe)-this._xScale.invert(0);be.trackVisibility({zoomLevel:ve})&&(Tje(e,this,Q,be,this.options.theme),Hje(e,this,Q,be),Nje(e,this,Q,be,this.options.theme))}),this.forceDraw())}rerender(Q){this.options=Q,this.options.spec.layout==="circular"&&this.mRangeBrush.remove(),this.getResolvedTracks(!0),this.clearMouseEventData(),this.textsBeingUsed=0,this.processAllTiles(!0),this.draw(),this.forceDraw()}clearMouseEventData(){this.visibleAndFetchedGoslingModels().forEach(Q=>Q.getMouseEventModel().clear())}visibleAndFetchedGoslingModels(){return this.visibleAndFetchedTiles().flatMap(Q=>{var Ie,he;return(he=(Ie=Dt(this,n)[Q.tileId])==null?void 0:Ie.goslingModels)!=null?he:[]})}remove(){super.remove(),this.gLegend&&(this.gLegend.remove(),this.gLegend=void 0),this.mRangeBrush.remove()}setDimensions(Q){super.setDimensions(Q),this.mRangeBrush.setSize(Q[1])}setPosition(Q){super.setPosition(Q),[this.pMain.position.x,this.pMain.position.y]=this.position,this.mRangeBrush.setOffset(...Q)}forceDraw(){this.animate()}zoomed(Q,Ie){const he=this.mRangeBrush.getRange();this.mRangeBrush.updateRange(he?[Q(this._xScale.invert(he[0])),Q(this._xScale.invert(he[1]))]:null),this.xScale(Q),this.yScale(Ie),this.refreshTiles(),this.draw(),this.forceDraw();const ne=Q.domain().map(be=>Uu(be,Dt(this,I),!0));kC("location",{id:g.viewUid,genomicRange:ne})}setMask(Q,Ie){if(this.pMask.clear(),this.pMask.beginFill(),this.options.spec.layout==="circular"){const[he,ne]=this.position,[be,pe]=this.dimensions,ve=he+be/2,We=ne+pe/2,Be=this.options.spec.outerRadius;this.pMask.drawCircle(ve,We,Be)}else this.pMask.drawRect(Q[0],Q[1],Ie[0],Ie[1]);this.pMask.endFill()}processAllTiles(Q=!1){var Ie,he;this.tileSize=(he=(Ie=this.tilesetInfo)==null?void 0:Ie.tile_size)!=null?he:1024;const ne=this.visibleAndFetchedTiles();ne.forEach(ve=>Ri(this,m,f).call(this,ve,Q)),this.combineAllTilesIfNeeded();const be=ne.flatMap(ve=>this.transformDataAndCreateModels(ve));Hng(be);const pe=[].concat(...be.map(ve=>ve.data()));pe.length!==0&&this.options.siblingIds.forEach(ve=>kC("rawData",{id:ve,data:pe}))}async updateTileAsync(Q,Ie){if(!this.tilesetInfo)return;const he=this.visibleAndFetchedTiles(),ne=await Q.getTabularData(Object.values(he).map(pe=>pe.remoteId)),be=this.tilesetInfo;he.forEach((pe,ve)=>{if(ve===0){const[We]=e.utils.trackUtils.calculate1DVisibleTiles(be,this._xScale);pe.tileData.zoomLevel=We[0],pe.tileData.tilePos=[We[1],We[1]],pe.tileData.tabularData=ne}else pe.tileData.tabularData=[]}),Ie()}calculateVisibleTiles(){var Q,Ie,he,ne,be;if(this.tilesetInfo)if(QR(this.dataFetcher)){const pe=e.utils.trackUtils.calculate1DVisibleTiles(this.tilesetInfo,this._xScale),ve=(Ie=(Q=this.tilesetInfo.max_tile_width)!=null?Q:this.dataFetcher.MAX_TILE_WIDTH)!=null?Ie:Number.MAX_SAFE_INTEGER;for(const We of pe){const{tileWidth:Be}=this.getTilePosAndDimensions(We[0],[We[1],We[1]]);if(this.forceDraw(),Be>ve)return}this.setVisibleTiles(pe)}else{if(!this.tilesetInfo)return;const pe=this.calculateZoomLevel();if("resolutions"in this.tilesetInfo){const ve=this.tilesetInfo.resolutions.map(Pe=>+Pe).sort((Pe,De)=>De-Pe),We=P.calculateTilesFromResolution(ve[pe],this._xScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]);let Be;Ir(this.getResolvedTracks()[0])&&(Be=P.calculateTilesFromResolution(ve[pe],this._yScale,this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0]));const Je=Ri(he=Z_,c,u).call(he,We,Be,pe);this.setVisibleTiles(Je)}else{const ve=P.calculateTiles(pe,this.relevantScale(),this.tilesetInfo.min_pos[0],this.tilesetInfo.max_pos[0],this.tilesetInfo.max_zoom,this.tilesetInfo.max_width);let We;Ir(this.getResolvedTracks()[0])&&(We=P.calculateTiles(pe,this._yScale,this.tilesetInfo.min_pos[1],this.tilesetInfo.max_pos[1],this.tilesetInfo.max_zoom,(ne=this.tilesetInfo.max_width1)!=null?ne:this.tilesetInfo.max_width));const Be=Ri(be=Z_,c,u).call(be,ve,We,pe);this.setVisibleTiles(Be)}}}getTilePosAndDimensions(Q,Ie){if(!this.tilesetInfo)throw Error("tilesetInfo not parsed");if("resolutions"in this.tilesetInfo){const ne=this.tilesetInfo.resolutions.map(Pe=>+Pe).sort((Pe,De)=>De-Pe)[Q],[be,pe]=Ie,ve=ne*Dt(this,d,h),We=ve,Be=ve*be,Je=We*pe;return{tileX:Be,tileY:Je,tileWidth:ve,tileHeight:We}}else{const[he,ne]=Ie,be=this.tilesetInfo.min_pos[0],pe=this.tilesetInfo.min_pos[1],ve=this.tilesetInfo.max_width/2**Q,We=this.tilesetInfo.max_width/2**Q,Be=be+he*ve,Je=pe+ne*We;return{tileX:Be,tileY:Je,tileWidth:ve,tileHeight:We}}}getIndicesOfVisibleDataInTile(Q){const Ie=this._xScale.range();if(!this.tilesetInfo||!Q.tileData.tilePos||!("dense"in Q.tileData))return[0,0];const{tileX:he,tileWidth:ne}=this.getTilePosAndDimensions(Q.tileData.zoomLevel,Q.tileData.tilePos),be=e.libraries.d3Scale.scaleLinear().domain([0,Dt(this,d,h)]).range([he,he+ne]),pe=Math.max(0,Math.round(be.invert(this._xScale.invert(Ie[0])))),ve=Math.min(Q.tileData.dense.length,Math.round(be.invert(this._xScale.invert(Ie[1]))));return[pe,ve]}receivedTiles(Q){super.receivedTiles(Q),QR(this.dataFetcher)&&this.drawLoadingCue()}removeOldTiles(){super.removeOldTiles(),QR(this.dataFetcher)&&this.drawLoadingCue()}combineAllTilesIfNeeded(){var Q,Ie,he;if(!this.shouldCombineTiles())return;const ne=this.visibleAndFetchedTiles();if(!ne||ne.length<=1)return;this.tileSize=((Ie=(Q=this.tilesetInfo)==null?void 0:Q.tile_size)!=null?Ie:1024)*ne.length;let be=[];ne.forEach((ve,We)=>{const Be=Dt(this,n)[ve.tileId];Be&&(be=[...be,...Be.tabularData],Be.skipRendering=We!==0)});const pe=Dt(this,n)[ne[0].tileId];pe.tabularData=be,(he=pe.tabularData[0])!=null&&he.uid&&(pe.tabularData=R4e(pe.tabularData,"uid"))}shouldCombineTiles(){const Q=kje(this.options.spec,"displace"),Ie=()=>{const ne=this.visibleAndFetchedTiles();return ne.length>=1&&"dense"in ne[0].tileData},he=this.dataFetcher instanceof HH;return Q&&!Ie()&&!he}getResolvedTracks(Q=!1){if(Q||!this.resolvedTracks){const Ie=structuredClone(this.options.spec),he=Y0(Ie).filter(ne=>ne.mark!=="brush");he.forEach(ne=>{"values"in ne.data&&(ne.data.values=[])}),this.resolvedTracks=he}return this.resolvedTracks}transformDataAndCreateModels(Q){const Ie=Dt(this,n)[Q.tileId];return!Ie||Ie.skipRendering?[]:(Ie.goslingModels=[],this.getResolvedTracks().forEach(ne=>{var be;let pe=Array.from(Ie.tabularData);(be=ne.dataTransform)==null||be.forEach(_e=>{switch(_e.type){case"filter":pe=oHe(_e,pe);break;case"concat":pe=Ang(_e,pe);break;case"replace":pe=sng(_e,pe);break;case"log":pe=lng(_e,pe);break;case"exonSplit":pe=mng(_e,pe,ne.assembly);break;case"genomicLength":pe=cng(_e,pe);break;case"svType":pe=ung(_e,pe);break;case"coverage":pe=dng(_e,pe,this._xScale.copy());break;case"subjson":pe=fng(_e,pe);break;case"displace":pe=hng(_e,pe,this._xScale.copy());break}});try{if(PubSub){const gt=pe.length;PubSub.publish("data-preview",{id:g.viewUid,dataConfig:JSON.stringify({data:ne.data}),data:100>gt?pe:d7(pe,100)})}}catch{}const[ve,We]=this.dimensions,Be=M9(ne)?qC:0,[Je,Pe]=[ve,We+Be],De=Math.min(Je,Pe)/Math.min(ne.width,ne.height);ne.innerRadius&&(ne.innerRadius=ne.innerRadius*De),ne.outerRadius&&(ne.outerRadius=ne.outerRadius*De),ne.width=Je,ne.height=Pe;const Qe=new Kng(ne,pe,this.options.theme);Ie.goslingModels.push(Qe)}),Ie.goslingModels)}getMouseOverHtml(Q,Ie){var he,ne,be,pe,ve;if(Ri(this,X,W).call(this,"trackMouseOver",Q,Ie),Dt(this,o)||!this.tilesetInfo)return"";this.pMouseHover.clear();const We=Uu(Math.floor(this._xScale.invert(Q)),Dt(this,I)),Be=Ri(this,V,S).call(this,Q,Ie);if(Be.length!==0?document.body.style.cursor="pointer":document.body.style.cursor="default",Be.length!==0){const Je=(he=this.options.spec.experimental)==null?void 0:he.mouseEvents;if(!!Je||Ym(Je)&&!!Je.mouseOver){const _e=this.pMouseHover;((be=(ne=this.options.spec.style)==null?void 0:ne.mouseOver)==null?void 0:be.arrange)!=="behind"&&(this.pMain.removeChild(_e),this.pMain.addChild(_e)),Ri(this,k,K).call(this,_e,Be,Object.assign({},mce,(pe=this.options.spec.style)==null?void 0:pe.mouseOver)),kC("mouseOver",{id:g.viewUid,genomicPosition:We,data:Be.map(gt=>gt.value)})}const Qe=(ve=this.visibleAndFetchedGoslingModels().find(_e=>{var gt;return _e.spec().tooltip&&((gt=_e.spec().tooltip)==null?void 0:gt.length)!==0}))==null?void 0:ve.spec().tooltip;if(Qe){let _e=Qe.map(gt=>{var lt;const tt=Be[0].value[gt.field];let Xe=tt;if(gt.type==="quantitative"&>.format)Xe=e.libraries.d3Format.format(gt.format)(+tt);else if(gt.type==="genomic"){const{chromosome:ae,position:ye}=Uu(+tt,Dt(this,I));Xe=`${ae}:${e.libraries.d3Format.format(",")(ye)}`}return`${(lt=gt.alt)!=null?lt:gt.field}${Xe}`}).join("");return _e=`${_e}
`,Be.length>1&&(_e+=`
${Be.length-1} Additional Selections...
`),`
${_e}
`}}return""}minVisibleValue(){return 0}maxVisibleValue(){return 0}exportSVG(){throw new Error("exportSVG() not supported for gosling-track")}drawLoadingCue(){if(this.fetching.size){const Ie=`Fetching... ${Array.from(this.fetching).join(" ")}`;Dt(this,l).text=Ie,Dt(this,l).x=this.position[0]+this.dimensions[0]-6/2,Dt(this,l).y=this.position[1]+this.dimensions[1]-6/2;const he=e.libraries.PIXI.TextMetrics.measureText(Ie,Dt(this,s)),{width:ne,height:be}=he;Dt(this,A).clear(),Dt(this,A).lineStyle(1,pt("grey"),1,.5),Dt(this,A).beginFill(pt("white"),.8),Dt(this,A).drawRect(this.position[0]+this.dimensions[0]-ne-6-1,this.position[1]+this.dimensions[1]-be-6-1,ne+6,be+6),Dt(this,l).visible=!0,Dt(this,A).visible=!0}else Dt(this,l).visible=!1,Dt(this,A).visible=!1}updateScaleOffsetFromOriginalSpec(Q,Ie,he){this.getResolvedTracks().map(ne=>{if(ne._renderingId===Q){const be=ne[he];ut(be)&&(be.scaleOffset=Ie)}})}shareScaleOffsetAcrossTracksAndTiles(Q,Ie){this.visibleAndFetchedGoslingModels().forEach(ne=>{const be=ne.spec()[Ie];ut(be)&&(be.scaleOffset=Q);const pe=ne.originalSpec()[Ie];ut(pe)&&(pe.scaleOffset=Q)})}};I=new WeakMap,n=new WeakMap,r=new WeakMap,C=new WeakMap,o=new WeakMap,a=new WeakMap,s=new WeakMap,A=new WeakMap,l=new WeakMap,c=new WeakSet,u=function(ge,Q,Ie){if(!Q)return ge.map(ne=>[Ie,ne]);const he=[];return ge.forEach(ne=>Q.forEach(be=>he.push([Ie,ne,be]))),he},d=new WeakSet,h=function(){let ge;return this.tilesetInfo&&(ge="bins_per_dimension"in this.tilesetInfo?this.tilesetInfo.bins_per_dimension:this.tilesetInfo.tile_size),ge??256},m=new WeakSet,f=function(ge,Q=!1){if(Dt(this,n)[ge.tileId]&&!Q||!ge.tileData.tilePos)return;const Ie=xng(),he=this.getResolvedTracks();if(he.length===0)return[];const ne=he[0];if("tabularData"in ge.tileData)Ie.tabularData=ge.tileData.tabularData;else{const{tileX:be,tileY:pe,tileWidth:ve,tileHeight:We}=this.getTilePosAndDimensions(ge.tileData.zoomLevel,ge.tileData.tilePos),Be="length"in ge.tileData?Array.from(ge.tileData):[],Je=Object.assign({},ge.tileData,{sparse:Be,tileX:be,tileY:pe,tileWidth:ve,tileHeight:We,tileSize:this.tileSize}),Pe=wng(ne,Je);Pe&&(Ie.tabularData=Pe)}Dt(this,n)[ge.tileId]=Ie},b=new WeakSet,p=function(ge,Q,Ie){var he;Wr(this,r,ge),Wr(this,C,Q);const ne=(he=this.options.spec.experimental)==null?void 0:he.mouseEvents,be=!!ne||Ym(ne)&&!!ne.rangeSelect;Wr(this,o,be&&Ie),this.pMouseHover.clear()},y=new WeakSet,Z=function(ge){this.options.spec.layout!=="circular"&&Dt(this,o)&&this.mRangeBrush.updateRange([ge,Dt(this,r)]).drawBrush().visible().disable()},B=new WeakSet,G=function(ge,Q){var Ie;Ri(this,X,W).call(this,"trackClick",ge,Q);const he=(Ie=this.options.spec.experimental)==null?void 0:Ie.mouseEvents,ne=!!he||Ym(he)&&!!he.click,be=Math.sqrt((Dt(this,r)-ge)**2+(Dt(this,C)-Q)**2)>1;if(!Dt(this,o)&&!be?(this.mRangeBrush.clear(),this.pMouseSelection.clear()):this.mRangeBrush.enable(),Wr(this,o,!1),!!this.tilesetInfo&&!be&&ne){const pe=Uu(Math.floor(this._xScale.invert(ge)),Dt(this,I)),ve=Ri(this,V,S).call(this,ge,Q);ve.length!==0&&this.options.siblingIds.forEach(We=>kC("click",{id:We,genomicPosition:pe,data:ve.map(Be=>Be.value)}))}},v=new WeakSet,w=function(){Wr(this,o,!1),document.body.style.cursor="default",this.pMouseHover.clear()},V=new WeakSet,S=function(ge,Q){var Ie;const he=this.visibleAndFetchedGoslingModels(),ne=(Ie=this.options.spec.experimental)==null?void 0:Ie.mouseEvents,be=Ym(ne)&&ne.enableMouseOverOnMultipleMarks,pe=Ym(ne)&&ne.groupMarksByField,ve=he.map(We=>We.getMouseEventModel().findAll(ge,Q,!0)).flat();if(be||ve.splice(1,ve.length-1),ve.length!==0&&pe){const We=Array.from(ve);he.forEach(Be=>{const Je=Be.getMouseEventModel().getSiblings(We,pe);ve.push(...Je)})}return ve},X=new WeakSet,W=function(ge,Q,Ie){const[he,ne]=this.position,[be,pe]=this.dimensions;if(this.options.spec.layout==="circular"){const ve=he+be/2,We=ne+pe/2,Be=this.options.spec.innerRadius,Je=this.options.spec.outerRadius,Pe=this.options.spec.startAngle,De=this.options.spec.endAngle;Tgg([Q,Ie],[be/2,pe/2],[Be,Je],[Pe,De])&&kC(ge,{id:g.viewUid,spec:structuredClone(this.options.spec),shape:{x:he,y:ne,width:be,height:pe,cx:ve,cy:We,innerRadius:Be,outerRadius:Je,startAngle:Pe,endAngle:De}})}else kC(ge,{id:g.viewUid,spec:structuredClone(this.options.spec),shape:{x:he,y:ne,width:be,height:pe}})},R=new WeakSet,H=function(ge,Q=!1){var Ie,he,ne,be;if(this.pMouseSelection.clear(),ge===null){Q||kC("rangeSelect",{id:g.viewUid,genomicRange:null,data:[]});return}const pe=this.visibleAndFetchedGoslingModels(),[ve,We]=ge;let Be=pe.map(De=>De.getMouseEventModel().findAllWithinRange(ve,We,!0)).flat();const Je=(Ie=this.options.spec.experimental)==null?void 0:Ie.mouseEvents,Pe=Ym(Je)&&Je.groupMarksByField;if(Be.length!==0&&Pe&&pe.forEach(De=>{const Qe=De.getMouseEventModel().getSiblings(Be,Pe),_e=Array.from(new Set(Qe.map(gt=>gt.value[Pe])));Be=Be.filter(gt=>_e.indexOf(gt.value[Pe])===-1)}),Be.length!==0){const De=this.pMouseSelection;((ne=(he=this.options.spec.style)==null?void 0:he.select)==null?void 0:ne.arrange)!=="behind"&&(this.pMain.removeChild(De),this.pMain.addChild(De)),Ri(this,k,K).call(this,De,Be,Object.assign({},mce,(be=this.options.spec.style)==null?void 0:be.select))}if(!Q){const De=[Uu(Math.floor(this._xScale.invert(ve)),Dt(this,I)),Uu(Math.floor(this._xScale.invert(We)),Dt(this,I))];kC("rangeSelect",{id:g.viewUid,genomicRange:De,data:Be.map(Qe=>Qe.value)})}this.forceDraw()},k=new WeakSet,K=function(ge,Q,Ie){ge.lineStyle(Ie.strokeWidth,pt(Ie.stroke),Ie.strokeOpacity,.5),ge.beginFill(pt(Ie.color),Ie.color==="none"?0:Ie.opacity),Q.forEach(he=>{if(he.type==="point"){const[ne,be,pe=3]=he.polygon;ge.drawCircle(ne,be,pe)}else he.type==="line"?(ge.moveTo(he.polygon[0],he.polygon[1]),fje(he.polygon).map(ne=>ge.lineTo(ne[0],ne[1]))):ge.drawPolygon(he.polygon)})},D=new WeakSet,J=function(){kC("onNewTrack",{id:g.viewUid})},pg($,c);let j=$;return new j},l1=g8(Eng,Mng),zng={type:"dummy-track",defaultOptions:{height:0,width:0,title:"",background:"#fff",textFontSize:12,textFontWeight:"normal",textStroke:"#000",textStrokeWidth:.1,outline:"#fff"}},Png=(e,g,i)=>{var I,n,r,C;const{SVGTrack:o}=e.tracks;class a extends o{constructor(){super(g,i),pg(this,I),pg(this,r),Ri(this,I,n).call(this),Ri(this,r,C).call(this),kC("onNewTrack",{id:g.viewUid})}}return I=new WeakSet,n=function(){this.gMain.append("rect").attr("fill",i.background).attr("x",0).attr("y",0).attr("width",i.width).attr("height",i.height).style("stroke",i.outline)},r=new WeakSet,C=function(){this.gMain.append("text").attr("x",i.width/2).attr("y",(i.height+i.textFontSize)/2).style("text-anchor","middle").style("font-size",`${i.textFontSize}px`).style("font-weight",i.textFontWeight).style("stroke",i.textStroke).style("stroke-width",i.textStrokeWidth).text(i.title)},new a},fce=g8(zng,Png);let pce=!1;function Jng(){if(!pce){Ru({name:"GoslingTrack",track:l1,config:l1.config}),Ru({name:"Gosling2DTrack",track:l1,config:{...l1.config,type:"gosling-2d-track",orientation:"2d"}}),Ru({name:"AxisTrack",track:Sle,config:Sle.config}),Ru({name:"TextTrack",track:H3,config:H3.config}),Ru({name:"BrushTrack",track:l_,config:l_.config}),Ru({name:"DummyTrack",track:fce,config:fce.config});for(const e of Object.values(Bng)){const{config:g}=e;Ru({dataFetcher:e,config:g},{pluginType:"dataFetcher"})}pce=!0}}function hHe(e){let g=0,i=0;return e.forEach(I=>{const n=I.boundingBox.x+I.boundingBox.width,r=I.boundingBox.y+I.boundingBox.height;i{s.boundingBox.y+=o+a}),n=[{track:_ng({width:r.width,height:o},e.title,e.subtitle),boundingBox:{x:0,y:0,width:r.width,height:o},layout:{x:0,y:0,w:12,h:o/r.height*12}},...n]}else r.height=r.height+(8-r.height%8);const C=!(typeof e.responsiveSize!="object"?e.responsiveSize:e.responsiveSize.height);return n.forEach(o=>{o.layout.x=o.boundingBox.x/r.width*12,o.layout.w=o.boundingBox.width/r.width*12,o.layout.y=C?o.boundingBox.y:o.boundingBox.y/r.height*12,o.layout.h=C?o.boundingBox.height:o.boundingBox.height/r.height*12}),{trackInfos:n,size:r}}function G_(e,g,i=0,I=0,n=!0){let r=0,C=0,o=!0,a=!1;Zb(e,c=>{a=!0,c.layout!=="circular"&&(o=!1)});let s=!0;p0e(e,c=>{(c.arrangement==="vertical"||c.arrangement==="horizontal")&&(s=!1)});const A=n&&o&&a&&s&&("views"in e&&(e.arrangement==="parallel"||e.arrangement==="serial")||"tracks"in e),l=g.length;if("tracks"in e){const c=e.tracks;e.orientation==="vertical"?(C=Math.max(...c.map(u=>u.height)),c.forEach((u,d,h)=>{yce([u])===1&&(u.width+=qC),u.height=C,g.push({track:u,boundingBox:{x:i+r,y:I,width:u.width,height:C},layout:{x:0,y:0,w:0,h:0}}),h[d+1]&&h[d+1].overlayOnPreviousTrack||(r+=u.width,d!==h.length-1&&(r+=e.spacing!==void 0?e.spacing:0))})):(r=Math.max(...c.map(u=>u.width)),c.forEach((u,d,h)=>{yce([u])===1&&(u.height+=qC);const m=Y0(u);m.length>0&&Ir(m[0])&&Ong([u])===1&&(r+=qC),u.width=r,g.push({track:u,boundingBox:{x:i,y:I+C,width:r,height:u.height},layout:{x:0,y:0,w:0,h:0}}),h[d+1]&&h[d+1].overlayOnPreviousTrack||(C+=u.height,d!==h.length-1&&(C+=e.spacing!==void 0?e.spacing:0))}))}else if(e.arrangement==="parallel"||e.arrangement==="vertical"){const c=e.spacing!==void 0?e.spacing:x1;e.views.forEach((u,d,h)=>{var m,f,b,p,y;const Z=G_(u,g,i+((m=u.xOffset)!=null?m:0),I+((f=u.yOffset)!=null?f:0)+C,!A&&n);r<((b=u.xOffset)!=null?b:0)+Z.width&&(r=((p=u.xOffset)!=null?p:0)+Z.width),d!==h.length-1&&(C+=c),C+=((y=u.yOffset)!=null?y:0)+Z.height})}else(e.arrangement==="serial"||e.arrangement==="horizontal")&&e.views.forEach((c,u,d)=>{var h,m,f,b,p;const y=e.spacing!==void 0?e.spacing:x1,Z=G_(c,g,i+((h=c.xOffset)!=null?h:0)+r,I+((m=c.yOffset)!=null?m:0),!A&&n);C<((f=c.xOffset)!=null?f:0)+Z.height&&(C=((b=c.xOffset)!=null?b:0)+Z.height),u!==d.length-1&&(r+=y),r+=((p=c.xOffset)!=null?p:0)+Z.width});if(A){const c=g.slice(l),u="views"in e&&(e.arrangement==="parallel"||e.arrangement==="serial")&&e.views.length>1,d=e.spacing!==void 0?e.spacing:x1,h=gje,m=e.centerRadius!==void 0?e.centerRadius:Fbe,f=r/2+h,b=f*(1-m);c.forEach((p,y)=>{var Z,B;if(NS(p.track))return;p.track.layout="circular",p.track.outerRadius=f-h-(p.boundingBox.y-I)/C*b,p.track.innerRadius=f-h-(p.boundingBox.y+p.boundingBox.height-I)/C*b;const G=d/r*360;p.track.startAngle=G+(p.boundingBox.x-i)/r*(r-d)/r*360,p.track.endAngle=(p.boundingBox.x+p.boundingBox.width-i)/r*(r-d)/r*360,p.boundingBox.x=i+((Z=p.track.xOffset)!=null?Z:0),p.boundingBox.y=I+((B=p.track.yOffset)!=null?B:0),p.boundingBox.height=p.track.height=p.boundingBox.width=p.track.width=f*2,y!==0&&(p.track.overlayOnPreviousTrack=!0),u&&dI(p.track)&&(p.track._overlay=p.track._overlay.filter(v=>v.mark!=="brush"))}),C=f*2}return e._assignedWidth=r,e._assignedHeight=C,{x:i,y:I,width:r,height:C}}function yce(e){return e.filter(g=>M9(g)).length}function Ong(e){return e.filter(g=>$je(g)).length}const _ng=(e,g,i)=>JSON.parse(JSON.stringify({mark:"header",width:e.width,height:e.height,title:g,subtitle:i}));function Lng(e){if(!e.includes("tileset_info/?d=")||!e.includes("https:")&&!e.includes("http:"))return{server:void 0,tilesetUid:void 0};const g=e.split("tileset_info/?d=")[0],i=e.split("tileset_info/?d=")[1];return{server:g,tilesetUid:i}}function Ung(e,g,i,I,n,r,C){var o,a,s,A,l,c,u,d,h,m,f,b,p,y,Z;if(NS(g))return e.addDefaultView(g.id).setDummyTrack(g).setLayout(I),e;const B=Y0(g),G=B[0],v=(o=G.id)!=null?o:ln();G.id||(G.id=v),B.forEach(V=>{V.id&&r.addMapping(V.id,v)});const w=G.assembly;if(qte(G.data)){let V,S;if(p7(G.data)){const te=Lng(G.data.url);V=te.server,S=te.tilesetUid}const X=t8(G),W=X2e(G),H=(W==="x"||W==="xe")&&ut(X)?X.domain:void 0,k=Ir(G)&&ut(G.y)?G.y.domain:void 0,K=i.width-(G.layout!=="circular"&&G.orientation==="vertical"&&M9(G)?qC:0),D=i.height-(G.layout!=="circular"&&G.orientation==="horizontal"&&M9(G)?qC:0),J={uid:`${v}-track`,type:Ir(G)?"gosling-2d-track":"gosling-track",server:V,tilesetUid:S,width:K,height:D,options:{id:v,siblingIds:r.getSiblingGoslingIds(v),showMousePosition:G.layout==="circular"?!1:n.root.showMousePosition,mousePositionColor:n.root.mousePositionColor,name:G.layout==="linear"?G.title:" ",labelPosition:G.title?n.track.titleAlign==="left"?"topLeft":"topRight":"none",labelShowResolution:!1,labelColor:n.track.titleColor,labelBackgroundColor:n.track.titleBackground,labelBackgroundOpacity:.5,labelTextOpacity:1,labelLeftMargin:1,labelTopMargin:1,labelRightMargin:0,labelBottomMargin:0,backgroundColor:"transparent",spec:{...g},theme:n}};if(G.data&&qte(G.data)&&(G.data.type==="csv"||G.data.type==="json"||G.data.type==="bigwig"||G.data.type==="bam"||G.data.type==="vcf"||G.data.type==="gff"||G.data.type==="bed")){const te=ge=>{const Q=G[ge];return Q&&ut(Q)?Q.field:void 0},q={x:te("x"),xe:te("xe"),x1:te("x1"),x1e:te("x1e")},$="url"in G.data&&(C==null?void 0:C[G.data.url])||{},j="indexUrl"in G.data&&(C==null?void 0:C[G.data.indexUrl])||{};J.data={...G.data,...q,urlFetchOptions:$,indexUrlFetchOptions:j,assembly:w}}if(Jje(G)){J.type="heatmap";const te=ut(G.color)&&typeof G.color.range=="string"?G.color.range:"viridis";J.options.colorRange=Yje(te),J.options.trackBorderWidth=(s=(a=G.style)==null?void 0:a.outlineWidth)!=null?s:n.track.outlineWidth,J.options.trackBorderColor=(l=(A=G.style)==null?void 0:A.outline)!=null?l:n.track.outline,J.options.extent=(u=(c=G.style)==null?void 0:c.matrixExtent)!=null?u:"full",J.options.colorbarPosition=(d=G.color)!=null&&d.legend?J.options.extent==="lower-left"?"bottomLeft":"topRight":"hidden"}G.overlayOnPreviousTrack?e.setViewOrientation(G.orientation).addTrackToCombined(J):e.setViewOrientation(G.orientation).setAssembly(w).addDefaultView(v,w).setDomain(H,k??H).adjustDomain(G.orientation,K,D).setMainTrack(J).addTrackSourceServers(V).setZoomFixed(G.static===!0).setZoomLimits((h=G.zoomLimits)!=null?h:[1,null]).setLayout(I);const P=(te,q="horizontal",$,j)=>q==="horizontal"?te==="x"&&$<=200||te==="y"&&j<=200?"narrower":te==="x"&&$<=400||te==="y"&&j<=400?"narrow":"regular":te==="x"&&j<=200||te==="y"&&$<=200?"narrower":te==="x"&&j<=400||te==="y"&&$<=400?"narrow":"regular";["x","y"].forEach(te=>{const q=G[te];if(ut(q)&&"axis"in q&&q.axis&&q.axis!=="none"&&q.type==="genomic"){const $=P(te,g.orientation,i.width,i.height);e.setAxisTrack(q.axis,$,{id:`${v}-${q.axis}-axis`,layout:G.layout,innerRadius:q.axis==="top"?G.outerRadius-qC:G.innerRadius,outerRadius:q.axis==="top"?G.outerRadius:G.innerRadius+qC,width:G.width,height:G.height,startAngle:G.startAngle,endAngle:G.endAngle,theme:n})}}),e.validateSpec(!0)}else G.mark==="header"&&(e.addDefaultView(`${v}-title`).setLayout(I),typeof G.title=="string"&&e.setTextTrack(i.width,((m=n.root.titleFontSize)!=null?m:18)+x9,G.title,n.root.titleColor,(f=n.root.titleFontSize)!=null?f:18,n.root.titleFontWeight,n.root.titleAlign,n.root.titleBackgroundColor,(b=n.root.titleFontFamily)!=null?b:f3.fontFamily),typeof G.subtitle=="string"&&e.setTextTrack(i.width,((p=n.root.subtitleFontSize)!=null?p:14)+x9,G.subtitle,n.root.subtitleColor,(y=n.root.subtitleFontSize)!=null?y:14,n.root.subtitleFontWeight,n.root.subtitleAlign,n.root.subtitleBackgroundColor,(Z=n.root.subtitleFontFamily)!=null?Z:f3.fontFamily));return e}function Qng(e){const g=[];return e.spec().views.forEach(i=>{var I,n,r,C,o,a,s,A,l,c,u,d,h,m,f;const b=i.uid;let p=(o=(C=(r=(n=(I=i.tracks.center)==null?void 0:I[0])==null?void 0:n.contents)==null?void 0:r[0])==null?void 0:C.options)==null?void 0:o.spec;if(p||(p=(c=(l=(A=(s=(a=i.tracks.left)==null?void 0:a[0])==null?void 0:s.contents)==null?void 0:A[0])==null?void 0:l.options)==null?void 0:c.spec,p||(p=(f=(m=(h=(d=(u=i.tracks.left)==null?void 0:u[1])==null?void 0:d.contents)==null?void 0:h[0])==null?void 0:m.options)==null?void 0:f.spec)),!b||!p)return;Y0(p).forEach(Z=>{Hd.forEach(B=>{var G,v,w,V;const S=Z[B];if(ut(S)&&"linkingId"in S&&S.linkingId){g.push({layout:Z.layout==="circular"?"circular":"linear",hgViewId:b,linkId:S.linkingId,isBrush:Z.mark==="brush",style:{color:(G=Z.color)==null?void 0:G.value,stroke:(v=Z.stroke)==null?void 0:v.value,strokeWidth:(w=Z.strokeWidth)==null?void 0:w.value,opacity:(V=Z.opacity)==null?void 0:V.value,startAngle:Z.startAngle,endAngle:Z.endAngle,innerRadius:Z.innerRadius,outerRadius:Z.outerRadius}});return}})})}),g}class jng{constructor(){pg(this,$A,{})}addMapping(g,i){Dt(this,$A)[g]&&Dt(this,$A)[g]!==i&&console.warn(`The track ID ${g} already exists but overwriting with a different ID.`),Dt(this,$A)[g]=i}getTable(){return Dt(this,$A)}getGoslingIds(){return Object.keys(Dt(this,$A))}getHiGlassId(g){return Dt(this,$A)[g]}getSiblingGoslingIds(g){return Object.entries(Dt(this,$A)).filter(([,i])=>i===g).map(([i])=>i)}}$A=new WeakMap;function $ng(e){const g=new Set;return e.id&&g.add(e.id),Zb(e,i=>{("views"in i||"tracks"in i)&&i.id&&g.add(i.id)}),Array.from(g)}function qng(e){const g=new Set;return Zb(e,i=>{!("views"in i)&&!("tracks"in i)&&i.id&&g.add(i.id)}),Array.from(g)}function erg(e,g){let i;return e.id===g&&(i=e),Zb(e,I=>{I.id===g&&(i=I)}),i}function trg(e,g){return $ng(e).map(i=>{const I=erg(e,i),n=qng(I),r={x:Number.MAX_SAFE_INTEGER,y:Number.MAX_SAFE_INTEGER,xe:-Number.MAX_SAFE_INTEGER,ye:-Number.MAX_SAFE_INTEGER};return n.map(C=>g.find(o=>o.id===C)).forEach(C=>{if(!C)return;const{shape:o}=C;r.x>o.x&&(r.x=o.x),r.y>o.y&&(r.y=o.y),r.xe{const{track:u,boundingBox:d,layout:h}=c;Ung(r,u,d,h,I,C,n)});const o=Qng(r);o.filter(c=>c.isBrush).forEach(c=>{var u;r.addBrush(c.layout,c.hgViewId,I,(u=o.find(d=>!d.isBrush&&d.linkId===c.linkId))==null?void 0:u.hgViewId,c.style)}),o.filter(c=>!c.isBrush).forEach(c=>{r.spec().zoomLocks.locksByViewUid[c.hgViewId]=c.linkId,r.spec().locationLocks.locksByViewUid[c.hgViewId]=c.linkId}),Array.from(new Set(o.map(c=>c.linkId))).forEach(c=>{r.spec().zoomLocks.locksDict[c]={uid:c},r.spec().locationLocks.locksDict[c]={uid:c},o.filter(u=>!u.isBrush).filter(u=>u.linkId===c).forEach(u=>{r.spec().zoomLocks.locksDict[c][u.hgViewId]=[1246253105e-1,1246253105e-1,249250.621],r.spec().locationLocks.locksDict[c][u.hgViewId]=[1246253105e-1,1246253105e-1,249250.621]})});const s=g.map(c=>({id:c.track.id,spec:c.track,shape:c.track.layout==="linear"||NS(c.track)?c.boundingBox:{...c.boundingBox,cx:c.boundingBox.x+c.boundingBox.width/2,cy:c.boundingBox.y+c.boundingBox.height/2,innerRadius:c.track.innerRadius,outerRadius:c.track.outerRadius,startAngle:c.track.startAngle,endAngle:c.track.endAngle}})),A=trg(e,s),l=[...s.map(c=>({...c,type:"track"})),...A.map(c=>({...c,type:"view"}))];i(r.spec(),hHe(g),e,l,C.getTable())}function mHe(e,g,i,I,n){if(typeof e._assignedWidth>"u"||typeof e._assignedHeight>"u")return console.warn("Responsive spec cannot be used when width and height of a view is not determined yet."),!1;let r=!1;const{responsiveSpec:C}=e,o=e._assignedWidth*g,a=e._assignedHeight*i,s={width:o,height:a,aspectRatio:o/a},A={width:I,height:n,aspectRatio:I/n};return C&&C.forEach(l=>{const{spec:c,selectivity:u}=l;if(irg(u,s,A)&&!r){Object.keys(c).forEach(d=>{e[d]=c[d]}),delete e.responsiveSpec,r=!0;return}}),"views"in e&&e.views.forEach(l=>{r=mHe(l,g,i,I,n)||r}),r}function irg(e,g,i){if(e.length===0)return!1;let I=!0;return e.forEach(n=>{const{measure:r,operation:C,threshold:o,target:a}=n;I=I&&vG((a==="container"?i:g)[r],C,o)===1}),I}function Irg(e,g,i,I,n,r){var C,o;const a=JSON.parse(JSON.stringify(e));w6e(a),sgg(a,i),R3(a);const s=bce(a,I);let{trackInfos:A}=s;const{size:l}=s,c=typeof e.responsiveSize=="object"&&((C=e.responsiveSize)==null?void 0:C.width)||e.responsiveSize,u=typeof e.responsiveSize=="object"&&((o=e.responsiveSize)==null?void 0:o.height)||e.responsiveSize,d=c&&n.containerSize?n.containerSize.width/l.width:1,h=u&&n.containerSize?n.containerSize.height/l.height:1,m=n.containerParentSize?n.containerParentSize.width:Number.MAX_SAFE_INTEGER,f=n.containerParentSize?n.containerParentSize.height:Number.MAX_SAFE_INTEGER;mHe(a,d,h,m,f)&&(R3(a),A=bce(a,I).trackInfos),kC("specProcessed",{id:a.id,spec:a}),grg(a,A,g,I,r)}Jng();const fHe=U.forwardRef((e,g)=>{var i;const[I,n]=U.useState((i=e.id)!=null?i:ln());U.useEffect(()=>{var u;n((u=e.id)!=null?u:ln())},[e.id]);const r=e.viewConfig||{},C=!1,o=U.useMemo(()=>N.createElement(my,{ref:g,options:{pixelPreciseMarginPadding:C,containerPaddingX:0,containerPaddingY:0,viewMarginTop:0,viewMarginBottom:0,viewMarginLeft:0,viewMarginRight:0,viewPaddingTop:0,viewPaddingBottom:0,viewPaddingLeft:0,viewPaddingRight:0,sizeMode:"bounded",rangeSelectionOnAlt:!0},viewConfig:r}),[r,C]),{padding:a=60,margin:s=0,border:A="none",background:l,alt:c="Gosling visualization"}=e.options||{};return N.createElement(N.Fragment,null,N.createElement("div",{id:I,className:`gosling-component ${e.className||""}`,style:{position:"relative",padding:a,margin:s,border:A,background:l,width:e.options.responsiveWidth?`calc(100% - ${a*2}px)`:e.size.width,height:e.options.responsiveHeight?`calc(100% - ${a*2}px)`:e.size.height,textAlign:"left"},"aria-label":c,role:"graphics-document","aria-roledescription":"visualization"},N.createElement("div",{key:JSON.stringify(r),id:"higlass-wrapper",className:"higlass-wrapper",style:{position:"relative",display:"block",background:l,margin:0,padding:0,width:e.options.responsiveWidth?"100%":e.size.width,height:e.options.responsiveHeight?"100%":e.size.height}},o)))});fHe.displayName="HiGlassComponentWrapper";function nrg(e,g,i,I,n){const r=structuredClone(n),C=d=>{const h=r[d];return h||console.warn(`Unable to find the track ID, named ${d}.`),h??d},o=()=>Object.keys(r),a=()=>[...i],s=()=>[...a().filter(d=>d.type==="track")],A=d=>{const h=s().find(m=>m.id===d);return h||console.warn(`[getTrack()] Unable to find a track using the ID (${d})`),h},l=()=>[...a().filter(d=>d.type==="view")],c=d=>{const h=l().find(m=>m.id===d);return h||console.warn(`Unable to find a view with the ID of ${d}`),h},u=d=>{var h,m;const f=(h=d==null?void 0:d.resolution)!=null?h:4,b=(m=d==null?void 0:d.transparentBackground)!=null?m:!1,p=e.pixiRenderer,y=Ks.create({width:p.width/2,height:p.height/2,resolution:f});p.render(e.pixiStage,y);const Z=p.plugins.extract.canvas(y),B=document.createElement("canvas");B.width=Z.width,B.height=Z.height;const G=B.getContext("2d");return b||(G.fillStyle=I.root.background,G.fillRect(0,0,B.width,B.height)),G.drawImage(Z,0,0),{canvas:B,resolution:f,canvasWidth:Z.width,canvasHeight:Z.height}};return{subscribe:Fng,unsubscribe:Dng,zoomTo:(d,h,m=0,f=1e3)=>{var b;const p=(b=A(d))==null?void 0:b.spec.assembly,Z=V7.fromString(h).toAbsoluteCoordinates(p,m),B=C(d);e.api.zoomTo(B,...Z,...Z,f)},zoomToExtent:(d,h=1e3)=>{var m;const f=(m=A(d))==null?void 0:m.spec.assembly,[b,p]=[0,yi(f).total],y=C(d);e.api.zoomTo(y,b,p,b,p,h)},zoomToGene:(d,h,m=0,f=1e3)=>{const b=C(d);e.api.zoomToGene(b,h,m,f)},suggestGene:(d,h,m)=>{const f=C(d);e.api.suggestGene(f,h,m)},getTrackIds:o,getTracksAndViews:a,getTracks:s,getTrack:A,getView:c,getViews:l,getCanvas:u,exportPng:d=>{const{canvas:h}=u({resolution:4,transparentBackground:d});h.toBlob(m=>{const f=document.createElement("a");document.body.append(f),f.download="gosling-visualization",f.href=URL.createObjectURL(m),f.click(),f.remove()},"image/png")},exportPdf:async d=>{const{jsPDF:h}=await N5e(()=>import("./jspdf.es.min-ab46f82e.js").then(p=>p.j),[]),{canvas:m}=u({resolution:4,transparentBackground:d}),f=m.toDataURL("image/jpeg",1),b=new h({orientation:m.width{f7(i)&&g.forEach(I=>{delete i[I]})})}const rrg=(e,g)=>{e.views.forEach(i=>{var I,n,r;const C=i.uid;if(!g.views.find(a=>a.uid===C)){const{locksByViewUid:a}=e.zoomLocks,s=a[C],A=(I=Object.entries(a).find(([c,u])=>c&&u===s))==null?void 0:I[0],l=!!g.views.find(c=>c.uid===A);A&&l&&(i.initialXDomain=(n=g.views.find(c=>c.uid===A))==null?void 0:n.initialXDomain,i.initialYDomain=(r=g.views.find(c=>c.uid===A))==null?void 0:r.initialYDomain)}})},Crg=300,pHe=U.forwardRef((e,g)=>{var i,I,n;const[r,C]=U.useState(),[o,a]=U.useState({width:200,height:200}),s=U.useRef(),A=U.useRef(),l=U.useRef(),c=U.useRef([]),u=U.useRef({}),d=U.useRef(null),h=dHe(e.theme||"light"),m=(i=e.id)!=null?i:ln(),f=Z=>{const B=c.current.filter(V=>V.type=="view"),G=Z.filter(V=>V.type=="view"),v=new Set(B.map(V=>V.id));G.filter(V=>!v.has(V.id)).forEach(V=>{kC("onNewView",{id:V.id})})};U.useImperativeHandle(g,()=>{const Z=Gce(d),B=Gce(c);return{api:nrg(Z,r,B,h,u.current),hgApi:Z}},[r,h]);const b=U.useCallback(()=>{if(e.spec){if(agg(e.spec).state==="error"){console.warn("Gosling spec is not valid. Please refer to the console message.");return}Irg(e.spec,(B,G,v,w,V)=>{var S,X;if(l.current&&Tbe(Zce(l.current,["linkingId"]),Zce(v,["linkingId"])))return;(S=e.compiled)==null||S.call(e,e.spec,B,{_processedSpec:v}),a(G);const W=typeof r<"u";(X=e.experimental)!=null&&X.reactive&&W?setTimeout(()=>{var R,H;rrg(B,(R=d.current)==null?void 0:R.api.getViewConfig()),(H=d.current)==null||H.api.setViewConfig(B)},Crg):C(B),f(w),l.current=v,c.current=w,u.current=V},[...Agg],h,{containerSize:s.current,containerParentSize:A.current},e.urlToFetchOptions)}},[e.spec,h]);U.useEffect(()=>{var Z;if(!((Z=e.spec)!=null&&Z.responsiveSize))return;const B=document.getElementById(m);if(!B)return;const G=new ule.ResizeSensor(B,V=>{(!s.current||s.current.height!==V.height||s.current.width!==V.width)&&(s.current=V,b())}),v=B.parentElement;if(!v)return;const w=new ule.ResizeSensor(v,V=>{(!A.current||A.current.height!==V.height||A.current.width!==V.width)&&(A.current=V,b())});return()=>{G.detach(),w.detach()}}),U.useEffect(()=>{b()},[e.spec,h]);const p=typeof((I=e.spec)==null?void 0:I.responsiveSize)!="object"?(n=e.spec)==null?void 0:n.responsiveSize:e.spec.responsiveSize.height;return U.useMemo(()=>{var Z,B,G;return N.createElement(fHe,{ref:d,viewConfig:r,size:o,id:m,className:e.className,options:{padding:e.padding,border:e.border,margin:e.margin,responsiveWidth:typeof((Z=e.spec)==null?void 0:Z.responsiveSize)!="object"?(B=e.spec)==null?void 0:B.responsiveSize:e.spec.responsiveSize.width,responsiveHeight:p,background:h.root.background,alt:(G=e.spec)==null?void 0:G.description}})},[r,o,h,p])});pHe.displayName="GoslingComponent";function Gce(e){return new Proxy({},{get(g,i,I){if(!e.current)throw Error("ref is not set!");return Reflect.get(e.current,i,I)}})}var vce=qi;vce.createRoot,vce.hydrateRoot;const Fv=["x","xe","x1","x1e","y","ye","y1","y1e","color","size","row","stroke","strokeWidth","opacity","text"];function org(e){return typeof e=="object"&&e!==null}function arg(e){return"alignment"in e&&e.alignment==="overlay"}function v_(e){return"_overlay"in e}function Arg(e){return e!==null&&typeof e=="object"&&"value"in e}function B_(e){return org(e)&&!("value"in e)}function S_(e,g){return g in e}function Bce(e,g){return e[g]}function Cr(e){return e=e.filter(g=>g!==void 0),e.length===0?"":e.length===1?e[0]:`${e.slice(0,-1).join(", ")} and ${e.slice(-1)}`}function qp(e){return e[0].toUpperCase()+e.slice(1)}const eb=new Map([["point","points"],["line","lines"],["bar","bars"],["rect","rectangles"],["area","area displayed"],["withinLink","connections"],["betweenLink","connections"],["triangleLeft","triangles"],["triangleRight","triangles"],["triangleBottom","triangles"],["text","text"],["rule","lines"],["brush","with linked view"]]),RC=new Map([["y","height"],["color","color"],["strokeWidth","stroke width"],["opacity","opacity"],["text","text"],["size","size"]]);function srg(e){return e.includes("chr")&&(e=e.replace("chr","")),e}function lrg(e,g){return e.filter(i=>i===g).length}function Sce(e){return typeof e=="string"&&(e=Number.parseFloat(e)),e.toString().length<3?e:e.toExponential(2)}function bHe(e,g){let i;Array.isArray(e.appearance.details.mark)?i=e.appearance.details.mark[g]:i=e.appearance.details.mark;const I=e.appearance.details.encodings.encodingDeepGenomic.map(A=>A.name),n=e.appearance.details.encodings.encodingDeepQuantitative.map(A=>A.name),r=e.appearance.details.encodings.encodingDeepNominal.map(A=>A.name),C=e.appearance.details.encodings.encodingValue.map(A=>A.name),o=[...I,...n,...r,...C],a=e.appearance.details.layout;let s="";return a==="circular"&&(s="circular "),i==="point"&&n.includes("x")&&n.includes("y")?`${s}scatter plot`:i==="point"&&I.includes("x")&&n.includes("y")?`${s}scatter plot`:i==="point"&&n.includes("x")&&I.includes("y")?`${s}scatter plot`:i==="line"&&I.includes("x")&&n.includes("y")?`${s}line chart`:i==="line"&&n.includes("x")&&I.includes("y")?`${s}line chart`:i==="bar"&&I.includes("x")&&n.includes("y")?`${s}bar chart`:i==="bar"&&I.includes("x")&&I.includes("xe")&&I.includes("y")&&I.includes("ye")&&n.includes("color")?`${s}matrix`:i==="rect"&&I.includes("x")&&I.includes("xe")&&n.includes("color")?`${s}heat map`:i==="rect"&&I.includes("x")&&I.includes("xe")&&r.includes("color")?`${s}ideogram`:i==="rule"&&o.includes("x")&&o.includes("y")?`${s}chart with horizontal and vertical lines`:i==="rule"&&o.includes("x")?`${s}chart with vertical lines`:i==="rule"&&o.includes("y")?`${s}chart with horizontal lines`:eb.get(i)?`${s}chart with ${eb.get(i)}`:"unknown chart"}function crg(e){const g=[],i=[],I=[],n=["chart with horizontal and vertical lines","circular chart with horizontal and vertical lines","chart with vertical lines","circular chart with vertical lines","chart with horizontal lines","circular chart with horizontal lines"];for(const r of e.tracks)g.push(r.charttype),n.includes(r.charttype)?i.push(r.charttype):I.push(r.charttype);return i.length>0&&I.length>0?I.length==1?`annotated ${I}`:`overlaid ${Cr(I)} with annotation`:`overlaid ${Cr(g)}`}function urg(e){const g={};g.tracks={},g.title=e.title,g.subtitle=e.subtitle;const i={nTracks:0,rowViews:0,colViews:0,allPositions:[[0,0]],totalRows:0,totalCols:0,matrix:{},serialView:-1,parallelView:-1,serialCircular:[],parallelCircular:[]},I={};S_(e,"arrangement")&&Bce(e,"arrangement")?(I.arrangement=Bce(e,"arrangement"),I.arrangement==="serial"?(i.serialView+=1,i.serialCircular.push([])):I.arrangement==="parallel"&&(i.parallelView+=1,i.parallelCircular.push([]))):I.arrangement="vertical",e.layout?I.layout=e.layout:I.layout="linear",yHe(e,g,I,i),brg(i);const n={description:"",nTracks:i.nTracks,parentValues:I,counter:i};return g.composition=n,g.alt="",g.longDescription="",g}function yHe(e,g,i,I){if("tracks"in e){const n=wce(e,i);if(e.tracks.length>1)if(arg(e)){const r=e;g.tracks[I.nTracks]=mrg(r,n,I),I.nTracks>0&&(I.allPositions=[...I.allPositions,[I.rowViews,I.colViews]]),Jx(g,i,I),I.nTracks++}else for(let r=0;r0&&(I.allPositions=[...I.allPositions,[I.rowViews,I.colViews]]),Jx(g,i,I),I.nTracks++,i.arrangement==="vertical"||i.arrangement==="parallel"?I.rowViews++:I.colViews++}else{if(v_(e.tracks[0])){const r=e.tracks[0];g.tracks[I.nTracks]=hrg(r,i,I)}else{const r=e.tracks[0];g.tracks[I.nTracks]=w_(r,i,I)}I.nTracks>0&&(I.allPositions=[...I.allPositions,[I.rowViews,I.colViews]]),Jx(g,i,I),I.nTracks++}}else if("views"in e){const n=I.rowViews,r=I.colViews;e.views.forEach((C,o)=>{o!==0&&(i.arrangement==="vertical"||i.arrangement==="parallel"?I.rowViews++:I.colViews++);const a=wce(C,i);a.arrangement==="serial"&&i.arrangement!=="serial"&&(I.serialView+=1,I.serialCircular.push([])),a.arrangement==="parallel"&&i.arrangement!=="parallel"&&(I.parallelView+=1,I.parallelCircular.push([])),yHe(C,g,a,I)}),i.arrangement==="vertical"||i.arrangement==="parallel"?I.rowViews=n:I.colViews=r}}function wce(e,g){const i=JSON.parse(JSON.stringify(g));return S_(e,"arrangement")&&(i.arrangement=e.arrangement),S_(e,"layout")&&(i.layout=e.layout),i}function Jx(e,g,i){e.tracks[i.nTracks].appearance.details.layout=="circular"&&(g.arrangement==="serial"?i.serialCircular[i.serialView].push(i.nTracks):g.arrangement==="parallel"&&i.parallelCircular[i.parallelView].push(i.nTracks))}function w_(e,g,i){const I={};I.alttype="single";let n;e.id!=="unknown"?n=e.id:(n="",console.warn("ID not found?"));const r={trackNumber:i.nTracks,rowNumber:i.rowViews,colNumber:i.colViews},C={};C.assembly=e.assembly,C.layout=g.layout,C.overlaid=!1,C.mark=e.mark,C.encodings=Dv(e),C.linkingId=e.linkingId;const o=GHe(e.data,C.encodings),a={data:e.data,fields:o};e.dataTransform&&(a.transforms=e.dataTransform);const s={description:"",details:r},A={description:"",details:C},l={description:"",details:a};return I.uid=n,I.position=s,I.appearance=A,I.title=e.title,I.data=l,I.charttype=bHe(I),I.description="",I}function ZHe(e,g,i,I){let n={...e,...g};return delete n._overlay,delete n.overlayOnPreviousTrack,n=n,w_(n,i,I)}function drg(e,g,i){const I=[];for(let o=0;o{a!=="text"&&(e._overlay[o][a]?I[o][a]=e._overlay[o][a]:e[a]&&(I[o][a]=e[a]))}),e._overlay[o].dataTransform?I[o].dataTransform=e._overlay[o].dataTransform:e.dataTransform&&(I[o].dataTransform=e.dataTransform);const n={},r={};I.filter(o=>o.mark===void 0).length===0&&[...new Set(I.map(o=>o.mark))].length===1?(n.mark=I[0].mark,I.map(o=>delete o.mark)):r.mark=!0,Fv.forEach(o=>{o!=="text"&&(I.filter(a=>a[o]===void 0).length===0&&[...new Set(I.map(a=>a[o]))].length===1?(n[o]=I[0][o],I.map(a=>delete a[o])):r[o]=!0)}),I.filter(o=>o.dataTransform===void 0).length===0&&[...new Set(I.map(o=>o.dataTransform))].length===1?(n.dataTransform=I[0].dataTransform,I.map(o=>delete o.dataTransform)):r.dataTransform=!0,r.mark&&delete e.mark,n.mark&&(e.mark=n.mark),r.dataTransform&&delete e.dataTransform,n.dataTransform&&(e.dataTransform=n.dataTransform),Fv.forEach(o=>{o!=="text"&&(r[o]&&delete e[o],n[o]&&(e[o]=n[o]))});const C=[];for(let o=0;o0){for(const f of r){let b,p;f.x&&(p="x",B_(f.x)&&(b=f.x.linkingId)),f.y&&(p="y",B_(f.y)&&(b=f.y.linkingId)),b="temp",p!==void 0&&b!==void 0&&o.push({channel:p,linkingId:b})}if(C.length===1){const f=ZHe(e,C[0],g,i);return f.appearance.details.linked=o,f}else e._overlay=C}const[a,s,A]=drg(e,g,i),l={};if(l.assembly=A[0].appearance.details.assembly,l.layout=A[0].appearance.details.layout,l.overlaid=!0,a.mark){l.mark=a.mark;const f={...a};for(let b=0;b{p!=="text"&&(f[p]||s[b][p]&&(f[p]=s[b][p]))});l.encodings=Dv(f)}else l.markByTrack=A.map(f=>f.appearance.details.mark),l.encodings=Dv(a),l.encodingsByTrack=s.map(f=>Dv(f));r.length>0&&(l.linked=o);const c={};c.alttype="ov-mark";const u=A[0].data.details,d={description:"",details:n},h={description:"",details:l},m={description:"",details:u};return c.uid=I,c.position=d,c.appearance=h,c.title=e.title,c.data=m,c.charttype=A.map(f=>f.charttype),c.description="",c}function mrg(e,g,i){let I=b0e(e);return I=Ebe(I),frg(e,I,g,i)}function frg(e,g,i,I){const n={};n.alttype="ov-data";const r={trackNumber:I.nTracks,rowNumber:I.rowViews,colNumber:I.colViews},C=[],o=[];for(let A of g){if(v_(A)){let u;v_(A._overlay[0])?u={...A,...A._overlay[0]._overlay[0]}:u={...A,...A._overlay[0]},delete u._overlay,delete u.overlayOnPreviousTrack,A=u}const l=A;let c;l.id!=="unknown"?c=l.id:c="",C.push(c),o.push(prg(l,i))}n.tracks=o,n.uids=C;const a={description:"",details:r};n.position=a,n.title=e.title;const s=crg(n);return n.appearance={description:"",details:{layout:"linear",charttype:s}},n.description="",n}function prg(e,g,i){const I={};I.alttype="ov-data-ind";let n;e.id!=="unknown"?n=e.id:n="",I.uid=n;const r={};r.assembly=e.assembly,r.layout=g.layout,r.overlaid=!1,r.mark=e.mark,r.encodings=Dv(e);const C=GHe(e.data,r.encodings),o={data:e.data,fields:C},a={description:"",details:r},s={description:"",details:o};return I.appearance=a,I.data=s,I.charttype=bHe(I),I.description="",I}function GHe(e,g){const i={};return g.encodingDeepGenomic.length>0&&(g.encodingDeepGenomic[0].details.field?i.genomicField=g.encodingDeepGenomic[0].details.field:i.genomicField),g.encodingDeepQuantitative.length>0&&(g.encodingDeepQuantitative[0].details.field?i.valueField=g.encodingDeepQuantitative[0].details.field:i.valueField),g.encodingDeepNominal.length>0&&(g.encodingDeepNominal[0].details.field?i.categoryField=g.encodingDeepNominal[0].details.field:i.categoryField),i}function Dv(e){const g=[],i=[],I=[],n=[];return Fv.forEach(C=>{const o=e[C];B_(o)?o.type==="genomic"?g.push({name:C,description:"",details:o}):o.type==="quantitative"?i.push({name:C,description:"",details:o}):I.push({name:C,description:"",details:o}):Arg(o)&&n.push({name:C,description:"",details:o})}),{encodingDeepGenomic:g,encodingDeepQuantitative:i,encodingDeepNominal:I,encodingValue:n}}function brg(e){e.totalRows=Math.max(...e.allPositions.map(i=>i[0]))+1,e.totalCols=Math.max(...e.allPositions.map(i=>i[1]))+1;const g={};for(let i=0;ir[0]===i).map(r=>r[1]),n={};for(const r of I)n[r]?n[r]=n[r]+1:n[r]=1;g[i]=n}e.matrix=g}var u8={};Object.defineProperty(u8,"__esModule",{value:!0});var eC=u8.GetColorName=void 0;eC=u8.GetColorName=function(e){var g=new yrg,i=g.name(e);i[0];var I=i[1];return I};var yrg=function(){function e(){this.names=[["000000","Black"],["000080","Navy Blue"],["0000C8","Dark Blue"],["0000FF","Blue"],["000741","Stratos"],["001B1C","Swamp"],["002387","Resolution Blue"],["002900","Deep Fir"],["002E20","Burnham"],["002FA7","International Klein Blue"],["003153","Prussian Blue"],["003366","Midnight Blue"],["003399","Smalt"],["003532","Deep Teal"],["003E40","Cyprus"],["004620","Kaitoke Green"],["0047AB","Cobalt"],["004816","Crusoe"],["004950","Sherpa Blue"],["0056A7","Endeavour"],["00581A","Camarone"],["0066CC","Science Blue"],["0066FF","Blue Ribbon"],["00755E","Tropical Rain Forest"],["0076A3","Allports"],["007BA7","Deep Cerulean"],["007EC7","Lochmara"],["007FFF","Azure Radiance"],["008080","Teal"],["0095B6","Bondi Blue"],["009DC4","Pacific Blue"],["00A693","Persian Green"],["00A86B","Jade"],["00CC99","Caribbean Green"],["00CCCC","Robin's Egg Blue"],["00FF00","Green"],["00FF7F","Spring Green"],["00FFFF","Cyan / Aqua"],["010D1A","Blue Charcoal"],["011635","Midnight"],["011D13","Holly"],["012731","Daintree"],["01361C","Cardin Green"],["01371A","County Green"],["013E62","Astronaut Blue"],["013F6A","Regal Blue"],["014B43","Aqua Deep"],["015E85","Orient"],["016162","Blue Stone"],["016D39","Fun Green"],["01796F","Pine Green"],["017987","Blue Lagoon"],["01826B","Deep Sea"],["01A368","Green Haze"],["022D15","English Holly"],["02402C","Sherwood Green"],["02478E","Congress Blue"],["024E46","Evening Sea"],["026395","Bahama Blue"],["02866F","Observatory"],["02A4D3","Cerulean"],["03163C","Tangaroa"],["032B52","Green Vogue"],["036A6E","Mosque"],["041004","Midnight Moss"],["041322","Black Pearl"],["042E4C","Blue Whale"],["044022","Zuccini"],["044259","Teal Blue"],["051040","Deep Cove"],["051657","Gulf Blue"],["055989","Venice Blue"],["056F57","Watercourse"],["062A78","Catalina Blue"],["063537","Tiber"],["069B81","Gossamer"],["06A189","Niagara"],["073A50","Tarawera"],["080110","Jaguar"],["081910","Black Bean"],["082567","Deep Sapphire"],["088370","Elf Green"],["08E8DE","Bright Turquoise"],["092256","Downriver"],["09230F","Palm Green"],["09255D","Madison"],["093624","Bottle Green"],["095859","Deep Sea Green"],["097F4B","Salem"],["0A001C","Black Russian"],["0A480D","Dark Fern"],["0A6906","Japanese Laurel"],["0A6F75","Atoll"],["0B0B0B","Cod Gray"],["0B0F08","Marshland"],["0B1107","Gordons Green"],["0B1304","Black Forest"],["0B6207","San Felix"],["0BDA51","Malachite"],["0C0B1D","Ebony"],["0C0D0F","Woodsmoke"],["0C1911","Racing Green"],["0C7A79","Surfie Green"],["0C8990","Blue Chill"],["0D0332","Black Rock"],["0D1117","Bunker"],["0D1C19","Aztec"],["0D2E1C","Bush"],["0E0E18","Cinder"],["0E2A30","Firefly"],["0F2D9E","Torea Bay"],["10121D","Vulcan"],["101405","Green Waterloo"],["105852","Eden"],["110C6C","Arapawa"],["120A8F","Ultramarine"],["123447","Elephant"],["126B40","Jewel"],["130000","Diesel"],["130A06","Asphalt"],["13264D","Blue Zodiac"],["134F19","Parsley"],["140600","Nero"],["1450AA","Tory Blue"],["151F4C","Bunting"],["1560BD","Denim"],["15736B","Genoa"],["161928","Mirage"],["161D10","Hunter Green"],["162A40","Big Stone"],["163222","Celtic"],["16322C","Timber Green"],["163531","Gable Green"],["171F04","Pine Tree"],["175579","Chathams Blue"],["182D09","Deep Forest Green"],["18587A","Blumine"],["19330E","Palm Leaf"],["193751","Nile Blue"],["1959A8","Fun Blue"],["1A1A68","Lucky Point"],["1AB385","Mountain Meadow"],["1B0245","Tolopea"],["1B1035","Haiti"],["1B127B","Deep Koamaru"],["1B1404","Acadia"],["1B2F11","Seaweed"],["1B3162","Biscay"],["1B659D","Matisse"],["1C1208","Crowshead"],["1C1E13","Rangoon Green"],["1C39BB","Persian Blue"],["1C402E","Everglade"],["1C7C7D","Elm"],["1D6142","Green Pea"],["1E0F04","Creole"],["1E1609","Karaka"],["1E1708","El Paso"],["1E385B","Cello"],["1E433C","Te Papa Green"],["1E90FF","Dodger Blue"],["1E9AB0","Eastern Blue"],["1F120F","Night Rider"],["1FC2C2","Java"],["20208D","Jacksons Purple"],["202E54","Cloud Burst"],["204852","Blue Dianne"],["211A0E","Eternity"],["220878","Deep Blue"],["228B22","Forest Green"],["233418","Mallard"],["240A40","Violet"],["240C02","Kilamanjaro"],["242A1D","Log Cabin"],["242E16","Black Olive"],["24500F","Green House"],["251607","Graphite"],["251706","Cannon Black"],["251F4F","Port Gore"],["25272C","Shark"],["25311C","Green Kelp"],["2596D1","Curious Blue"],["260368","Paua"],["26056A","Paris M"],["261105","Wood Bark"],["261414","Gondola"],["262335","Steel Gray"],["26283B","Ebony Clay"],["273A81","Bay of Many"],["27504B","Plantation"],["278A5B","Eucalyptus"],["281E15","Oil"],["283A77","Astronaut"],["286ACD","Mariner"],["290C5E","Violent Violet"],["292130","Bastille"],["292319","Zeus"],["292937","Charade"],["297B9A","Jelly Bean"],["29AB87","Jungle Green"],["2A0359","Cherry Pie"],["2A140E","Coffee Bean"],["2A2630","Baltic Sea"],["2A380B","Turtle Green"],["2A52BE","Cerulean Blue"],["2B0202","Sepia Black"],["2B194F","Valhalla"],["2B3228","Heavy Metal"],["2C0E8C","Blue Gem"],["2C1632","Revolver"],["2C2133","Bleached Cedar"],["2C8C84","Lochinvar"],["2D2510","Mikado"],["2D383A","Outer Space"],["2D569B","St Tropaz"],["2E0329","Jacaranda"],["2E1905","Jacko Bean"],["2E3222","Rangitoto"],["2E3F62","Rhino"],["2E8B57","Sea Green"],["2EBFD4","Scooter"],["2F270E","Onion"],["2F3CB3","Governor Bay"],["2F519E","Sapphire"],["2F5A57","Spectra"],["2F6168","Casal"],["300529","Melanzane"],["301F1E","Cocoa Brown"],["302A0F","Woodrush"],["304B6A","San Juan"],["30D5C8","Turquoise"],["311C17","Eclipse"],["314459","Pickled Bluewood"],["315BA1","Azure"],["31728D","Calypso"],["317D82","Paradiso"],["32127A","Persian Indigo"],["32293A","Blackcurrant"],["323232","Mine Shaft"],["325D52","Stromboli"],["327C14","Bilbao"],["327DA0","Astral"],["33036B","Christalle"],["33292F","Thunder"],["33CC99","Shamrock"],["341515","Tamarind"],["350036","Mardi Gras"],["350E42","Valentino"],["350E57","Jagger"],["353542","Tuna"],["354E8C","Chambray"],["363050","Martinique"],["363534","Tuatara"],["363C0D","Waiouru"],["36747D","Ming"],["368716","La Palma"],["370202","Chocolate"],["371D09","Clinker"],["37290E","Brown Tumbleweed"],["373021","Birch"],["377475","Oracle"],["380474","Blue Diamond"],["381A51","Grape"],["383533","Dune"],["384555","Oxford Blue"],["384910","Clover"],["394851","Limed Spruce"],["396413","Dell"],["3A0020","Toledo"],["3A2010","Sambuca"],["3A2A6A","Jacarta"],["3A686C","William"],["3A6A47","Killarney"],["3AB09E","Keppel"],["3B000B","Temptress"],["3B0910","Aubergine"],["3B1F1F","Jon"],["3B2820","Treehouse"],["3B7A57","Amazon"],["3B91B4","Boston Blue"],["3C0878","Windsor"],["3C1206","Rebel"],["3C1F76","Meteorite"],["3C2005","Dark Ebony"],["3C3910","Camouflage"],["3C4151","Bright Gray"],["3C4443","Cape Cod"],["3C493A","Lunar Green"],["3D0C02","Bean "],["3D2B1F","Bistre"],["3D7D52","Goblin"],["3E0480","Kingfisher Daisy"],["3E1C14","Cedar"],["3E2B23","English Walnut"],["3E2C1C","Black Marlin"],["3E3A44","Ship Gray"],["3EABBF","Pelorous"],["3F2109","Bronze"],["3F2500","Cola"],["3F3002","Madras"],["3F307F","Minsk"],["3F4C3A","Cabbage Pont"],["3F583B","Tom Thumb"],["3F5D53","Mineral Green"],["3FC1AA","Puerto Rico"],["3FFF00","Harlequin"],["401801","Brown Pod"],["40291D","Cork"],["403B38","Masala"],["403D19","Thatch Green"],["405169","Fiord"],["40826D","Viridian"],["40A860","Chateau Green"],["410056","Ripe Plum"],["411F10","Paco"],["412010","Deep Oak"],["413C37","Merlin"],["414257","Gun Powder"],["414C7D","East Bay"],["4169E1","Royal Blue"],["41AA78","Ocean Green"],["420303","Burnt Maroon"],["423921","Lisbon Brown"],["427977","Faded Jade"],["431560","Scarlet Gum"],["433120","Iroko"],["433E37","Armadillo"],["434C59","River Bed"],["436A0D","Green Leaf"],["44012D","Barossa"],["441D00","Morocco Brown"],["444954","Mako"],["454936","Kelp"],["456CAC","San Marino"],["45B1E8","Picton Blue"],["460B41","Loulou"],["462425","Crater Brown"],["465945","Gray Asparagus"],["4682B4","Steel Blue"],["480404","Rustic Red"],["480607","Bulgarian Rose"],["480656","Clairvoyant"],["481C1C","Cocoa Bean"],["483131","Woody Brown"],["483C32","Taupe"],["49170C","Van Cleef"],["492615","Brown Derby"],["49371B","Metallic Bronze"],["495400","Verdun Green"],["496679","Blue Bayoux"],["497183","Bismark"],["4A2A04","Bracken"],["4A3004","Deep Bronze"],["4A3C30","Mondo"],["4A4244","Tundora"],["4A444B","Gravel"],["4A4E5A","Trout"],["4B0082","Pigment Indigo"],["4B5D52","Nandor"],["4C3024","Saddle"],["4C4F56","Abbey"],["4D0135","Blackberry"],["4D0A18","Cab Sav"],["4D1E01","Indian Tan"],["4D282D","Cowboy"],["4D282E","Livid Brown"],["4D3833","Rock"],["4D3D14","Punga"],["4D400F","Bronzetone"],["4D5328","Woodland"],["4E0606","Mahogany"],["4E2A5A","Bossanova"],["4E3B41","Matterhorn"],["4E420C","Bronze Olive"],["4E4562","Mulled Wine"],["4E6649","Axolotl"],["4E7F9E","Wedgewood"],["4EABD1","Shakespeare"],["4F1C70","Honey Flower"],["4F2398","Daisy Bush"],["4F69C6","Indigo"],["4F7942","Fern Green"],["4F9D5D","Fruit Salad"],["4FA83D","Apple"],["504351","Mortar"],["507096","Kashmir Blue"],["507672","Cutty Sark"],["50C878","Emerald"],["514649","Emperor"],["516E3D","Chalet Green"],["517C66","Como"],["51808F","Smalt Blue"],["52001F","Castro"],["520C17","Maroon Oak"],["523C94","Gigas"],["533455","Voodoo"],["534491","Victoria"],["53824B","Hippie Green"],["541012","Heath"],["544333","Judge Gray"],["54534D","Fuscous Gray"],["549019","Vida Loca"],["55280C","Cioccolato"],["555B10","Saratoga"],["556D56","Finlandia"],["5590D9","Havelock Blue"],["56B4BE","Fountain Blue"],["578363","Spring Leaves"],["583401","Saddle Brown"],["585562","Scarpa Flow"],["587156","Cactus"],["589AAF","Hippie Blue"],["591D35","Wine Berry"],["592804","Brown Bramble"],["593737","Congo Brown"],["594433","Millbrook"],["5A6E9C","Waikawa Gray"],["5A87A0","Horizon"],["5B3013","Jambalaya"],["5C0120","Bordeaux"],["5C0536","Mulberry Wood"],["5C2E01","Carnaby Tan"],["5C5D75","Comet"],["5D1E0F","Redwood"],["5D4C51","Don Juan"],["5D5C58","Chicago"],["5D5E37","Verdigris"],["5D7747","Dingley"],["5DA19F","Breaker Bay"],["5E483E","Kabul"],["5E5D3B","Hemlock"],["5F3D26","Irish Coffee"],["5F5F6E","Mid Gray"],["5F6672","Shuttle Gray"],["5FA777","Aqua Forest"],["5FB3AC","Tradewind"],["604913","Horses Neck"],["605B73","Smoky"],["606E68","Corduroy"],["6093D1","Danube"],["612718","Espresso"],["614051","Eggplant"],["615D30","Costa Del Sol"],["61845F","Glade Green"],["622F30","Buccaneer"],["623F2D","Quincy"],["624E9A","Butterfly Bush"],["625119","West Coast"],["626649","Finch"],["639A8F","Patina"],["63B76C","Fern"],["6456B7","Blue Violet"],["646077","Dolphin"],["646463","Storm Dust"],["646A54","Siam"],["646E75","Nevada"],["6495ED","Cornflower Blue"],["64CCDB","Viking"],["65000B","Rosewood"],["651A14","Cherrywood"],["652DC1","Purple Heart"],["657220","Fern Frond"],["65745D","Willow Grove"],["65869F","Hoki"],["660045","Pompadour"],["660099","Purple"],["66023C","Tyrian Purple"],["661010","Dark Tan"],["66B58F","Silver Tree"],["66FF00","Bright Green"],["66FF66","Screamin' Green"],["67032D","Black Rose"],["675FA6","Scampi"],["676662","Ironside Gray"],["678975","Viridian Green"],["67A712","Christi"],["683600","Nutmeg Wood Finish"],["685558","Zambezi"],["685E6E","Salt Box"],["692545","Tawny Port"],["692D54","Finn"],["695F62","Scorpion"],["697E9A","Lynch"],["6A442E","Spice"],["6A5D1B","Himalaya"],["6A6051","Soya Bean"],["6B2A14","Hairy Heath"],["6B3FA0","Royal Purple"],["6B4E31","Shingle Fawn"],["6B5755","Dorado"],["6B8BA2","Bermuda Gray"],["6B8E23","Olive Drab"],["6C3082","Eminence"],["6CDAE7","Turquoise Blue"],["6D0101","Lonestar"],["6D5E54","Pine Cone"],["6D6C6C","Dove Gray"],["6D9292","Juniper"],["6D92A1","Gothic"],["6E0902","Red Oxide"],["6E1D14","Moccaccino"],["6E4826","Pickled Bean"],["6E4B26","Dallas"],["6E6D57","Kokoda"],["6E7783","Pale Sky"],["6F440C","Cafe Royale"],["6F6A61","Flint"],["6F8E63","Highland"],["6F9D02","Limeade"],["6FD0C5","Downy"],["701C1C","Persian Plum"],["704214","Sepia"],["704A07","Antique Bronze"],["704F50","Ferra"],["706555","Coffee"],["708090","Slate Gray"],["711A00","Cedar Wood Finish"],["71291D","Metallic Copper"],["714693","Affair"],["714AB2","Studio"],["715D47","Tobacco Brown"],["716338","Yellow Metal"],["716B56","Peat"],["716E10","Olivetone"],["717486","Storm Gray"],["718080","Sirocco"],["71D9E2","Aquamarine Blue"],["72010F","Venetian Red"],["724A2F","Old Copper"],["726D4E","Go Ben"],["727B89","Raven"],["731E8F","Seance"],["734A12","Raw Umber"],["736C9F","Kimberly"],["736D58","Crocodile"],["737829","Crete"],["738678","Xanadu"],["74640D","Spicy Mustard"],["747D63","Limed Ash"],["747D83","Rolling Stone"],["748881","Blue Smoke"],["749378","Laurel"],["74C365","Mantis"],["755A57","Russett"],["7563A8","Deluge"],["76395D","Cosmic"],["7666C6","Blue Marguerite"],["76BD17","Lima"],["76D7EA","Sky Blue"],["770F05","Dark Burgundy"],["771F1F","Crown of Thorns"],["773F1A","Walnut"],["776F61","Pablo"],["778120","Pacifika"],["779E86","Oxley"],["77DD77","Pastel Green"],["780109","Japanese Maple"],["782D19","Mocha"],["782F16","Peanut"],["78866B","Camouflage Green"],["788A25","Wasabi"],["788BBA","Ship Cove"],["78A39C","Sea Nymph"],["795D4C","Roman Coffee"],["796878","Old Lavender"],["796989","Rum"],["796A78","Fedora"],["796D62","Sandstone"],["79DEEC","Spray"],["7A013A","Siren"],["7A58C1","Fuchsia Blue"],["7A7A7A","Boulder"],["7A89B8","Wild Blue Yonder"],["7AC488","De York"],["7B3801","Red Beech"],["7B3F00","Cinnamon"],["7B6608","Yukon Gold"],["7B7874","Tapa"],["7B7C94","Waterloo "],["7B8265","Flax Smoke"],["7B9F80","Amulet"],["7BA05B","Asparagus"],["7C1C05","Kenyan Copper"],["7C7631","Pesto"],["7C778A","Topaz"],["7C7B7A","Concord"],["7C7B82","Jumbo"],["7C881A","Trendy Green"],["7CA1A6","Gumbo"],["7CB0A1","Acapulco"],["7CB7BB","Neptune"],["7D2C14","Pueblo"],["7DA98D","Bay Leaf"],["7DC8F7","Malibu"],["7DD8C6","Bermuda"],["7E3A15","Copper Canyon"],["7F1734","Claret"],["7F3A02","Peru Tan"],["7F626D","Falcon"],["7F7589","Mobster"],["7F76D3","Moody Blue"],["7FFF00","Chartreuse"],["7FFFD4","Aquamarine"],["800000","Maroon"],["800B47","Rose Bud Cherry"],["801818","Falu Red"],["80341F","Red Robin"],["803790","Vivid Violet"],["80461B","Russet"],["807E79","Friar Gray"],["808000","Olive"],["808080","Gray"],["80B3AE","Gulf Stream"],["80B3C4","Glacier"],["80CCEA","Seagull"],["81422C","Nutmeg"],["816E71","Spicy Pink"],["817377","Empress"],["819885","Spanish Green"],["826F65","Sand Dune"],["828685","Gunsmoke"],["828F72","Battleship Gray"],["831923","Merlot"],["837050","Shadow"],["83AA5D","Chelsea Cucumber"],["83D0C6","Monte Carlo"],["843179","Plum"],["84A0A0","Granny Smith"],["8581D9","Chetwode Blue"],["858470","Bandicoot"],["859FAF","Bali Hai"],["85C4CC","Half Baked"],["860111","Red Devil"],["863C3C","Lotus"],["86483C","Ironstone"],["864D1E","Bull Shot"],["86560A","Rusty Nail"],["868974","Bitter"],["86949F","Regent Gray"],["871550","Disco"],["87756E","Americano"],["877C7B","Hurricane"],["878D91","Oslo Gray"],["87AB39","Sushi"],["885342","Spicy Mix"],["886221","Kumera"],["888387","Suva Gray"],["888D65","Avocado"],["893456","Camelot"],["893843","Solid Pink"],["894367","Cannon Pink"],["897D6D","Makara"],["8A3324","Burnt Umber"],["8A73D6","True V"],["8A8360","Clay Creek"],["8A8389","Monsoon"],["8A8F8A","Stack"],["8AB9F1","Jordy Blue"],["8B00FF","Electric Violet"],["8B0723","Monarch"],["8B6B0B","Corn Harvest"],["8B8470","Olive Haze"],["8B847E","Schooner"],["8B8680","Natural Gray"],["8B9C90","Mantle"],["8B9FEE","Portage"],["8BA690","Envy"],["8BA9A5","Cascade"],["8BE6D8","Riptide"],["8C055E","Cardinal Pink"],["8C472F","Mule Fawn"],["8C5738","Potters Clay"],["8C6495","Trendy Pink"],["8D0226","Paprika"],["8D3D38","Sanguine Brown"],["8D3F3F","Tosca"],["8D7662","Cement"],["8D8974","Granite Green"],["8D90A1","Manatee"],["8DA8CC","Polo Blue"],["8E0000","Red Berry"],["8E4D1E","Rope"],["8E6F70","Opium"],["8E775E","Domino"],["8E8190","Mamba"],["8EABC1","Nepal"],["8F021C","Pohutukawa"],["8F3E33","El Salva"],["8F4B0E","Korma"],["8F8176","Squirrel"],["8FD6B4","Vista Blue"],["900020","Burgundy"],["901E1E","Old Brick"],["907874","Hemp"],["907B71","Almond Frost"],["908D39","Sycamore"],["92000A","Sangria"],["924321","Cumin"],["926F5B","Beaver"],["928573","Stonewall"],["928590","Venus"],["9370DB","Medium Purple"],["93CCEA","Cornflower"],["93DFB8","Algae Green"],["944747","Copper Rust"],["948771","Arrowtown"],["950015","Scarlett"],["956387","Strikemaster"],["959396","Mountain Mist"],["960018","Carmine"],["964B00","Brown"],["967059","Leather"],["9678B6","Purple Mountain's Majesty"],["967BB6","Lavender Purple"],["96A8A1","Pewter"],["96BBAB","Summer Green"],["97605D","Au Chico"],["9771B5","Wisteria"],["97CD2D","Atlantis"],["983D61","Vin Rouge"],["9874D3","Lilac Bush"],["98777B","Bazaar"],["98811B","Hacienda"],["988D77","Pale Oyster"],["98FF98","Mint Green"],["990066","Fresh Eggplant"],["991199","Violet Eggplant"],["991613","Tamarillo"],["991B07","Totem Pole"],["996666","Copper Rose"],["9966CC","Amethyst"],["997A8D","Mountbatten Pink"],["9999CC","Blue Bell"],["9A3820","Prairie Sand"],["9A6E61","Toast"],["9A9577","Gurkha"],["9AB973","Olivine"],["9AC2B8","Shadow Green"],["9B4703","Oregon"],["9B9E8F","Lemon Grass"],["9C3336","Stiletto"],["9D5616","Hawaiian Tan"],["9DACB7","Gull Gray"],["9DC209","Pistachio"],["9DE093","Granny Smith Apple"],["9DE5FF","Anakiwa"],["9E5302","Chelsea Gem"],["9E5B40","Sepia Skin"],["9EA587","Sage"],["9EA91F","Citron"],["9EB1CD","Rock Blue"],["9EDEE0","Morning Glory"],["9F381D","Cognac"],["9F821C","Reef Gold"],["9F9F9C","Star Dust"],["9FA0B1","Santas Gray"],["9FD7D3","Sinbad"],["9FDD8C","Feijoa"],["A02712","Tabasco"],["A1750D","Buttered Rum"],["A1ADB5","Hit Gray"],["A1C50A","Citrus"],["A1DAD7","Aqua Island"],["A1E9DE","Water Leaf"],["A2006D","Flirt"],["A23B6C","Rouge"],["A26645","Cape Palliser"],["A2AAB3","Gray Chateau"],["A2AEAB","Edward"],["A3807B","Pharlap"],["A397B4","Amethyst Smoke"],["A3E3ED","Blizzard Blue"],["A4A49D","Delta"],["A4A6D3","Wistful"],["A4AF6E","Green Smoke"],["A50B5E","Jazzberry Jam"],["A59B91","Zorba"],["A5CB0C","Bahia"],["A62F20","Roof Terracotta"],["A65529","Paarl"],["A68B5B","Barley Corn"],["A69279","Donkey Brown"],["A6A29A","Dawn"],["A72525","Mexican Red"],["A7882C","Luxor Gold"],["A85307","Rich Gold"],["A86515","Reno Sand"],["A86B6B","Coral Tree"],["A8989B","Dusty Gray"],["A899E6","Dull Lavender"],["A8A589","Tallow"],["A8AE9C","Bud"],["A8AF8E","Locust"],["A8BD9F","Norway"],["A8E3BD","Chinook"],["A9A491","Gray Olive"],["A9ACB6","Aluminium"],["A9B2C3","Cadet Blue"],["A9B497","Schist"],["A9BDBF","Tower Gray"],["A9BEF2","Perano"],["A9C6C2","Opal"],["AA375A","Night Shadz"],["AA4203","Fire"],["AA8B5B","Muesli"],["AA8D6F","Sandal"],["AAA5A9","Shady Lady"],["AAA9CD","Logan"],["AAABB7","Spun Pearl"],["AAD6E6","Regent St Blue"],["AAF0D1","Magic Mint"],["AB0563","Lipstick"],["AB3472","Royal Heath"],["AB917A","Sandrift"],["ABA0D9","Cold Purple"],["ABA196","Bronco"],["AC8A56","Limed Oak"],["AC91CE","East Side"],["AC9E22","Lemon Ginger"],["ACA494","Napa"],["ACA586","Hillary"],["ACA59F","Cloudy"],["ACACAC","Silver Chalice"],["ACB78E","Swamp Green"],["ACCBB1","Spring Rain"],["ACDD4D","Conifer"],["ACE1AF","Celadon"],["AD781B","Mandalay"],["ADBED1","Casper"],["ADDFAD","Moss Green"],["ADE6C4","Padua"],["ADFF2F","Green Yellow"],["AE4560","Hippie Pink"],["AE6020","Desert"],["AE809E","Bouquet"],["AF4035","Medium Carmine"],["AF4D43","Apple Blossom"],["AF593E","Brown Rust"],["AF8751","Driftwood"],["AF8F2C","Alpine"],["AF9F1C","Lucky"],["AFA09E","Martini"],["AFB1B8","Bombay"],["AFBDD9","Pigeon Post"],["B04C6A","Cadillac"],["B05D54","Matrix"],["B05E81","Tapestry"],["B06608","Mai Tai"],["B09A95","Del Rio"],["B0E0E6","Powder Blue"],["B0E313","Inch Worm"],["B10000","Bright Red"],["B14A0B","Vesuvius"],["B1610B","Pumpkin Skin"],["B16D52","Santa Fe"],["B19461","Teak"],["B1E2C1","Fringy Flower"],["B1F4E7","Ice Cold"],["B20931","Shiraz"],["B2A1EA","Biloba Flower"],["B32D29","Tall Poppy"],["B35213","Fiery Orange"],["B38007","Hot Toddy"],["B3AF95","Taupe Gray"],["B3C110","La Rioja"],["B43332","Well Read"],["B44668","Blush"],["B4CFD3","Jungle Mist"],["B57281","Turkish Rose"],["B57EDC","Lavender"],["B5A27F","Mongoose"],["B5B35C","Olive Green"],["B5D2CE","Jet Stream"],["B5ECDF","Cruise"],["B6316C","Hibiscus"],["B69D98","Thatch"],["B6B095","Heathered Gray"],["B6BAA4","Eagle"],["B6D1EA","Spindle"],["B6D3BF","Gum Leaf"],["B7410E","Rust"],["B78E5C","Muddy Waters"],["B7A214","Sahara"],["B7A458","Husk"],["B7B1B1","Nobel"],["B7C3D0","Heather"],["B7F0BE","Madang"],["B81104","Milano Red"],["B87333","Copper"],["B8B56A","Gimblet"],["B8C1B1","Green Spring"],["B8C25D","Celery"],["B8E0F9","Sail"],["B94E48","Chestnut"],["B95140","Crail"],["B98D28","Marigold"],["B9C46A","Wild Willow"],["B9C8AC","Rainee"],["BA0101","Guardsman Red"],["BA450C","Rock Spray"],["BA6F1E","Bourbon"],["BA7F03","Pirate Gold"],["BAB1A2","Nomad"],["BAC7C9","Submarine"],["BAEEF9","Charlotte"],["BB3385","Medium Red Violet"],["BB8983","Brandy Rose"],["BBD009","Rio Grande"],["BBD7C1","Surf"],["BCC9C2","Powder Ash"],["BD5E2E","Tuscany"],["BD978E","Quicksand"],["BDB1A8","Silk"],["BDB2A1","Malta"],["BDB3C7","Chatelle"],["BDBBD7","Lavender Gray"],["BDBDC6","French Gray"],["BDC8B3","Clay Ash"],["BDC9CE","Loblolly"],["BDEDFD","French Pass"],["BEA6C3","London Hue"],["BEB5B7","Pink Swan"],["BEDE0D","Fuego"],["BF5500","Rose of Sharon"],["BFB8B0","Tide"],["BFBED8","Blue Haze"],["BFC1C2","Silver Sand"],["BFC921","Key Lime Pie"],["BFDBE2","Ziggurat"],["BFFF00","Lime"],["C02B18","Thunderbird"],["C04737","Mojo"],["C08081","Old Rose"],["C0C0C0","Silver"],["C0D3B9","Pale Leaf"],["C0D8B6","Pixie Green"],["C1440E","Tia Maria"],["C154C1","Fuchsia Pink"],["C1A004","Buddha Gold"],["C1B7A4","Bison Hide"],["C1BAB0","Tea"],["C1BECD","Gray Suit"],["C1D7B0","Sprout"],["C1F07C","Sulu"],["C26B03","Indochine"],["C2955D","Twine"],["C2BDB6","Cotton Seed"],["C2CAC4","Pumice"],["C2E8E5","Jagged Ice"],["C32148","Maroon Flush"],["C3B091","Indian Khaki"],["C3BFC1","Pale Slate"],["C3C3BD","Gray Nickel"],["C3CDE6","Periwinkle Gray"],["C3D1D1","Tiara"],["C3DDF9","Tropical Blue"],["C41E3A","Cardinal"],["C45655","Fuzzy Wuzzy Brown"],["C45719","Orange Roughy"],["C4C4BC","Mist Gray"],["C4D0B0","Coriander"],["C4F4EB","Mint Tulip"],["C54B8C","Mulberry"],["C59922","Nugget"],["C5994B","Tussock"],["C5DBCA","Sea Mist"],["C5E17A","Yellow Green"],["C62D42","Brick Red"],["C6726B","Contessa"],["C69191","Oriental Pink"],["C6A84B","Roti"],["C6C3B5","Ash"],["C6C8BD","Kangaroo"],["C6E610","Las Palmas"],["C7031E","Monza"],["C71585","Red Violet"],["C7BCA2","Coral Reef"],["C7C1FF","Melrose"],["C7C4BF","Cloud"],["C7C9D5","Ghost"],["C7CD90","Pine Glade"],["C7DDE5","Botticelli"],["C88A65","Antique Brass"],["C8A2C8","Lilac"],["C8A528","Hokey Pokey"],["C8AABF","Lily"],["C8B568","Laser"],["C8E3D7","Edgewater"],["C96323","Piper"],["C99415","Pizza"],["C9A0DC","Light Wisteria"],["C9B29B","Rodeo Dust"],["C9B35B","Sundance"],["C9B93B","Earls Green"],["C9C0BB","Silver Rust"],["C9D9D2","Conch"],["C9FFA2","Reef"],["C9FFE5","Aero Blue"],["CA3435","Flush Mahogany"],["CABB48","Turmeric"],["CADCD4","Paris White"],["CAE00D","Bitter Lemon"],["CAE6DA","Skeptic"],["CB8FA9","Viola"],["CBCAB6","Foggy Gray"],["CBD3B0","Green Mist"],["CBDBD6","Nebula"],["CC3333","Persian Red"],["CC5500","Burnt Orange"],["CC7722","Ochre"],["CC8899","Puce"],["CCCAA8","Thistle Green"],["CCCCFF","Periwinkle"],["CCFF00","Electric Lime"],["CD5700","Tenn"],["CD5C5C","Chestnut Rose"],["CD8429","Brandy Punch"],["CDF4FF","Onahau"],["CEB98F","Sorrell Brown"],["CEBABA","Cold Turkey"],["CEC291","Yuma"],["CEC7A7","Chino"],["CFA39D","Eunry"],["CFB53B","Old Gold"],["CFDCCF","Tasman"],["CFE5D2","Surf Crest"],["CFF9F3","Humming Bird"],["CFFAF4","Scandal"],["D05F04","Red Stage"],["D06DA1","Hopbush"],["D07D12","Meteor"],["D0BEF8","Perfume"],["D0C0E5","Prelude"],["D0F0C0","Tea Green"],["D18F1B","Geebung"],["D1BEA8","Vanilla"],["D1C6B4","Soft Amber"],["D1D2CA","Celeste"],["D1D2DD","Mischka"],["D1E231","Pear"],["D2691E","Hot Cinnamon"],["D27D46","Raw Sienna"],["D29EAA","Careys Pink"],["D2B48C","Tan"],["D2DA97","Deco"],["D2F6DE","Blue Romance"],["D2F8B0","Gossip"],["D3CBBA","Sisal"],["D3CDC5","Swirl"],["D47494","Charm"],["D4B6AF","Clam Shell"],["D4BF8D","Straw"],["D4C4A8","Akaroa"],["D4CD16","Bird Flower"],["D4D7D9","Iron"],["D4DFE2","Geyser"],["D4E2FC","Hawkes Blue"],["D54600","Grenadier"],["D591A4","Can Can"],["D59A6F","Whiskey"],["D5D195","Winter Hazel"],["D5F6E3","Granny Apple"],["D69188","My Pink"],["D6C562","Tacha"],["D6CEF6","Moon Raker"],["D6D6D1","Quill Gray"],["D6FFDB","Snowy Mint"],["D7837F","New York Pink"],["D7C498","Pavlova"],["D7D0FF","Fog"],["D84437","Valencia"],["D87C63","Japonica"],["D8BFD8","Thistle"],["D8C2D5","Maverick"],["D8FCFA","Foam"],["D94972","Cabaret"],["D99376","Burning Sand"],["D9B99B","Cameo"],["D9D6CF","Timberwolf"],["D9DCC1","Tana"],["D9E4F5","Link Water"],["D9F7FF","Mabel"],["DA3287","Cerise"],["DA5B38","Flame Pea"],["DA6304","Bamboo"],["DA6A41","Red Damask"],["DA70D6","Orchid"],["DA8A67","Copperfield"],["DAA520","Golden Grass"],["DAECD6","Zanah"],["DAF4F0","Iceberg"],["DAFAFF","Oyster Bay"],["DB5079","Cranberry"],["DB9690","Petite Orchid"],["DB995E","Di Serria"],["DBDBDB","Alto"],["DBFFF8","Frosted Mint"],["DC143C","Crimson"],["DC4333","Punch"],["DCB20C","Galliano"],["DCB4BC","Blossom"],["DCD747","Wattle"],["DCD9D2","Westar"],["DCDDCC","Moon Mist"],["DCEDB4","Caper"],["DCF0EA","Swans Down"],["DDD6D5","Swiss Coffee"],["DDF9F1","White Ice"],["DE3163","Cerise Red"],["DE6360","Roman"],["DEA681","Tumbleweed"],["DEBA13","Gold Tips"],["DEC196","Brandy"],["DECBC6","Wafer"],["DED4A4","Sapling"],["DED717","Barberry"],["DEE5C0","Beryl Green"],["DEF5FF","Pattens Blue"],["DF73FF","Heliotrope"],["DFBE6F","Apache"],["DFCD6F","Chenin"],["DFCFDB","Lola"],["DFECDA","Willow Brook"],["DFFF00","Chartreuse Yellow"],["E0B0FF","Mauve"],["E0B646","Anzac"],["E0B974","Harvest Gold"],["E0C095","Calico"],["E0FFFF","Baby Blue"],["E16865","Sunglo"],["E1BC64","Equator"],["E1C0C8","Pink Flare"],["E1E6D6","Periglacial Blue"],["E1EAD4","Kidnapper"],["E1F6E8","Tara"],["E25465","Mandy"],["E2725B","Terracotta"],["E28913","Golden Bell"],["E292C0","Shocking"],["E29418","Dixie"],["E29CD2","Light Orchid"],["E2D8ED","Snuff"],["E2EBED","Mystic"],["E2F3EC","Apple Green"],["E30B5C","Razzmatazz"],["E32636","Alizarin Crimson"],["E34234","Cinnabar"],["E3BEBE","Cavern Pink"],["E3F5E1","Peppermint"],["E3F988","Mindaro"],["E47698","Deep Blush"],["E49B0F","Gamboge"],["E4C2D5","Melanie"],["E4CFDE","Twilight"],["E4D1C0","Bone"],["E4D422","Sunflower"],["E4D5B7","Grain Brown"],["E4D69B","Zombie"],["E4F6E7","Frostee"],["E4FFD1","Snow Flurry"],["E52B50","Amaranth"],["E5841B","Zest"],["E5CCC9","Dust Storm"],["E5D7BD","Stark White"],["E5D8AF","Hampton"],["E5E0E1","Bon Jour"],["E5E5E5","Mercury"],["E5F9F6","Polar"],["E64E03","Trinidad"],["E6BE8A","Gold Sand"],["E6BEA5","Cashmere"],["E6D7B9","Double Spanish White"],["E6E4D4","Satin Linen"],["E6F2EA","Harp"],["E6F8F3","Off Green"],["E6FFE9","Hint of Green"],["E6FFFF","Tranquil"],["E77200","Mango Tango"],["E7730A","Christine"],["E79F8C","Tonys Pink"],["E79FC4","Kobi"],["E7BCB4","Rose Fog"],["E7BF05","Corn"],["E7CD8C","Putty"],["E7ECE6","Gray Nurse"],["E7F8FF","Lily White"],["E7FEFF","Bubbles"],["E89928","Fire Bush"],["E8B9B3","Shilo"],["E8E0D5","Pearl Bush"],["E8EBE0","Green White"],["E8F1D4","Chrome White"],["E8F2EB","Gin"],["E8F5F2","Aqua Squeeze"],["E96E00","Clementine"],["E97451","Burnt Sienna"],["E97C07","Tahiti Gold"],["E9CECD","Oyster Pink"],["E9D75A","Confetti"],["E9E3E3","Ebb"],["E9F8ED","Ottoman"],["E9FFFD","Clear Day"],["EA88A8","Carissma"],["EAAE69","Porsche"],["EAB33B","Tulip Tree"],["EAC674","Rob Roy"],["EADAB8","Raffia"],["EAE8D4","White Rock"],["EAF6EE","Panache"],["EAF6FF","Solitude"],["EAF9F5","Aqua Spring"],["EAFFFE","Dew"],["EB9373","Apricot"],["EBC2AF","Zinnwaldite"],["ECA927","Fuel Yellow"],["ECC54E","Ronchi"],["ECC7EE","French Lilac"],["ECCDB9","Just Right"],["ECE090","Wild Rice"],["ECEBBD","Fall Green"],["ECEBCE","Aths Special"],["ECF245","Starship"],["ED0A3F","Red Ribbon"],["ED7A1C","Tango"],["ED9121","Carrot Orange"],["ED989E","Sea Pink"],["EDB381","Tacao"],["EDC9AF","Desert Sand"],["EDCDAB","Pancho"],["EDDCB1","Chamois"],["EDEA99","Primrose"],["EDF5DD","Frost"],["EDF5F5","Aqua Haze"],["EDF6FF","Zumthor"],["EDF9F1","Narvik"],["EDFC84","Honeysuckle"],["EE82EE","Lavender Magenta"],["EEC1BE","Beauty Bush"],["EED794","Chalky"],["EED9C4","Almond"],["EEDC82","Flax"],["EEDEDA","Bizarre"],["EEE3AD","Double Colonial White"],["EEEEE8","Cararra"],["EEEF78","Manz"],["EEF0C8","Tahuna Sands"],["EEF0F3","Athens Gray"],["EEF3C3","Tusk"],["EEF4DE","Loafer"],["EEF6F7","Catskill White"],["EEFDFF","Twilight Blue"],["EEFF9A","Jonquil"],["EEFFE2","Rice Flower"],["EF863F","Jaffa"],["EFEFEF","Gallery"],["EFF2F3","Porcelain"],["F091A9","Mauvelous"],["F0D52D","Golden Dream"],["F0DB7D","Golden Sand"],["F0DC82","Buff"],["F0E2EC","Prim"],["F0E68C","Khaki"],["F0EEFD","Selago"],["F0EEFF","Titan White"],["F0F8FF","Alice Blue"],["F0FCEA","Feta"],["F18200","Gold Drop"],["F19BAB","Wewak"],["F1E788","Sahara Sand"],["F1E9D2","Parchment"],["F1E9FF","Blue Chalk"],["F1EEC1","Mint Julep"],["F1F1F1","Seashell"],["F1F7F2","Saltpan"],["F1FFAD","Tidal"],["F1FFC8","Chiffon"],["F2552A","Flamingo"],["F28500","Tangerine"],["F2C3B2","Mandys Pink"],["F2F2F2","Concrete"],["F2FAFA","Black Squeeze"],["F34723","Pomegranate"],["F3AD16","Buttercup"],["F3D69D","New Orleans"],["F3D9DF","Vanilla Ice"],["F3E7BB","Sidecar"],["F3E9E5","Dawn Pink"],["F3EDCF","Wheatfield"],["F3FB62","Canary"],["F3FBD4","Orinoco"],["F3FFD8","Carla"],["F400A1","Hollywood Cerise"],["F4A460","Sandy brown"],["F4C430","Saffron"],["F4D81C","Ripe Lemon"],["F4EBD3","Janna"],["F4F2EE","Pampas"],["F4F4F4","Wild Sand"],["F4F8FF","Zircon"],["F57584","Froly"],["F5C85C","Cream Can"],["F5C999","Manhattan"],["F5D5A0","Maize"],["F5DEB3","Wheat"],["F5E7A2","Sandwisp"],["F5E7E2","Pot Pourri"],["F5E9D3","Albescent White"],["F5EDEF","Soft Peach"],["F5F3E5","Ecru White"],["F5F5DC","Beige"],["F5FB3D","Golden Fizz"],["F5FFBE","Australian Mint"],["F64A8A","French Rose"],["F653A6","Brilliant Rose"],["F6A4C9","Illusion"],["F6F0E6","Merino"],["F6F7F7","Black Haze"],["F6FFDC","Spring Sun"],["F7468A","Violet Red"],["F77703","Chilean Fire"],["F77FBE","Persian Pink"],["F7B668","Rajah"],["F7C8DA","Azalea"],["F7DBE6","We Peep"],["F7F2E1","Quarter Spanish White"],["F7F5FA","Whisper"],["F7FAF7","Snow Drift"],["F8B853","Casablanca"],["F8C3DF","Chantilly"],["F8D9E9","Cherub"],["F8DB9D","Marzipan"],["F8DD5C","Energy Yellow"],["F8E4BF","Givry"],["F8F0E8","White Linen"],["F8F4FF","Magnolia"],["F8F6F1","Spring Wood"],["F8F7DC","Coconut Cream"],["F8F7FC","White Lilac"],["F8F8F7","Desert Storm"],["F8F99C","Texas"],["F8FACD","Corn Field"],["F8FDD3","Mimosa"],["F95A61","Carnation"],["F9BF58","Saffron Mango"],["F9E0ED","Carousel Pink"],["F9E4BC","Dairy Cream"],["F9E663","Portica"],["F9EAF3","Amour"],["F9F8E4","Rum Swizzle"],["F9FF8B","Dolly"],["F9FFF6","Sugar Cane"],["FA7814","Ecstasy"],["FA9D5A","Tan Hide"],["FAD3A2","Corvette"],["FADFAD","Peach Yellow"],["FAE600","Turbo"],["FAEAB9","Astra"],["FAECCC","Champagne"],["FAF0E6","Linen"],["FAF3F0","Fantasy"],["FAF7D6","Citrine White"],["FAFAFA","Alabaster"],["FAFDE4","Hint of Yellow"],["FAFFA4","Milan"],["FB607F","Brink Pink"],["FB8989","Geraldine"],["FBA0E3","Lavender Rose"],["FBA129","Sea Buckthorn"],["FBAC13","Sun"],["FBAED2","Lavender Pink"],["FBB2A3","Rose Bud"],["FBBEDA","Cupid"],["FBCCE7","Classic Rose"],["FBCEB1","Apricot Peach"],["FBE7B2","Banana Mania"],["FBE870","Marigold Yellow"],["FBE96C","Festival"],["FBEA8C","Sweet Corn"],["FBEC5D","Candy Corn"],["FBF9F9","Hint of Red"],["FBFFBA","Shalimar"],["FC0FC0","Shocking Pink"],["FC80A5","Tickle Me Pink"],["FC9C1D","Tree Poppy"],["FCC01E","Lightning Yellow"],["FCD667","Goldenrod"],["FCD917","Candlelight"],["FCDA98","Cherokee"],["FCF4D0","Double Pearl Lusta"],["FCF4DC","Pearl Lusta"],["FCF8F7","Vista White"],["FCFBF3","Bianca"],["FCFEDA","Moon Glow"],["FCFFE7","China Ivory"],["FCFFF9","Ceramic"],["FD0E35","Torch Red"],["FD5B78","Wild Watermelon"],["FD7B33","Crusta"],["FD7C07","Sorbus"],["FD9FA2","Sweet Pink"],["FDD5B1","Light Apricot"],["FDD7E4","Pig Pink"],["FDE1DC","Cinderella"],["FDE295","Golden Glow"],["FDE910","Lemon"],["FDF5E6","Old Lace"],["FDF6D3","Half Colonial White"],["FDF7AD","Drover"],["FDFEB8","Pale Prim"],["FDFFD5","Cumulus"],["FE28A2","Persian Rose"],["FE4C40","Sunset Orange"],["FE6F5E","Bittersweet"],["FE9D04","California"],["FEA904","Yellow Sea"],["FEBAAD","Melon"],["FED33C","Bright Sun"],["FED85D","Dandelion"],["FEDB8D","Salomie"],["FEE5AC","Cape Honey"],["FEEBF3","Remy"],["FEEFCE","Oasis"],["FEF0EC","Bridesmaid"],["FEF2C7","Beeswax"],["FEF3D8","Bleach White"],["FEF4CC","Pipi"],["FEF4DB","Half Spanish White"],["FEF4F8","Wisp Pink"],["FEF5F1","Provincial Pink"],["FEF7DE","Half Dutch White"],["FEF8E2","Solitaire"],["FEF8FF","White Pointer"],["FEF9E3","Off Yellow"],["FEFCED","Orange White"],["FF0000","Red"],["FF007F","Rose"],["FF00CC","Purple Pizzazz"],["FF00FF","Magenta / Fuchsia"],["FF2400","Scarlet"],["FF3399","Wild Strawberry"],["FF33CC","Razzle Dazzle Rose"],["FF355E","Radical Red"],["FF3F34","Red Orange"],["FF4040","Coral Red"],["FF4D00","Vermilion"],["FF4F00","International Orange"],["FF6037","Outrageous Orange"],["FF6600","Blaze Orange"],["FF66FF","Pink Flamingo"],["FF681F","Orange"],["FF69B4","Hot Pink"],["FF6B53","Persimmon"],["FF6FFF","Blush Pink"],["FF7034","Burning Orange"],["FF7518","Pumpkin"],["FF7D07","Flamenco"],["FF7F00","Flush Orange"],["FF7F50","Coral"],["FF8C69","Salmon"],["FF9000","Pizazz"],["FF910F","West Side"],["FF91A4","Pink Salmon"],["FF9933","Neon Carrot"],["FF9966","Atomic Tangerine"],["FF9980","Vivid Tangerine"],["FF9E2C","Sunshade"],["FFA000","Orange Peel"],["FFA194","Mona Lisa"],["FFA500","Web Orange"],["FFA6C9","Carnation Pink"],["FFAB81","Hit Pink"],["FFAE42","Yellow Orange"],["FFB0AC","Cornflower Lilac"],["FFB1B3","Sundown"],["FFB31F","My Sin"],["FFB555","Texas Rose"],["FFB7D5","Cotton Candy"],["FFB97B","Macaroni and Cheese"],["FFBA00","Selective Yellow"],["FFBD5F","Koromiko"],["FFBF00","Amber"],["FFC0A8","Wax Flower"],["FFC0CB","Pink"],["FFC3C0","Your Pink"],["FFC901","Supernova"],["FFCBA4","Flesh"],["FFCC33","Sunglow"],["FFCC5C","Golden Tainoi"],["FFCC99","Peach Orange"],["FFCD8C","Chardonnay"],["FFD1DC","Pastel Pink"],["FFD2B7","Romantic"],["FFD38C","Grandis"],["FFD700","Gold"],["FFD800","School bus Yellow"],["FFD8D9","Cosmos"],["FFDB58","Mustard"],["FFDCD6","Peach Schnapps"],["FFDDAF","Caramel"],["FFDDCD","Tuft Bush"],["FFDDCF","Watusi"],["FFDDF4","Pink Lace"],["FFDEAD","Navajo White"],["FFDEB3","Frangipani"],["FFE1DF","Pippin"],["FFE1F2","Pale Rose"],["FFE2C5","Negroni"],["FFE5A0","Cream Brulee"],["FFE5B4","Peach"],["FFE6C7","Tequila"],["FFE772","Kournikova"],["FFEAC8","Sandy Beach"],["FFEAD4","Karry"],["FFEC13","Broom"],["FFEDBC","Colonial White"],["FFEED8","Derby"],["FFEFA1","Vis Vis"],["FFEFC1","Egg White"],["FFEFD5","Papaya Whip"],["FFEFEC","Fair Pink"],["FFF0DB","Peach Cream"],["FFF0F5","Lavender blush"],["FFF14F","Gorse"],["FFF1B5","Buttermilk"],["FFF1D8","Pink Lady"],["FFF1EE","Forget Me Not"],["FFF1F9","Tutu"],["FFF39D","Picasso"],["FFF3F1","Chardon"],["FFF46E","Paris Daisy"],["FFF4CE","Barley White"],["FFF4DD","Egg Sour"],["FFF4E0","Sazerac"],["FFF4E8","Serenade"],["FFF4F3","Chablis"],["FFF5EE","Seashell Peach"],["FFF5F3","Sauvignon"],["FFF6D4","Milk Punch"],["FFF6DF","Varden"],["FFF6F5","Rose White"],["FFF8D1","Baja White"],["FFF9E2","Gin Fizz"],["FFF9E6","Early Dawn"],["FFFACD","Lemon Chiffon"],["FFFAF4","Bridal Heath"],["FFFBDC","Scotch Mist"],["FFFBF9","Soapstone"],["FFFC99","Witch Haze"],["FFFCEA","Buttery White"],["FFFCEE","Island Spice"],["FFFDD0","Cream"],["FFFDE6","Chilean Heath"],["FFFDE8","Travertine"],["FFFDF3","Orchid White"],["FFFDF4","Quarter Pearl Lusta"],["FFFEE1","Half and Half"],["FFFEEC","Apricot White"],["FFFEF0","Rice Cake"],["FFFEF6","Black White"],["FFFEFD","Romance"],["FFFF00","Yellow"],["FFFF66","Laser Lemon"],["FFFF99","Pale Canary"],["FFFFB4","Portafino"],["FFFFF0","Ivory"],["FFFFFF","White"]],this.rgb=function(l){return[parseInt("0x"+l.substring(1,3)),parseInt("0x"+l.substring(3,5)),parseInt("0x"+l.substring(5,7))]};for(var g=0;g7)return["#000000","Invalid Color: "+g,!1];g=g.toUpperCase(),g.length%3==0&&(g="#"+g),g.length==4&&(g="#"+g.substr(1,1)+g.substr(1,1)+g.substr(2,1)+g.substr(2,1)+g.substr(3,1)+g.substr(3,1));for(var i=this.rgb(g),I=i[0],n=i[1],r=i[2],C=this.hsl(g),o=C[0],a=C[1],s=C[2],A=0,l=0,c=0,u=-1,d=-1,h=0;hc)&&(d=c,u=h)}return u<0?["#000000","Invalid Color: "+g,!1]:["#"+this.names[u][0],this.names[u][1],!1]},e.prototype.hsl=function(g){var i=[parseInt("0x"+g.substring(1,3))/255,parseInt("0x"+g.substring(3,5))/255,parseInt("0x"+g.substring(5,7))/255],I=i[0],n=i[1],r=i[2],C=Math.min(I,Math.min(n,r)),o=Math.max(I,Math.max(n,r)),a=o-C,s=(C+o)/2,A=0;s>0&&s<1&&(A=a/(s<.5?2*s:2-2*s));var l=0;return a>0&&(o==I&&o!=n&&(l+=(n-r)/a),o==n&&o!=r&&(l+=2+(r-I)/a),o==r&&o!=I&&(l+=4+(I-n)/a),l/=6),[l*255,A*255,s*255]},e}();function Zrg(e){Grg(e),Srg(e)}function Grg(e){e.composition.nTracks==1?(e.tracks[0].position.description="There is only one view.",e.tracks[0].alttype==="single"?e.composition.description="There is one ("+e.tracks[0].appearance.details.layout+") track.":e.composition.description="There is one (overlaid) track."):e.composition.nTracks==2?vrg(e):Brg(e)}function vrg(e){let g="",i="",I="",n=0;e.tracks[0].appearance.details.layout==="circular"&&(n+=1),e.tracks[1].appearance.details.layout==="circular"&&(n+=1),n==2?JSON.stringify(e.composition.counter.serialCircular).indexOf(JSON.stringify([0,1]))!==-1?(g="left half of ring",i="right half of ring",I="Two circular tracks form one ring, with both the half of the ring."):JSON.stringify(e.composition.counter.parallelCircular).indexOf(JSON.stringify([0,1]))!==-1?(g="outer ring",i="inner ring",I="Two circular tracks form two rings, one around the other."):e.composition.counter.totalRows<2?(g="left",i="right",I="Two circular tracks are shown next to each other."):(g="top",i="bottom",I="Two circular tracks are shown below each other."):(n==1?e.tracks[0].appearance.details.layout==="circular"?I="A circular and a linear track":I="A linear and a circular track":I="Two linear tracks",e.composition.counter.totalRows<2?(g="left",i="right",I=I.concat(" are shown next to each other.")):(g="top",i="bottom",I=I.concat(" are shown below each other."))),e.tracks[0].position.description=g,e.tracks[1].position.description=i,e.composition.description=I}function Brg(e){const g=["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"];let i="";if(e.composition.counter.totalRows===1)i=i.concat("There are "+e.composition.counter.nTracks+" tracks, displayed next to each other.");else if(e.composition.counter.totalCols===1)i=i.concat("There are "+e.composition.counter.nTracks+" tracks, displayed below each other.");else{i=i.concat("There are "+e.composition.counter.nTracks+" tracks."),i=i.concat(" There are "+e.composition.counter.totalRows+" rows.");const I=Object.keys(e.composition.counter.matrix).map(r=>Object.keys(e.composition.counter.matrix[r]).length),n=[...new Set(I)];if(n.length==1)i=i.concat(" Each row has "+n[0]+" tracks next to each other.");else if(n.length==2){const r=[],C=[];for(let o=0;oo+1))+" have "+n[0]+" column(s) each."),i=i.concat(" The other rows have "+n[1]+" column(s) each.")):(i=i.concat(" Row(s) "+Cr(C.map(o=>o+1))+" have "+n[1]+" column(s) each."),i=i.concat(" The other rows have "+n[0]+" column(s) each."))}else for(let r=0;r9?i=i.concat(" Row number "+r+" has "+e.composition.counter.matrix[r].length+" track(s) next to each other."):i=i.concat(" The "+g[r]+" row has "+e.composition.counter.matrix[r].length+" track(s) next to each other.")}e.composition.description=i;for(const I in e.tracks){let n="";const r=e.tracks[I].position.details,C=e.composition.counter;e.composition.counter.totalRows>1&&(r.rowNumber===0?n=n.concat("top row"):r.rowNumber===C.totalRows-1?n=n.concat("bottom row"):r.rowNumber<10?n=n.concat(g[r.rowNumber]+" row"):n=n.concat("row "+r.rowNumber+1)),e.composition.counter.totalCols>1&&Object.keys(C.matrix[r.colNumber]).length>1&&(n.length>1&&(n=n.concat(", ")),r.colNumber===0?n=n.concat("left"):r.colNumber===Object.keys(C.matrix[r.rowNumber]).length-1?n=n.concat("right"):r.colNumber===2&&Object.keys(C.matrix[r.rowNumber]).length===2?n=n.concat("middle"):n=n.concat(g[r.colNumber]+" from left")),e.tracks[I].position.description=n}}function Srg(e){for(const g in e.tracks){const i=e.tracks[g];if(i.alttype==="single"){let I="";I=I.concat(`${qp(i.charttype)}.`),i.title&&(I=I.concat(` Chart is titled '${i.title}'.`));const n=Ox(i);if(I=I.concat(` ${n.desc}`),i.appearance.details.linked&&i.appearance.details.linked.length>0){const r=i.appearance.details.linked.map(C=>C.channel);r.length===1?I=I.concat(` The ${r[0]}-axis has a brush, linking to the other chart.`):I=I.concat(" The x and y-axes have brushes, linking to the other charts.")}i.appearance.description=I,i.appearance.details.encodingsDescList=n.descList}else if(i.alttype==="ov-mark"){let I="";I=I.concat(`${qp(Cr(i.charttype))}.`),i.title&&(I=I.concat(` Chart is titled '${i.title}'.`));const n=Ox(i);if(I=I.concat(" "+n.desc),i.appearance.details.linked&&i.appearance.details.linked.length>0){const r=i.appearance.details.linked.map(C=>C.channel);r.length===1?I=I.concat(` The ${r[0]}-axis has a brush, linking to one of the other charts.`):I=I.concat(" The x and y-axes have brushes, linking to one of the other charts.")}i.appearance.description=I,i.appearance.details.encodingsDescList=n.descList}else if(i.alttype==="ov-data")for(let I=0;Id!==void 0).map(d=>eb.get(d)).filter(d=>d!==void 0)),n.push(_x(I,e.appearance.details.encodings));for(let d=0;dd.descGenomic).filter(d=>d!=="").join(" "),C=n.map(d=>d.descQuantitative).filter(d=>d!=="").join(" "),o=n.map(d=>d.descNominal).filter(d=>d!=="").join(" "),a=n.map(d=>d.descValue).filter(d=>d!=="").join(" "),s=[r,C,o,a].join(" "),A=n.map(d=>d.descList);let l=A[0].concat(...A.slice(1));const c=l.map(d=>d.channel),u=c.filter((d,h)=>c.indexOf(d)!==h);for(const d of u){const h=l.filter(m=>m.channel===d).map(m=>m.desc).join(" ");l=l.filter(m=>m.channel!==d),l.push({channel:d,desc:h,channelType:l.filter(m=>m.channel===d).map(m=>m.channelType).join(" ")})}return{desc:s,descList:l}}}function _x(e,g){let i="",I="",n="",r="";const C=[],o=g.encodingDeepGenomic.map(A=>A.name);if(o.includes("x")&&o.includes("y"))i=i.concat("The genome is shown on both the x- and y-axes."),o.includes("xe")&&o.includes("ye")?(i=i.concat(" Both axes show intervals."),C.push({channel:"x",desc:"The x-axis show genomic intervals.",channelType:"genomic"}),C.push({channel:"y",desc:"The y-axis show genomic intervals.",channelType:"genomic"})):o.includes("xe")?(i=i.concat(" The genome on the x-axis displays genomic intervals."),C.push({channel:"x",desc:"The x-axis show genomic intervals.",channelType:"genomic"}),C.push({channel:"y",desc:"The y-axis shows the genome.",channelType:"genomic"})):o.includes("ye")?(i=i.concat(" The genome on the y-axis displays genomic intervals."),C.push({channel:"x",desc:"The x-axis shows the genome.",channelType:"genomic"}),C.push({channel:"y",desc:"The y-axis show genomic intervals.",channelType:"genomic"})):(C.push({channel:"x",desc:"The x-axis shows the genome.",channelType:"genomic"}),C.push({channel:"y",desc:"The y-axis shows the genome.",channelType:"genomic"}));else{if(o.includes("x")){let A="";o.includes("xe")?(A="in intervals ",C.push({channel:"x",desc:"The x-axis show genomic intervals.",channelType:"genomic"})):C.push({channel:"x",desc:"The x-axis shows the genome.",channelType:"genomic"}),i=i.concat(`The genome is shown ${A}on the x-axis.`)}if(o.includes("y")){let A="";o.includes("ye")?(A="in intervals ",C.push({channel:"y",desc:"The y-axis show genomic intervals.",channelType:"genomic"})):C.push({channel:"y",desc:"The y-axis shows the genome.",channelType:"genomic"}),i=i.concat(`The genome is shown ${A}on the y-axis.`)}}const a=g.encodingDeepQuantitative.map(A=>A.name);if(a.length>1){I=I.concat(`The expression values are shown with ${e} on the ${Cr(a)}-axes.`);for(const A of a)C.push({channel:A,desc:`The ${RC.get(A)} of the ${e} shows the expression values.`,channelType:"quantitative"})}else a.length===1&&(a.includes("y")?(I=I.concat(`The expression is shown on the y-axis with ${e}.`),C.push({channel:"y",desc:`The y-axis shows the expression with ${e}.`,channelType:"quantitative"})):a.includes("color")?(I=I.concat("The expression values are encoded using color intensity."),C.push({channel:"color",desc:`The expression values are encoded using color intensity of the ${e}.`,channelType:"quantitative"})):(I=I.concat(`The height of the expression values is shown with the ${a[0]}-axis.`),C.push({channel:RC.get(a[0]),desc:`The ${RC.get(a[0])} of the ${e} shows the expression values.`,channelType:"quantitative"})));let s=g.encodingDeepNominal.map(A=>A.name);if(s=s.filter(A=>A!=="text"),s.length>1)if(s.includes("row")){n=n.concat("The chart is stratified by rows for the categories.");const A=s.filter(l=>l!=="row").map(l=>RC.get(l));n=n.concat(` The categories are also shown with the ${Cr(A)} of the ${e}.`),C.push({channel:"row",desc:"The chart is stratified by rows for the categories.",channelType:"nominal"});for(const l of A)C.push({channel:RC.get(l),desc:`The ${RC.get(l)} of the ${e} show the different categories.`,channelType:"nominal"})}else{const A=s.map(l=>RC.get(l));n=n.concat(`The categories are shown with the ${Cr(A)} of the ${e}.`);for(const l of s)C.push({channel:RC.get(l),desc:`The ${RC.get(l)} of the ${e} show the different categories.`,channelType:"nominal"})}else s.length==1&&(s.includes("row")?(n=n.concat("The chart is stratified by rows for the categories."),C.push({channel:"row",desc:"The chart is stratified by rows for the categories.",channelType:"nominal"})):(n=n.concat(`The ${RC.get(s[0])} of the ${e} indicates the different categories.`),C.push({channel:RC.get(s[0]),desc:`The ${RC.get(s[0])} of the ${e} show the different categories.`,channelType:"nominal"})));for(let A=0;Axv(n,i)))}.`):I=I.concat(` The ${g} value is shown at ${e.length} different genomic positions, the first being ${xv(e[0],i)}.`),I}function R_(e,g){const i=Uu(e,g);return[srg(i.chromosome),i.position]}function xv(e,g){const i=R_(e,g);return i[0]==="unknown"?`absolute position ${i[1]} (on the unmapped part of the genome)`:`chromosome ${i[0]} position ${i[1]}`}function vHe(e,g,i){const I=R_(e,i),n=R_(g,i);return I[0]==="unknown"&&n[0]=="unknown"?` The genomic range is shown from from absolute position ${I[1]} to ${n[1]} on an unmapped part of the genome.`:n[0]==="unknown"?(I[0]==="chr1"||I[0]===1)&&I[1]===0?" The full genome is shown.":I[0]==="chrX"||I[0]==="X"?` The genomic range shown is chromomosome X (from position ${I[1]}), Y and an unmapped part of the genome at the end.`:I[0]==="chrY"||I[0]==="Y"?` The genomic range shown is chromomosome Y (from position ${I[1]}) and an unmapped part of the genome at the end.`:` The genomic range is shown from chromosome ${I[0]} to chromosome 22 and the X and Y chromosomes, as well as an unmapped part of the genome at the end.`:I===n?` The genomic range is shown from position ${I[1]} to position ${n[1]} on chromosome ${I[0]}.`:` The genomic range is shown from chromosome ${I[0]} position ${I[1]} to chromosome ${n[0]} position ${n[1]}.`}function V_(e,g){if((e.alttype==="single"||e.alttype==="ov-mark")&&Xce(e,g),e.alttype==="ov-data")for(let i=0;ir.channel==="color").length===0){n||console.warn("AltGosling was not provided a Gosling Theme, so light theme is assumed.");const r=Vce(n),C=eC(r[0]).toLowerCase();e.appearance.details.mark?e.appearance.details.encodingsDescList.push({channel:"color",channelType:"value",desc:`The color of the ${eb.get(e.appearance.details.mark)} is ${C}.`}):e.appearance.details.encodingsDescList.push({channel:"color",channelType:"value",desc:`The color is ${C}.`})}}function d8(e,g){if(g!==!1&&Vrg(e),e.alt="Genomic visualization.",e.composition.nTracks===1){e.longDescription=e.tracks[0].description,e.fullDescription=e.tracks[0].descriptionFull;let i="";i=i.concat(e.longDescription.split(".")[0]),Wrg(e.tracks[0])&&(i=i.concat(" showing genomic data")),e.title?i=i.concat(`, titled ${e.title}`):e.tracks[0].title&&(i=i.concat(`, titled '${e.tracks[0].title}'`)),e.alt=i}else if(e.composition.nTracks===2){let i=function(h){const m=h.split("."),f=m[0],b=m.slice(1).join(".");return[f,b]},I=function(h,m,f){return` ${qp(h)} track is a ${m.toLowerCase()}. ${f}`},n="",r="";r=r.concat("Figure with two charts.");let C=r;const[o,a]=i(e.tracks[0].description),[s,A]=i(e.tracks[1].description),[l,c]=i(e.tracks[0].descriptionFull),[u,d]=i(e.tracks[1].descriptionFull);r=r.concat(I(e.tracks[0].position.description,o,a)),r=r.concat(I(e.tracks[1].position.description,s,A)),C=C.concat(I(e.tracks[0].position.description,l,c)),C=C.concat(I(e.tracks[1].position.description,u,d)),n=n.concat(`Figure with ${o.toLowerCase()} on ${e.tracks[0].position.description} and ${s.toLowerCase()} on ${e.tracks[1].position.description}`),e.alt=n,e.longDescription=r,e.fullDescription=C}else{let i="";const I=[];for(const o in Object.keys(e.tracks)){const a=e.tracks[o].description.split(".")[0];I.push(a)}const r=[...new Set(I)].map(o=>[o,lrg(I,o)]).map(o=>{const a=o[1];let s=o[0];return s=s.toLowerCase(),a==1?`a ${s}`:(s.includes("chart")?s=s.replace("chart","charts"):s=`${s}s`,`${a} different ${s}`)});i=i.concat(`Figure with ${e.composition.nTracks} individual charts. Briefly, these are ${Cr(r).toLowerCase()}.`),e.alt=`Genomic visualization with ${e.composition.nTracks} individual charts.`,e.longDescription=i;const C=[];for(const o in Object.keys(e.tracks))C.push(e.tracks[o].descriptionFull);e.fullDescription=i.concat(...C)}}function Vrg(e){if(Object.keys(e.tracks).length===1&&cp(e.tracks[0]),Object.keys(e.tracks).length===2)cp(e.tracks[0]),cp(e.tracks[1]);else for(const g in Object.keys(e.tracks))cp(e.tracks[g])}function cp(e,g){let i="",I="",n="";if(e.alttype==="single"||e.alttype==="ov-mark")i=n.concat(`${e.appearance.description} ${e.data.description}`),I=i;else{i=n.concat(`${qp(e.appearance.details.charttype)}. See separate overlaid tracks for details.`),I=n.concat(`${qp(e.appearance.details.charttype)}. Multiple tracks are overlaid in this chart.`);for(let r=0;r0)return!0}else for(const g of e.tracks)if(g.data.details.fields.genomicField&&g.data.details.fields.genomicField.length>0)return!0;return!1}function Xrg(e){Zrg(e),d8(e)}function Hrg(e){Rrg(e),d8(e)}function Hce(e,g,i){const I={id:e,flatTileData:g};if(i){if(i.genomicField!==void 0){const n=i.genomicField;try{const r=g.map(C=>C[n]).filter(C=>!isNaN(C));I.genomicMin=Math.min(...r),I.genomicMax=Math.max(...r)}catch(r){console.warn(r)}}if(i.valueField!==void 0){const n=i.valueField;try{const r=g.map(C=>C[n]).filter(C=>!isNaN(C));I.valueMin=Math.min(...r),I.valueMax=Math.max(...r)}catch(r){console.warn(r)}}if(i.genomicField!==void 0&&i.valueField!==void 0){const n=i.genomicField,r=i.valueField;try{I.valueMinGenomic=g.filter(C=>C[r]==I.valueMin).map(C=>C[n]),I.valueMaxGenomic=g.filter(C=>C[r]==I.valueMax).map(C=>C[n])}catch(C){console.warn(C)}}if(i.categoryField!==void 0){const n=i.categoryField,r=g.map(s=>s[n]),C=[...new Set(r)];I.categories=C;const o=i.genomicField,a=i.valueField;if(o&&a)try{const s=g.map(u=>u[n]),A=[...new Set(s)],l={},c=[];for(const u of A){const d=g.filter(y=>y[n]===u),h=d.map(y=>y[a]).filter(y=>!isNaN(y)),m=Math.min(...h),f=Math.max(...h),b=d.filter(y=>y[a]==m).map(y=>y[o]),p=d.filter(y=>y[a]==f).map(y=>y[o]);l[u]=[m,b,f,p],f===I.valueMax&&c.push(u)}I.categoryMinMaxWG=l,c.length>0&&(I.highestCategory=c)}catch(s){console.warn(s)}}return I}else return I}function Trg(e,g,i,I){e.tracks.length>1;for(let n=0;ng!==void 0),e.length===0?"":e.length===1?e[0]:`${e.slice(0,-1).join(", ")} and ${e.slice(-1)}`}function BHe(e,g,i){let[I,n]=U.useState(e||g),r=U.useRef(e!==void 0),C=e!==void 0;U.useEffect(()=>{let s=r.current;s!==C&&console.warn(`WARN: A component changed from ${s?"controlled":"uncontrolled"} to ${C?"controlled":"uncontrolled"}.`),r.current=C},[C]);let o=C?e:I,a=U.useCallback((s,...A)=>{let l=(c,...u)=>{i&&(Object.is(o,c)||i(c,...u)),C||(o=c)};typeof s=="function"?(console.warn("We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320"),n((u,...d)=>{let h=s(C?o:u,...d);return l(h,...A),C?u:h})):(C||n(s),l(s,...A))},[C,o,i]);return[o,a]}const KH={prefix:String(Math.round(Math.random()*1e10)),current:0},SHe=N.createContext(KH),Yrg=N.createContext(!1);let Krg=!!(typeof window<"u"&&window.document&&window.document.createElement),Lx=new WeakMap;function Frg(e=!1){let g=U.useContext(SHe),i=U.useRef(null);if(i.current===null&&!e){var I,n;let r=(n=N.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||n===void 0||(I=n.ReactCurrentOwner)===null||I===void 0?void 0:I.current;if(r){let C=Lx.get(r);C==null?Lx.set(r,{id:g.current,state:r.memoizedState}):r.memoizedState!==C.state&&(g.current=C.id,Lx.delete(r))}i.current=++g.current}return i.current}function Drg(e){let g=U.useContext(SHe);g===KH&&!Krg&&console.warn("When server rendering, you must wrap your application in an to ensure consistent ids are generated between the client and server.");let i=Frg(!!e),I=`react-aria${g.prefix}`;return e||`${I}-${i}`}function xrg(e){let g=N.useId(),[i]=U.useState(Ew()),I=i?"react-aria":`react-aria${KH.prefix}`;return e||`${I}-${g}`}const Erg=typeof N.useId=="function"?xrg:Drg;function Mrg(){return!1}function zrg(){return!0}function Prg(e){return()=>{}}function Ew(){return typeof N.useSyncExternalStore=="function"?N.useSyncExternalStore(Prg,Mrg,zrg):U.useContext(Yrg)}function wHe(e){var g,i,I="";if(typeof e=="string"||typeof e=="number")I+=e;else if(typeof e=="object")if(Array.isArray(e))for(g=0;g{};function sC(e){const g=U.useRef(null);return yI(()=>{g.current=e},[e]),U.useCallback((...i)=>{const I=g.current;return I(...i)},[])}function Org(e){let[g,i]=U.useState(e),I=U.useRef(null),n=sC(()=>{let C=I.current.next();if(C.done){I.current=null;return}g===C.value?n():i(C.value)});yI(()=>{I.current&&n()});let r=sC(C=>{I.current=C(g),n()});return[g,r]}let _rg=!!(typeof window<"u"&&window.document&&window.document.createElement),FH=new Map;function xh(e){let[g,i]=U.useState(e),I=U.useRef(null),n=Erg(g),r=U.useCallback(C=>{I.current=C},[]);return _rg&&FH.set(n,r),yI(()=>{let C=n;return()=>{FH.delete(C)}},[n]),U.useEffect(()=>{let C=I.current;C&&(I.current=null,i(C))}),n}function Lrg(e,g){if(e===g)return e;let i=FH.get(e);if(i)return i(g),g;let I=FH.get(g);return I?(I(e),e):g}function Tce(e=[]){let g=xh(),[i,I]=Org(g),n=U.useCallback(()=>{I(function*(){yield g,yield document.getElementById(g)?g:void 0})},[g,I]);return yI(n,[g,n,...e]),i}function Urg(...e){return(...g)=>{for(let i of e)typeof i=="function"&&i(...g)}}const Cc=e=>{var g;return(g=e==null?void 0:e.ownerDocument)!==null&&g!==void 0?g:document},DH=e=>e&&"window"in e&&e.window===e?e:Cc(e).defaultView||window;function vI(...e){let g={...e[0]};for(let i=1;i=65&&n.charCodeAt(2)<=90?g[n]=Urg(r,C):(n==="className"||n==="UNSAFE_className")&&typeof r=="string"&&typeof C=="string"?g[n]=Jrg(r,C):n==="id"&&r&&C?g.id=Lrg(r,C):g[n]=C!==void 0?C:r}}return g}function Qrg(...e){return e.length===1?e[0]:g=>{for(let i of e)typeof i=="function"?i(g):i!=null&&(i.current=g)}}const jrg=new Set(["id"]),$rg=new Set(["aria-label","aria-labelledby","aria-describedby","aria-details"]),qrg=new Set(["href","target","rel","download","ping","referrerPolicy"]),eCg=/^(data-.*)$/;function FA(e,g={}){let{labelable:i,isLink:I,propNames:n}=g,r={};for(const C in e)Object.prototype.hasOwnProperty.call(e,C)&&(jrg.has(C)||i&&$rg.has(C)||I&&qrg.has(C)||n!=null&&n.has(C)||eCg.test(C))&&(r[C]=e[C]);return r}function Bs(e){if(tCg())e.focus({preventScroll:!0});else{let g=gCg(e);e.focus(),iCg(g)}}let c1=null;function tCg(){if(c1==null){c1=!1;try{var e=document.createElement("div");e.focus({get preventScroll(){return c1=!0,!0}})}catch{}}return c1}function gCg(e){for(var g=e.parentNode,i=[],I=document.scrollingElement||document.documentElement;g instanceof HTMLElement&&g!==I;)(g.offsetHeight"u"||window.navigator==null?!1:((g=window.navigator.userAgentData)===null||g===void 0?void 0:g.brands.some(i=>e.test(i.brand)))||e.test(window.navigator.userAgent)}function m8(e){var g;return typeof window<"u"&&window.navigator!=null?e.test(((g=window.navigator.userAgentData)===null||g===void 0?void 0:g.platform)||window.navigator.platform):!1}function Eh(){return m8(/^Mac/i)}function ICg(){return m8(/^iPhone/i)}function RHe(){return m8(/^iPad/i)||Eh()&&navigator.maxTouchPoints>1}function f8(){return ICg()||RHe()}function nCg(){return Eh()||f8()}function rCg(){return oY(/AppleWebKit/i)&&!CCg()}function CCg(){return oY(/Chrome/i)}function xH(){return oY(/Android/i)}function oCg(){return oY(/Firefox/i)}const aCg=U.createContext({isNative:!0,open:sCg});function VHe(){return U.useContext(aCg)}function Mh(e,g,i=!0){var I,n;let{metaKey:r,ctrlKey:C,altKey:o,shiftKey:a}=g;oCg()&&(!((n=window.event)===null||n===void 0||(I=n.type)===null||I===void 0)&&I.startsWith("key"))&&e.target==="_blank"&&(Eh()?r=!0:C=!0);let s=rCg()&&Eh()&&!RHe()?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:r,ctrlKey:C,altKey:o,shiftKey:a}):new MouseEvent("click",{metaKey:r,ctrlKey:C,altKey:o,shiftKey:a,bubbles:!0,cancelable:!0});Mh.isOpening=i,Bs(e),e.dispatchEvent(s),Mh.isOpening=!1}Mh.isOpening=!1;function ACg(e,g){if(e instanceof HTMLAnchorElement)g(e);else if(e.hasAttribute("data-href")){let i=document.createElement("a");i.href=e.getAttribute("data-href"),e.hasAttribute("data-target")&&(i.target=e.getAttribute("data-target")),e.hasAttribute("data-rel")&&(i.rel=e.getAttribute("data-rel")),e.hasAttribute("data-download")&&(i.download=e.getAttribute("data-download")),e.hasAttribute("data-ping")&&(i.ping=e.getAttribute("data-ping")),e.hasAttribute("data-referrer-policy")&&(i.referrerPolicy=e.getAttribute("data-referrer-policy")),e.appendChild(i),g(i),e.removeChild(i)}}function sCg(e,g){ACg(e,i=>Mh(i,g))}function lCg(e){return{"data-href":e.href,"data-target":e.target,"data-rel":e.rel,"data-download":e.download,"data-ping":e.ping,"data-referrer-policy":e.referrerPolicy}}let xf=new Map,W_=new Set;function Nce(){if(typeof window>"u")return;let e=i=>{let I=xf.get(i.target);I||(I=new Set,xf.set(i.target,I),i.target.addEventListener("transitioncancel",g)),I.add(i.propertyName)},g=i=>{let I=xf.get(i.target);if(I&&(I.delete(i.propertyName),I.size===0&&(i.target.removeEventListener("transitioncancel",g),xf.delete(i.target)),xf.size===0)){for(let n of W_)n();W_.clear()}};document.body.addEventListener("transitionrun",e),document.body.addEventListener("transitionend",g)}typeof document<"u"&&(document.readyState!=="loading"?Nce():document.addEventListener("DOMContentLoaded",Nce));function WHe(e){requestAnimationFrame(()=>{xf.size===0?e():W_.add(e)})}function XHe(){let e=U.useRef(new Map),g=U.useCallback((n,r,C,o)=>{let a=o!=null&&o.once?(...s)=>{e.current.delete(C),C(...s)}:C;e.current.set(C,{type:r,eventTarget:n,fn:a,options:o}),n.addEventListener(r,C,o)},[]),i=U.useCallback((n,r,C,o)=>{var a;let s=((a=e.current.get(C))===null||a===void 0?void 0:a.fn)||C;n.removeEventListener(r,s,o),e.current.delete(C)},[]),I=U.useCallback(()=>{e.current.forEach((n,r)=>{i(n.eventTarget,n.type,r,n.options)})},[i]);return U.useEffect(()=>I,[I]),{addGlobalListener:g,removeGlobalListener:i,removeAllGlobalListeners:I}}function cCg(e,g){let{id:i,"aria-label":I,"aria-labelledby":n}=e;return i=xh(i),n&&I?n=[...new Set([i,...n.trim().split(/\s+/)])].join(" "):n&&(n=n.trim().split(/\s+/).join(" ")),!I&&!n&&g&&(I=g),{id:i,"aria-label":I,"aria-labelledby":n}}function Mw(e){const g=U.useRef();return U.useMemo(()=>({get current(){return g.current},set current(i){g.current=i,typeof e=="function"?e(i):e&&(e.current=i)}}),[e])}function HHe(e,g){const i=U.useRef(!0),I=U.useRef(null);U.useEffect(()=>(i.current=!0,()=>{i.current=!1}),[]),U.useEffect(()=>{i.current?i.current=!1:(!I.current||g.some((n,r)=>!Object.is(n,I[r])))&&e(),I.current=g},g)}function THe(e,g){yI(()=>{if(e&&e.ref&&g)return e.ref.current=g.current,()=>{e.ref.current=null}})}function Ll(e){for(EH(e)&&(e=e.parentElement);e&&!EH(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}function EH(e){let g=window.getComputedStyle(e);return/(auto|scroll)/.test(g.overflow+g.overflowX+g.overflowY)}let uCg=0;const Ux=new Map;function aY(e){let[g,i]=U.useState(void 0);return yI(()=>{if(!e)return;let I=Ux.get(e);if(I)i(I.element.id);else{let n=`react-aria-description-${uCg++}`;i(n);let r=document.createElement("div");r.id=n,r.style.display="none",r.textContent=e,document.body.appendChild(r),I={refCount:0,element:r},Ux.set(e,I)}return I.refCount++,()=>{--I.refCount===0&&(I.element.remove(),Ux.delete(e))}},[e]),{"aria-describedby":e?g:void 0}}function dCg(e,g,i,I){let n=sC(i),r=i==null;U.useEffect(()=>{if(r)return;let C=e.current;return C.addEventListener(g,n,I),()=>{C.removeEventListener(g,n,I)}},[e,g,I,r,n])}function NHe(e,g){let i=kce(e,g,"left"),I=kce(e,g,"top"),n=g.offsetWidth,r=g.offsetHeight,C=e.scrollLeft,o=e.scrollTop,{borderTopWidth:a,borderLeftWidth:s}=getComputedStyle(e),A=e.scrollLeft+parseInt(s,10),l=e.scrollTop+parseInt(a,10),c=A+e.clientWidth,u=l+e.clientHeight;i<=C?C=i-parseInt(s,10):i+n>c&&(C+=i+n-c),I<=l?o=I-parseInt(a,10):I+r>u&&(o+=I+r-u),e.scrollLeft=C,e.scrollTop=o}function kce(e,g,i){const I=i==="left"?"offsetLeft":"offsetTop";let n=0;for(;g.offsetParent&&(n+=g[I],g.offsetParent!==e);){if(g.offsetParent.contains(e)){n-=e[I];break}g=g.offsetParent}return n}function Ul(e,g){if(document.contains(e)){let C=document.scrollingElement||document.documentElement;if(window.getComputedStyle(C).overflow==="hidden"){let a=Ll(e);for(;e&&a&&e!==C&&a!==C;)NHe(a,e),e=a,a=Ll(e)}else{var i;let{left:a,top:s}=e.getBoundingClientRect();e==null||(i=e.scrollIntoView)===null||i===void 0||i.call(e,{block:"nearest"});let{left:A,top:l}=e.getBoundingClientRect();if(Math.abs(a-A)>1||Math.abs(s-l)>1){var I,n,r;g==null||(n=g.containingElement)===null||n===void 0||(I=n.scrollIntoView)===null||I===void 0||I.call(n,{block:"center",inline:"center"}),(r=e.scrollIntoView)===null||r===void 0||r.call(e,{block:"nearest"})}}}}function X_(e){return e.mozInputSource===0&&e.isTrusted?!0:xH()&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function hCg(e){return!xH()&&e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType==="mouse"}function mCg(e,g,i){let I=U.useRef(g),n=sC(()=>{i&&i(I.current)});U.useEffect(()=>{var r;let C=e==null||(r=e.current)===null||r===void 0?void 0:r.form;return C==null||C.addEventListener("reset",n),()=>{C==null||C.removeEventListener("reset",n)}},[e,n])}function fCg(e,g){return g.get?g.get.call(e):g.value}function kHe(e,g,i){if(!g.has(e))throw new TypeError("attempted to "+i+" private field on non-instance");return g.get(e)}function pCg(e,g){var i=kHe(e,g,"get");return fCg(e,i)}function bCg(e,g){if(g.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function yCg(e,g,i){bCg(e,g),g.set(e,i)}function ZCg(e,g,i){if(g.set)g.set.call(e,i);else{if(!g.writable)throw new TypeError("attempted to set read only private field");g.value=i}}function Yce(e,g,i){var I=kHe(e,g,"set");return ZCg(e,I,i),i}let up="default",H_="",PW=new WeakMap;function Kce(e){if(f8()){if(up==="default"){const g=Cc(e);H_=g.documentElement.style.webkitUserSelect,g.documentElement.style.webkitUserSelect="none"}up="disabled"}else(e instanceof HTMLElement||e instanceof SVGElement)&&(PW.set(e,e.style.userSelect),e.style.userSelect="none")}function u1(e){if(f8()){if(up!=="disabled")return;up="restoring",setTimeout(()=>{WHe(()=>{if(up==="restoring"){const g=Cc(e);g.documentElement.style.webkitUserSelect==="none"&&(g.documentElement.style.webkitUserSelect=H_||""),H_="",up="default"}})},300)}else if((e instanceof HTMLElement||e instanceof SVGElement)&&e&&PW.has(e)){let g=PW.get(e);e.style.userSelect==="none"&&g&&(e.style.userSelect=g),e.getAttribute("style")===""&&e.removeAttribute("style"),PW.delete(e)}}const YHe=N.createContext({register:()=>{}});YHe.displayName="PressResponderContext";function GCg(e){let g=U.useContext(YHe);if(g){let{register:i,...I}=g;e=vI(I,e),i()}return THe(g,e.ref),e}var d1=new WeakMap;class h1{continuePropagation(){Yce(this,d1,!1)}get shouldStopPropagation(){return pCg(this,d1)}constructor(g,i,I){yCg(this,d1,{writable:!0,value:void 0}),Yce(this,d1,!0),this.type=g,this.pointerType=i,this.target=I.currentTarget,this.shiftKey=I.shiftKey,this.metaKey=I.metaKey,this.ctrlKey=I.ctrlKey,this.altKey=I.altKey}}const Fce=Symbol("linkClicked");function p8(e){let{onPress:g,onPressChange:i,onPressStart:I,onPressEnd:n,onPressUp:r,isDisabled:C,isPressed:o,preventFocusOnPress:a,shouldCancelOnPointerExit:s,allowTextSelectionOnPress:A,ref:l,...c}=GCg(e),[u,d]=U.useState(!1),h=U.useRef({isPressed:!1,ignoreEmulatedMouseEvents:!1,ignoreClickAfterPress:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null}),{addGlobalListener:m,removeAllGlobalListeners:f}=XHe(),b=sC((v,w)=>{let V=h.current;if(C||V.didFirePressStart)return!1;let S=!0;if(V.isTriggeringEvent=!0,I){let X=new h1("pressstart",w,v);I(X),S=X.shouldStopPropagation}return i&&i(!0),V.isTriggeringEvent=!1,V.didFirePressStart=!0,d(!0),S}),p=sC((v,w,V=!0)=>{let S=h.current;if(!S.didFirePressStart)return!1;S.ignoreClickAfterPress=!0,S.didFirePressStart=!1,S.isTriggeringEvent=!0;let X=!0;if(n){let W=new h1("pressend",w,v);n(W),X=W.shouldStopPropagation}if(i&&i(!1),d(!1),g&&V&&!C){let W=new h1("press",w,v);g(W),X&&(X=W.shouldStopPropagation)}return S.isTriggeringEvent=!1,X}),y=sC((v,w)=>{let V=h.current;if(C)return!1;if(r){V.isTriggeringEvent=!0;let S=new h1("pressup",w,v);return r(S),V.isTriggeringEvent=!1,S.shouldStopPropagation}return!0}),Z=sC(v=>{let w=h.current;w.isPressed&&w.target&&(w.isOverTarget&&w.pointerType!=null&&p(QA(w.target,v),w.pointerType,!1),w.isPressed=!1,w.isOverTarget=!1,w.activePointerId=null,w.pointerType=null,f(),A||u1(w.target))}),B=sC(v=>{s&&Z(v)}),G=U.useMemo(()=>{let v=h.current,w={onKeyDown(S){if(Qx(S.nativeEvent,S.currentTarget)&&S.currentTarget.contains(S.target)){var X;xce(S.target,S.key)&&S.preventDefault();let W=!0;!v.isPressed&&!S.repeat&&(v.target=S.currentTarget,v.isPressed=!0,W=b(S,"keyboard"),m(Cc(S.currentTarget),"keyup",V,!1)),W&&S.stopPropagation(),S.metaKey&&Eh()&&((X=v.metaKeyEvents)===null||X===void 0||X.set(S.key,S.nativeEvent))}else S.key==="Meta"&&(v.metaKeyEvents=new Map)},onKeyUp(S){Qx(S.nativeEvent,S.currentTarget)&&!S.repeat&&S.currentTarget.contains(S.target)&&v.target&&y(QA(v.target,S),"keyboard")},onClick(S){if(!(S&&!S.currentTarget.contains(S.target))&&S&&S.button===0&&!v.isTriggeringEvent&&!Mh.isOpening){let X=!0;if(C&&S.preventDefault(),!v.ignoreClickAfterPress&&!v.ignoreEmulatedMouseEvents&&!v.isPressed&&(v.pointerType==="virtual"||X_(S.nativeEvent))){!C&&!a&&Bs(S.currentTarget);let W=b(S,"virtual"),R=y(S,"virtual"),H=p(S,"virtual");X=W&&R&&H}v.ignoreEmulatedMouseEvents=!1,v.ignoreClickAfterPress=!1,X&&S.stopPropagation()}}},V=S=>{var X;if(v.isPressed&&v.target&&Qx(S,v.target)){var W;xce(S.target,S.key)&&S.preventDefault();let H=S.target,k=p(QA(v.target,S),"keyboard",v.target.contains(H));f(),k&&S.stopPropagation(),S.key!=="Enter"&&b8(v.target)&&v.target.contains(H)&&!S[Fce]&&(S[Fce]=!0,Mh(v.target,S,!1)),v.isPressed=!1,(W=v.metaKeyEvents)===null||W===void 0||W.delete(S.key)}else if(S.key==="Meta"&&(!((X=v.metaKeyEvents)===null||X===void 0)&&X.size)){var R;let H=v.metaKeyEvents;v.metaKeyEvents=void 0;for(let k of H.values())(R=v.target)===null||R===void 0||R.dispatchEvent(new KeyboardEvent("keyup",k))}};if(typeof PointerEvent<"u"){w.onPointerDown=R=>{if(R.button!==0||!R.currentTarget.contains(R.target))return;if(hCg(R.nativeEvent)){v.pointerType="virtual";return}jx(R.currentTarget)&&R.preventDefault(),v.pointerType=R.pointerType;let H=!0;v.isPressed||(v.isPressed=!0,v.isOverTarget=!0,v.activePointerId=R.pointerId,v.target=R.currentTarget,!C&&!a&&Bs(R.currentTarget),A||Kce(v.target),H=b(R,v.pointerType),m(Cc(R.currentTarget),"pointermove",S,!1),m(Cc(R.currentTarget),"pointerup",X,!1),m(Cc(R.currentTarget),"pointercancel",W,!1)),H&&R.stopPropagation()},w.onMouseDown=R=>{R.currentTarget.contains(R.target)&&R.button===0&&(jx(R.currentTarget)&&R.preventDefault(),R.stopPropagation())},w.onPointerUp=R=>{!R.currentTarget.contains(R.target)||v.pointerType==="virtual"||R.button===0&&af(R,R.currentTarget)&&y(R,v.pointerType||R.pointerType)};let S=R=>{R.pointerId===v.activePointerId&&(v.target&&af(R,v.target)?!v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!0,b(QA(v.target,R),v.pointerType)):v.target&&v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!1,p(QA(v.target,R),v.pointerType,!1),B(R)))},X=R=>{R.pointerId===v.activePointerId&&v.isPressed&&R.button===0&&v.target&&(af(R,v.target)&&v.pointerType!=null?p(QA(v.target,R),v.pointerType):v.isOverTarget&&v.pointerType!=null&&p(QA(v.target,R),v.pointerType,!1),v.isPressed=!1,v.isOverTarget=!1,v.activePointerId=null,v.pointerType=null,f(),A||u1(v.target))},W=R=>{Z(R)};w.onDragStart=R=>{R.currentTarget.contains(R.target)&&Z(R)}}else{w.onMouseDown=W=>{if(W.button!==0||!W.currentTarget.contains(W.target))return;if(jx(W.currentTarget)&&W.preventDefault(),v.ignoreEmulatedMouseEvents){W.stopPropagation();return}v.isPressed=!0,v.isOverTarget=!0,v.target=W.currentTarget,v.pointerType=X_(W.nativeEvent)?"virtual":"mouse",!C&&!a&&Bs(W.currentTarget),b(W,v.pointerType)&&W.stopPropagation(),m(Cc(W.currentTarget),"mouseup",S,!1)},w.onMouseEnter=W=>{if(!W.currentTarget.contains(W.target))return;let R=!0;v.isPressed&&!v.ignoreEmulatedMouseEvents&&v.pointerType!=null&&(v.isOverTarget=!0,R=b(W,v.pointerType)),R&&W.stopPropagation()},w.onMouseLeave=W=>{if(!W.currentTarget.contains(W.target))return;let R=!0;v.isPressed&&!v.ignoreEmulatedMouseEvents&&v.pointerType!=null&&(v.isOverTarget=!1,R=p(W,v.pointerType,!1),B(W)),R&&W.stopPropagation()},w.onMouseUp=W=>{W.currentTarget.contains(W.target)&&!v.ignoreEmulatedMouseEvents&&W.button===0&&y(W,v.pointerType||"mouse")};let S=W=>{if(W.button===0){if(v.isPressed=!1,f(),v.ignoreEmulatedMouseEvents){v.ignoreEmulatedMouseEvents=!1;return}v.target&&af(W,v.target)&&v.pointerType!=null?p(QA(v.target,W),v.pointerType):v.target&&v.isOverTarget&&v.pointerType!=null&&p(QA(v.target,W),v.pointerType,!1),v.isOverTarget=!1}};w.onTouchStart=W=>{if(!W.currentTarget.contains(W.target))return;let R=vCg(W.nativeEvent);if(!R)return;v.activePointerId=R.identifier,v.ignoreEmulatedMouseEvents=!0,v.isOverTarget=!0,v.isPressed=!0,v.target=W.currentTarget,v.pointerType="touch",!C&&!a&&Bs(W.currentTarget),A||Kce(v.target),b(W,v.pointerType)&&W.stopPropagation(),m(DH(W.currentTarget),"scroll",X,!0)},w.onTouchMove=W=>{if(!W.currentTarget.contains(W.target))return;if(!v.isPressed){W.stopPropagation();return}let R=Dce(W.nativeEvent,v.activePointerId),H=!0;R&&af(R,W.currentTarget)?!v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!0,H=b(W,v.pointerType)):v.isOverTarget&&v.pointerType!=null&&(v.isOverTarget=!1,H=p(W,v.pointerType,!1),B(W)),H&&W.stopPropagation()},w.onTouchEnd=W=>{if(!W.currentTarget.contains(W.target))return;if(!v.isPressed){W.stopPropagation();return}let R=Dce(W.nativeEvent,v.activePointerId),H=!0;R&&af(R,W.currentTarget)&&v.pointerType!=null?(y(W,v.pointerType),H=p(W,v.pointerType)):v.isOverTarget&&v.pointerType!=null&&(H=p(W,v.pointerType,!1)),H&&W.stopPropagation(),v.isPressed=!1,v.activePointerId=null,v.isOverTarget=!1,v.ignoreEmulatedMouseEvents=!0,v.target&&!A&&u1(v.target),f()},w.onTouchCancel=W=>{W.currentTarget.contains(W.target)&&(W.stopPropagation(),v.isPressed&&Z(W))};let X=W=>{v.isPressed&&W.target.contains(v.target)&&Z({currentTarget:v.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})};w.onDragStart=W=>{W.currentTarget.contains(W.target)&&Z(W)}}return w},[m,C,a,f,A,Z,B,p,b,y]);return U.useEffect(()=>()=>{var v;A||u1((v=h.current.target)!==null&&v!==void 0?v:void 0)},[A]),{isPressed:o||u,pressProps:vI(c,G)}}function b8(e){return e.tagName==="A"&&e.hasAttribute("href")}function Qx(e,g){const{key:i,code:I}=e,n=g,r=n.getAttribute("role");return(i==="Enter"||i===" "||i==="Spacebar"||I==="Space")&&!(n instanceof DH(n).HTMLInputElement&&!KHe(n,i)||n instanceof DH(n).HTMLTextAreaElement||n.isContentEditable)&&!((r==="link"||!r&&b8(n))&&i!=="Enter")}function vCg(e){const{targetTouches:g}=e;return g.length>0?g[0]:null}function Dce(e,g){const i=e.changedTouches;for(let I=0;Ig.right||g.left>e.right||e.top>g.bottom||g.top>e.bottom)}function af(e,g){let i=g.getBoundingClientRect(),I=BCg(e);return SCg(i,I)}function jx(e){return!(e instanceof HTMLElement)||!e.hasAttribute("draggable")}function xce(e,g){return e instanceof HTMLInputElement?!KHe(e,g):e instanceof HTMLButtonElement?e.type!=="submit"&&e.type!=="reset":!b8(e)}const wCg=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function KHe(e,g){return e.type==="checkbox"||e.type==="radio"?g===" ":wCg.has(e.type)}class RCg{isDefaultPrevented(){return this.nativeEvent.defaultPrevented}preventDefault(){this.defaultPrevented=!0,this.nativeEvent.preventDefault()}stopPropagation(){this.nativeEvent.stopPropagation(),this.isPropagationStopped=()=>!0}isPropagationStopped(){return!1}persist(){}constructor(g,i){this.nativeEvent=i,this.target=i.target,this.currentTarget=i.currentTarget,this.relatedTarget=i.relatedTarget,this.bubbles=i.bubbles,this.cancelable=i.cancelable,this.defaultPrevented=i.defaultPrevented,this.eventPhase=i.eventPhase,this.isTrusted=i.isTrusted,this.timeStamp=i.timeStamp,this.type=g}}function FHe(e){let g=U.useRef({isFocused:!1,observer:null});yI(()=>{const I=g.current;return()=>{I.observer&&(I.observer.disconnect(),I.observer=null)}},[]);let i=sC(I=>{e==null||e(I)});return U.useCallback(I=>{if(I.target instanceof HTMLButtonElement||I.target instanceof HTMLInputElement||I.target instanceof HTMLTextAreaElement||I.target instanceof HTMLSelectElement){g.current.isFocused=!0;let n=I.target,r=C=>{g.current.isFocused=!1,n.disabled&&i(new RCg("blur",C)),g.current.observer&&(g.current.observer.disconnect(),g.current.observer=null)};n.addEventListener("focusout",r,{once:!0}),g.current.observer=new MutationObserver(()=>{if(g.current.isFocused&&n.disabled){var C;(C=g.current.observer)===null||C===void 0||C.disconnect();let o=n===document.activeElement?null:document.activeElement;n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o}))}}),g.current.observer.observe(n,{attributes:!0,attributeFilter:["disabled"]})}},[i])}function DHe(e){let{isDisabled:g,onFocus:i,onBlur:I,onFocusChange:n}=e;const r=U.useCallback(a=>{if(a.target===a.currentTarget)return I&&I(a),n&&n(!1),!0},[I,n]),C=FHe(r),o=U.useCallback(a=>{a.target===a.currentTarget&&document.activeElement===a.target&&(i&&i(a),n&&n(!0),C(a))},[n,i,C]);return{focusProps:{onFocus:!g&&(i||n||I)?o:void 0,onBlur:!g&&(I||n)?r:void 0}}}let Ls=null,hS=new Set,Ece=!1,zh=!1,T_=!1;const VCg={Tab:!0,Escape:!0};function AY(e,g){for(let i of hS)i(e,g)}function WCg(e){return!(e.metaKey||!Eh()&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function Mce(e){zh=!0,WCg(e)&&(Ls="keyboard",AY("keyboard",e))}function Af(e){Ls="pointer",(e.type==="mousedown"||e.type==="pointerdown")&&(zh=!0,AY("pointer",e))}function XCg(e){X_(e)&&(zh=!0,Ls="virtual")}function HCg(e){e.target===window||e.target===document||(!zh&&!T_&&(Ls="virtual",AY("virtual",e)),zh=!1,T_=!1)}function TCg(){zh=!1,T_=!0}function MH(){if(typeof window>"u"||Ece)return;let e=HTMLElement.prototype.focus;HTMLElement.prototype.focus=function(){zh=!0,e.apply(this,arguments)},document.addEventListener("keydown",Mce,!0),document.addEventListener("keyup",Mce,!0),document.addEventListener("click",XCg,!0),window.addEventListener("focus",HCg,!0),window.addEventListener("blur",TCg,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",Af,!0),document.addEventListener("pointermove",Af,!0),document.addEventListener("pointerup",Af,!0)):(document.addEventListener("mousedown",Af,!0),document.addEventListener("mousemove",Af,!0),document.addEventListener("mouseup",Af,!0)),Ece=!0}typeof document<"u"&&(document.readyState!=="loading"?MH():document.addEventListener("DOMContentLoaded",MH));function y8(){return Ls!=="pointer"}function N_(){return Ls}function NCg(e){Ls=e,AY(e,null)}function kCg(){MH();let[e,g]=U.useState(Ls);return U.useEffect(()=>{let i=()=>{g(Ls)};return hS.add(i),()=>{hS.delete(i)}},[]),Ew()?null:e}const YCg=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function KCg(e,g,i){var I;return e=e||(i==null?void 0:i.target)instanceof HTMLInputElement&&!YCg.has(i==null||(I=i.target)===null||I===void 0?void 0:I.type)||(i==null?void 0:i.target)instanceof HTMLTextAreaElement||(i==null?void 0:i.target)instanceof HTMLElement&&(i==null?void 0:i.target.isContentEditable),!(e&&g==="keyboard"&&i instanceof KeyboardEvent&&!VCg[i.key])}function FCg(e,g,i){MH(),U.useEffect(()=>{let I=(n,r)=>{KCg(!!(i!=null&&i.isTextInput),n,r)&&e(y8())};return hS.add(I),()=>{hS.delete(I)}},g)}function xHe(e){let{isDisabled:g,onBlurWithin:i,onFocusWithin:I,onFocusWithinChange:n}=e,r=U.useRef({isFocusWithin:!1}),C=U.useCallback(s=>{r.current.isFocusWithin&&!s.currentTarget.contains(s.relatedTarget)&&(r.current.isFocusWithin=!1,i&&i(s),n&&n(!1))},[i,n,r]),o=FHe(C),a=U.useCallback(s=>{!r.current.isFocusWithin&&document.activeElement===s.target&&(I&&I(s),n&&n(!0),r.current.isFocusWithin=!0,o(s))},[I,n,o]);return g?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:a,onBlur:C}}}let zH=!1,$x=0;function k_(){zH=!0,setTimeout(()=>{zH=!1},50)}function zce(e){e.pointerType==="touch"&&k_()}function DCg(){if(!(typeof document>"u"))return typeof PointerEvent<"u"?document.addEventListener("pointerup",zce):document.addEventListener("touchend",k_),$x++,()=>{$x--,!($x>0)&&(typeof PointerEvent<"u"?document.removeEventListener("pointerup",zce):document.removeEventListener("touchend",k_))}}function Z8(e){let{onHoverStart:g,onHoverChange:i,onHoverEnd:I,isDisabled:n}=e,[r,C]=U.useState(!1),o=U.useRef({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;U.useEffect(DCg,[]);let{hoverProps:a,triggerHoverEnd:s}=U.useMemo(()=>{let A=(u,d)=>{if(o.pointerType=d,n||d==="touch"||o.isHovered||!u.currentTarget.contains(u.target))return;o.isHovered=!0;let h=u.currentTarget;o.target=h,g&&g({type:"hoverstart",target:h,pointerType:d}),i&&i(!0),C(!0)},l=(u,d)=>{if(o.pointerType="",o.target=null,d==="touch"||!o.isHovered)return;o.isHovered=!1;let h=u.currentTarget;I&&I({type:"hoverend",target:h,pointerType:d}),i&&i(!1),C(!1)},c={};return typeof PointerEvent<"u"?(c.onPointerEnter=u=>{zH&&u.pointerType==="mouse"||A(u,u.pointerType)},c.onPointerLeave=u=>{!n&&u.currentTarget.contains(u.target)&&l(u,u.pointerType)}):(c.onTouchStart=()=>{o.ignoreEmulatedMouseEvents=!0},c.onMouseEnter=u=>{!o.ignoreEmulatedMouseEvents&&!zH&&A(u,"mouse"),o.ignoreEmulatedMouseEvents=!1},c.onMouseLeave=u=>{!n&&u.currentTarget.contains(u.target)&&l(u,"mouse")}),{hoverProps:c,triggerHoverEnd:l}},[g,i,I,n,o]);return U.useEffect(()=>{n&&s({currentTarget:o.target},o.pointerType)},[n]),{hoverProps:a,isHovered:r}}function Pce(e){if(!e)return;let g=!0;return i=>{let I={...i,preventDefault(){i.preventDefault()},isDefaultPrevented(){return i.isDefaultPrevented()},stopPropagation(){console.error("stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.")},continuePropagation(){g=!1}};e(I),g&&i.stopPropagation()}}function xCg(e){return{keyboardProps:e.isDisabled?{}:{onKeyDown:Pce(e.onKeyDown),onKeyUp:Pce(e.onKeyUp)}}}const ECg=500;function MCg(e){let{isDisabled:g,onLongPressStart:i,onLongPressEnd:I,onLongPress:n,threshold:r=ECg,accessibilityDescription:C}=e;const o=U.useRef();let{addGlobalListener:a,removeGlobalListener:s}=XHe(),{pressProps:A}=p8({isDisabled:g,onPressStart(c){if(c.continuePropagation(),(c.pointerType==="mouse"||c.pointerType==="touch")&&(i&&i({...c,type:"longpressstart"}),o.current=setTimeout(()=>{c.target.dispatchEvent(new PointerEvent("pointercancel",{bubbles:!0})),n&&n({...c,type:"longpress"}),o.current=void 0},r),c.pointerType==="touch")){let u=d=>{d.preventDefault()};a(c.target,"contextmenu",u,{once:!0}),a(window,"pointerup",()=>{setTimeout(()=>{s(c.target,"contextmenu",u)},30)},{once:!0})}},onPressEnd(c){o.current&&clearTimeout(o.current),I&&(c.pointerType==="mouse"||c.pointerType==="touch")&&I({...c,type:"longpressend"})}}),l=aY(n&&!g?C:void 0);return{longPressProps:vI(A,l)}}function IC(e){if(N_()==="virtual"){let g=document.activeElement;WHe(()=>{document.activeElement===g&&document.contains(e)&&Bs(e)})}else Bs(e)}function zCg(e){if(!(e instanceof HTMLElement)&&!(e instanceof SVGElement))return!1;let{display:g,visibility:i}=e.style,I=g!=="none"&&i!=="hidden"&&i!=="collapse";if(I){const{getComputedStyle:n}=e.ownerDocument.defaultView;let{display:r,visibility:C}=n(e);I=r!=="none"&&C!=="hidden"&&C!=="collapse"}return I}function PCg(e,g){return!e.hasAttribute("hidden")&&(e.nodeName==="DETAILS"&&g&&g.nodeName!=="SUMMARY"?e.hasAttribute("open"):!0)}function EHe(e,g){return e.nodeName!=="#comment"&&zCg(e)&&PCg(e,g)&&(!e.parentElement||EHe(e.parentElement,e))}const Jce=N.createContext(null);let fi=null;function JCg(e){let{children:g,contain:i,restoreFocus:I,autoFocus:n}=e,r=U.useRef(null),C=U.useRef(null),o=U.useRef([]),{parentNode:a}=U.useContext(Jce)||{},s=U.useMemo(()=>new K_({scopeRef:o}),[o]);yI(()=>{let c=a||hI.root;if(hI.getTreeNode(c.scopeRef)&&fi&&!PH(fi,c.scopeRef)){let u=hI.getTreeNode(fi);u&&(c=u)}c.addChild(s),hI.addNode(s)},[s,a]),yI(()=>{let c=hI.getTreeNode(o);c&&(c.contain=!!i)},[i]),yI(()=>{var c;let u=(c=r.current)===null||c===void 0?void 0:c.nextSibling,d=[];for(;u&&u!==C.current;)d.push(u),u=u.nextSibling;o.current=d},[g]),jCg(o,I,i),UCg(o,i),qCg(o,I,i),QCg(o,n),U.useEffect(()=>{let c=document.activeElement,u=null;if(Yn(c,o.current)){for(let d of hI.traverse())d.scopeRef&&Yn(c,d.scopeRef.current)&&(u=d);u===hI.getTreeNode(o)&&(fi=u.scopeRef)}},[o]),yI(()=>()=>{var c,u,d;let h=(d=(u=hI.getTreeNode(o))===null||u===void 0||(c=u.parent)===null||c===void 0?void 0:c.scopeRef)!==null&&d!==void 0?d:null;(o===fi||PH(o,fi))&&(!h||hI.getTreeNode(h))&&(fi=h),hI.removeTreeNode(o)},[o]);let A=U.useMemo(()=>OCg(o),[]),l=U.useMemo(()=>({focusManager:A,parentNode:s}),[s,A]);return N.createElement(Jce.Provider,{value:l},N.createElement("span",{"data-focus-scope-start":!0,hidden:!0,ref:r}),g,N.createElement("span",{"data-focus-scope-end":!0,hidden:!0,ref:C}))}function OCg(e){return{focusNext(g={}){let i=e.current,{from:I,tabbable:n,wrap:r,accept:C}=g,o=I||document.activeElement,a=i[0].previousElementSibling,s=yd(i),A=eo(s,{tabbable:n,accept:C},i);A.currentNode=Yn(o,i)?o:a;let l=A.nextNode();return!l&&r&&(A.currentNode=a,l=A.nextNode()),l&&Ss(l,!0),l},focusPrevious(g={}){let i=e.current,{from:I,tabbable:n,wrap:r,accept:C}=g,o=I||document.activeElement,a=i[i.length-1].nextElementSibling,s=yd(i),A=eo(s,{tabbable:n,accept:C},i);A.currentNode=Yn(o,i)?o:a;let l=A.previousNode();return!l&&r&&(A.currentNode=a,l=A.previousNode()),l&&Ss(l,!0),l},focusFirst(g={}){let i=e.current,{tabbable:I,accept:n}=g,r=yd(i),C=eo(r,{tabbable:I,accept:n},i);C.currentNode=i[0].previousElementSibling;let o=C.nextNode();return o&&Ss(o,!0),o},focusLast(g={}){let i=e.current,{tabbable:I,accept:n}=g,r=yd(i),C=eo(r,{tabbable:I,accept:n},i);C.currentNode=i[i.length-1].nextElementSibling;let o=C.previousNode();return o&&Ss(o,!0),o}}}const G8=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[contenteditable]"],_Cg=G8.join(":not([hidden]),")+",[tabindex]:not([disabled]):not([hidden])";G8.push('[tabindex]:not([tabindex="-1"]):not([disabled])');const LCg=G8.join(':not([hidden]):not([tabindex="-1"]),');function yd(e){return e[0].parentElement}function BG(e){let g=hI.getTreeNode(fi);for(;g&&g.scopeRef!==e;){if(g.contain)return!1;g=g.parent}return!0}function UCg(e,g){let i=U.useRef(),I=U.useRef();yI(()=>{let n=e.current;if(!g){I.current&&(cancelAnimationFrame(I.current),I.current=void 0);return}let r=a=>{if(a.key!=="Tab"||a.altKey||a.ctrlKey||a.metaKey||!BG(e))return;let s=document.activeElement,A=e.current;if(!A||!Yn(s,A))return;let l=yd(A),c=eo(l,{tabbable:!0},A);if(!s)return;c.currentNode=s;let u=a.shiftKey?c.previousNode():c.nextNode();u||(c.currentNode=a.shiftKey?A[A.length-1].nextElementSibling:A[0].previousElementSibling,u=a.shiftKey?c.previousNode():c.nextNode()),a.preventDefault(),u&&Ss(u,!0)},C=a=>{(!fi||PH(fi,e))&&Yn(a.target,e.current)?(fi=e,i.current=a.target):BG(e)&&!Y_(a.target,e)?i.current?i.current.focus():fi&&fi.current&&JH(fi.current):BG(e)&&(i.current=a.target)},o=a=>{I.current&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{if(document.activeElement&&BG(e)&&!Y_(document.activeElement,e))if(fi=e,document.body.contains(a.target)){var s;i.current=a.target,(s=i.current)===null||s===void 0||s.focus()}else fi.current&&JH(fi.current)})};return document.addEventListener("keydown",r,!1),document.addEventListener("focusin",C,!1),n==null||n.forEach(a=>a.addEventListener("focusin",C,!1)),n==null||n.forEach(a=>a.addEventListener("focusout",o,!1)),()=>{document.removeEventListener("keydown",r,!1),document.removeEventListener("focusin",C,!1),n==null||n.forEach(a=>a.removeEventListener("focusin",C,!1)),n==null||n.forEach(a=>a.removeEventListener("focusout",o,!1))}},[e,g]),yI(()=>()=>{I.current&&cancelAnimationFrame(I.current)},[I])}function MHe(e){return Y_(e)}function Yn(e,g){return!e||!g?!1:g.some(i=>i.contains(e))}function Y_(e,g=null){if(e instanceof Element&&e.closest("[data-react-aria-top-layer]"))return!0;for(let{scopeRef:i}of hI.traverse(hI.getTreeNode(g)))if(i&&Yn(e,i.current))return!0;return!1}function PH(e,g){var i;let I=(i=hI.getTreeNode(g))===null||i===void 0?void 0:i.parent;for(;I;){if(I.scopeRef===e)return!0;I=I.parent}return!1}function Ss(e,g=!1){if(e!=null&&!g)try{IC(e)}catch{}else if(e!=null)try{e.focus()}catch{}}function JH(e,g=!0){let i=e[0].previousElementSibling,I=yd(e),n=eo(I,{tabbable:g},e);n.currentNode=i;let r=n.nextNode();g&&!r&&(I=yd(e),n=eo(I,{tabbable:!1},e),n.currentNode=i,r=n.nextNode()),Ss(r)}function QCg(e,g){const i=N.useRef(g);U.useEffect(()=>{i.current&&(fi=e,!Yn(document.activeElement,fi.current)&&e.current&&JH(e.current)),i.current=!1},[e])}function jCg(e,g,i){yI(()=>{if(g||i)return;let I=e.current,n=r=>{let C=r.target;Yn(C,e.current)?fi=e:MHe(C)||(fi=null)};return document.addEventListener("focusin",n,!1),I==null||I.forEach(r=>r.addEventListener("focusin",n,!1)),()=>{document.removeEventListener("focusin",n,!1),I==null||I.forEach(r=>r.removeEventListener("focusin",n,!1))}},[e,g,i])}function $Cg(e){let g=hI.getTreeNode(fi);for(;g&&g.scopeRef!==e;){if(g.nodeToRestore)return!1;g=g.parent}return(g==null?void 0:g.scopeRef)===e}function qCg(e,g,i){const I=U.useRef(typeof document<"u"?document.activeElement:null);yI(()=>{let n=e.current;if(!g||i)return;let r=()=>{(!fi||PH(fi,e))&&Yn(document.activeElement,e.current)&&(fi=e)};return document.addEventListener("focusin",r,!1),n==null||n.forEach(C=>C.addEventListener("focusin",r,!1)),()=>{document.removeEventListener("focusin",r,!1),n==null||n.forEach(C=>C.removeEventListener("focusin",r,!1))}},[e,i]),yI(()=>{if(!g)return;let n=r=>{if(r.key!=="Tab"||r.altKey||r.ctrlKey||r.metaKey||!BG(e))return;let C=document.activeElement;if(!Yn(C,e.current))return;let o=hI.getTreeNode(e);if(!o)return;let a=o.nodeToRestore,s=eo(document.body,{tabbable:!0});s.currentNode=C;let A=r.shiftKey?s.previousNode():s.nextNode();if((!a||!document.body.contains(a)||a===document.body)&&(a=void 0,o.nodeToRestore=void 0),(!A||!Yn(A,e.current))&&a){s.currentNode=a;do A=r.shiftKey?s.previousNode():s.nextNode();while(Yn(A,e.current));r.preventDefault(),r.stopPropagation(),A?Ss(A,!0):MHe(a)?Ss(a,!0):C.blur()}};return i||document.addEventListener("keydown",n,!0),()=>{i||document.removeEventListener("keydown",n,!0)}},[e,g,i]),yI(()=>{if(!g)return;let n=hI.getTreeNode(e);if(n){var r;return n.nodeToRestore=(r=I.current)!==null&&r!==void 0?r:void 0,()=>{let C=hI.getTreeNode(e);if(!C)return;let o=C.nodeToRestore;if(g&&o&&(Yn(document.activeElement,e.current)||document.activeElement===document.body&&$Cg(e))){let a=hI.clone();requestAnimationFrame(()=>{if(document.activeElement===document.body){let s=a.getTreeNode(e);for(;s;){if(s.nodeToRestore&&document.body.contains(s.nodeToRestore)){Ss(s.nodeToRestore);return}s=s.parent}for(s=a.getTreeNode(e);s;){if(s.scopeRef&&s.scopeRef.current&&hI.getTreeNode(s.scopeRef)){JH(s.scopeRef.current,!0);return}s=s.parent}}})}}}},[e,g])}function eo(e,g,i){let I=g!=null&&g.tabbable?LCg:_Cg,n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode(r){var C;return!(g==null||(C=g.from)===null||C===void 0)&&C.contains(r)?NodeFilter.FILTER_REJECT:r.matches(I)&&EHe(r)&&(!i||Yn(r,i))&&(!(g!=null&&g.accept)||g.accept(r))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});return g!=null&&g.from&&(n.currentNode=g.from),n}class v8{get size(){return this.fastMap.size}getTreeNode(g){return this.fastMap.get(g)}addTreeNode(g,i,I){let n=this.fastMap.get(i??null);if(!n)return;let r=new K_({scopeRef:g});n.addChild(r),r.parent=n,this.fastMap.set(g,r),I&&(r.nodeToRestore=I)}addNode(g){this.fastMap.set(g.scopeRef,g)}removeTreeNode(g){if(g===null)return;let i=this.fastMap.get(g);if(!i)return;let I=i.parent;for(let r of this.traverse())r!==i&&i.nodeToRestore&&r.nodeToRestore&&i.scopeRef&&i.scopeRef.current&&Yn(r.nodeToRestore,i.scopeRef.current)&&(r.nodeToRestore=i.nodeToRestore);let n=i.children;I&&(I.removeChild(i),n.size>0&&n.forEach(r=>I&&I.addChild(r))),this.fastMap.delete(i.scopeRef)}*traverse(g=this.root){if(g.scopeRef!=null&&(yield g),g.children.size>0)for(let i of g.children)yield*this.traverse(i)}clone(){var g;let i=new v8;var I;for(let n of this.traverse())i.addTreeNode(n.scopeRef,(I=(g=n.parent)===null||g===void 0?void 0:g.scopeRef)!==null&&I!==void 0?I:null,n.nodeToRestore);return i}constructor(){this.fastMap=new Map,this.root=new K_({scopeRef:null}),this.fastMap.set(null,this.root)}}class K_{addChild(g){this.children.add(g),g.parent=this}removeChild(g){this.children.delete(g),g.parent=void 0}constructor(g){this.children=new Set,this.contain=!1,this.scopeRef=g.scopeRef}}let hI=new v8;function sY(e={}){let{autoFocus:g=!1,isTextInput:i,within:I}=e,n=U.useRef({isFocused:!1,isFocusVisible:g||y8()}),[r,C]=U.useState(!1),[o,a]=U.useState(()=>n.current.isFocused&&n.current.isFocusVisible),s=U.useCallback(()=>a(n.current.isFocused&&n.current.isFocusVisible),[]),A=U.useCallback(u=>{n.current.isFocused=u,C(u),s()},[s]);FCg(u=>{n.current.isFocusVisible=u,s()},[],{isTextInput:i});let{focusProps:l}=DHe({isDisabled:I,onFocusChange:A}),{focusWithinProps:c}=xHe({isDisabled:!I,onFocusWithinChange:A});return{isFocused:r,isFocusVisible:o,focusProps:I?c:l}}let eog=N.createContext(null);function tog(e){let g=U.useContext(eog)||{};THe(g,e);let{ref:i,...I}=g;return I}function zHe(e,g){let{focusProps:i}=DHe(e),{keyboardProps:I}=xCg(e),n=vI(i,I),r=tog(g),C=e.isDisabled?{}:r,o=U.useRef(e.autoFocus);return U.useEffect(()=>{o.current&&g.current&&IC(g.current),o.current=!1},[g]),{focusableProps:vI({...n,tabIndex:e.excludeFromTabOrder&&!e.isDisabled?-1:void 0},C)}}function gog(e,g){let i=g==null?void 0:g.isDisabled,[I,n]=U.useState(!1);return yI(()=>{if(e!=null&&e.current&&!i){let r=()=>{if(e.current){let o=eo(e.current,{tabbable:!0});n(!!o.nextNode())}};r();let C=new MutationObserver(r);return C.observe(e.current,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["tabIndex","disabled"]}),()=>{C.disconnect()}}}),i?!1:I}class iog{getStringForLocale(g,i){let I=this.strings[i];I||(I=Iog(i,this.strings,this.defaultLocale),this.strings[i]=I);let n=I[g];if(!n)throw new Error(`Could not find intl message ${g} in ${i} locale`);return n}constructor(g,i="en-US"){this.strings={...g},this.defaultLocale=i}}function Iog(e,g,i="en-US"){if(g[e])return g[e];let I=nog(e);if(g[I])return g[I];for(let n in g)if(n.startsWith(I+"-"))return g[n];return g[i]}function nog(e){return Intl.Locale?new Intl.Locale(e).language:e.split("-")[0]}const Oce=new Map,_ce=new Map;class rog{format(g,i){let I=this.strings.getStringForLocale(g,this.locale);return typeof I=="function"?I(i,this):I}plural(g,i,I="cardinal"){let n=i["="+g];if(n)return typeof n=="function"?n():n;let r=this.locale+":"+I,C=Oce.get(r);C||(C=new Intl.PluralRules(this.locale,{type:I}),Oce.set(r,C));let o=C.select(g);return n=i[o]||i.other,typeof n=="function"?n():n}number(g){let i=_ce.get(this.locale);return i||(i=new Intl.NumberFormat(this.locale),_ce.set(this.locale,i)),i.format(g)}select(g,i){let I=g[i]||g.other;return typeof I=="function"?I():I}constructor(g,i){this.locale=g,this.strings=i}}const Cog=new Set(["Arab","Syrc","Samr","Mand","Thaa","Mend","Nkoo","Adlm","Rohg","Hebr"]),oog=new Set(["ae","ar","arc","bcc","bqi","ckb","dv","fa","glk","he","ku","mzn","nqo","pnb","ps","sd","ug","ur","yi"]);function aog(e){if(Intl.Locale){let i=new Intl.Locale(e).maximize().script;return i?Cog.has(i):!1}let g=e.split("-")[0];return oog.has(g)}function PHe(){let e=typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en-US";try{Intl.DateTimeFormat.supportedLocalesOf([e])}catch{e="en-US"}return{locale:e,direction:aog(e)?"rtl":"ltr"}}let F_=PHe(),SG=new Set;function Lce(){F_=PHe();for(let e of SG)e(F_)}function Aog(){let e=Ew(),[g,i]=U.useState(F_);return U.useEffect(()=>(SG.size===0&&window.addEventListener("languagechange",Lce),SG.add(i),()=>{SG.delete(i),SG.size===0&&window.removeEventListener("languagechange",Lce)}),[]),e?{locale:"en-US",direction:"ltr"}:g}const sog=N.createContext(null);function vm(){let e=Aog();return U.useContext(sog)||e}const Uce=new WeakMap;function log(e){let g=Uce.get(e);return g||(g=new iog(e),Uce.set(e,g)),g}function py(e){let{locale:g}=vm(),i=U.useMemo(()=>log(e),[e]);return U.useMemo(()=>new rog(g,i),[g,i])}let qx=new Map;function JHe(e){let{locale:g}=vm(),i=g+(e?Object.entries(e).sort((n,r)=>n[0]{n.remove()},I)}clear(g){this.node&&((!g||g==="assertive")&&(this.assertiveLog.innerHTML=""),(!g||g==="polite")&&(this.politeLog.innerHTML=""))}constructor(){this.node=document.createElement("div"),this.node.dataset.liveAnnouncer="true",Object.assign(this.node.style,{border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"}),this.assertiveLog=this.createLog("assertive"),this.node.appendChild(this.assertiveLog),this.politeLog=this.createLog("polite"),this.node.appendChild(this.politeLog),document.body.prepend(this.node)}}function uog(e,g,i){let{validationBehavior:I,focus:n}=e;yI(()=>{if(I==="native"&&(i!=null&&i.current)){let a=g.realtimeValidation.isInvalid?g.realtimeValidation.validationErrors.join(" ")||"Invalid value.":"";i.current.setCustomValidity(a),i.current.hasAttribute("title")||(i.current.title=""),g.realtimeValidation.isInvalid||g.updateValidation(hog(i.current))}});let r=sC(()=>{g.resetValidation()}),C=sC(a=>{var s;g.displayValidation.isInvalid||g.commitValidation();let A=i==null||(s=i.current)===null||s===void 0?void 0:s.form;if(!a.defaultPrevented&&i&&A&&mog(A)===i.current){var l;n?n():(l=i.current)===null||l===void 0||l.focus(),NCg("keyboard")}a.preventDefault()}),o=sC(()=>{g.commitValidation()});U.useEffect(()=>{let a=i==null?void 0:i.current;if(!a)return;let s=a.form;return a.addEventListener("invalid",C),a.addEventListener("change",o),s==null||s.addEventListener("reset",r),()=>{a.removeEventListener("invalid",C),a.removeEventListener("change",o),s==null||s.removeEventListener("reset",r)}},[i,C,o,r,I])}function dog(e){let g=e.validity;return{badInput:g.badInput,customError:g.customError,patternMismatch:g.patternMismatch,rangeOverflow:g.rangeOverflow,rangeUnderflow:g.rangeUnderflow,stepMismatch:g.stepMismatch,tooLong:g.tooLong,tooShort:g.tooShort,typeMismatch:g.typeMismatch,valueMissing:g.valueMissing,valid:g.valid}}function hog(e){return{isInvalid:!e.validity.valid,validationDetails:dog(e),validationErrors:e.validationMessage?[e.validationMessage]:[]}}function mog(e){for(let g=0;gjce(yog(C,n)),[C,n]);r!=null&&r.validationDetails.valid&&(r=null);let A=U.useContext(fog),l=U.useMemo(()=>I?Array.isArray(I)?I.flatMap(V=>D_(A[V])):D_(A[I]):[],[A,I]),[c,u]=U.useState(A),[d,h]=U.useState(!1);A!==c&&(u(A),h(!1));let m=U.useMemo(()=>jce(d?[]:l),[d,l]),f=U.useRef(RZ),[b,p]=U.useState(RZ),y=U.useRef(RZ),Z=()=>{if(!B)return;G(!1);let V=s||r||f.current;tE(V,y.current)||(y.current=V,p(V))},[B,G]=U.useState(!1);return U.useEffect(Z),{realtimeValidation:a||m||s||r||RZ,displayValidation:o==="native"?a||m||b:a||m||s||r||b,updateValidation(V){o==="aria"&&!tE(b,V)?p(V):f.current=V},resetValidation(){let V=RZ;tE(V,y.current)||(y.current=V,p(V)),o==="native"&&G(!1),h(!0)},commitValidation(){o==="native"&&G(!0),h(!0)}}}function D_(e){return e?Array.isArray(e)?e:[e]:[]}function yog(e,g){if(typeof e=="function"){let i=e(g);if(i&&typeof i!="boolean")return D_(i)}return[]}function jce(e){return e.length?{isInvalid:!0,validationErrors:e,validationDetails:UHe}:null}function tE(e,g){return e===g?!0:e&&g&&e.isInvalid===g.isInvalid&&e.validationErrors.length===g.validationErrors.length&&e.validationErrors.every((i,I)=>i===g.validationErrors[I])&&Object.entries(e.validationDetails).every(([i,I])=>g.validationDetails[i]===I)}function Zog(e){let{id:g,label:i,"aria-labelledby":I,"aria-label":n,labelElementType:r="label"}=e;g=xh(g);let C=xh(),o={};i?(I=I?`${C} ${I}`:C,o={id:C,htmlFor:r==="label"?g:void 0}):!I&&!n&&console.warn("If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility");let a=cCg({id:g,"aria-label":n,"aria-labelledby":I});return{labelProps:o,fieldProps:a}}function Gog(e){let{description:g,errorMessage:i,isInvalid:I,validationState:n}=e,{labelProps:r,fieldProps:C}=Zog(e),o=Tce([!!g,!!i,I,n]),a=Tce([!!g,!!i,I,n]);return C=vI(C,{"aria-describedby":[o,a,e["aria-describedby"]].filter(Boolean).join(" ")||void 0}),{labelProps:r,fieldProps:C,descriptionProps:{id:o},errorMessageProps:{id:a}}}const $ce={border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"};function B8(e={}){let{style:g,isFocusable:i}=e,[I,n]=U.useState(!1),{focusWithinProps:r}=xHe({isDisabled:!i,onFocusWithinChange:o=>n(o)}),C=U.useMemo(()=>I?g:g?{...$ce,...g}:$ce,[I]);return{visuallyHiddenProps:{...r,style:C}}}function x_(e){return nCg()?e.altKey:e.ctrlKey}function Ef(e){return Eh()?e.metaKey:e.ctrlKey}const vog=1e3;function Bog(e){let{keyboardDelegate:g,selectionManager:i,onTypeSelect:I}=e,n=U.useRef({search:"",timeout:null}).current,r=C=>{let o=Sog(C.key);if(!o||C.ctrlKey||C.metaKey||!C.currentTarget.contains(C.target))return;o===" "&&n.search.trim().length>0&&(C.preventDefault(),"continuePropagation"in C||C.stopPropagation()),n.search+=o;let a=g.getKeyForSearch(n.search,i.focusedKey);a==null&&(a=g.getKeyForSearch(n.search)),a!=null&&(i.setFocusedKey(a),I&&I(a)),clearTimeout(n.timeout),n.timeout=setTimeout(()=>{n.search=""},vog)};return{typeSelectProps:{onKeyDownCapture:g.getKeyForSearch?r:null}}}function Sog(e){return e.length===1||!/^[A-Z]/i.test(e)?e:""}function wog(e){let{selectionManager:g,keyboardDelegate:i,ref:I,autoFocus:n=!1,shouldFocusWrap:r=!1,disallowEmptySelection:C=!1,disallowSelectAll:o=!1,selectOnFocus:a=g.selectionBehavior==="replace",disallowTypeAhead:s=!1,shouldUseVirtualFocus:A,allowsTabNavigation:l=!1,isVirtualized:c,scrollRef:u=I,linkBehavior:d="action"}=e,{direction:h}=vm(),m=VHe(),f=V=>{if(V.altKey&&V.key==="Tab"&&V.preventDefault(),!I.current.contains(V.target))return;const S=(P,te)=>{if(P!=null){if(g.isLink(P)&&d==="selection"&&a&&!x_(V)){ua.flushSync(()=>{g.setFocusedKey(P,te)});let q=u.current.querySelector(`[data-key="${P}"]`);m.open(q,V);return}if(g.setFocusedKey(P,te),g.isLink(P)&&d==="override")return;V.shiftKey&&g.selectionMode==="multiple"?g.extendSelection(P):a&&!x_(V)&&g.replaceSelection(P)}};switch(V.key){case"ArrowDown":if(i.getKeyBelow){var X,W;V.preventDefault();let P=g.focusedKey!=null?i.getKeyBelow(g.focusedKey):(X=i.getFirstKey)===null||X===void 0?void 0:X.call(i);P==null&&r&&(P=(W=i.getFirstKey)===null||W===void 0?void 0:W.call(i,g.focusedKey)),S(P)}break;case"ArrowUp":if(i.getKeyAbove){var R,H;V.preventDefault();let P=g.focusedKey!=null?i.getKeyAbove(g.focusedKey):(R=i.getLastKey)===null||R===void 0?void 0:R.call(i);P==null&&r&&(P=(H=i.getLastKey)===null||H===void 0?void 0:H.call(i,g.focusedKey)),S(P)}break;case"ArrowLeft":if(i.getKeyLeftOf){var k,K;V.preventDefault();let P=i.getKeyLeftOf(g.focusedKey);P==null&&r&&(P=h==="rtl"?(k=i.getFirstKey)===null||k===void 0?void 0:k.call(i,g.focusedKey):(K=i.getLastKey)===null||K===void 0?void 0:K.call(i,g.focusedKey)),S(P,h==="rtl"?"first":"last")}break;case"ArrowRight":if(i.getKeyRightOf){var D,J;V.preventDefault();let P=i.getKeyRightOf(g.focusedKey);P==null&&r&&(P=h==="rtl"?(D=i.getLastKey)===null||D===void 0?void 0:D.call(i,g.focusedKey):(J=i.getFirstKey)===null||J===void 0?void 0:J.call(i,g.focusedKey)),S(P,h==="rtl"?"last":"first")}break;case"Home":if(i.getFirstKey){V.preventDefault();let P=i.getFirstKey(g.focusedKey,Ef(V));g.setFocusedKey(P),Ef(V)&&V.shiftKey&&g.selectionMode==="multiple"?g.extendSelection(P):a&&g.replaceSelection(P)}break;case"End":if(i.getLastKey){V.preventDefault();let P=i.getLastKey(g.focusedKey,Ef(V));g.setFocusedKey(P),Ef(V)&&V.shiftKey&&g.selectionMode==="multiple"?g.extendSelection(P):a&&g.replaceSelection(P)}break;case"PageDown":if(i.getKeyPageBelow){V.preventDefault();let P=i.getKeyPageBelow(g.focusedKey);S(P)}break;case"PageUp":if(i.getKeyPageAbove){V.preventDefault();let P=i.getKeyPageAbove(g.focusedKey);S(P)}break;case"a":Ef(V)&&g.selectionMode==="multiple"&&o!==!0&&(V.preventDefault(),g.selectAll());break;case"Escape":V.preventDefault(),C||g.clearSelection();break;case"Tab":if(!l){if(V.shiftKey)I.current.focus();else{let P=eo(I.current,{tabbable:!0}),te,q;do q=P.lastChild(),q&&(te=q);while(q);te&&!te.contains(document.activeElement)&&Bs(te)}break}}},b=U.useRef({top:0,left:0});dCg(u,"scroll",c?null:()=>{b.current={top:u.current.scrollTop,left:u.current.scrollLeft}});let p=V=>{if(g.isFocused){V.currentTarget.contains(V.target)||g.setFocused(!1);return}if(V.currentTarget.contains(V.target)){if(g.setFocused(!0),g.focusedKey==null){let W=H=>{H!=null&&(g.setFocusedKey(H),a&&g.replaceSelection(H))},R=V.relatedTarget;var S,X;R&&V.currentTarget.compareDocumentPosition(R)&Node.DOCUMENT_POSITION_FOLLOWING?W((S=g.lastSelectedKey)!==null&&S!==void 0?S:i.getLastKey()):W((X=g.firstSelectedKey)!==null&&X!==void 0?X:i.getFirstKey())}else c||(u.current.scrollTop=b.current.top,u.current.scrollLeft=b.current.left);if(!c&&g.focusedKey!=null){let W=u.current.querySelector(`[data-key="${g.focusedKey}"]`);W&&(W.contains(document.activeElement)||Bs(W),N_()==="keyboard"&&Ul(W,{containingElement:I.current}))}}},y=V=>{V.currentTarget.contains(V.relatedTarget)||g.setFocused(!1)};const Z=U.useRef(n);U.useEffect(()=>{if(Z.current){let V=null;n==="first"&&(V=i.getFirstKey()),n==="last"&&(V=i.getLastKey());let S=g.selectedKeys;S.size&&(V=S.values().next().value),g.setFocused(!0),g.setFocusedKey(V),V==null&&!A&&IC(I.current)}Z.current=!1},[]);let B=U.useRef(g.focusedKey);U.useEffect(()=>{let V=N_();if(g.isFocused&&g.focusedKey!=null&&(u!=null&&u.current)){let S=u.current.querySelector(`[data-key="${g.focusedKey}"]`);S&&V==="keyboard"&&(c||NHe(u.current,S),Ul(S,{containingElement:I.current}))}g.isFocused&&g.focusedKey==null&&B.current!=null&&IC(I.current),B.current=g.focusedKey},[c,u,g.focusedKey,g.isFocused,I]);let G={onKeyDown:f,onFocus:p,onBlur:y,onMouseDown(V){u.current===V.target&&V.preventDefault()}},{typeSelectProps:v}=Bog({keyboardDelegate:i,selectionManager:g});s||(G=vI(v,G));let w;return A||(w=g.focusedKey==null?0:-1),{collectionProps:{...G,tabIndex:w}}}function QHe(e){let{selectionManager:g,key:i,ref:I,shouldSelectOnPressUp:n,shouldUseVirtualFocus:r,focus:C,isDisabled:o,onAction:a,allowsDifferentPressOrigin:s,linkBehavior:A="action"}=e,l=VHe(),c=K=>{if(K.pointerType==="keyboard"&&x_(K))g.toggleSelection(i);else{if(g.selectionMode==="none")return;if(g.isLink(i)){if(A==="selection"){l.open(I.current,K),g.setSelectedKeys(g.selectedKeys);return}else if(A==="override"||A==="none")return}g.selectionMode==="single"?g.isSelected(i)&&!g.disallowEmptySelection?g.toggleSelection(i):g.replaceSelection(i):K&&K.shiftKey?g.extendSelection(i):g.selectionBehavior==="toggle"||K&&(Ef(K)||K.pointerType==="touch"||K.pointerType==="virtual")?g.toggleSelection(i):g.replaceSelection(i)}};U.useEffect(()=>{i===g.focusedKey&&g.isFocused&&!r&&(C?C():document.activeElement!==I.current&&IC(I.current))},[I,i,g.focusedKey,g.childFocusStrategy,g.isFocused,r]),o=o||g.isDisabled(i);let u={};!r&&!o?u={tabIndex:i===g.focusedKey?0:-1,onFocus(K){K.target===I.current&&g.setFocusedKey(i)}}:o&&(u.onMouseDown=K=>{K.preventDefault()});let d=g.isLink(i)&&A==="override",h=g.isLink(i)&&A!=="selection"&&A!=="none",m=!o&&g.canSelectItem(i)&&!d,f=(a||h)&&!o,b=f&&(g.selectionBehavior==="replace"?!m:!m||g.isEmpty),p=f&&m&&g.selectionBehavior==="replace",y=b||p,Z=U.useRef(null),B=y&&m,G=U.useRef(!1),v=U.useRef(!1),w=K=>{a&&a(),h&&l.open(I.current,K)},V={};n?(V.onPressStart=K=>{Z.current=K.pointerType,G.current=B,K.pointerType==="keyboard"&&(!y||eue())&&c(K)},s?(V.onPressUp=b?null:K=>{K.pointerType!=="keyboard"&&m&&c(K)},V.onPress=b?w:null):V.onPress=K=>{if(b||p&&K.pointerType!=="mouse"){if(K.pointerType==="keyboard"&&!qce())return;w(K)}else K.pointerType!=="keyboard"&&m&&c(K)}):(V.onPressStart=K=>{Z.current=K.pointerType,G.current=B,v.current=b,m&&(K.pointerType==="mouse"&&!b||K.pointerType==="keyboard"&&(!f||eue()))&&c(K)},V.onPress=K=>{(K.pointerType==="touch"||K.pointerType==="pen"||K.pointerType==="virtual"||K.pointerType==="keyboard"&&y&&qce()||K.pointerType==="mouse"&&v.current)&&(y?w(K):m&&c(K))}),u["data-key"]=i,V.preventFocusOnPress=r;let{pressProps:S,isPressed:X}=p8(V),W=p?K=>{Z.current==="mouse"&&(K.stopPropagation(),K.preventDefault(),w(K))}:void 0,{longPressProps:R}=MCg({isDisabled:!B,onLongPress(K){K.pointerType==="touch"&&(c(K),g.setSelectionBehavior("toggle"))}}),H=K=>{Z.current==="touch"&&G.current&&K.preventDefault()},k=g.isLink(i)?K=>{Mh.isOpening||K.preventDefault()}:void 0;return{itemProps:vI(u,m||b?S:{},B?R:{},{onDoubleClick:W,onDragStartCapture:H,onClick:k}),isPressed:X,isSelected:g.isSelected(i),isFocused:g.isFocused&&g.focusedKey===i,isDisabled:o,allowsSelection:m,hasAction:y}}function qce(){let e=window.event;return(e==null?void 0:e.key)==="Enter"}function eue(){let e=window.event;return(e==null?void 0:e.key)===" "||(e==null?void 0:e.code)==="Space"}class Rog{getNextKey(g){for(g=this.collection.getKeyAfter(g);g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyAfter(g)}return null}getPreviousKey(g){for(g=this.collection.getKeyBefore(g);g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyBefore(g)}return null}findKey(g,i,I){let n=this.getItem(g);if(!n)return null;let r=n.getBoundingClientRect();do g=i(g),n=this.getItem(g);while(n&&I(r,n.getBoundingClientRect()));return g}isSameRow(g,i){return g.top===i.top||g.left!==i.left}isSameColumn(g,i){return g.left===i.left||g.top!==i.top}getKeyBelow(g){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(g,i=>this.getNextKey(i),this.isSameRow):this.getNextKey(g)}getKeyAbove(g){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(g,i=>this.getPreviousKey(i),this.isSameRow):this.getPreviousKey(g)}getNextColumn(g,i){return i?this.getPreviousKey(g):this.getNextKey(g)}getKeyRightOf(g){return this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(g,this.direction==="rtl"):this.findKey(g,i=>this.getNextColumn(i,this.direction==="rtl"),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(g,this.direction==="rtl"):null}getKeyLeftOf(g){return this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(g,this.direction==="ltr"):this.findKey(g,i=>this.getNextColumn(i,this.direction==="ltr"),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(g,this.direction==="ltr"):null}getFirstKey(){let g=this.collection.getFirstKey();for(;g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyAfter(g)}return null}getLastKey(){let g=this.collection.getLastKey();for(;g!=null;){if(this.collection.getItem(g).type==="item"&&!this.disabledKeys.has(g))return g;g=this.collection.getKeyBefore(g)}return null}getItem(g){return this.ref.current.querySelector(`[data-key="${g}"]`)}getKeyPageAbove(g){let i=this.ref.current,I=this.getItem(g);if(!I)return null;if(!EH(i))return this.getFirstKey();let n=i.getBoundingClientRect(),r=I.getBoundingClientRect();if(this.orientation==="horizontal"){let C=n.x-i.scrollLeft,o=Math.max(0,r.x-C+r.width-n.width);for(;I&&r.x-C>o;)g=this.getKeyAbove(g),I=g==null?null:this.getItem(g),r=I==null?void 0:I.getBoundingClientRect()}else{let C=n.y-i.scrollTop,o=Math.max(0,r.y-C+r.height-n.height);for(;I&&r.y-C>o;)g=this.getKeyAbove(g),I=g==null?null:this.getItem(g),r=I==null?void 0:I.getBoundingClientRect()}return g??this.getFirstKey()}getKeyPageBelow(g){let i=this.ref.current,I=this.getItem(g);if(!I)return null;if(!EH(i))return this.getLastKey();let n=i.getBoundingClientRect(),r=I.getBoundingClientRect();if(this.orientation==="horizontal"){let C=n.x-i.scrollLeft,o=Math.min(i.scrollWidth,r.x-C-r.width+n.width);for(;I&&r.x-Cthis.iterateCollection(g))}*iterateCollection(g){let{children:i,items:I}=g;if(typeof i=="function"){if(!I)throw new Error("props.children was a function but props.items is missing");for(let n of g.items)yield*this.getFullNode({value:n},{renderer:i})}else{let n=[];N.Children.forEach(i,C=>{n.push(C)});let r=0;for(let C of n){let o=this.getFullNode({element:C,index:r},{});for(let a of o)r++,yield a}}}getKey(g,i,I,n){if(g.key!=null)return g.key;if(i.type==="cell"&&i.key!=null)return`${n}${i.key}`;let r=i.value;if(r!=null){var C;let o=(C=r.key)!==null&&C!==void 0?C:r.id;if(o==null)throw new Error("No key found for item");return o}return n?`${n}.${i.index}`:`$.${i.index}`}getChildState(g,i){return{renderer:i.renderer||g.renderer}}*getFullNode(g,i,I,n){let r=g.element;if(!r&&g.value&&i&&i.renderer){let a=this.cache.get(g.value);if(a&&(!a.shouldInvalidate||!a.shouldInvalidate(this.context))){a.index=g.index,a.parentKey=n?n.key:null,yield a;return}r=i.renderer(g.value)}if(N.isValidElement(r)){let a=r.type;if(typeof a!="function"&&typeof a.getCollectionNode!="function"){let c=typeof r.type=="function"?r.type.name:r.type;throw new Error(`Unknown element <${c}> in collection.`)}let s=a.getCollectionNode(r.props,this.context),A=g.index,l=s.next();for(;!l.done&&l.value;){let c=l.value;g.index=A;let u=c.key;u||(u=c.element?null:this.getKey(r,g,i,I));let h=[...this.getFullNode({...c,key:u,index:A,wrapper:Wog(g.wrapper,c.wrapper)},this.getChildState(i,c),I?`${I}${r.key}`:r.key,n)];for(let m of h){if(m.value=c.value||g.value,m.value&&this.cache.set(m.value,m),g.type&&m.type!==g.type)throw new Error(`Unsupported type <${gE(m.type)}> in <${gE(n.type)}>. Only <${gE(g.type)}> is supported.`);A++,yield m}l=s.next(h)}return}if(g.key==null)return;let C=this,o={type:g.type,props:g.props,key:g.key,parentKey:n?n.key:null,value:g.value,level:n?n.level+1:0,index:g.index,rendered:g.rendered,textValue:g.textValue,"aria-label":g["aria-label"],wrapper:g.wrapper,shouldInvalidate:g.shouldInvalidate,hasChildNodes:g.hasChildNodes,childNodes:tue(function*(){if(!g.hasChildNodes)return;let a=0;for(let s of g.childNodes()){s.key!=null&&(s.key=`${o.key}${s.key}`),s.index=a;let A=C.getFullNode(s,C.getChildState(i,s),o.key,o);for(let l of A)a++,yield l}})};yield o}constructor(){this.cache=new WeakMap}}function tue(e){let g=[],i=null;return{*[Symbol.iterator](){for(let I of g)yield I;i||(i=e());for(let I of i)g.push(I),yield I}}}function Wog(e,g){if(e&&g)return i=>e(g(i));if(e)return e;if(g)return g}function gE(e){return e[0].toUpperCase()+e.slice(1)}function Xog(e,g,i){let I=U.useMemo(()=>new Vog,[]),{children:n,items:r,collection:C}=e;return U.useMemo(()=>{if(C)return C;let a=I.build({children:n,items:r},i);return g(a)},[I,n,r,C,i,g])}function wI(e,g){return typeof g.getChildren=="function"?g.getChildren(e.key):e.childNodes}function ss(e){return Ql(e,0)}function Ql(e,g){if(g<0)return;let i=0;for(let I of e){if(i===g)return I;i++}}function Zc(e){let g;for(let i of e)g=i;return g}function iE(e,g,i){if(g.parentKey===i.parentKey)return g.index-i.index;let I=[...gue(e,g),g],n=[...gue(e,i),i],r=I.slice(0,n.length).findIndex((C,o)=>C!==n[o]);return r!==-1?(g=I[r],i=n[r],g.index-i.index):I.findIndex(C=>C===i)>=0?1:(n.findIndex(C=>C===g)>=0,-1)}function gue(e,g){let i=[];for(;(g==null?void 0:g.parentKey)!=null;)g=e.getItem(g.parentKey),i.unshift(g);return i}function Hog(e,g){let{inputElementType:i="input",isDisabled:I=!1,isRequired:n=!1,isReadOnly:r=!1,type:C="text",validationBehavior:o="aria"}=e,[a,s]=BHe(e.value,e.defaultValue||"",e.onChange),{focusableProps:A}=zHe(e,g),l=pog({...e,value:a}),{isInvalid:c,validationErrors:u,validationDetails:d}=l.displayValidation,{labelProps:h,fieldProps:m,descriptionProps:f,errorMessageProps:b}=Gog({...e,isInvalid:c,errorMessage:e.errorMessage||u}),p=FA(e,{labelable:!0});const y={type:C,pattern:e.pattern};return mCg(g,a,s),uog(e,l,g),U.useEffect(()=>{if(g.current instanceof DH(g.current).HTMLTextAreaElement){let Z=g.current;Object.defineProperty(Z,"defaultValue",{get:()=>Z.value,set:()=>{},configurable:!0})}},[g]),{labelProps:h,inputProps:vI(p,i==="input"&&y,{disabled:I,readOnly:r,required:n&&o==="native","aria-required":n&&o==="aria"||void 0,"aria-invalid":c||void 0,"aria-errormessage":e["aria-errormessage"],"aria-activedescendant":e["aria-activedescendant"],"aria-autocomplete":e["aria-autocomplete"],"aria-haspopup":e["aria-haspopup"],value:a,onChange:Z=>s(Z.target.value),autoComplete:e.autoComplete,maxLength:e.maxLength,minLength:e.minLength,name:e.name,placeholder:e.placeholder,inputMode:e.inputMode,onCopy:e.onCopy,onCut:e.onCut,onPaste:e.onPaste,onCompositionEnd:e.onCompositionEnd,onCompositionStart:e.onCompositionStart,onCompositionUpdate:e.onCompositionUpdate,onSelect:e.onSelect,onBeforeInput:e.onBeforeInput,onInput:e.onInput,...A,...m}),descriptionProps:f,errorMessageProps:b,isInvalid:c,validationErrors:u,validationDetails:d}}class dp{copy(){return new dp(this.x,this.y)}equals(g){return this.x===g.x&&this.y===g.y}isOrigin(){return this.x===0&&this.y===0}constructor(g=0,i=0){this.x=g,this.y=i}}class hp{get maxX(){return this.x+this.width}get maxY(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new dp(this.x,this.y)}get topRight(){return new dp(this.maxX,this.y)}get bottomLeft(){return new dp(this.x,this.maxY)}get bottomRight(){return new dp(this.maxX,this.maxY)}intersects(g){return this.x<=g.x+g.width&&g.x<=this.x+this.width&&this.y<=g.y+g.height&&g.y<=this.y+this.height}containsRect(g){return this.x<=g.x&&this.y<=g.y&&this.maxX>=g.maxX&&this.maxY>=g.maxY}containsPoint(g){return this.x<=g.x&&this.y<=g.y&&this.maxX>=g.x&&this.maxY>=g.y}getCornerInRect(g){for(let i of["topLeft","topRight","bottomLeft","bottomRight"])if(g.containsPoint(this[i]))return i;return null}equals(g){return g.x===this.x&&g.y===this.y&&g.width===this.width&&g.height===this.height}pointEquals(g){return this.x===g.x&&this.y===g.y}sizeEquals(g){return this.width===g.width&&this.height===g.height}union(g){let i=Math.min(this.x,g.x),I=Math.min(this.y,g.y),n=Math.max(this.maxX,g.maxX)-i,r=Math.max(this.maxY,g.maxY)-I;return new hp(i,I,n,r)}intersection(g){if(!this.intersects(g))return new hp(0,0,0,0);let i=Math.max(this.x,g.x),I=Math.max(this.y,g.y);return new hp(i,I,Math.min(this.maxX,g.maxX)-i,Math.min(this.maxY,g.maxY)-I)}copy(){return new hp(this.x,this.y,this.width,this.height)}constructor(g=0,i=0,I=0,n=0){this.x=g,this.y=i,this.width=I,this.height=n}}let Mf=typeof window<"u"?window.performance:null,iue=Mf&&(Mf.now||Mf.webkitNow||Mf.msNow||Mf.mozNow);iue&&iue.bind(Mf);function S8(e){return e&&e.__esModule?e.default:e}class jHe{isCell(g){return g.type==="cell"}isRow(g){return g.type==="row"||g.type==="item"}findPreviousKey(g,i){let I=g!=null?this.collection.getKeyBefore(g):this.collection.getLastKey();for(;I!=null;){let n=this.collection.getItem(I);if(!this.disabledKeys.has(I)&&(!i||i(n)))return I;I=this.collection.getKeyBefore(I)}}findNextKey(g,i){let I=g!=null?this.collection.getKeyAfter(g):this.collection.getFirstKey();for(;I!=null;){let n=this.collection.getItem(I);if(!this.disabledKeys.has(I)&&(!i||i(n)))return I;I=this.collection.getKeyAfter(I)}}getKeyBelow(g){let i=this.collection.getItem(g);if(i&&(this.isCell(i)&&(g=i.parentKey),g=this.findNextKey(g),g!=null)){if(this.isCell(i)){let I=this.collection.getItem(g);return Ql(wI(I,this.collection),i.index).key}if(this.focusMode==="row")return g}}getKeyAbove(g){let i=this.collection.getItem(g);if(i&&(this.isCell(i)&&(g=i.parentKey),g=this.findPreviousKey(g),g!=null)){if(this.isCell(i)){let I=this.collection.getItem(g);return Ql(wI(I,this.collection),i.index).key}if(this.focusMode==="row")return g}}getKeyRightOf(g){let i=this.collection.getItem(g);if(i){if(this.isRow(i)){let I=wI(i,this.collection);return this.direction==="rtl"?Zc(I).key:ss(I).key}if(this.isCell(i)){let I=this.collection.getItem(i.parentKey),n=wI(I,this.collection),r=this.direction==="rtl"?Ql(n,i.index-1):Ql(n,i.index+1);return r?r.key:this.focusMode==="row"?i.parentKey:this.direction==="rtl"?this.getFirstKey(g):this.getLastKey(g)}}}getKeyLeftOf(g){let i=this.collection.getItem(g);if(i){if(this.isRow(i)){let I=wI(i,this.collection);return this.direction==="rtl"?ss(I).key:Zc(I).key}if(this.isCell(i)){let I=this.collection.getItem(i.parentKey),n=wI(I,this.collection),r=this.direction==="rtl"?Ql(n,i.index+1):Ql(n,i.index-1);return r?r.key:this.focusMode==="row"?i.parentKey:this.direction==="rtl"?this.getLastKey(g):this.getFirstKey(g)}}}getFirstKey(g,i){let I;if(g!=null){if(I=this.collection.getItem(g),!I)return;if(this.isCell(I)&&!i){let n=this.collection.getItem(I.parentKey);return ss(wI(n,this.collection)).key}}if(g=this.findNextKey(),g!=null&&I&&this.isCell(I)&&i||this.focusMode==="cell"){let n=this.collection.getItem(g);g=ss(wI(n,this.collection)).key}return g}getLastKey(g,i){let I;if(g!=null){if(I=this.collection.getItem(g),!I)return;if(this.isCell(I)&&!i){let n=this.collection.getItem(I.parentKey),r=wI(n,this.collection);return Zc(r).key}}if(g=this.findPreviousKey(),g!=null&&I&&this.isCell(I)&&i||this.focusMode==="cell"){let n=this.collection.getItem(g),r=wI(n,this.collection);g=Zc(r).key}return g}getItem(g){return this.ref.current.querySelector(`[data-key="${g}"]`)}getItemRect(g){var i;if(this.layout)return(i=this.layout.getLayoutInfo(g))===null||i===void 0?void 0:i.rect;let I=this.getItem(g);if(I)return new hp(I.offsetLeft,I.offsetTop,I.offsetWidth,I.offsetHeight)}getPageHeight(){var g,i,I;return this.layout?(g=this.layout.virtualizer)===null||g===void 0?void 0:g.visibleRect.height:(I=this.ref)===null||I===void 0||(i=I.current)===null||i===void 0?void 0:i.offsetHeight}getContentHeight(){var g,i;return this.layout?this.layout.getContentSize().height:(i=this.ref)===null||i===void 0||(g=i.current)===null||g===void 0?void 0:g.scrollHeight}getKeyPageAbove(g){let i=this.getItemRect(g);if(!i)return null;let I=Math.max(0,i.maxY-this.getPageHeight());for(;i&&i.y>I;)g=this.getKeyAbove(g),i=this.getItemRect(g);return g}getKeyPageBelow(g){let i=this.getItemRect(g);if(!i)return null;let I=this.getPageHeight(),n=Math.min(this.getContentHeight(),i.y+I);for(;i&&i.maxY`${e.item} غير المحدد`,longPressToSelect:"اضغط مطولًا للدخول إلى وضع التحديد.",select:"تحديد",selectedAll:"جميع العناصر المحددة.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"لم يتم تحديد عناصر",one:()=>`${g.number(e.count)} عنصر محدد`,other:()=>`${g.number(e.count)} عنصر محدد`})}.`,selectedItem:e=>`${e.item} المحدد`};var qHe={};qHe={deselectedItem:e=>`${e.item} не е избран.`,longPressToSelect:"Натиснете и задръжте за да влезете в избирателен режим.",select:"Изберете",selectedAll:"Всички елементи са избрани.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Няма избрани елементи",one:()=>`${g.number(e.count)} избран елемент`,other:()=>`${g.number(e.count)} избрани елементи`})}.`,selectedItem:e=>`${e.item} избран.`};var eTe={};eTe={deselectedItem:e=>`Položka ${e.item} není vybrána.`,longPressToSelect:"Dlouhým stisknutím přejdete do režimu výběru.",select:"Vybrat",selectedAll:"Vybrány všechny položky.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nevybrány žádné položky",one:()=>`Vybrána ${g.number(e.count)} položka`,other:()=>`Vybráno ${g.number(e.count)} položek`})}.`,selectedItem:e=>`Vybrána položka ${e.item}.`};var tTe={};tTe={deselectedItem:e=>`${e.item} ikke valgt.`,longPressToSelect:"Lav et langt tryk for at aktivere valgtilstand.",select:"Vælg",selectedAll:"Alle elementer valgt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ingen elementer valgt",one:()=>`${g.number(e.count)} element valgt`,other:()=>`${g.number(e.count)} elementer valgt`})}.`,selectedItem:e=>`${e.item} valgt.`};var gTe={};gTe={deselectedItem:e=>`${e.item} nicht ausgewählt.`,longPressToSelect:"Gedrückt halten, um Auswahlmodus zu öffnen.",select:"Auswählen",selectedAll:"Alle Elemente ausgewählt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Keine Elemente ausgewählt",one:()=>`${g.number(e.count)} Element ausgewählt`,other:()=>`${g.number(e.count)} Elemente ausgewählt`})}.`,selectedItem:e=>`${e.item} ausgewählt.`};var iTe={};iTe={deselectedItem:e=>`Δεν επιλέχθηκε το στοιχείο ${e.item}.`,longPressToSelect:"Πατήστε παρατεταμένα για να μπείτε σε λειτουργία επιλογής.",select:"Επιλογή",selectedAll:"Επιλέχθηκαν όλα τα στοιχεία.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Δεν επιλέχθηκαν στοιχεία",one:()=>`Επιλέχθηκε ${g.number(e.count)} στοιχείο`,other:()=>`Επιλέχθηκαν ${g.number(e.count)} στοιχεία`})}.`,selectedItem:e=>`Επιλέχθηκε το στοιχείο ${e.item}.`};var ITe={};ITe={deselectedItem:e=>`${e.item} not selected.`,select:"Select",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"No items selected",one:()=>`${g.number(e.count)} item selected`,other:()=>`${g.number(e.count)} items selected`})}.`,selectedAll:"All items selected.",selectedItem:e=>`${e.item} selected.`,longPressToSelect:"Long press to enter selection mode."};var nTe={};nTe={deselectedItem:e=>`${e.item} no seleccionado.`,longPressToSelect:"Mantenga pulsado para abrir el modo de selección.",select:"Seleccionar",selectedAll:"Todos los elementos seleccionados.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ningún elemento seleccionado",one:()=>`${g.number(e.count)} elemento seleccionado`,other:()=>`${g.number(e.count)} elementos seleccionados`})}.`,selectedItem:e=>`${e.item} seleccionado.`};var rTe={};rTe={deselectedItem:e=>`${e.item} pole valitud.`,longPressToSelect:"Valikurežiimi sisenemiseks vajutage pikalt.",select:"Vali",selectedAll:"Kõik üksused valitud.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Üksusi pole valitud",one:()=>`${g.number(e.count)} üksus valitud`,other:()=>`${g.number(e.count)} üksust valitud`})}.`,selectedItem:e=>`${e.item} valitud.`};var CTe={};CTe={deselectedItem:e=>`Kohdetta ${e.item} ei valittu.`,longPressToSelect:"Siirry valintatilaan painamalla pitkään.",select:"Valitse",selectedAll:"Kaikki kohteet valittu.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ei yhtään kohdetta valittu",one:()=>`${g.number(e.count)} kohde valittu`,other:()=>`${g.number(e.count)} kohdetta valittu`})}.`,selectedItem:e=>`${e.item} valittu.`};var oTe={};oTe={deselectedItem:e=>`${e.item} non sélectionné.`,longPressToSelect:"Appuyez de manière prolongée pour passer en mode de sélection.",select:"Sélectionner",selectedAll:"Tous les éléments sélectionnés.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Aucun élément sélectionné",one:()=>`${g.number(e.count)} élément sélectionné`,other:()=>`${g.number(e.count)} éléments sélectionnés`})}.`,selectedItem:e=>`${e.item} sélectionné.`};var aTe={};aTe={deselectedItem:e=>`${e.item} לא נבחר.`,longPressToSelect:"הקשה ארוכה לכניסה למצב בחירה.",select:"בחר",selectedAll:"כל הפריטים נבחרו.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"לא נבחרו פריטים",one:()=>`פריט ${g.number(e.count)} נבחר`,other:()=>`${g.number(e.count)} פריטים נבחרו`})}.`,selectedItem:e=>`${e.item} נבחר.`};var ATe={};ATe={deselectedItem:e=>`Stavka ${e.item} nije odabrana.`,longPressToSelect:"Dugo pritisnite za ulazak u način odabira.",select:"Odaberite",selectedAll:"Odabrane su sve stavke.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nije odabrana nijedna stavka",one:()=>`Odabrana je ${g.number(e.count)} stavka`,other:()=>`Odabrano je ${g.number(e.count)} stavki`})}.`,selectedItem:e=>`Stavka ${e.item} je odabrana.`};var sTe={};sTe={deselectedItem:e=>`${e.item} nincs kijelölve.`,longPressToSelect:"Nyomja hosszan a kijelöléshez.",select:"Kijelölés",selectedAll:"Az összes elem kijelölve.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Egy elem sincs kijelölve",one:()=>`${g.number(e.count)} elem kijelölve`,other:()=>`${g.number(e.count)} elem kijelölve`})}.`,selectedItem:e=>`${e.item} kijelölve.`};var lTe={};lTe={deselectedItem:e=>`${e.item} non selezionato.`,longPressToSelect:"Premi a lungo per passare alla modalità di selezione.",select:"Seleziona",selectedAll:"Tutti gli elementi selezionati.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nessun elemento selezionato",one:()=>`${g.number(e.count)} elemento selezionato`,other:()=>`${g.number(e.count)} elementi selezionati`})}.`,selectedItem:e=>`${e.item} selezionato.`};var cTe={};cTe={deselectedItem:e=>`${e.item} が選択されていません。`,longPressToSelect:"長押しして選択モードを開きます。",select:"選択",selectedAll:"すべての項目を選択しました。",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"項目が選択されていません",one:()=>`${g.number(e.count)} 項目を選択しました`,other:()=>`${g.number(e.count)} 項目を選択しました`})}。`,selectedItem:e=>`${e.item} を選択しました。`};var uTe={};uTe={deselectedItem:e=>`${e.item}이(가) 선택되지 않았습니다.`,longPressToSelect:"선택 모드로 들어가려면 길게 누르십시오.",select:"선택",selectedAll:"모든 항목이 선택되었습니다.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"선택된 항목이 없습니다",one:()=>`${g.number(e.count)}개 항목이 선택되었습니다`,other:()=>`${g.number(e.count)}개 항목이 선택되었습니다`})}.`,selectedItem:e=>`${e.item}이(가) 선택되었습니다.`};var dTe={};dTe={deselectedItem:e=>`${e.item} nepasirinkta.`,longPressToSelect:"Norėdami įjungti pasirinkimo režimą, paspauskite ir palaikykite.",select:"Pasirinkti",selectedAll:"Pasirinkti visi elementai.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nepasirinktas nė vienas elementas",one:()=>`Pasirinktas ${g.number(e.count)} elementas`,other:()=>`Pasirinkta elementų: ${g.number(e.count)}`})}.`,selectedItem:e=>`Pasirinkta: ${e.item}.`};var hTe={};hTe={deselectedItem:e=>`Vienums ${e.item} nav atlasīts.`,longPressToSelect:"Ilgi turiet nospiestu. lai ieslēgtu atlases režīmu.",select:"Atlasīt",selectedAll:"Atlasīti visi vienumi.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nav atlasīts neviens vienums",one:()=>`Atlasīto vienumu skaits: ${g.number(e.count)}`,other:()=>`Atlasīto vienumu skaits: ${g.number(e.count)}`})}.`,selectedItem:e=>`Atlasīts vienums ${e.item}.`};var mTe={};mTe={deselectedItem:e=>`${e.item} er ikke valgt.`,longPressToSelect:"Bruk et langt trykk for å gå inn i valgmodus.",select:"Velg",selectedAll:"Alle elementer er valgt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Ingen elementer er valgt",one:()=>`${g.number(e.count)} element er valgt`,other:()=>`${g.number(e.count)} elementer er valgt`})}.`,selectedItem:e=>`${e.item} er valgt.`};var fTe={};fTe={deselectedItem:e=>`${e.item} niet geselecteerd.`,longPressToSelect:"Druk lang om de selectiemodus te openen.",select:"Selecteren",selectedAll:"Alle items geselecteerd.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Geen items geselecteerd",one:()=>`${g.number(e.count)} item geselecteerd`,other:()=>`${g.number(e.count)} items geselecteerd`})}.`,selectedItem:e=>`${e.item} geselecteerd.`};var pTe={};pTe={deselectedItem:e=>`Nie zaznaczono ${e.item}.`,longPressToSelect:"Naciśnij i przytrzymaj, aby wejść do trybu wyboru.",select:"Zaznacz",selectedAll:"Wszystkie zaznaczone elementy.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nie zaznaczono żadnych elementów",one:()=>`${g.number(e.count)} zaznaczony element`,other:()=>`${g.number(e.count)} zaznaczonych elementów`})}.`,selectedItem:e=>`Zaznaczono ${e.item}.`};var bTe={};bTe={deselectedItem:e=>`${e.item} não selecionado.`,longPressToSelect:"Mantenha pressionado para entrar no modo de seleção.",select:"Selecionar",selectedAll:"Todos os itens selecionados.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nenhum item selecionado",one:()=>`${g.number(e.count)} item selecionado`,other:()=>`${g.number(e.count)} itens selecionados`})}.`,selectedItem:e=>`${e.item} selecionado.`};var yTe={};yTe={deselectedItem:e=>`${e.item} não selecionado.`,longPressToSelect:"Prima continuamente para entrar no modo de seleção.",select:"Selecionar",selectedAll:"Todos os itens selecionados.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nenhum item selecionado",one:()=>`${g.number(e.count)} item selecionado`,other:()=>`${g.number(e.count)} itens selecionados`})}.`,selectedItem:e=>`${e.item} selecionado.`};var ZTe={};ZTe={deselectedItem:e=>`${e.item} neselectat.`,longPressToSelect:"Apăsați lung pentru a intra în modul de selectare.",select:"Selectare",selectedAll:"Toate elementele selectate.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Niciun element selectat",one:()=>`${g.number(e.count)} element selectat`,other:()=>`${g.number(e.count)} elemente selectate`})}.`,selectedItem:e=>`${e.item} selectat.`};var GTe={};GTe={deselectedItem:e=>`${e.item} не выбрано.`,longPressToSelect:"Нажмите и удерживайте для входа в режим выбора.",select:"Выбрать",selectedAll:"Выбраны все элементы.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Нет выбранных элементов",one:()=>`${g.number(e.count)} элемент выбран`,other:()=>`${g.number(e.count)} элементов выбрано`})}.`,selectedItem:e=>`${e.item} выбрано.`};var vTe={};vTe={deselectedItem:e=>`Nevybraté položky: ${e.item}.`,longPressToSelect:"Dlhším stlačením prejdite do režimu výberu.",select:"Vybrať",selectedAll:"Všetky vybraté položky.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Žiadne vybraté položky",one:()=>`${g.number(e.count)} vybratá položka`,other:()=>`Počet vybratých položiek:${g.number(e.count)}`})}.`,selectedItem:e=>`Vybraté položky: ${e.item}.`};var BTe={};BTe={deselectedItem:e=>`Element ${e.item} ni izbran.`,longPressToSelect:"Za izbirni način pritisnite in dlje časa držite.",select:"Izberite",selectedAll:"Vsi elementi so izbrani.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Noben element ni izbran",one:()=>`${g.number(e.count)} element je izbran`,other:()=>`${g.number(e.count)} elementov je izbranih`})}.`,selectedItem:e=>`Element ${e.item} je izbran.`};var STe={};STe={deselectedItem:e=>`${e.item} nije izabrano.`,longPressToSelect:"Dugo pritisnite za ulazak u režim biranja.",select:"Izaberite",selectedAll:"Izabrane su sve stavke.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Nije izabrana nijedna stavka",one:()=>`Izabrana je ${g.number(e.count)} stavka`,other:()=>`Izabrano je ${g.number(e.count)} stavki`})}.`,selectedItem:e=>`${e.item} je izabrano.`};var wTe={};wTe={deselectedItem:e=>`${e.item} ej markerat.`,longPressToSelect:"Tryck länge när du vill öppna väljarläge.",select:"Markera",selectedAll:"Alla markerade objekt.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Inga markerade objekt",one:()=>`${g.number(e.count)} markerat objekt`,other:()=>`${g.number(e.count)} markerade objekt`})}.`,selectedItem:e=>`${e.item} markerat.`};var RTe={};RTe={deselectedItem:e=>`${e.item} seçilmedi.`,longPressToSelect:"Seçim moduna girmek için uzun basın.",select:"Seç",selectedAll:"Tüm ögeler seçildi.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Hiçbir öge seçilmedi",one:()=>`${g.number(e.count)} öge seçildi`,other:()=>`${g.number(e.count)} öge seçildi`})}.`,selectedItem:e=>`${e.item} seçildi.`};var VTe={};VTe={deselectedItem:e=>`${e.item} не вибрано.`,longPressToSelect:"Виконайте довге натиснення, щоб перейти в режим вибору.",select:"Вибрати",selectedAll:"Усі елементи вибрано.",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"Жодних елементів не вибрано",one:()=>`${g.number(e.count)} елемент вибрано`,other:()=>`Вибрано елементів: ${g.number(e.count)}`})}.`,selectedItem:e=>`${e.item} вибрано.`};var WTe={};WTe={deselectedItem:e=>`未选择 ${e.item}。`,longPressToSelect:"长按以进入选择模式。",select:"选择",selectedAll:"已选择所有项目。",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"未选择项目",one:()=>`已选择 ${g.number(e.count)} 个项目`,other:()=>`已选择 ${g.number(e.count)} 个项目`})}。`,selectedItem:e=>`已选择 ${e.item}。`};var XTe={};XTe={deselectedItem:e=>`未選取「${e.item}」。`,longPressToSelect:"長按以進入選擇模式。",select:"選取",selectedAll:"已選取所有項目。",selectedCount:(e,g)=>`${g.plural(e.count,{"=0":"未選取任何項目",one:()=>`已選取 ${g.number(e.count)} 個項目`,other:()=>`已選取 ${g.number(e.count)} 個項目`})}。`,selectedItem:e=>`已選取「${e.item}」。`};lY={"ar-AE":$He,"bg-BG":qHe,"cs-CZ":eTe,"da-DK":tTe,"de-DE":gTe,"el-GR":iTe,"en-US":ITe,"es-ES":nTe,"et-EE":rTe,"fi-FI":CTe,"fr-FR":oTe,"he-IL":aTe,"hr-HR":ATe,"hu-HU":sTe,"it-IT":lTe,"ja-JP":cTe,"ko-KR":uTe,"lt-LT":dTe,"lv-LV":hTe,"nb-NO":mTe,"nl-NL":fTe,"pl-PL":pTe,"pt-BR":bTe,"pt-PT":yTe,"ro-RO":ZTe,"ru-RU":GTe,"sk-SK":vTe,"sl-SI":BTe,"sr-SP":STe,"sv-SE":wTe,"tr-TR":RTe,"uk-UA":VTe,"zh-CN":WTe,"zh-TW":XTe};function Tog(e,g){let{getRowText:i=C=>{var o,a,s,A;return(A=(o=(a=g.collection).getTextValue)===null||o===void 0?void 0:o.call(a,C))!==null&&A!==void 0?A:(s=g.collection.getItem(C))===null||s===void 0?void 0:s.textValue}}=e,I=py(S8(lY)),n=g.selectionManager.rawSelection,r=U.useRef(n);HHe(()=>{var C;if(!g.selectionManager.isFocused){r.current=n;return}let o=Iue(n,r.current),a=Iue(r.current,n),s=g.selectionManager.selectionBehavior==="replace",A=[];if(g.selectionManager.selectedKeys.size===1&&s){if(g.collection.getItem(g.selectionManager.selectedKeys.keys().next().value)){let l=i(g.selectionManager.selectedKeys.keys().next().value);l&&A.push(I.format("selectedItem",{item:l}))}}else if(o.size===1&&a.size===0){let l=i(o.keys().next().value);l&&A.push(I.format("selectedItem",{item:l}))}else if(a.size===1&&o.size===0&&g.collection.getItem(a.keys().next().value)){let l=i(a.keys().next().value);l&&A.push(I.format("deselectedItem",{item:l}))}g.selectionManager.selectionMode==="multiple"&&(A.length===0||n==="all"||n.size>1||r.current==="all"||((C=r.current)===null||C===void 0?void 0:C.size)>1)&&A.push(n==="all"?I.format("selectedAll"):I.format("selectedCount",{count:n.size})),A.length>0&&_He(A.join(" ")),r.current=n},[n])}function Iue(e,g){let i=new Set;if(e==="all"||g==="all")return i;for(let I of e.keys())g.has(I)||i.add(I);return i}function Nog(e){let g=py(S8(lY)),i=kCg(),I=(i==="pointer"||i==="virtual"||i==null)&&typeof window<"u"&&"ontouchstart"in window,n=U.useMemo(()=>{let C=e.selectionManager.selectionMode,o=e.selectionManager.selectionBehavior,a;return I&&(a=g.format("longPressToSelect")),o==="replace"&&C!=="none"&&e.hasItemActions?a:void 0},[e.selectionManager.selectionMode,e.selectionManager.selectionBehavior,e.hasItemActions,g,I]);return aY(n)}function kog(e,g,i){let{isVirtualized:I,keyboardDelegate:n,focusMode:r,scrollRef:C,getRowText:o,onRowAction:a,onCellAction:s}=e,{selectionManager:A}=g;!e["aria-label"]&&!e["aria-labelledby"]&&console.warn("An aria-label or aria-labelledby prop is required for accessibility.");let l=JHe({usage:"search",sensitivity:"base"}),{direction:c}=vm(),u=g.selectionManager.disabledBehavior,d=U.useMemo(()=>n||new jHe({collection:g.collection,disabledKeys:u==="selection"?new Set:g.disabledKeys,ref:i,direction:c,collator:l,focusMode:r}),[n,g.collection,g.disabledKeys,u,i,c,l,r]),{collectionProps:h}=wog({ref:i,selectionManager:A,keyboardDelegate:d,isVirtualized:I,scrollRef:C}),m=xh(e.id);w8.set(g,{keyboardDelegate:d,actions:{onRowAction:a,onCellAction:s}});let f=Nog({selectionManager:A,hasItemActions:!!(a||s)}),b=FA(e,{labelable:!0}),p=U.useCallback(G=>{if(A.isFocused){G.currentTarget.contains(G.target)||A.setFocused(!1);return}G.currentTarget.contains(G.target)&&A.setFocused(!0)},[A]),y=U.useMemo(()=>({onBlur:h.onBlur,onFocus:p}),[p,h.onBlur]),Z=gog(i,{isDisabled:g.collection.size!==0}),B=vI(b,{role:"grid",id:m,"aria-multiselectable":A.selectionMode==="multiple"?"true":void 0},g.isKeyboardNavigationDisabled?y:h,g.collection.size===0&&{tabIndex:Z?-1:0},f);return I&&(B["aria-rowcount"]=g.collection.size,B["aria-colcount"]=g.collection.columnCount),Tog({getRowText:o},g),{gridProps:B}}function Yog(){return{rowGroupProps:{role:"rowgroup"}}}function Kog(e,g,i){let{node:I,isVirtualized:n,shouldSelectOnPressUp:r,onAction:C}=e,{actions:{onRowAction:o}}=w8.get(g),{itemProps:a,...s}=QHe({selectionManager:g.selectionManager,key:I.key,ref:i,isVirtualized:n,shouldSelectOnPressUp:r,onAction:o?()=>o(I.key):C,isDisabled:g.collection.size===0}),A=g.selectionManager.isSelected(I.key),l={role:"row","aria-selected":g.selectionManager.selectionMode!=="none"?A:void 0,"aria-disabled":s.isDisabled||void 0,...a};return n&&(l["aria-rowindex"]=I.index+1),{rowProps:l,...s}}function HTe(e,g,i){let{node:I,isVirtualized:n,focusMode:r="child",shouldSelectOnPressUp:C,onAction:o}=e,{direction:a}=vm(),{keyboardDelegate:s,actions:{onCellAction:A}}=w8.get(g),l=U.useRef(null),c=()=>{let p=eo(i.current);if(r==="child"){if(i.current.contains(document.activeElement)&&i.current!==document.activeElement)return;let y=g.selectionManager.childFocusStrategy==="last"?IE(p):p.firstChild();if(y){IC(y);return}}(l.current!=null&&I.key!==l.current||!i.current.contains(document.activeElement))&&IC(i.current)},{itemProps:u,isPressed:d}=QHe({selectionManager:g.selectionManager,key:I.key,ref:i,isVirtualized:n,focus:c,shouldSelectOnPressUp:C,onAction:A?()=>A(I.key):o,isDisabled:g.collection.size===0}),f=vI(u,{role:"gridcell",onKeyDownCapture:p=>{if(!p.currentTarget.contains(p.target)||g.isKeyboardNavigationDisabled)return;let y=eo(i.current);switch(y.currentNode=document.activeElement,p.key){case"ArrowLeft":{let Z=a==="rtl"?y.nextNode():y.previousNode();if(r==="child"&&Z===i.current&&(Z=null),Z)p.preventDefault(),p.stopPropagation(),IC(Z),Ul(Z,{containingElement:Ll(i.current)});else{if(s.getKeyLeftOf(I.key)!==I.key)break;p.preventDefault(),p.stopPropagation(),r==="cell"&&a==="rtl"?(IC(i.current),Ul(i.current,{containingElement:Ll(i.current)})):(y.currentNode=i.current,Z=a==="rtl"?y.firstChild():IE(y),Z&&(IC(Z),Ul(Z,{containingElement:Ll(i.current)})))}break}case"ArrowRight":{let Z=a==="rtl"?y.previousNode():y.nextNode();if(r==="child"&&Z===i.current&&(Z=null),Z)p.preventDefault(),p.stopPropagation(),IC(Z),Ul(Z,{containingElement:Ll(i.current)});else{if(s.getKeyRightOf(I.key)!==I.key)break;p.preventDefault(),p.stopPropagation(),r==="cell"&&a==="ltr"?(IC(i.current),Ul(i.current,{containingElement:Ll(i.current)})):(y.currentNode=i.current,Z=a==="rtl"?IE(y):y.firstChild(),Z&&(IC(Z),Ul(Z,{containingElement:Ll(i.current)})))}break}case"ArrowUp":case"ArrowDown":!p.altKey&&i.current.contains(p.target)&&(p.stopPropagation(),p.preventDefault(),i.current.parentElement.dispatchEvent(new KeyboardEvent(p.nativeEvent.type,p.nativeEvent)));break}},onFocus:p=>{if(l.current=I.key,p.target!==i.current){y8()||g.selectionManager.setFocusedKey(I.key);return}requestAnimationFrame(()=>{r==="child"&&document.activeElement===i.current&&c()})}});var b;return n&&(f["aria-colindex"]=((b=I.colIndex)!==null&&b!==void 0?b:I.index)+1),C&&f.tabIndex!=null&&f.onPointerDown==null&&(f.onPointerDown=p=>{let y=p.currentTarget,Z=y.getAttribute("tabindex");y.removeAttribute("tabindex"),requestAnimationFrame(()=>{y.setAttribute("tabindex",Z)})}),{gridCellProps:f,isPressed:d}}function IE(e){let g,i;do i=e.lastChild(),i&&(g=i);while(i);return g}function Fog(e,g){let{key:i}=e,I=g.selectionManager,n=xh(),r=!g.selectionManager.canSelectItem(i),C=g.selectionManager.isSelected(i),o=()=>I.select(i);const a=py(S8(lY));return{checkboxProps:{id:n,"aria-label":a.format("select"),isSelected:C,isDisabled:r,onChange:o}}}let Dog=!1;function OH(){return Dog}function R8(e){return e&&e.__esModule?e.default:e}const V8=new WeakMap;function E_(e){return typeof e=="string"?e.replace(/\s*/g,""):""+e}function xog(e,g){let i=V8.get(e);if(!i)throw new Error("Unknown grid");return`${i}-${E_(g)}`}function TTe(e,g,i){let I=V8.get(e);if(!I)throw new Error("Unknown grid");return`${I}-${E_(g)}-${E_(i)}`}function NTe(e,g){return[...e.collection.rowHeaderColumnKeys].map(i=>TTe(e,g,i)).join(" ")}var cY={},kTe={};kTe={ascending:"تصاعدي",ascendingSort:e=>`ترتيب حسب العمود ${e.columnName} بترتيب تصاعدي`,columnSize:e=>`${e.value} بالبكسل`,descending:"تنازلي",descendingSort:e=>`ترتيب حسب العمود ${e.columnName} بترتيب تنازلي`,resizerDescription:"اضغط على مفتاح Enter لبدء تغيير الحجم",select:"تحديد",selectAll:"تحديد الكل",sortable:"عمود قابل للترتيب"};var YTe={};YTe={ascending:"възходящ",ascendingSort:e=>`сортирано по колона ${e.columnName} във възходящ ред`,columnSize:e=>`${e.value} пиксела`,descending:"низходящ",descendingSort:e=>`сортирано по колона ${e.columnName} в низходящ ред`,resizerDescription:"Натиснете „Enter“, за да започнете да преоразмерявате",select:"Изберете",selectAll:"Изберете всичко",sortable:"сортираща колона"};var KTe={};KTe={ascending:"vzestupně",ascendingSort:e=>`řazeno vzestupně podle sloupce ${e.columnName}`,columnSize:e=>`${e.value} pixelů`,descending:"sestupně",descendingSort:e=>`řazeno sestupně podle sloupce ${e.columnName}`,resizerDescription:"Stisknutím klávesy Enter začnete měnit velikost",select:"Vybrat",selectAll:"Vybrat vše",sortable:"sloupec s možností řazení"};var FTe={};FTe={ascending:"stigende",ascendingSort:e=>`sorteret efter kolonne ${e.columnName} i stigende rækkefølge`,columnSize:e=>`${e.value} pixels`,descending:"faldende",descendingSort:e=>`sorteret efter kolonne ${e.columnName} i faldende rækkefølge`,resizerDescription:"Tryk på Enter for at ændre størrelse",select:"Vælg",selectAll:"Vælg alle",sortable:"sorterbar kolonne"};var DTe={};DTe={ascending:"aufsteigend",ascendingSort:e=>`sortiert nach Spalte ${e.columnName} in aufsteigender Reihenfolge`,columnSize:e=>`${e.value} Pixel`,descending:"absteigend",descendingSort:e=>`sortiert nach Spalte ${e.columnName} in absteigender Reihenfolge`,resizerDescription:"Eingabetaste zum Starten der Größenänderung drücken",select:"Auswählen",selectAll:"Alles auswählen",sortable:"sortierbare Spalte"};var xTe={};xTe={ascending:"αύξουσα",ascendingSort:e=>`διαλογή ανά στήλη ${e.columnName} σε αύξουσα σειρά`,columnSize:e=>`${e.value} pixel`,descending:"φθίνουσα",descendingSort:e=>`διαλογή ανά στήλη ${e.columnName} σε φθίνουσα σειρά`,resizerDescription:"Πατήστε Enter για έναρξη της αλλαγής μεγέθους",select:"Επιλογή",selectAll:"Επιλογή όλων",sortable:"Στήλη διαλογής"};var ETe={};ETe={select:"Select",selectAll:"Select All",sortable:"sortable column",ascending:"ascending",descending:"descending",ascendingSort:e=>`sorted by column ${e.columnName} in ascending order`,descendingSort:e=>`sorted by column ${e.columnName} in descending order`,columnSize:e=>`${e.value} pixels`,resizerDescription:"Press Enter to start resizing"};var MTe={};MTe={ascending:"de subida",ascendingSort:e=>`ordenado por columna ${e.columnName} en orden de subida`,columnSize:e=>`${e.value} píxeles`,descending:"de bajada",descendingSort:e=>`ordenado por columna ${e.columnName} en orden de bajada`,resizerDescription:"Pulse Intro para empezar a redimensionar",select:"Seleccionar",selectAll:"Seleccionar todos",sortable:"columna ordenable"};var zTe={};zTe={ascending:"tõusev järjestus",ascendingSort:e=>`sorditud veeru järgi ${e.columnName} tõusvas järjestuses`,columnSize:e=>`${e.value} pikslit`,descending:"laskuv järjestus",descendingSort:e=>`sorditud veeru järgi ${e.columnName} laskuvas järjestuses`,resizerDescription:"Suuruse muutmise alustamiseks vajutage klahvi Enter",select:"Vali",selectAll:"Vali kõik",sortable:"sorditav veerg"};var PTe={};PTe={ascending:"nouseva",ascendingSort:e=>`lajiteltu sarakkeen ${e.columnName} mukaan nousevassa järjestyksessä`,columnSize:e=>`${e.value} pikseliä`,descending:"laskeva",descendingSort:e=>`lajiteltu sarakkeen ${e.columnName} mukaan laskevassa järjestyksessä`,resizerDescription:"Aloita koon muutos painamalla Enter-näppäintä",select:"Valitse",selectAll:"Valitse kaikki",sortable:"lajiteltava sarake"};var JTe={};JTe={ascending:"croissant",ascendingSort:e=>`trié en fonction de la colonne ${e.columnName} par ordre croissant`,columnSize:e=>`${e.value} pixels`,descending:"décroissant",descendingSort:e=>`trié en fonction de la colonne ${e.columnName} par ordre décroissant`,resizerDescription:"Appuyez sur Entrée pour commencer le redimensionnement.",select:"Sélectionner",selectAll:"Sélectionner tout",sortable:"colonne triable"};var OTe={};OTe={ascending:"עולה",ascendingSort:e=>`מוין לפי עמודה ${e.columnName} בסדר עולה`,columnSize:e=>`${e.value} פיקסלים`,descending:"יורד",descendingSort:e=>`מוין לפי עמודה ${e.columnName} בסדר יורד`,resizerDescription:"הקש Enter כדי לשנות את הגודל",select:"בחר",selectAll:"בחר הכול",sortable:"עמודה שניתן למיין"};var _Te={};_Te={ascending:"rastući",ascendingSort:e=>`razvrstano po stupcima ${e.columnName} rastućem redoslijedom`,columnSize:e=>`${e.value} piksela`,descending:"padajući",descendingSort:e=>`razvrstano po stupcima ${e.columnName} padajućim redoslijedom`,resizerDescription:"Pritisnite Enter da biste započeli promenu veličine",select:"Odaberite",selectAll:"Odaberite sve",sortable:"stupac koji se može razvrstati"};var LTe={};LTe={ascending:"növekvő",ascendingSort:e=>`rendezve a(z) ${e.columnName} oszlop szerint, növekvő sorrendben`,columnSize:e=>`${e.value} képpont`,descending:"csökkenő",descendingSort:e=>`rendezve a(z) ${e.columnName} oszlop szerint, csökkenő sorrendben`,resizerDescription:"Nyomja le az Enter billentyűt az átméretezés megkezdéséhez",select:"Kijelölés",selectAll:"Összes kijelölése",sortable:"rendezendő oszlop"};var UTe={};UTe={ascending:"crescente",ascendingSort:e=>`in ordine crescente in base alla colonna ${e.columnName}`,columnSize:e=>`${e.value} pixel`,descending:"decrescente",descendingSort:e=>`in ordine decrescente in base alla colonna ${e.columnName}`,resizerDescription:"Premi Invio per iniziare a ridimensionare",select:"Seleziona",selectAll:"Seleziona tutto",sortable:"colonna ordinabile"};var QTe={};QTe={ascending:"昇順",ascendingSort:e=>`列 ${e.columnName} を昇順で並べ替え`,columnSize:e=>`${e.value} ピクセル`,descending:"降順",descendingSort:e=>`列 ${e.columnName} を降順で並べ替え`,resizerDescription:"Enter キーを押してサイズ変更を開始",select:"選択",selectAll:"すべて選択",sortable:"並べ替え可能な列"};var jTe={};jTe={ascending:"오름차순",ascendingSort:e=>`${e.columnName} 열을 기준으로 오름차순으로 정렬됨`,columnSize:e=>`${e.value} 픽셀`,descending:"내림차순",descendingSort:e=>`${e.columnName} 열을 기준으로 내림차순으로 정렬됨`,resizerDescription:"크기 조정을 시작하려면 Enter를 누르세요.",select:"선택",selectAll:"모두 선택",sortable:"정렬 가능한 열"};var $Te={};$Te={ascending:"didėjančia tvarka",ascendingSort:e=>`surikiuota pagal stulpelį ${e.columnName} didėjančia tvarka`,columnSize:e=>`${e.value} piks.`,descending:"mažėjančia tvarka",descendingSort:e=>`surikiuota pagal stulpelį ${e.columnName} mažėjančia tvarka`,resizerDescription:"Paspauskite „Enter“, kad pradėtumėte keisti dydį",select:"Pasirinkti",selectAll:"Pasirinkti viską",sortable:"rikiuojamas stulpelis"};var qTe={};qTe={ascending:"augošā secībā",ascendingSort:e=>`kārtots pēc kolonnas ${e.columnName} augošā secībā`,columnSize:e=>`${e.value} pikseļi`,descending:"dilstošā secībā",descendingSort:e=>`kārtots pēc kolonnas ${e.columnName} dilstošā secībā`,resizerDescription:"Nospiediet Enter, lai sāktu izmēru mainīšanu",select:"Atlasīt",selectAll:"Atlasīt visu",sortable:"kārtojamā kolonna"};var eNe={};eNe={ascending:"stigende",ascendingSort:e=>`sortert etter kolonne ${e.columnName} i stigende rekkefølge`,columnSize:e=>`${e.value} piksler`,descending:"synkende",descendingSort:e=>`sortert etter kolonne ${e.columnName} i synkende rekkefølge`,resizerDescription:"Trykk på Enter for å starte størrelsesendring",select:"Velg",selectAll:"Velg alle",sortable:"kolonne som kan sorteres"};var tNe={};tNe={ascending:"oplopend",ascendingSort:e=>`gesorteerd in oplopende volgorde in kolom ${e.columnName}`,columnSize:e=>`${e.value} pixels`,descending:"aflopend",descendingSort:e=>`gesorteerd in aflopende volgorde in kolom ${e.columnName}`,resizerDescription:"Druk op Enter om het formaat te wijzigen",select:"Selecteren",selectAll:"Alles selecteren",sortable:"sorteerbare kolom"};var gNe={};gNe={ascending:"rosnąco",ascendingSort:e=>`posortowano według kolumny ${e.columnName} w porządku rosnącym`,columnSize:e=>`Liczba pikseli: ${e.value}`,descending:"malejąco",descendingSort:e=>`posortowano według kolumny ${e.columnName} w porządku malejącym`,resizerDescription:"Naciśnij Enter, aby rozpocząć zmienianie rozmiaru",select:"Zaznacz",selectAll:"Zaznacz wszystko",sortable:"kolumna z możliwością sortowania"};var iNe={};iNe={ascending:"crescente",ascendingSort:e=>`classificado pela coluna ${e.columnName} em ordem crescente`,columnSize:e=>`${e.value} pixels`,descending:"decrescente",descendingSort:e=>`classificado pela coluna ${e.columnName} em ordem decrescente`,resizerDescription:"Pressione Enter para começar a redimensionar",select:"Selecionar",selectAll:"Selecionar tudo",sortable:"coluna classificável"};var INe={};INe={ascending:"ascendente",ascendingSort:e=>`Ordenar por coluna ${e.columnName} em ordem ascendente`,columnSize:e=>`${e.value} pixels`,descending:"descendente",descendingSort:e=>`Ordenar por coluna ${e.columnName} em ordem descendente`,resizerDescription:"Prima Enter para iniciar o redimensionamento",select:"Selecionar",selectAll:"Selecionar tudo",sortable:"Coluna ordenável"};var nNe={};nNe={ascending:"crescătoare",ascendingSort:e=>`sortate după coloana ${e.columnName} în ordine crescătoare`,columnSize:e=>`${e.value} pixeli`,descending:"descrescătoare",descendingSort:e=>`sortate după coloana ${e.columnName} în ordine descrescătoare`,resizerDescription:"Apăsați pe Enter pentru a începe redimensionarea",select:"Selectare",selectAll:"Selectare totală",sortable:"coloană sortabilă"};var rNe={};rNe={ascending:"возрастание",ascendingSort:e=>`сортировать столбец ${e.columnName} в порядке возрастания`,columnSize:e=>`${e.value} пикс.`,descending:"убывание",descendingSort:e=>`сортировать столбец ${e.columnName} в порядке убывания`,resizerDescription:"Нажмите клавишу Enter для начала изменения размеров",select:"Выбрать",selectAll:"Выбрать все",sortable:"сортируемый столбец"};var CNe={};CNe={ascending:"vzostupne",ascendingSort:e=>`zoradené zostupne podľa stĺpca ${e.columnName}`,columnSize:e=>`Počet pixelov: ${e.value}`,descending:"zostupne",descendingSort:e=>`zoradené zostupne podľa stĺpca ${e.columnName}`,resizerDescription:"Stlačením klávesu Enter začnete zmenu veľkosti",select:"Vybrať",selectAll:"Vybrať všetko",sortable:"zoraditeľný stĺpec"};var oNe={};oNe={ascending:"naraščajoče",ascendingSort:e=>`razvrščeno po stolpcu ${e.columnName} v naraščajočem vrstnem redu`,columnSize:e=>`${e.value} slikovnih pik`,descending:"padajoče",descendingSort:e=>`razvrščeno po stolpcu ${e.columnName} v padajočem vrstnem redu`,resizerDescription:"Pritisnite tipko Enter da začnete spreminjati velikost",select:"Izberite",selectAll:"Izberite vse",sortable:"razvrstljivi stolpec"};var aNe={};aNe={ascending:"rastući",ascendingSort:e=>`sortirano po kolonama ${e.columnName} rastućim redosledom`,columnSize:e=>`${e.value} piksela`,descending:"padajući",descendingSort:e=>`sortirano po kolonama ${e.columnName} padajućim redosledom`,resizerDescription:"Pritisnite Enter da biste započeli promenu veličine",select:"Izaberite",selectAll:"Izaberite sve",sortable:"kolona koja se može sortirati"};var ANe={};ANe={ascending:"stigande",ascendingSort:e=>`sorterat på kolumn ${e.columnName} i stigande ordning`,columnSize:e=>`${e.value} pixlar`,descending:"fallande",descendingSort:e=>`sorterat på kolumn ${e.columnName} i fallande ordning`,resizerDescription:"Tryck på Retur för att börja ändra storlek",select:"Markera",selectAll:"Markera allt",sortable:"sorterbar kolumn"};var sNe={};sNe={ascending:"artan sırada",ascendingSort:e=>`${e.columnName} sütuna göre artan düzende sırala`,columnSize:e=>`${e.value} piksel`,descending:"azalan sırada",descendingSort:e=>`${e.columnName} sütuna göre azalan düzende sırala`,resizerDescription:"Yeniden boyutlandırmak için Enter'a basın",select:"Seç",selectAll:"Tümünü Seç",sortable:"Sıralanabilir sütun"};var lNe={};lNe={ascending:"висхідний",ascendingSort:e=>`відсортовано за стовпцем ${e.columnName} у висхідному порядку`,columnSize:e=>`${e.value} пікс.`,descending:"низхідний",descendingSort:e=>`відсортовано за стовпцем ${e.columnName} у низхідному порядку`,resizerDescription:"Натисніть Enter, щоб почати зміну розміру",select:"Вибрати",selectAll:"Вибрати все",sortable:"сортувальний стовпець"};var cNe={};cNe={ascending:"升序",ascendingSort:e=>`按列 ${e.columnName} 升序排序`,columnSize:e=>`${e.value} 像素`,descending:"降序",descendingSort:e=>`按列 ${e.columnName} 降序排序`,resizerDescription:"按“输入”键开始调整大小。",select:"选择",selectAll:"全选",sortable:"可排序的列"};var uNe={};uNe={ascending:"遞增",ascendingSort:e=>`已依據「${e.columnName}」欄遞增排序`,columnSize:e=>`${e.value} 像素`,descending:"遞減",descendingSort:e=>`已依據「${e.columnName}」欄遞減排序`,resizerDescription:"按 Enter 鍵以開始調整大小",select:"選取",selectAll:"全選",sortable:"可排序的欄"};cY={"ar-AE":kTe,"bg-BG":YTe,"cs-CZ":KTe,"da-DK":FTe,"de-DE":DTe,"el-GR":xTe,"en-US":ETe,"es-ES":MTe,"et-EE":zTe,"fi-FI":PTe,"fr-FR":JTe,"he-IL":OTe,"hr-HR":_Te,"hu-HU":LTe,"it-IT":UTe,"ja-JP":QTe,"ko-KR":jTe,"lt-LT":$Te,"lv-LV":qTe,"nb-NO":eNe,"nl-NL":tNe,"pl-PL":gNe,"pt-BR":iNe,"pt-PT":INe,"ro-RO":nNe,"ru-RU":rNe,"sk-SK":CNe,"sl-SI":oNe,"sr-SP":aNe,"sv-SE":ANe,"tr-TR":sNe,"uk-UA":lNe,"zh-CN":cNe,"zh-TW":uNe};class Eog extends jHe{isCell(g){return g.type==="cell"||g.type==="rowheader"||g.type==="column"}getKeyBelow(g){let i=this.collection.getItem(g);if(i){if(i.type==="column"){let I=ss(wI(i,this.collection));if(I)return I.key;let n=this.getFirstKey();if(n==null)return;let r=this.collection.getItem(n);return Ql(wI(r,this.collection),i.index).key}return super.getKeyBelow(g)}}getKeyAbove(g){let i=this.collection.getItem(g);if(!i)return;if(i.type==="column"){let n=this.collection.getItem(i.parentKey);return n&&n.type==="column"?n.key:void 0}let I=super.getKeyAbove(g);return I!=null&&this.collection.getItem(I).type!=="headerrow"?I:this.isCell(i)?this.collection.columns[i.index].key:this.collection.columns[0].key}findNextColumnKey(g){let i=this.findNextKey(g.key,n=>n.type==="column");if(i!=null)return i;let I=this.collection.headerRows[g.level];for(let n of wI(I,this.collection))if(n.type==="column")return n.key}findPreviousColumnKey(g){let i=this.findPreviousKey(g.key,r=>r.type==="column");if(i!=null)return i;let I=this.collection.headerRows[g.level],n=[...wI(I,this.collection)];for(let r=n.length-1;r>=0;r--){let C=n[r];if(C.type==="column")return C.key}}getKeyRightOf(g){let i=this.collection.getItem(g);if(i)return i.type==="column"?this.direction==="rtl"?this.findPreviousColumnKey(i):this.findNextColumnKey(i):super.getKeyRightOf(g)}getKeyLeftOf(g){let i=this.collection.getItem(g);if(i)return i.type==="column"?this.direction==="rtl"?this.findNextColumnKey(i):this.findPreviousColumnKey(i):super.getKeyLeftOf(g)}getKeyForSearch(g,i){if(!this.collator)return null;let I=this.collection,n=i??this.getFirstKey();if(n==null)return null;let r=I.getItem(n);r.type==="cell"&&(n=r.parentKey);let C=!1;for(;n!=null;){let o=I.getItem(n);for(let a of wI(o,this.collection)){let s=I.columns[a.index];if(I.rowHeaderColumnKeys.has(s.key)&&a.textValue){let A=a.textValue.slice(0,g.length);if(this.collator.compare(A,g)===0)return(i!=null?I.getItem(i):r).type==="cell"?a.key:o.key}}n=this.getKeyBelow(n),n==null&&!C&&(n=this.getFirstKey(),C=!0)}return null}}function Mog(e,g,i){let{keyboardDelegate:I,isVirtualized:n,layout:r}=e,C=JHe({usage:"search",sensitivity:"base"}),{direction:o}=vm(),a=g.selectionManager.disabledBehavior,s=U.useMemo(()=>I||new Eog({collection:g.collection,disabledKeys:a==="selection"?new Set:g.disabledKeys,ref:i,direction:o,collator:C,layout:r}),[I,g.collection,g.disabledKeys,a,i,o,C,r]),A=xh(e.id);V8.set(g,A);let{gridProps:l}=kog({...e,id:A,keyboardDelegate:s},g,i);n&&(l["aria-rowcount"]=g.collection.size+g.collection.headerRows.length),OH()&&"expandedKeys"in g&&(l.role="treegrid");let{column:c,direction:u}=g.sortDescriptor||{},d=py(R8(cY)),h=U.useMemo(()=>{var f;let b=(f=g.collection.columns.find(p=>p.key===c))===null||f===void 0?void 0:f.textValue;return u&&c?d.format(`${u}Sort`,{columnName:b}):void 0},[u,c,g.collection.columns]),m=aY(h);return HHe(()=>{_He(h,"assertive",500)},[h]),{gridProps:vI(l,m,{"aria-describedby":[m["aria-describedby"],l["aria-describedby"]].filter(Boolean).join(" ")})}}function zog(e,g,i){var I,n;let{node:r}=e,C=r.props.allowsSorting,{gridCellProps:o}=HTe({...e,focusMode:"child"},g,i),a=r.props.isSelectionCell&&g.selectionManager.selectionMode==="single",{pressProps:s}=p8({isDisabled:!C||a,onPress(){g.sort(r.key)},ref:i}),{focusableProps:A}=zHe({},i),l=null,c=((I=g.sortDescriptor)===null||I===void 0?void 0:I.column)===r.key,u=(n=g.sortDescriptor)===null||n===void 0?void 0:n.direction;r.props.allowsSorting&&!xH()&&(l=c?u:"none");let d=py(R8(cY)),h;C&&(h=`${d.format("sortable")}`,c&&u&&xH()&&(h=`${h}, ${d.format(u)}`));let m=aY(h),f=g.collection.size===0;return U.useEffect(()=>{f&&g.selectionManager.focusedKey===r.key&&g.selectionManager.setFocusedKey(null)},[f,g.selectionManager,r.key]),{columnHeaderProps:{...vI(o,s,A,m,f&&{tabIndex:-1}),role:"columnheader",id:xog(g,r.key),"aria-colspan":r.colspan&&r.colspan>1?r.colspan:null,"aria-sort":l}}}const nue={expand:{ltr:"ArrowRight",rtl:"ArrowLeft"},collapse:{ltr:"ArrowLeft",rtl:"ArrowRight"}};function Pog(e,g,i){let{node:I,isVirtualized:n}=e,{rowProps:r,...C}=Kog(e,g,i),{direction:o}=vm();n&&!(OH()&&"expandedKeys"in g)?r["aria-rowindex"]=I.index+1+g.collection.headerRows.length:delete r["aria-rowindex"];let a={};if(OH()&&"expandedKeys"in g){let u=g.keyMap.get(I.key);if(u!=null){var s,A,l;let d=((s=u.props)===null||s===void 0?void 0:s.UNSTABLE_childItems)||((l=u.props)===null||l===void 0||(A=l.children)===null||A===void 0?void 0:A.length)>g.userColumnCount;a={onKeyDown:h=>{(h.key===nue.expand[o]&&g.selectionManager.focusedKey===u.key&&d&&g.expandedKeys!=="all"&&!g.expandedKeys.has(u.key)||h.key===nue.collapse[o]&&g.selectionManager.focusedKey===u.key&&d&&(g.expandedKeys==="all"||g.expandedKeys.has(u.key)))&&(g.toggleKey(u.key),h.stopPropagation())},"aria-expanded":d?g.expandedKeys==="all"||g.expandedKeys.has(I.key):void 0,"aria-level":u.level,"aria-posinset":u.indexOfType+1,"aria-setsize":u.level>1?Zc(g.keyMap.get(u==null?void 0:u.parentKey).childNodes).indexOfType+1:Zc(g.keyMap.get(g.collection.body.key).childNodes).indexOfType+1}}}let c=C.hasAction?lCg(I.props):{};return{rowProps:{...vI(r,a,c),"aria-labelledby":NTe(g,I.key)},...C}}function Jog(e,g,i){let{node:I,isVirtualized:n}=e,r={role:"row"};return n&&!(OH()&&"expandedKeys"in g)&&(r["aria-rowindex"]=I.index+1),{rowProps:r}}function Oog(e,g,i){let{gridCellProps:I,isPressed:n}=HTe(e,g,i),r=e.node.column.key;return g.collection.rowHeaderColumnKeys.has(r)&&(I.role="rowheader",I.id=TTe(g,e.node.parentKey,r)),{gridCellProps:I,isPressed:n}}function _og(e,g){let{key:i}=e;const{checkboxProps:I}=Fog(e,g);return{checkboxProps:{...I,"aria-labelledby":`${I.id} ${NTe(g,i)}`}}}function Log(e){let{isEmpty:g,isSelectAll:i,selectionMode:I}=e.selectionManager;return{checkboxProps:{"aria-label":py(R8(cY)).format(I==="single"?"select":"selectAll"),isSelected:i,isDisabled:I!=="multiple"||e.collection.size===0,isIndeterminate:!g&&!i,onChange:()=>e.selectionManager.toggleSelectAll()}}}function dNe(){return Yog()}var hNe={exports:{}},mNe={};/** * @license React * use-sync-external-store-shim.production.min.js * @@ -1997,7 +1997,7 @@ ${s}`:s,l=Let(o).parse(A,c=>SI(this,_$,f2e).call(this,c,r,I,i));if(C&&((g=l[0])! * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var m0=U;function xog(e,g){return e===g&&(e!==0||1/e===1/g)||e!==e&&g!==g}var Eog=typeof Object.is=="function"?Object.is:xog,Mog=m0.useState,zog=m0.useEffect,Pog=m0.useLayoutEffect,Jog=m0.useDebugValue;function Oog(e,g){var I=g(),i=Mog({inst:{value:I,getSnapshot:g}}),n=i[0].inst,C=i[1];return Pog(function(){n.value=I,n.getSnapshot=g,qx(n)&&C({inst:n})},[e,I,g]),zog(function(){return qx(n)&&C({inst:n}),e(function(){qx(n)&&C({inst:n})})},[e]),Jog(I),I}function qx(e){var g=e.getSnapshot;e=e.value;try{var I=g();return!Eog(e,I)}catch{return!0}}function _og(e,g){return g()}var Log=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?_og:Oog;sNe.useSyncExternalStore=m0.useSyncExternalStore!==void 0?m0.useSyncExternalStore:Log;ANe.exports=sNe;var Uog=ANe.exports;class zo extends Set{constructor(g,I,i){super(g),g instanceof zo?(this.anchorKey=I||g.anchorKey,this.currentKey=i||g.currentKey):(this.anchorKey=I,this.currentKey=i)}}function Qog(e,g){if(e.size!==g.size)return!1;for(let I of e)if(!g.has(I))return!1;return!0}function jog(e){let{selectionMode:g="none",disallowEmptySelection:I,allowDuplicateSelectionEvents:i,selectionBehavior:n="toggle",disabledBehavior:C="all"}=e,r=U.useRef(!1),[,o]=U.useState(!1),a=U.useRef(null),s=U.useRef(null),[,A]=U.useState(null),l=U.useMemo(()=>qce(e.selectedKeys),[e.selectedKeys]),c=U.useMemo(()=>qce(e.defaultSelectedKeys,new zo),[e.defaultSelectedKeys]),[u,d]=pHe(l,c,e.onSelectionChange),h=U.useMemo(()=>e.disabledKeys?new Set(e.disabledKeys):new Set,[e.disabledKeys]),[m,f]=U.useState(n);n==="replace"&&m==="toggle"&&typeof u=="object"&&u.size===0&&f("replace");let b=U.useRef(n);return U.useEffect(()=>{n!==b.current&&(f(n),b.current=n)},[n]),{selectionMode:g,disallowEmptySelection:I,selectionBehavior:m,setSelectionBehavior:f,get isFocused(){return r.current},setFocused(p){r.current=p,o(p)},get focusedKey(){return a.current},get childFocusStrategy(){return s.current},setFocusedKey(p,y="first"){a.current=p,s.current=y,A(p)},selectedKeys:u,setSelectedKeys(p){(i||!Qog(p,u))&&d(p)},disabledKeys:h,disabledBehavior:C}}function qce(e,g){return e?e==="all"?"all":new zo(e):g}class $og{get selectionMode(){return this.state.selectionMode}get disallowEmptySelection(){return this.state.disallowEmptySelection}get selectionBehavior(){return this.state.selectionBehavior}setSelectionBehavior(g){this.state.setSelectionBehavior(g)}get isFocused(){return this.state.isFocused}setFocused(g){this.state.setFocused(g)}get focusedKey(){return this.state.focusedKey}get childFocusStrategy(){return this.state.childFocusStrategy}setFocusedKey(g,I){(g==null||this.collection.getItem(g))&&this.state.setFocusedKey(g,I)}get selectedKeys(){return this.state.selectedKeys==="all"?new Set(this.getSelectAllKeys()):this.state.selectedKeys}get rawSelection(){return this.state.selectedKeys}isSelected(g){return this.state.selectionMode==="none"?!1:(g=this.getKey(g),this.state.selectedKeys==="all"?this.canSelectItem(g):this.state.selectedKeys.has(g))}get isEmpty(){return this.state.selectedKeys!=="all"&&this.state.selectedKeys.size===0}get isSelectAll(){if(this.isEmpty)return!1;if(this.state.selectedKeys==="all")return!0;if(this._isSelectAll!=null)return this._isSelectAll;let g=this.getSelectAllKeys(),I=this.state.selectedKeys;return this._isSelectAll=g.every(i=>I.has(i)),this._isSelectAll}get firstSelectedKey(){let g=null;for(let I of this.state.selectedKeys){let i=this.collection.getItem(I);(!g||i&&jx(this.collection,i,g)<0)&&(g=i)}return g==null?void 0:g.key}get lastSelectedKey(){let g=null;for(let I of this.state.selectedKeys){let i=this.collection.getItem(I);(!g||i&&jx(this.collection,i,g)>0)&&(g=i)}return g==null?void 0:g.key}get disabledKeys(){return this.state.disabledKeys}get disabledBehavior(){return this.state.disabledBehavior}extendSelection(g){if(this.selectionMode==="none")return;if(this.selectionMode==="single"){this.replaceSelection(g);return}g=this.getKey(g);let I;if(this.state.selectedKeys==="all")I=new zo([g],g,g);else{let i=this.state.selectedKeys,n=i.anchorKey||g;I=new zo(i,n,g);for(let C of this.getKeyRange(n,i.currentKey||g))I.delete(C);for(let C of this.getKeyRange(g,n))this.canSelectItem(C)&&I.add(C)}this.state.setSelectedKeys(I)}getKeyRange(g,I){let i=this.collection.getItem(g),n=this.collection.getItem(I);return i&&n?jx(this.collection,i,n)<=0?this.getKeyRangeInternal(g,I):this.getKeyRangeInternal(I,g):[]}getKeyRangeInternal(g,I){let i=[],n=g;for(;n;){let C=this.collection.getItem(n);if((C&&C.type==="item"||C.type==="cell"&&this.allowsCellSelection)&&i.push(n),n===I)return i;n=this.collection.getKeyAfter(n)}return[]}getKey(g){let I=this.collection.getItem(g);if(!I||I.type==="cell"&&this.allowsCellSelection)return g;for(;I.type!=="item"&&I.parentKey!=null;)I=this.collection.getItem(I.parentKey);return!I||I.type!=="item"?null:I.key}toggleSelection(g){if(this.selectionMode==="none")return;if(this.selectionMode==="single"&&!this.isSelected(g)){this.replaceSelection(g);return}if(g=this.getKey(g),g==null)return;let I=new zo(this.state.selectedKeys==="all"?this.getSelectAllKeys():this.state.selectedKeys);I.has(g)?I.delete(g):this.canSelectItem(g)&&(I.add(g),I.anchorKey=g,I.currentKey=g),!(this.disallowEmptySelection&&I.size===0)&&this.state.setSelectedKeys(I)}replaceSelection(g){if(this.selectionMode==="none"||(g=this.getKey(g),g==null))return;let I=this.canSelectItem(g)?new zo([g],g,g):new zo;this.state.setSelectedKeys(I)}setSelectedKeys(g){if(this.selectionMode==="none")return;let I=new zo;for(let i of g)if(i=this.getKey(i),i!=null&&(I.add(i),this.selectionMode==="single"))break;this.state.setSelectedKeys(I)}getSelectAllKeys(){let g=[],I=i=>{for(;i;){if(this.canSelectItem(i)){let n=this.collection.getItem(i);n.type==="item"&&g.push(i),n.hasChildNodes&&(this.allowsCellSelection||n.type!=="item")&&I(As(wi(n,this.collection)).key)}i=this.collection.getKeyAfter(i)}};return I(this.collection.getFirstKey()),g}selectAll(){!this.isSelectAll&&this.selectionMode==="multiple"&&this.state.setSelectedKeys("all")}clearSelection(){!this.disallowEmptySelection&&(this.state.selectedKeys==="all"||this.state.selectedKeys.size>0)&&this.state.setSelectedKeys(new zo)}toggleSelectAll(){this.isSelectAll?this.clearSelection():this.selectAll()}select(g,I){this.selectionMode!=="none"&&(this.selectionMode==="single"?this.isSelected(g)&&!this.disallowEmptySelection?this.toggleSelection(g):this.replaceSelection(g):this.selectionBehavior==="toggle"||I&&(I.pointerType==="touch"||I.pointerType==="virtual")?this.toggleSelection(g):this.replaceSelection(g))}isSelectionEqual(g){if(g===this.state.selectedKeys)return!0;let I=this.selectedKeys;if(g.size!==I.size)return!1;for(let i of g)if(!I.has(i))return!1;for(let i of I)if(!g.has(i))return!1;return!0}canSelectItem(g){if(this.state.selectionMode==="none"||this.state.disabledKeys.has(g))return!1;let I=this.collection.getItem(g);return!(!I||I.type==="cell"&&!this.allowsCellSelection)}isDisabled(g){return this.state.disabledKeys.has(g)&&this.state.disabledBehavior==="all"}isLink(g){var I,i;return!!(!((i=this.collection.getItem(g))===null||i===void 0||(I=i.props)===null||I===void 0)&&I.href)}constructor(g,I,i){this.collection=g,this.state=I;var n;this.allowsCellSelection=(n=i==null?void 0:i.allowsCellSelection)!==null&&n!==void 0?n:!1,this._isSelectAll=null}}function qog(e){let{collection:g,focusMode:I}=e,i=jog(e),n=U.useMemo(()=>e.disabledKeys?new Set(e.disabledKeys):new Set,[e.disabledKeys]),C=i.setFocusedKey;i.setFocusedKey=(a,s)=>{if(I==="cell"&&a!=null){let c=g.getItem(a);if((c==null?void 0:c.type)==="item"){var A,l;let u=wi(c,g);s==="last"?a=(A=yc(u))===null||A===void 0?void 0:A.key:a=(l=As(u))===null||l===void 0?void 0:l.key}}C(a,s)};let r=U.useMemo(()=>new $og(g,i),[g,i]);const o=U.useRef(null);return U.useEffect(()=>{if(i.focusedKey!=null&&!g.getItem(i.focusedKey)){const a=o.current.getItem(i.focusedKey),s=a.parentKey!=null&&(a.type==="cell"||a.type==="rowheader"||a.type==="column")?o.current.getItem(a.parentKey):a,A=o.current.rows,l=g.rows,c=A.length-l.length;let u=Math.min(c>1?Math.max(s.index-c+1,0):s.index,l.length-1),d;for(;u>=0;){if(!r.isDisabled(l[u].key)&&l[u].type!=="headerrow"){d=l[u];break}us.index&&(u=s.index),u--)}if(d){const h=d.hasChildNodes?[...wi(d,g)]:[],m=d.hasChildNodes&&s!==a&&a.index{let r=this.keyMap.get(C.key);g.visitNode&&(C=g.visitNode(C)),this.keyMap.set(C.key,C);let o=new Set,a;for(let s of C.childNodes)s.type==="cell"&&s.parentKey==null&&(s.parentKey=C.key),o.add(s.key),a?(a.nextKey=s.key,s.prevKey=a.key):s.prevKey=null,I(s),a=s;if(a&&(a.nextKey=null),r)for(let s of r.childNodes)o.has(s.key)||i(s)},i=C=>{this.keyMap.delete(C.key);for(let r of C.childNodes)this.keyMap.get(r.key)===r&&i(r)},n;g.items.forEach((C,r)=>{let o={level:0,key:"row-"+r,type:"row",value:void 0,hasChildNodes:!0,childNodes:[...C.childNodes],rendered:void 0,textValue:void 0,...C};n?(n.nextKey=o.key,o.prevKey=n.key):o.prevKey=null,this.rows.push(o),I(o),n=o}),n&&(n.nextKey=null)}}const lNe="row-header-column-"+Math.random().toString(36).slice(2);let Y_="row-header-column-"+Math.random().toString(36).slice(2);for(;lNe===Y_;)Y_="row-header-column-"+Math.random().toString(36).slice(2);function cNe(e,g){if(g.length===0)return[];let I=[],i=new Map;for(let a of g){let s=a.parentKey,A=[a];for(;s;){let l=e.get(s);if(!l)break;if(i.has(l)){l.colspan++;let{column:c,index:u}=i.get(l);if(u>A.length)break;for(let d=u;da.length)),C=Array(n).fill(0).map(()=>[]),r=0;for(let a of I){let s=n-1;for(let A of a){if(A){let l=C[s],c=l.reduce((u,d)=>u+d.colspan,0);if(c0&&(l[l.length-1].nextKey=u.key,u.prevKey=l[l.length-1].key),l.push(u)}l.length>0&&(l[l.length-1].nextKey=A.key,A.prevKey=l[l.length-1].key),A.level=s,A.colIndex=r,l.push(A)}s--}r++}let o=0;for(let a of C){let s=a.reduce((A,l)=>A+l.colspan,0);if(s({type:"headerrow",key:"headerrow-"+s,index:s,value:null,rendered:null,level:0,hasChildNodes:!0,childNodes:a,textValue:null}))}class tag extends eag{*[Symbol.iterator](){yield*this.body.childNodes}get size(){return this._size}getKeys(){return this.keyMap.keys()}getKeyBefore(g){let I=this.keyMap.get(g);return I?I.prevKey:null}getKeyAfter(g){let I=this.keyMap.get(g);return I?I.nextKey:null}getFirstKey(){var g;return(g=As(this.body.childNodes))===null||g===void 0?void 0:g.key}getLastKey(){var g;return(g=yc(this.body.childNodes))===null||g===void 0?void 0:g.key}getItem(g){return this.keyMap.get(g)}at(g){const I=[...this.getKeys()];return this.getItem(I[g])}getTextValue(g){let I=this.getItem(g);if(!I)return"";if(I.textValue)return I.textValue;let i=this.rowHeaderColumnKeys;if(i){let n=[];for(let C of I.childNodes){let r=this.columns[C.index];if(i.has(r.key)&&C.textValue&&n.push(C.textValue),n.length===i.size)break}return n.join(" ")}return""}constructor(g,I,i){let n=new Set,C,r=[];if(i!=null&&i.showSelectionCheckboxes){let l={type:"column",key:lNe,value:null,textValue:"",level:0,index:i!=null&&i.showDragButtons?1:0,hasChildNodes:!1,rendered:null,childNodes:[],props:{isSelectionCell:!0}};r.unshift(l)}if(i!=null&&i.showDragButtons){let l={type:"column",key:Y_,value:null,textValue:"",level:0,index:0,hasChildNodes:!1,rendered:null,childNodes:[],props:{isDragButtonCell:!0}};r.unshift(l)}let o=[],a=new Map,s=l=>{switch(l.type){case"body":C=l;break;case"column":a.set(l.key,l),l.hasChildNodes||(r.push(l),l.props.isRowHeader&&n.add(l.key));break;case"item":o.push(l);return}for(let c of l.childNodes)s(c)};for(let l of g)s(l);let A=cNe(a,r);A.forEach((l,c)=>o.splice(c,0,l)),super({columnCount:r.length,items:o,visitNode:l=>(l.column=r[l.index],l)}),this._size=0,this.columns=r,this.rowHeaderColumnKeys=n,this.body=C,this.headerRows=A,this._size=[...C.childNodes].length,this.rowHeaderColumnKeys.size===0&&(i!=null&&i.showSelectionCheckboxes?i!=null&&i.showDragButtons?this.rowHeaderColumnKeys.add(this.columns[2].key):this.rowHeaderColumnKeys.add(this.columns[1].key):this.rowHeaderColumnKeys.add(this.columns[0].key))}}const gag={ascending:"descending",descending:"ascending"};function Iag(e){let[g,I]=U.useState(!1),{selectionMode:i="none",showSelectionCheckboxes:n,showDragButtons:C}=e,r=U.useMemo(()=>({showSelectionCheckboxes:n&&i!=="none",showDragButtons:C,selectionMode:i,columns:[]}),[e.children,n,i,C]),o=Zog(e,U.useCallback(A=>new tag(A,null,r),[r]),r),{disabledKeys:a,selectionManager:s}=qog({...e,collection:o,disabledBehavior:e.disabledBehavior||"selection"});return{collection:o,disabledKeys:a,selectionManager:s,showSelectionCheckboxes:e.showSelectionCheckboxes||!1,sortDescriptor:e.sortDescriptor,isKeyboardNavigationDisabled:o.size===0||g,setKeyboardNavigationDisabled:I,sort(A,l){var c;e.onSortChange({column:A,direction:l??(((c=e.sortDescriptor)===null||c===void 0?void 0:c.column)===A?gag[e.sortDescriptor.direction]:"ascending")})}}}class dS{get childNodes(){throw new Error("childNodes is not supported")}clone(){let g=new dS(this.type,this.key);return g.value=this.value,g.level=this.level,g.hasChildNodes=this.hasChildNodes,g.rendered=this.rendered,g.textValue=this.textValue,g["aria-label"]=this["aria-label"],g.index=this.index,g.parentKey=this.parentKey,g.prevKey=this.prevKey,g.nextKey=this.nextKey,g.firstChildKey=this.firstChildKey,g.lastChildKey=this.lastChildKey,g.props=this.props,g}constructor(g,I){this.value=null,this.level=0,this.hasChildNodes=!1,this.rendered=null,this.textValue="",this["aria-label"]=void 0,this.index=0,this.parentKey=null,this.prevKey=null,this.nextKey=null,this.firstChildKey=null,this.lastChildKey=null,this.props={},this.type=g,this.key=I}}class uNe{*[Symbol.iterator](){let g=this.firstChild;for(;g;)yield g,g=g.nextSibling}get firstChild(){return this._firstChild}set firstChild(g){this._firstChild=g,this.ownerDocument.markDirty(this)}get lastChild(){return this._lastChild}set lastChild(g){this._lastChild=g,this.ownerDocument.markDirty(this)}get previousSibling(){return this._previousSibling}set previousSibling(g){this._previousSibling=g,this.ownerDocument.markDirty(this)}get nextSibling(){return this._nextSibling}set nextSibling(g){this._nextSibling=g,this.ownerDocument.markDirty(this)}get parentNode(){return this._parentNode}set parentNode(g){this._parentNode=g,this.ownerDocument.markDirty(this)}appendChild(g){this.ownerDocument.startTransaction(),g.parentNode&&g.parentNode.removeChild(g),this.firstChild==null&&(this.firstChild=g),this.lastChild?(this.lastChild.nextSibling=g,g.index=this.lastChild.index+1,g.previousSibling=this.lastChild):(g.previousSibling=null,g.index=0),g.parentNode=this,g.nextSibling=null,this.lastChild=g,this.ownerDocument.markDirty(this),g.hasSetProps&&this.ownerDocument.addNode(g),this.ownerDocument.endTransaction(),this.ownerDocument.queueUpdate()}insertBefore(g,I){if(I==null)return this.appendChild(g);this.ownerDocument.startTransaction(),g.parentNode&&g.parentNode.removeChild(g),g.nextSibling=I,g.previousSibling=I.previousSibling,g.index=I.index,this.firstChild===I?this.firstChild=g:I.previousSibling&&(I.previousSibling.nextSibling=g),I.previousSibling=g,g.parentNode=I.parentNode;let i=I;for(;i;)i.index++,i=i.nextSibling;g.hasSetProps&&this.ownerDocument.addNode(g),this.ownerDocument.endTransaction(),this.ownerDocument.queueUpdate()}removeChild(g){if(g.parentNode!==this)return;this.ownerDocument.startTransaction();let I=g.nextSibling;for(;I;)I.index--,I=I.nextSibling;g.nextSibling&&(g.nextSibling.previousSibling=g.previousSibling),g.previousSibling&&(g.previousSibling.nextSibling=g.nextSibling),this.firstChild===g&&(this.firstChild=g.nextSibling),this.lastChild===g&&(this.lastChild=g.previousSibling),g.parentNode=null,g.nextSibling=null,g.previousSibling=null,g.index=0,this.ownerDocument.removeNode(g),this.ownerDocument.endTransaction(),this.ownerDocument.queueUpdate()}addEventListener(){}removeEventListener(){}constructor(g){this._firstChild=null,this._lastChild=null,this._previousSibling=null,this._nextSibling=null,this._parentNode=null,this.ownerDocument=g}}class hS extends uNe{get index(){return this._index}set index(g){this._index=g,this.ownerDocument.markDirty(this)}get level(){return this.parentNode instanceof hS?this.parentNode.level+(this.node.type==="item"?1:0):0}updateNode(){var g,I,i,n;let C=this.ownerDocument.getMutableNode(this);C.index=this.index,C.level=this.level,C.parentKey=this.parentNode instanceof hS?this.parentNode.node.key:null;var r;C.prevKey=(r=(g=this.previousSibling)===null||g===void 0?void 0:g.node.key)!==null&&r!==void 0?r:null;var o;C.nextKey=(o=(I=this.nextSibling)===null||I===void 0?void 0:I.node.key)!==null&&o!==void 0?o:null,C.hasChildNodes=!!this.firstChild;var a;C.firstChildKey=(a=(i=this.firstChild)===null||i===void 0?void 0:i.node.key)!==null&&a!==void 0?a:null;var s;C.lastChildKey=(s=(n=this.lastChild)===null||n===void 0?void 0:n.node.key)!==null&&s!==void 0?s:null}setProps(g,I,i){let n=this.ownerDocument.getMutableNode(this),{value:C,textValue:r,id:o,...a}=g;if(a.ref=I,n.props=a,n.rendered=i,n.value=C,n.textValue=r||(typeof i=="string"?i:"")||g["aria-label"]||"",o!=null&&o!==n.key){if(this.hasSetProps)throw new Error("Cannot change the id of an item");n.key=o}this.hasSetProps||(this.ownerDocument.addNode(this),this.ownerDocument.endTransaction(),this.hasSetProps=!0),this.ownerDocument.queueUpdate()}get style(){return{}}hasAttribute(){}setAttribute(){}setAttributeNS(){}removeAttribute(){}constructor(g,I){super(I),this.nodeType=8,this._index=0,this.hasSetProps=!1,this.node=new dS(g,`react-aria-${++I.nodeId}`),this.ownerDocument.startTransaction()}}class dNe{get size(){return this.keyMap.size}getKeys(){return this.keyMap.keys()}*[Symbol.iterator](){let g=this.firstKey!=null?this.keyMap.get(this.firstKey):void 0;for(;g;)yield g,g=g.nextKey!=null?this.keyMap.get(g.nextKey):void 0}getChildren(g){let I=this.keyMap;return{*[Symbol.iterator](){let i=I.get(g),n=(i==null?void 0:i.firstChildKey)!=null?I.get(i.firstChildKey):null;for(;n;)yield n,n=n.nextKey!=null?I.get(n.nextKey):void 0}}}getKeyBefore(g){let I=this.keyMap.get(g);if(!I)return null;if(I.prevKey!=null){for(I=this.keyMap.get(I.prevKey);I&&I.type!=="item"&&I.lastChildKey!=null;)I=this.keyMap.get(I.lastChildKey);var i;return(i=I==null?void 0:I.key)!==null&&i!==void 0?i:null}return I.parentKey}getKeyAfter(g){let I=this.keyMap.get(g);if(!I)return null;if(I.type!=="item"&&I.firstChildKey!=null)return I.firstChildKey;for(;I;){if(I.nextKey!=null)return I.nextKey;if(I.parentKey!=null)I=this.keyMap.get(I.parentKey);else return null}return null}getFirstKey(){return this.firstKey}getLastKey(){let g=this.lastKey!=null?this.keyMap.get(this.lastKey):null;for(;(g==null?void 0:g.lastChildKey)!=null;)g=this.keyMap.get(g.lastChildKey);var I;return(I=g==null?void 0:g.key)!==null&&I!==void 0?I:null}getItem(g){var I;return(I=this.keyMap.get(g))!==null&&I!==void 0?I:null}at(){throw new Error("Not implemented")}clone(){let g=this.constructor,I=new g;return I.keyMap=new Map(this.keyMap),I.firstKey=this.firstKey,I.lastKey=this.lastKey,I}addNode(g){if(this.frozen)throw new Error("Cannot add a node to a frozen collection");this.keyMap.set(g.key,g)}removeNode(g){if(this.frozen)throw new Error("Cannot remove a node to a frozen collection");this.keyMap.delete(g)}commit(g,I,i=!1){if(this.frozen)throw new Error("Cannot commit a frozen collection");this.firstKey=g,this.lastKey=I,this.frozen=!i}constructor(){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.frozen=!1}}class iag extends uNe{createElement(g){return new hS(g,this)}getMutableNode(g){let I=g.node;return this.mutatedNodes.has(g)||(I=g.node.clone(),this.mutatedNodes.add(g),g.node=I),this.markDirty(g),I}getMutableCollection(){return!this.isSSR&&!this.collectionMutated&&(this.collection=this.collection.clone(),this.collectionMutated=!0),this.collection}markDirty(g){this.dirtyNodes.add(g)}startTransaction(){this.transactionCount++}endTransaction(){this.transactionCount--}addNode(g){let I=this.getMutableCollection();if(!I.getItem(g.node.key)){I.addNode(g.node);for(let i of g)this.addNode(i)}this.markDirty(g)}removeNode(g){for(let i of g)i.parentNode=null,this.removeNode(i);this.getMutableCollection().removeNode(g.node.key),this.markDirty(g)}getCollection(){return this.transactionCount>0?this.collection:(this.updateCollection(),this.collection)}updateCollection(){for(let C of this.dirtyNodes)C instanceof hS&&C.parentNode&&C.updateNode();if(this.dirtyNodes.clear(),this.mutatedNodes.size){var g,I;let C=this.getMutableCollection();for(let r of this.mutatedNodes)r.parentNode&&C.addNode(r.node);var i,n;C.commit((i=(g=this.firstChild)===null||g===void 0?void 0:g.node.key)!==null&&i!==void 0?i:null,(n=(I=this.lastChild)===null||I===void 0?void 0:I.node.key)!==null&&n!==void 0?n:null,this.isSSR),this.mutatedNodes.clear()}this.collectionMutated=!1}queueUpdate(){if(!(this.dirtyNodes.size===0||this.transactionCount>0))for(let g of this.subscriptions)g()}subscribe(g){return this.subscriptions.add(g),()=>this.subscriptions.delete(g)}resetAfterSSR(){this.isSSR&&(this.isSSR=!1,this.firstChild=null,this.lastChild=null,this.nodeId=0)}constructor(g){super(null),this.nodeType=11,this.ownerDocument=this,this.dirtyNodes=new Set,this.isSSR=!1,this.nodeId=0,this.nodesByProps=new WeakMap,this.mutatedNodes=new Set,this.subscriptions=new Set,this.transactionCount=0,this.collection=g,this.collectionMutated=!0}}function Ew(e){let{children:g,items:I,idScope:i,addIdAndValue:n}=e,C=U.useMemo(()=>new WeakMap,[]);return U.useMemo(()=>{if(I&&typeof g=="function"){let a=[];for(let s of I){let A=C.get(s);if(!A){if(A=g(s),A.key==null){var r,o;let l=(o=(r=A.props.id)!==null&&r!==void 0?r:s.key)!==null&&o!==void 0?o:s.id;if(l==null)throw new Error("Could not determine key for item");i&&(l=i+":"+l),A=U.cloneElement(A,n?{key:l,id:l,value:s}:{key:l})}C.set(s,A)}a.push(A)}return a}else if(typeof g!="function")return g},[g,I,C,i,n])}function Mw(e){return Ew({...e,addIdAndValue:!0})}const nag=U.createContext(!1);function Cag(e,g){let{collection:I,document:i}=aag(g);return{portal:sag(e,i),collection:I}}function rag(e,g,I){let i=Dw(),n=U.useRef(i);n.current=i;let C=U.useCallback(()=>n.current?I():g(),[g,I]);return Uog.useSyncExternalStore(e,C)}const oag=typeof N.useSyncExternalStore=="function"?N.useSyncExternalStore:rag;function aag(e){let g=U.useMemo(()=>new iag(e||new dNe),[e]),I=U.useCallback(r=>g.subscribe(r),[g]),i=U.useCallback(()=>{let r=g.getCollection();return g.isSSR&&g.resetAfterSSR(),r},[g]),n=U.useCallback(()=>(g.isSSR=!0,g.getCollection()),[g]);return{collection:oag(I,i,n),document:g}}const K_=U.createContext(null),Aag=U.createContext(null);function sag(e,g){let I=U.useContext(Aag),i=g??I,n=Mw(e),C=U.useMemo(()=>N.createElement(nag.Provider,{value:!0},n),[n]);return Dw()?N.createElement(K_.Provider,{value:i},C):sa.createPortal(C,i)}function lag(e,g,I){return U.useCallback(i=>{i==null||i.setProps(e,g,I)},[e,g,I])}function zw(e,g,I,i,n){let C=lag(g,I,i),r=U.useContext(K_);if(r){let o=r.ownerDocument.nodesByProps.get(g);return o||(o=r.ownerDocument.createElement(e),o.setProps(g,I,i),r.appendChild(o),r.ownerDocument.updateCollection(),r.ownerDocument.nodesByProps.set(g,o)),n?N.createElement(K_.Provider,{value:o},n):null}return N.createElement(e,{ref:C},n)}const cag=U.createContext(null),hNe=U.createContext(null),uag=Symbol("callback"),F_=Symbol("default");function oY({values:e,children:g}){for(let[I,i]of e)g=N.createElement(I.Provider,{value:i},g);return g}function vm(e){let{className:g,style:I,children:i,defaultClassName:n,defaultChildren:C,values:r}=e;return U.useMemo(()=>{let o,a,s;return typeof g=="function"?o=g(r):o=g,typeof I=="function"?a=I(r):a=I,typeof i=="function"?s=i(r):i==null?s=C:s=i,{className:o??n,style:a,children:s,"data-rac":""}},[g,I,i,n,C,r])}function dag(e,g){let I=U.useContext(e);if(g===null)return null;if(I&&typeof I=="object"&&"slots"in I&&I.slots){if(!g&&!I.slots[F_])throw new Error("A slot prop is required");let i=g||F_;if(!I.slots[i])throw new Error(`Invalid slot "${g}". Valid slot names are `+new Intl.ListFormat().format(Object.keys(I.slots).map(n=>`"${n}"`))+".");return I.slots[i]}return I}function mNe(e,g,I){let i=dag(I,e.slot)||{},{ref:n,[uag]:C,...r}=i,o=xw(U.useMemo(()=>ECg(g,n),[g,n])),a=Gi(r,e);return U.useEffect(()=>{C&&C(e)},[C,e]),[a,o]}function hag(){let[e,g]=U.useState(!0),I=U.useRef(!1),i=U.useCallback(n=>{I.current=!0,g(!!n)},[]);return bi(()=>{I.current||g(!1)},[]),[i,e]}if(typeof HTMLTemplateElement<"u"){const e=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild").get;Object.defineProperty(HTMLTemplateElement.prototype,"firstChild",{configurable:!0,enumerable:!0,get:function(){return this.dataset.reactAriaHidden?this.content.firstChild:e.call(this)}})}typeof DocumentFragment<"u"&&new DocumentFragment;function mag(e){const g=/^(data-.*)$/;let I={};for(const i in e)g.test(i)||(I[i]=e[i]);return I}const fag=U.createContext({}),pag=U.createContext({}),bag=U.createContext({}),fNe=U.createContext(null),yag=U.createContext({}),pNe=U.createContext(null);function Zag(e,g){let{render:I}=U.useContext(pNe);return N.createElement(N.Fragment,null,I(e,g))}const Gag=U.forwardRef(Zag),Pw=U.createContext({});JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"حدد عنصرًا","tableResizer":"أداة تغيير الحجم"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Изберете предмет","tableResizer":"Преоразмерител"}');JSON.parse('{"dropzoneLabel":"Místo pro přetažení","selectPlaceholder":"Vyberte položku","tableResizer":"Změna velikosti"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Vælg et element","tableResizer":"Størrelsesændring"}');JSON.parse('{"dropzoneLabel":"Ablegebereich","selectPlaceholder":"Element wählen","tableResizer":"Größenanpassung"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Επιλέξτε ένα αντικείμενο","tableResizer":"Αλλαγή μεγέθους"}');JSON.parse('{"selectPlaceholder":"Select an item","tableResizer":"Resizer","dropzoneLabel":"DropZone"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Seleccionar un artículo","tableResizer":"Cambiador de tamaño"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Valige üksus","tableResizer":"Suuruse muutja"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Valitse kohde","tableResizer":"Koon muuttaja"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Sélectionner un élément","tableResizer":"Redimensionneur"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"בחר פריט","tableResizer":"שינוי גודל"}');JSON.parse('{"dropzoneLabel":"Zona spuštanja","selectPlaceholder":"Odaberite stavku","tableResizer":"Promjena veličine"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Válasszon ki egy elemet","tableResizer":"Átméretező"}');JSON.parse('{"dropzoneLabel":"Zona di rilascio","selectPlaceholder":"Seleziona un elemento","tableResizer":"Ridimensionamento"}');JSON.parse('{"dropzoneLabel":"ドロップゾーン","selectPlaceholder":"項目を選択","tableResizer":"サイズ変更ツール"}');JSON.parse('{"dropzoneLabel":"드롭 영역","selectPlaceholder":"항목 선택","tableResizer":"크기 조정기"}');JSON.parse('{"dropzoneLabel":"„DropZone“","selectPlaceholder":"Pasirinkite elementą","tableResizer":"Dydžio keitiklis"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Izvēlēties vienumu","tableResizer":"Izmēra mainītājs"}');JSON.parse('{"dropzoneLabel":"Droppsone","selectPlaceholder":"Velg et element","tableResizer":"Størrelsesendrer"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Selecteer een item","tableResizer":"Resizer"}');JSON.parse('{"dropzoneLabel":"Strefa upuszczania","selectPlaceholder":"Wybierz element","tableResizer":"Zmiana rozmiaru"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Selecione um item","tableResizer":"Redimensionador"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Selecione um item","tableResizer":"Redimensionador"}');JSON.parse('{"dropzoneLabel":"Zonă de plasare","selectPlaceholder":"Selectați un element","tableResizer":"Instrument de redimensionare"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Выберите элемент","tableResizer":"Средство изменения размера"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Vyberte položku","tableResizer":"Nástroj na zmenu veľkosti"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Izberite element","tableResizer":"Spreminjanje velikosti"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Izaberite stavku","tableResizer":"Promena veličine"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Välj en artikel","tableResizer":"Storleksändrare"}');JSON.parse('{"dropzoneLabel":"Bırakma Bölgesi","selectPlaceholder":"Bir öğe seçin","tableResizer":"Yeniden boyutlandırıcı"}');JSON.parse('{"dropzoneLabel":"DropZone","selectPlaceholder":"Виберіть елемент","tableResizer":"Засіб змінення розміру"}');JSON.parse('{"dropzoneLabel":"放置区域","selectPlaceholder":"选择一个项目","tableResizer":"尺寸调整器"}');JSON.parse('{"dropzoneLabel":"放置區","selectPlaceholder":"選取項目","tableResizer":"大小調整器"}');class vag extends dNe{addNode(g){super.addNode(g),this.columnsDirty||(this.columnsDirty=g.type==="column"),g.type==="tableheader"&&(this.head=g),g.type==="tablebody"&&(this.body=g)}commit(g,I,i=!1){this.updateColumns(i),super.commit(g,I,i)}updateColumns(g){if(!this.columnsDirty)return;this.rowHeaderColumnKeys=new Set,this.columns=[];let I=new Map,i=n=>{switch(n.type){case"column":I.set(n.key,n),n.hasChildNodes||(n.index=this.columns.length,this.columns.push(n),n.props.isRowHeader&&this.rowHeaderColumnKeys.add(n.key));break}for(let C of this.getChildren(n.key))i(C)};for(let n of this.getChildren(this.head.key))i(n);if(this.headerRows=cNe(I,this.columns),this.columnsDirty=!1,this.rowHeaderColumnKeys.size===0&&this.columns.length>0&&!g)throw new Error("A table must have at least one Column with the isRowHeader prop set to true")}get columnCount(){return this.columns.length}get rows(){return[...this.getChildren(this.body.key)]}*[Symbol.iterator](){yield*this.getChildren(this.body.key)}get size(){return[...this.getChildren(this.body.key)].length}getFirstKey(){var g;return(g=[...this.getChildren(this.body.key)][0])===null||g===void 0?void 0:g.key}getLastKey(){var g;let I=[...this.getChildren(this.body.key)];return(g=I[I.length-1])===null||g===void 0?void 0:g.key}getKeyAfter(g){let I=this.getItem(g);var i;return(I==null?void 0:I.type)==="column"?(i=I.nextKey)!==null&&i!==void 0?i:null:super.getKeyAfter(g)}getKeyBefore(g){var I;let i=this.getItem(g);var n;if((i==null?void 0:i.type)==="column")return(n=i.prevKey)!==null&&n!==void 0?n:null;let C=super.getKeyBefore(g);return C!=null&&((I=this.getItem(C))===null||I===void 0?void 0:I.type)==="tablebody"?null:C}getChildren(g){if(!this.getItem(g)){for(let I of this.headerRows)if(I.key===g)return I.childNodes}return super.getChildren(g)}clone(){let g=super.clone();return g.headerRows=this.headerRows,g.columns=this.columns,g.rowHeaderColumnKeys=this.rowHeaderColumnKeys,g.head=this.head,g.body=this.body,g}getTextValue(g){let I=this.getItem(g);if(!I)return"";if(I.textValue)return I.textValue;let i=this.rowHeaderColumnKeys,n=[];for(let C of this.getChildren(g)){let r=this.columns[C.index];if(i.has(r.key)&&C.textValue&&n.push(C.textValue),n.length===i.size)break}return n.join(" ")}constructor(...g){super(...g),this.headerRows=[],this.columns=[],this.rowHeaderColumnKeys=new Set,this.head=new dS("tableheader",-1),this.body=new dS("tablebody",-2),this.columnsDirty=!0}}const Bag=U.createContext(null),Sag=U.createContext(null),Bm=U.createContext(null),bNe=U.createContext(null);function wag(e,g){[e,g]=mNe(e,g,Sag);let I=U.useMemo(()=>new vag,[]),{portal:i,collection:n}=Cag(e,I),C=Iag({...e,collection:n,children:void 0}),{gridProps:r}=Tog(e,C,g),{dragAndDropHooks:o}=e,a=C.selectionManager,s=!!(o!=null&&o.useDraggableCollectionState),A=!!(o!=null&&o.useDroppableCollectionState),l=U.useRef(s),c=U.useRef(A);U.useEffect(()=>{l.current!==s&&console.warn("Drag hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior."),c.current!==A&&console.warn("Drop hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.")},[s,A]);let u,d,h,m=!1,f=null,b=U.useRef(null);if(s&&o){u=o.useDraggableCollectionState({collection:n,selectionManager:a,preview:o.renderDragPreview?b:void 0}),o.useDraggableCollection({},u,g);let V=o.DragPreview;f=o.renderDragPreview?N.createElement(V,{ref:b},o.renderDragPreview):null}if(A&&o){d=o.useDroppableCollectionState({collection:n,selectionManager:a});let V=new pog(n,a.disabledBehavior==="selection"?new Set:a.disabledKeys,g),H=o.dropTargetDelegate||new o.ListDropTargetDelegate(n,g);h=o.useDroppableCollection({keyboardDelegate:V,dropTargetDelegate:H},d,g),m=d.isDropTarget({type:"root"})}let{focusProps:p,isFocused:y,isFocusVisible:Z}=nY(),B=vm({className:e.className,style:e.style,defaultClassName:"react-aria-Table",values:{isDropTarget:m,isFocused:y,isFocusVisible:Z,state:C}}),{selectionBehavior:G,selectionMode:v,disallowEmptySelection:w}=C.selectionManager,R=U.useMemo(()=>({selectionBehavior:v==="none"?null:G,selectionMode:v,disallowEmptySelection:w,allowsDragging:s}),[G,v,w,s]),S=B.style,X=U.useContext(Bag),W=null;return X&&(W=X.useTableColumnResizeState({tableWidth:X.tableWidth},C),S={...S,tableLayout:"fixed",width:"fit-content"}),N.createElement(N.Fragment,null,N.createElement(Vag.Provider,{value:R},i),N.createElement(oY,{values:[[Bm,C],[bNe,W],[Pw,{dragAndDropHooks:o,dragState:u,dropState:d}],[pNe,{render:_ag}]]},N.createElement(Yrg,null,N.createElement("table",{...KA(e),...B,...Gi(r,p,h==null?void 0:h.collectionProps),style:S,ref:g,slot:e.slot||void 0,"data-allows-dragging":s||void 0,"data-drop-target":m||void 0,"data-focused":y||void 0,"data-focus-visible":Z||void 0},N.createElement(xag,{collection:n}),N.createElement(Eag,{collection:n,isDroppable:A}))),f))}const Rag=U.forwardRef(wag),Vag=U.createContext(null);function Wag(e,g){let I=Mw({children:e.children,items:e.columns}),i=typeof e.children=="function"?e.children:null;return N.createElement(hNe.Provider,{value:i},zw("tableheader",e,g,null,I))}const Xag=U.forwardRef(Wag);function Hag(e,g){let I=U.useContext(hNe),i;typeof I=="function"?i=I:typeof e.children!="function"&&(i=e.children);let n=Mw({children:e.title||e.childColumns?i:null,items:e.childColumns});var C;return zw("column",e,g,(C=e.title)!==null&&C!==void 0?C:e.children,n)}const Tag=U.forwardRef(Hag);function Nag(e,g){let I=Mw(e);return zw("tablebody",e,g,null,I)}const kag=U.forwardRef(Nag);function Yag(e,g){let I=Mw({children:e.children,items:e.columns,idScope:e.id}),i=U.useMemo(()=>({idScope:e.id}),[e.id]);return zw("item",e,g,null,N.createElement(cag.Provider,{value:i},I))}const Kag=U.forwardRef(Yag);function Fag(e,g){return zw("cell",e,g,e.children)}const Dag=U.forwardRef(Fag);function xag({collection:e}){let g=Ew({items:e.headerRows,children:U.useCallback(n=>{switch(n.type){case"headerrow":return N.createElement(Mag,{item:n});default:throw new Error("Unsupported node type in TableHeader: "+n.type)}},[])}),{rowGroupProps:I}=aNe();var i;return N.createElement("thead",{...KA(e.head.props),...I,ref:e.head.props.ref,className:(i=e.head.props.className)!==null&&i!==void 0?i:"react-aria-TableHeader",style:e.head.props.style},g)}function Eag({collection:e,isDroppable:g}){let I=Ew({items:e.rows,children:U.useCallback(o=>{switch(o.type){case"item":return N.createElement(Jag,{item:o});default:throw new Error("Unsupported node type in TableBody: "+o.type)}},[])}),i=e.body.props,n=vm({...i,id:void 0,children:void 0,defaultClassName:"react-aria-TableBody",values:{isEmpty:e.size===0}}),C;e.size===0&&i.renderEmptyState&&(C=N.createElement("tr",{role:"row"},N.createElement("td",{role:"gridcell",colSpan:e.columnCount},i.renderEmptyState())));let{rowGroupProps:r}=aNe();return N.createElement("tbody",{...Gi(KA(i),r),...n,ref:e.body.props.ref,"data-empty":e.size===0||void 0},g&&N.createElement(Qag,null),I,C)}function Mag({item:e}){let g=U.useRef(null),I=U.useContext(Bm),{rowProps:i}=Yog({node:e},I,g),{checkboxProps:n}=Dog(I),C=Ew({items:I.collection.getChildren(e.key),children:r=>{switch(r.type){case"column":return N.createElement(Pag,{column:r});default:throw new Error("Unsupported node type in Row: "+r.type)}}});return N.createElement("tr",{...i,ref:g},N.createElement(oY,{values:[[fNe,{slots:{selection:n}}]]},C))}const zag=U.createContext(null);function Pag({column:e}){var g,I;let i=xw(e.props.ref),n=U.useContext(Bm),{columnHeaderProps:C}=Nog({node:e},n,i),{isFocused:r,isFocusVisible:o,focusProps:a}=nY(),{hoverProps:s,isHovered:A}=h8({}),l=U.useContext(bNe),c=!1;if(l)c=l.resizingColumn===e.key;else for(let m in["width","defaultWidth","minWidth","maxWidth"])m in e.props&&console.warn(`The ${m} prop on a only applies when a is wrapped in a . If you aren't using column resizing, you can set the width of a column with CSS.`);let u=e.props,d=vm({...u,id:void 0,children:e.rendered,defaultClassName:"react-aria-Column",values:{isHovered:A,isFocused:r,isFocusVisible:o,allowsSorting:e.props.allowsSorting,sortDirection:((g=n.sortDescriptor)===null||g===void 0?void 0:g.column)===e.key?n.sortDescriptor.direction:void 0,isResizing:c,startResize:()=>{if(l)l.startResize(e.key),n.setKeyboardNavigationDisabled(!0);else throw new Error("Wrap your
in a to enable column resizing")},sort:m=>{n.sort(e.key,m)}}}),h=d.style;return l&&(h={...h,width:l.getColumnWidth(e.key)}),N.createElement("th",{...Gi(KA(u),C,a,s),...d,style:h,colSpan:e.colspan,ref:i,"data-focused":r||void 0,"data-focus-visible":o||void 0,"data-resizing":c||void 0,"data-allows-sorting":e.props.allowsSorting||void 0,"data-sort-direction":((I=n.sortDescriptor)===null||I===void 0?void 0:I.column)===e.key?n.sortDescriptor.direction:void 0},N.createElement(zag.Provider,{value:{column:e,triggerRef:i}},d.children))}function Jag({item:e}){let g=xw(e.props.ref),I=U.useContext(Bm),{dragAndDropHooks:i,dragState:n,dropState:C}=U.useContext(Pw),{rowProps:r,...o}=kog({node:e,shouldSelectOnPressUp:!!n},I,g),{isFocused:a,isFocusVisible:s,focusProps:A}=nY(),{hoverProps:l,isHovered:c}=h8({isDisabled:!o.allowsSelection&&!o.hasAction}),{checkboxProps:u}=Fog({key:e.key},I),d;n&&i&&(d=i.useDraggableItem({key:e.key,hasDragButton:!0},n));let h,m=U.useRef(null),{visuallyHiddenProps:f}=p8();C&&i&&(h=i.useDropIndicator({target:{type:"item",key:e.key,dropPosition:"on"}},C,m));let b=(i==null?void 0:i.renderDropIndicator)||(v=>N.createElement(Gag,{target:v})),p=U.useRef(null);U.useEffect(()=>{n&&!p.current&&console.warn('Draggable items in a Table must contain a
is wrapped in a . If you aren't using column resizing, you can set the width of a column with CSS.`);let u=e.props,d=Bm({...u,id:void 0,children:e.rendered,defaultClassName:"react-aria-Column",values:{isHovered:A,isFocused:C,isFocusVisible:o,allowsSorting:e.props.allowsSorting,sortDirection:((g=n.sortDescriptor)===null||g===void 0?void 0:g.column)===e.key?n.sortDescriptor.direction:void 0,isResizing:c,startResize:()=>{if(l)l.startResize(e.key),n.setKeyboardNavigationDisabled(!0);else throw new Error("Wrap your
in a to enable column resizing")},sort:m=>{n.sort(e.key,m)}}}),h=d.style;return l&&(h={...h,width:l.getColumnWidth(e.key)}),N.createElement("th",{...vI(FA(u),r,a,s),...d,style:h,colSpan:e.colspan,ref:I,"data-focused":C||void 0,"data-focus-visible":o||void 0,"data-resizing":c||void 0,"data-allows-sorting":e.props.allowsSorting||void 0,"data-sort-direction":((i=n.sortDescriptor)===null||i===void 0?void 0:i.column)===e.key?n.sortDescriptor.direction:void 0},N.createElement($ag.Provider,{value:{column:e,triggerRef:I}},d.children))}function eAg({item:e}){let g=Mw(e.props.ref),i=U.useContext(Sm),{dragAndDropHooks:I,dragState:n,dropState:r}=U.useContext(Ow),{rowProps:C,...o}=Pog({node:e,shouldSelectOnPressUp:!!n},i,g),{isFocused:a,isFocusVisible:s,focusProps:A}=sY(),{hoverProps:l,isHovered:c}=Z8({isDisabled:!o.allowsSelection&&!o.hasAction}),{checkboxProps:u}=_og({key:e.key},i),d;n&&I&&(d=I.useDraggableItem({key:e.key,hasDragButton:!0},n));let h,m=U.useRef(null),{visuallyHiddenProps:f}=B8();r&&I&&(h=I.useDropIndicator({target:{type:"item",key:e.key,dropPosition:"on"}},r,m));let b=(I==null?void 0:I.renderDropIndicator)||(v=>N.createElement(Hag,{target:v})),p=U.useRef(null);U.useEffect(()=>{n&&!p.current&&console.warn('Draggable items in a Table must contain a